geneseed 2.0.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/CHANGELOG.md +217 -5
  2. package/DESIGN.md +149 -1326
  3. package/QUICKSTART.md +1 -1
  4. package/README.md +30 -22
  5. package/SETUP.md +98 -24
  6. package/SHIPPED.md +6 -5
  7. package/adapters/bob/README.md +3 -3
  8. package/adapters/claude-code/README.md +6 -4
  9. package/adapters/claude-code/skills/geneseed/SKILL.md +10 -6
  10. package/adapters/copilot/README.md +5 -4
  11. package/adapters/opencode/GLOBAL-HARNESS-SPEC.md +11 -6
  12. package/adapters/opencode/HOW-OPENCODE-LOADS.md +1 -1
  13. package/adapters/opencode/README.md +15 -9
  14. package/adapters/opencode/agents/orchestrator.md +1 -1
  15. package/adapters/opencode/opencode.json +0 -9
  16. package/adapters/opencode/plugins/geneseed-context.js +7 -7
  17. package/adapters/opencode/plugins/geneseed-guard.js +6 -6
  18. package/adapters/opencode/workflows/dispatch.js +1 -1
  19. package/bin/geneseed.mjs +74 -8
  20. package/docs/declined.md +53 -2
  21. package/docs/design-history.md +1290 -0
  22. package/docs/extending.md +672 -0
  23. package/docs/limits.md +141 -82
  24. package/docs/token-footprint.md +15 -4
  25. package/docs/web/agents.md +1 -1
  26. package/docs/web/authoring.md +1 -1
  27. package/docs/web/claude-hooks.md +2 -2
  28. package/docs/web/collaboration.md +3 -3
  29. package/docs/web/first-session.md +2 -2
  30. package/docs/web/footprint.md +14 -7
  31. package/docs/web/foreman-mode.md +2 -2
  32. package/docs/web/harnesses.md +5 -3
  33. package/docs/web/install-quick.md +1 -1
  34. package/docs/web/model.md +3 -3
  35. package/docs/web/plugin-context.md +2 -2
  36. package/docs/web/plugin-guard.md +3 -3
  37. package/docs/web/plugin-ponytail.md +1 -1
  38. package/docs/web/rules.md +23 -3
  39. package/docs/web/setup-choices.md +20 -7
  40. package/docs/web/themes-author.md +13 -1
  41. package/docs/web-ui.md +36 -12
  42. package/geneseed +0 -0
  43. package/harness.config.json +1 -1
  44. package/js/catalog.mjs +29 -4
  45. package/js/checkout.mjs +24 -1
  46. package/js/cli-table.json +9 -7
  47. package/js/diff.mjs +8 -3
  48. package/js/doctor.mjs +374 -26
  49. package/js/emit.mjs +48 -11
  50. package/js/generate.mjs +39 -5
  51. package/js/hooks.mjs +8 -7
  52. package/js/installs.mjs +101 -4
  53. package/js/inventory.mjs +150 -20
  54. package/js/lib/fs.mjs +6 -2
  55. package/js/mcp.mjs +3 -15
  56. package/js/migrate.mjs +10 -4
  57. package/js/render.mjs +116 -11
  58. package/js/settings.mjs +297 -28
  59. package/js/setup.mjs +95 -5
  60. package/js/status.mjs +45 -4
  61. package/js/themes.mjs +1 -1
  62. package/js/tui.mjs +46 -3
  63. package/js/uninstall.mjs +30 -11
  64. package/js/web/actions.mjs +76 -9
  65. package/js/web/api.mjs +95 -16
  66. package/js/web/docs.mjs +33 -5
  67. package/js/web/jobs.mjs +12 -3
  68. package/js/web/server.mjs +59 -2
  69. package/package.json +1 -1
  70. package/src/AGENT.md.tmpl +75 -65
  71. package/src/agents/_template.md +4 -4
  72. package/src/agents/advocate.md +4 -4
  73. package/src/agents/architect.md +2 -2
  74. package/src/agents/developer.md +5 -5
  75. package/src/agents/docs.md +2 -2
  76. package/src/agents/empiricist.md +3 -3
  77. package/src/agents/explorer.md +3 -3
  78. package/src/agents/framer.md +3 -3
  79. package/src/agents/historian.md +3 -3
  80. package/src/agents/operator.md +3 -3
  81. package/src/agents/pragmatist.md +3 -3
  82. package/src/agents/reviewer.md +2 -2
  83. package/src/agents/security.md +2 -2
  84. package/src/agents/skeptic.md +4 -4
  85. package/src/agents/steward.md +3 -3
  86. package/src/agents/tester.md +2 -2
  87. package/src/agents/user-advocate.md +3 -3
  88. package/src/agents/visionary.md +3 -3
  89. package/src/doctrines/README.md +41 -0
  90. package/src/doctrines/craft.md +51 -0
  91. package/src/doctrines/ops.md +61 -0
  92. package/src/doctrines/process.md +87 -0
  93. package/src/doctrines/rigor.md +52 -0
  94. package/src/laws/universal.md +17 -301
  95. package/src/memory/README.md +2 -2
  96. package/src/modes/README.md +2 -2
  97. package/src/modes/foreman.md +1 -1
  98. package/src/notebook/README.md +2 -2
  99. package/src/ontology/universal.md +89 -0
  100. package/src/postures/README.md +3 -3
  101. package/src/postures/artisan.md +3 -3
  102. package/src/postures/assistant.md +1 -1
  103. package/src/postures/expert.md +1 -1
  104. package/src/postures/mentor.md +1 -1
  105. package/src/postures/peer.md +2 -2
  106. package/src/skills/_template.md +2 -2
  107. package/src/skills/brainstorm.md +2 -2
  108. package/src/skills/clarify.md +2 -2
  109. package/src/skills/codebase-design.md +1 -1
  110. package/src/skills/commit.md +5 -5
  111. package/src/skills/council.md +4 -4
  112. package/src/skills/crash-course.md +1 -1
  113. package/src/skills/daydream/SKILL.md +1 -1
  114. package/src/skills/debug.md +2 -2
  115. package/src/skills/decode.md +1 -1
  116. package/src/skills/develop.md +6 -6
  117. package/src/skills/document-project.md +4 -4
  118. package/src/skills/domain-modeling.md +1 -1
  119. package/src/skills/drill.md +1 -1
  120. package/src/skills/feynman.md +1 -1
  121. package/src/skills/forge-mcp.md +3 -3
  122. package/src/skills/fresh-eyes.md +4 -4
  123. package/src/skills/frontend-design.md +1 -1
  124. package/src/skills/gap-detector.md +1 -1
  125. package/src/skills/geneseed-code-review.md +1 -1
  126. package/src/skills/geneseed.md +4 -4
  127. package/src/skills/git-archaeology.md +1 -1
  128. package/src/skills/git-rescue.md +3 -3
  129. package/src/skills/handoff.md +4 -4
  130. package/src/skills/herdr.md +1 -1
  131. package/src/skills/ingest.md +3 -3
  132. package/src/skills/learning-path.md +1 -1
  133. package/src/skills/migrate.md +5 -5
  134. package/src/skills/opencode-theme.md +1 -1
  135. package/src/skills/parallel-agents.md +2 -2
  136. package/src/skills/pipeline.md +2 -2
  137. package/src/skills/plan.md +2 -2
  138. package/src/skills/ponytail.md +1 -1
  139. package/src/skills/profile.md +1 -1
  140. package/src/skills/prose.md +2 -2
  141. package/src/skills/prototype.md +2 -2
  142. package/src/skills/refactor.md +2 -2
  143. package/src/skills/release.md +4 -4
  144. package/src/skills/repo-map.md +5 -5
  145. package/src/skills/research.md +6 -6
  146. package/src/skills/review-response.md +3 -3
  147. package/src/skills/roast-me.md +1 -1
  148. package/src/skills/rule.md +5 -5
  149. package/src/skills/ship.md +3 -3
  150. package/src/skills/tdd.md +2 -2
  151. package/src/skills/tickets.md +1 -1
  152. package/src/skills/wayfinder.md +1 -1
  153. package/src/skills/wiki.md +4 -4
  154. package/src/skills/workflow.md +2 -2
  155. package/themes/README.md +17 -7
  156. package/themes/_TEMPLATE.json +37 -33
  157. package/themes/biker.json +37 -33
  158. package/themes/commentator.json +37 -33
  159. package/themes/cyberpunk.json +37 -33
  160. package/themes/gamer.json +37 -33
  161. package/themes/imperial.json +37 -33
  162. package/themes/joker.json +37 -33
  163. package/themes/marvin.json +37 -33
  164. package/themes/mean.json +37 -33
  165. package/themes/military.json +37 -33
  166. package/themes/neutral.json +37 -33
  167. package/themes/pirate.json +37 -33
  168. package/themes/sports.json +37 -33
  169. package/themes/verstappen.json +37 -33
  170. package/themes/wizard.json +37 -33
  171. package/web/dist/assets/{About-DX1-VTBP.js → About-C0Mk0igT.js} +1 -1
  172. package/web/dist/assets/{Activity-Dp9NaXOn.js → Activity-C4aJJVXz.js} +1 -1
  173. package/web/dist/assets/{ActivityDetail-HpOBtrXS.js → ActivityDetail-DaQ85za0.js} +1 -1
  174. package/web/dist/assets/{Diff-Ct4G3Se8.js → Diff-B3tlO2Yj.js} +1 -1
  175. package/web/dist/assets/{Doctor-DGjkZFuA.js → Doctor-BNC-5Dmo.js} +1 -1
  176. package/web/dist/assets/{Graph-b8o-S6kv.js → Graph-us0T6ZcV.js} +1 -1
  177. package/web/dist/assets/Harnesses-DAMgyfM_.js +1 -0
  178. package/web/dist/assets/Laws-rOxegJ75.js +1 -0
  179. package/web/dist/assets/{Library-BEZscyaQ.js → Library-KmwrHA1J.js} +1 -1
  180. package/web/dist/assets/{Markdown-k_LSLBGq.js → Markdown-0eQOVGSF.js} +1 -1
  181. package/web/dist/assets/{Profile-DydukTxP.js → Profile-ZU7WV6Xl.js} +1 -1
  182. package/web/dist/assets/{Rules-CIRG4Ldt.js → Rules-CtDoPhhf.js} +1 -1
  183. package/web/dist/assets/{Skills-Buoi1IBr.js → Skills-BhoOxdkD.js} +1 -1
  184. package/web/dist/assets/{StatusBadge-CE_AJttl.js → StatusBadge-CGvYVCwa.js} +1 -1
  185. package/web/dist/assets/{Themes-CI4o3gJC.js → Themes-Dr7OOkD7.js} +1 -1
  186. package/web/dist/assets/{activity-BCW7e6Cy.js → activity-B8aq3qtl.js} +1 -1
  187. package/web/dist/assets/index-2wqPDxuN.css +1 -0
  188. package/web/dist/assets/{index-B1PIx7RM.js → index-AhMzkdbI.js} +1 -1
  189. package/web/dist/assets/index-CRftEtBX.js +12 -0
  190. package/web/dist/assets/{index-Ck2iCdaC.js → index-D0lPN_qW.js} +1 -1
  191. package/web/dist/index.html +2 -2
  192. package/web/src/pages/Laws.jsx +282 -88
  193. package/web/dist/assets/Harnesses-gr3-aHBF.js +0 -1
  194. package/web/dist/assets/Laws-DTwF5tTC.js +0 -1
  195. package/web/dist/assets/index-BnTQUSUz.js +0 -12
  196. package/web/dist/assets/index-DUCsDv7z.css +0 -1
