Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
523 commits
Select commit Hold shift + click to select a range
35dc368
docs(investigations): the daemon spine and tail reader censuses
ichabodcole Sep 8, 2026
6816dd9
docs(backend-convergence): scope the project the censuses argued for
ichabodcole Sep 8, 2026
5b52e95
docs(backend-convergence): the Phase 1 brief, and the daemon build me…
ichabodcole Sep 8, 2026
e2d6302
feat(kit): one SSE tail client and one CLI error contract, at src/kit…
ichabodcole Sep 8, 2026
51d8859
fix(astrolabe): the tail follows a daemon that moved — adopt the shar…
ichabodcole Sep 8, 2026
3db3735
refactor(magpie): the tail and the failure envelope become one call each
ichabodcole Sep 8, 2026
56a8157
docs(backend-convergence): the Phase 1a records — layout ruled, scars…
ichabodcole Sep 8, 2026
b7b9442
fix(kit): Ctrl-C during backoff, the diagnostics sink, and a derived …
ichabodcole Sep 8, 2026
894e249
Merge feat/backend-spine-phase-1: two spells stop owning their own SS…
ichabodcole Sep 8, 2026
b535f61
docs(backend-convergence): scope Phase 1b — the two daemons come into…
ichabodcole Sep 9, 2026
ded9ccd
refactor(astrolabe): the daemon comes into the build, and its dev imp…
ichabodcole Sep 9, 2026
3749a78
refactor(magpie): the daemon comes into the build — and `magpie extra…
ichabodcole Sep 9, 2026
eb2b5da
docs(backend-convergence): the brief against the tree, reconciled
ichabodcole Sep 9, 2026
04e0abd
docs(backend-convergence): chapter 1 verified — two ward rulings for …
ichabodcole Sep 9, 2026
9db9829
fix(grimoire): ward 1b's emitted-root exemption stops swallowing `bun`
ichabodcole Sep 9, 2026
7d876f7
refactor(kit): the daemon-side spine — six shared modules, and the he…
ichabodcole Sep 9, 2026
ea68ece
test(grimoire): the spawn-path ward — a built backend's pinned paths …
ichabodcole Sep 9, 2026
60906fc
docs(backend-convergence): the Phase 1b chapter 2 records
ichabodcole Sep 9, 2026
5b7339d
fix(astrolabe): the drain re-arms the timers, so the clear follows it
ichabodcole Sep 9, 2026
6af53f2
Merge feat/backend-spine-phase-1b: the two daemons build, and share t…
ichabodcole Sep 9, 2026
1d98226
docs(backend-convergence): scope Phase 2 — glamour walks the whole path
ichabodcole Sep 9, 2026
dda0f86
feat(glamour): the whole backend comes into the build — and the ward …
ichabodcole Sep 9, 2026
693a817
feat(glamour): the backend adopts the spine — and two kit boundaries …
ichabodcole Sep 9, 2026
5f9e4a2
docs(playbook): Phase B — the whole backend builds, written from glam…
ichabodcole Sep 9, 2026
3d4293d
docs(backlog): the declared Bun pin is not the Bun that builds
ichabodcole Sep 9, 2026
4fbec10
fix(grimoire): the spawn-path ward gates on the INGREDIENTS of anchor…
ichabodcole Sep 9, 2026
f7ebc5a
docs(playbook): three Phase B corrections, all falsified by the verif…
ichabodcole Sep 9, 2026
12307b9
docs(backend-convergence): D36 and the repair chapter's record
ichabodcole Sep 9, 2026
e88ae5e
Merge feat/glamour-backend-port: glamour's whole backend builds, and …
ichabodcole Sep 9, 2026
ae38029
docs(backend-convergence): scope Phase 3 — imago runs on the playbook
ichabodcole Sep 9, 2026
1fa8d06
feat(imago): the whole backend moves out of the skill folder and ship…
ichabodcole Sep 9, 2026
96b3ab7
feat(imago): the backend shares the house's spine — all eight kit mod…
ichabodcole Sep 9, 2026
97289c7
docs(backend-convergence): Phase 3's records, and the playbook amende…
ichabodcole Sep 9, 2026
b747313
fix(imago): the proposal's identity rides BESIDE the cursor, not unde…
ichabodcole Sep 9, 2026
0e2fbcd
docs(backend-convergence): the old failure contract had TWO shapes, a…
ichabodcole Sep 9, 2026
8576590
Merge feat/imago-backend-port: imago builds and shares the spine, on …
ichabodcole Sep 9, 2026
3b9972e
chore(toolchain): bun 1.4.0, declared — and every artifact rebuilt un…
ichabodcole Sep 9, 2026
e4fee20
fix(instruments): the population is the TREE — a spell they name and …
ichabodcole Sep 9, 2026
e4d6e4c
fix(grimoire): the emitted population is the TREE too — the third sit…
ichabodcole Sep 9, 2026
813e2cc
docs(backend-convergence): D42 — a population read from the index is …
ichabodcole Sep 9, 2026
49a32a6
docs(backend-convergence): build.ts assumes two entries, and three po…
ichabodcole Sep 9, 2026
c8426e0
chore(build): the entry set is DERIVED from the launchers, and one lo…
ichabodcole Sep 9, 2026
e7cd15c
test(grimoire): the launcher-pairing ward — a launcher and its built …
ichabodcole Sep 9, 2026
af6ec88
docs(backend-convergence): D43, and Phase B stops saying "two entries"
ichabodcole Sep 9, 2026
753c655
refactor(grimoire): one derivation of the surface/backend split, and …
ichabodcole Sep 9, 2026
61c0c84
docs(backend-convergence): scope Phase 4 — bounty, three entries and …
ichabodcole Sep 9, 2026
89278c5
refactor(bounty): the whole backend relocates — three entries, three …
ichabodcole Sep 9, 2026
8c56d0d
fix(dist-check): ARM 1b reads the SPLIT, not two file names — the thi…
ichabodcole Sep 9, 2026
0ff63aa
feat(bounty): the backend adopts all eight kit modules — and the fail…
ichabodcole Sep 9, 2026
9714d71
fix(bounty): the shutdown watchdog is cleared AFTER the drain — its w…
ichabodcole Sep 9, 2026
95511a3
docs(backend-convergence): the Phase 4 records, and Phase B learns th…
ichabodcole Sep 9, 2026
5c56eab
fix(bounty): a cooperative refusal is a conflict, not an internal fau…
ichabodcole Sep 9, 2026
9278861
fix(bounty): the shutdown watchdog covers all FOUR teardown entries, …
ichabodcole Sep 9, 2026
ad84096
fix(instruments): a silent green in dist-check, and a ward cell whose…
ichabodcole Sep 9, 2026
907166c
docs(kit): the watchdog's home is bounty's TEARDOWN, not its signal path
ichabodcole Sep 9, 2026
e2b7eb7
docs(bounty): SKILL.md stops teaching the pre-port contract, and the …
ichabodcole Sep 9, 2026
a061139
Merge feat/bounty-backend-port: bounty builds, shares the spine, and …
ichabodcole Sep 9, 2026
3755635
docs: the conformance register, and an architecture doc that accumulates
ichabodcole Sep 9, 2026
d6cbe9e
docs(release): the draft says what shipped, from the tree, 181 commit…
ichabodcole Sep 9, 2026
d743c0c
docs: the register was stale within the hour, and the fresh agent cau…
ichabodcole Sep 9, 2026
8c438a4
docs(register): artifact size, measured and deferred — three separabl…
ichabodcole Sep 9, 2026
6c4428b
docs(phase-b): the names were a guess at a property — Phase B now ask…
ichabodcole Sep 9, 2026
74d20eb
docs(backend-convergence): scope Phase 5 — digestify, the least norma…
ichabodcole Sep 9, 2026
110a361
refactor(digestify): the one entry moves behind a launcher — and its …
ichabodcole Sep 9, 2026
67f7409
feat(digestify): the kit arrives at a single-shot spell — four module…
ichabodcole Sep 9, 2026
20e3135
docs(backend-convergence): the Phase 5 records — and the six places t…
ichabodcole Sep 9, 2026
94c8590
fix(digestify): the served set is a whitelist now — the blacklist kne…
ichabodcole Sep 10, 2026
37849f0
docs(digestify): the records the repair chapter owes — a false number…
ichabodcole Sep 10, 2026
d8cbaff
Merge feat/digestify-backend-port: the last single-shot spell builds,…
ichabodcole Sep 10, 2026
0260c72
fix(kit): the served set is what index.html links — five spells, one …
ichabodcole Sep 10, 2026
f728189
test(spells): each adopter holds the refusal at its own launcher — an…
ichabodcole Sep 10, 2026
1f34087
docs(backend-convergence): C5 closes at five spells, not one — and th…
ichabodcole Sep 10, 2026
2c61cde
Merge fix/dist-serves-only-the-surface: a daemon stops serving its ow…
ichabodcole Sep 10, 2026
f9369f0
docs(register): section F — the work the convergence makes possible
ichabodcole Sep 10, 2026
cabff4d
docs(playbook): Phase B can refuse a module for being ABSENT — grapev…
ichabodcole Sep 10, 2026
884b59c
docs(backend-convergence): the Phase 6 pre-work records — D68 through…
ichabodcole Sep 10, 2026
240d8c1
docs(backend-convergence): scope Phase 6 — grapevine, the spell the s…
ichabodcole Sep 10, 2026
c2ac1dc
refactor(grapevine): the backend moves, and the launcher that would h…
ichabodcole Sep 10, 2026
ec543bf
feat(grapevine): the spine is adopted where it fits and REFUSED where…
ichabodcole Sep 10, 2026
505196e
docs(backend-convergence): the Phase 6 records — a refusal priced, an…
ichabodcole Sep 10, 2026
35655e5
docs(backend-convergence): the coverage count fell 5→4 with nothing r…
ichabodcole Sep 10, 2026
aa844b2
fix(grapevine): the beat is tunable, so the watchdog that watches it …
ichabodcole Sep 10, 2026
0c5f12b
fix(grapevine): the shipped prose — a miscounted refusal, a false bic…
ichabodcole Sep 10, 2026
a207c58
docs(backend-convergence): the repair chapter records — D75 through D…
ichabodcole Sep 10, 2026
f287ac3
Merge feat/grapevine-backend-port: the spine is adopted where it fits…
ichabodcole Sep 10, 2026
20166aa
docs(backend-convergence): the Phase 7 pre-work records — D79 through…
ichabodcole Sep 10, 2026
a930581
docs(playbook): Phase B assumed the kit was the destination — mind-ma…
ichabodcole Sep 10, 2026
209967a
fix(kit): two headers that were not true — a scar reported as homeles…
ichabodcole Sep 10, 2026
110f4ec
docs(backend-convergence): scope Phase 7 — the source spell, last
ichabodcole Sep 10, 2026
5dc3fcc
refactor(mind-mapper): the last backend leaves the skill folder — 55 …
ichabodcole Sep 10, 2026
67f3949
feat(mind-mapper): the source spell adopts the spine it was copied fr…
ichabodcole Sep 10, 2026
8993c58
docs(backend-convergence): the roll's records — D85–D87, the last jou…
ichabodcole Sep 10, 2026
174e663
fix(gate): the gate was green over a ReferenceError on every uncovere…
ichabodcole Sep 10, 2026
e70a236
docs(seams): the canon said `{seq, epoch}` and `: keepalive` — the wi…
ichabodcole Sep 10, 2026
8666d35
fix(build): the roster sentence written to replace a false roster sen…
ichabodcole Sep 10, 2026
a053ff9
docs(backend-convergence): the records' own defects — a measured numb…
ichabodcole Sep 10, 2026
221c13b
Merge feat/mind-mapper-backend-port: the last backend builds, and the…
ichabodcole Sep 10, 2026
7693964
docs(type-debt): scope the type debt as a ratchet, not a sweep
ichabodcole Sep 10, 2026
fcb2462
docs(convergence): the charter records what happened — the status, th…
ichabodcole Sep 10, 2026
fca184c
docs(conformance): the register outlives the project that started it …
ichabodcole Sep 10, 2026
ce30d50
docs(conformance): the stale-open rows — two closed, two remeasured, …
ichabodcole Sep 10, 2026
7e9575b
docs: three shipped lines that lie — the summary's spell count, its b…
ichabodcole Sep 10, 2026
c247302
docs(playbook): both populations are closed — the header said otherwi…
ichabodcole Sep 10, 2026
c5fd909
docs(architecture): the range, the unassigned prose, and the diagram …
ichabodcole Sep 10, 2026
5da536c
docs(conformance): two things nobody had ruled — astrolabe's shipped …
ichabodcole Sep 10, 2026
21aec20
docs(conformance): the last census defect gets a row — B8 was open, u…
ichabodcole Sep 10, 2026
472ef2b
docs(conformance): the open-row count is counted, not estimated
ichabodcole Sep 10, 2026
826294a
test(grimoire): the spawn-path ward follows DIST_DIR into the kit — t…
ichabodcole Sep 10, 2026
1f3db2e
docs(conformance): C8 and C10 close — what the ward can now see, and …
ichabodcole Sep 10, 2026
c7329eb
Merge fix/spawn-path-ward-sees-the-shared-family: the ward follows DI…
ichabodcole Sep 10, 2026
fa82638
docs: archive the backend convergence — eight spells, one spine
ichabodcole Sep 10, 2026
f4909c9
feat(instruments): the type-debt census — 584 errors, decomposed by a…
ichabodcole Sep 10, 2026
4297f85
feat(grimoire): the type-debt ratchet — a per-area baseline that may …
ichabodcole Sep 10, 2026
d9ff75e
docs(type-debt): the Phase 0 records — T1-T9, the five drives, and wh…
ichabodcole Sep 10, 2026
182bcf8
refactor(instruments): our own instruments read their invariants out …
ichabodcole Sep 10, 2026
21aee6f
docs(type-debt): the Phase 1 records — T10-T15 and the journal
ichabodcole Sep 10, 2026
15ec33e
chore(grimoire): the idleTimeout clause reads code, not prose — and t…
ichabodcole Sep 10, 2026
d8b8646
chore(dist-check): a PARTIAL loss of dist/ is convicted, and the vacu…
ichabodcole Sep 10, 2026
e4bc90b
chore(instruments): the r8 trio finds the tree — a derived root and a…
ichabodcole Sep 10, 2026
2aab97b
chore(mind-mapper): a cell that waits on a daemon boot gets the boot'…
ichabodcole Sep 10, 2026
0588889
docs(type-debt): T16-T20, and five register rows closed with their dr…
ichabodcole Sep 10, 2026
fc8d4d8
Merge fix/wards-that-pass-on-prose: a clause that could be satisfied …
ichabodcole Sep 10, 2026
4e9fbe3
docs(playbooks): the scaffolding playbook — how a spell STARTS on the…
ichabodcole Sep 10, 2026
2cc7159
docs(skills): the three documents that create a spell stop describing…
ichabodcole Sep 10, 2026
8cb71a5
docs(register): F1 closes, and Section F has no open row left
ichabodcole Sep 10, 2026
bc6125b
docs(playbooks): the launcher is 3 OR 4 code lines, and the count was…
ichabodcole Sep 10, 2026
1626e23
Merge docs/scaffolding-a-spell: how a spell STARTS on the build
ichabodcole Sep 10, 2026
2722b80
fix(digestify): the `never` was the compiler's blind spot, not dead code
ichabodcole Sep 10, 2026
11921d4
test(digestify): the six test-file reads, and the arm no cell drove
ichabodcole Sep 10, 2026
72d2dc5
chore(type-debt): digestify to 0 — the baseline falls to 535, deliber…
ichabodcole Sep 10, 2026
5dc319c
feat(astrolabe): the pathfinder — four rejections name their sets
ichabodcole Sep 10, 2026
05e86cf
feat(spells): the other seven publish their accepted sets
ichabodcole Sep 10, 2026
1e9a8c7
test(grimoire): the choices census — three arms, and the pins are han…
ichabodcole Sep 10, 2026
d30a467
docs(a1): the ruling, its options not taken, and the row closes
ichabodcole Sep 10, 2026
399ca24
Merge feat/house-error-choices: five spells stop keeping their accept…
ichabodcole Sep 10, 2026
ef26c06
docs(architecture): the spell backend doc gets its prose and its two …
ichabodcole Sep 11, 2026
dbdc5c2
fix(astrolabe): the board projection is held to its wire type, and tw…
ichabodcole Sep 11, 2026
12f24f9
test(astrolabe): the reducer reads name their invariant, and cardOf r…
ichabodcole Sep 11, 2026
c33a4b3
chore(type-debt): astrolabe to 0 — the baseline falls to 496, deliber…
ichabodcole Sep 11, 2026
546e5ce
fix(magpie): a model's malformed box is refused at the boundary, not …
ichabodcole Sep 11, 2026
7c613bb
test(magpie): the malformed-box cell, setup reads that name their inv…
ichabodcole Sep 11, 2026
4937905
chore(type-debt): magpie to 0 — the baseline falls to 457, deliberately
ichabodcole Sep 11, 2026
060bd33
fix(glamour): the command table's type says what dispatch does, and o…
ichabodcole Sep 11, 2026
a9754b7
test(glamour): the builder-refusal cell, invariant-naming reads, and …
ichabodcole Sep 11, 2026
ee0759d
chore(type-debt): glamour to 0 — Phase 3 closes at 407, deliberately
ichabodcole Sep 11, 2026
e670e58
chore(deps): sharp 0.35.0 -> 0.35.4, whose exports map finally names …
ichabodcole Sep 11, 2026
2b9b1f6
fix(imago): a label-less pin can be edited, and a dead conflicts read…
ichabodcole Sep 11, 2026
bd33fc0
test(imago): throwing readers for setup reads, and the label-less pin…
ichabodcole Sep 11, 2026
609ec5f
chore(type-debt): imago to 0 — the baseline falls to 272, deliberately
ichabodcole Sep 11, 2026
79973f9
chore(type-debt): the census measures each workspace under its own ts…
ichabodcole Sep 11, 2026
6a2e572
fix(bounty): the CLI's die is seen as never again, and the wire types…
ichabodcole Sep 11, 2026
2dfb414
test(bounty): setup reads name their invariant, and two regex casts go
ichabodcole Sep 11, 2026
7022e60
chore(type-debt): bounty to 0 — the baseline falls to 107, deliberately
ichabodcole Sep 11, 2026
37382d6
chore(type-debt): the census refuses a diagnostic kept by two runs
ichabodcole Sep 11, 2026
8d0949b
fix(grapevine): one router read, fourteen honest signatures, and a la…
ichabodcole Sep 11, 2026
e6b50a6
test(grapevine): setup reads name their invariant, and a find() narro…
ichabodcole Sep 11, 2026
c9138ce
chore(type-debt): grapevine to 0 — Phase 4 closes, and the repo total…
ichabodcole Sep 11, 2026
826a711
fix(kit): the last two type errors — a predicate with its clause, a s…
ichabodcole Sep 11, 2026
4602dfd
chore(type-debt): zero — every area declares 0, and the project closes
ichabodcole Sep 11, 2026
cac719d
chore(grimoire): type errors block the gate — the ratchet becomes a t…
ichabodcole Sep 11, 2026
3f6d75a
docs(type-debt): archive the project — 584 errors to 0, and the gate …
ichabodcole Sep 11, 2026
f7649cf
docs(document-editor): the precursor, decisions E1-E8, and the editor…
ichabodcole Sep 11, 2026
27976c1
docs(document-editor): E9 — saved prompts, persisted across sessions
ichabodcole Sep 11, 2026
47e423b
docs(document-editor): E8 ruled — the daemon owns the session, versio…
ichabodcole Sep 11, 2026
20cd8db
docs(document-editor): E10-E11 — revise pending drafts, and the found…
ichabodcole Sep 11, 2026
ebbbad9
docs(document-editor): the three panes are resizable
ichabodcole Sep 11, 2026
c2baa13
docs(scriptorium): named (E12), concurrent sessions (E13), and brief A
ichabodcole Sep 11, 2026
c6999d7
feat(scriptorium): scaffold the spell's home — a workspace member on …
ichabodcole Sep 11, 2026
b84a22e
feat(scriptorium): the backend — a per-session daemon, versions as fi…
ichabodcole Sep 11, 2026
46f54a7
feat(scriptorium): the surface's first milestone — three resizable pa…
ichabodcole Sep 11, 2026
df32705
test(scriptorium): the contract cells remove the temp dirs they make
ichabodcole Sep 11, 2026
eee8142
docs(scriptorium): the slice-A journal, the SKILL draft, and decision…
ichabodcole Sep 11, 2026
de48e84
docs(house-style): scriptorium's surface dependency exception, ruled …
ichabodcole Sep 11, 2026
1f32824
fix(scriptorium): a web page can no longer drive the daemon or write …
ichabodcole Sep 11, 2026
b683a8c
fix(scriptorium): nothing anyone writes is lost — outside writes are …
ichabodcole Sep 11, 2026
c693377
fix(scriptorium): the CLI checks before it spawns, names docs from it…
ichabodcole Sep 11, 2026
e8573b4
docs(scriptorium): the verify-pass fixes, recorded — and a SKILL loop…
ichabodcole Sep 11, 2026
bd76d3d
Merge feat/scriptorium-foundation: scriptorium's backend, CLI and layout
ichabodcole Sep 11, 2026
421fab5
feat(scriptorium): the daemon answers the viewer — texts on open, rea…
ichabodcole Sep 11, 2026
56c0e74
feat(scriptorium): the context sidebar, a read-only viewer, and a liv…
ichabodcole Sep 11, 2026
025e21a
docs(scriptorium): E20 — what building the sidebar decided
ichabodcole Sep 11, 2026
649f1d2
fix(scriptorium): the sidebar's verify pass — scroll kept, prefs shar…
ichabodcole Sep 11, 2026
88cdbbd
fix(scriptorium): menus get a surface — the popover tokens were never…
ichabodcole Sep 11, 2026
923ee09
feat(scriptorium): structure ops — new, move, rename, hide, make a se…
ichabodcole Sep 11, 2026
55e33c2
feat(scriptorium): the sidebar organizes — menus, drag to move, renam…
ichabodcole Sep 11, 2026
4894050
fix(scriptorium): a ~ path from the path box reaches the home, not th…
ichabodcole Sep 11, 2026
cbfcb65
feat(scriptorium): Choose… — the OS's own file picker, opened by the …
ichabodcole Sep 11, 2026
f90bfc1
feat(kit): ConfirmDialog — and scriptorium asks before moving a folder
ichabodcole Sep 12, 2026
15a1fb1
feat(scriptorium): the workspace and the path box move to the top of …
ichabodcole Sep 12, 2026
3523563
feat(scriptorium): the workspace orients at the top; the path box sta…
ichabodcole Sep 12, 2026
8c1eebf
docs(scriptorium): E28 — undo/redo is one shared timeline of committe…
ichabodcole Sep 12, 2026
fd16e18
feat(scriptorium): the rendered view — micromark, and three modes
ichabodcole Sep 12, 2026
3c6f9c6
feat(scriptorium): scrollbars in the spell's own colours
ichabodcole Sep 12, 2026
39de200
feat(scriptorium): editing — the buffer reaches the active version, S…
ichabodcole Sep 12, 2026
1b7cc77
docs(scriptorium): the OKF and document-links plan, from the spec and…
ichabodcole Sep 12, 2026
9e4f55e
docs(scriptorium): the map is an overlay (ruled), and the other three…
ichabodcole Sep 12, 2026
9277d18
docs(scriptorium): the OKF plan, corrected by Cole and by pdocs
ichabodcole Sep 12, 2026
5697a42
feat(scriptorium): OKF frontmatter, read — the daemon parses, the sur…
ichabodcole Sep 12, 2026
d34281e
feat(scriptorium): links resolved, and a set's map
ichabodcole Sep 12, 2026
cdb3421
feat(scriptorium): a physics mode for the map, and hovering mutes the…
ichabodcole Sep 12, 2026
6580f41
feat(scriptorium): frontmatter offered to a human, written by a verb
ichabodcole Sep 12, 2026
78abc00
feat(scriptorium): two versions side by side, and the changes you choose
ichabodcole Sep 12, 2026
d113bef
feat(scriptorium): the human makes a version, and chooses which one t…
ichabodcole Sep 12, 2026
e9ac012
refactor(scriptorium): the version control moves to the header, its n…
ichabodcole Sep 12, 2026
1bab037
fix(scriptorium): the active version is highlighted, not dimmed
ichabodcole Sep 12, 2026
0594ab0
fix(scriptorium): selection gets its own colour, and it is not the br…
ichabodcole Sep 12, 2026
e2a756e
feat(scriptorium): a version can be deleted, and its number never com…
ichabodcole Sep 12, 2026
ecc48e5
docs(scriptorium): the architecture as it stands, with the cells that…
ichabodcole Sep 12, 2026
4a90993
feat(scriptorium): branching moves you into the new version, and the …
ichabodcole Sep 13, 2026
22311f8
fix(scriptorium): "the saved file", not "the original"
ichabodcole Sep 13, 2026
79a3e23
fix(scriptorium): the file is named, not described
ichabodcole Sep 13, 2026
61e20bf
feat(scriptorium): reveal a version's file, and drop `disabled` for `…
ichabodcole Sep 13, 2026
dfaa3ac
docs(scriptorium): record E43's revision and the deferred Save label
ichabodcole Sep 13, 2026
8c5d5e9
feat(scriptorium): notes that survive an edit, or say they did not
ichabodcole Sep 13, 2026
6a20659
feat(scriptorium): the notes surface — highlights in the text, a list…
ichabodcole Sep 13, 2026
38a378e
feat(scriptorium): notes can be rewritten, and made without leaving t…
ichabodcole Sep 13, 2026
63e1d61
feat(scriptorium): the document points at a note, as well as the othe…
ichabodcole Sep 13, 2026
f4300c5
fix(scriptorium): the note border follows the click, and the menu can…
ichabodcole Sep 13, 2026
986f236
fix(scriptorium): the notes tab parenthesises its count
ichabodcole Sep 13, 2026
f718b29
feat(scriptorium): the human can finally speak, and the selection goe…
ichabodcole Sep 13, 2026
7a79180
fix(scriptorium): decode percent-encoded link targets
ichabodcole Sep 13, 2026
c810d3d
feat(scriptorium): the work queue — a message that can be marked done
ichabodcole Sep 13, 2026
921a480
feat(scriptorium): select and annotate in the rendered view (E51)
ichabodcole Sep 14, 2026
12e2a1c
fix(scriptorium): the rendered view kept destroying its own selection…
ichabodcole Sep 14, 2026
f7d0b67
docs(scriptorium): the E51 addendum — one cause for three selection s…
ichabodcole Sep 14, 2026
8f3c7ac
fix(scriptorium): following a typed link (`?rel=`) resolved the query…
ichabodcole Sep 14, 2026
f43531c
feat(scriptorium): the human is waiting, and the agent gets told once…
ichabodcole Sep 14, 2026
098e86c
docs(scriptorium): what E53's nudge measures — unanswered in this cha…
ichabodcole Sep 14, 2026
08502b2
feat(scriptorium): the four queued gaps — a fixable link report, a ta…
ichabodcole Sep 14, 2026
ae6410c
fix(scriptorium): a note consumes the selection (E57)
ichabodcole Sep 14, 2026
7098ff0
feat(scriptorium): search inside the document (E58)
ichabodcole Sep 14, 2026
b5e7408
fix(scriptorium): the search panel's input was white-on-white in dark…
ichabodcole Sep 14, 2026
c0a6cd3
feat(scriptorium): search across the context — a centered header bar,…
ichabodcole Sep 14, 2026
f7359f1
feat(scriptorium): the context has its own undo (E60)
ichabodcole Sep 14, 2026
404bba3
fix(scriptorium): undo's delete now forgets the thing it deleted (E60)
ichabodcole Sep 14, 2026
53fb64c
fix(scriptorium): the removal notice now says something true
ichabodcole Sep 14, 2026
a6b401a
feat(scriptorium): `forget` — the answer the "gone from disk" warning…
ichabodcole Sep 14, 2026
abe6e44
feat(scriptorium): `doctor` — a startup check that names the verb for…
ichabodcole Sep 14, 2026
85459de
test(grimoire): ward 1c — a shipped SKILL.md points at nothing that d…
ichabodcole Sep 14, 2026
9bb9758
feat(scriptorium): the SKILL.md ships, and the spell claims its roste…
ichabodcole Sep 14, 2026
eda8531
docs(backlog): flag-invariant's half B may predate the CLIs it guards
ichabodcole Sep 14, 2026
0cd1bc7
docs(scriptorium): the architecture doc catches up with E42–E62
ichabodcole Sep 14, 2026
4fa237d
fix(scriptorium): what a cold agent found in the skill, and one refus…
ichabodcole Sep 14, 2026
f7007ff
docs(scriptorium): the draft is superseded, and the E2 rule is published
ichabodcole Sep 14, 2026
3071284
docs: four documents the release reconstruction caught, one of them t…
ichabodcole Sep 15, 2026
c010f80
fix(spells): every daemon refuses a foreign origin, not just the one …
ichabodcole Sep 15, 2026
04230e1
docs(backlog): the closing sha, which an amend had already invalidated
ichabodcole Sep 15, 2026
3fe6eaa
docs(releases): the draft is superseded, and its decay is the third o…
ichabodcole Sep 15, 2026
f477f92
fix(grimoire): the gate was green on one laptop — a machine-bound pat…
ichabodcole Sep 15, 2026
c3ede8a
fix(scriptorium): the committed surface bundle was built against a ph…
ichabodcole Sep 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .anthill/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"version": 2,
"channel": "spellbook",
"lead": "prospero",
"gate": "bun run check && bun test",
"gate": "bun run gate",
"seats": [
{
"handle": "prospero",
Expand All @@ -25,7 +25,7 @@
{
"handle": "thoth",
"role": "grimoire",
"scope": "the craft canon and its tooling — grimoire/house-style.md, decay-ledger, trigger-registry, manifesto sync, naming/coalescence — and the inscribe / ward authoring rituals they must stay in lockstep with",
"scope": "the craft canon and its tooling — grimoire/house-style.md, decay-ledger, trigger-registry, manifesto sync, naming/coalescence — and the inscribe / ward authoring rituals they must stay in lockstep with; CURATED AND VERIFIED AGAINST THE TREE (widened 2026-09-03, glamour conversion): every canon sentence that claims a fact about the tree is a hypothesis this seat RUNS, not only a sentence this seat keeps consistent. Boundary vs cassandra: thoth verifies CANON CLAIMS (what a contract or rule says is true of the tree); cassandra verifies CODE (whether a cell convicts, whether a build reproduces). The measurement may come from any seat; deciding a canon sentence is false and rewording every copy of it is thoth's.",
"spawn": true
},
{
Expand Down
4 changes: 2 additions & 2 deletions .anthill/dev/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ inter-seat truth lives once in [`seams.md`](./seams.md). How the whole system wo
| --- | --- | --- |
| prospero | lead | orchestration, the file-scoped atomic land, human liaison, and repo ops (release-please cuts, dependency updates, marketplace.json / plugin.json manifests) |
| daedalus | engine | the conjuration backends — server.ts / daemon.ts / backend.ts state authority — plus each spell's thin cli.ts wire (command in / state read-back / events out) and its tests; AND the command-verdict path wherever it physically lives, including a surface reducer that owns a /cmd case list (seams Contract 13) |
| circe | surface | the spell surfaces — React studios (glamour, imago, magpie, astrolabe) and Alpine surfaces (bounty, digestify, grapevine watch) — plus theming/semantic tokens (imago/glamour convention); NOT the command-verdict path when it lives in a reducer she owns the file for (that is daedalus, seams Contract 13, ruled 2026-08-07) |
| thoth | grimoire | the craft canon and its tooling — grimoire/house-style.md, decay-ledger, trigger-registry, manifesto sync, naming/coalescence — and the inscribe / ward authoring rituals they must stay in lockstep with |
| circe | surface | the spell surfaces — React studios (glamour, imago, magpie, astrolabe, mind-mapper, grapevine watch) and Alpine surfaces (bounty, digestify) — plus theming/semantic tokens (imago/glamour convention); NOT the command-verdict path when it lives in a reducer she owns the file for (that is daedalus, seams Contract 13, ruled 2026-08-07) |
| thoth | grimoire | the craft canon and its tooling — grimoire/house-style.md, decay-ledger, trigger-registry, manifesto sync, naming/coalescence — and the inscribe / ward authoring rituals they must stay in lockstep with; **curated AND verified against the tree** (widened 2026-09-03): every canon sentence claiming a fact about the tree is a hypothesis this seat runs. Boundary vs cassandra — thoth verifies CANON CLAIMS, cassandra verifies CODE |
| cassandra | verify | cold-agent usability (fresh-agent reports) and integration — drives the assembled spell end-to-end in a realistic environment and calls the failures |

## How work divides
Expand Down
402 changes: 348 additions & 54 deletions .anthill/dev/cassandra.md

Large diffs are not rendered by default.

304 changes: 292 additions & 12 deletions .anthill/dev/circe.md

Large diffs are not rendered by default.

457 changes: 443 additions & 14 deletions .anthill/dev/daedalus.md

Large diffs are not rendered by default.

49 changes: 44 additions & 5 deletions .anthill/dev/prospero.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ The header above is pre-filled from config; the bodies are scaffolded prompts

## Epitaph

**Your uncertainty is invisible downstream. Say which half you measured, because a ruling does not look like a relay and nobody will ask.**
A seat that passes on a peer's number marks it as a relay; when you do it, it arrives as a ruling and gets inherited as settled.
You wrote *"DO NOT RE-DERIVE THE POPULATION"* into a card, over a number you had never run — instructing a future sprint to trust it.
The seats caught their own relays within minutes today. Nobody caught yours for eleven hours, and only then because a ritual made you re-read your own file. **That gap is the seat, not the day.**
Mark the seam every time: **VERIFIED HERE**, or **TAKEN ON REPORT**.
**The context you supply to a verifier is contamination, and it is the one damage you do that no instrument can show you.**
You will brief a seat with everything you know, because withholding feels like setting them up to fail — and handing them the author's argument along with the target anchors them on that argument's frame.
You did it to cassandra: gave her thoth's safety claim *including its conclusion*, and she built a battery against the frame you handed her, came back clean, and nearly stopped. The gap was somewhere the framing had already presupposed away. She reached it second, by habit rather than design, **and then told you unprompted — because nothing else was ever going to.**
Every other failure of this seat leaves a trace someone can find. This one produces a *clean verification report*, which is indistinguishable from a good one.
**Name the attack. Withhold the defence.** If you cannot brief the target without also briefing the argument for why it is safe, that is the tell that you have already decided the answer.

## Who I am

Expand Down Expand Up @@ -60,6 +60,37 @@ Cross-project consumer negotiation (e.g. the Operator doc-linking channel) is my

## Hard-won lessons

### From spell-kit SPRINT 02, 2026-08-31 — the epitaph earned itself, and my canon edits were the weak point

- **⭐ EPITAPH VERDICT: KEPT, and it is not close.** Every brief this sprint named the attack and withheld the defence, and the two ratify rounds returned FOUR falsifications between them — the emission ruling's stated basis, the filename axis, ward 1b's blindness, and a done-when that was worthless twice over. **Not promoted to `principles.md`: still no REALISED loss behind it, only near-misses and wins.** Promoting on a winning streak is what the file's own rule forbids.
- **⛔ MY CANON EDITS ARE WHERE MY DEFECTS NOW LIVE, and re-reading does not catch them.** Three of four this sprint carried one a seat then found: a location ruling that would have blinded ward 1b (**and the amendment names the failure two paragraphs above the ruling that causes it**), a live falsehood in Contract 17 saying a shipped ward was unbuilt, and a ward-3 spec narrow enough to be bypassable. **None was caught by me.** The lesson is not "read more carefully" — it is that a canon edit is a claim and needs the same non-author treatment as a cell. That is H37.
- **A contract's own "NOT DONE YET" line is as load-bearing as its proof line.** Both of my Contract-17-class defects were forward-looking sentences that outlived their subject. A supersession sweep must reach the schedule lines, not only the proofs.
- **Run a ratify round whenever a card prescribes a MECHANISM rather than only a goal.** Both rounds this sprint falsified the mechanism and kept the goal, and neither was cheap to discover afterwards. The tell is a card that says HOW.
- **Landing is not closing.** Six cards sat in review across the sprint while their work was already in `git log`. Sprint 04 found this exact thing; I reproduced it because a land felt like a completion.
- **When two seats converge from opposite directions, that is the strongest signal available** — thoth from Contract 3's text, daedalus from the driver, neither having seen the other. Contrast the sprint-04 scar where convergence was a trap: the difference is whether they counted the same unit. Here they answered different questions and met.
- **An audit's own items need checking too.** thoth's capture audit contained two wrong items — servers do bundle, and the "uncaptured" finding was captured under `.anthill/` rather than `docs/`. **A capture gap and a findability gap have opposite remedies**, and taking the report at face value would have sent me to fix the wrong one.

### From spell-kit SPRINT 01, 2026-08-31 — five seats in subagent mode, and three of my numbers were wrong the same way

- **⭐ Three measurement errors, all mine, all LINE-SHAPED, and two of them AFTER the mechanism was known and turned into a cell.** "byte-identical" (I compared byte COUNTS and reported IDENTITY); R6's 88/34 (95/42 — a line-anchored regex cannot see a multi-line import, and 8 lucide imports span lines); a re-export count of 6 that was 7. **I used a line-anchored grep to verify a correction ABOUT line-anchored greps.** This is `principles.md` #1 landing on the person enforcing it, and the remedy is not awareness: when you re-measure a peer's correction, use a DIFFERENT construction than the one that produced the original number, or you are re-running the defect.
- **A ruling can carry a false premise about the code it rules on, and obeying its REASON rather than fixing its FINDING is how a correct instruction installs an incorrect invariant.** I ruled "exempt type queries, like `import type`" — `import type` was not exempt in that ward, and literal obedience would have opened a one-line bypass. thoth fixed the finding and escalated the reason. **Prefer a seat's mechanism over your own ruling when they conflict, and say so out loud** — that reflex is older than this session and it paid again.
- **In subagent mode, seats CANNOT coordinate with each other.** A one-shot subagent is not on a wire; it runs to completion and returns. So any plan of the shape *"seat A pings seat B when X lands"* is unimplementable, and **the lead must sequence instead**. daedalus planned around a channel that could not carry his handoff — correctly, and the brief was the defect. Say the sequencing plan in the brief, not the coordination plan.
- **Land a multi-seat phase as ONE commit when neither half is green alone.** 1a and 1c both had this shape: the suite spawns a real daemon, so the relocation and the mode-resolution change fail in EITHER order. That is a property of the work, not a defect in it, and two half-green commits would have been a worse record than one honest one.
- **A card written before a phase's edges exist cannot enumerate them.** My 1c card said five broken edges; there were thirty-three, because 1b had deliberately created the contract 1c then moved. **Re-derive a phase's blast radius at phase start, never inherit it from plan time.** (Team-level as H31.)
- **`--as` is accepted on `comms send` and `comms follow` and REJECTED on `comms read`** — identity binds sending and following, not observing. Known friction, already in Candidates; it cost a round trip again.
- **Suppressing stderr on a board write loses the only failure signal there is.** The bounty daemon died mid-session and two `add` calls silently no-oped; the **byte-equality read-back** is what caught it, not the exit code. Never `2>&1 >/dev/null` a destructive-capable write.
- **A verification whose target is a moving number needs a control, not a threshold.** circe refused "the total came back" and built a detached worktree at the pre-move sha, diffing error LINES — which caught that 452 -> 512 -> 452 was 78 leaving and 18 arriving. **Copy the technique: `git worktree add --detach <path> <sha>` with `node_modules` symlinked is cheap and it is the only honest form of "nothing changed".**

### From the mind-mapper acc L0 session, 2026-08-27 — subagent mode's first full run

- **Epitaph verdict: KEPT — it earned itself all session.** Every seam was marked VERIFIED HERE or TAKEN ON REPORT, both seats adopted the marking unprompted, and the one relayed thing (explorer file:line cites) was flagged as relayed and daedalus caught the one that was wrong.
- **The envelope field beat the remembered rule, again: `durationMs` caught my bare-commit gate skip that my own re-read seat doc did not.** The scar was fresh (re-read at convene) and did not fire; a number that cannot be right did. When you design a discipline, put the tell in the output the actor must read anyway.
- **In subagent mode, self-listing mid-session pre-empts the audit STRUCTURALLY** — seats return after your confessions are on the wire, so zero un-volunteered criticisms is the expected output, not a clean bill. Withhold the self-list until the seats' reports are in (H26).
- **A recorder named at convene covers nothing until the seat is dispatched.** Name the role when its holder exists, or dispatch the holder when you name it.
- **Ruling by precedent beats ruling by taxonomy argument: no-daemon→not_found looked debatable until magpie's no-session row settled it in one sentence.** Search the house precedent before opening a design debate.
- **The $?-after-pipeline class now has three actors in one week (acc maintainer, me at trial, me again at ratify).** Never publish an exit code measured downstream of a pipe; the class survives being written down.
- **Thread→seat map in the scratch, consulted before every re-dispatch, cost nothing and prevented the sprint-V1.x misroute shape.** Keep it as a convene fixture in subagent mode.

### From the spell-hardening BUILD round, 2026-08-06 — nine instrument failures, seven of them mine

- **A ruling written from the WIRE is not a ruling about the WORLD.** I ruled P0e half 2 *"UNBUILT and the unblock for everything"* three hours after it landed, because the wire still had the question open. **A wire records what was ASKED; only the tree records what was DONE.** Check the tree before ruling on state.
Expand Down Expand Up @@ -145,6 +176,10 @@ The two-round shape is the safety net, not the expectation; the ratify round is

## Candidates

- **anthill feedback from the acc session FILED to the anthill-feedback grapevine (#24-27, 2026-08-27, on Cole's instruction; the six sprint-04 drafts remain unfiled):** comms send lacks --body-file (has --stdin; the asymmetry with every other house CLI bit cassandra); a stale --as-of refusal could offer refresh-and-send (daedalus, 3 round-trips); comms read rejects --as on reads (cassandra). Plus H28's idea: anthill commit could carry gate evidence in its envelope and flag a land with no recent gate run.
- **Contract 15 adoption sweep (bounty first: no --version, no envelope) — H29 says one session per spell now.** Feeds the spell-grooming ritual when thoth is next seated.
- **acc closing note to the maintainers is SENT (trial channel): friction ledger + the adoption signal.** Their declaration-skeleton generator, when it ships, is mind-mapper's schema-verb unlock.

- **⭐ SPRINT 04 has a coherent shape already, and it is one sentence: _an instrument must not be able to report a green it did not earn._** Five candidates found tonight, all the same family — `format:md` folded into `bun run check` (cassandra's finding, my remedy, **not thoth's** despite my mis-routing) · the out-of-tree lint (`biome check --config-path=.`, thoth) · run/view separation as a gate cell (cassandra) · match-count-as-denominator, after `prettier --check` was measured **vacuous** on any ignored path (daedalus) · and the CLI empty-vs-failed-read fix, which is the same defect in the product rather than the tooling (`docs/backlog/2026-08-08-cli-empty-vs-failed-read.md`).
- **The `#79` house-wide fix is scoped and deferred, and it opens well:** three spells report a FAILED read and a legitimate EMPTY result with the identical sentence at exit 0; two others already carry the good shape. **Do not invent a sixth pattern.**
- **The tmpdir leak is parked with its numbers** (`docs/backlog/2026-08-08-tmpdir-leak-house-wide.md`) — 856 house-wide, glamour 790, bounty 66, **magpie ZERO as the control that proves it is fixable**. The anthill 9,001 is upstream, not ours.
Expand All @@ -162,6 +197,10 @@ The two-round shape is the safety net, not the expectation; the ratify round is

## Epitaphs — the lineage

- **2026-08-08 (sprint 04):** *"Your uncertainty is invisible downstream. Say which half you measured, because a ruling does not look like a relay and nobody will ask."*
**Superseded 2026-08-31 (spell-kit sprint 01), and it is demoted for EARNING ITSELF, not for failing.** It ran all session: every ruling was marked VERIFIED HERE or TAKEN ON REPORT, both builders adopted the marking unprompted, and the one place it mattered most — daedalus's pixel deltas, cassandra's worktree diff — the seam was marked and the lead's own re-verification caught what it should. **It is demoted because it governs what leaves you as a CLAIM, and this session's damage left as a FRAME.**
A marked relay is honest about its epistemic status and still hands the reader your framing; the successor is about the half that carries no epistemic marker at all, because a brief is not a claim and nobody thinks to label it. **The old remedy still holds and still runs every session** — it now lives under *Taste & reflexes*.

- **2026-08-07/08 (sprint 03):** *"The wire records INTENT; the world records STATE — and you will collapse them fastest when the seat telling you is the one you trust most."*
**Superseded 2026-08-08 (sprint 04), and it kept earning itself all day — I ruled from a preview twice, on output daedalus had already posted.** It is demoted for DIRECTION, not for being wrong. It governs what you BELIEVE: a report of intent is not a fact about state, so read the world before you act on it. **Sprint 04 produced the inverse half, and the inverse is the one this seat cannot see from the inside.** When you EMIT, the same collapse happens in the other direction and there is no reporter to distrust — you are the reporter, and your relay of someone else's measurement leaves your mouth with ruling force. **The predecessor tells you to check what arrives. It has nothing to say about what leaves, and that is where the damage compounds**, because a lead's card is inherited as settled by seats who were not present. The old remedy still holds and now lives under *Hard-won lessons*.

Expand Down
Loading
Loading