geneseed 3.3.0 → 3.5.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.
- package/CHANGELOG.md +323 -0
- package/DESIGN.md +11 -14
- package/QUICKSTART.md +3 -1
- package/README.md +53 -44
- package/SETUP.md +25 -27
- package/SHIPPED.md +26 -32
- package/adapters/bob/README.md +12 -9
- package/adapters/copilot/README.md +28 -26
- package/adapters/opencode/GLOBAL-HARNESS-SPEC.md +1 -1
- package/adapters/opencode/README.md +8 -4
- package/adapters/opencode/plugins/geneseed-context.js +5 -3
- package/adapters/opencode/plugins/geneseed-workflow.js +30 -3
- package/adapters/opencode/workflows/_runtime.js +97 -7
- package/bin/build-driver.mjs +5 -1248
- package/bin/geneseed-cli.mjs +11 -6
- package/bin/geneseed-hook.mjs +4 -2
- package/docs/candidate-hosts.md +1 -1
- package/docs/design-history.md +37 -37
- package/docs/extending.md +49 -27
- package/docs/token-footprint.md +52 -26
- package/docs/web/agents.md +1 -1
- package/docs/web/claude-hooks.md +3 -2
- package/docs/web/collaboration.md +2 -2
- package/docs/web/first-session.md +2 -2
- package/docs/web/footprint.md +2 -2
- package/docs/web/harnesses.md +1 -1
- package/docs/web/model.md +1 -1
- package/docs/web/plugin-workflow.md +1 -0
- package/docs/web/rules.md +3 -3
- package/docs/web/setup-choices.md +2 -2
- package/docs/web/skills.md +1 -1
- package/docs/web/themes-author.md +1 -1
- package/docs/web-ui.md +18 -10
- package/harness.config.json +1 -1
- package/js/README.md +6 -5
- package/js/build/driver.mjs +1191 -0
- package/js/build/emit-claude.mjs +17 -10
- package/js/build/emit-common.mjs +4 -4
- package/js/build/generate.mjs +1 -1
- package/js/build/render.mjs +48 -44
- package/js/build/stubs.mjs +1 -1
- package/js/build/themes.mjs +4 -4
- package/js/build/version.mjs +12 -0
- package/js/cli-table.json +21 -6
- package/js/hosts/hooks.mjs +89 -74
- package/js/hosts/hosts.mjs +19 -2
- package/js/hosts/mcp.mjs +14 -20
- package/js/hosts/native.mjs +85 -25
- package/js/hosts/opencode.mjs +14 -0
- package/js/hosts/settings.mjs +52 -104
- package/js/inspect/checks-authoring.mjs +117 -3
- package/js/inspect/diff.mjs +1 -1
- package/js/inspect/doctor.mjs +1 -1
- package/js/inspect/excludes.mjs +1 -1
- package/js/inspect/inventory.mjs +12 -7
- package/js/inspect/scan.mjs +3 -14
- package/js/inspect/status.mjs +2 -2
- package/js/inspect/validate.mjs +1 -1
- package/js/lib/fs.mjs +23 -8
- package/js/lib/json.mjs +7 -1
- package/js/lib/proc.mjs +6 -4
- package/js/maintain/migrate.mjs +1 -1
- package/js/maintain/setup.mjs +1 -1
- package/js/maintain/uninstall.mjs +17 -15
- package/js/ui/cli.mjs +19 -0
- package/js/ui/menu.mjs +1 -1
- package/js/web/actions.mjs +4 -4
- package/js/web/activity.mjs +4 -4
- package/js/web/api.mjs +14 -11
- package/js/web/daemon.mjs +1 -1
- package/js/web/docs.mjs +12 -12
- package/js/web/handler.mjs +12 -5
- package/js/web/jobs.mjs +1 -1
- package/package.json +1 -1
- package/registry.json +86 -79
- package/src/AGENT.md.tmpl +83 -48
- package/src/agents/architect.md +4 -1
- package/src/agents/developer.md +2 -2
- package/src/agents/explorer.md +2 -0
- package/src/agents/operator.md +13 -0
- package/src/agents/pragmatist.md +12 -0
- package/src/agents/researcher.md +72 -0
- package/src/agents/reviewer.md +5 -2
- package/src/agents/security.md +7 -1
- package/src/agents/skeptic.md +2 -1
- package/src/agents/tester.md +5 -1
- package/src/agents/user-advocate.md +13 -0
- package/src/doctrines/README.md +26 -3
- package/src/doctrines/craft.md +78 -5
- package/src/doctrines/ops.md +62 -0
- package/src/doctrines/process.md +91 -4
- package/src/doctrines/rigor.md +41 -1
- package/src/laws/universal.md +27 -21
- package/src/memory/README.md +4 -2
- package/src/modes/foreman.md +5 -5
- package/src/notebook/README.md +2 -1
- package/src/ontology/universal.md +71 -67
- package/src/postures/peer.md +3 -0
- package/src/skills/_self-improvement.md +19 -0
- package/src/skills/_template.md +1 -12
- package/src/skills/brainstorm.md +37 -19
- package/src/skills/bruno-collection-generator.md +2 -13
- package/src/skills/bruno-test-writer.md +3 -14
- package/src/skills/ci-fix.md +49 -0
- package/src/skills/codebase-design.md +1 -12
- package/src/skills/commit.md +1 -12
- package/src/skills/consolidate-memory.md +50 -0
- package/src/skills/council.md +1 -12
- package/src/skills/daydream/LICENSE +21 -0
- package/src/skills/daydream/VENDOR.md +3 -1
- package/src/skills/debug.md +1 -12
- package/src/skills/deps-audit.md +46 -0
- package/src/skills/develop.md +38 -20
- package/src/skills/document-project.md +1 -12
- package/src/skills/domain-modeling.md +1 -12
- package/src/skills/forge-mcp.md +1 -12
- package/src/skills/fresh-eyes.md +1 -12
- package/src/skills/frontend-design.md +1 -12
- package/src/skills/geneseed-code-review.md +7 -14
- package/src/skills/geneseed.md +1 -12
- package/src/skills/git-archaeology.md +1 -12
- package/src/skills/git-rescue.md +1 -12
- package/src/skills/handoff.md +1 -12
- package/src/skills/herdr.md +1 -12
- package/src/skills/ingest.md +1 -12
- package/src/skills/migrate.md +1 -12
- package/src/skills/opencode-theme.md +1 -12
- package/src/skills/parallel-agents.md +4 -15
- package/src/skills/pipeline.md +6 -17
- package/src/skills/plan.md +1 -12
- package/src/skills/ponytail.md +1 -12
- package/src/skills/profile.md +1 -12
- package/src/skills/prose.md +1 -12
- package/src/skills/prototype.md +1 -12
- package/src/skills/quiz.md +43 -0
- package/src/skills/react-view-transitions/VENDOR.md +7 -1
- package/src/skills/refactor.md +1 -12
- package/src/skills/release.md +1 -12
- package/src/skills/repo-map.md +1 -12
- package/src/skills/research.md +5 -13
- package/src/skills/review-response.md +1 -12
- package/src/skills/roast-me.md +1 -12
- package/src/skills/rule.md +1 -12
- package/src/skills/security-audit.md +51 -0
- package/src/skills/ship.md +1 -12
- package/src/skills/skill-forge.md +59 -0
- package/src/skills/teach.md +50 -0
- package/src/skills/tickets.md +1 -12
- package/src/skills/wayfinder.md +1 -12
- package/src/skills/wiki.md +1 -12
- package/src/skills/workflow.md +82 -26
- package/src/skills/worktree.md +52 -0
- package/themes/_TEMPLATE.json +15 -12
- package/themes/biker.json +14 -11
- package/themes/commentator.json +14 -11
- package/themes/cyberpunk.json +14 -11
- package/themes/gamer.json +14 -11
- package/themes/imperial.json +14 -11
- package/themes/joker.json +14 -11
- package/themes/marvin.json +14 -11
- package/themes/mean.json +14 -11
- package/themes/military.json +14 -11
- package/themes/neutral.json +15 -12
- package/themes/opencode/README.md +2 -2
- package/themes/pirate.json +14 -11
- package/themes/sports.json +14 -11
- package/themes/verstappen.json +14 -11
- package/themes/wizard.json +14 -11
- package/web/dist/assets/Activity-Flgf4kHy.js +1 -0
- package/web/dist/assets/ActivityDetail-DIpr85nh.js +1 -0
- package/web/dist/assets/CatalogRow-CjyLjaLb.js +1 -0
- package/web/dist/assets/Diff-Deisdha8.js +2 -0
- package/web/dist/assets/Docs-DGUdY4l4.js +2 -0
- package/web/dist/assets/Doctor-F74lJ69P.js +1 -0
- package/web/dist/assets/FilterInput-BakJLvaV.js +1 -0
- package/web/dist/assets/GreenhouseView-D072lBiD.js +2 -0
- package/web/dist/assets/Harness-DNRP2Va7.js +1 -0
- package/web/dist/assets/JournalView-DWFqZ0Iw.js +1 -0
- package/web/dist/assets/Laws-BN6g3HU7.js +3 -0
- package/web/dist/assets/Library-CDOv4emM.js +1 -0
- package/web/dist/assets/Markdown-BQAvN8xx.js +38 -0
- package/web/dist/assets/OperatorHudView-CwNIUVX8.js +2 -0
- package/web/dist/assets/Profile-CpP9BTne.js +1 -0
- package/web/dist/assets/Rules-DFXsUCB7.js +1 -0
- package/web/dist/assets/Settings-BqZVUtJ5.js +1 -0
- package/web/dist/assets/Skills-Cu6kBgfF.js +1 -0
- package/web/dist/assets/StatusBadge-Cg6j-NJL.js +1 -0
- package/web/dist/assets/activity-iWaWVtsR.js +1 -0
- package/web/dist/assets/drawable-BgfrEBer.js +1 -0
- package/web/dist/assets/index-CAqrWhKl.js +2 -0
- package/web/dist/assets/index-Ruh93A3A.css +1 -0
- package/web/dist/assets/jobBuckets-Dbq8ZlWW.js +1 -0
- package/web/dist/assets/lawCats-BLgxl151.js +1 -0
- package/web/dist/assets/react-DbkvxWG5.js +8 -0
- package/web/dist/assets/rolldown-runtime-CbXtAM7H.js +1 -0
- package/web/dist/index.html +4 -3
- package/web/src/pages/Laws.jsx +22 -8
- package/src/skills/clarify.md +0 -28
- package/src/skills/crash-course.md +0 -29
- package/src/skills/decode.md +0 -29
- package/src/skills/drill.md +0 -29
- package/src/skills/feynman.md +0 -27
- package/src/skills/gap-detector.md +0 -27
- package/src/skills/learning-path.md +0 -27
- package/src/skills/react-view-transitions/README.md +0 -42
- package/src/skills/tdd.md +0 -31
- package/web/dist/assets/Activity-BfVcLrda.js +0 -1
- package/web/dist/assets/ActivityDetail-CQXccGPl.js +0 -1
- package/web/dist/assets/CatalogRow-DALEQImZ.js +0 -1
- package/web/dist/assets/Diff-BIjxXx46.js +0 -5
- package/web/dist/assets/Doctor-CJLbgsrw.js +0 -1
- package/web/dist/assets/FilterInput-CkUCk_lY.js +0 -1
- package/web/dist/assets/GreenhouseView-DfC5IILJ.js +0 -2
- package/web/dist/assets/Harness-Dm5CCU-v.js +0 -1
- package/web/dist/assets/JournalView-Cpu2eI4s.js +0 -1
- package/web/dist/assets/Laws-DDDVFuQz.js +0 -3
- package/web/dist/assets/Library-Dao3T9na.js +0 -1
- package/web/dist/assets/Markdown-C__nuWX5.js +0 -46
- package/web/dist/assets/OperatorHudView-DEpCtAjP.js +0 -2
- package/web/dist/assets/Profile-BlXtUlh2.js +0 -1
- package/web/dist/assets/Rules-DIre6gxR.js +0 -1
- package/web/dist/assets/Skills-rY13ZPhM.js +0 -1
- package/web/dist/assets/StatusBadge-wW_RS_my.js +0 -1
- package/web/dist/assets/activity-DpYPKNrA.js +0 -1
- package/web/dist/assets/index-BEZvPvpF.js +0 -1
- package/web/dist/assets/index-DNQE5ydy.js +0 -10
- package/web/dist/assets/index-DzdQjvM1.css +0 -1
- package/web/dist/assets/index-PmQGRS1X.js +0 -2
- package/web/dist/assets/jobBuckets-DfTUJUxR.js +0 -1
- package/web/dist/assets/lawCats-DUS9UTH4.js +0 -1
- package/web/dist/assets/react-DOpiTn5v.js +0 -32
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,329 @@ label. For the capability ↔ spec map, see [SHIPPED.md](SHIPPED.md).
|
|
|
10
10
|
|
|
11
11
|
_Nothing yet._
|
|
12
12
|
|
|
13
|
+
## [3.5.0] — 2026-09-25
|
|
14
|
+
|
|
15
|
+
**Upgrading:** re-emit (or `geneseed rebuild-all`) after installing. Copilot installs need it most:
|
|
16
|
+
the re-emit replaces the legacy `toolCall` hook, which Copilot no longer fires, with the gates
|
|
17
|
+
listed under *Fixed — hosts and core*.
|
|
18
|
+
|
|
19
|
+
### Added — web console motion
|
|
20
|
+
|
|
21
|
+
- **The dashboard moves where motion carries meaning** (anime.js 4, bundled into `web/dist` like
|
|
22
|
+
React; the Node package stays zero-dependency). The germination ring's arc, bezel ticks and
|
|
23
|
+
percentage now run off one tween instead of an arc transition under a number that had already
|
|
24
|
+
jumped. KPI, genome and run counters count up, and count from the old value on a refresh, so a
|
|
25
|
+
change is seen moving. The Greenhouse donuts sweep clockwise, each arc taking its share of the
|
|
26
|
+
time. The Journal lens's constitution map enters hub, spokes, tiers, then governed nodes, once
|
|
27
|
+
per page load and only when scrolled into view. The toast and confirm dialog enter via CSS
|
|
28
|
+
`@starting-style`. Every JS animation checks `prefers-reduced-motion` (the global CSS rule cannot
|
|
29
|
+
reach inline styles) and completes on a timer where rAF never fires. Shell bundle +13 KB gzip.
|
|
30
|
+
- **Motion as feedback across the console.** The console strip carries a scanning bar while a
|
|
31
|
+
job runs and flashes green or red when a watched job ends; a successful build sways the rail's
|
|
32
|
+
sprout. The rail's active-page highlight and every segmented control's pill are now one element
|
|
33
|
+
that glides to the new selection. Dashboard tabs settle in; Doctor's checks rise in one after
|
|
34
|
+
another with their status dots popping; law, rule, check, manifest and MCP panels grow open;
|
|
35
|
+
live Activity sessions slide into place on each poll (FLIP); search results cascade in once and
|
|
36
|
+
mark the matched text. A flavour swap crossfades through the View Transitions API.
|
|
37
|
+
|
|
38
|
+
### Added — constitution
|
|
39
|
+
|
|
40
|
+
- **Process 8, one writer per file.** When several agents share code — sub-agents, a pipeline
|
|
41
|
+
crew, a workflow fan-out, another session in the same checkout — each file has one writer at a
|
|
42
|
+
time: every unit gets a write set, overlaps run in sequence or get one owner, shared append
|
|
43
|
+
files (registries, lockfiles, generated bundles) stay with the integrator, reviewers never edit,
|
|
44
|
+
and a change you did not make is merged or stops you, never overwritten. Borrowed from Orca's
|
|
45
|
+
task-spec contract (ownership + acceptance) and Claude Workflow's per-agent worktree isolation.
|
|
46
|
+
`parallel-agents`, `pipeline` and `workflow` carry the write set in their handoff envelopes and
|
|
47
|
+
check changed files against it on the way back; `workflow` lists Orca as a coordination host.
|
|
48
|
+
The `full` carrier ceiling moves 55_500 → 57_000 for the rule's text; `lean` does not move.
|
|
49
|
+
- **OpenCode workflows take `isolation: "worktree"`**, like Claude Code's Workflow: each such
|
|
50
|
+
agent runs on its own branch and worktree; an unchanged one is released, a changed one is kept,
|
|
51
|
+
and the summary names every kept branch and every file two agents changed (`rt.overlaps()`).
|
|
52
|
+
Nothing is merged for you, and without git the agent fails rather than run in the shared tree.
|
|
53
|
+
- **Ops 7, serialize against a rationed resource.** A rate-limited API, a quota or a single
|
|
54
|
+
gateway is called in sequence, never fanned out: budget the quota across its callers before any
|
|
55
|
+
parallelism, back off on refusal within a retry cap set first, and treat a refusal that repeats
|
|
56
|
+
unchanged as a hard limit to report, never a batch to re-send. It names the calls process 3's
|
|
57
|
+
"batch independent calls" must not batch.
|
|
58
|
+
- **Craft 7, one writer per value.** A value held by hand in several places — a version, a count,
|
|
59
|
+
a name, a threshold — gets one home as its sole writer; every other copy is derived from it or
|
|
60
|
+
gated against it, the homes are counted before the gate is trusted, and a tool that updates one
|
|
61
|
+
home is not trusted to have updated the rest. Distinct from process 8, which gives a *file* one
|
|
62
|
+
writer across agents; this gives a *value* one writer across files.
|
|
63
|
+
The carrier ceilings move `full` 57_500 → 59_500 and `lean` 38_900 → 39_500 for the two rules.
|
|
64
|
+
|
|
65
|
+
### Added — doctor
|
|
66
|
+
|
|
67
|
+
- **A `leanBlockProblems` doctor arm** over `src/laws/universal.md` and every pack: exactly one
|
|
68
|
+
`LEAN` block per rule, neither half blank. `resolveLean` is a replace over a marker pair and
|
|
69
|
+
therefore a no-op on markerless text, so a rule that lost its block would inline its full
|
|
70
|
+
body at the default footprint in silence, with every other gate in the tree green. Nothing
|
|
71
|
+
in `js/inspect/` read a LEAN marker before this — not for the packs, and not for the laws.
|
|
72
|
+
|
|
73
|
+
### Changed — tests and maintainer docs
|
|
74
|
+
|
|
75
|
+
- **CLI-matrix faults are edits of the real file, not copies of it.** Six `doctor` cells held
|
|
76
|
+
whole copies of `Laws.jsx`, `cyberpunk.json` and `registry.json` to change one line each; every
|
|
77
|
+
new rule, theme key or spec had to be carried into them by hand, and the `Laws.jsx` copies had
|
|
78
|
+
already drifted from the real file. A fault may now be `{ "edit": [[find, replace]] }`, applied
|
|
79
|
+
to the copied checkout; a `find` that does not match exactly once fails the cell.
|
|
80
|
+
- **`docs/extending.md` lists the seven CI commands** (`golden --cli` was missing), names the
|
|
81
|
+
craft-specific fixtures §2a skipped, and drops typed figures that had gone stale (the ceiling
|
|
82
|
+
headroom, a line number). `DESIGN.md` and §2c now say `I..XI` / `LEX_I..LEX_XI`, and the claim
|
|
83
|
+
that `LEX_I` is frozen in a recording is gone — the recordings were retired.
|
|
84
|
+
|
|
85
|
+
### Changed — toolchain
|
|
86
|
+
|
|
87
|
+
- **Web console toolchain on current majors** (dev-only; React stays 18): vite 5 → 8, vitest
|
|
88
|
+
2 → 5, jsdom 24 → 29, `@vitejs/plugin-react` 4 → 6, eslint / `@eslint/js` 9 → 10 and globals
|
|
89
|
+
15 → 17 (the root's majors), `eslint-plugin-react-hooks` 5 → 7. `npm audit` in `web/`: 12
|
|
90
|
+
dev-only advisories (1 critical, in vitest 2) → 0. The React-Compiler rules that v7 brings
|
|
91
|
+
flagged setState-in-effect prop resets in five places; they now adjust state during render,
|
|
92
|
+
so a fresh payload never paints once with the previous one's selection. `web/dist` rebuilt
|
|
93
|
+
(gzip js+css ~144.6 → ~142.0 KB).
|
|
94
|
+
- **Vendored skills carry their license text.** `daydream` now ships upstream's MIT `LICENSE`.
|
|
95
|
+
`react-view-transitions` has none to copy — upstream declares MIT in its README only, which
|
|
96
|
+
its `VENDOR.md` now says. Its upstream repo `README.md` is no longer copied into every install;
|
|
97
|
+
its `AGENTS.md` stays, because the skill's `SKILL.md` points the agent at it.
|
|
98
|
+
|
|
99
|
+
### Changed — architecture
|
|
100
|
+
|
|
101
|
+
- **The generator driver lives in `js/build/driver.mjs`.** Flag parsing, the nine emit targets
|
|
102
|
+
and the per-host emit orchestration were in `bin/build-driver.mjs`, so nine `js/` modules
|
|
103
|
+
(setup, migrate, doctor, diff, validate, uninstall, generate, the web actions) imported upward
|
|
104
|
+
from a binary. `bin/build-driver.mjs` is now a three-line entry. The unreachable `PORTED`
|
|
105
|
+
refusal (it equalled `EMITS`, which the parser already enforces) is gone, and the driver asks
|
|
106
|
+
`hostCatalogsNatively` instead of keeping its own copy of that table.
|
|
107
|
+
|
|
108
|
+
### Changed — code cleanup
|
|
109
|
+
|
|
110
|
+
- 24 exports nothing imported are module-private now; `GATE_LEDGER` has one owner
|
|
111
|
+
(`js/hosts/hosts.mjs`) instead of a hard-coded copy in `status`; `hooks.mjs` imports
|
|
112
|
+
`resolvePath` instead of keeping a third copy; `within` has one owner (`js/lib/paths.mjs`).
|
|
113
|
+
- Docblocks that contradicted the code are corrected: the hide-window rule for inheriting
|
|
114
|
+
spawns, the JSONC trailing-comma pass (it is string-aware), the deleted `emit.mjs`, and two
|
|
115
|
+
package-manifest reasons (a false "js/web/docs.mjs serves ROOT/docs", hand-typed sizes).
|
|
116
|
+
|
|
117
|
+
### Changed — the Ethos (#130)
|
|
118
|
+
|
|
119
|
+
- **The Pact is three ranked laws**, in Asimov's shape: protect the user first, serve their
|
|
120
|
+
intent second where it does not break the first, keep the agent's own honesty third. The
|
|
121
|
+
user now includes whoever maintains the code after the session — code its next reader cannot
|
|
122
|
+
follow is harm, like a false claim.
|
|
123
|
+
- **A coding evidence ladder.** Evidence grades the rungs a coding agent stands on: a green test
|
|
124
|
+
is a claim about the test, a clean type check a claim about the types. The absence and
|
|
125
|
+
truncation passage moved out — Law III already carries it.
|
|
126
|
+
- **The irreversible set is named.** Decisions lists the acts version control cannot undo — a
|
|
127
|
+
push to a shared branch, a schema or data migration, a deletion of data or history, a
|
|
128
|
+
published release, a secret, a call that reaches an external service or person; every other
|
|
129
|
+
edit runs freely.
|
|
130
|
+
|
|
131
|
+
### Changed — footprint (#129)
|
|
132
|
+
|
|
133
|
+
- **The root file is paid once.** The context hook and the OpenCode plugin no longer re-inject
|
|
134
|
+
the root file the host already loads natively (`CLAUDE.md`, `AGENTS.md`, `AGENT.md`) — about
|
|
135
|
+
8k tokens per session. The 16 KB/file, 48 KB/session eager budget the docs promised is now
|
|
136
|
+
enforced by the hook too, cutting at a line break with a marker.
|
|
137
|
+
- **Shorter skill descriptions**: purpose plus the first trigger sentence, capped at 320
|
|
138
|
+
characters (was 900).
|
|
139
|
+
- **Authored lean halves for AGENT.md §5–§10**, the tool-agnostic paragraph and the
|
|
140
|
+
readiness-sigil paragraph.
|
|
141
|
+
- **The native-catalogue flag is per kind** (`{ skills, agents }`): Bob keeps the §3 Agents
|
|
142
|
+
table and drops the §4 Skills table it already catalogues natively.
|
|
143
|
+
|
|
144
|
+
### Changed — review output (#127)
|
|
145
|
+
|
|
146
|
+
- **Review findings are Conventional Comments** in `geneseed-code-review` and the `reviewer`
|
|
147
|
+
agent — `issue (blocking): file:line — …` — so a line pastes into an MR comment and the
|
|
148
|
+
verdict follows from the decorations. Process 7's D/O/F/R/Q/A codes are unchanged.
|
|
149
|
+
|
|
150
|
+
### Changed — docs
|
|
151
|
+
|
|
152
|
+
- **The README leads with the engineering pitch** — enforced laws, one source for five hosts,
|
|
153
|
+
measured costs — above an animated demo (`docs/assets/demo.svg`); `CONTRIBUTING.md` points
|
|
154
|
+
GitHub at the contributing notes (#126).
|
|
155
|
+
- **Docs sweep**: five hook verbs (not four) wherever they are counted; the README's rail table,
|
|
156
|
+
laws row (nine in force, IX and XI retired), layout tree and test command match the tree;
|
|
157
|
+
dead links to `docs/limits.md`, `docs/specs/` and root-relative paths in
|
|
158
|
+
`docs/design-history.md` fixed; Copilot's hooks described where docs said it had none;
|
|
159
|
+
`GENESEED_STACK_GLOBAL` documented; bare `geneseed` described the same way everywhere.
|
|
160
|
+
- **The skills badge counts folder skills** (`daydream`, `react-view-transitions`,
|
|
161
|
+
`token-report`): doctor's count and README-list gates now read every skill that ships, not
|
|
162
|
+
only the flat `src/skills/*.md` ones.
|
|
163
|
+
|
|
164
|
+
### Changed — performance
|
|
165
|
+
|
|
166
|
+
- **Rendering reads each source file once per operation, and hashes the source tree once.**
|
|
167
|
+
`doctor` re-read the same partials again and again (91% of its reads were repeats) and every
|
|
168
|
+
emit re-hashed the whole tree for the fingerprint. Measured A/B under the same load: one emit
|
|
169
|
+
~324 → ~222 ms, `doctor --theme neutral` ~2.45 → ~1.63 s, `doctor --all` (which gates every
|
|
170
|
+
`geneseed update`) roughly halved. Both caches live on the per-operation `cfg`, not the
|
|
171
|
+
process — the web daemon renders in-process for days and must see an edited source.
|
|
172
|
+
|
|
173
|
+
### Changed — tests and CI
|
|
174
|
+
|
|
175
|
+
- **`golden.mjs --jobs` works.** It was parsed and ignored; cells now fan out over `--shard`
|
|
176
|
+
children — the 261-cell run goes from ~74 s to ~16 s.
|
|
177
|
+
- **`golden.mjs --cli`** runs the CLI/hook matrix (317 cells) against the expectations written in
|
|
178
|
+
each cell, in CI. Nothing had run them since the corpus replayer was retired; 27 had drifted.
|
|
179
|
+
Six doctor cells planted months-old whole-file copies — re-based onto today's files, keeping
|
|
180
|
+
exactly their fault. The rest followed deliberate changes (the status box's wider label
|
|
181
|
+
column, `harness` → `geneseed`, gates that fail closed, the root file no longer re-injected),
|
|
182
|
+
and three messages still said `harness` — fixed.
|
|
183
|
+
- **Release hardening**: actions pinned to commit SHAs; npm pinned to 11 (not `latest`) in both
|
|
184
|
+
the release and its CI mirror; publish runs from `main` or a `v*` tag only, and refuses a
|
|
185
|
+
commit CI has not passed. CI: read-only token, pushes to `main` only (PRs no longer run
|
|
186
|
+
twice), superseded runs cancelled, Node 24 on Linux beside 22, the test-count floor computed
|
|
187
|
+
from the written tests (it was a fixed 500 against 1100), and the no-interpreter package job
|
|
188
|
+
fails when the web daemon never reports ready. A weekly workflow runs the full mutation
|
|
189
|
+
matrix.
|
|
190
|
+
- The 30-second fetch-timeout test has its own file, so it overlaps the rest of the suite.
|
|
191
|
+
|
|
192
|
+
### Changed — the constitution
|
|
193
|
+
|
|
194
|
+
- **Law IV**: a durable authorization the user gave counts, alongside per-act confirmation (the
|
|
195
|
+
full text said "never a standing yes, unless already durably authorized", the lean text
|
|
196
|
+
dropped the exception). And "deletion" narrows to *deletion of what version control cannot
|
|
197
|
+
restore*, matching the Ontology's named irreversible set (#130): an edit or delete git can
|
|
198
|
+
undo runs freely.
|
|
199
|
+
- **Law V**: inside a loop with a stated bound (fix until green, at most N rounds), the expected
|
|
200
|
+
failure is the loop's input and the bound is the stop — a red test in a debug loop no longer
|
|
201
|
+
reads as a violation.
|
|
202
|
+
- **Law X**: echo the inferred goal back when a request admits readings that would lead to
|
|
203
|
+
different work — not for every request, which contradicted the Expert and Peer postures.
|
|
204
|
+
- **Law I (lean)** keeps secrets out of logs and output again; **rigor 3 (lean)** keeps "stop
|
|
205
|
+
rather than ship untested behaviour in silence (Law VIII)".
|
|
206
|
+
- **Memory is written through the rule skill** (process 1) everywhere — AGENT.md §6 and §7, the
|
|
207
|
+
memory and notebook READMEs told the agent to write it on its own. The `learn` hook is the
|
|
208
|
+
one automatic writer, named as such.
|
|
209
|
+
- **Pipelines: the parent owns the commit.** A crew hands back its worktree uncommitted with its
|
|
210
|
+
proof; the parent re-runs the proof itself, shows the user, and commits and merges once the
|
|
211
|
+
user accepts. Foreman merged on the crew's own logs, and the developer spec named a tester
|
|
212
|
+
commit that never happened.
|
|
213
|
+
- The bruno skills cited retired Laws IX and XI (now IV and III); **doctor now refuses a
|
|
214
|
+
citation of any retired law**, read off the canon. Themes title IX and XI "(retired)"; the
|
|
215
|
+
dead `EPI_PACT` key is gone. Prose outside the catalogue blocks no longer points at a table
|
|
216
|
+
the Claude emit does not render.
|
|
217
|
+
|
|
218
|
+
### Changed — doctrine lean forms (#128)
|
|
219
|
+
|
|
220
|
+
- **Doctrine rules inline an authored lean form.** All 24 rules across the four packs now
|
|
221
|
+
carry a `LEAN` block with both halves written by hand, the way the invariants and the
|
|
222
|
+
Ontology already did; `doctrinesBody` picks the half through `resolveLean` and the
|
|
223
|
+
first-sentence cut (`terseBlocks`) is gone. It was cutting eleven of the 24 rules down to a
|
|
224
|
+
maxim with no verb an agent could act on — *Make actions safe to run twice.*, *Change as
|
|
225
|
+
little as the task requires.*, and eight words of process 5's 213-word consent protocol.
|
|
226
|
+
The Doctrines section grows 4,096 → 9,635 characters at `lean` on neutral, which is the
|
|
227
|
+
point of the change rather than a cost of it; `CEILING.lean` moves 37,500 → 41,300 and
|
|
228
|
+
`CEILING.full` does not move, because not one full half was edited.
|
|
229
|
+
- **`doctrines/` ships at full text under both footprints,** joining `laws/` and `ontology/`
|
|
230
|
+
in `renderAll`'s on-disk exemption. It shipped whole before only because a pack file had no
|
|
231
|
+
markers for `resolveLean` to act on — by accident, where the Doctrines section's own pointer
|
|
232
|
+
promises it by contract.
|
|
233
|
+
|
|
234
|
+
### Fixed — blank web console on a non-canonical checkout path
|
|
235
|
+
|
|
236
|
+
- **`geneseed web` served a blank page when the checkout was reached by a path that is not its
|
|
237
|
+
real one** (a symlink, a Windows junction, a `subst` or mapped drive, an 8.3 short name). The
|
|
238
|
+
static route realpathed each requested file but compared it against an unresolved `web/dist`,
|
|
239
|
+
so every asset failed the "under dist" check and was answered with `index.html` at `text/html`;
|
|
240
|
+
the browser refused the module script and nothing was logged. `dist` is now resolved once in
|
|
241
|
+
`makeHandler`, and `tests/unit/web_server.test.mjs` serves an asset through a linked `dist`.
|
|
242
|
+
|
|
243
|
+
### Fixed — web console
|
|
244
|
+
|
|
245
|
+
- **A failed first load no longer hangs on the splash.** The boot splash waited on the overview
|
|
246
|
+
and the error toast rendered beneath it; a failure now lifts the splash and the dashboard shows
|
|
247
|
+
the error with a Retry.
|
|
248
|
+
- **Search stays current**: the Spotlight index is dropped on every data revision (a build, a
|
|
249
|
+
deleted fact, an install switch) and on a docs-host change. MCP results open the Harness page,
|
|
250
|
+
where MCP wiring lives, not Settings.
|
|
251
|
+
- **A refused Profile save keeps your draft** (it was replaced by the disk copy), the next Save
|
|
252
|
+
carries the new fingerprint, and leaving with unsaved edits asks first.
|
|
253
|
+
- Blocked `sessionStorage` no longer stops the app mounting.
|
|
254
|
+
- **Contrast**: `--text-3` clears WCAG AA (4.5:1) against its background and surface in every
|
|
255
|
+
skin — 19 of them were below it, the default dark skin at 3.9:1.
|
|
256
|
+
- **Keyboard**: voice picks are buttons (Esc closes the list), and the dashboard's section rows
|
|
257
|
+
carry a real link.
|
|
258
|
+
- The Docs host follows the deployed install when nothing is stored (Bob and Copilot read the
|
|
259
|
+
Claude Code pages). The unused `d3-force` dependency is gone; `docs/web-ui.md` describes the
|
|
260
|
+
rail as it is (no Specs view).
|
|
261
|
+
|
|
262
|
+
### Fixed — hosts and core
|
|
263
|
+
|
|
264
|
+
- **Copilot's hooks match Copilot's current schema.** The global emit wired a single-object
|
|
265
|
+
`toolCall` hook answered with `{"block": true}`; Copilot no longer has that event, so no
|
|
266
|
+
Copilot gate ever ran. It now adds array entries to `sessionStart`, `preToolUse`
|
|
267
|
+
(`tool-gate --host copilot`, answering a top-level `permissionDecision: "ask"` — every rule
|
|
268
|
+
asks, as on Claude Code), and `agentStop` + `preCompact` (`learn`, from `transcriptPath`).
|
|
269
|
+
`toolArgs` is read as an object or a JSON string. The claim moves to `settings_hooks`, so one
|
|
270
|
+
merge serves Claude, Bob and Copilot; a re-emit (or reactivate) unwires the legacy claims.
|
|
271
|
+
- **Bob global hooks name the install, not the settings folder.** `--root`/`--memory` came from
|
|
272
|
+
the nested settings file's parent (`~/.bob/settings`): memory was learned where nothing read
|
|
273
|
+
it, excludes were missed, and a global install never stood down for a project one.
|
|
274
|
+
- **Claude keeps Law IV with process 5 off.** `--doctrines` without `process` (or
|
|
275
|
+
`--exclude-rules process.5`) dropped the whole git-gate group, and the destructive-git check
|
|
276
|
+
went with it — on Claude only. The group now stays with `--no-consent`, which skips only the
|
|
277
|
+
commit/push ask.
|
|
278
|
+
- **Bob MCP servers go where Bob reads them**: `.bob/mcp.json` / `~/.bob/settings/mcp.json`,
|
|
279
|
+
not `settings.json`.
|
|
280
|
+
- **OpenCode asks on the same destructive git verbs as the other hosts** (`reset --hard`,
|
|
281
|
+
`clean -f`, `branch -D`, `checkout --`), which it only logged before.
|
|
282
|
+
- **`agents/_template.md` no longer ships** into an install's agents folder, where hosts
|
|
283
|
+
loaded it as a phantom `_template` agent. A Bob project emit's `.bob/.gitignore` now lists
|
|
284
|
+
the machine-specific `settings.json`.
|
|
285
|
+
- **`isDict` no longer says yes to a number.** `parseJson` wraps numbers, and the wrapper passed
|
|
286
|
+
the object check — `"permission": 5` in an `opencode.json` read as a dict the merge wrote its
|
|
287
|
+
git gate into, then serialised back as `5`. `mcp.mjs` and `native.mjs` drop their own copies.
|
|
288
|
+
- **One malformed `wiki.jsonc` no longer fails `/api/status`**: an `entries` that is not a list
|
|
289
|
+
is skipped instead of throwing.
|
|
290
|
+
- **`geneseed --help` lists the commands** (it died asking for a verb), and a bare `geneseed`
|
|
291
|
+
from an npm install runs `home` as both launchers already did.
|
|
292
|
+
- **`.gitignore`**: `notebook/` is anchored to the root — unanchored, it also ignored new files
|
|
293
|
+
under `src/notebook/`. `.claude/worktrees/` and `.claude/settings.local.json` are ignored for
|
|
294
|
+
every clone, not only through the maintainer's global excludes.
|
|
295
|
+
|
|
296
|
+
## [3.4.0] — 2026-09-06
|
|
297
|
+
|
|
298
|
+
### Added
|
|
299
|
+
|
|
300
|
+
- **Six skills.** `security-audit` (the `security` agent finally has a caller — trust
|
|
301
|
+
boundaries, the classic classes, secrets, the supply chain, a ship / fix / block verdict),
|
|
302
|
+
`skill-forge` (author, sharpen, merge or retire a skill, with every satellite the host or
|
|
303
|
+
the source repo demands), `worktree` (isolate a task in its own tree from a clean base —
|
|
304
|
+
the first move when `git status` shows changes you did not make), `ci-fix` (a red CI run
|
|
305
|
+
reproduced under CI's conditions and fixed at the cause), `deps-audit` (a risk-ordered
|
|
306
|
+
upgrade plan for `migrate` to execute, installing nothing) and `consolidate-memory`
|
|
307
|
+
(the memory set verified against the live repo, merged, retired, re-indexed).
|
|
308
|
+
- **A `harness` skill class** for the skills about the agent's own apparatus — wiki,
|
|
309
|
+
geneseed, rule, profile, herdr, skill-forge, consolidate-memory — which sat under
|
|
310
|
+
`understand` before and made that class a grab-bag. The web console's Skills view
|
|
311
|
+
grows the chip.
|
|
312
|
+
|
|
313
|
+
### Changed
|
|
314
|
+
|
|
315
|
+
- **A skill's emitted `description:` is now purpose + trigger.** Claude Code and Bob
|
|
316
|
+
match a task against that one line before loading a skill; it used to carry only what
|
|
317
|
+
the skill does, never when. `skillDescription()` appends `Use when: <the Trigger
|
|
318
|
+
paragraph>`, links reduced to text, capped at 900 chars at a sentence boundary.
|
|
319
|
+
- **The Self-improvement footer is one file.** `src/skills/_self-improvement.md` is
|
|
320
|
+
INCLUDEd by every flat skill and the template, with a four-line LEAN half; fifty
|
|
321
|
+
byte-identical copies are gone.
|
|
322
|
+
- **Merges, keeping the best of each:** `tdd` folded into `develop` (seams first, the
|
|
323
|
+
failing test seen to fail for the right reason, an explicit exit to ship or handoff);
|
|
324
|
+
`clarify` folded into `brainstorm` (charitable reading, the key-decision ledger echoed
|
|
325
|
+
back under Law X, then design only when there is something to design, and a routed
|
|
326
|
+
exit); the six learning skills folded into `teach` (crash course, decode, path) and
|
|
327
|
+
`quiz` (drill, feynman, gap check), both user-only. The skill count stays at 49.
|
|
328
|
+
- **`workflow` refined per host:** OpenCode's saved scripts versus Claude Code's native
|
|
329
|
+
tool (inline or `.claude/workflows/`, and only once the user has opted in), Bob and
|
|
330
|
+
Copilot falling back to `parallel-agents`; pick saved over inline, pass the task as
|
|
331
|
+
`args` so a run stays a pure function of its inputs, resume a failed run rather than
|
|
332
|
+
rerun it, and carry the conclusion yourself.
|
|
333
|
+
- **`registry.json`** stamps `last_verified: 2026-09-06` on every approved skill; the six
|
|
334
|
+
new ones enter as `experimental`.
|
|
335
|
+
|
|
13
336
|
## [3.3.0] — 2026-09-06
|
|
14
337
|
|
|
15
338
|
The host-gap release: every host now gets the hook surface its runtime actually
|
package/DESIGN.md
CHANGED
|
@@ -44,7 +44,7 @@ vault or a specific tool's hooks.
|
|
|
44
44
|
and the prose words the docs use: the core nouns `LAW(S)`/`DOCTRINE(S)`/`ONTOLOGY`/
|
|
45
45
|
`AGENT(S)`/`SKILL(S)`/`MEMORY`/`NOTEBOOK`/`VAULT`/`WIKI`, plus `TAGLINE`,
|
|
46
46
|
`LOADED_SIGIL`, `EPI_*`, `BENEDICTION`, `DESC_*`, `ROAST_PERSONA`, the invariant
|
|
47
|
-
titles `LEX_I`..`
|
|
47
|
+
titles `LEX_I`..`LEX_XI`, the 27 doctrine-rule titles `DOC_<PACK>_<n>`, the four pack
|
|
48
48
|
names `PACK_CRAFT`/`PACK_RIGOR`/`PACK_OPS`/`PACK_PROCESS`, and the section intros
|
|
49
49
|
`INTRO_*`. Each theme defines its own nouns; **neutral keeps the plain words** (Rule,
|
|
50
50
|
Doctrine, Agent, Skill, Memory, Workspace), so neutral output is unchanged.
|
|
@@ -98,8 +98,9 @@ vault or a specific tool's hooks.
|
|
|
98
98
|
and tier by reversibility; show the real forks), **Conduct** (answer what was asked,
|
|
99
99
|
once). It absorbed the Pact, which is now stated *inside* Telos rather than standing
|
|
100
100
|
as a peer of the rules.
|
|
101
|
-
- **Invariants** (`src/laws/universal.md`) — *what is never traded*.
|
|
102
|
-
Rules, `I`..`
|
|
101
|
+
- **Invariants** (`src/laws/universal.md`) — *what is never traded*. Eleven numbered
|
|
102
|
+
Rules, `I`..`XI`, nine in force — IX and XI are retired in place, their numbers kept so
|
|
103
|
+
existing citations resolve — headed `### {{LAW}} <roman> — {{LEX_<roman>}}`.
|
|
103
104
|
- **Doctrines** (`src/doctrines/{craft,rigor,ops,process}.md`) — *how work is done
|
|
104
105
|
here*. Practice rules addressed by pack and number, cited as `Doctrine process 5`.
|
|
105
106
|
`PACK_ORDER` (`js/build/source.mjs`) fixes the order craft → rigor → ops → process, which
|
|
@@ -163,20 +164,17 @@ vault or a specific tool's hooks.
|
|
|
163
164
|
Almost all of it is gated, across six named checks in `js/inspect/checks-build.mjs` —
|
|
164
165
|
`themeParityProblems` (key parity across the voices), `lawMetaProblems` and
|
|
165
166
|
`doctrineMetaProblems` (the console's Principle column, in both directions),
|
|
166
|
-
`constitutionProblems` (pack numbering and filing, `LEX_I..
|
|
167
|
+
`constitutionProblems` (pack numbering and filing, `LEX_I..LEX_XI` as an *equality*, the
|
|
167
168
|
`DOC_*` vocabulary, and every `{{DOCTRINE}}` citation in `src/`), and
|
|
168
169
|
`countTableProblems` / `proseMirrorProblems` (badges and prose). So `geneseed doctor
|
|
169
170
|
--all` is the check; the table above only says what it will ask for. `CHANGELOG.md` has
|
|
170
171
|
no gate and never has.
|
|
171
172
|
|
|
172
173
|
Two things the table cannot tell you, and `docs/extending.md` can: the default footprint
|
|
173
|
-
is **lean**, which
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
that cannot be edited. The Ontology is exempt from the truncation: it ships whole at
|
|
178
|
-
both footprints, because four flowing sections cut to their first sentences would read
|
|
179
|
-
as four orphan sentences.
|
|
174
|
+
is **lean**, which inlines the authored `LEAN:else` half of each invariant and each
|
|
175
|
+
doctrine rule (and of the Ontology) rather than the full body — so an amendment written
|
|
176
|
+
into one half only does not exist for most installs. Nothing is machine-cut any more:
|
|
177
|
+
`leanBlockProblems` refuses a rule whose block is missing or whose lean half is blank.
|
|
180
178
|
|
|
181
179
|
## 🧩 Components
|
|
182
180
|
|
|
@@ -202,7 +200,7 @@ theme file defines a `DIR_*` key, so `laws/` is `laws/` in all fourteen voices.
|
|
|
202
200
|
| Generator | `bin/build-driver.mjs` (`geneseed-build`) | — | substitution + `<!-- INCLUDE: -->` inlining, and the nine `--emit` targets |
|
|
203
201
|
| CLI, as data | `js/cli-table.json` | — | the owned document the entry point parses its own argv from |
|
|
204
202
|
| Automation | `bin/geneseed-cli.mjs` (`geneseed`) | — | 25 verbs — `build` / `doctor` / `status` / `prompt` / `diff` / `setup` / `web` / `upgrade` / … |
|
|
205
|
-
| Hooks | `bin/geneseed-hook.mjs` (`geneseed-hook`) | — | the
|
|
203
|
+
| Hooks | `bin/geneseed-hook.mjs` (`geneseed-hook`) | — | the five verbs an emitted hook config invokes: `context` / `git-gate` / `rule-gate` / `tool-gate` / `learn` |
|
|
206
204
|
| Adapters | `adapters/` | — | optional per-tool glue (hooks, OpenCode plugins) |
|
|
207
205
|
|
|
208
206
|
## ⚙️ Generator contract
|
|
@@ -247,8 +245,7 @@ caught, and the reasoning behind every deliberate divergence — lives in
|
|
|
247
245
|
this project had two implementations and every byte either one wrote was compared. Read it to
|
|
248
246
|
understand *why* a seam is where it is; read the contract above to know *what* it is today.
|
|
249
247
|
|
|
250
|
-
See also [docs/extending.md](docs/extending.md) — what one addition costs, and which gate says
|
|
251
|
-
so — and [docs/limits.md](docs/limits.md) — what this tool does not prove about itself.
|
|
248
|
+
See also [docs/extending.md](docs/extending.md) — what one addition costs, and which gate says so.
|
|
252
249
|
## 🚫 Explicitly out of scope
|
|
253
250
|
|
|
254
251
|
Graph/index generation, web-clipping pipelines, session-classification capture,
|
package/QUICKSTART.md
CHANGED
|
@@ -27,7 +27,9 @@ should print `ok`.
|
|
|
27
27
|
|
|
28
28
|
## 3 · Optional niceties
|
|
29
29
|
|
|
30
|
-
- **Browse it:** `npx geneseed web` opens the local web console
|
|
30
|
+
- **Browse it:** `npx geneseed web` opens the local web console — and once installed,
|
|
31
|
+
bare `geneseed` does the same when it can (else it prints the command list).
|
|
32
|
+
`geneseed --help` lists every command.
|
|
31
33
|
- **No full-screen TUI:** `tui` and `menu` are verbs that say the panel is not here and
|
|
32
34
|
print the command list instead. The web console is the visual front end.
|
|
33
35
|
|