@@ -5,7 +5,7 @@
5
5
  **Trigger:** a task or whole project arrives with its goal, scope, or success criteria unstated or ambiguous — including non-design work (a refactor, migration, ops chore, investigation) — or the user says "interview me" / "what am I actually trying to do" / "clarify this first". If a concrete design problem is already identified, use the [brainstorm {{SKILL}}](brainstorm.md) instead.
6
6
 
7
7
  ## Procedure
8
- 1. Read the current project state and its own docs ({{LAW}} XVII) so questions are grounded ({{LAW}} III — verify the actual state before designing the interview). If the request bundles several goals, separate them and take one at a time.
8
+ 1. Read the current project state and its own docs ({{DOCTRINE}} process 4) so questions are grounded ({{LAW}} III — verify the actual state before designing the interview). If the request bundles several goals, separate them and take one at a time.
9
9
  2. Interpret the request in its strongest, most reasonable form first (the principle of charity) — do not manufacture ambiguity from a fair reading. If the goal, scope, and success criteria are already unambiguous, restate them in one line and skip to step 4 — no ceremony on a clear ask. Otherwise interview the user ONE question at a time (multiple-choice when you can), driving at *why* (the outcome wanted), *scope* (what is explicitly in and out), and *done* (how success is judged) — not *how* yet. Keep asking until each is unambiguous.
10
10
  3. Name every KEY DECISION the answers imply or leave open — chosen direction, trade-offs accepted, load-bearing constraints, assumptions, and non-goals. Surface each silent assumption as a decision to ratify, not a settled fact.
11
11
  4. Write the goal and the key-decision ledger to `BRIEF.md` (or `clarify/<task>.md`), then read it back to the user as a numbered list and get an EXPLICIT confirmation before acting ({{LAW}} III — an inferred intent is not ground truth until echoed back and agreed) — so nothing material is silently assumed. Scope the read-back to decisions that are consequential, irreversible, or genuinely uncertain; correct the file and re-confirm any the user changes.
@@ -21,7 +21,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
21
21
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
22
22
  done-when) and apply it with the user's assent ({{LAW}} II).
