geneseed 3.12.0 → 3.14.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 (240) hide show
  1. package/CHANGELOG.md +160 -0
  2. package/README.md +2 -2
  3. package/SHIPPED.md +1 -1
  4. package/adapters/bob/README.md +1 -1
  5. package/adapters/claude-code/README.md +1 -1
  6. package/adapters/openclaude/README.md +1 -1
  7. package/adapters/opencode/README.md +3 -3
  8. package/adapters/opencode/plugins/geneseed-learn.js +10 -1
  9. package/bin/geneseed-cli.mjs +10 -14
  10. package/bin/geneseed-hook.mjs +22 -15
  11. package/docs/README.md +41 -22
  12. package/docs/concepts/agents.md +3 -1
  13. package/docs/concepts/collaboration.md +3 -1
  14. package/docs/concepts/exclusions.md +4 -2
  15. package/docs/concepts/footprint.md +3 -1
  16. package/docs/concepts/foreman-mode.md +3 -1
  17. package/docs/concepts/hook-gates.md +61 -0
  18. package/docs/concepts/hooks.md +8 -56
  19. package/docs/concepts/host-matrix.md +38 -0
  20. package/docs/concepts/hosts.md +6 -32
  21. package/docs/concepts/loop-branch.md +66 -0
  22. package/docs/concepts/loop-bricks.md +48 -0
  23. package/docs/concepts/loop-contracts.md +33 -0
  24. package/docs/concepts/loop-gates.md +30 -0
  25. package/docs/concepts/loop-notes.md +43 -0
  26. package/docs/concepts/loop-risk.md +36 -0
  27. package/docs/concepts/loop-templates.md +50 -0
  28. package/docs/concepts/loops.md +24 -116
  29. package/docs/concepts/lsp.md +2 -0
  30. package/docs/concepts/memory.md +3 -1
  31. package/docs/concepts/notebook.md +3 -1
  32. package/docs/concepts/rules.md +4 -2
  33. package/docs/concepts/skills.md +3 -1
  34. package/docs/concepts/themes.md +3 -1
  35. package/docs/extending.md +28 -13
  36. package/docs/guides/autostart.md +3 -1
  37. package/docs/guides/choose-your-setup.md +5 -80
  38. package/docs/guides/headless.md +5 -3
  39. package/docs/guides/install-agent-md.md +37 -0
  40. package/docs/guides/install-bob.md +20 -0
  41. package/docs/guides/install-claude-code.md +22 -0
  42. package/docs/guides/install-clone.md +34 -0
  43. package/docs/guides/install-openclaude.md +25 -0
  44. package/docs/guides/install-opencode.md +35 -0
  45. package/docs/guides/install-scripted.md +21 -0
  46. package/docs/guides/install.md +9 -118
  47. package/docs/guides/loop-finish.md +54 -0
  48. package/docs/guides/loop-running.md +66 -0
  49. package/docs/guides/loop-which-template.md +35 -0
  50. package/docs/guides/mcp-filesystem.md +41 -0
  51. package/docs/guides/mcp-gitlab.md +66 -0
  52. package/docs/guides/mcp-markitdown.md +36 -0
  53. package/docs/guides/mcp.md +8 -137
  54. package/docs/guides/migrate.md +3 -1
  55. package/docs/guides/project-context.md +4 -2
  56. package/docs/guides/read-non-markdown.md +17 -0
  57. package/docs/guides/run-a-loop.md +64 -0
  58. package/docs/guides/run-anywhere.md +2 -0
  59. package/docs/guides/setup-doctrines.md +55 -0
  60. package/docs/guides/setup-footprint.md +48 -0
  61. package/docs/guides/uninstall.md +3 -1
  62. package/docs/guides/upgrade.md +3 -1
  63. package/docs/guides/verify.md +3 -1
  64. package/docs/guides/wiki.md +3 -1
  65. package/docs/guides/worktree.md +3 -1
  66. package/docs/reference/about.md +3 -1
  67. package/docs/reference/cli.md +2 -0
  68. package/docs/reference/env-context.md +40 -0
  69. package/docs/reference/environment.md +10 -59
  70. package/docs/reference/glossary.md +3 -1
  71. package/docs/reference/loop-actions.md +20 -0
  72. package/docs/reference/opencode-plugins.md +14 -118
  73. package/docs/reference/plugin-activity.md +20 -0
  74. package/docs/reference/plugin-context.md +27 -0
  75. package/docs/reference/plugin-guard.md +27 -0
  76. package/docs/reference/plugin-learn.md +27 -0
  77. package/docs/reference/plugin-notify.md +20 -0
  78. package/docs/reference/plugin-ponytail.md +19 -0
  79. package/docs/reference/plugin-workflow.md +25 -0
  80. package/docs/reference/troubleshoot-doctor.md +50 -0
  81. package/docs/reference/troubleshoot-hooks.md +99 -0
  82. package/docs/reference/troubleshoot-install.md +108 -0
  83. package/docs/reference/troubleshoot-tools.md +56 -0
  84. package/docs/reference/troubleshoot-update.md +23 -0
  85. package/docs/reference/troubleshoot-web.md +66 -0
  86. package/docs/reference/troubleshooting.md +13 -337
  87. package/docs/understand/a-day.md +3 -1
  88. package/docs/understand/enforced-vs-asked.md +3 -1
  89. package/docs/understand/harness.md +2 -0
  90. package/docs/understand/machine-bob.md +17 -0
  91. package/docs/understand/machine-claude.md +35 -0
  92. package/docs/understand/machine-opencode.md +36 -0
  93. package/docs/understand/on-your-machine.md +12 -55
  94. package/docs/understand/take-it-out.md +13 -0
  95. package/docs/web-ui.md +35 -15
  96. package/harness.config.json +1 -1
  97. package/js/README.md +30 -13
  98. package/js/build/args.mjs +374 -0
  99. package/js/build/driver.mjs +137 -553
  100. package/js/build/emit-claude.mjs +2 -4
  101. package/js/build/generate.mjs +6 -3
  102. package/js/build/render.mjs +5 -9
  103. package/js/build/source.mjs +3 -11
  104. package/js/cli-table.json +27 -1
  105. package/js/hosts/hooks-context.mjs +431 -0
  106. package/js/hosts/hooks-learn.mjs +275 -0
  107. package/js/hosts/hooks-prims.mjs +108 -0
  108. package/js/hosts/hooks.mjs +50 -977
  109. package/js/hosts/hosts.mjs +12 -4
  110. package/js/hosts/installs.mjs +5 -6
  111. package/js/hosts/mcp.mjs +13 -49
  112. package/js/hosts/memory-files.mjs +181 -0
  113. package/js/hosts/native.mjs +43 -5
  114. package/js/hosts/settings.mjs +135 -414
  115. package/js/hosts/shim.mjs +373 -0
  116. package/js/inspect/checks-authoring.mjs +21 -828
  117. package/js/inspect/checks-build.mjs +32 -4
  118. package/js/inspect/checks-constitution.mjs +493 -0
  119. package/js/inspect/checks-counts.mjs +242 -0
  120. package/js/inspect/checks-repo.mjs +17 -8
  121. package/js/inspect/diff.mjs +4 -1
  122. package/js/inspect/doctor.mjs +2 -2
  123. package/js/inspect/inventory.mjs +4 -4
  124. package/js/inspect/scan.mjs +1 -1
  125. package/js/inspect/status.mjs +1 -1
  126. package/js/inspect/validate.mjs +48 -35
  127. package/js/loop/catalog.mjs +17 -4
  128. package/js/loop/cli.mjs +52 -16
  129. package/js/loop/graph.mjs +19 -1
  130. package/js/loop/registry.mjs +191 -0
  131. package/js/loop/score.mjs +46 -7
  132. package/js/loop/state.mjs +157 -19
  133. package/js/maintain/memory.mjs +1 -1
  134. package/js/maintain/migrate.mjs +18 -30
  135. package/js/maintain/setup.mjs +1 -1
  136. package/js/maintain/uninstall.mjs +47 -88
  137. package/js/ui/cli.mjs +12 -12
  138. package/js/web/actions.mjs +39 -4
  139. package/js/web/api.mjs +34 -21
  140. package/js/web/docs.mjs +87 -78
  141. package/js/web/routes.mjs +5 -1
  142. package/package.json +1 -1
  143. package/src/agents/explorer.md +2 -2
  144. package/src/agents/researcher.md +3 -3
  145. package/src/bricks/README.md +3 -1
  146. package/src/bricks/adr-challenge.md +20 -0
  147. package/src/bricks/adr-draft.md +15 -0
  148. package/src/bricks/characterize.md +17 -0
  149. package/src/bricks/ci-fix.md +2 -1
  150. package/src/bricks/ci-triage.md +20 -0
  151. package/src/bricks/compat-check.md +16 -0
  152. package/src/bricks/done-check.md +16 -0
  153. package/src/bricks/fitness-define.md +22 -0
  154. package/src/bricks/flake-check.md +17 -0
  155. package/src/bricks/flake-repro.md +18 -0
  156. package/src/bricks/identify.md +6 -3
  157. package/src/bricks/migration-plan.md +21 -0
  158. package/src/bricks/mutation-check.md +18 -0
  159. package/src/bricks/plan.md +6 -6
  160. package/src/bricks/red-test.md +16 -0
  161. package/src/bricks/review.md +5 -3
  162. package/src/bricks/spec.md +18 -0
  163. package/src/bricks/upgrade-scout.md +16 -0
  164. package/src/loops/api-endpoint.json +31 -0
  165. package/src/loops/architecture-decision.json +22 -0
  166. package/src/loops/bugfix.json +1 -0
  167. package/src/loops/ci-repair.json +19 -0
  168. package/src/loops/deps-upgrade.json +29 -0
  169. package/src/loops/enforce-architecture-rule.json +28 -0
  170. package/src/loops/feature.json +8 -5
  171. package/src/loops/fix-flaky-tests.json +30 -0
  172. package/src/loops/legacy-refactor.json +26 -0
  173. package/src/loops/legacy-tests.json +29 -0
  174. package/src/loops/refactor.json +5 -1
  175. package/src/loops/remove-dead-code.json +30 -0
  176. package/src/loops/spec-first-feature.json +29 -0
  177. package/src/loops/tdd.json +25 -0
  178. package/src/loops/update-contract.json +33 -0
  179. package/src/skills/brick-forge.md +3 -1
  180. package/src/skills/bruno-collection-generator.md +3 -3
  181. package/src/skills/bruno-test-writer.md +3 -3
  182. package/src/skills/ci-fix.md +3 -3
  183. package/src/skills/consolidate-memory.md +4 -4
  184. package/src/skills/council.md +1 -1
  185. package/src/skills/fresh-eyes.md +1 -1
  186. package/src/skills/git-archaeology.md +1 -1
  187. package/src/skills/git-rescue.md +4 -3
  188. package/src/skills/handoff.md +1 -1
  189. package/src/skills/herdr.md +1 -1
  190. package/src/skills/learn-mode.md +2 -2
  191. package/src/skills/loop.md +22 -10
  192. package/src/skills/opencode-theme.md +3 -3
  193. package/src/skills/ponytail.md +1 -1
  194. package/src/skills/profile.md +3 -4
  195. package/src/skills/prose.md +2 -3
  196. package/src/skills/quiz.md +1 -1
  197. package/src/skills/react-view-transitions/SKILL.md +1 -1
  198. package/src/skills/react-view-transitions/VENDOR.md +8 -3
  199. package/src/skills/research.md +3 -3
  200. package/src/skills/review-response.md +2 -2
  201. package/src/skills/rule.md +3 -3
  202. package/src/skills/security-audit.md +4 -4
  203. package/src/skills/teach.md +1 -1
  204. package/src/skills/wiki.md +3 -3
  205. package/src/skills/workflow.md +4 -4
  206. package/src/skills/worktree.md +2 -2
  207. package/web/dist/assets/Activity-CjRqZnr-.js +1 -0
  208. package/web/dist/assets/ActivityDetail-OQTxKBj2.js +1 -0
  209. package/web/dist/assets/Dashboard-J-xCe_Gk.js +2 -0
  210. package/web/dist/assets/Docs-CvOZ8akL.js +5 -0
  211. package/web/dist/assets/{GreenhouseView-C6ibc8IE.js → GreenhouseView-6KDjX8da.js} +1 -1
  212. package/web/dist/assets/{Installs-DRYjYnxs.js → Installs-MWuhNjSm.js} +2 -2
  213. package/web/dist/assets/JournalView-C8MrOz2c.js +1 -0
  214. package/web/dist/assets/Laws-Du0-Zyp2.js +3 -0
  215. package/web/dist/assets/Library-DOkO0TtB.js +1 -0
  216. package/web/dist/assets/Loops-Dv_aLByJ.js +2 -0
  217. package/web/dist/assets/{Markdown-qjM2_ofS.js → Markdown-X2a3qvOh.js} +14 -14
  218. package/web/dist/assets/{OperatorHudView-Bs7paWmh.js → OperatorHudView-BPP1dtLz.js} +1 -1
  219. package/web/dist/assets/{Personal-BY5n4gTw.js → Personal-26VPYkK0.js} +1 -1
  220. package/web/dist/assets/Tabs-BzKuFskD.js +1 -0
  221. package/web/dist/assets/{usePoll-O0sJEw1Y.js → activity-Dr7ZMBI3.js} +1 -1
  222. package/web/dist/assets/{api-CyMRbU2x.js → api-D_ixdyEY.js} +1 -1
  223. package/web/dist/assets/drawable-zVVDbsyw.js +1 -0
  224. package/web/dist/assets/index-Ctp-4poP.css +1 -0
  225. package/web/dist/assets/index-KHt3wE_K.js +2 -0
  226. package/web/dist/assets/usePoll-DD8VjtSg.js +1 -0
  227. package/web/dist/index.html +3 -3
  228. package/web/src/pages/Laws.jsx +0 -1
  229. package/web/dist/assets/Activity-GaaZWXTY.js +0 -1
  230. package/web/dist/assets/ActivityDetail-4t7d45Du.js +0 -1
  231. package/web/dist/assets/Dashboard-CYn7Tp16.js +0 -2
  232. package/web/dist/assets/Docs-BeFKLg2T.js +0 -5
  233. package/web/dist/assets/JournalView-1HbU1mfg.js +0 -1
  234. package/web/dist/assets/Laws-DFoG8JWB.js +0 -3
  235. package/web/dist/assets/Library-DDjgNwz_.js +0 -1
  236. package/web/dist/assets/Loops-D9VEoO0F.js +0 -1
  237. package/web/dist/assets/Tabs-ho-EYD8i.js +0 -1
  238. package/web/dist/assets/drawable-CLS9drMb.js +0 -1
  239. package/web/dist/assets/index-CX_hXMi5.css +0 -1
  240. package/web/dist/assets/index-Cjr7XCA3.js +0 -2
