[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6N05XSVTRBQFN6TT3RT1QGK":3,"skill-same:01M6N05XSVTRBQFN6TT3RT1QGK":90},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":62,"commitSha":63,"skillDirectory":64,"forksCount":65,"repositoryHtmlUrl":66,"repositoryHomepageUrl":6,"ownerHtmlUrl":67,"ownerBlogUrl":68,"ownerDescription":69,"updatedAt":70,"install":71,"resources":83},"01M6N05XSVTRBQFN6TT3RT1QGK","correction-pipeline",null,"When the user corrects a factual error, root-cause it immediately.\nDon't just note the correction — trace the error to its source,\nfix the source, and prevent recurrence. Every factual error is\neither a data error (bad brain page, bad memory file, bad rendered\nSOUL\u002FUSER identity, bad facts row) or a hallucination (LLM\nconfabulated from partial signals).","garrytan\u002Fgbrain","garrytan","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F19957?v=4","01M6DJCCDDG53MTYYRTXAXFG17","Garry Tan","01M6MZQZCEN3RRMD33E1X9ZZR9",32847,"MIT","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Fplugin\u002Fskills\u002Fcorrection-pipeline\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"correction pipeline","pipeline","signals","when","source","you get","concepts","you","error","people","brain","get","memory","either","soul","never","fix","just","page","data","identity","2026-11-10 10:12:30",false,"---\nname: correction-pipeline\nversion: 1.0.0\ndescription: |\n  When the user corrects a factual error, root-cause it immediately.\n  Don't just note the correction — trace the error to its source,\n  fix the source, and prevent recurrence. Every factual error is\n  either a data error (bad brain page, bad memory file, bad rendered\n  SOUL\u002FUSER identity, bad facts row) or a hallucination (LLM\n  confabulated from partial signals).\ntriggers:\n  - \"that's wrong\"\n  - \"that's not true\"\n  - \"I never said that\"\n  - \"where did you get that\"\n  - \"you got that wrong\"\n  - \"correct that fact\"\n  - \"root-cause this error\"\nmutating: true\nwrites_pages: true\nwrites_to:\n  - people\u002F\n  - companies\u002F\n  - concepts\u002F\nupstream: correction-pipeline@fc834ee\nwhen_to_use: \"Use when the user asks: \\\"that's wrong\\\", \\\"that's not true\\\", \\\"I never said that\\\", \\\"where did you get that\\\", \\\"you got that wrong\\\".\"\n---\n\n# Correction Pipeline\n\n> **Convention:** see [conventions\u002Fbrain-first.md](..\u002Fconventions\u002Fbrain-first.md)\n> — Step 1 of the root-cause chain IS the brain-first lookup chain (`search`\n> for exact tokens, `query` for concept-shaped questions) before anything else.\n>\n> **Convention:** see [_brain-filing-rules.md](..\u002F_brain-filing-rules.md) —\n> corrections edit pages in place; the page stays filed by primary subject.\n\n## Trigger\n\nANY factual error the user identifies. No exceptions. No \"I'll note that.\"\n\n(Routing here is a harness convention, not a mechanical guarantee — but once\nthis skill is in play, the no-exceptions contract above is the discipline.)\n\n## Immediate Response\n\n1. **Acknowledge the error.** Don't defend. Don't explain. Just: \"You're right. I got that wrong.\"\n2. **Quote the specific wrong claim** so the user can see you know exactly what was wrong.\n3. **State the correct fact** as the user gave it.\n\n## Root Cause Analysis (do THIS, not just a memory note)\n\nRun these steps IN ORDER. Report findings to the user.\n\n### Step 1: Search the brain\n\n```bash\ngbrain search \"\u003Crelevant terms>\" --limit 10\n```\n\nFor concept-shaped or synonym-phrased claims, escalate to `gbrain query\n\"\u003Cquestion>\"` (LLM expansion recovers phrasings `search` misses). To list\nevery indexed page carrying the claim, use a keyword search (it pages every\nmatch); grep the checkout only for edits not yet synced:\n\n```bash\ngbrain search '\"\u003Cwrong claim terms>\"' --match keyword\nBRAIN_DIR=$(gbrain config get sync.repo_path)\ngrep -ri \"\u003Cwrong claim terms>\" \"$BRAIN_DIR\u002Fpeople\u002F\" \"$BRAIN_DIR\u002Fcompanies\u002F\" \"$BRAIN_DIR\u002Fconcepts\u002F\" 2>\u002Fdev\u002Fnull\n```\n\n**Question:** Is the wrong fact IN the brain? If yes → the brain is the\ncontamination source. Fix the brain page (Step 6).\n\n### Step 2: Search memory files\n\nGrep the harness's always-loaded memory files (e.g. the workspace `MEMORY.md`\nand any `memory\u002F*.md` companions — the exact location depends on your\nharness):\n\n```bash\ngrep -ri \"\u003Cwrong claim terms>\" \u003Cmemory files> 2>\u002Fdev\u002Fnull\n```\n\n**Question:** Is the wrong fact in memory? If yes → memory is the\ncontamination source. Fix the memory file.\n\n### Step 3: Check SOUL.md and USER.md\n\n```bash\ngrep -i \"\u003Crelevant terms>\" \u003Cworkspace>\u002FSOUL.md \u003Cworkspace>\u002FUSER.md 2>\u002Fdev\u002Fnull\n```\n\n**Question:** Is there a misleading passage that could have led to the wrong\ninference? SOUL.md and USER.md are in every context window — a vague or\nambiguous line here propagates into every session.\n\n**Important:** on gbrain installs these files are RENDERED from the bootstrap\nanswer bank (`state\u002Finterview.json`). Note the finding here; the fix goes\nthrough the answer bank in Step 6, never through a direct edit.\n\n### Step 4: Check the facts table\n\n```bash\ngbrain recall \u003Centity-slug>            # facts about the subject, newest first\ngbrain recall --grep \"\u003Cclaim terms>\"   # substring filter when the entity is unclear\n```\n\nIs there a wrong fact with high confidence? Note its fact id.\n\n### Step 5: Classify the error\n\n| Classification | Description | Fix surface |\n|----------------|-------------|-------------|\n| **BRAIN_ERROR** | Wrong fact exists in a brain page | Edit the page in the brain repo, commit, re-sync |\n| **MEMORY_ERROR** | Wrong fact exists in memory files | Fix the memory file |\n| **SOUL_USER_ERROR** | Misleading passage in SOUL.md or USER.md | Fix the ANSWER BANK, re-render — never the rendered file |\n| **FACTS_TABLE_ERROR** | Wrong fact in the gbrain facts table | `recall` → `forget \u003Cfact-id>` → `remember` the correction |\n| **HALLUCINATION** | No source — LLM confabulated from partial signals | Name the contamination vector (what partial signals led to it), write a guard fact |\n| **STALE_DATA** | Fact was once true but is no longer | Update the source with current truth; supersede the stale fact |\n| **CROSS_CONTAMINATION** | Correct fact about person A attributed to person B | Fix attribution in the source — on BOTH entities |\n\n### Step 6: Fix the source\n\n- **BRAIN_ERROR:** Edit the page file in the brain repo. Include\n  `[Source: user correction, YYYY-MM-DD]` on the corrected line. Commit, then\n  `gbrain sync` so the DB reflects the fix. (Editing the DB row without the\n  repo file — or vice versa — leaves the two out of agreement until the next\n  sync overwrites one of them.)\n- **MEMORY_ERROR:** Edit the memory file. Add a correction note with date.\n- **SOUL_USER_ERROR:** NEVER edit SOUL.md \u002F USER.md directly — they are\n  rendered files, and a hand edit is silently lost on the next render. Fix the\n  underlying answer in the shared bootstrap answer bank, then re-render:\n  ```bash\n  gbrain bootstrap interview --set KEY \"corrected value\"   # verbatim, user's words\n  gbrain bootstrap interview --show                        # read back\n  gbrain bootstrap interview --status                      # get the confirm hash\n  gbrain bootstrap interview --confirm \u003Chash>\n  gbrain bootstrap render --only SOUL.md --force           # repeat per affected file\n  ```\n  The full interview discipline (read-back ritual, verbatim answers, backup\n  behavior) lives in `skills\u002Fsoul-audit\u002FSKILL.md` — route through it for\n  anything beyond a single-key fix.\n- **FACTS_TABLE_ERROR:** Expire the wrong row and write the correction with\n  provenance:\n  ```bash\n  gbrain recall \u003Centity-slug>                                  # find the fact id\n  gbrain forget \u003Cfact-id>                                      # expire the wrong fact\n  gbrain remember \"\u003Ccorrect fact>\" \\\n    --provenance \"user correction, YYYY-MM-DD\" --entity \u003Centity-slug>\n  ```\n- **HALLUCINATION:** There is no source to fix. Identify the partial signal\n  that seeded the confabulation, then write a guard so it can't reseed:\n  ```bash\n  gbrain remember \"WRONG: \u003Cwhat was said>. RIGHT: \u003Cwhat is true>. Guard: \u003Cinstruction to prevent recurrence>\" \\\n    --provenance \"user correction, YYYY-MM-DD (hallucination guard)\" --entity \u003Centity-slug>\n  ```\n- **STALE_DATA:** Update the source page with current truth (BRAIN_ERROR\n  flow), and supersede any stale facts rows (`forget` + `remember` with the\n  current truth and fresh provenance).\n- **CROSS_CONTAMINATION:** Fix the attribution at the source, then check BOTH\n  entities: person A's page and facts (does the fact now live where it\n  belongs?) and person B's page and facts (is every trace of the\n  misattribution gone?).\n\n### Step 7: Check for propagation\n\nThe wrong fact may have propagated into OTHER brain pages, synthesis output,\nor memory files.\n\n```bash\ngbrain search '\"\u003Cwrong claim terms>\"' --match keyword\ngrep -ri \"\u003Cwrong claim terms>\" \"$BRAIN_DIR\" 2>\u002Fdev\u002Fnull | grep -v \".git\"   # edits not yet synced\n```\n\nFix ALL instances, not just the first one found. Re-sync after repo edits.\n\n### Step 8: Report to the user\n\nShort report:\n\n```\n**Error:** [what was wrong]\n**Root cause:** [BRAIN_ERROR | HALLUCINATION | etc.]\n**Source:** [specific file\u002Fline or fact id, or \"no source — confabulated from X\"]\n**Fixed:** [what was changed, where]\n**Propagation:** [other files fixed, or \"no propagation found\"]\n```\n\n## Severity Tiers\n\n| Tier | Description | Action |\n|------|-------------|--------|\n| **S1 — Identity error** | Wrong facts about the user's family, heritage, history, core identity | Fix immediately. These contaminate EVERYTHING — every synthesis, every book mirror, every conversation. |\n| **S2 — Entity error** | Wrong facts about a person, company, deal in the brain | Fix brain page, check propagation |\n| **S3 — Context error** | Wrong inference about the user's current state, feelings, situation | Guard fact via `remember`. Usually hallucination. |\n| **S4 — Minor factual** | Wrong date, wrong number, wrong detail | Fix source, no propagation check needed |\n\n## Recurring Error Patterns to Watch\n\n| Pattern | Example | Guard |\n|---------|---------|-------|\n| Projecting therapeutic narratives | \"You've been avoiding the hard conversation with your cofounder\" (no evidence) | Check calendar\u002Fbehavior data before making claims about the user's actions or state |\n| Autocorrecting names to famous people | A contact named alice-example Cho silently becomes the similarly-named celebrity | The user's people outrank world-famous people — resolve against `people\u002F` first |\n| Confusing takes with facts | Dumping takes-table beliefs into facts | Takes = other people's beliefs. Facts = the user's personal knowledge. |\n| Enumerative claims from session context only | \"You've worked at two companies\" — missing the one only recorded in the brain | NEVER make enumerative claims (\"all your X,\" \"every Y,\" \"the three times you Z\") without searching the brain first. Session context is always incomplete. |\n| Missing data in always-loaded files | A core fact lives only in a brain page, not in USER.md\u002FMEMORY.md, so every session re-derives it wrong | When a correction reveals a gap in an always-loaded file, ADD the missing data through the proper surface (answer bank for rendered files, direct edit for memory files) so it's in every future context window |\n\n## Complement: the contradictions probe\n\nThis skill is REACTIVE — it fires when the user catches an error. The shipped\ncontradictions probe is the PROACTIVE side of the same discipline: it finds\nintra-brain conflicts before the user does.\n\n```bash\ngbrain eval suspected-contradictions   # run the probe\ngbrain find-contradictions             # read the latest run's findings\n```\n\nIf a correction reveals a class of conflict (e.g. two pages disagreeing about\na date), run the probe afterward — the same contamination pattern may exist\nelsewhere in the brain.\n\n## Contract\n\nThis skill guarantees:\n\n- Every factual error gets root-caused, not just noted\n- Source fixes land at the REAL fix surface for the error class (page edit +\n  commit + re-sync; `forget`\u002F`remember` for facts rows; answer bank + re-render\n  for SOUL\u002FUSER — never a direct edit to a rendered file)\n- Propagation is checked (whole-brain grep + `gbrain search`)\n- The user gets a clear report of what was wrong, why, and what was fixed\n- Routing matches the canonical triggers in the frontmatter\n- Privacy contract preserved: no real names, no fork-specific filesystem path\n  literals, no upstream-fork references\n\n## Output Format\n\nThe skill's output is the Step 8 root-cause report delivered inline during the\nconversation, plus all source fixes applied (brain-repo edits committed and\nre-synced; facts rows expired\u002Fsuperseded; identity files re-rendered from the\nanswer bank).\n\n## Dedup (sharp boundaries)\n\n- `skills\u002Fmaintain\u002FSKILL.md` — PROACTIVE brain health (stale pages, orphans,\n  citations, doctor). This skill is REACTIVE: a specific user correction gets\n  traced to its contamination source. If nobody said \"that's wrong,\" it's\n  maintain's territory.\n- The contradictions probe (`gbrain eval suspected-contradictions` \u002F\n  `gbrain find-contradictions`) — PROACTIVE intra-brain conflict detection.\n  Complementary, not overlapping: the probe finds conflicts between two brain\n  sources; this skill starts from a correction supplied by the user.\n- `skills\u002Fsoul-audit\u002FSKILL.md` — the full identity re-interview surface. This\n  skill DELEGATES to it for SOUL_USER_ERROR fixes; it never re-implements the\n  interview or render flow.\n- `skills\u002Fcitation-fixer\u002FSKILL.md` — citation FORMAT compliance. Correcting a\n  claim's truth is this skill; fixing how a true claim is cited is\n  citation-fixer.\n- frontmatter-guard (host-side) — structural page validation (YAML shape),\n  not claim truth.\n\n## When it fails\n\nFollow the [agent operator protocol](..\u002Fconventions\u002Fagent-operator-protocol.md) for any gbrain error `code`, exit code, `[AGENT]` block or notice block. Specific to this skill:\n\n- `forget \u003Cfact-id>` \u002F `remember` returns `fact_not_found` or `fact_already_expired`: re-run `recall` to get the current fact id; never forget by guessing an id.\n- A page fix returns `revision_conflict`: re-read the page, apply the correction to the current text, and save with the new revision.\n- `write_pending` (exit 10): the correction is accepted but not committed; poll `gbrain write-request \u003Crequest_id>` before telling the user it is fixed.\n\n## Anti-Patterns\n\n- **\"Noted, I'll remember that.\"** NO. Trace the source. Fix the source.\n- **Fixing only memory without checking the brain.** The brain is the\n  persistent store. Memory gets flushed.\n- **Editing SOUL.md \u002F USER.md directly.** They're rendered from the answer\n  bank; the hand edit dies on the next render and the error comes back. Fix\n  the answer, re-render.\n- **Editing the brain-repo file without re-syncing (or the DB row without\n  committing).** The two stores drift and the next sync resurrects the error.\n- **Fixing one instance without checking propagation.** Wrong facts spread.\n- **Blaming the hallucination without identifying the partial signal.** Every\n  hallucination has a seed — find it.\n- **Defensive response.** Never explain why you got it wrong before\n  acknowledging it's wrong.\n","# Correction Pipeline\n\n> **Convention:** see [conventions\u002Fbrain-first.md](..\u002Fconventions\u002Fbrain-first.md)\n> — Step 1 of the root-cause chain IS the brain-first lookup chain (`search`\n> for exact tokens, `query` for concept-shaped questions) before anything else.\n>\n> **Convention:** see [_brain-filing-rules.md](..\u002F_brain-filing-rules.md) —\n> corrections edit pages in place; the page stays filed by primary subject.\n\n## Trigger\n\nANY factual error the user identifies. No exceptions. No \"I'll note that.\"\n\n(Routing here is a harness convention, not a mechanical guarantee — but once\nthis skill is in play, the no-exceptions contract above is the discipline.)\n\n## Immediate Response\n\n1. **Acknowledge the error.** Don't defend. Don't explain. Just: \"You're right. I got that wrong.\"\n2. **Quote the specific wrong claim** so the user can see you know exactly what was wrong.\n3. **State the correct fact** as the user gave it.\n\n## Root Cause Analysis (do THIS, not just a memory note)\n\nRun these steps IN ORDER. Report findings to the user.\n\n### Step 1: Search the brain\n\n```bash\ngbrain search \"\u003Crelevant terms>\" --limit 10\n```\n\nFor concept-shaped or synonym-phrased claims, escalate to `gbrain query\n\"\u003Cquestion>\"` (LLM expansion recovers phrasings `search` misses). To list\nevery indexed page carrying the claim, use a keyword search (it pages every\nmatch); grep the checkout only for edits not yet synced:\n\n```bash\ngbrain search '\"\u003Cwrong claim terms>\"' --match keyword\nBRAIN_DIR=$(gbrain config get sync.repo_path)\ngrep -ri \"\u003Cwrong claim terms>\" \"$BRAIN_DIR\u002Fpeople\u002F\" \"$BRAIN_DIR\u002Fcompanies\u002F\" \"$BRAIN_DIR\u002Fconcepts\u002F\" 2>\u002Fdev\u002Fnull\n```\n\n**Question:** Is the wrong fact IN the brain? If yes → the brain is the\ncontamination source. Fix the brain page (Step 6).\n\n### Step 2: Search memory files\n\nGrep the harness's always-loaded memory files (e.g. the workspace `MEMORY.md`\nand any `memory\u002F*.md` companions — the exact location depends on your\nharness):\n\n```bash\ngrep -ri \"\u003Cwrong claim terms>\" \u003Cmemory files> 2>\u002Fdev\u002Fnull\n```\n\n**Question:** Is the wrong fact in memory? If yes → memory is the\ncontamination source. Fix the memory file.\n\n### Step 3: Check SOUL.md and USER.md\n\n```bash\ngrep -i \"\u003Crelevant terms>\" \u003Cworkspace>\u002FSOUL.md \u003Cworkspace>\u002FUSER.md 2>\u002Fdev\u002Fnull\n```\n\n**Question:** Is there a misleading passage that could have led to the wrong\ninference? SOUL.md and USER.md are in every context window — a vague or\nambiguous line here propagates into every session.\n\n**Important:** on gbrain installs these files are RENDERED from the bootstrap\nanswer bank (`state\u002Finterview.json`). Note the finding here; the fix goes\nthrough the answer bank in Step 6, never through a direct edit.\n\n### Step 4: Check the facts table\n\n```bash\ngbrain recall \u003Centity-slug>            # facts about the subject, newest first\ngbrain recall --grep \"\u003Cclaim terms>\"   # substring filter when the entity is unclear\n```\n\nIs there a wrong fact with high confidence? Note its fact id.\n\n### Step 5: Classify the error\n\n| Classification | Description | Fix surface |\n|----------------|-------------|-------------|\n| **BRAIN_ERROR** | Wrong fact exists in a brain page | Edit the page in the brain repo, commit, re-sync |\n| **MEMORY_ERROR** | Wrong fact exists in memory files | Fix the memory file |\n| **SOUL_USER_ERROR** | Misleading passage in SOUL.md or USER.md | Fix the ANSWER BANK, re-render — never the rendered file |\n| **FACTS_TABLE_ERROR** | Wrong fact in the gbrain facts table | `recall` → `forget \u003Cfact-id>` → `remember` the correction |\n| **HALLUCINATION** | No source — LLM confabulated from partial signals | Name the contamination vector (what partial signals led to it), write a guard fact |\n| **STALE_DATA** | Fact was once true but is no longer | Update the source with current truth; supersede the stale fact |\n| **CROSS_CONTAMINATION** | Correct fact about person A attributed to person B | Fix attribution in the source — on BOTH entities |\n\n### Step 6: Fix the source\n\n- **BRAIN_ERROR:** Edit the page file in the brain repo. Include\n  `[Source: user correction, YYYY-MM-DD]` on the corrected line. Commit, then\n  `gbrain sync` so the DB reflects the fix. (Editing the DB row without the\n  repo file — or vice versa — leaves the two out of agreement until the next\n  sync overwrites one of them.)\n- **MEMORY_ERROR:** Edit the memory file. Add a correction note with date.\n- **SOUL_USER_ERROR:** NEVER edit SOUL.md \u002F USER.md directly — they are\n  rendered files, and a hand edit is silently lost on the next render. Fix the\n  underlying answer in the shared bootstrap answer bank, then re-render:\n  ```bash\n  gbrain bootstrap interview --set KEY \"corrected value\"   # verbatim, user's words\n  gbrain bootstrap interview --show                        # read back\n  gbrain bootstrap interview --status                      # get the confirm hash\n  gbrain bootstrap interview --confirm \u003Chash>\n  gbrain bootstrap render --only SOUL.md --force           # repeat per affected file\n  ```\n  The full interview discipline (read-back ritual, verbatim answers, backup\n  behavior) lives in `skills\u002Fsoul-audit\u002FSKILL.md` — route through it for\n  anything beyond a single-key fix.\n- **FACTS_TABLE_ERROR:** Expire the wrong row and write the correction with\n  provenance:\n  ```bash\n  gbrain recall \u003Centity-slug>                                  # find the fact id\n  gbrain forget \u003Cfact-id>                                      # expire the wrong fact\n  gbrain remember \"\u003Ccorrect fact>\" \\\n    --provenance \"user correction, YYYY-MM-DD\" --entity \u003Centity-slug>\n  ```\n- **HALLUCINATION:** There is no source to fix. Identify the partial signal\n  that seeded the confabulation, then write a guard so it can't reseed:\n  ```bash\n  gbrain remember \"WRONG: \u003Cwhat was said>. RIGHT: \u003Cwhat is true>. Guard: \u003Cinstruction to prevent recurrence>\" \\\n    --provenance \"user correction, YYYY-MM-DD (hallucination guard)\" --entity \u003Centity-slug>\n  ```\n- **STALE_DATA:** Update the source page with current truth (BRAIN_ERROR\n  flow), and supersede any stale facts rows (`forget` + `remember` with the\n  current truth and fresh provenance).\n- **CROSS_CONTAMINATION:** Fix the attribution at the source, then check BOTH\n  entities: person A's page and facts (does the fact now live where it\n  belongs?) and person B's page and facts (is every trace of the\n  misattribution gone?).\n\n### Step 7: Check for propagation\n\nThe wrong fact may have propagated into OTHER brain pages, synthesis output,\nor memory files.\n\n```bash\ngbrain search '\"\u003Cwrong claim terms>\"' --match keyword\ngrep -ri \"\u003Cwrong claim terms>\" \"$BRAIN_DIR\" 2>\u002Fdev\u002Fnull | grep -v \".git\"   # edits not yet synced\n```\n\nFix ALL instances, not just the first one found. Re-sync after repo edits.\n\n### Step 8: Report to the user\n\nShort report:\n\n```\n**Error:** [what was wrong]\n**Root cause:** [BRAIN_ERROR | HALLUCINATION | etc.]\n**Source:** [specific file\u002Fline or fact id, or \"no source — confabulated from X\"]\n**Fixed:** [what was changed, where]\n**Propagation:** [other files fixed, or \"no propagation found\"]\n```\n\n## Severity Tiers\n\n| Tier | Description | Action |\n|------|-------------|--------|\n| **S1 — Identity error** | Wrong facts about the user's family, heritage, history, core identity | Fix immediately. These contaminate EVERYTHING — every synthesis, every book mirror, every conversation. |\n| **S2 — Entity error** | Wrong facts about a person, company, deal in the brain | Fix brain page, check propagation |\n| **S3 — Context error** | Wrong inference about the user's current state, feelings, situation | Guard fact via `remember`. Usually hallucination. |\n| **S4 — Minor factual** | Wrong date, wrong number, wrong detail | Fix source, no propagation check needed |\n\n## Recurring Error Patterns to Watch\n\n| Pattern | Example | Guard |\n|---------|---------|-------|\n| Projecting therapeutic narratives | \"You've been avoiding the hard conversation with your cofounder\" (no evidence) | Check calendar\u002Fbehavior data before making claims about the user's actions or state |\n| Autocorrecting names to famous people | A contact named alice-example Cho silently becomes the similarly-named celebrity | The user's people outrank world-famous people — resolve against `people\u002F` first |\n| Confusing takes with facts | Dumping takes-table beliefs into facts | Takes = other people's beliefs. Facts = the user's personal knowledge. |\n| Enumerative claims from session context only | \"You've worked at two companies\" — missing the one only recorded in the brain | NEVER make enumerative claims (\"all your X,\" \"every Y,\" \"the three times you Z\") without searching the brain first. Session context is always incomplete. |\n| Missing data in always-loaded files | A core fact lives only in a brain page, not in USER.md\u002FMEMORY.md, so every session re-derives it wrong | When a correction reveals a gap in an always-loaded file, ADD the missing data through the proper surface (answer bank for rendered files, direct edit for memory files) so it's in every future context window |\n\n## Complement: the contradictions probe\n\nThis skill is REACTIVE — it fires when the user catches an error. The shipped\ncontradictions probe is the PROACTIVE side of the same discipline: it finds\nintra-brain conflicts before the user does.\n\n```bash\ngbrain eval suspected-contradictions   # run the probe\ngbrain find-contradictions             # read the latest run's findings\n```\n\nIf a correction reveals a class of conflict (e.g. two pages disagreeing about\na date), run the probe afterward — the same contamination pattern may exist\nelsewhere in the brain.\n\n## Contract\n\nThis skill guarantees:\n\n- Every factual error gets root-caused, not just noted\n- Source fixes land at the REAL fix surface for the error class (page edit +\n  commit + re-sync; `forget`\u002F`remember` for facts rows; answer bank + re-render\n  for SOUL\u002FUSER — never a direct edit to a rendered file)\n- Propagation is checked (whole-brain grep + `gbrain search`)\n- The user gets a clear report of what was wrong, why, and what was fixed\n- Routing matches the canonical triggers in the frontmatter\n- Privacy contract preserved: no real names, no fork-specific filesystem path\n  literals, no upstream-fork references\n\n## Output Format\n\nThe skill's output is the Step 8 root-cause report delivered inline during the\nconversation, plus all source fixes applied (brain-repo edits committed and\nre-synced; facts rows expired\u002Fsuperseded; identity files re-rendered from the\nanswer bank).\n\n## Dedup (sharp boundaries)\n\n- `skills\u002Fmaintain\u002FSKILL.md` — PROACTIVE brain health (stale pages, orphans,\n  citations, doctor). This skill is REACTIVE: a specific user correction gets\n  traced to its contamination source. If nobody said \"that's wrong,\" it's\n  maintain's territory.\n- The contradictions probe (`gbrain eval suspected-contradictions` \u002F\n  `gbrain find-contradictions`) — PROACTIVE intra-brain conflict detection.\n  Complementary, not overlapping: the probe finds conflicts between two brain\n  sources; this skill starts from a correction supplied by the user.\n- `skills\u002Fsoul-audit\u002FSKILL.md` — the full identity re-interview surface. This\n  skill DELEGATES to it for SOUL_USER_ERROR fixes; it never re-implements the\n  interview or render flow.\n- `skills\u002Fcitation-fixer\u002FSKILL.md` — citation FORMAT compliance. Correcting a\n  claim's truth is this skill; fixing how a true claim is cited is\n  citation-fixer.\n- frontmatter-guard (host-side) — structural page validation (YAML shape),\n  not claim truth.\n\n## When it fails\n\nFollow the [agent operator protocol](..\u002Fconventions\u002Fagent-operator-protocol.md) for any gbrain error `code`, exit code, `[AGENT]` block or notice block. Specific to this skill:\n\n- `forget \u003Cfact-id>` \u002F `remember` returns `fact_not_found` or `fact_already_expired`: re-run `recall` to get the current fact id; never forget by guessing an id.\n- A page fix returns `revision_conflict`: re-read the page, apply the correction to the current text, and save with the new revision.\n- `write_pending` (exit 10): the correction is accepted but not committed; poll `gbrain write-request \u003Crequest_id>` before telling the user it is fixed.\n\n## Anti-Patterns\n\n- **\"Noted, I'll remember that.\"** NO. Trace the source. Fix the source.\n- **Fixing only memory without checking the brain.** The brain is the\n  persistent store. Memory gets flushed.\n- **Editing SOUL.md \u002F USER.md directly.** They're rendered from the answer\n  bank; the hand edit dies on the next render and the error comes back. Fix\n  the answer, re-render.\n- **Editing the brain-repo file without re-syncing (or the DB row without\n  committing).** The two stores drift and the next sync resurrects the error.\n- **Fixing one instance without checking propagation.** Wrong facts spread.\n- **Blaming the hallucination without identifying the partial signal.** Every\n  hallucination has a seed — find it.\n- **Defensive response.** Never explain why you got it wrong before\n  acknowledging it's wrong.\n",{"name":5,"version":45,"mutating":46,"triggers":47,"upstream":55,"writes_to":56,"description":60,"when_to_use":61,"writes_pages":46},"1.0.0",true,[48,49,50,51,52,53,54],"that's wrong","that's not true","I never said that","where did you get that","you got that wrong","correct that fact","root-cause this error","correction-pipeline@fc834ee",[57,58,59],"people\u002F","companies\u002F","concepts\u002F","When the user corrects a factual error, root-cause it immediately.\nDon't just note the correction — trace the error to its source,\nfix the source, and prevent recurrence. Every factual error is\neither a data error (bad brain page, bad memory file, bad rendered\nSOUL\u002FUSER identity, bad facts row) or a hallucination (LLM\nconfabulated from partial signals).\n","Use when the user asks: \"that's wrong\", \"that's not true\", \"I never said that\", \"where did you get that\", \"you got that wrong\".","master","074ec301549ded4930f04d2c3b22d709a6c095cc","plugin\u002Fskills\u002Fcorrection-pipeline",4902,"https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain","https:\u002F\u002Fgithub.com\u002Fgarrytan","https:\u002F\u002Fblog.garrytan.com","Writes software, dreams. ","2026-11-14 04:11:30",{"source":8,"skillName":5,"commands":72,"prompt":82,"zipAvailable":46},[73,76,79],{"tool":74,"command":75},"npx","npx skills add garrytan\u002Fgbrain --skill correction-pipeline",{"tool":77,"command":78},"bunx","bunx skills add garrytan\u002Fgbrain --skill correction-pipeline",{"tool":80,"command":81},"pnpm","pnpm dlx skills add garrytan\u002Fgbrain --skill correction-pipeline","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Fplugin\u002Fskills\u002Fcorrection-pipeline\u002FSKILL.md",[84],{"path":85,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":88,"sourceHtmlUrl":89},"routing-eval.jsonl","OTHER","其他",1358,"https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Fplugin\u002Fskills\u002Fcorrection-pipeline\u002Frouting-eval.jsonl",[91,103,109,129,155,169],{"skillNo":92,"name":93,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":40},"01M6N109FNGH1PK49T734PZXGB","query-helper","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog\u002Fskills\u002Fquery-helper\u002FSKILL.md",[],[97,98,99,100,37,101,102],"query helper","helper","query","search","find","false",{"skillNo":104,"name":105,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":40},"01M6N108A23GW6NGQEQ0E7GV0A","broken","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog\u002Fskills\u002Fbroken\u002FSKILL.md",[],[105],{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":40},"01M6N105E88C5K2H03H0CC79G1","brain-ops","Read, enrich, and write brain pages with source attribution.","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog\u002Fskills\u002Fbrain-ops\u002FSKILL.md",[],[116,29,117,118,119,37,120,121,122,123,99,124,28,125,126,127,128,23,100],"brain ops","ops","true","attribution","read","write","up","look","pages","with","enrich","web","path",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":140,"publishedAt":40},"01M6N102GRMF22TVCNT6RK5MRD","meeting-prep","Build a briefing before you meet someone, from their recent threads, open loops and what they care about.","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog-query\u002Fskills\u002Fmeeting-prep\u002FSKILL.md",[135],{"categoryNo":136,"categoryName":137,"taxonomyType":138,"taxonomyTypeDesc":139},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[141,142,143,144,145,100,146,147,148,99,102,149,150,26,151,152,153,154],"meeting","prep","meeting prep","me","prepare","brief","open","build","loops","about","briefing","threads","for","Meet",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":161,"publishedAt":40},"01M6N1005QK7REHX5KGMNR5PF0","inbox-zero","Triage the inbox into replies, delegations and archives.","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog-query\u002Fskills\u002Finbox-zero\u002FSKILL.md",[],[162,163,164,100,165,102,166,167,168],"inbox zero","ZeRO","inbox","clear","replies","my","triage",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":40},"01M6N0ZXQ8RRRW71PNV61T57GP","deal-memo","Draft an investment memo from the deal pages and the founder history already in the brain.","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog-query\u002Fskills\u002Fdeal-memo\u002FSKILL.md",[],[176,177,178,124,29,179,180,121,181,118,100,182],"deal memo","deal","memo","draft","investment","history","founder"]