23
23
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
24
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
24
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
25
25
  fresh read of the repo would not re-derive it. Update an existing memory over
26
26
  adding one; when in doubt, leave it out.
27
27
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -37,7 +37,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
37
37
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
38
38
  done-when) and apply it with the user's assent ({{LAW}} II).
39
39
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
40
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
40
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
41
41
  fresh read of the repo would not re-derive it. Update an existing memory over
42
42
  adding one; when in doubt, leave it out.
43
43
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -11,22 +11,22 @@
11
11
  3. Confirm no secret is being committed (universal {{LAW}} I), and no leftover
12
12
  debug scaffolding rides along — `console.log`, `debugger`, `print`,
13
13
  commented-out code, or hardcoded test values left over from diagnosis
14
- ({{LAW}} XXIV).
14
+ ({{LAW}} VIII).
15
15
  4. Write a message: imperative subject ≤50 chars; a body only when the *why*
16
16
  isn't obvious from the diff. **Match the repository's existing commit convention**
17
- (universal {{LAW}} XIII) — detect it from commit tooling (`commitlint`,
17
+ ({{DOCTRINE}} craft 5) — detect it from commit tooling (`commitlint`,
18
18
  `semantic-release`, `release-please`, husky hooks) and recent `git log`. When the
19
19
  repo has no discernible convention, default to **Conventional Commits**:
20
20
  `type(scope): subject` (`feat`, `fix`, `docs`, `refactor`, `test`, `chore`…),
21
21
  with a `!` before the colon or a `BREAKING CHANGE:` footer for a breaking change.
22
- 5. **Get explicit consent before committing (universal {{LAW}} XX).** On *every*
22
+ 5. **Get explicit consent before committing ({{DOCTRINE}} process 5).** On *every*
23
23
  branch — feature branches included — first show the user a plain-language summary of
24
24
  the change *and* the exact commit message, then wait for explicit acceptance before
25
25
  committing. A previous approval is not standing consent; ask again each commit. On a
26
26
  *shared branch* (`main`, `master`, `develop`/`development`, a release/hotfix branch,
27
27
  or any branch that is not a dedicated feature branch) apply the same gate with extra
28
28
  care.
29
- 6. Push only when the user has explicitly approved *that push* ({{LAW}} XX / {{LAW}} IV)
29
+ 6. Push only when the user has explicitly approved *that push* ({{DOCTRINE}} process 5 / {{LAW}} IV)
30
30
  — never push on your own initiative, on any branch, and never treat one approval as
31
31
  consent for the next.
32
32
 
@@ -41,7 +41,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
41
41
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
42
42
  done-when) and apply it with the user's assent ({{LAW}} II).
43
43
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
44
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
44
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
45
45
  fresh read of the repo would not re-derive it. Update an existing memory over
46
46
  adding one; when in doubt, leave it out.
47
47
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -5,7 +5,7 @@
5
5
  **Trigger:** the user asks to "convene a council", "debate this", "argue both sides", "stress-test this decision", or wants a change, plan, or claim challenged from several points of view before committing to it.
6
6
 
7
7
  ## Procedure
8
- 1. Frame the motion in one line — the exact decision, change, or claim under debate — and name what it feeds (a choice to make, a design to accept, a discussion to settle). Ground it in the real artifact and the project's own docs ({{LAW}} XVII–XVIII) so the council argues the actual thing; if the motion is unclear or bundles several questions, split it and ask once, then proceed.
8
+ 1. Frame the motion in one line — the exact decision, change, or claim under debate — and name what it feeds (a choice to make, a design to accept, a discussion to settle). Ground it in the real artifact and the project's own docs ({{DOCTRINE}} process 4) so the council argues the actual thing; if the motion is unclear or bundles several questions, split it and ask once, then proceed.
9
9
  2. Seat the council from the standing roster of read-only debate {{AGENTS}}, each arguing one fixed stance — convene the subset that genuinely clashes on *this* motion (usually 3–6, never the whole bench for its own sake), always anchored by the for/against spine of [advocate](../{{DIR_AGENTS}}/advocate.md) and [skeptic](../{{DIR_AGENTS}}/skeptic.md):
10
10
  - [advocate](../{{DIR_AGENTS}}/advocate.md) — the strongest case **for**; [skeptic](../{{DIR_AGENTS}}/skeptic.md) — devil's advocate, failure modes and hidden assumptions.
11
11
  - [pragmatist](../{{DIR_AGENTS}}/pragmatist.md) — cost, effort, YAGNI; [steward](../{{DIR_AGENTS}}/steward.md) — long-term architecture and debt; [operator](../{{DIR_AGENTS}}/operator.md) — running it in production.
@@ -13,9 +13,9 @@
13
13
  - [user-advocate](../{{DIR_AGENTS}}/user-advocate.md) — whoever consumes the outcome.
14
14
 
15
15
  Hand each chosen seat the motion and a one-line charter scoped to this topic; skip the seats with nothing to say here, and add an ad-hoc seat (e.g. the [security](../{{DIR_AGENTS}}/security.md) surface) only when the topic plainly demands a voice the roster doesn't cover.
16
- 3. Round one — positions: convene the seats by dispatching each stance {{AGENT}} as its own subagent in one batch where the tool supports it (the [parallel-agents {{SKILL}}](parallel-agents.md)), so each argues in an isolated context with no groupthink; where no subagent capability exists, voice each seat in turn as a persona. Each returns its steelmanned brief ({{LAW}} VIII) — no hedging, no strawmen.
16
+ 3. Round one — positions: convene the seats by dispatching each stance {{AGENT}} as its own subagent in one batch where the tool supports it (the [parallel-agents {{SKILL}}](parallel-agents.md)), so each argues in an isolated context with no groupthink; where no subagent capability exists, voice each seat in turn as a persona. Each returns its steelmanned brief ({{ONTOLOGY}}: {{ONT_CONDUCT}}) — no hedging, no strawmen.
17
17
  4. Round two — clash: put the briefs in front of each other and have the seats rebut only on the points that actually conflict, surfacing the cruxes, the load-bearing assumptions, and where the evidence is thin. Hold to a fixed number of rounds so the debate converges instead of looping; the skeptic already pairs every objection with what would resolve it (the [roast-me {{SKILL}}](roast-me.md) discipline).
18
- 5. The chair synthesises in neutral voice: state the verdict and its reasoning, record the strongest surviving dissent verbatim so it is not lost, list what would change the verdict, and name the single next action. Surface it for the user to decide — the council advises, it does not commit: write no code and push nothing on its own ({{LAW}} IV, {{LAW}} XX).
18
+ 5. The chair synthesises in neutral voice: state the verdict and its reasoning, record the strongest surviving dissent verbatim so it is not lost, list what would change the verdict, and name the single next action. Surface it for the user to decide — the council advises, it does not commit: write no code and push nothing on its own ({{LAW}} IV, {{DOCTRINE}} process 5).
19
19
 