@@ -6,12 +6,14 @@ agent: reviewer
6
6
  outcomes: pass, fail
7
7
  ---
8
8
  Read the card's intent and write set, then read the diff this iteration actually produced. Check
9
- that the diff matches the intent, stays inside the declared write set, and does not smuggle in an
10
- unrelated change.
9
+ that the diff matches the intent, stays inside the declared write set, does not smuggle in an
10
+ unrelated change, and keeps any rule in `rules` (e.g. a cited proof that code is unused).
11
11
 
12
12
  Never edit any file — findings go back to `apply`, which makes the fix.
13
13
 
14
14
  Report `pass` if the diff is a faithful, scoped implementation of the card.
15
15
 
16
16
  Report `fail` with concrete findings — `file:line`, what is wrong, what to do instead — if the
17
- diff drifts from the intent, touches an undeclared file, or leaves an obvious defect behind.
17
+ diff drifts from the intent, touches an undeclared file, breaks a rule, or leaves an obvious defect behind.
18
+ The outcome alone does not carry the findings to `apply` — write them to a file in the OS temp
19
+ directory (never inside the worktree) and report that file's path with the outcome.
@@ -0,0 +1,18 @@
1
+ ---
2
+ name: spec
3
+ description: Write the feature's spec — scope, EARS acceptance criteria, ordered tasks — for the user to review.
4
+ effect: mutate
5
+ agent: architect
6
+ gate: human
7
+ outcomes: pass, fail
8
+ ---
9
+ Write `specs/<slug>/spec.md` (the slug of the loop's title) and touch nothing else — no code: the
10
+ problem, what is out of scope, acceptance criteria in EARS form ("WHEN <trigger> THE SYSTEM SHALL
11
+ <response>"), each one testable, and an ordered task list sized to one `identify` card apiece,
12
+ ending with an end-to-end verification task. A gate amendment in LOOP.md's notes answers your
13
+ open questions or corrects the spec: revise the spec to follow it.
14
+
15
+ The user reviews the spec before the loop continues. Report `pass` once every criterion is
16
+ testable, with the spec's path and its criteria count in a file in the OS temp directory — report
17
+ that file's path. Report `fail` if a criterion cannot be stated testably: list the open questions
18
+ in such a file and report its path; the user answers them with an amend.
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: upgrade-scout
3
+ description: Pick the next dependency upgrade and read its breaking changes, or declare all done.
4
+ effect: read
5
+ agent: researcher
6
+ outcomes: more, done
7
+ ---
8
+ Read the requirement and the loop's history (LOOP.md, `git log --format=%(trailers)` on this
9
+ branch). Pick the next package or group the requirement names that is not yet upgraded, skipping
10
+ any release younger than 14 days, and read its changelog or migration guide. Never edit any file.
11
+
12
+ Report `done` when every named package is upgraded. Otherwise report `more` with a card:
13
+ {"intent": "<bump X to N and adapt>", "writeSet": ["<manifest, lockfile, every file to adapt>"],
14
+ "actions": ["<each of: format, imports, rename, logic, new-file, api, delete, architecture>"]}
15
+ Write the breaking changes that hit this repo to a file in the OS temp directory and report that
16
+ file's path with the outcome — the card alone does not carry them to `apply`.
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "api-endpoint",
3
+ "description": "Build an HTTP API feature (a Spring MVC controller, say) one endpoint change per iteration: plan, apply, test, write or update the endpoint's Bruno request, run a security review, and review.",
4
+ "category": "development",
5
+ "rules": [
6
+ "The card's write set names the endpoint's .bru requests too, not only the code.",
7
+ "An OpenAPI or Swagger spec edit stops for a human by design; the aggressive preset or trimming LOOP.md's contracts relaxes it."
8
+ ],
9
+ "nodes": ["plan", "identify", "apply", "test", "bruno-test", "security-scan", "review"],
10
+ "start": "plan",
11
+ "edges": [
12
+ { "from": "plan", "on": "pass", "to": "identify" },
13
+ { "from": "identify", "on": "more", "to": "apply" },
14
+ { "from": "identify", "on": "done", "to": "$close" },
15
+ { "from": "apply", "on": "pass", "to": "test" },
16
+ { "from": "test", "on": "pass", "to": "bruno-test" },
17
+ { "from": "test", "on": "fail", "to": "apply" },
18
+ { "from": "bruno-test", "on": "pass", "to": "security-scan" },
19
+ { "from": "bruno-test", "on": "fail", "to": "$stop" },
20
+ { "from": "security-scan", "on": "pass", "to": "review" },
21
+ { "from": "security-scan", "on": "fail", "to": "apply" },
22
+ { "from": "review", "on": "pass", "to": "identify" },
23
+ { "from": "review", "on": "fail", "to": "apply" }
24
+ ],
25
+ "loops": [
26
+ { "name": "iterations", "nodes": ["identify", "apply", "test", "bruno-test", "security-scan", "review"], "max": 20, "iteration": true },
27
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
28
+ { "name": "review-fix", "nodes": ["apply", "test", "bruno-test", "security-scan", "review"], "max": 3 }
29
+ ],
30
+ "contracts": ["**/openapi*.yaml", "**/openapi*.yml", "**/openapi*.json", "**/swagger*.yaml", "**/swagger*.yml", "**/swagger*.json"]
31
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "architecture-decision",
3
+ "description": "Record one architecture decision record per decision the requirement names: draft it, have a skeptic attack it, and let the user review the ADR that survives, until every decision is recorded as Proposed.",
4
+ "category": "architecture",
5
+ "rules": [
6
+ "Pick the next undocumented decision; the card's write set is its ADR file."
7
+ ],
8
+ "nodes": ["identify", "adr-draft", "adr-challenge"],
9
+ "start": "identify",
10
+ "edges": [
11
+ { "from": "identify", "on": "more", "to": "adr-draft" },
12
+ { "from": "identify", "on": "done", "to": "$close" },
13
+ { "from": "adr-draft", "on": "pass", "to": "adr-challenge" },
14
+ { "from": "adr-challenge", "on": "pass", "to": "identify" },
15
+ { "from": "adr-challenge", "on": "fail", "to": "adr-draft" }
16
+ ],
17
+ "loops": [
18
+ { "name": "iterations", "nodes": ["identify", "adr-draft", "adr-challenge"], "max": 8, "iteration": true },
19
+ { "name": "challenge-fix", "nodes": ["adr-draft", "adr-challenge"], "max": 3 }
20
+ ],
21
+ "weights": { "new-file": 0.2, "architecture": 0.2 }
22
+ }
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "bugfix",
3
3
  "description": "Reproduce the bug with a failing test, then iterate: apply the fix, test, and review, until the requirement is met and the reproduction passes.",
