geneseed 4.0.0 → 4.2.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 (115) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/README.md +2 -2
  3. package/SHIPPED.md +3 -3
  4. package/adapters/claude-code/README.md +0 -21
  5. package/adapters/opencode/HOW-OPENCODE-LOADS.md +35 -0
  6. package/adapters/opencode/plugins/geneseed-activity.js +105 -2
  7. package/adapters/opencode/plugins/geneseed-context.js +96 -1
  8. package/adapters/opencode/plugins/geneseed-guard.js +64 -1
  9. package/adapters/opencode/plugins/geneseed-learn.js +127 -14
  10. package/adapters/opencode/plugins/geneseed-notify.js +46 -1
  11. package/adapters/opencode/plugins/geneseed-ponytail.js +44 -2
  12. package/adapters/opencode/plugins/geneseed-workflow.js +124 -24
  13. package/docs/guides/mcp-filesystem.md +2 -2
  14. package/docs/guides/mcp-gitlab.md +2 -2
  15. package/docs/guides/mcp-markitdown.md +3 -3
  16. package/docs/guides/mcp.md +7 -7
  17. package/docs/guides/project-context.md +1 -1
  18. package/docs/guides/uninstall.md +2 -0
  19. package/docs/guides/upgrade.md +2 -0
  20. package/docs/reference/opencode-plugins.md +9 -0
  21. package/docs/token-footprint.md +1 -1
  22. package/docs/understand/take-it-out.md +1 -1
  23. package/harness.config.json +1 -1
  24. package/js/README.md +6 -0
  25. package/js/build/driver.mjs +47 -11
  26. package/js/build/emit-claude.mjs +22 -10
  27. package/js/build/emit-common.mjs +9 -3
  28. package/js/build/emit-opencode.mjs +18 -11
  29. package/js/build/source.mjs +1 -0
  30. package/js/build/version.mjs +10 -3
  31. package/js/cli-table.json +16 -1
  32. package/js/hosts/hooks.mjs +4 -0
  33. package/js/hosts/installs.mjs +1 -1
  34. package/js/hosts/mcp.mjs +23 -152
  35. package/js/hosts/native.mjs +38 -6
  36. package/js/hosts/opencode.mjs +1 -1
  37. package/js/hosts/owned.mjs +159 -0
  38. package/js/hosts/settings.mjs +4 -0
  39. package/js/hosts/usage.mjs +62 -0
  40. package/js/inspect/checks-repo.mjs +76 -1
  41. package/js/inspect/cost.mjs +83 -0
  42. package/js/inspect/doctor.mjs +2 -1
  43. package/js/inspect/inventory.mjs +1 -1
  44. package/js/maintain/uninstall.mjs +77 -42
  45. package/js/web/actions.mjs +15 -77
  46. package/js/web/api.mjs +74 -4
  47. package/js/web/gates-api.mjs +44 -0
  48. package/js/web/handler.mjs +2 -2
  49. package/js/web/routes.mjs +9 -4
  50. package/js/web/update-check.mjs +61 -0
  51. package/js/web/usage-api.mjs +95 -0
  52. package/package.json +1 -1
  53. package/registry.json +18 -25
  54. package/src/AGENT.md.tmpl +0 -1
  55. package/src/agents/_template.md +2 -1
  56. package/src/agents/researcher.md +2 -1
  57. package/src/agents/reviewer.md +9 -4
  58. package/src/agents/tester.md +3 -3
  59. package/src/doctrines/rigor.md +8 -7
  60. package/src/skills/brainstorm/builder-check.md +16 -0
  61. package/src/skills/brainstorm.md +19 -11
  62. package/src/skills/daydream/SKILL.md +1 -1
  63. package/src/skills/daydream/VENDOR.md +4 -0
  64. package/src/skills/debug/ci.md +4 -4
  65. package/src/skills/debug.md +4 -4
  66. package/src/skills/develop.md +15 -4
  67. package/src/skills/fresh-eyes.md +1 -1
  68. package/src/skills/geneseed-code-review.md +13 -3
  69. package/src/skills/handoff.md +1 -1
  70. package/src/skills/parallel-agents.md +4 -4
  71. package/src/skills/pipeline.md +3 -3
  72. package/src/skills/plan.md +18 -6
  73. package/src/skills/review-response.md +5 -2
  74. package/src/skills/security-audit.md +7 -1
  75. package/src/skills/ship.md +2 -1
  76. package/src/skills/wayfinder.md +25 -6
  77. package/src/skills/worktree.md +7 -5
  78. package/themes/_TEMPLATE.json +0 -1
  79. package/themes/biker.json +0 -1
  80. package/themes/commentator.json +0 -1
  81. package/themes/cyberpunk.json +0 -1
  82. package/themes/gamer.json +0 -1
  83. package/themes/imperial.json +0 -1
  84. package/themes/joker.json +0 -1
  85. package/themes/marvin.json +0 -1
  86. package/themes/mean.json +0 -1
  87. package/themes/military.json +0 -1
  88. package/themes/neutral.json +0 -1
  89. package/themes/pirate.json +0 -1
  90. package/themes/sports.json +0 -1
  91. package/themes/verstappen.json +0 -1
  92. package/themes/wizard.json +0 -1
  93. package/web/dist/assets/{Activity-BCtqxjfy.js → Activity-ClEuDk9q.js} +1 -1
  94. package/web/dist/assets/{ActivityDetail-Ba3Oo4dE.js → ActivityDetail-CS9IuJlw.js} +1 -1
  95. package/web/dist/assets/Dashboard-BiRFjkBS.js +2 -0
  96. package/web/dist/assets/Docs-CD20mrVv.js +5 -0
  97. package/web/dist/assets/{GreenhouseView-DnJ1Ggp1.js → GreenhouseView-CL3PubNb.js} +1 -1
  98. package/web/dist/assets/{Installs-CWoNKFBk.js → Installs-BFLOVV0r.js} +2 -2
  99. package/web/dist/assets/{JournalView-g6-bw4c8.js → JournalView-BvsSkjSn.js} +1 -1
  100. package/web/dist/assets/{Laws-DkVWR1tb.js → Laws-BVoYOkVW.js} +2 -2
  101. package/web/dist/assets/{Library-CK9HZzjV.js → Library-Bl7xqOlh.js} +1 -1
  102. package/web/dist/assets/{Loops-BP98SMOH.js → Loops-Cnpep8FX.js} +1 -1
  103. package/web/dist/assets/{OperatorHudView-DI_n12M9.js → OperatorHudView-B0AMVmtV.js} +1 -1
  104. package/web/dist/assets/{Personal-Bk89f13a.js → Personal-CBg_x2kA.js} +1 -1
  105. package/web/dist/assets/{Tabs-3WuYIE1b.js → Tabs-2gX8I69E.js} +1 -1
  106. package/web/dist/assets/api-Bp5eW_6m.js +1 -0
  107. package/web/dist/assets/{drawable-oCUeq9e5.js → drawable-KPn0rKI7.js} +1 -1
  108. package/web/dist/assets/{index-Ctp-4poP.css → index-CO-9wMJY.css} +1 -1
  109. package/web/dist/assets/index-DoD_g2CM.js +2 -0
  110. package/web/dist/index.html +3 -3
  111. package/src/skills/herdr.md +0 -154
  112. package/web/dist/assets/Dashboard-DpHza68-.js +0 -2
  113. package/web/dist/assets/Docs-Bw_-UK0O.js +0 -5
  114. package/web/dist/assets/api-CxgfYu18.js +0 -1
  115. package/web/dist/assets/index-CiXwChvf.js +0 -2