20
20
  ## Done when
21
21
  - A crisp motion was debated by distinct, steelmanned seats over bounded rounds, and the chair has delivered a verdict, the preserved dissent, and one next action for the user to weigh.
@@ -27,7 +27,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
27
27
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
28
28
  done-when) and apply it with the user's assent ({{LAW}} II).
29
29
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
30
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
30
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
31
31
  fresh read of the repo would not re-derive it. Update an existing memory over
32
32
  adding one; when in doubt, leave it out.
33
33
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -21,7 +21,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
21
21
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
22
22
  done-when) and apply it with the user's assent ({{LAW}} II).
23
23
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
24
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
24
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
25
25
  fresh read of the repo would not re-derive it. Update an existing memory over
26
26
  adding one; when in doubt, leave it out.
27
27
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -15,7 +15,7 @@ Inspired by [Gwern's LLM Daydreaming](https://gwern.net/ai-daydreaming).
15
15
  Before the first run, make sure the pieces this skill depends on are in place:
16
16
 
17
17
  1. **A vault to mine.** Declare your Obsidian vault in the harness `wiki.jsonc`
18
- (AGENT.md §7) — give a `wikis[]` entry a `path` to the vault root. Without it the
18
+ (AGENT.md §8) — give a `wikis[]` entry a `path` to the vault root. Without it the
19
19
  skill falls back to detecting a `.obsidian/` folder in the current directory, then
20
20
  asks. No vault → nothing to daydream about.
21
21
  2. **Parallel subagents.** Synthesis and critique fan out across ~10–20 subagents per
@@ -18,7 +18,7 @@ faster than thrashing; do not trade it away under pressure.
18
18
  5. Verify: run the project's checks and read the actual output (universal {{LAW}} III) — the original reproduction now passes and nothing nearby broke. Where a test can pin the bug, add a regression test that fails before the fix and passes after, so it can never silently return. Dispatch the [tester {{AGENT}}](../{{DIR_AGENTS}}/tester.md) for a focused regression check when the blast radius is unclear.
19
19
  6. If a fix doesn't work, return to step 1 with what you learned — don't stack a second fix on top. **After three failed fixes, stop fixing:** when each attempt only shifts the symptom elsewhere, the architecture, not the line, is likely wrong. Surface that to the user and decide the approach together before trying again ({{LAW}} II).
20
20
 
21
- **Diagnostic logging is scaffolding.** When you add logging to isolate a bug, use the project's real logger at a DEBUG level rather than scattered `print`/`console.log`, prefer correlation IDs over loose object dumps, and **never log secrets, tokens, or PII** ({{LAW}} I). Treat every temporary log as disposable: remove or downgrade each `print`/`console.log`/`debugger` before the change ships ({{LAW}} XXIV) — leftover debug noise in a diff is a defect, not a free comment.
21
+ **Diagnostic logging is scaffolding.** When you add logging to isolate a bug, use the project's real logger at a DEBUG level rather than scattered `print`/`console.log`, prefer correlation IDs over loose object dumps, and **never log secrets, tokens, or PII** ({{LAW}} I). Treat every temporary log as disposable: remove or downgrade each `print`/`console.log`/`debugger` before the change ships ({{LAW}} VIII) — leftover debug noise in a diff is a defect, not a free comment.
22
22
 
23
23
  ## Done when
24
24
  - The failure is reproduced, root-caused, fixed at the cause, and the reproduction passes with no new breakage.
@@ -30,7 +30,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
30
30
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
31
31
  done-when) and apply it with the user's assent ({{LAW}} II).
32
32
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
33
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
33
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
34
34
  fresh read of the repo would not re-derive it. Update an existing memory over
35
35
  adding one; when in doubt, leave it out.
36
36
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -21,7 +21,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
21
21
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
22
22
  done-when) and apply it with the user's assent ({{LAW}} II).
23
23
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
24
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
24
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
25
25
  fresh read of the repo would not re-derive it. Update an existing memory over
26
26
  adding one; when in doubt, leave it out.
27
27
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -5,12 +5,12 @@
5
5
  **Trigger:** implementing a feature, fixing a bug, or changing code behaviour in a repo that has (or should have) a test suite.
6
6
 
7
7
  ## Procedure
8
- 1. Orient on the project's own documentation for what you are about to touch ({{LAW}} XVII).
9
- 2. Make the smallest change that advances the task ({{LAW}} XXV).
10
- 3. Cover the behaviour — test-first via the [tdd {{SKILL}}](tdd.md) where the target is known up front; otherwise write the covering test alongside the change ({{LAW}} XXXV).
11
- 4. Run the *affected* tests and read the output ({{LAW}} III); on failure, fix the cause, do not mask it ({{LAW}} XXIV).
8
+ 1. Orient on the project's own documentation for what you are about to touch ({{DOCTRINE}} process 4).
9
+ 2. Make the smallest change that advances the task ({{DOCTRINE}} craft 6).
10
+ 3. Cover the behaviour — test-first via the [tdd {{SKILL}}](tdd.md) where the target is known up front; otherwise write the covering test alongside the change ({{DOCTRINE}} rigor 3).
11
+ 4. Run the *affected* tests and read the output ({{LAW}} III); on failure, fix the cause, do not mask it ({{LAW}} VIII).
12
12
  5. Tidy the green code via the [refactor {{SKILL}}](refactor.md) — the tests are your safety net.
13
- 6. Commit the green slice via the [commit {{SKILL}}](commit.md) ({{LAW}} XX). Loop one slice at a time; dispatch the [tester {{AGENT}}](../{{DIR_AGENTS}}/tester.md) for heavier or unfamiliar coverage.
13
+ 6. Commit the green slice via the [commit {{SKILL}}](commit.md) ({{DOCTRINE}} process 5). Loop one slice at a time; dispatch the [tester {{AGENT}}](../{{DIR_AGENTS}}/tester.md) for heavier or unfamiliar coverage.
14
14
 
15
15
  ## Done when
16
16
  - The behaviour changed is covered by tests written this session, the affected suite is green with its output shown, and each slice was committed.
@@ -22,7 +22,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
22
22
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
23
23
  done-when) and apply it with the user's assent ({{LAW}} II).
24
24
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
25
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
25
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
26
26
  fresh read of the repo would not re-derive it. Update an existing memory over
27
27
  adding one; when in doubt, leave it out.
28
28
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -13,7 +13,7 @@ into line with the implementation.
13
13
  that exists — never create a second. If none exists, create `docs/` at the root.
14
14
  2. **Survey the code, not the intent.** Map entry points, the public API / modules,
15
15
  commands, config, and key directories — read the actual behaviour (universal {{LAW}} III,
16
- {{LAW}} XVII). If there is no `ARCHITECTURE.md`, run [repo-map {{SKILL}}](repo-map.md)
16
+ {{DOCTRINE}} process 4). If there is no `ARCHITECTURE.md`, run [repo-map {{SKILL}}](repo-map.md)
17
17
  first so you have the orientation map to build on.
