geneseed 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +217 -5
- package/DESIGN.md +149 -1326
- package/QUICKSTART.md +1 -1
- package/README.md +30 -22
- package/SETUP.md +98 -24
- package/SHIPPED.md +6 -5
- package/adapters/bob/README.md +3 -3
- package/adapters/claude-code/README.md +6 -4
- package/adapters/claude-code/skills/geneseed/SKILL.md +10 -6
- package/adapters/copilot/README.md +5 -4
- package/adapters/opencode/GLOBAL-HARNESS-SPEC.md +11 -6
- package/adapters/opencode/HOW-OPENCODE-LOADS.md +1 -1
- package/adapters/opencode/README.md +15 -9
- package/adapters/opencode/agents/orchestrator.md +1 -1
- package/adapters/opencode/opencode.json +0 -9
- package/adapters/opencode/plugins/geneseed-context.js +7 -7
- package/adapters/opencode/plugins/geneseed-guard.js +6 -6
- package/adapters/opencode/workflows/dispatch.js +1 -1
- package/bin/geneseed.mjs +74 -8
- package/docs/declined.md +53 -2
- package/docs/design-history.md +1290 -0
- package/docs/extending.md +672 -0
- package/docs/limits.md +141 -82
- package/docs/token-footprint.md +15 -4
- package/docs/web/agents.md +1 -1
- package/docs/web/authoring.md +1 -1
- package/docs/web/claude-hooks.md +2 -2
- package/docs/web/collaboration.md +3 -3
- package/docs/web/first-session.md +2 -2
- package/docs/web/footprint.md +14 -7
- package/docs/web/foreman-mode.md +2 -2
- package/docs/web/harnesses.md +5 -3
- package/docs/web/install-quick.md +1 -1
- package/docs/web/model.md +3 -3
- package/docs/web/plugin-context.md +2 -2
- package/docs/web/plugin-guard.md +3 -3
- package/docs/web/plugin-ponytail.md +1 -1
- package/docs/web/rules.md +23 -3
- package/docs/web/setup-choices.md +20 -7
- package/docs/web/themes-author.md +13 -1
- package/docs/web-ui.md +36 -12
- package/geneseed +0 -0
- package/harness.config.json +1 -1
- package/js/catalog.mjs +29 -4
- package/js/checkout.mjs +24 -1
- package/js/cli-table.json +9 -7
- package/js/diff.mjs +8 -3
- package/js/doctor.mjs +374 -26
- package/js/emit.mjs +48 -11
- package/js/generate.mjs +39 -5
- package/js/hooks.mjs +8 -7
- package/js/installs.mjs +101 -4
- package/js/inventory.mjs +150 -20
- package/js/lib/fs.mjs +6 -2
- package/js/mcp.mjs +3 -15
- package/js/migrate.mjs +10 -4
- package/js/render.mjs +116 -11
- package/js/settings.mjs +297 -28
- package/js/setup.mjs +95 -5
- package/js/status.mjs +45 -4
- package/js/themes.mjs +1 -1
- package/js/tui.mjs +46 -3
- package/js/uninstall.mjs +30 -11
- package/js/web/actions.mjs +76 -9
- package/js/web/api.mjs +95 -16
- package/js/web/docs.mjs +33 -5
- package/js/web/jobs.mjs +12 -3
- package/js/web/server.mjs +59 -2
- package/package.json +1 -1
- package/src/AGENT.md.tmpl +75 -65
- package/src/agents/_template.md +4 -4
- package/src/agents/advocate.md +4 -4
- package/src/agents/architect.md +2 -2
- package/src/agents/developer.md +5 -5
- package/src/agents/docs.md +2 -2
- package/src/agents/empiricist.md +3 -3
- package/src/agents/explorer.md +3 -3
- package/src/agents/framer.md +3 -3
- package/src/agents/historian.md +3 -3
- package/src/agents/operator.md +3 -3
- package/src/agents/pragmatist.md +3 -3
- package/src/agents/reviewer.md +2 -2
- package/src/agents/security.md +2 -2
- package/src/agents/skeptic.md +4 -4
- package/src/agents/steward.md +3 -3
- package/src/agents/tester.md +2 -2
- package/src/agents/user-advocate.md +3 -3
- package/src/agents/visionary.md +3 -3
- package/src/doctrines/README.md +41 -0
- package/src/doctrines/craft.md +51 -0
- package/src/doctrines/ops.md +61 -0
- package/src/doctrines/process.md +87 -0
- package/src/doctrines/rigor.md +52 -0
- package/src/laws/universal.md +17 -301
- package/src/memory/README.md +2 -2
- package/src/modes/README.md +2 -2
- package/src/modes/foreman.md +1 -1
- package/src/notebook/README.md +2 -2
- package/src/ontology/universal.md +89 -0
- package/src/postures/README.md +3 -3
- package/src/postures/artisan.md +3 -3
- package/src/postures/assistant.md +1 -1
- package/src/postures/expert.md +1 -1
- package/src/postures/mentor.md +1 -1
- package/src/postures/peer.md +2 -2
- package/src/skills/_template.md +2 -2
- package/src/skills/brainstorm.md +2 -2
- package/src/skills/clarify.md +2 -2
- package/src/skills/codebase-design.md +1 -1
- package/src/skills/commit.md +5 -5
- package/src/skills/council.md +4 -4
- package/src/skills/crash-course.md +1 -1
- package/src/skills/daydream/SKILL.md +1 -1
- package/src/skills/debug.md +2 -2
- package/src/skills/decode.md +1 -1
- package/src/skills/develop.md +6 -6
- package/src/skills/document-project.md +4 -4
- package/src/skills/domain-modeling.md +1 -1
- package/src/skills/drill.md +1 -1
- package/src/skills/feynman.md +1 -1
- package/src/skills/forge-mcp.md +3 -3
- package/src/skills/fresh-eyes.md +4 -4
- package/src/skills/frontend-design.md +1 -1
- package/src/skills/gap-detector.md +1 -1
- package/src/skills/geneseed-code-review.md +1 -1
- package/src/skills/geneseed.md +4 -4
- package/src/skills/git-archaeology.md +1 -1
- package/src/skills/git-rescue.md +3 -3
- package/src/skills/handoff.md +4 -4
- package/src/skills/herdr.md +1 -1
- package/src/skills/ingest.md +3 -3
- package/src/skills/learning-path.md +1 -1
- package/src/skills/migrate.md +5 -5
- package/src/skills/opencode-theme.md +1 -1
- package/src/skills/parallel-agents.md +2 -2
- package/src/skills/pipeline.md +2 -2
- package/src/skills/plan.md +2 -2
- package/src/skills/ponytail.md +1 -1
- package/src/skills/profile.md +1 -1
- package/src/skills/prose.md +2 -2
- package/src/skills/prototype.md +2 -2
- package/src/skills/refactor.md +2 -2
- package/src/skills/release.md +4 -4
- package/src/skills/repo-map.md +5 -5
- package/src/skills/research.md +6 -6
- package/src/skills/review-response.md +3 -3
- package/src/skills/roast-me.md +1 -1
- package/src/skills/rule.md +5 -5
- package/src/skills/ship.md +3 -3
- package/src/skills/tdd.md +2 -2
- package/src/skills/tickets.md +1 -1
- package/src/skills/wayfinder.md +1 -1
- package/src/skills/wiki.md +4 -4
- package/src/skills/workflow.md +2 -2
- package/themes/README.md +17 -7
- package/themes/_TEMPLATE.json +37 -33
- package/themes/biker.json +37 -33
- package/themes/commentator.json +37 -33
- package/themes/cyberpunk.json +37 -33
- package/themes/gamer.json +37 -33
- package/themes/imperial.json +37 -33
- package/themes/joker.json +37 -33
- package/themes/marvin.json +37 -33
- package/themes/mean.json +37 -33
- package/themes/military.json +37 -33
- package/themes/neutral.json +37 -33
- package/themes/pirate.json +37 -33
- package/themes/sports.json +37 -33
- package/themes/verstappen.json +37 -33
- package/themes/wizard.json +37 -33
- package/web/dist/assets/{About-DX1-VTBP.js → About-C0Mk0igT.js} +1 -1
- package/web/dist/assets/{Activity-Dp9NaXOn.js → Activity-C4aJJVXz.js} +1 -1
- package/web/dist/assets/{ActivityDetail-HpOBtrXS.js → ActivityDetail-DaQ85za0.js} +1 -1
- package/web/dist/assets/{Diff-Ct4G3Se8.js → Diff-B3tlO2Yj.js} +1 -1
- package/web/dist/assets/{Doctor-DGjkZFuA.js → Doctor-BNC-5Dmo.js} +1 -1
- package/web/dist/assets/{Graph-b8o-S6kv.js → Graph-us0T6ZcV.js} +1 -1
- package/web/dist/assets/Harnesses-DAMgyfM_.js +1 -0
- package/web/dist/assets/Laws-rOxegJ75.js +1 -0
- package/web/dist/assets/{Library-BEZscyaQ.js → Library-KmwrHA1J.js} +1 -1
- package/web/dist/assets/{Markdown-k_LSLBGq.js → Markdown-0eQOVGSF.js} +1 -1
- package/web/dist/assets/{Profile-DydukTxP.js → Profile-ZU7WV6Xl.js} +1 -1
- package/web/dist/assets/{Rules-CIRG4Ldt.js → Rules-CtDoPhhf.js} +1 -1
- package/web/dist/assets/{Skills-Buoi1IBr.js → Skills-BhoOxdkD.js} +1 -1
- package/web/dist/assets/{StatusBadge-CE_AJttl.js → StatusBadge-CGvYVCwa.js} +1 -1
- package/web/dist/assets/{Themes-CI4o3gJC.js → Themes-Dr7OOkD7.js} +1 -1
- package/web/dist/assets/{activity-BCW7e6Cy.js → activity-B8aq3qtl.js} +1 -1
- package/web/dist/assets/index-2wqPDxuN.css +1 -0
- package/web/dist/assets/{index-B1PIx7RM.js → index-AhMzkdbI.js} +1 -1
- package/web/dist/assets/index-CRftEtBX.js +12 -0
- package/web/dist/assets/{index-Ck2iCdaC.js → index-D0lPN_qW.js} +1 -1
- package/web/dist/index.html +2 -2
- package/web/src/pages/Laws.jsx +282 -88
- package/web/dist/assets/Harnesses-gr3-aHBF.js +0 -1
- package/web/dist/assets/Laws-DTwF5tTC.js +0 -1
- package/web/dist/assets/index-BnTQUSUz.js +0 -12
- package/web/dist/assets/index-DUCsDv7z.css +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,9 +6,170 @@ labels in `harness.config.json`. The canonical identity of an *installed* harnes
|
|
|
6
6
|
is the source fingerprint in `.geneseed-version` (see `geneseed version`), not this
|
|
7
7
|
label. For the capability ↔ spec map, see [SHIPPED.md](SHIPPED.md).
|
|
8
8
|
|
|
9
|
-
## [
|
|
9
|
+
## [3.0.0] — 2026-08-20
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- **The constitution is three tiers, and the law numbering contract breaks.** Forty flat
|
|
14
|
+
laws become an always-on **Ontology**, nine always-on **Invariants**, and twenty-three
|
|
15
|
+
**Doctrine** rules in four build-time-toggleable packs. This is the major: every
|
|
16
|
+
`Law <numeral>` citation above IX now addresses something else or nothing at all, in
|
|
17
|
+
this repo and in anyone's memories, notes and forks. There is no compatibility shim and
|
|
18
|
+
no migration path — a deployed install predating 3.0.0 is brought forward by
|
|
19
|
+
`geneseed upgrade`, not by code.
|
|
20
|
+
|
|
21
|
+
- **Ontology** (`src/ontology/universal.md`, new) — four prose sections, *Telos*,
|
|
22
|
+
*Evidence*, *Decisions*, *Conduct*. It is the mind the other tiers govern: what the
|
|
23
|
+
agent is for, how it grades evidence, how it decides, how it conducts itself. It
|
|
24
|
+
absorbs the **Pact** whole — the Pact is now a concept stated inside Telos rather than
|
|
25
|
+
a section beside the rules — along with old laws VIII, IX, XXIX, XXX, XXXI and XXXIX.
|
|
26
|
+
Cited by section name, `(Ontology: Decisions)`. The four names are theme-INDEPENDENT,
|
|
27
|
+
so a citation and its heading are the same token on both sides and a rename cannot
|
|
28
|
+
desync them.
|
|
29
|
+
- **Invariants** (`src/laws/universal.md`, rewritten) — nine, Roman I–IX, never
|
|
30
|
+
toggleable: what is *never* done. I Sealed Secrets · II One Intent, One Act ·
|
|
31
|
+
III Verify Before Asserting · IV Deletion Is Deliberate · V Surface Failures ·
|
|
32
|
+
VI Data, Not Orders · VII Least Privilege · VIII Cure the Cause · IX External Gate.
|
|
33
|
+
- **Doctrines** (`src/doctrines/{craft,rigor,ops,process}.md`, new) — twenty-three rules
|
|
34
|
+
in four packs: **craft** 6 (how code is written), **rigor** 4 (how work is proven),
|
|
35
|
+
**ops** 6 (how the machine is operated), **process** 7 (how a task is run). Cited
|
|
36
|
+
`Doctrine process 5`. Chosen per install with `geneseed-build --doctrines craft,rigor`
|
|
37
|
+
(or `none`), through the setup wizard, or in `harness.config.json`; all four default
|
|
38
|
+
to on.
|
|
39
|
+
|
|
40
|
+
Old XVI and XVIII cease to exist as rules and have **no numeral successor** — their
|
|
41
|
+
content was already duplicated in the AGENT.md sections that describe that machinery,
|
|
42
|
+
and folds back into them.
|
|
43
|
+
|
|
44
|
+
Precedence, stated in the template and enforced by nothing but reading: **Ontology and
|
|
45
|
+
Invariants → `user-rules.md` → active Doctrines → `PROFILE.md`.** A doctrine rule may
|
|
46
|
+
tighten an invariant, never repeal one — and the user's own file outranks a practice
|
|
47
|
+
pack chosen at build time.
|
|
48
|
+
|
|
49
|
+
⚠ **An always-on tier may never cite a toggleable one.** A `--doctrines craft` build
|
|
50
|
+
would otherwise ship an invariant instructing the agent to read text the install does
|
|
51
|
+
not contain. A doctor arm refuses `{{DOCTRINE}}` anywhere under `src/laws/` or
|
|
52
|
+
`src/ontology/`; doctrine→doctrine citations across packs stay legal, because every pack
|
|
53
|
+
file ships in every bundle whether or not it was built in.
|
|
54
|
+
|
|
55
|
+
- **A pack that is not built in is visible everywhere, never absent.** `geneseed catalog`
|
|
56
|
+
marks its rules `(off)`, the status panel and the dashboard carry an active-packs
|
|
57
|
+
fraction, and the console lists the pack greyed with the exact command that enables it.
|
|
58
|
+
Hiding it would make "not built in" indistinguishable from "never shipped", which is the
|
|
59
|
+
one thing a build-time toggle must not look like.
|
|
60
|
+
|
|
61
|
+
- **The commit/push consent gate rides the `process` pack.** It is the boundary half of
|
|
62
|
+
Doctrine process 5, so a build without that pack installs no `git-gate` hook and writes
|
|
63
|
+
no `git commit*` / `git push*` permission — prompt and boundary are never allowed to
|
|
64
|
+
disagree. `rm -rf *` and force-push refusals are Invariant IV's territory and stay in
|
|
65
|
+
every build. ⚠ On OpenCode this holds for a *fresh* install: an `opencode.json` that
|
|
66
|
+
already carries a `git commit*` entry keeps it and is reported, because Geneseed cannot
|
|
67
|
+
tell its own entry from one you typed and will not delete what it may not own.
|
|
68
|
+
|
|
69
|
+
Unknown always resolves to the **full** pack set, never to a config value. An install
|
|
70
|
+
with no `Active packs:` marker — every install predating this release — keeps its
|
|
71
|
+
consent gate on upgrade.
|
|
72
|
+
|
|
73
|
+
- **The console's Laws page is the Constitution page.** One nav entry, three bands, read
|
|
74
|
+
top to bottom. Deep links address all three tiers: `#/item/law/ont:telos`,
|
|
75
|
+
`#/item/law/IV`, `#/item/law/process.5`. The route, the section id and the filename stay
|
|
76
|
+
`laws`.
|
|
77
|
+
|
|
78
|
+
- **The lean footprint grew ~17%, deliberately.** Measured on `neutral`, `AGENT.md` goes
|
|
79
|
+
from 31,457 to 36,882 bytes at `lean` and 53,378 to 54,810 at `full`. Lean truncates
|
|
80
|
+
each invariant and each doctrine rule to its first line, but ships the **ontology
|
|
81
|
+
whole** — four flowing prose sections reduced to four orphan sentences would have been a
|
|
82
|
+
worldview nobody could read. `--doctrines` is now the larger lever on that cost.
|
|
10
83
|
|
|
11
84
|
### Added
|
|
85
|
+
|
|
86
|
+
- `--doctrines` on the generator, a doctrine-packs question in the setup wizard that
|
|
87
|
+
pre-selects what the install already carries, and an `Active packs:` marker in every
|
|
88
|
+
carrier so an install remembers its selection across upgrades.
|
|
89
|
+
- Doctor gates for the whole constitution: dangling `{{DOCTRINE}}` citations, per-pack
|
|
90
|
+
rule contiguity, `DOC_*` theme coverage in both directions, an exact `LEX_I..LEX_IX`
|
|
91
|
+
equality (a presence check had already missed four keys the renumber orphaned), a
|
|
92
|
+
single-word tier noun in every voice — both heading parsers match it with `\S+`, so a
|
|
93
|
+
two-word value makes a whole tier parse to nothing in silence — and a `DOCTRINE_META`
|
|
94
|
+
parity check whose class arm is an equality against the rule's own pack.
|
|
95
|
+
- A `[note]` channel in `doctor`: printed, never counted. Its one producer reports which
|
|
96
|
+
body citations point into packs a narrowed build did not render. That state must be
|
|
97
|
+
visible, but failing the doctor over a configuration its owner chose would be wrong.
|
|
98
|
+
- Count tokens `{N_ONTOLOGY}`, `{N_PACKS}`, `{N_PACKS_ACTIVE}` and `{N_DOCTRINE_RULES}`
|
|
99
|
+
for the in-app docs. `{N_LAWS}` stays the **invariant** count — the rail badge, the
|
|
100
|
+
README prose and SHIPPED.md's triple are all held to that one number by a frozen gate.
|
|
101
|
+
|
|
102
|
+
### Fixed
|
|
103
|
+
|
|
104
|
+
- **Four `§N` cross-references that render into every bundle** pointed at the section that
|
|
105
|
+
used to be there: inserting `## 2. Doctrines` pushed every later AGENT.md section down
|
|
106
|
+
one and the sweep stopped at the template. `src/skills/wiki.md`,
|
|
107
|
+
`src/skills/daydream/SKILL.md`, `src/skills/handoff.md`, `src/agents/_template.md`, plus
|
|
108
|
+
six in the two OpenCode plugins — one of them a live deny message a user reads. A doctor
|
|
109
|
+
arm now refuses a `§N` the template declares no section for; the half it cannot catch (a
|
|
110
|
+
pointer that still resolves and now means something else) is recorded as a manual sweep
|
|
111
|
+
in `docs/extending.md`.
|
|
112
|
+
- An `opencode.json` whose `permission` Geneseed cannot see inside — a blanket
|
|
113
|
+
`"bash": "allow"` — made the reconcile a no-op and the merge then returned before any of
|
|
114
|
+
its warnings. A rule stated in AGENT.md with nothing behind it at the boundary, in
|
|
115
|
+
silence. Now reported, naming the shape and the gates left unwired.
|
|
116
|
+
|
|
117
|
+
## [2.1.0] — 2026-08-19
|
|
118
|
+
|
|
119
|
+
### Added
|
|
120
|
+
- **Law XXXVIII — Prove the Gate.** A 38th universal law, in the verification class:
|
|
121
|
+
perturb what a check guards and require it to turn red, because one that has never
|
|
122
|
+
failed has never been shown to hold anything. It carries the four ways a green gate
|
|
123
|
+
lies — an impoverished fixture that leaves branches unreachable, two implementations
|
|
124
|
+
agreeing on what both get wrong, a gate that has only ever run in one environment,
|
|
125
|
+
and a gate holding its own drifting copy of what it measures — and the rule that a
|
|
126
|
+
two-directional constraint needs a gate able to fail in both directions. Sits beside
|
|
127
|
+
Law XXVII (honest tests) and Law XXXV (cover and verify): those say write the test,
|
|
128
|
+
this says prove the test is worth trusting.
|
|
129
|
+
- **Laws XXXIX and XL — Shape the Answer, Codes That Persist.** Two communication laws,
|
|
130
|
+
taking the count to 40. XXXIX governs order, repetition and scale: close on the
|
|
131
|
+
conclusion, state each fact once, and match the reply's length to the size of the task
|
|
132
|
+
— where Law VIII strips filler, this orders what is left. XL gives every tracked item
|
|
133
|
+
a short reference code (`D` decisions, `O` options, `F` findings, `R` risks, `Q`
|
|
134
|
+
questions, `A` actions) and forbids renumbering one once issued: the user will cite it
|
|
135
|
+
back, and a moved code makes their reply mean something they did not say.
|
|
136
|
+
- **An `Open folder` button beside every MCP config path, because a preset hands you a blank
|
|
137
|
+
token field and no idea which file it goes in.** The Harnesses screen already printed the
|
|
138
|
+
path above each target's server rows; it could not take you there. The button asks the
|
|
139
|
+
machine running the daemon to open the containing folder — `explorer` / `open` /
|
|
140
|
+
`xdg-open`, reusing the same opener `geneseed web` uses for the browser, so it is not a new
|
|
141
|
+
process the harness learns to start.
|
|
142
|
+
|
|
143
|
+
It opens the **folder, not the file**: handing a `.json` to the OS opens whatever claims
|
|
144
|
+
that extension, which on a stock Windows box is a browser — a read-only view of the exact
|
|
145
|
+
file you are trying to edit. The filename is already on screen beside the button.
|
|
146
|
+
The note names the directory rather than claiming a window appeared, because a headless
|
|
147
|
+
host has no opener and the server swallows that failure by design.
|
|
148
|
+
|
|
149
|
+
**The allowlist is the whole security of the endpoint**, and it is now literally the same
|
|
150
|
+
function the toggle uses (`mcpTargetPaths()`) rather than a second copy — a path the server
|
|
151
|
+
did not itself list is a 404 before anything opens. On Windows the opener interpolates into
|
|
152
|
+
a `cmd` command line, so the exact-match lookup is also what bounds the strings that can
|
|
153
|
+
reach a shell to the ones the machine's own install registry produced.
|
|
154
|
+
|
|
155
|
+
`/api/reveal` is **the first route that never existed on the Python reference**, which the
|
|
156
|
+
route-partition test asserted set-equality against. `REF_POST` is a *record* of what the
|
|
157
|
+
reference answered, so widening it would have forged the record; instead the partition
|
|
158
|
+
gained a sixth part, `POST_BEYOND_REF`, plus a gate that no reference route may hide inside
|
|
159
|
+
it. Both claims stay checkable: the reference's surface is still pinned exactly, and
|
|
160
|
+
everything past it has to be enumerated rather than merely appear.
|
|
161
|
+
|
|
162
|
+
`web/dist` **is** rebuilt here, so the button is live. It was held back while the corpus
|
|
163
|
+
still recorded `index.html` verbatim, Vite's content-hashed asset names included: a rebuild
|
|
164
|
+
would have retired the four `static/` cells (8 recordings) with no recorder left to re-bless
|
|
165
|
+
them. The branch this one waited on retired that corpus outright, so the cost it was saving
|
|
166
|
+
no longer exists and the rebuild is free.
|
|
167
|
+
What did *not* wait: `static/a-path-climbing-out-of-dist-falls-back-to-index` was the only
|
|
168
|
+
one of those four with no unit twin, and it is the only one that is a security claim rather
|
|
169
|
+
than a caching claim, so it now has one — stronger than the cell, which asked for
|
|
170
|
+
`/../../build.py` and asserted the body held no `argparse`, a file P4 deleted, making both
|
|
171
|
+
absences free. The twin probes a file that is really there, five traversal spellings deep,
|
|
172
|
+
and says so before trusting the absence.
|
|
12
173
|
- **`npx geneseed setup` is now the way in, and the README says exactly where that stops
|
|
13
174
|
being true.** The install docs assume npm first: one command, no clone, no Python, on
|
|
14
175
|
macOS, Linux and Windows alike. **All 25 commands** run from Node, along with all
|
|
@@ -75,6 +236,51 @@ label. For the capability ↔ spec map, see [SHIPPED.md](SHIPPED.md).
|
|
|
75
236
|
you the wizard, this is why.
|
|
76
237
|
|
|
77
238
|
### Removed
|
|
239
|
+
- **The recorded emit, cli and web corpora are retired — 1381 cells, and the two replayers that
|
|
240
|
+
existed only to drive them.** They were produced by the Python implementation this project
|
|
241
|
+
deleted, and by nothing else: no program that could write a cell survives, so a red cell could
|
|
242
|
+
never be re-blessed and never be re-recorded. The effect was a gate that turned red on every
|
|
243
|
+
deliberate content change — an emitted sentence, a reworded refusal, a version bump — while
|
|
244
|
+
saying nothing at all about a defect that happened to be stable on the day the recording was
|
|
245
|
+
taken. The 2.0 bump had already shown it: one label moving reddened 224 of 259 emit cells and
|
|
246
|
+
not one of them was a defect.
|
|
247
|
+
**The deletion was licensed by a measurement, not by the redness.** `tests/mutate.mjs` names,
|
|
248
|
+
per row, the gate that must kill each of its 31 planted mutations. Five declared a corpus replay
|
|
249
|
+
and nothing else; all five are killed by `tests/unit/` alone, the control included. For every
|
|
250
|
+
defect the matrix knows how to plant, the corpus was redundant.
|
|
251
|
+
**What it cost, stated rather than glossed:** byte-level regression detection on emit, cli and
|
|
252
|
+
web output. Nothing now notices a rendered bundle, a verb's stdout/stderr/exit code, or an HTTP
|
|
253
|
+
response body moving by one byte for a reason nobody intended. **What still runs on every
|
|
254
|
+
commit, on Linux and Windows both:** `golden.mjs --idempotent` and `--deletion` (a run against
|
|
255
|
+
another run of the same generator — determinism, not regression), `doctor --all`, and the unit
|
|
256
|
+
suite. The tag **`python-reference-v1.0.0`** is kept as the historical pointer: the second
|
|
257
|
+
implementation and every cell it recorded still live there, and nowhere else.
|
|
258
|
+
`docs/limits.md` carries the full argument, the rows it weakened, and the two pieces of frozen
|
|
259
|
+
residue it freed.
|
|
260
|
+
- **The `gitlab-2` MCP preset is gone; the pattern it taught is not.** It was a
|
|
261
|
+
byte-for-byte copy of the `gitlab` preset under a different `GITLAB_API_URL`, so the MCP
|
|
262
|
+
screen carried two rows to teach one thing SETUP.md already teaches in prose: a second
|
|
263
|
+
GitLab instance is a hand-copied block with its own URL and its own token. The `gitlab`
|
|
264
|
+
preset's description now says so, and SETUP.md gained the step people actually get stuck
|
|
265
|
+
on — *where does this file live* — naming both places that already answer it: the config
|
|
266
|
+
path the web console prints above each target's server rows, and `geneseed mcp`, which
|
|
267
|
+
prints the same paths from the terminal without starting anything.
|
|
268
|
+
Anyone who already wired a `gitlab-2` keeps it: the listing is a union of
|
|
269
|
+
the shipped presets and whatever is in your config, so it still appears, now marked as
|
|
270
|
+
yours rather than as a preset.
|
|
271
|
+
|
|
272
|
+
**What it cost the recordings, and why that no longer needs stating separately.** The
|
|
273
|
+
preset listing was recorded verbatim in the web corpus, and the reference that produced
|
|
274
|
+
those bytes was deleted in P4 — no recorder survived, so a moved listing could only be
|
|
275
|
+
retired: five cells × two platforms, **10 recordings**. That accounting is now subsumed by
|
|
276
|
+
the entry above, which retires the whole web corpus for the same underlying reason.
|
|
277
|
+
What matters is what replaced them, and it outlives both: three of the five already had
|
|
278
|
+
absolute twins in `tests/unit/web_api.test.mjs`, and the other two were **written first**
|
|
279
|
+
(`the MCP toggle refuses a commented jsonc and does not rewrite a byte`, `a user-defined
|
|
280
|
+
server joins the presets in the listing and keeps its own state`), each mutation-checked
|
|
281
|
+
against the guard it covers. The coverage is stronger than what it replaced: a corpus cell
|
|
282
|
+
proved two implementations agreed, which is silent on whether either was right; these state
|
|
283
|
+
what the endpoint must do.
|
|
78
284
|
- **`upgrade.sh` and `sync-self.sh` are gone.** Each was a few lines of bash that found a
|
|
79
285
|
Python interpreter and then ran `rituals/harness.py upgrade` (or `sync-self`) — the same
|
|
80
286
|
command every launcher already runs, on every OS, and one that native Windows could never
|
|
@@ -792,11 +998,12 @@ label. For the capability ↔ spec map, see [SHIPPED.md](SHIPPED.md).
|
|
|
792
998
|
These join `learning-path`, `gap-detector`, and `feynman`, bringing the
|
|
793
999
|
skill count to 33.
|
|
794
1000
|
|
|
795
|
-
## [2.0.0] —
|
|
1001
|
+
## [2.0.0] — 2026-08-17
|
|
796
1002
|
|
|
797
|
-
*
|
|
798
|
-
|
|
799
|
-
|
|
1003
|
+
*Published to npm as `geneseed@2.0.0` on 2026-08-17, by hand — npm's trusted-publisher screen
|
|
1004
|
+
needs a package that already exists, so the first release could not come from the workflow that
|
|
1005
|
+
gates every one after it. `harness.config.json` and `package.json` both read `2.0.0`, which is
|
|
1006
|
+
also the version this build stamps into every bundle it emits.*
|
|
800
1007
|
|
|
801
1008
|
*⚠ The bump itself was the last thing this release found. Moving the label reddened 224 of 259
|
|
802
1009
|
recorded emit cells, because the configured version is stamped into two places and only one of them
|
|
@@ -857,6 +1064,11 @@ and the replayers refuse to record — so a change that moves a recorded byte is
|
|
|
857
1064
|
than a step. `docs/limits.md` is the standing list of what that costs, row by row, including
|
|
858
1065
|
four strings that are known to be wrong and are now permanently unfixable.
|
|
859
1066
|
|
|
1067
|
+
*⚠ Superseded before publication. The emit, cli and web corpora were retired on 2026-08-17 for
|
|
1068
|
+
exactly the reason this section admits — see 2.1.0 → Removed. The paragraph above stands as
|
|
1069
|
+
the record of what was believed at the time; what this release guarantees is the shorter list
|
|
1070
|
+
there.*
|
|
1071
|
+
|
|
860
1072
|
### Removed
|
|
861
1073
|
|
|
862
1074
|
- **The second implementation.** 85 Python files, and with them the full-screen curses panel
|