@@ -15,12 +15,15 @@ the design is skipped.
15
15
  several goals or systems, separate them and take one at a time.
16
16
  2. **Interpret charitably, then interview.** Read the request in its strongest
17
17
  reasonable form — do not manufacture ambiguity from a fair ask. If goal, scope and
18
- success criteria are already unambiguous, restate them in one line and go to step
19
- 4. Otherwise ask ONE numbered round of every question answerable now, each with your
20
- recommended answer so "yes" accepts it; dependent questions wait a round. Drive at
21
- *why* (the outcome wanted), *scope* (in and out) and *done* (how success is judged) —
22
- not *how* yet. Stop when each is unambiguous. Facts are yours to find (read the code,
23
- dispatch a subagent), never the user's. A decision someone else owns gets a drafted
18
+ success criteria are already unambiguous, restate them in one line (naming any
19
+ platform or language choice) and go to step 4. Otherwise ask ONE numbered round of
20
+ every question answerable now, each with your recommended answer so "yes" accepts it;
21
+ dependent questions wait a round. Drive at *why* (the outcome wanted), *scope* (in and
22
+ out), *done* (how success is judged) and which build choices (platform, language, key
23
+ libraries) the user wants to own. Existing work decides by default
24
+ ({{DOCTRINE:respect-conventions}}); a choice you take goes in the ledger as **your
25
+ call**, never as agreed. Stop when each is unambiguous. Facts are yours to find (read
26
+ the code, dispatch a subagent), never the user's. A decision someone else owns gets a drafted
24
27
  `questionnaire-<slug>.md` for them — ask the user only who and what they need back.
25
28
  3. **Ledger the decisions.** Name every KEY DECISION the answers imply or leave open —
26
29
  direction chosen, trade-offs accepted, load-bearing constraints, assumptions,
@@ -28,15 +31,18 @@ the design is skipped.
28
31
  fact. Read the ledger back as a numbered list and get an EXPLICIT confirmation
29
32
  ({{LAW:echo-the-intent}} — an inferred intent is not ground truth until echoed and agreed);
30
33
  scope the read-back to what is consequential, irreversible or genuinely uncertain.
31
- 4. **Design — only when there is something to design.** Propose 2–3 approaches with
34
+ 4. **Size it, then design.** Say the size; the user may override. *Quick* — exit and do
35
+ it, no spec. *Small* — the confirmed ledger in chat is the spec; go to step 6.
36
+ *Project* — design, spec file, builder check. If it grows mid-work, stop and step up.
37
+ Design only when there is something to design: propose 2–3 approaches with
32
38
  trade-offs, leading with your recommendation. Present the chosen design in
33
39
  sections (purpose → components → data flow → failure modes → testing), getting an
34
40
  explicit "looks right" after each; cut anything YAGNI. For a non-design ask, skip
35
41
  this step.
36
42
  5. **Write the spec.** One file the next session can find — `SPEC.md` beside the work,
37
43
  or the project's own spec home (e.g. `docs/specs/`): the goal in one line, the
38
- confirmed decision ledger, then the design (when there is one). Re-read it cold for
39
- ambiguity and fix what a stranger could misread.
44
+ confirmed decision ledger, then the design (when there is one). Then run the builder
45
+ check: read [brainstorm/builder-check.md](brainstorm/builder-check.md) and follow it.
40
46
  6. **Exit — route, don't build.** Hand the spec to the {{SKILL}} the work now needs:
41
47
  [plan](plan.md) for a multi-step build whose route is known (sliced if too big for a
42
48
  session), [wayfinder](wayfinder.md) only when the route itself is still in the fog,
@@ -44,7 +50,9 @@ the design is skipped.
44
50
 
45
51
  ## Done when
46
52
  - A confirmed, ambiguity-free goal with its ratified decision ledger — and, where
47
- the ask was a design, an approved design — sits in one spec file, and the work has
48
- been handed to the next {{SKILL}} with no code written beforehand.
53
+ the ask was a design, an approved design that passed the builder check — sits in one
54
+ spec file (or, for a small change, in the confirmed chat ledger), and the work has
55
+ been handed to the next {{SKILL}} with no code written beforehand — or, sized quick,
56
+ the brainstorm was exited to do the work.
49
57
 
50
58
  <!-- INCLUDE: skills/_self-improvement.md -->