18
18
  3. **Reconcile the markdown (whole tree).** Check every existing page against the current
19
19
  implementation — renamed or removed APIs, changed flags, dead examples — and fix the
@@ -28,7 +28,7 @@ into line with the implementation.
28
28
  - **Fenced generated regions.** Wrap the auto-generated body between
29
29
  `<!-- geneseed:doc:start -->` and `<!-- geneseed:doc:end -->` markers, and on re-runs
30
30
  rewrite *only* inside them — hand-authored prose outside the markers is never touched
31
- ({{LAW}} XV: edit the layer you own, never the reader's additions).
31
+ ({{DOCTRINE}} process 3: edit the layer you own, never the reader's additions).
32
32
  - **Diagrams as Mermaid, keyed by purpose.** In the markdown, render diagrams as fenced
33
33
  `mermaid` code blocks — they render natively on GitHub, Obsidian, and VS Code with no
34
34
  dependency. Pick the kind by what you are showing: sequence for runtime/request flows,
@@ -56,7 +56,7 @@ into line with the implementation.
56
56
  - **Stay project-facing** — clean and professional styling, never the harness voice; and
57
57
  footer it with `mirrors commit <sha> · generated <date>` so the sync is auditable.
58
58
  6. **Do not auto-publish.** Leave the changes for the user to review; stage and commit only
59
- on consent, via the [commit {{SKILL}}](commit.md) (universal {{LAW}} XX).
59
+ on consent, via the [commit {{SKILL}}](commit.md) ({{DOCTRINE}} process 5).
60
60
 
61
61
  ## Done when
62
62
  - The doc home mirrors the current implementation: every markdown page carries typed
@@ -72,7 +72,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
72
72
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
73
73
  done-when) and apply it with the user's assent ({{LAW}} II).
74
74
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
75
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
75
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
76
76
  fresh read of the repo would not re-derive it. Update an existing memory over
77
77
  adding one; when in doubt, leave it out.
78
78
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -31,7 +31,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
31
31
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
32
32
  done-when) and apply it with the user's assent ({{LAW}} II).
33
33
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
34
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
34
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
35
35
  fresh read of the repo would not re-derive it. Update an existing memory over
36
36
  adding one; when in doubt, leave it out.
37
37
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -21,7 +21,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
21
21
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
22
22
  done-when) and apply it with the user's assent ({{LAW}} II).
23
23
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
24
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
24
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
25
25
  fresh read of the repo would not re-derive it. Update an existing memory over
26
26
  adding one; when in doubt, leave it out.
27
27
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -19,7 +19,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
19
19
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
20
20
  done-when) and apply it with the user's assent ({{LAW}} II).
21
21
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
22
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
22
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
23
23
  fresh read of the repo would not re-derive it. Update an existing memory over
24
24
  adding one; when in doubt, leave it out.
25
25
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -9,7 +9,7 @@ server — exposing an external API or service to an agent as a set of tools.
9
9
  depends on it.
10
10
 
11
11
  ## Procedure
12
- 1. Research first ({{LAW}} XVII): read the MCP specification
12
+ 1. Research first ({{DOCTRINE}} process 4): read the MCP specification
13
13
  (`modelcontextprotocol.io`) and the target service's API docs, then pick the
14
14
  SDK — Python (FastMCP) or TypeScript (MCP SDK) — and load its documentation.
15
15
  2. Plan the tool surface: list the service's key operations and design
@@ -18,7 +18,7 @@ depends on it.
18
18
  real task with it.
19
19
  3. Build the core: an authenticated API client, shared error-handling and
20
20
  pagination helpers, and response formatting that returns focused, relevant
21
- data rather than raw dumps ({{LAW}} XV).
21
+ data rather than raw dumps ({{DOCTRINE}} process 3).
22
22
  4. Define each tool's input and output schema (Pydantic or Zod), set the
23
23
  annotations (`readOnlyHint`, `destructiveHint`, `idempotentHint`,
24
24
  `openWorldHint`), and write error messages that name the specific, actionable
@@ -41,7 +41,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
41
41
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
42
42
  done-when) and apply it with the user's assent ({{LAW}} II).
43
43
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
44
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
44
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
45
45
  fresh read of the repo would not re-derive it. Update an existing memory over
46
46
  adding one; when in doubt, leave it out.
47
47
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -6,11 +6,11 @@
6
6
 
7
7
  ## Procedure