4
+ "category": "development",
4
5
  "nodes": ["reproduce", "identify", "apply", "test", "review"],
5
6
  "start": "reproduce",
6
7
  "edges": [
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "ci-repair",
3
+ "description": "Read the branch's failing CI checks, fix one code failure per iteration, test, and push, until CI is green or only flaky or infra failures remain.",
4
+ "category": "day-to-day",
5
+ "nodes": ["ci-triage", "ci-fix", "test"],
6
+ "start": "ci-triage",
7
+ "edges": [
8
+ { "from": "ci-triage", "on": "more", "to": "ci-fix" },
9
+ { "from": "ci-triage", "on": "done", "to": "$close" },
10
+ { "from": "ci-fix", "on": "pass", "to": "test" },
11
+ { "from": "ci-fix", "on": "fail", "to": "$stop" },
12
+ { "from": "test", "on": "pass", "to": "ci-triage" },
13
+ { "from": "test", "on": "fail", "to": "ci-fix" }
14
+ ],
15
+ "loops": [
16
+ { "name": "iterations", "nodes": ["ci-triage", "ci-fix", "test"], "max": 10, "iteration": true },
17
+ { "name": "fix-test", "nodes": ["ci-fix", "test"], "max": 3 }
18
+ ]
19
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "deps-upgrade",
3
+ "description": "Confirm the suite is green, then upgrade one package or group per iteration: read its breaking changes, bump and adapt, test, audit, and review, until every named package is upgraded.",
4
+ "category": "day-to-day",
5
+ "rules": [
6
+ "The card's write set names the manifest, the lockfile and every file the bump adapts."
7
+ ],
8
+ "nodes": ["baseline-green", "upgrade-scout", "apply", "test", "deps-audit", "review"],
9
+ "start": "baseline-green",
10
+ "edges": [
11
+ { "from": "baseline-green", "on": "pass", "to": "upgrade-scout" },
12
+ { "from": "baseline-green", "on": "fail", "to": "$stop" },
13
+ { "from": "upgrade-scout", "on": "more", "to": "apply" },
14
+ { "from": "upgrade-scout", "on": "done", "to": "$close" },
15
+ { "from": "apply", "on": "pass", "to": "test" },
16
+ { "from": "test", "on": "pass", "to": "deps-audit" },
17
+ { "from": "test", "on": "fail", "to": "apply" },
18
+ { "from": "deps-audit", "on": "pass", "to": "review" },
19
+ { "from": "deps-audit", "on": "fail", "to": "apply" },
20
+ { "from": "review", "on": "pass", "to": "upgrade-scout" },
21
+ { "from": "review", "on": "fail", "to": "apply" }
22
+ ],
23
+ "loops": [
24
+ { "name": "iterations", "nodes": ["upgrade-scout", "apply", "test", "deps-audit", "review"], "max": 20, "iteration": true },
25
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
26
+ { "name": "review-fix", "nodes": ["apply", "test", "deps-audit", "review"], "max": 3 }
27
+ ],
28
+ "ignoreDeletions": ["**/package-lock.json", "**/yarn.lock", "**/pnpm-lock.yaml", "**/*.lock", "**/gradle.lockfile"]
29
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "enforce-architecture-rule",
3
+ "description": "Confirm the suite is green, encode the requirement's architecture rule as a test with an allowlist of today's violations for the user to review, then fix one violation per iteration, test, and review, until the allowlist is empty.",
4
+ "category": "architecture",
5
+ "rules": [
6
+ "Each fix removes its violation's allowlist entry in the same iteration."
7
+ ],
8
+ "nodes": ["baseline-green", "fitness-define", "identify", "apply", "test", "review"],
9
+ "start": "baseline-green",
10
+ "edges": [
11
+ { "from": "baseline-green", "on": "pass", "to": "fitness-define" },
12
+ { "from": "baseline-green", "on": "fail", "to": "$stop" },
13
+ { "from": "fitness-define", "on": "pass", "to": "identify" },
14
+ { "from": "fitness-define", "on": "fail", "to": "$stop" },
15
+ { "from": "identify", "on": "more", "to": "apply" },
16
+ { "from": "identify", "on": "done", "to": "$close" },
17
+ { "from": "apply", "on": "pass", "to": "test" },
18
+ { "from": "test", "on": "pass", "to": "review" },
19
+ { "from": "test", "on": "fail", "to": "apply" },
20
+ { "from": "review", "on": "pass", "to": "identify" },
21
+ { "from": "review", "on": "fail", "to": "apply" }
22
+ ],
23
+ "loops": [
24
+ { "name": "iterations", "nodes": ["identify", "apply", "test", "review"], "max": 20, "iteration": true },
25
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
26
+ { "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
27
+ ]
28
+ }
@@ -1,20 +1,23 @@
1
1
  {
2
2
  "name": "feature",
3
- "description": "Plan the feature into ordered iterations, then build each one: apply, test, and review, until the plan is complete.",
4
- "nodes": ["plan", "identify", "apply", "test", "review"],
3
+ "description": "Plan the feature into ordered iterations, then build each one: apply, test, and review, until the plan is complete — and an independent done-check maps every requirement to a passing test before the loop closes.",
4
+ "category": "development",
5
+ "nodes": ["plan", "identify", "apply", "test", "review", "done-check"],
5
6
  "start": "plan",
6
7
  "edges": [
7
8
  { "from": "plan", "on": "pass", "to": "identify" },
8
9
  { "from": "identify", "on": "more", "to": "apply" },
9
- { "from": "identify", "on": "done", "to": "$close" },
10
+ { "from": "identify", "on": "done", "to": "done-check" },
10
11
  { "from": "apply", "on": "pass", "to": "test" },
11
12
  { "from": "test", "on": "pass", "to": "review" },
12
13
  { "from": "test", "on": "fail", "to": "apply" },
13
14
  { "from": "review", "on": "pass", "to": "identify" },
14
- { "from": "review", "on": "fail", "to": "apply" }
15
+ { "from": "review", "on": "fail", "to": "apply" },
16
+ { "from": "done-check", "on": "pass", "to": "$close" },
17
+ { "from": "done-check", "on": "fail", "to": "identify" }
15
18
  ],
16
19
  "loops": [
17
- { "name": "iterations", "nodes": ["identify", "apply", "test", "review"], "max": 20, "iteration": true },
20
+ { "name": "iterations", "nodes": ["identify", "apply", "test", "review", "done-check"], "max": 20, "iteration": true },
18
21
  { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
19
22
  { "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
20
23
  ]
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "fix-flaky-tests",
3
+ "description": "Confirm the suspected flaky tests by 20 repeated runs, then fix one per iteration at its root cause, re-confirm it with 20 runs, test, and review.",
4
+ "category": "tests",
5
+ "rules": [
6
+ "Fix at the root cause — shared state, ordering, time, concurrency — never with a retry, a sleep or a longer timeout.",
7
+ "A test that fails every run is a bug for the bugfix template; one that never fails is not fixed."
8
+ ],
9
+ "nodes": ["flake-repro", "identify", "apply", "flake-check", "test", "review"],
10
+ "start": "flake-repro",
11
+ "edges": [
12
+ { "from": "flake-repro", "on": "flaky", "to": "identify" },
13
+ { "from": "flake-repro", "on": "stable", "to": "$stop" },
14
+ { "from": "flake-repro", "on": "broken", "to": "$stop" },
15
+ { "from": "identify", "on": "more", "to": "apply" },
16
+ { "from": "identify", "on": "done", "to": "$close" },
17
+ { "from": "apply", "on": "pass", "to": "flake-check" },
18
+ { "from": "flake-check", "on": "stable", "to": "test" },
19
+ { "from": "flake-check", "on": "flaky", "to": "apply" },
20
+ { "from": "test", "on": "pass", "to": "review" },
21
+ { "from": "test", "on": "fail", "to": "apply" },
22
+ { "from": "review", "on": "pass", "to": "identify" },
23
+ { "from": "review", "on": "fail", "to": "apply" }
24
+ ],
25
+ "loops": [
26
+ { "name": "iterations", "nodes": ["identify", "apply", "flake-check", "test", "review"], "max": 10, "iteration": true },
27
+ { "name": "stabilise", "nodes": ["apply", "flake-check"], "max": 4 },
28
+ { "name": "review-fix", "nodes": ["apply", "flake-check", "test", "review"], "max": 3 }
29
+ ]
30
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "legacy-refactor",
3
+ "description": "Confirm the suite is green, pin the code's current behaviour with characterization tests in their own commit, then refactor behind that net: apply, test, and review, until the requirement is met.",
4
+ "category": "refactoring",
5
+ "nodes": ["baseline-green", "characterize", "identify", "apply", "test", "review"],
6
+ "start": "baseline-green",
7
+ "edges": [
8
+ { "from": "baseline-green", "on": "pass", "to": "characterize" },
9
+ { "from": "baseline-green", "on": "fail", "to": "$stop" },
10
+ { "from": "characterize", "on": "pass", "to": "identify" },
11
+ { "from": "characterize", "on": "fail", "to": "$stop" },
12
+ { "from": "identify", "on": "more", "to": "apply" },
13
+ { "from": "identify", "on": "done", "to": "$close" },
14
+ { "from": "apply", "on": "pass", "to": "test" },
15
+ { "from": "test", "on": "pass", "to": "review" },
16
+ { "from": "test", "on": "fail", "to": "apply" },
17
+ { "from": "review", "on": "pass", "to": "identify" },
18
+ { "from": "review", "on": "fail", "to": "apply" }
19
+ ],
20
+ "loops": [
21
+ { "name": "iterations", "nodes": ["identify", "apply", "test", "review"], "max": 20, "iteration": true },
22
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
23
+ { "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
24
+ ],
25
+ "weights": { "logic": 0.6 }
26
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "legacy-tests",
3
+ "description": "Confirm the suite is green, then pin legacy behaviour one change point at a time: characterization tests, a run, and a mutation check that proves they bite.",
4
+ "category": "tests",
5
+ "rules": [
6
+ "Tests only: production code is never touched."
7
+ ],
8
+ "nodes": ["baseline-green", "identify", "characterize", "test", "mutation-check"],
9
+ "start": "baseline-green",
10
+ "edges": [
11
+ { "from": "baseline-green", "on": "pass", "to": "identify" },
12
+ { "from": "baseline-green", "on": "fail", "to": "$stop" },
13
+ { "from": "identify", "on": "more", "to": "characterize" },
14
+ { "from": "identify", "on": "done", "to": "$close" },
15
+ { "from": "characterize", "on": "pass", "to": "test" },
16
+ { "from": "characterize", "on": "fail", "to": "$stop" },
17
+ { "from": "test", "on": "pass", "to": "mutation-check" },
18
+ { "from": "test", "on": "fail", "to": "characterize" },
19
+ { "from": "mutation-check", "on": "pass", "to": "identify" },
20
+ { "from": "mutation-check", "on": "fail", "to": "characterize" },
21
+ { "from": "mutation-check", "on": "unavailable", "to": "identify" }
22
+ ],
23
+ "loops": [
24
+ { "name": "iterations", "nodes": ["identify", "characterize", "test", "mutation-check"], "max": 20, "iteration": true },
25
+ { "name": "write-run", "nodes": ["characterize", "test"], "max": 3 },
26
+ { "name": "kill-mutants", "nodes": ["characterize", "test", "mutation-check"], "max": 3 }
27
+ ],
28
+ "weights": { "new-file": 0.2 }
29
+ }
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "refactor",
3
- "description": "Confirm the suite is green before touching anything, then iterate on the shape of the code alone. Tests are not edited by this template — a refactor that needs a different test is a behaviour change, not a refactor.",
3
+ "description": "Confirm the suite is green before touching anything, then iterate on the shape of the code alone.",
4
+ "category": "refactoring",
5
+ "rules": [
6
+ "Tests are not edited: a refactor that needs a different test is a behaviour change, not a refactor."
7
+ ],
4
8
  "nodes": ["baseline-green", "identify", "apply", "test"],
5
9
  "start": "baseline-green",
6
10
  "edges": [
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "remove-dead-code",
3
+ "description": "Confirm the suite is green, then remove one coherent group of unused code per iteration — exports, classes, files, retired flags — test it, and review it. Deletions score soft, not blocking.",
4
+ "category": "refactoring",
5
+ "rules": [
6
+ "Each card's intent cites the proof it is unused: the requirement's tool output (knip, ts-prune, vulture, PMD or IntelliJ inspections) and a reference search (git grep over code AND resources) for reflection, DI by name, Spring bean names and config.",
7
+ "Generated sources do not count as unused.",
8
+ "Public entry points belong in LOOP.md's contracts, not in a deletion."
9
+ ],
10
+ "nodes": ["baseline-green", "identify", "apply", "test", "review"],
11
+ "start": "baseline-green",
12
+ "edges": [
13
+ { "from": "baseline-green", "on": "pass", "to": "identify" },
14
+ { "from": "baseline-green", "on": "fail", "to": "$stop" },
15
+ { "from": "identify", "on": "more", "to": "apply" },
16
+ { "from": "identify", "on": "done", "to": "$close" },
17
+ { "from": "apply", "on": "pass", "to": "test" },
18
+ { "from": "test", "on": "pass", "to": "review" },
19
+ { "from": "test", "on": "fail", "to": "apply" },
20
+ { "from": "review", "on": "pass", "to": "identify" },
21
+ { "from": "review", "on": "fail", "to": "apply" }
22
+ ],
23
+ "loops": [
24
+ { "name": "iterations", "nodes": ["identify", "apply", "test", "review"], "max": 20, "iteration": true },
25
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
26
+ { "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
27
+ ],
28
+ "weights": { "delete": 0.5 },
29
+ "ignoreDeletions": ["**/generated/**", "**/generated-sources/**", "**/target/**", "**/build/generated/**"]
30
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "spec-first-feature",
3
+ "description": "Write the feature's spec first — specs/<slug>/spec.md with EARS acceptance criteria and an ordered task list — for the user to review, commit it, then build it task by task: apply, test, review. An independent done-check maps every criterion to a passing test before the loop closes.",
4
+ "category": "development",
5
+ "rules": [
6
+ "One spec task per iteration, in the spec's order.",
7
+ "Open questions in the spec wait for the user's answers; never answer them yourself."
8
+ ],
9
+ "nodes": ["spec", "identify", "apply", "test", "review", "done-check"],
10
+ "start": "spec",
11
+ "edges": [
12
+ { "from": "spec", "on": "pass", "to": "identify" },
13
+ { "from": "spec", "on": "fail", "to": "$stop" },
14
+ { "from": "identify", "on": "more", "to": "apply" },
15
+ { "from": "identify", "on": "done", "to": "done-check" },
16
+ { "from": "apply", "on": "pass", "to": "test" },
17
+ { "from": "test", "on": "pass", "to": "review" },
18
+ { "from": "test", "on": "fail", "to": "apply" },
19
+ { "from": "review", "on": "pass", "to": "identify" },
20
+ { "from": "review", "on": "fail", "to": "apply" },
21
+ { "from": "done-check", "on": "pass", "to": "$close" },
22
+ { "from": "done-check", "on": "fail", "to": "identify" }
23
+ ],
24
+ "loops": [
25
+ { "name": "iterations", "nodes": ["identify", "apply", "test", "review", "done-check"], "max": 20, "iteration": true },
26
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
27
+ { "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
28
+ ]
29
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "tdd",
3
+ "description": "Plan the work, then build it test-first: each iteration writes a failing test, makes it pass, and reviews the diff, until the plan is complete.",
4
+ "category": "tests",
5
+ "nodes": ["plan", "identify", "red-test", "apply", "test", "review"],
6
+ "start": "plan",
7
+ "edges": [
8
+ { "from": "plan", "on": "pass", "to": "identify" },
9
+ { "from": "identify", "on": "more", "to": "red-test" },
10
+ { "from": "identify", "on": "done", "to": "$close" },
11
+ { "from": "red-test", "on": "red", "to": "apply" },
12
+ { "from": "red-test", "on": "green", "to": "test" },
13
+ { "from": "red-test", "on": "untestable", "to": "$stop" },
14
+ { "from": "apply", "on": "pass", "to": "test" },
15
+ { "from": "test", "on": "pass", "to": "review" },
16
+ { "from": "test", "on": "fail", "to": "apply" },
17
+ { "from": "review", "on": "pass", "to": "identify" },
18
+ { "from": "review", "on": "fail", "to": "apply" }
19
+ ],
20
+ "loops": [
21
+ { "name": "iterations", "nodes": ["identify", "red-test", "apply", "test", "review"], "max": 20, "iteration": true },
22
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
23
+ { "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
24
+ ]
25
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "update-contract",
3
+ "description": "Change an interface with live consumers — an API, a schema, an event — as expand, migrate one consumer per iteration, contract: plan it for the user to review, then apply, test, check old and new consumers, and review.",
4
+ "category": "architecture",
5
+ "rules": [
6
+ "Contract files (OpenAPI, AsyncAPI, protobuf, Avro, GraphQL schemas, Flyway and Liquibase migrations) stop for a human by default; a stop on one is expected, not a failure.",
7
+ "`geneseed loop init --contracts <globs>` appends more contract globs, and LOOP.md's `contracts` can be trimmed."
8
+ ],
9
+ "nodes": ["migration-plan", "identify", "apply", "test", "compat-check", "review"],
10
+ "start": "migration-plan",
11
+ "edges": [
12
+ { "from": "migration-plan", "on": "pass", "to": "identify" },
13
+ { "from": "migration-plan", "on": "fail", "to": "$stop" },
14
+ { "from": "identify", "on": "more", "to": "apply" },
15
+ { "from": "identify", "on": "done", "to": "$close" },
16
+ { "from": "apply", "on": "pass", "to": "test" },
17
+ { "from": "test", "on": "pass", "to": "compat-check" },
18
+ { "from": "test", "on": "fail", "to": "apply" },
19
+ { "from": "compat-check", "on": "pass", "to": "review" },
20
+ { "from": "compat-check", "on": "fail", "to": "apply" },
21
+ { "from": "review", "on": "pass", "to": "identify" },
22
+ { "from": "review", "on": "fail", "to": "apply" }
23
+ ],
24
+ "loops": [
25
+ { "name": "iterations", "nodes": ["identify", "apply", "test", "compat-check", "review"], "max": 20, "iteration": true },
26
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
27
+ { "name": "review-fix", "nodes": ["apply", "test", "compat-check", "review"], "max": 3 }
28
+ ],
29
+ "contracts": [
30
+ "**/openapi*.yaml", "**/openapi*.yml", "**/openapi*.json", "**/asyncapi*.yaml", "**/*.proto", "**/*.avsc",
31
+ "**/*.graphqls", "**/*.graphql", "**/asyncapi*.yml", "**/asyncapi*.json", "**/db/migration/**", "**/db/changelog/**"
32
+ ]
33
+ }
@@ -32,7 +32,9 @@ that…".
32
32
  <4-10 lines of direct instructions, ending with exactly how to choose among the outcomes>
33
33
  ```
34
34
 
35
- No double-brace tokens in the body: the loop hands it to the model raw.
35
+ No double-brace tokens in the body: the loop hands it to the model raw. If the brick finds
36
+ something the next brick needs, have it write that to a file in the OS temp directory and
37
+ report the path with the outcome — the loop skill records it as a note.
36
38
  3. **Overriding by name** — a project or global brick named like a shipped one replaces it in
37
39
  every template. That is allowed; say so to the user. `geneseed loop check` lists overrides under `overridden`.
38
40
  4. **Check it:** `geneseed loop check --brick <path>` (this file alone), then
@@ -3,9 +3,9 @@
3
3
  > {{DESC_BRUNO_COLLECTION_GENERATOR}}
4
4
 
5
5
  **Trigger:** creating, converting, or reorganising a [Bruno](https://www.usebruno.com/)
6
- collection — requests, folders, environments, request docs — from backend routes, an
7
- OpenAPI snippet, pasted API docs, curl commands, or a plain endpoint list, as `.bru`
8
- files or OpenCollection YAML.
6
+ collection as `.bru` files or OpenCollection YAML. The collection covers requests,
7
+ folders, environments and request docs; the source can be backend routes, an OpenAPI
8
+ snippet, pasted API docs, curl commands, or a plain endpoint list.
9
9
 
10
10
  ## Procedure
11
11
  1. Gather the inputs, and state every assumption you fill in ({{LAW:echo-the-intent}}): the source
@@ -3,9 +3,9 @@
3
3
  > {{DESC_BRUNO_TEST_WRITER}}
4
4
 
5
5
  **Trigger:** writing, reviewing, or strengthening tests for a [Bruno](https://www.usebruno.com/)
6
- request or collection — assertions, `tests` blocks, pre-request and post-response
7
- scripts, request chaining, schema checks, edge cases — in `.bru` files or
8
- OpenCollection YAML.
6
+ request or collection in `.bru` files or OpenCollection YAML. Covers assertions, `tests`
7
+ blocks, pre-request and post-response scripts, request chaining, schema checks, and
8
+ edge cases.
9
9
 
10
10
  ## Procedure
11
11
  1. Understand the request or collection first: method, path, auth, body, headers,
@@ -2,9 +2,9 @@
2
2
 
3
3
  > {{DESC_CI_FIX}}
4
4
 
5
- **Trigger:** a CI run, pipeline job, or pre-merge check is red — on a PR you opened, a
6
- branch you are on, or one the user points you at — or the user says "CI is failing",
7
- "fix the build", "why is the pipeline red". The [debug {{SKILL}}](debug.md) drives
5
+ **Trigger:** a CI run, pipeline job, or pre-merge check is red, or the user says "CI is
6
+ failing", "fix the build", "why is the pipeline red". The red run can be on a PR the agent
7
+ opened, the branch it is on, or one the user points at. The [debug {{SKILL}}](debug.md) drives
8
8
  the root-causing once the failure reproduces locally; this {{SKILL}} gets it there and
9
9
  gets the fix back through the same gate.
10
10
 
@@ -2,10 +2,10 @@
2
2
 
3
3
  > {{DESC_CONSOLIDATE_MEMORY}}
4
4
 
5
- **Trigger:** the {{MEMORY}} index has grown past what a session can usefully read
6
- (~40 lines), two entries say the same or opposite things, a memory names a file, flag,
7
- or command that no longer exists, a `feedback` lesson keeps recurring, or the user
8
- says "clean up memory", "consolidate", "what do you actually remember". Also worth a
5
+ **Trigger:** the {{MEMORY}} index has outgrown one useful read (~40 lines) or holds
6
+ duplicate, contradictory, or stale entries. Stale means a memory naming a file, flag, or
7
+ command that no longer exists; a `feedback` lesson that keeps recurring counts too, as
8
+ does the user saying "clean up memory", "consolidate", "what do you actually remember". Also worth a
9
9
  pass after a release or a large refactor, when many recorded facts just changed. The
10
10
  [rule {{SKILL}}](rule.md) writes one memory or one rule; this {{SKILL}} tends the
11
11
  whole set. The user's wiki is out of scope — that is the [wiki {{SKILL}}](wiki.md).
@@ -2,7 +2,7 @@
2
2
 
3
3
  > {{DESC_COUNCIL}}
4
4
 
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.
5
+ **Trigger:** the user asks to "convene a council", "debate this", or "argue both sides", or wants a decision stress-tested from several points of view. A change, plan, or claim all qualify, as long as it is challenged before committing to it.
6
6
 
7
7
  ## Procedure
8
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:read-the-docs-first}}) so the council argues the actual thing; if the motion is unclear or bundles several questions, split it and ask once, then proceed.
@@ -2,7 +2,7 @@
2
2
 
3
3
  > {{DESC_FRESH_EYES}}
4
4
 
5
- **Trigger:** a task is claimed done and the solving session believes the artifact works — before merge or handoff, or when the user asks to "validate", "fresh eyes", "prove it meets the spec", "did this actually solve it", or "independent sign-off", and the cost of a confidently-wrong "done" is high. This re-judges the *result* from zero context — distinct from [geneseed-code-review](geneseed-code-review.md), which reviews a *diff* with full knowledge of the change. For an open-ended quality critique use [roast-me](roast-me.md); for a multi-stance debate over an undecided question use [council](council.md).
5
+ **Trigger:** work is claimed done and needs a blind check against the original ask. That is before merge or handoff, while the solving session believes the artifact works, or when the user asks to "validate", "fresh eyes", "prove it meets the spec", "did this actually solve it", or "independent sign-off" — and the cost of a confidently-wrong "done" is high. This re-judges the *result* from zero context — distinct from [geneseed-code-review](geneseed-code-review.md), which reviews a *diff* with full knowledge of the change. For an open-ended quality critique use [roast-me](roast-me.md); for a multi-stance debate over an undecided question use [council](council.md).
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:echo-the-intent}}); if it is too fuzzy even for that, this is a judgement call — convene [council](council.md) instead.
@@ -2,7 +2,7 @@
2
2
 
3
3
  > {{DESC_GIT_ARCHAEOLOGY}}
4
4
 
5
- **Trigger:** you need to learn something *from* the history — when a regression was
5
+ **Trigger:** something must be learned *from* the history — when a regression was
6
6
  introduced, who last touched a line and why, or where a symbol or string entered the
7
7
  codebase. Read-only: this {{SKILL}} investigates, it does not change history (to repair
8
8
  or rewrite, use git-rescue.md; to write a new commit, use commit.md).
@@ -2,9 +2,10 @@
2
2
 
3
3
  > {{DESC_GIT_RESCUE}}
4
4
 
5
- **Trigger:** the repository is in a broken or messy state — a bad rebase/merge/reset,
6
- lost commits, a detached HEAD, a half-finished operation, work stranded in a stash — or
7
- you intend to deliberately rewrite history (interactive rebase, squash, amend). For
5
+ **Trigger:** commits are lost, a rebase/merge/reset went wrong, or history is to be
6
+ deliberately rewritten (interactive rebase, squash, amend). The repository can also be
7
+ messy in other ways: a detached HEAD, a half-finished operation, or work stranded in a
8
+ stash. For
8
9
  finding *when/why* something changed without altering history, use git-archaeology.md.
9
10
 
10
11
  ## Procedure
@@ -2,7 +2,7 @@
2
2
 
3
3
  > {{DESC_HANDOFF}}
4
4
 
5
- **Trigger:** the context window is filling, a session is ending mid-task, or you're passing work to another agent or developer.
5
+ **Trigger:** the context window is filling, a session is ending mid-task, or work is passing to another agent or developer.
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.