@@ -79,4 +79,4 @@ No external dependencies -- pure Claude Code tools (Glob, Read, Write, Bash, Tas
79
79
 
80
80
  ## Cost
81
81
 
82
- Per run (~50 pairs): approximately $0.40-0.50 via Claude Code usage.
82
+ Per run (~50 pairs): approximately 0.40-0.50 USD via Claude Code usage.
@@ -37,3 +37,7 @@ bump the commit above.
37
37
  `SKILL.md`'s frontmatter also carries `disable-model-invocation: true`, which upstream lacks: the
38
38
  skill is user-only (`/daydream`), so its description stays out of the model's always-on catalogue —
39
39
  it is personal to one vault. Re-apply it on update.
40
+
41
+ The cost line in `SKILL.md` reads "0.40-0.50 USD" where upstream writes a dollar sign before the
42
+ number: Claude Code substitutes a dollar sign followed by a digit with the skill's arguments, so
43
+ upstream's text renders mangled. Re-apply it on update.
@@ -1,10 +1,10 @@
1
1
  # {{SKILL}}: debug — CI branch, a red run
2
2
 
3
3
  Needs the CI log: the host's CI tool, `gh run view --log-failed` or equivalent, or the log pasted by the user.
4
- 1. **Read the log, not the badge.** Find the first failing job and its first failing step. Read the error and the command that produced it in full ({{LAW:verify-before-asserting}}); note the runner's OS, toolchain versions and exact invocation.
5
- 2. **Classify before touching anything:** a *real failure* (code or test wrong), an *environment difference* (a version, path, line endings, missing binary, a test skipped locally but not in CI), an *infra flake* (network, runner, cache, timeout), or a *gate on the report itself* (a coverage or count threshold, a lint the local hook skips).
6
- 3. **Reproduce under CI's own conditions** — the workflow's script, flags and a matching toolchain. Green locally and red in CI has not reproduced yet: close the gap (the env var, `--frozen-lockfile`, the reporter, the binary not on PATH) until it fails the same way. Never retry a run blindly.
7
- 4. **Fix at the cause** through steps 2–6 of the debug procedure. For an environment difference, make the *repo* deterministic (pin, normalise, declare) rather than CI more permissive. A flake is fixed at its source — the race, the timeout, the unpinned resource — or quarantined *with an issue and an owner*, never silently skipped ({{LAW:cure-the-cause}}). A fix to CI config itself is its own commit ({{LAW:one-intent-one-act}}), noted in the PR.
4
+ 1. **Read the log, not the badge.** Measure a log before reading it and grep a large one rather than loading it whole ({{DOCTRINE:context-economy}}). Find the first failing job and its first failing step. Read the error and the command that produced it in full ({{LAW:verify-before-asserting}}); note the runner's OS, toolchain versions and exact invocation.
5
+ 2. **Classify before touching anything.** First diff against the last green run: commit range, lockfile, runner image, toolchain. Then name the class: a *real failure* (code or test wrong), an *environment difference* (a version, path, line endings, missing binary, a test skipped locally but not in CI), an *infra flake* (network, runner, cache, timeout), or a *gate on the report itself* (a coverage or count threshold, a lint the local hook skips).
6
+ 3. **Reproduce under CI's own conditions** — the workflow's script, flags and a matching toolchain. Green locally and red in CI has not reproduced yet: close the gap (the env var, `--frozen-lockfile`, the reporter, the binary not on PATH) until it fails the same way. Never retry a run blindly. CI logs are shared: probe a secret's presence, never its value (`[ -n "$TOKEN" ] && echo set || echo unset`).
7
+ 4. **Fix at the cause** through steps 2–6 of the debug procedure. For an environment difference, make the *repo* deterministic (pin, normalise, declare) rather than CI more permissive. A flake is fixed at its source — the race, the timeout, the unpinned resource — or quarantined *with an issue and an owner*, never silently skipped ({{LAW:cure-the-cause}}). A sleep that guesses at timing becomes a wait on the actual condition with a bounded timeout; a fixed delay that remains says why ({{DOCTRINE:honest-tests}}). A fix to CI config itself is its own commit ({{LAW:one-intent-one-act}}), noted in the PR.
8
8
  5. **Prove it the way CI will:** run CI's command locally once more and read the output, push with the user's per-push consent ({{DOCTRINE:consent-before-push}}), and watch the re-run to green; the gate that reported it verifies the fix. Report what failed, its class, what changed, and the green run.
9
9
 
10
10
  ## Done when
@@ -13,13 +13,13 @@ faster than thrashing; do not trade it away under pressure.
13
13
 
14
14
  ## Procedure
15
15
  1. **Build one command that goes red on *this* bug** before reading code for a theory. It asserts the user's exact symptom (not "didn't crash"), gives the same verdict every run, takes seconds and runs unattended; run it and show the output. Read the error and stack trace in full. For a flaky bug, raise the reproduction rate until it is debuggable. If you cannot build it, say so, list what you tried and ask for access or a captured artifact — no command, no hypothesis. Read `GLOSSARY.md` (or `CONTEXT.md`) and the ADRs in the area for the domain's vocabulary.
16
- 2. **Minimise, then isolate.** Cut inputs and steps one at a time until every remaining element is load-bearing. Then binary-search the cause — the code path, or for a regression the commit range with `git bisect` (the [git-history {{SKILL}}](git-history.md) carries the method). Change one variable at a time. In a multi-layer system (CI → build → sign, API → service → DB), instrument each boundary once to see *which* layer breaks before investigating inside it. For a performance regression, take a baseline measurement and bisect; don't log.
17
- 3. **Rank 3–5 falsifiable hypotheses** ("if X is the cause, changing Y removes the bug") — list them in your reply, then test the top one without waiting. Proceed only on one that explains ALL the evidence — else gather more evidence, don't guess.
16
+ 2. **Minimise, then isolate.** Cut inputs and steps one at a time until every remaining element is load-bearing. Then binary-search the cause — the code path, or for a regression the commit range with `git bisect` (the [git-history {{SKILL}}](git-history.md) carries the method). Change one variable at a time. Find the nearest working twin (a passing sibling test, the last green commit, the same call elsewhere) and list every difference, however small. For a bad value deep in the stack, trace it back caller by caller to where it was born, and fix there. In a multi-layer system (CI → build → sign, API → service → DB), instrument each boundary once to see *which* layer breaks before investigating inside it. For a performance regression, take a baseline measurement and bisect; don't log.
17
+ 3. **Rank 3–5 falsifiable hypotheses** ("if X is the cause, changing Y removes the bug") — list them in your reply, then test the top one without waiting. Cite the evidence for each as `file:line` or the exact log line. Proceed only on one that explains ALL the evidence — else gather more evidence, don't guess.
18
18
  4. Apply the smallest fix that addresses the root cause, not the symptom; resist fixing things the evidence doesn't implicate ({{LAW:one-intent-one-act}}). One change at a time — no bundled "while I'm here" edits.
19
19
  5. Verify: run the project's checks and read the actual output ({{LAW:verify-before-asserting}}) — the step-1 command now passes and nothing nearby broke. Where a test can pin the bug at a seam that reproduces the real call chain, add a regression test that fails before the fix and passes after. If no such seam exists, record that as a finding rather than writing a shallow test. Name the confirmed hypothesis in the commit message. Dispatch the [tester {{AGENT}}](../{{DIR_AGENTS}}/tester.md) for a focused regression check when the blast radius is unclear.
20
- 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:one-intent-one-act}}).
20
+ 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:one-intent-one-act}}). If the evidence puts the cause outside the repo, show it; a retry or timeout is then a named workaround, taken with consent ({{LAW:cure-the-cause}}).
21
21
 
22
- **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`, and **never log secrets, tokens, or PII** ({{LAW:sealed-secrets}}). Tag every probe with one unique prefix (`[DEBUG-a4f2]`) so cleanup is a single grep, and remove or downgrade each probe, `print`/`console.log`/`debugger` before the change ships ({{LAW:cure-the-cause}}).
22
+ **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`, and **never log secrets, tokens, or PII** ({{LAW:sealed-secrets}}) — probe a secret's presence, never its value: `[ -n "$TOKEN" ] && echo set || echo unset`. Tag every probe with one unique prefix (`[DEBUG-a4f2]`) so cleanup is a single grep, and remove or downgrade each probe, `print`/`console.log`/`debugger` before the change ships ({{LAW:cure-the-cause}}).
23
23
 
24
24
  **CI branch (a red run)** → read [debug/ci.md](debug/ci.md) and follow it.
25
25
 
@@ -38,15 +38,26 @@ case where the seam is only known once the change is made.
38
38
  6. With the slice green, tidy through the [refactor {{SKILL}}](refactor.md) — the tests
39
39
  are the safety net — then commit the slice through the [commit {{SKILL}}](commit.md)
40
40
  ({{DOCTRINE:consent-before-push}}). Loop from step 3, one slice at a time.
41
- 7. **Exit.** When the last slice is in: run the whole affected suite once more, state
42
- what was run and its result, and hand over — to the [ship {{SKILL}}](ship.md) when
41
+ 7. **Exit.** When the last slice is in: run the whole suite once, state what was run and
42
+ its result, and name every failure in it — including one this change did not cause
43
+ ({{DOCTRINE:cover-and-verify}}) — then hand over to the [ship {{SKILL}}](ship.md) when
43
44
  the change is ready for a PR, or to the [handoff {{SKILL}}](handoff.md) if the
44
45
  session ends mid-task. Leave no slice uncommitted and no test you could not make
45
46
  fail.
46
47
 
48
+ ## Anti-patterns — name the one you catch
49
+ - **Implementation-coupled** — mocks an internal collaborator, tests a private method,
50
+ or checks through a side channel (querying the database instead of the interface).
51
+ The tell: it breaks on a refactor that changed no behaviour.
52
+ - **Tautological** — the expected value is recomputed the way the code computes it, so
53
+ the test passes by construction and can never disagree with the code.
54
+ - **Horizontal slicing** — all the tests first, then all the code: the tests pin an
55
+ imagined shape. One test, one implementation, repeat.
56
+
47
57
  ## Done when