8
8
  1. Capture the firewall input as TWO things and nothing else: (a) the **verbatim original task/spec** — the raw issue or request text, NOT a solver-written summary or "spec card" (a distilled card launders the solving session's framing into the rubric, the very bias this {{SKILL}} exists to defeat), and (b) a pointer to the **final artifact** as it stands — file paths, built output, or the command to run it. If the raw task is too thin to yield acceptance criteria, have the **user** (never the solver) confirm a one-line acceptance bar, then proceed ({{LAW}} III); if it is too fuzzy even for that, this is a judgement call — convene [council](council.md) instead.
9
- 2. Deliberately WITHHOLD everything else and say so in the brief: the diff and changed-files list, the chat transcript, the solver's rationale and commit messages, prior test output, and every "it works because…" claim. Each is a vector for confirmation bias — they transmit the author's conviction, and a validator that inherits it cannot judge independently ({{LAW}} VIII). The validator must re-confront the artifact cold, the way an external recipient would.
10
- 3. Dispatch ONE fresh-context validator whose context starts empty — isolation is structural, not promised — using the [reviewer {{AGENT}}](../{{DIR_AGENTS}}/reviewer.md) (read-only, runs the suite, casts a verdict; NOT the [skeptic](../{{DIR_AGENTS}}/skeptic.md), whose charter forbids running commands and casting verdicts), via the dispatch pattern in [parallel-agents {{SKILL}}](parallel-agents.md), keeping the heavy reading out of the main context ({{LAW}} XV); a cheaper model suffices for the validator unless the spec is subtle. Dispatch **fresh** — never resume a prior subagent session, which re-inherits its context and breaches the firewall. Where the host has no subagent capability, degrade: write the brief to a file and have the user run it in a separate fresh process; only as a last resort run the persona in-session and **stamp the verdict "SOFT ISOLATION — context bleed possible"** so the user discounts it. Never silently pretend a persona equals a fresh agent.
9
+ 2. Deliberately WITHHOLD everything else and say so in the brief: the diff and changed-files list, the chat transcript, the solver's rationale and commit messages, prior test output, and every "it works because…" claim. Each is a vector for confirmation bias — they transmit the author's conviction, and a validator that inherits it cannot judge independently ({{ONTOLOGY}}: {{ONT_CONDUCT}}). The validator must re-confront the artifact cold, the way an external recipient would.
10
+ 3. Dispatch ONE fresh-context validator whose context starts empty — isolation is structural, not promised — using the [reviewer {{AGENT}}](../{{DIR_AGENTS}}/reviewer.md) (read-only, runs the suite, casts a verdict; NOT the [skeptic](../{{DIR_AGENTS}}/skeptic.md), whose charter forbids running commands and casting verdicts), via the dispatch pattern in [parallel-agents {{SKILL}}](parallel-agents.md), keeping the heavy reading out of the main context ({{DOCTRINE}} process 3); a cheaper model suffices for the validator unless the spec is subtle. Dispatch **fresh** — never resume a prior subagent session, which re-inherits its context and breaches the firewall. Where the host has no subagent capability, degrade: write the brief to a file and have the user run it in a separate fresh process; only as a last resort run the persona in-session and **stamp the verdict "SOFT ISOLATION — context bleed possible"** so the user discounts it. Never silently pretend a persona equals a fresh agent.
11
11
  4. Inside the fresh context, FIRST derive the rubric blind: from the task ALONE — before looking at the artifact — write a numbered list of observable acceptance criteria, each a yes/no test with a stated check method (a command to run, an output to see, a behaviour to exercise), tagged must-have or nice-to-have. FREEZE this list. Deriving it inside the firewall, from the task and not the solution, is what prevents criteria-fitting — the rubric cannot be bent to match what the artifact happens to do.
12
12
  5. THEN reveal the artifact and rule each criterion against it under an inverted burden of proof: actively check it — run the command, exercise the behaviour, read the named output ({{LAW}} III — verify by running, never assume) — and record `Cn: PASS | FAIL | UNVERIFIABLE — <evidence: the exact output/behaviour checked>`. Default is NOT-PASS: mark PASS only after actively confirming; a criterion that cannot be checked is UNVERIFIABLE (a finding, not a pass — name the missing evidence). Flag any **Extra** the artifact added beyond the spec, but cut gold-plating both ways — never FAIL the artifact for a requirement the task never asked for. The validator does NOT fix, refactor, or polish; it only rules.
13
- 6. Return the independent verdict: the per-criterion table, then the overall gate — **SATISFIES** (every must-have PASS, no FAIL), **SATISFIES-WITH-GAPS** (must-haves pass, a nice-to-have fails), or **DOES-NOT-SATISFY** (any must-have FAIL or UNVERIFIABLE), listing the failing criteria with evidence. Report "could not find a fault" as not-proven-false, never as "proven correct". Surface it for the user to decide; the gate advises and applies no changes — write no code, push nothing ({{LAW}} IV, {{LAW}} XX). On DOES-NOT-SATISFY, hand the failures to the solver (optionally via [review-response](review-response.md)) and re-run fresh-eyes after the fix rather than letting the original context relitigate the ruling.
13
+ 6. Return the independent verdict: the per-criterion table, then the overall gate — **SATISFIES** (every must-have PASS, no FAIL), **SATISFIES-WITH-GAPS** (must-haves pass, a nice-to-have fails), or **DOES-NOT-SATISFY** (any must-have FAIL or UNVERIFIABLE), listing the failing criteria with evidence. Report "could not find a fault" as not-proven-false, never as "proven correct". Surface it for the user to decide; the gate advises and applies no changes — write no code, push nothing ({{LAW}} IV, {{DOCTRINE}} process 5). On DOES-NOT-SATISFY, hand the failures to the solver (optionally via [review-response](review-response.md)) and re-run fresh-eyes after the fix rather than letting the original context relitigate the ruling.
14
14
 
15
15
  ## Done when
16
16
  - A fresh context that never saw the solving session derived the acceptance criteria from the original task alone, froze them before seeing the artifact, ruled each PASS/FAIL/UNVERIFIABLE with evidence by checking the live artifact, and returned an overall gate (SATISFIES / SATISFIES-WITH-GAPS / DOES-NOT-SATISFY) for the user to weigh — or, where no true isolation was possible, the verdict is stamped soft-isolation so it is discounted.
@@ -22,7 +22,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
22
22
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
23
23
  done-when) and apply it with the user's assent ({{LAW}} II).
24
24
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
25
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
25
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
26
26
  fresh read of the repo would not re-derive it. Update an existing memory over
27
27
  adding one; when in doubt, leave it out.
28
28
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -51,7 +51,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
51
51
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
52
52
  done-when) and apply it with the user's assent ({{LAW}} II).
53
53
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
54
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
54
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
55
55
  fresh read of the repo would not re-derive it. Update an existing memory over
56
56
  adding one; when in doubt, leave it out.
57
57
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -20,7 +20,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
20
20
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
21
21
  done-when) and apply it with the user's assent ({{LAW}} II).
22
22
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
23
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
23
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
24
24
  fresh read of the repo would not re-derive it. Update an existing memory over
25
25
  adding one; when in doubt, leave it out.
26
26
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -26,7 +26,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
26
26
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
27
27
  done-when) and apply it with the user's assent ({{LAW}} II).
28
28
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
29
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
29
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
30
30
  fresh read of the repo would not re-derive it. Update an existing memory over
31
31
  adding one; when in doubt, leave it out.
32
32
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -6,9 +6,9 @@
6
6
 
7
7
  ## Procedure
8
8
  1. Locate the deployment. Try in order: `command -v geneseed` (use the launcher if found); `$GENESEED_HARNESS`; `$OPENCODE_CONFIG_DIR`; `~/.config/opencode/AGENT.md`; `.opencode/AGENT.md` walking up from `pwd`; any `AGENT.md` at the repo root. Stop and say so if none resolves — do not run `setup`, `build`, or `upgrade` to "fix" this.