48
58
  - Every behaviour changed is covered by a test written this session that was seen
49
- to fail before it passed, the affected suite is green with its output shown, each
50
- slice was committed on its own, and the work has been handed to ship or handoff.
59
+ to fail before it passed, the whole suite ran at exit with its output shown and every
60
+ failure named, each slice was committed on its own, and the work has been handed to
61
+ ship or handoff.
51
62
 
52
63
  <!-- INCLUDE: skills/_self-improvement.md -->
@@ -9,7 +9,7 @@
9
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
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:context-economy}}); 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
- 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:verify-before-asserting}} — 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.
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:verify-before-asserting}} — 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 (a reasonable user's expectation that it not crash or lose data is not gold-plating). The validator does NOT fix, refactor, or polish; it only rules.
13
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:deletion-is-deliberate}}, {{DOCTRINE:consent-before-push}}). 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
@@ -6,7 +6,8 @@
6
6
 
7
7
  ## Procedure
8
8
  1. Pin the diff: `git diff <base>...HEAD` for committed work, `git diff <base>`
9
- for uncommitted, or the PR the user names. Confirm the base resolves and the
9
+ for uncommitted, or the PR the user names. `<base>` is `origin/<default branch>` after a
10
+ `git fetch`, never a local branch that may be stale. Confirm the base resolves and the
10
11
  diff is non-empty.
11
12
  2. Find the spec: issue refs in the commits, a path the user gave, a match under
12
13
  `docs/`, `specs/` or `.scratch/`. None → ask once; still none → skip pass 3 and say so.
@@ -15,13 +16,19 @@
15
16
  output format included, but never a {{LAW}}.
16
17
  4. For a large change, consider dispatching the
17
18
  [reviewer {{AGENT}}](../{{DIR_AGENTS}}/reviewer.md) to keep the main context clean.
19
+ When a spec exists and the diff spans more than a few files, run pass 3 in its own
20
+ subagent, handed only the diff command and the spec, alongside passes 1–2: a pass
21
+ that has already filled up on code findings stops reading the spec closely, and
22
+ kept apart, one axis's findings never mask the other's.
18
23
  5. Pass 1 — correctness: logic errors, edge cases, error handling, race
19
24
  conditions. Verify suspect behaviour by running tests, not by assuming.
20
25
  6. Pass 2 — quality: after `REVIEW.md`, the repo's documented standards (`CODING_STANDARDS.md`,
21
26
  `CONTRIBUTING.md`) override. Then, as judgement calls and skipping what tooling enforces:
22
- mysterious name, duplication, feature envy, data clumps, primitive obsession, repeated switches, shotgun surgery, divergent change, speculative generality, middle man, dead code, units that do too much.
27
+ mysterious name, duplication, feature envy, data clumps, primitive obsession, repeated switches, shotgun surgery, divergent change, speculative generality, message chains, middle man, refused bequest, dead code, units that do too much.
23
28
  7. Pass 3 — spec fidelity: flag anything asked for but missing, present but never
24
- asked for, or implemented wrong — quoting the spec line for each. Architecture drift too: when
29
+ asked for, or implemented wrong — quoting the spec line for each. Where the spec is silent,
30
+ judge by what a reasonable user would expect: a crash, hang or data loss on an input the
31
+ spec implies but never names is `issue (blocking)`, not a nitpick. Architecture drift too: when
25
32
  `docs/architecture.md` draws C4 and the diff adds, removes or rewires a container — a Dockerfile,
26
33
  a compose service, a deployable module, a datastore, a new client of another container — but
27
34
  leaves the diagram alone, raise `issue (non-blocking)` and point at
@@ -30,6 +37,9 @@
30
37
  correctness first. Labels: issue, suggestion, question, todo, nitpick, thought, note,
31
38
  praise. Decorations: blocking, non-blocking, if-minor. The line pastes straight into a
32
39
  merge-request comment, and a reader can filter on the label without reading the prose.
40
+ Before the verdict, a **Set aside:** list — each behaviour you considered and left out of
41
+ scope, one line with the reason, or `none` — for the caller to rule on
42
+ ({{DOCTRINE:declare-the-judgment-calls}}).
33
43
 
34
44
  ## Done when
35
45
  - Findings are reported with a verdict that follows from the decorations: any `blocking`