9
- 2. For state — install mode, theme, counts, version fingerprint, drift — prefer the CLI: `geneseed status`, `geneseed version`, `geneseed doctor`, `geneseed diff`. All read-only and cheap ({{LAW}} XV).
10
- 3. To read a specific piece, read the file directly rather than re-deriving from prose ({{LAW}} III): `<harness>/agents/<name>.md`, `<harness>/skills/<name>/SKILL.md`, `<harness>/memory/<file>.md`, `<harness>/notebook/<file>.md`. {{LAWS}} live as numbered `## N. …` sections inside `<harness>/AGENT.md`.
11
- 4. Side-effecting verbs need explicit assent ({{LAW}} XX): `geneseed learn` (writes to {{MEMORY}}), `geneseed context` (refreshes the project's `context.json`), `geneseed web start|stop` (the local browser UI on `127.0.0.1`). `geneseed web status` is read-only.
9
+ 2. For state — install mode, theme, counts, version fingerprint, drift — prefer the CLI: `geneseed status`, `geneseed version`, `geneseed doctor`, `geneseed diff`. All read-only and cheap ({{DOCTRINE}} process 3).
10
+ 3. To read a specific piece, read the file directly rather than re-deriving from prose ({{LAW}} III): `<harness>/agents/<name>.md`, `<harness>/skills/<name>/SKILL.md`, `<harness>/memory/<file>.md`, `<harness>/notebook/<file>.md`. The {{ONTOLOGY}}, the {{LAWS}} and the active {{DOCTRINES}} live as their own numbered `## N. …` sections inside `<harness>/AGENT.md`.
11
+ 4. Side-effecting verbs need explicit assent ({{DOCTRINE}} process 5): `geneseed learn` (writes to {{MEMORY}}), `geneseed context` (refreshes the project's `context.json`), `geneseed web start|stop` (the local browser UI on `127.0.0.1`). `geneseed web status` is read-only.
12
12
  5. Never run `setup`, `build`, `upgrade`, `bootstrap`, `update`, `sync-self`, `link`, `unlink`, or `uninstall` as a side effect — these are scope-changing and only run when the user explicitly asks ({{LAW}} II).
13
13
  6. The bundle's directory and section names are theme-independent (plain English everywhere); only voice and prose change per theme. Don't pattern-match on flavour words to find files.
14
14
 
@@ -22,7 +22,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
22
22
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
23
23
  done-when) and apply it with the user's assent ({{LAW}} II).
24
24
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
25
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
25
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
26
26
  fresh read of the repo would not re-derive it. Update an existing memory over
27
27
  adding one; when in doubt, leave it out.
28
28
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -40,7 +40,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
40
40
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
41
41
  done-when) and apply it with the user's assent ({{LAW}} II).
42
42
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
43
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
43
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
44
44
  fresh read of the repo would not re-derive it. Update an existing memory over
45
45
  adding one; when in doubt, leave it out.
46
46
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -41,13 +41,13 @@ finding *when/why* something changed without altering history, use git-archaeolo
41
41
  dedicated branch, never a shared one, and keep it the only change in flight
42
42
  (universal {{LAW}} II). A rewrite *creates commits* — amend, squash, `--continue`
43
43
  all do — so present what will change and get the user's acceptance before running
44
- it, exactly as for any commit (universal {{LAW}} XX).
44
+ it, exactly as for any commit ({{DOCTRINE}} process 5).
45
45
  6. Verify the result before declaring success: inspect `git log --oneline`,
46
46
  `git status`, and the diff against the intended state — read the actual output, do
47
47
  not assume the rewrite landed as planned (universal {{LAW}} III).
48
48
  7. Push only with the user's explicit, per-push consent — and a history rewrite needs a
49
49
  **force**-push (`--force-with-lease`), which is doubly outward-facing: present what
50
- changed and wait for acceptance before pushing (universal {{LAW}} XX / {{LAW}} IV).
50
+ changed and wait for acceptance before pushing ({{DOCTRINE}} process 5 / {{LAW}} IV).
51
51
  Never force-push a shared branch without confirming it is safe to do so.
52
52
 
53
53
  ## Done when
@@ -61,7 +61,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
61
61
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
62
62
  done-when) and apply it with the user's assent ({{LAW}} II).
63
63
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
64
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
64
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
65
65
  fresh read of the repo would not re-derive it. Update an existing memory over
66
66
  adding one; when in doubt, leave it out.
67
67
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -6,10 +6,10 @@
6
6
 
7
7
  ## Procedure
8
8
  1. Capture the state in the worklog (`WORKLOG.md` or the task's plan file): the goal, what's done, the step in progress, and the exact next step.
9
- 2. Record open decisions, dead ends already ruled out, blockers, and any irreversible changes already made ({{LAW}} XIV) — so the next agent neither re-derives nor repeats them.
10
- 3. Promote any durable fact or correction learned this session into {{MEMORY}} (§4), not just the worklog.
9
+ 2. Record open decisions, dead ends already ruled out, blockers, and any irreversible changes already made ({{DOCTRINE}} process 2) — so the next agent neither re-derives nor repeats them.
10
+ 3. Promote any durable fact or correction learned this session into {{MEMORY}} (§5), not just the worklog.
11
11
  4. Point to the live artifacts: branch name, changed files, how to run the tests, and where any failure reproduces.
12
- 5. Put a one-line "resume here" pointer at the top so a fresh context picks up in a single read ({{LAW}} XV).
12
+ 5. Put a one-line "resume here" pointer at the top so a fresh context picks up in a single read ({{DOCTRINE}} process 3).
13
13
  6. Verify it: re-read the worklog as a cold reader ({{LAW}} III) — goal, progress, next step, and blockers must be answerable from it alone. Fix what isn't.
14
14
 
15
15
  ## Done when
@@ -22,7 +22,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
22
22
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
23
23
  done-when) and apply it with the user's assent ({{LAW}} II).
24
24
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
25
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
25
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
26
26
  fresh read of the repo would not re-derive it. Update an existing memory over
27
27
  adding one; when in doubt, leave it out.
28
28
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -157,7 +157,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
157
157
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
158
158
  done-when) and apply it with the user's assent ({{LAW}} II).
159
159
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
160
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
160
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
161
161
  fresh read of the repo would not re-derive it. Update an existing memory over
162
162
  adding one; when in doubt, leave it out.
163
163
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -5,7 +5,7 @@
5
5
  **Trigger:** a task needs the *content* of a non-markdown document — a PDF, Word
6
6
  (`.docx`), PowerPoint (`.pptx`), Excel (`.xlsx`), HTML, EPUB — or a web URL. This is
7
7
  the read-before counterpart for documents the convention can't read directly
8
- (universal {{LAW}} XVII): the context discovery only sees `.md`, so anything else
8
+ ({{DOCTRINE}} process 4): the context discovery only sees `.md`, so anything else
9
9
  must be converted first.
10
10
 
11
11
  ## Procedure
@@ -27,7 +27,7 @@ must be converted first.
27
27
  host's choice. If none is available, report which one to install and stop — do
28
28
  not run `pip install`/`brew install` without the user's say-so.
29
29
  5. **Read the slice you need**, not the whole dump — locate the relevant section in
30
- the markdown, then read it (universal {{LAW}} XV).
30
+ the markdown, then read it ({{DOCTRINE}} process 3).
31
31
  6. **Treat the converted file as a scratch artifact.** Don't commit it unless the
32
32
  task calls for it (universal {{LAW}} IV); prefer a temp path or `.gitignore` it.
33
33
 
@@ -42,7 +42,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
42
42
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
43
43
  done-when) and apply it with the user's assent ({{LAW}} II).
44
44
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
45
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
45
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
46
46
  fresh read of the repo would not re-derive it. Update an existing memory over
47
47
  adding one; when in doubt, leave it out.
48
48
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -19,7 +19,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
19
19
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
20
20
  done-when) and apply it with the user's assent ({{LAW}} II).
21
21
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
22
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
22
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
23
23
  fresh read of the repo would not re-derive it. Update an existing memory over
24
24
  adding one; when in doubt, leave it out.
25
25
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -6,10 +6,10 @@
6
6
  onto a new API.
7
7
 
8
8
  ## Procedure
9
- 1. Read the upstream migration guide and changelog *first* (universal {{LAW}} XVII);
9
+ 1. Read the upstream migration guide and changelog *first* ({{DOCTRINE}} process 4);
10
10
  list the breaking changes that actually touch this codebase.
11
11
  2. Work on a dedicated branch, never directly on a shared one, so a failed
12
- migration rolls back cleanly (universal {{LAW}} XX applies its shared-branch
12
+ migration rolls back cleanly ({{DOCTRINE}} process 5 applies its shared-branch
13
13
  care to anything that does land there).
14
14
  3. Migrate one dependency — or one breaking change — at a time. Never batch
15
15
  unrelated bumps into a single step (universal {{LAW}} II).
@@ -17,7 +17,7 @@ onto a new API.
17
17
  lets you bisect a later failure to the exact change that caused it
18
18
  (universal {{LAW}} III).
19
19
  5. Keep the version bump itself a separate commit from any code changes it forces,
20
- each through the [commit {{SKILL}}](commit.md) (universal {{LAW}} XX), so each
20
+ each through the [commit {{SKILL}}](commit.md) ({{DOCTRINE}} process 5), so each
21
21
  diff is reviewable in isolation.
22
22
 
23
23
  **Schema migrations stay backward-compatible.** For a database or stored-format
@@ -29,7 +29,7 @@ change into the same deploy as the code that depends on it (universal {{LAW}} II
29
29
  ## Done when
30
30
  - The dependency or API is on the target version, every check passes, and the
31
31
  changelog / lockfile reflect the new state with its docs updated
32
- (universal {{LAW}} XI).
32
+ ({{DOCTRINE}} craft 3).
33
33
 
34
34
  ## Self-improvement
35
35
 
@@ -38,7 +38,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
38
38
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
39
39
  done-when) and apply it with the user's assent ({{LAW}} II).
40
40
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
41
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
41
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
42
42
  fresh read of the repo would not re-derive it. Update an existing memory over
43
43
  adding one; when in doubt, leave it out.
44
44
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -45,7 +45,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
45
45
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
46
46
  done-when) and apply it with the user's assent ({{LAW}} II).
47
47
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
48
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
48
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
49
49
  fresh read of the repo would not re-derive it. Update an existing memory over
50
50
  adding one; when in doubt, leave it out.
51
51
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -7,7 +7,7 @@
7
7
  ## Procedure
8
8
  1. Confirm independence: the subtasks must not depend on each other's output or write the same files. If they're sequential or share state, use [plan](plan.md) instead.
9
9
  2. Split the work into self-contained units, each with one clear goal and a defined output contract — what it must return.
10
- 3. Dispatch each unit to its own subagent in one batch, each under a handoff envelope: the unit's goal, the inputs it needs, its output contract, and the inherited constraints (no commit/push — {{LAW}} XX stays with you; gaps reported, never invented). Prefer the read-only [explorer {{AGENT}}](../{{DIR_AGENTS}}/explorer.md) for investigation so the heavy reading stays out of the main context ({{LAW}} XV). Where no subagent capability exists, run the units sequentially as personas instead, converging the same way.
10
+ 3. Dispatch each unit to its own subagent in one batch, each under a handoff envelope: the unit's goal, the inputs it needs, its output contract, and the inherited constraints (no commit/push — {{DOCTRINE}} process 5 stays with you; gaps reported, never invented). Prefer the read-only [explorer {{AGENT}}](../{{DIR_AGENTS}}/explorer.md) for investigation so the heavy reading stays out of the main context ({{DOCTRINE}} process 3). Where no subagent capability exists, run the units sequentially as personas instead, converging the same way.
11
11
  4. Keep the main context lean: collect each subagent's distilled result, not its working transcript.
12
12
  5. Converge: reconcile the results, resolve conflicts yourself, and verify the combined outcome.
13
13
 
@@ -21,7 +21,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
21
21
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
22
22
  done-when) and apply it with the user's assent ({{LAW}} II).
23
23
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
24
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
24
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
25
25
  fresh read of the repo would not re-derive it. Update an existing memory over
26
26
  adding one; when in doubt, leave it out.
27
27
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -28,7 +28,7 @@ The minimum roster per task type. The parent may add specialists on top — secu
28
28
  5. **Two execution shapes**, chosen by host capability (same pattern as the [workflow {{SKILL}}](workflow.md)):
29
29
  - *Deterministic:* where the host exposes a `workflow` tool, run a saved script encoding analyst → developer → (tester ⇄ developer)×≤5 → proof.
30
30
  - *Model-driven fallback:* everywhere else, run the same stages via the [parallel-agents {{SKILL}}](parallel-agents.md) or sequential personas, with the same handoff envelopes and the same delivery contract.
31
- 6. On success, attach the mechanical proof to the branch (test + lint output, exit codes) and hand the result back to the parent for the merge decision — the pipeline never commits, pushes, or merges on its own ({{LAW}} XX).
31
+ 6. On success, attach the mechanical proof to the branch (test + lint output, exit codes) and hand the result back to the parent for the merge decision — the pipeline never commits, pushes, or merges on its own ({{DOCTRINE}} process 5).
32
32
 
33
33
  ## Delivery contract
34
34
 
@@ -45,7 +45,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
45
45
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
46
46
  done-when) and apply it with the user's assent ({{LAW}} II).
47
47
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
48
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
48
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
49
49
  fresh read of the repo would not re-derive it. Update an existing memory over
50
50
  adding one; when in doubt, leave it out.
51
51
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -3,7 +3,7 @@
3
3
  > {{DESC_PLAN}}
4
4
 
5
5
  **Trigger:** a task with more than a couple of steps, or touching several files
6
- (universal {{LAW}} XIV).
6
+ ({{DOCTRINE}} process 2).
7
7
 
8
8
  ## Procedure
9
9
  1. If a design or spec already exists (e.g. from the brainstorm {{SKILL}}), derive the
@@ -38,7 +38,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
38
38
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
39
39
  done-when) and apply it with the user's assent ({{LAW}} II).
40
40
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
41
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
41
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
42
42
  fresh read of the repo would not re-derive it. Update an existing memory over
43
43
  adding one; when in doubt, leave it out.
44
44
  - No friction, nothing learned — move on; this loop earns no ceremony. Most
@@ -22,7 +22,7 @@ Close each run with one beat of reflection on the {{SKILL}} itself:
22
22
  is a flaw in this file. Propose the exact edit (trigger, procedure, or
23
23
  done-when) and apply it with the user's assent ({{LAW}} II).
24
24
  - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
25
- clears {{LAW}} VI's bar: it would change how a future session behaves, and a
25
+ clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
26
26
  fresh read of the repo would not re-derive it. Update an existing memory over
27
27
  adding one; when in doubt, leave it out.
28
28
  - No friction, nothing learned — move on; this loop earns no ceremony. Most