@@ -5,7 +5,7 @@
5
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
- 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.
8
+ 1. Capture the state in the worklog (`WORKLOG.md` or the task's plan file), whose first line names its task or branch so a stale one is never resumed: the goal, what's done, the step in progress, and the exact next step.
9
9
  2. Record open decisions, dead ends already ruled out, blockers, and any irreversible changes already made ({{DOCTRINE:plan-before-acting}}) — so the next agent neither re-derives nor repeats them.
10
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. Link specs, plans, ADRs, issues and commits by path or URL — never copy them in.
@@ -6,11 +6,11 @@
6
6
 
7
7
  ## Procedure
8
8
  1. Confirm independence: the subtasks must not depend on each other's output or write the same files ({{DOCTRINE:one-writer-per-file}}). Write down each unit's **write set** — the files or globs it may change — and intersect them; an overlap runs in sequence or goes to one owner, and shared append files (registries, index tables, lockfiles, generated bundles) stay with you. If they're sequential or share state, use [plan](plan.md) instead.
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 **write set** (edit nothing outside it; return rows for a shared file instead of writing it), the observable check that proves it done, its output contract — naming every file it changed — and the inherited constraints (no commit/push — {{DOCTRINE:consent-before-push}} stays with you; gaps reported, never invented). Hand each unit only the access its goal needs ({{LAW:least-privilege}}). Prefer the read-only [explorer {{AGENT}}](../{{DIR_AGENTS}}/explorer.md) for investigation so the heavy reading stays out of the main context ({{DOCTRINE:context-economy}}). Where no subagent capability exists, run the units sequentially as personas instead, converging the same way.
9
+ 2. Split the work into self-contained units, each with one clear goal and a defined output contract — what it must return. Several small edits of one kind (the same fix, constant or field across files) form ONE unit with the union write set and get one review.
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 **write set** (edit nothing outside it; return rows for a shared file instead of writing it), the observable check that proves it done, its output contract — naming every file it changed — and the inherited constraints (no commit/push — {{DOCTRINE:consent-before-push}} stays with you; no sub-agents of its own — review comes from you; gaps reported, never invented). Hand each unit only the access its goal needs ({{LAW:least-privilege}}). Prefer the read-only [explorer {{AGENT}}](../{{DIR_AGENTS}}/explorer.md) for investigation so the heavy reading stays out of the main context ({{DOCTRINE:context-economy}}). 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
- 5. Converge: compare each unit's changed files against its write set and against its siblings' — an edit outside the set or a file two units touched is a conflict you resolve before anything else — apply the shared-file rows yourself, then verify the combined outcome.
13
- 6. **A plan with blocking edges.** To build a [plan](plan.md) file's slices — each with its `Blocked by:` line — in one run, dispatch every unblocked slice on its own branch off one integration branch, merge each into it as it returns (each merge is a commit — {{DOCTRINE:consent-before-push}} stays with you), and recompute the unblocked set from the plan after every merge — newly freed slices go out at once.
12
+ 5. Converge: compare each unit's changed files against its write set and against its siblings' — an edit outside the set, a file two units touched, or a file in a batch's set that never changed is a conflict you resolve before anything else — apply the shared-file rows yourself, then verify the combined outcome. A conflict or ambiguity between the plan, the findings and the code is yours to decide: decide it, record `Ruling: <choice> — <why> — <cost if wrong>` in the worklog, and continue. Stop only for what {{LAW:echo-the-intent}}, {{LAW:deletion-is-deliberate}} or {{DOCTRINE:consent-before-push}} names; every ruling goes in the final report ({{DOCTRINE:declare-the-judgment-calls}}).
13
+ 6. **A plan with blocking edges.** To build a [plan](plan.md) file's slices — each with its `Blocked by:` line — in one run, dispatch every unblocked slice on its own branch off one integration branch, merge each into it as it returns (each merge is a commit — {{DOCTRINE:consent-before-push}} stays with you), and recompute the unblocked set from the plan after every merge — newly freed slices go out at once. When the plan names a `Spec:`, every slice reads it once; the spec outranks the plan where they conflict. Record BASE before dispatch; before re-running the proof, confirm the branch descends from BASE and the diff is non-empty — an empty diff is a failure, not a clean result. Never diff against `HEAD~1`.
14
14
 
15
15
  ## Done when
16
16
  - Independent units ran concurrently, each returned a distilled result, and the reconciled outcome is verified.
@@ -24,11 +24,11 @@ The minimum roster per task type. The parent may add specialists on top — secu
24
24
  1. Confirm the task is genuinely substantial — a trivial one-file tweak or a question does not warrant a crew; do it directly instead.
25
25
  2. Compose the crew from the floor above, adding specialists only where the task demands them.
26
26
  3. Isolate the crew's work in its own git worktree/branch. Where worktrees are unavailable, fall back to a single tree, one pipeline at a time, and say so. Give the crew a **write set** and check it against every other pipeline in flight ({{DOCTRINE:one-writer-per-file}}): two crews whose sets overlap do not run at once, and shared append files (registries, index tables, lockfiles, generated bundles) are the parent's to apply, never a crew's.
27
- 4. **The dev↔tester loop:** the developer implements, the tester validates — runs the tests and lint, produces raw logs. On failure, the findings go back to the developer. Cap at **5** iterations; on exhaustion, stop, do not merge, and report the failure with the branch left in place for inspection.
27
+ 4. **The dev↔tester loop:** the developer implements, the tester validates — runs the tests and lint, produces raw logs. On failure, the findings go back to the developer — two repair rounds at most, then one fresh developer (a higher model tier where the host offers one) carrying the tester's findings ({{DOCTRINE:bound-the-loop}}); if that fails too, stop, do not merge, and report the failure with the branch left in place for inspection. A conflict or ambiguity between the plan, the findings and the code is yours to decide: decide it, record `Ruling: <choice> — <why> — <cost if wrong>` in the worklog, and continue. Stop only for what {{LAW:echo-the-intent}}, {{LAW:deletion-is-deliberate}} or {{DOCTRINE:consent-before-push}} names; every ruling goes in the final report ({{DOCTRINE:declare-the-judgment-calls}}). When the plan names a `Spec:`, the analyst reads it once; the spec outranks the plan.
28
28
  5. **Two execution shapes**, chosen by host capability (same pattern as the [workflow {{SKILL}}](workflow.md)):
29
- - *Deterministic:* where the host exposes a `workflow` tool, run a saved script encoding analyst → developer → (tester ⇄ developer)×≤5 → proof.
29
+ - *Deterministic:* where the host exposes a `workflow` tool, run a saved script encoding analyst → developer → (tester ⇄ developer)×≤2 → fresh developer → 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, hand the worktree back to the parent uncommitted, with the mechanical proof (test + lint output, exit codes) and the list of files it changed in the result envelope, rebased on the current base so a conflict with a sibling resolves on the crew's branch. The pipeline never commits, pushes, or merges ({{DOCTRINE:consent-before-push}}): the parent re-runs the proof commands itself, shows the user the diff and the output, and commits and merges once the user accepts.
31
+ 6. On success, hand the worktree back to the parent uncommitted, with the mechanical proof (test + lint output, exit codes) and the list of files it changed in the result envelope, rebased on the current base so a conflict with a sibling resolves on the crew's branch. The pipeline never commits, pushes, or merges ({{DOCTRINE:consent-before-push}}): the parent records BASE before dispatch and, before re-running the proof, confirms the branch descends from it and the diff is non-empty (an empty diff is a failure; never `HEAD~1`); it re-runs the proof commands itself, shows the user the diff and the output, and commits and merges once the user accepts.
32
32
 
33
33
  ## Delivery contract
34
34
 
@@ -17,17 +17,29 @@
17
17
  thin end-to-end pieces, each green and verifiable on its own, never one horizontal
18
18
  layer at a time — and give each a `Blocked by:` line naming the slices it waits on
19
19
  (`none` when it can start now). Sequence a wide refactor as expand → migrate
20
- callers in batches → contract, so every slice leaves the build green.
21
- 3. Execute one step at a time. After each, update the worklog — mark it done, note
22
- the current step, the next step, and any blockers.
20
+ callers in batches → contract, so every slice leaves the build green. A step records
21
+ decisions, not code: the files, the exact signatures and the spec's values, the test
22
+ that proves it, and the check command. Write a body only for an algorithm those leave
23
+ open; a plan longer than the code it describes has written the code, and "TBD",
24
+ "handle edge cases" or "add tests" decide nothing. The file's first line names the
25
+ task or branch, then `Spec: <path>` when a spec exists — the spec outranks the plan
26
+ where they conflict, and a worklog naming another task is stale, never resumed.
27
+ 3. Execute one step at a time. After each, update the worklog — mark it done only after
28
+ its check ran green in this session, with the command and result on the line — and
29
+ note the current step, the next step, and any blockers. After a compaction, trust the
30
+ worklog and `git log` over memory.
23
31
  4. At each milestone, stop and verify before continuing — run the project's checks
24
- and read the output ({{LAW:verify-before-asserting}}); on a consequential or ambiguous
25
- direction, surface the result for review before pressing on.
32
+ and read the output ({{LAW:verify-before-asserting}}). Decide forks yourself; stop
33
+ only for what {{LAW:echo-the-intent}} or {{DOCTRINE:consent-before-push}} names.
26
34
  5. If the plan proves wrong, revise the file *before* continuing. The file, not
27
- your memory, is the source of truth for where you are.
35
+ your memory, is the source of truth for where you are. A deviation you decide without
36
+ asking gets a worklog line `Ruling: <what> — <why> — <cost if wrong>`; those lines feed
37
+ {{DOCTRINE:declare-the-judgment-calls}} at the end.
28
38
  6. On finishing, clear or archive the worklog.
29
39
 
30
40
  ## Done when
41
+ - The plan was re-read against the spec before step 1: every requirement has a step,
42
+ names match across steps, and it is not several times the spec's length.
31
43
  - Every plan step is checked off, each milestone was verified, and the goal's
32
44
  done-condition is confirmed.
33
45
 
@@ -8,10 +8,13 @@ to be acted on; or the user wants a review criterion recorded ("add a review rul
8
8
 
9
9
  ## Procedure
10
10
  1. Read every comment in full before changing anything. Group related comments.
11
- 2. Classify each comment: correct, partially correct, wrong, or unclear.
11
+ 2. Classify each comment: correct, partially correct, wrong, or unclear. Any item unclear →
12
+ ask before implementing *any* item, since items may be related. A comment that conflicts
13
+ with a decision the user already made → ask the user.
12
14
  3. For anything you judge wrong or unclear, verify it against the code or a test before
13
15
  responding — do not comply blindly and do not dismiss blindly ({{LAW:verify-before-asserting}},
14
- {{ONTOLOGY}}: {{ONT_CONDUCT}}).
16
+ {{ONTOLOGY}}: {{ONT_CONDUCT}}). A request to "implement it properly" → grep for real
17
+ callers first; no caller, no build.
15
18
  4. Respond to each comment: the change you will make and why, or a reasoned decline
16
19
  with evidence.
17
20
  5. Apply the accepted changes — one intent per commit ({{LAW:one-intent-one-act}}), each through the
@@ -35,7 +35,13 @@ surface.
35
35
  (the [dependencies {{SKILL}}](dependencies.md) carries the tooling). A destructive
36
36
  capability exposed to an agent or a tool: its guard is enforced server-side, at the
37
37
  boundary the call crosses, never left to the caller's judgement ({{DOCTRINE:external-gate}}).
38
- 6. **Report, don't fix.** Each finding as `file:line — attack — impact — fix`, ranked
38
+ 6. **Prove each finding before it stands.** Restate it as an attacker-controlled source
39
+ reaching an unguarded sink, traced through the real callers; one you cannot restate
40
+ that way is a lead to chase, not a finding. Reject the shortcuts that manufacture
41
+ false positives: *it looks dangerous* (a pattern is not a path — validation upstream
42
+ may stop it), *it was vulnerable elsewhere* (each call site has its own guards), *this
43
+ is clearly critical* (models overrate severity — argue the defender's case first).
44
+ 7. **Report, don't fix.** Each finding as `file:line — attack — impact — fix`, ranked
39
45
  critical → high → medium → note, with the evidence that made it a finding. Then the
40
46
  verdict — **ship / fix-then-ship / block** — and, for anything above medium, the
41
47
  test that would pin the fix. Applying fixes is a [develop {{SKILL}}](develop.md)
@@ -14,7 +14,8 @@ request or merge the branch.
14
14
  2. Review the change before anyone else sees it: run the
15
15
  [geneseed-code-review {{SKILL}}](geneseed-code-review.md) on the branch diff (dispatch the
16
16
  [reviewer {{AGENT}}](../{{DIR_AGENTS}}/reviewer.md) for a large one). Any `blocking`
17
- finding stops the ship until it is fixed.
17
+ finding stops the ship until it is fixed, and every **Set aside:** line is ruled on
18
+ before pushing.
18
19
  3. Confirm the branch carries only this change's commits and is rebased/updated on
19
20
  the base branch; resolve any divergence before opening.
20
21
  4. Push the branch only with the user's explicit, per-push acceptance — on every
@@ -9,7 +9,9 @@ the destination can be named but the route to it cannot; the user says
9
9
  ## Procedure
10
10
  1. Name the **destination** — what reaching the end looks like (a spec ready to
11
11
  hand off, a decision locked, a migration completed). One or two lines; every
12
- later session orients to it before picking work.
12
+ later session orients to it before picking work. Then sweep the open questions
13
+ breadth-first; if none turn up — the route is already clear and fits one session
14
+ — there is no fog and no map: ask the user how to proceed.
13
15
  2. Create the **map** — one GitHub issue labelled `wayfinder:map` when `origin` is
14
16
  GitHub; else an existing map under `docs/`, else `.scratch/<effort>/map.md`. It is
15
17
  an index, not a store: the Destination, Notes (domain, standing preferences),
@@ -21,12 +23,29 @@ the destination can be named but the route to it cannot; the user says
21
23
  `issues/NN-<slug>.md` beside it, with `Status:` and `Blocked by:` lines). Each is a
22
24
  question whose resolution is a *decision* — never a slice of build. Create them all
23
25
  first, then wire blocking edges and cross-references with the real ids — a
24
- placeholder `#n` auto-links an unrelated issue.
26
+ placeholder `#n` auto-links an unrelated issue. Each ticket carries one type, as a
27
+ `wayfinder:<type>` label (or a `Type:` line), which names how it resolves:
28
+ - **research** (agent alone) — a fact the decision waits on, from docs, an API or
29
+ the web: a subagent runs the [research {{SKILL}}](research.md). Fire every research
30
+ ticket in parallel as soon as the map is charted.
31
+ - **prototype** (with the user) — a rough artifact to react to when "how should it
32
+ look or behave" is the question: the [prototype {{SKILL}}](prototype.md).
33
+ - **grilling** (with the user, the default) — an interview through the
34
+ [brainstorm {{SKILL}}](brainstorm.md), terms pinned with the
35
+ [codebase-design {{SKILL}}](codebase-design.md); a [council {{SKILL}}](council.md)
36
+ debate may inform it, never replace it.
37
+ - **task** — work that decides nothing but blocks a decision (provision access,
38
+ sign up to judge an API, move data to see its shape). Do it alone where you can,
39
+ else hand the user an exact checklist; record what was done and the facts later
40
+ tickets need.
41
+
42
+ A ticket worked *with the user* resolves only through that live exchange — never
43
+ answer the user's side yourself.
25
44
  4. Work the **frontier**: claim an unblocked ticket before any work (assign it, or
26
- `Status: claimed`) so concurrent sessions skip it. Resolve it — research, a
27
- [prototype {{SKILL}}](prototype.md) detour or a [council {{SKILL}}](council.md)
28
- debate — write the decision into the ticket, gist-and-link it on the map, close it.
29
- At most one ticket per session (research tickets excepted). New questions become tickets.
45
+ `Status: claimed`) so concurrent sessions skip it. Resolve it as its type says — read
46
+ the label, the body never states it — write the decision into the ticket,
47
+ gist-and-link it on the map, close it. At most one ticket per session (research
48
+ tickets excepted). New questions become tickets.
30
49
  5. In everything the user reads, refer to the map and tickets **by name**,
31
50
  never by bare issue number — the id rides inside the name's link.
32
51
  6. Stop when the frontier is empty: nothing left to decide means the way is
@@ -3,11 +3,11 @@
3
3
  > {{DESC_WORKTREE}}
4
4
 
5
5
  **Trigger:** the user says "worktree" or "isolate this", or work must not share the
6
- checkout with work in flight. That covers a [pipeline](pipeline.md) crew needing its own tree, a second task starts while the first
7
- is uncommitted, another agent or session is editing this checkout, a risky migration
8
- or rewrite needs a disposable copy, or the user says "worktree", "isolate this",
9
- "don't touch my checkout". Also the first thing to reach for when `git status` shows
10
- changes you did not make.
6
+ checkout with work in flight. That covers a [pipeline](pipeline.md) crew needing its own tree,
7
+ a second task starting while the first is uncommitted, another agent or session editing this
8
+ checkout, or a risky migration or rewrite that needs a disposable copy, or the user says "don't
9
+ touch my checkout". Also the first thing to reach for when `git status` shows changes you did
10
+ not make.
11
11
 
12
12
  ## Procedure
13
13
  1. **Look before you branch** ({{LAW:verify-before-asserting}}). `git status` and `git worktree list`
@@ -41,6 +41,8 @@ changes you did not make.
41
41
  git worktree remove ../<repo>-<slug>
42
42
  git branch -d <type>/<slug>
43
43
  ```
44
+ If `git worktree remove` refuses (modified or untracked files), never `--force`: list
45
+ `git status --porcelain -uall` and ask whether to commit, move or delete them.
44
46
  `git worktree prune` after a directory was deleted by hand. Leave nothing listed
45
47
  that no task owns.
46
48
 
@@ -65,7 +65,6 @@
65
65
  "DESC_RELEASE": "<one-line description: cut a release — bump, changelog, tag, kept in sync>",
66
66
  "DESC_INGEST": "<one-line description: convert a PDF/Office/web doc into clean markdown before reading>",
67
67
  "DESC_RESEARCH": "<one-line description: answer from the open web, verifying each claim against independent sources>",
68
- "DESC_HERDR": "<one-line description: drive herdr from inside it — split panes, spawn agents, read panes>",
69
68
  "DESC_RULE": "<one-line description: ask whether the user wants a standing rule or a durable memory, then write the memory or pressure-test the rule before adopting it in user-rules.md — and tend the memory set: merge, retire, promote>",
70
69
  "DESC_PROFILE": "<one-line description: interview the user and draft or refresh PROFILE.md — who they are, how they work, how they like answers pitched; identity only, rules go to user-rules.md>",
71
70
  "DESC_GENESEED": "<one-line description: operate the deployed Geneseed harness — find installs and their settings, read files, status, doctor, diff, rebuild one setting on request — and make the user's own OpenCode colour theme>",
package/themes/biker.json CHANGED
@@ -65,7 +65,6 @@
65
65
  "DESC_RELEASE": "Cut a release — raise the version, write the roadbook entry, tag it, all three in sync.",
66
66
  "DESC_INGEST": "Bring a PDF, Office, or web document into clean markdown before reading it.",
67
67
  "DESC_RESEARCH": "Find the answer out on the open road — search wide, then prove every claim against independent sources before you trust it.",
68
- "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
69
68
  "DESC_RULE": "Ask first — standing rule, or just something to remember? Then log the memory, or lean on the rule till it holds every corner before bolting it into user-rules.md — and keep the memory stash serviced: merge, scrap, promote.",
70
69
  "DESC_PROFILE": "Stamp the rider's plate into PROFILE.md — who they are, what they ride, how they like the road called; identity only, club rules bolt into user-rules.md.",
71
70
  "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and lay down the rider's own OpenCode paint job.",
@@ -65,7 +65,6 @@
65
65
  "DESC_RELEASE": "Cut a release — raise the version, write the race report, seal it with a tag, all three in sync.",
66
66
  "DESC_INGEST": "Bring a PDF, Office, or web document into clean markdown before reading it.",
67
67
  "DESC_RESEARCH": "Hunt the answer across the open circuit — search wide, then prove every claim against independent sources before you call it.",
68
- "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
69
68
  "DESC_RULE": "Ask first — standing house rule, or just one for the notebook? Then log it, or run the rule through the replay from every angle before it goes on the board in user-rules.md — and tend the memory bank besides: merge, retire, promote.",
70
69
  "DESC_PROFILE": "Build the player profile in PROFILE.md — position, form, how they like the commentary pitched; identity only, the rulebook stays in user-rules.md.",
71
70
  "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and roll out the viewer's own OpenCode colour theme.",
@@ -65,7 +65,6 @@
65
65
  "DESC_RELEASE": "Cut a release — bump the version, write the changelog, tag it, all in sync.",
66
66
  "DESC_INGEST": "Rip a PDF, Office, or web document to clean markdown before reading it.",
67
67
  "DESC_RESEARCH": "Pull the answer off the net — scan wide, then cross-check every claim against independent sources before you trust it.",
68
- "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
69
68
  "DESC_RULE": "Ask first — standing rule, or just something to keep on file? Then write the memory, or stress the rule till it holds in every sector before flashing it into user-rules.md — and defrag the datastore: merge, purge, promote.",
70
69
  "DESC_PROFILE": "Compile the user's ident into PROFILE.md — who they are, their rig, the bandwidth they want answers at; identity only, hard directives flash to user-rules.md.",
71
70
  "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and make the user's own OpenCode colour theme.",
package/themes/gamer.json CHANGED
@@ -65,7 +65,6 @@
65
65
  "DESC_RELEASE": "Ship a patch — bump the version, write the patch notes, tag it, all in sync.",
66
66
  "DESC_INGEST": "Load a PDF, Office, or web document into clean markdown before reading it.",
67
67
  "DESC_RESEARCH": "Look up the answer online — scout wide, then cross-check every claim against independent sources before you call it.",
68
- "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
69
68
  "DESC_RULE": "Ask first — standing house rule, or just something to remember? Then save the memory, or test the rule against its worst case before binding it into user-rules.md — and tidy the save file: merge, delete, promote.",
70
69
  "DESC_PROFILE": "Fill in the player card in PROFILE.md — main role, loadout, preferred difficulty; identity only, house rules go in user-rules.md.",
71
70
  "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and craft the user's own OpenCode colour theme.",
@@ -65,7 +65,6 @@
65
65
  "DESC_RELEASE": "Proclaim a new version — raise the number, inscribe the chronicle, seal it with a tag, all three in accord.",
66
66
  "DESC_INGEST": "Render a foreign document — PDF, Office, or web — into clean markdown before it may be read.",
67
67
  "DESC_RESEARCH": "Seek the answer from the wider world — range across many sources, then prove each claim against independent witnesses before you trust it.",
68
- "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
69
68
  "DESC_RULE": "Ask first — a standing edict, or a matter merely to be remembered? Then inscribe the memory, or try the edict against the case that would break it before it enters user-rules.md — and tend the memory: merge, retire, promote to law.",
70
69
  "DESC_PROFILE": "Inscribe the user's identity into PROFILE.md — grant audience, ask who they are and how they will to be served; identity only, edicts belong in user-rules.md.",
71
70
  "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and forge the user's own OpenCode colour-rite.",
package/themes/joker.json CHANGED
@@ -65,7 +65,6 @@
65
65
  "DESC_RELEASE": "Cut a release — raise the version, write the notes, tag it, all three in sync.",
66
66
  "DESC_INGEST": "Bring a PDF, Office, or web document into clean markdown before reading it.",
67
67
  "DESC_RESEARCH": "Find the answer out in the open — search wide, then prove every claim against independent sources before you call it.",
68
- "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
69
68
  "DESC_RULE": "Ask first — standing rule, or just something to remember? Then jot the memory, or make the rule survive its own worst night before it gets pinned into user-rules.md — and keep tending the joke book: merge, retire, promote.",
70
69
  "DESC_PROFILE": "Sketch the user's bio for the playbill in PROFILE.md — who they are, how they work, how they like the act paced; identity only, house rules stay in user-rules.md.",
71
70
  "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and paint the user's own OpenCode colour theme.",
@@ -65,7 +65,6 @@
65
65
  "DESC_RELEASE": "Cut a release — raise the version, write the chronicle, seal it with a tag, all three in accord.",
66
66
  "DESC_INGEST": "Render a PDF, Office, or web document into clean markdown before it can be read.",
67
67
  "DESC_RESEARCH": "Seek the answer from the wider world — range across many sources, then prove each claim against independent witnesses before trusting it. Trust is a strong word.",
68
- "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
69
68
  "DESC_RULE": "Ask first — standing rule, or merely a memory? Then write the memory, or test the rule against the case that ruins it before adopting it in user-rules.md — and keep tending the memory banks: merge, retire, promote. Entropy wins.",
70
69
  "DESC_PROFILE": "Record who the user is in PROFILE.md — role, habits, preferred register. They'll change their mind, but do ask. Identity only; rules go in user-rules.md.",
71
70
  "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and assemble the user's own OpenCode colour theme, if they insist.",
package/themes/mean.json CHANGED
@@ -65,7 +65,6 @@
65
65
  "DESC_RELEASE": "Cut a release — bump the version, write the changelog, tag it, all three in sync. Don't skip one.",
66
66
  "DESC_INGEST": "Turn a PDF, Office, or web document into clean markdown before you read it.",
67
67
  "DESC_RESEARCH": "Find the answer in the wild — search wide, then prove every claim against independent sources before you dare cite it.",
68
- "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
69
68
  "DESC_RULE": "Ask first — standing rule, or just a fact to remember? Then write the memory, or break the rule against its worst case before it goes in user-rules.md — and keep tending the record: merge, retire, promote. Not a dumping ground.",
70
69
  "DESC_PROFILE": "Get the user's profile down in PROFILE.md — who they are, how they work, how they want answers. Identity only; rules go in user-rules.md, obviously.",
71
70
  "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and build the user's own OpenCode colour theme while you're at it.",
@@ -65,7 +65,6 @@
65
65
  "DESC_RELEASE": "Cut a release — bump the version, update the changelog, tag — all three in step.",
66
66
  "DESC_INGEST": "Convert a PDF, Office, or web document to clean markdown before reading it.",
67
67
  "DESC_RESEARCH": "Gather intel from open sources — sweep wide, then confirm every claim against independent reporting before you act on it.",
68
- "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
69
68
  "DESC_RULE": "Ask first — standing order, or an entry for the log? Then file the memory, or test the order against the case that would break it before adopting it in user-rules.md — and keep tending the logbook: merge, retire, promote.",
70
69
  "DESC_PROFILE": "File the commander's dossier in PROFILE.md — role, theatre, preferred briefing style; identity only, standing orders route to user-rules.md.",
71
70
  "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and issue the user's own OpenCode colour theme.",
@@ -65,7 +65,6 @@
65
65
  "DESC_RELEASE": "Cut a release — bump the version, update the changelog, and tag — keeping all three in sync.",
66
66
  "DESC_INGEST": "Convert a PDF, Office, or web document into clean markdown before reading it.",
67
67
  "DESC_RESEARCH": "Answer a question from the open web — search widely, then verify each claim against independent sources before citing it.",
68
- "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
69
68
  "DESC_RULE": "Ask first whether the user wants a standing rule or a durable memory, then write the memory or pressure-test the rule before adopting it in user-rules.md — and tend the memory set: merge, retire, promote.",
70
69
  "DESC_PROFILE": "Interview the user and draft or refresh PROFILE.md — who they are, how they work, how they like answers pitched; identity only, standing rules route to user-rules.md.",
71
70
  "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and make the user's own OpenCode colour theme.",
@@ -65,7 +65,6 @@
65
65
  "DESC_RELEASE": "Cut a release — raise the version, write the log, seal it with a tag, all in accord.",
66
66
  "DESC_INGEST": "Haul a PDF, Office, or web document into clean markdown before reading it.",
67
67
  "DESC_RESEARCH": "Hunt the answer across open waters — search wide, then prove every claim against independent charts before you trust it.",
68
- "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
69
68
  "DESC_RULE": "Ask first — a standin' rule, or just summat to remember? Then log the memory, or run the rule aground on its worst case afore ye nail it into user-rules.md — and keep tendin' the log: merge, strike the stale, promote.",
70
69
  "DESC_PROFILE": "Chart yer captain in PROFILE.md — who they be, how they sail, how they like their bearings called; identity only, articles o' conduct go in user-rules.md.",
71
70
  "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and paint the crew's own OpenCode colours.",
@@ -65,7 +65,6 @@
65
65
  "DESC_RELEASE": "Ship the release — bump the version, write the recap, tag it, all in sync.",
66
66
  "DESC_INGEST": "Bring a PDF, Office, or web document into clean markdown before reading it.",
67
67
  "DESC_RESEARCH": "Work the scouting report — search wide, then confirm every claim against independent sources before you call it.",
68
- "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
69
68
  "DESC_RULE": "Ask first — standing house rule, or just one for the notes? Then log the memory, or run the rule against the play that breaks it before it goes on the board in user-rules.md — and keep tending the film room: merge, cut, promote.",
70
69
  "DESC_PROFILE": "Write the scouting report in PROFILE.md — position, playing style, how they want the play called; identity only, team rules go on the board in user-rules.md.",
71
70
  "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and train up the user's own OpenCode colour theme.",
@@ -65,7 +65,6 @@
65
65
  "DESC_RELEASE": "Cut a release — raise the version, write the debrief, tag it, all three in sync.",
66
66
  "DESC_INGEST": "Bring a PDF, Office, or web document into clean markdown before reading it.",
67
67
  "DESC_RESEARCH": "Find the answer out on the open circuit — search wide, then prove every claim against independent sources before you call it.",
68
- "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
69
68
  "DESC_RULE": "Ask first — standing rule, or just something to remember? Then note it, or run the rule through the lap that breaks it before locking it into user-rules.md — and keep tending the memory: merge, retire, promote.",
70
69
  "DESC_PROFILE": "Set up the driver profile in PROFILE.md — seat, driving style, how they want the pit wall to talk; identity only, team orders go in user-rules.md.",
71
70
  "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and build the user's own OpenCode colour theme.",
@@ -65,7 +65,6 @@
65
65
  "DESC_RELEASE": "Cut a release — raise the version, inscribe the chronicle, seal it with a tag, all in accord.",
66
66
  "DESC_INGEST": "Transmute a PDF, Office, or web document into clean markdown before reading it.",
67
67
  "DESC_RESEARCH": "Seek the answer through the wider lore — scry many sources, then prove each claim against independent tomes before you trust it.",
68
- "DESC_HERDR": "Drive herdr from inside it — split panes, spawn sibling agents, wait on output, read other panes.",
69
68
  "DESC_RULE": "Ask first — a standing rule, or a thing merely to be remembered? Then inscribe the memory, or prove the rule against the case that would unmake it before it enters user-rules.md — and keep tending the grimoire: merge, strike, promote.",
70
69
  "DESC_PROFILE": "Divine the user's nature into PROFILE.md — who they are, how they work, the register they favour; identity only, binding runes belong in user-rules.md.",
71
70
  "DESC_GENESEED": "Operate the deployed Geneseed harness — find each install and its settings, read its files, run status, doctor and diff, and rebuild it with one setting changed when the user asks — and conjure the user's own OpenCode colour theme.",