Compare commits

..
Author SHA1 Message Date
jason.woltje d55944edb1 docs: row 285 landing record, sage-4100 seed ruling in the C2-21 brief, webby-0282 N1 in the C2-02 brief, mos-1584 brief template line, Vikunja 546 comment script (doc only) 2026-10-24 08:40:20 -05:00
jason.woltje 1f3d0350f3 row 285: preserve credential bindings for approved creative changes and verify r4 (#1790, mos-1585, mos-1586) 2026-10-24 08:12:02 -05:00
jason.woltje c57a9425e9 docs: row 285 r4 replay and regenerated B1 evidence on landed 296 and 217 (sage-4078) 2026-10-24 08:12:02 -05:00
jason.woltje edf06ca884 row 285: align library and creative fixture credential data under B1 (mos-1581, mos-1582) 2026-10-24 08:12:02 -05:00
jason.woltje 6ece68c975 row 285: require chief gitea exactly for library businesses (mos-1580, sage-4059, sage-4060) 2026-10-24 08:12:02 -05:00
jason.woltje dc68d4f4ce docs: trim range-diff evidence trailing whitespace 2026-10-24 08:12:02 -05:00
jason.woltje 6a0fa43837 docs: correct row 285 evidence timestamps with append-only receipts 2026-10-24 08:12:02 -05:00
jason.woltje 0c32e67f29 docs: row 285 r3 replay and static drift evidence before CLEAR (#1790, sage-4039) 2026-10-24 08:12:02 -05:00
jason.woltje 076eda6a57 row 285: BUILD.md records N1, the creative-only library.write refusal as a follow-up, and the round scope (#1790, sage-3593) 2026-10-24 08:12:02 -05:00
jason.woltje 63f3a69313 row 285: library.write joins ACTIONS and ROUTED in the business vocabulary and the broker under PRD 1.16 REQ-WAIT-3 and REQ-LIB-6, with a hard-waits test; BUILD.md records the r2 rebase, range-diff and drift check (#1790, sage-3578) 2026-10-24 08:12:02 -05:00
jason.woltje 9c85f27fa5 row 285: mos-1333, withdraw the publish fence; N10 option (a) with an assistant instance; a chief with its gitea ref, identity and publish loads; restore the creative publish test; BUILD.md gate scope (sage-2946) (#1790) 2026-10-24 08:12:02 -05:00
jason.woltje e7038a4407 row 285: webby-0178 early read, drop the stale creative publish comment and name the example's test readers (#1790) 2026-10-24 08:12:02 -05:00
jason.woltje 239033309c row 285: a chief-of-staff or creative instance that names publish refuses at load, keeping today's N10 refusal; instance-settings :289 follows the companion's gitea (#1790, mos-1332)
The fence sits near business.mjs:166, clear of row 287's :283-291. Its message
starts with the N10 text. An assistant-instance test keeps the no-gitea branch
covered, and a creative-instance test covers the fence. Nothing here has run.
2026-10-24 08:12:02 -05:00
jason.woltje 54bdac257e row 285: fixtures, example and README give the chief and creative instances their gitea reference (#1790, mos-1330)
Fixture data only, plus two named tests that a chief or creative instance
without credentials.gitea refuses at load. chief-of-staff.test :88 and :155
change expected values and wait on Mos's mos-1272 ruling. Nothing here has run.
2026-10-24 08:12:02 -05:00
jason.woltje 752cc87ac1 row 285: C2-08b, creative roles hold library.write and the gitea credential, the chief of staff a read-scoped gitea credential; #giteaRole refuses the chief (#1790, mos-1309 item 5, sage-2915, sage-2921)
The creative role files declare gitea with SEAT_SCOPES, the scopes the Gitea
grant mints. The chief declares read scopes only, so #giteaRole refuses it
with gitea-not-declared until row 287 mints its declared scopes.
library.write is not yet routed: it waits on PRD 1.16 (row #1796), and the
fixture change waits on Mos's mos-1272 rulings. Nothing here has run.
2026-10-24 08:12:02 -05:00
jason.woltje 25874bc86c docs: rows 296 and 217 landing record, mos-1583 cli skip-list rule in the brief template, Vikunja 533 comment script (doc only) 2026-10-24 06:24:51 -05:00
jason.woltje 4c6190645d queue: revs 3886-3914 (sage assigns 285/286 to magica and rockerduck, 285 brief re-pin, reviewers 285/286, requests and resolve/abandon for 296/217/286, notes and done for 296 and 217; lena 296 in-progress/in-review/outcome; magica 285 start; rockerduck 286 start/in-review/outcome; beakley 217 start and in-review; filbert 296 approve; webby 217 approve; boyd and dewey 286 approve) 2026-10-24 06:24:39 -05:00
jason.woltje d0a6a87cda row 217: record six green suites and five killed mutants for review 2026-10-24 05:39:26 -05:00
jason.woltje 29f7287942 row 217: correct new runtime fixture and record first-run evidence 2026-10-24 05:39:26 -05:00
jason.woltje 2c244de380 row 217: trim inherited limits whitespace and refresh hashes (Untested) 2026-10-24 05:39:26 -05:00
jason.woltje a44c1f884e row 217: normalize range-diff receipt whitespace (Untested) 2026-10-24 05:39:26 -05:00
jason.woltje 5481478786 row 217: availability refusal and landed supporting scope (Untested) 2026-10-24 05:39:26 -05:00
jason.woltje c2eac13ea5 row 217: keep fixture status on its current served tip (Untested) 2026-10-24 05:39:26 -05:00
jason.woltje dab9f6cd4d row 217: early-review coverage and availability RED cases (Untested) 2026-10-24 05:39:26 -05:00
jason.woltje b3ca50c950 row 217: citation runner retry and acceptance draft (Untested) 2026-10-24 05:39:26 -05:00
jason.woltje a1b72432cd launchpad: row 217 C2-06 work in progress, UNTESTED, handed to Beakley (mos-1500)
Guard, limits, M11 fence, broker guard/page store/check event, BusError
reason, runtime wiring and the CLI replies verb. No runner work, no tests,
nothing run. BUILD.md lists the rulings, the row 225 contract and what is left.
2026-10-24 05:39:16 -05:00
Lena bc4e94166d row 296: record scoped scratch acceptance and mutant evidence (#1802) 2026-10-24 05:39:14 -05:00
Lena 35f32b0326 Untested: record R7 reload ordering and slot boundaries (#1802) 2026-10-24 05:39:13 -05:00
Lena fca8c68ccc Untested: preserve R7 shell cleanup during mutant runs (#1802) 2026-10-24 05:39:13 -05:00
Lena 4f7bb95b33 Untested: row 296 scratch two-instance acceptance (#1802) 2026-10-24 05:39:13 -05:00
jason.woltje d91b580c3b row 296 handoff: FED R7 design notes to lena/row296 (mos-1503, Q245)
Quackerjack stops row 296 here. BUILD.md holds the verified reads, the proposed
harness design, the open decisions for Lena, and the R2 learning that R7 depends on.
No test or code changes in this commit.
2026-10-24 05:39:13 -05:00
jason.woltje 98235fdb32 docs: row 285 brief amendment 1, the chief's gitea reference is required only when the business declares a library, row 323's Case 1 file and test stay byte-identical (mos-1580); Beakley reports go to Sage (mos-1579); doc only 2026-10-24 05:36:04 -05:00
jason.woltje b19ffa04f8 agents: register Codex seats Magica (row 285) and Rockerduck (row 286) for the rebases onto refactor (mos-1576, mos-1542); doc only 2026-10-24 04:51:38 -05:00
jason.woltje e0c6142f3a queue: revs 3861-3885 (glomgold 309 and bradford 327 in-review moves and outcomes; sage review requests and resolve for 309 and 327; boyd 309 approve; poe and dewey 327 round 2 and 3 records; sage 327 note and done) 2026-10-24 02:23:20 -05:00
jason.woltje 42ba0f5bc0 docs: row 327 push guard landed at 68c08b4e7, gate green on its own install after canonical node_modules was found empty, canonical restored (mos-1575); session and build log entries; doc only 2026-10-24 02:19:07 -05:00
jason.woltje 68c08b4e76 docs: brief template, builders never run npm or remove files in the canonical checkout, and every gate runs its own npm ci in its worktree (mos-1575); doc only 2026-10-24 02:16:26 -05:00
jason.woltje 76f84465fd docs: size question records the collected notices for the 14 extra packages and the W3C form left for an owner decision (gyro-0019, gladstone-0027); doc only 2026-10-24 02:16:26 -05:00
jason.woltje 1bd214e382 Detect binaries despite git attributes and reject unconfirmed reviews (#1825) 2026-10-24 01:40:50 -05:00
jason.woltje 56c1845505 Fix push-check binary checks from repository subdirectories (#1825) 2026-10-24 01:40:50 -05:00
jason.woltje 72a3125a6e Add reviewed-binary push check and scratch regression suite (#1825) 2026-10-24 01:40:50 -05:00
jason.woltje 6a5e125113 docs: size question notes gyro/row310 is pushed; doc only 2026-10-24 01:39:05 -05:00
jason.woltje 529e121379 docs: size question adds the measured 209-plus-14 vendor option, 26.5 MB packed, builds offline with a cargo-pruned lock, four notice concerns (mos-1574, gyro-0016/0018, gladstone-0026); doc only 2026-10-24 01:38:59 -05:00
jason.woltje 9042754c47 docs: push-check brief amendment 1, binary detection adds a NUL scan of the committed blob so attributes can't hide a binary, and an unconfirmed queue tail fails closed (dewey-0955, row 327); doc only 2026-10-24 01:30:57 -05:00
jason.woltje c98cd41d8d docs: size question for Jason (Vikunja 618): W1 packs 17.5 MB, each W2 WASM rebuild packs 16.7 MB, offline release build 398 s, toolchain facts (mos-1572/1573); doc only 2026-10-24 01:20:38 -05:00
jason.woltje 94d9e90a6a queue: revs 3845-3859+ (sage W row re-pins 309-311, issues, owners, reviewers, briefed for 309/310; glomgold 309 and gyro 310 in-progress; sage add and brief row 327, the push check) 2026-10-24 00:59:16 -05:00
jason.woltje b617b80f68 agents: register Codex seat Bradford for the push check row (#1825, mos-1572); doc only 2026-10-24 00:52:34 -05:00
jason.woltje 93200bb446 docs: brief for scripts/push-check.sh, the repo push check that passes a binary only when an approved review candidate lists its path and sha256 (mos-1572 option A); doc only 2026-10-24 00:52:13 -05:00
jason.woltje d16958bcfd docs: W brief D2 lets O2 rows build before 10-27 and land only on an idle slot, Opus 5.5 review once at landing (mos-1571); register Codex seats Glomgold (row 309, W1) and Gyro (row 310, W2); doc only 2026-10-24 00:26:11 -05:00
jason.woltje 48f1627be2 queue: revs 3789-3844 (sage briefs/reviewer moves 157/208/265, requests, notes and done for 208/326/265; goldie 265 and 326; poe 208; bentina 157 r1/r2; gladstone 208 approve; boyd 157 r1 changes, r2 approve, 265 approve; duckworth 208 approve; darkwing 157 r2 approve) 2026-10-24 00:19:05 -05:00
jason.woltje 17f056787f docs: brief template, landed evidence is plain text with no gzip or binary waiver (mos-1570); doc only 2026-10-24 00:16:26 -05:00
jason.woltje 200dd396c4 feat(bus): add human project rooms with addressed sends
(cherry picked from commit ef4c938532)
2026-10-23 23:57:31 -05:00
jason.woltje 537902d261 docs: DEFERRED closes ops-0282 B2-2 (row 326 landed) and carries row 208 N1, the 5 s user.js re-render; doc only 2026-10-23 23:56:43 -05:00
jason.woltje f58049de02 duckworth: row 208 (193d) second review approve (static, guards) on 4a4bef6c1, no bus change, every hidden control has a broker refusal, grant hint per-grant and self-only, N1 (duckworth-0302)
(cherry picked from commit c36a0dc0d0a9f762bc74078dd53cce53df75642a)
2026-10-23 23:30:38 -05:00
jason.woltje 33f49f7d5a docs(host): close five first-install run-sheet gaps (#1822)
(cherry picked from commit a1b13c60e1)
2026-10-23 23:30:30 -05:00
jason.woltje 4a4bef6c13 feat(webui): shared threads and per-grant viewer read-only (193d) 2026-10-23 23:22:19 -05:00
jason.woltje ec86f2c847 docs: register Codex builder seats Bentina (row 157, I2) and Poe (row 208, 193d) under Q246 and mos-1566; doc only 2026-10-23 22:50:59 -05:00
jason.woltje 4ec279dc43 docs: run-sheet doc row brief, five operator gaps (mos-1566, ops-0282, ops-0291, ops-0292) 2026-10-23 22:47:34 -05:00
jason.woltje 3d2569ce25 queue: revs 3779-3788 (sage 323 note/done, 325 add/briefed/request; goldie 325 start/in-review/outcome; gladstone 325 approve record) 2026-10-23 20:33:27 -05:00
jason.woltje 3a20f29d66 docs: row 325 brief, re-key the Case 1 project to stack (ops-0288, mos-1563, mos-1564)
(cherry picked from commit 60d78e44e1e66cfb506bbae7399abc581729c97e)
2026-10-23 20:31:38 -05:00
jason.woltje c5f96836d5 fix(case1): match factory project key to repository id (#1821) 2026-10-23 20:14:55 -05:00
jason.woltje 99930362e4 queue: revs 3766-3778 (goldie 324/323 in-review and outcomes, sage 324 request/note/done and 42 note and 323 request, duckworth 324 and 323 approve records) 2026-10-23 19:59:07 -05:00
jason.woltje 579720e84a duckworth: row 323 round 1 approve (static) on 6a0f0f4f8, manifest 903ef022 matches, fields sourced, tests read shipped bytes, tester mutant real, C1 Sage gate cli, N1-N2 doc (duckworth-0300)
(cherry picked from commit 6ed9dc76df0f73f0488ceee801ee21cb7d137bf3)
2026-10-23 19:55:04 -05:00
jason.woltje c25799928d docs: brief template TMPDIR rule and DEFERRED revoke-window socket-path entry (row 323, mos-1561); doc only
(cherry picked from commit dda2d07b48b82821f85f73d7c5a3d9958bd9ce93)
2026-10-23 19:54:55 -05:00
jason.woltje 6a0f0f4f80 docs: record row 323 verification and TMPDIR root cause 2026-10-23 19:38:25 -05:00
jason.woltje 571376c30e feat(case1): add trackerless factory business file (#1819) 2026-10-23 19:12:43 -05:00
jason.woltje 6002698c32 docs: preserve row 323 investigation and no-tracker boundary 2026-10-23 19:08:37 -05:00
jason.woltje dd6cb5872b duckworth: row 324 round 1 approve (static) on dbdfcfd52, manifest 52874356 matches, every business.tracker reader handles absence, present null refuses, no @sync when absent, N1 doc (duckworth-0298)
(cherry picked from commit bd0fbdcf29fabec89338c5d49e6293b6d6ec8cc8)
2026-10-23 19:06:25 -05:00
jason.woltje 64ea540838 docs: DEFERRED B2-2 (run sheet proof format, ops-0282, mos-1557) and Sage session line; doc only
(cherry picked from commit 720b1fed89d0f278393435ef4ad63c529efff388)
2026-10-23 18:50:19 -05:00
jason.woltje 854b783cda queue: revs 3733-3765. Rows 298, 322, 321 landed in 3569bf54f and done (sage 3760-3765); 324 filed and briefed (sage 3755-3756), Goldie claim 3759. Sage 3733-3736 3738 3742 3748 3750-3753 3755-3756 3760-3765; boyd 3737 3739 3740 3757; goldie 3741 3743 3744 3749 3759; gladstone 3745-3747; dewey 3754; morgana 3758
(cherry picked from commit fb49fa63ef2f081b755a60bc4fa4b1f1d32046a7)
2026-10-23 18:50:05 -05:00
jason.woltje dbdfcfd52c docs: record row 324 rebased verification and mutant evidence 2026-10-23 18:44:35 -05:00
jason.woltje 7e59ba8b3d feat(business): allow businesses without a tracker (#1820) 2026-10-23 18:43:08 -05:00
jason.woltje 3569bf54f5 docs(row321): wait for loopback health before precheck (#1817, F11)
(cherry picked from commit 9aae73ade2)
2026-10-23 18:15:16 -05:00
jason.woltje 3fd5307e1e docs(row321): remove whitespace from the embedded diff receipt (#1817)
(cherry picked from commit d9400f0d36)
2026-10-23 18:15:16 -05:00
jason.woltje 5283d3745f docs(row321): set wrapper environment and explain first adoption (#1817)
(cherry picked from commit b5d4d79031)
2026-10-23 18:15:16 -05:00
jason.woltje 467b05fe2b fix(case2): import library personas from the pinned copy (#1818)
(cherry picked from commit 7b4ea42171)
2026-10-23 18:15:16 -05:00
jason.woltje dca5831e7e docs: brief for row 324, tracker optional in the business file (#1820, Q247, mos-1555, sage-3831); doc only
(cherry picked from commit f375f4e9253bb02642ee15c4099b208a4d235360)
2026-10-23 18:14:32 -05:00
jason.woltje 021422e921 docs: DEFERRED, ops-0275 O2 (writer.lock pid is the forked broker, by design) and O3 (npm 12 skips the three install scripts; refuse them in allowScripts at the next package.json row) (mos-1549); doc only
(cherry picked from commit da537e7d159be0bf39a36eaaa65cd16c20373b72)
2026-10-23 18:14:32 -05:00
jason.woltje 920b691263 docs: brief for the Case 1 factory business file for .53 (#1819, #414 stage 2, ops-0277, sage-3807); doc only
(cherry picked from commit 68f3bded561d3fc0c8a6055b2ed35e8fb87ee611)
2026-10-23 18:14:32 -05:00
jason.woltje 8d40ed20a8 docs: add F11 to the F7 brief (#1817): wait for the loopback healthz 200 before a precheck after unit start (ops-0275, mos-1549); doc only
(cherry picked from commit a9bae9af269c84a3bd6d37a38b64fe80d05590bb)
2026-10-23 18:14:31 -05:00
jason.woltje 860afc2b66 row 298: Untested rebase on 833ec1cc8; preserve row 239 writer lock and record conflicts (#1804) 2026-10-23 17:41:07 -05:00
jason.woltje cd366fc685 row 298: record Dewey clean final delta review; full gate pending (#1804) 2026-10-23 17:40:20 -05:00
jason.woltje 535b05adbf row 298: Untested full gate; targeted 29 pass and ten mutants killed, address review (#1804) 2026-10-23 17:40:20 -05:00
jason.woltje e3fb4e6c90 row 298: Untested scope evidence, exact commands, spent narrowing and CLI coverage (#1804) 2026-10-23 17:40:20 -05:00
jason.woltje 156e5c6040 row 298 (#1804): UNTESTED handoff to Boyd (mos-1502). launch.grantScope shape, fallback and match (vocabulary.mjs), the one writer (instance-settings grantScope), broker grants.scope/grants.scope.set gated by #human alone, in-scope close via 'scope' with grant.scope.used, scope-changed recheck, cli grants scope|scope set, business and bus tests. No node run; project-runtime.test.mjs import pin not yet updated; docs and BUILD.md not updated 2026-10-23 17:40:10 -05:00
jason.woltje 8b1a2b0fed row 298 (#1804): BUILD.md design D1-D6 and open questions Q1-Q6 for Sage; no code yet 2026-10-23 17:40:10 -05:00
jason.woltje 833ec1cc8d queue: revs 3718-3732: row 239 note, in-review and failed request (honker 3718-3720), request (sage 3721-3722), approve record (duckworth 3723), note and done (sage 3724-3725); rows 321 (#1817, F7 and F10, Gladstone, Boyd) and 322 (#1818, F8/F9, Goldie, Morgana) add, brief re-pin, piece and briefed (sage 3726-3732) 2026-10-23 17:38:11 -05:00
jason.woltje a147042103 docs: add F10 to the F7 brief (#1817): the run sheet's adopt step after a first install, and --no-rehearsal on the first upgrade after adopt (ops-0274, mos-1548); doc only 2026-10-23 17:31:54 -05:00
jason.woltje 062599252a docs: briefs for F7 (#1817, host run sheet wrapper step PATH and umask under sudo) and F8/F9 (#1818, case2-install.sh persona import from the copy and a refusal that keeps the error line); register the Codex builder seat Goldie for F8/F9 (mos-1542, mos-1544, mos-1546); doc only 2026-10-23 17:29:12 -05:00
jason.woltje aabaf97b60 duckworth: row 239 round 1 approve on r4 e0cb1db2c, replay exact, 16 paths equal r3, BUILD.md-only delta, pins match (duckworth-0295) (replayed onto e0cb1db2c by Sage) 2026-10-23 17:28:23 -05:00
jason.woltje e0cb1db2c8 row 239 (#1745) r4: BUILD.md: the replay onto 546366f4a and the sage-3773 slot run on 0cae2dad5: touched files whole 65/65, 9/9 mutants killed on their named tests, restores matched; no full gate (Sage at landing); doc only 2026-10-23 17:02:21 -05:00
jason.woltje 0cae2dad55 row 239 (#1745) r3: rebased onto refactor 93694c518; channel-proof keeps row 301's and row 239's comments and pins the merged webui bus.mjs at e3f52172; BUILD.md records the drift, the exact-once mutant check and sage-3730's run order; doc only beyond the rebase, untested 2026-10-23 17:00:42 -05:00
jason.woltje 4764bc9eb3 row 239 (#1745) r2: rebased onto refactor 94c33a43c after rows 253 and 275; BUILD.md records duckworth-0168, the N1 choice, the broker-only drift and the exact-once mutant check; doc only (sage-2906) 2026-10-23 17:00:42 -05:00
jason.woltje 712a084124 row 239 (#1745) b1: the fire's and the delete's revoke runs inside writer.write under the lock, after the revision check and the validations; an error after it carries revoked and the bus names it revision-conflict-revoked or outcome-unknown-revoked, with CLI, Console (OPEN, duckworth-0165 C1) and fire-notice texts; the mark sits in a catch around withLock (C2); tests T1-T6, channel-proof re-pins transport.mjs and webui bus.mjs; BUILD.md with mutants M1-M3g and the gate plan; untested, waits for a CLEAR (sage-2792) 2026-10-23 17:00:42 -05:00
jason.woltje cb3a456989 row 239 (#1745): design draft 1. beforeWrite runs inside writer.write under the lock after the revision and validation checks; a refusal after the revoke is marked and the bus names it revision-conflict-revoked or outcome-unknown-revoked, with CLI, Console and fire-notice texts; injected-writer fire test T1, T2-T6, mutants M1-M3e; Q1-Q3 for Duckworth; doc only (sage-2792) 2026-10-23 17:00:42 -05:00
jason.woltje 546366f4af docs: SESSIONS line for Sage's rows 220, 216 and 320 landings and queue-commit 604523b20 2026-10-23 16:58:38 -05:00
jason.woltje 604523b200 queue: revs 3678-3717: row 283 in-progress, in-review and failed request (honker 3678-3680), request (sage 3681-3682), approve record (webby 3683), note and done (sage 3684, 3686); rows 220 and 216 r5 moves and failed requests (researcher 3685, 3687-3691), requests (sage 3692-3695), approve records (filbert 3696-3697), notes and done (sage 3698-3701); row 320 (#1816) add and brief (sage 3702-3703), moves and failed requests (gladstone 3704-3706, 3710-3712), requests (sage 3707-3708, 3713-3714), CHANGES and APPROVE records (morgana 3709, 3715), note and done (sage 3716-3717)
Row 320 landed 094124b4e; rows 220 and 216 landed fbe57a05b; row 283 landed 93694c518.
2026-10-23 16:58:20 -05:00
jason.woltje 094124b4e8 docs: append the candidate's BUILD-LOG.md and SESSIONS.md lines at the current file ends (replay of faf55618e; those logs were excluded from the per-commit replay because their tails moved on refactor) 2026-10-23 16:37:24 -05:00
jason.woltje 5f4e578cf4 test(row320): reproduce an unsearchable inherited cwd and restore cleanup (#1816). Untested 2026-10-23 16:37:24 -05:00
jason.woltje fe2752954a docs(row 320, #1816): move Gladstone build receipt to queue path 2026-10-23 16:37:24 -05:00
jason.woltje 84530f6c5e docs(build): correct the citation receipt line count (#1816) 2026-10-23 16:37:24 -05:00
jason.woltje 86d8dbc035 docs(installer): cite the wrapper live-step gate (#1816, sage-3747) 2026-10-23 16:37:24 -05:00
jason.woltje ae3acc3bda docs(installer): add gated wrapper creation and private notify parent (#1816, Vikunja 614). Untested 2026-10-23 16:37:24 -05:00
jason.woltje 40501ab3e1 test(installer): add approved explicit notifier fixtures (#1816, mos-1537). Untested 2026-10-23 16:37:24 -05:00
jason.woltje ea4eaf388f fix(precheck): require the explicit notifier decision before host start (#1816, Vikunja 614). Untested 2026-10-23 16:37:24 -05:00
jason.woltje f9202a7701 fix(installer): allow scoped Claude paths and leave unreadable cwd (#1816, Vikunja 614). Untested 2026-10-23 16:37:24 -05:00
jason.woltje 689a0a3c91 fix(hostcheck): accept dpkg octal mode and verify bundles in scratch repos (#1816, Vikunja 614). Untested 2026-10-23 16:37:24 -05:00
jason.woltje 45e3ca7bdb docs: #1816 brief (Case 1/2 host fixes F1-F6 for the 433 P1 rerun, mos-1532/1534/1536/1537) and agents/gladstone/README.md registering the Codex builder seat; docs only 2026-10-23 16:13:48 -05:00
jason.woltje 582b86935a docs: SESSIONS line for Filbert's rows 220 and 216 round 2 verdicts (Filbert ddf73fe03, replayed onto the 220+216 landing tip) 2026-10-23 16:09:04 -05:00
jason.woltje fbe57a05b1 researcher: row 216 r5, index-build test makes Book One/Places before the write and query test lists the hybrid paths in sorted order (mos-1528, sage-3702); tests only, BUILD.md round 4 2026-10-23 15:40:52 -05:00
jason.woltje b64e681edf row 216 (C2-05a, #1717) r4: BUILD.md records the rebase onto 45dca69f6 (range-diff =), the drift check against 48e450ce8..45dca69f6 and the hash-pin grep with a positive control; doc only (sage-3576) 2026-10-23 15:40:52 -05:00
jason.woltje 2cc076fec5 row 216 (C2-05a, #1717): library index cache and lookup queries find, get, search, manuscript, universeInfo; get pages links, manuscript takes no chapter, search marks a too-long line, PRD 1.14 levels (rulings da9555ca2); unrun 2026-10-23 15:40:52 -05:00
jason.woltje 8e2885d265 researcher: row 220 r5, new library-seats test where lstat fails with ENOTDIR (a config directory under a regular file) kills M8-e; BUILD.md corrects the M8-e kill claim (sage-3715); test only 2026-10-23 15:40:52 -05:00
jason.woltje 63b9c64431 researcher: row 220 r5 R2 (mos-1528, option A), the F16 catalogue spy returns a listing and a new route test pins the refusal status of a refusing listing; test only, BUILD.md round 5 2026-10-23 15:40:52 -05:00
jason.woltje 6b8743c857 researcher: row 220 r5 R1, the library-seats unreadable-file test restores the file mode without failing when the fixture already removed it (mos-1528, sage-3712); test only 2026-10-23 15:40:52 -05:00
jason.woltje fc858800bf row 220 (C2-10a, #1721) r4: BUILD.md records the rebase onto 45dca69f6 (range-diff all =), the drift check against 48e450ce8..45dca69f6 and the discord helpers gate addition; doc only (sage-3576) 2026-10-23 15:40:52 -05:00
jason.woltje 303216ae25 row 220 (C2-10a, #1721) r2e: BUILD.md corrects the heading times of rounds 2b-2d from the commit clock; doc only 2026-10-23 15:40:52 -05:00
jason.woltje ccfb8308bc row 220 (C2-10a, #1721) r2d: BUILD.md closes the listRoots Refusal question with file:line (rootsFromSpecs, loadRegistrations, readRegistration, samePath, toTime throw no Refusal), so /api/conversations has no status change beyond the business refusal; doc only (sage-2730) 2026-10-23 15:40:52 -05:00
jason.woltje 04f3dc4f5f row 220 (C2-10a, #1721) r2c: BUILD.md corrects the refusalResponse statement from the serve.mjs and reader.mjs diffs against aca16404c (catalogue is now wrapped in refuse(), listRoots Refusal throws unchecked) and names the controller.mjs:176 follow-up; doc only (sage-2729) 2026-10-23 15:40:52 -05:00
jason.woltje 4310555874 row 220 (C2-10a, #1721) r2b: M8 run refusal tests, default-reader M7 test, configDirectory fixture scope; BUILD.md round 2b lists mutants M7-w, M7-c, M7-o, M8-p, M8-e and states no existing route's status or body changes with refusalResponse; unrun (sage-2719, filbert-220-early) 2026-10-23 15:40:52 -05:00
jason.woltje 45788f92c1 row 220 (C2-10a, #1721): M7 hides a creative seat's sessions from the conversation reader, M8 refuses a raw engine on a library seat in discord check and run; library-seats helper in packages/business (rulings da9555ca2); unrun 2026-10-23 15:40:52 -05:00
jason.woltje 93694c5185 deferred: row 283 Webby N1, SURVEY-RUN.md:96 shows the scopes line without supporting; bound to the next docs commit on that file (webby-0267, #1788); docs only 2026-10-23 15:38:05 -05:00
jason.woltje 8d2856ee3c row 283 (#1788): BUILD.md: G1 per sage-3713: mos-1528 OKs the mapping.test.mjs:52 draft deepEqual gaining supporting: [] (old :48 at 45dca69f6, new :52), recorded as an append that completes BUILD.md:42; doc only 2026-10-23 15:17:26 -05:00
jason.woltje 252b29bd8c row 283 (#1788): BUILD.md: T2 receipts on c18ad3e12 (sage-3695): base 16+6+6+7 library and 21 business green, 14/14 mutants killed on their named tests, library 98/98 and business 231/231; the mos-1272 first-run red and its test-helper fix; doc only 2026-10-23 15:17:26 -05:00
jason.woltje 54d9e07bb7 row 283 (#1788): mos-1272 first-run red: supporting.test's refuses() labelled each assertion with JSON.stringify(path), which throws on the 1n case added for E3; it now uses util.inspect. Test helper only 2026-10-23 15:17:25 -05:00
jason.woltje de6419f30f row 283 (#1788): sage-2925/sage-3649: optional editor.user (her Gitea login for library-human, read by row 288), checked with USER as the entry user is, kept in the output only when given; T3 accepted and refused cases; README; mutants M6e/M6f; BUILD.md records the departure from DESIGN.md section 1. Untested 2026-10-23 15:17:25 -05:00
jason.woltje 9ed0f3374a row 283 (#1788): webby-0236 E5: the git round-trip test drops GIT_DIR, GIT_WORK_TREE, GIT_COMMON_DIR and GIT_INDEX_FILE and reads no global or system config (repo convention); BUILD.md records E5. Untested 2026-10-23 15:17:25 -05:00
jason.woltje efcd3f0fc4 row 283 (#1788): E4 per sage-3606: editor values starting or ending with git's crud() set (bytes <= 0x20 and , : ; < > " \ ') refuse library-mapping-invalid; T3 cases per character and key, inner chars pinned, git round-trip test; mutants M6c/M6d; BUILD.md cites crud() and records the claim (rev 3642). Untested 2026-10-23 15:17:25 -05:00
jason.woltje b358427677 row 283 (#1788): E2 per sage-3601: editor values with surrounding whitespace refuse library-mapping-invalid (git trims idents at commit); T3 padded cases per key, mutant M6c; BUILD.md records the departure from DESIGN.md section 1 and the fixture grep (none). Untested 2026-10-23 15:17:25 -05:00
jason.woltje 675813594f row 283 (#1788): webby-0227 E3: supportingPath checks the type before stringifying, so a non-string path refuses library-write-story-path; string case covers 7, null, undefined, 1n and an array; BUILD.md records E1-E3, E2 to Sage. Untested 2026-10-23 15:17:25 -05:00
jason.woltje 3f1aa76b03 row 283 (#1788): BUILD.md: drift check, N3 grep, mos-1330 :73 old and new text, Q2 tradeoff, Q4 handoff to row 288 via #1793 c30738, mutants M1-M8 exact strings, gate plan; doc only 2026-10-23 15:17:25 -05:00
jason.woltje bcd1f34c2d row 283 (#1788): survey.test:73 re-pin under mos-1330 item 4. The scopes line gains only supporting 0; old 'scopes canon 5, playground 1, unmapped 3; indexed 6', new 'scopes canon 5, playground 1, supporting 0, unmapped 3; indexed 6' 2026-10-23 15:17:25 -05:00
jason.woltje c87ddc6041 row 283 (#1788): C2-01d supporting folders. supporting lists on every universe kind with the playground's prefix rules, library-supporting-other-universe and the cross-list rules; optional editor {name, email} refusing controls, < and >; classify checks supporting before playground; supportingPath with the eight checks over the listTree array, exported; survey counts supporting (sage-2923); README; tests T1-T8. Untested: runs wait for Sage's CLEAR 2026-10-23 15:17:25 -05:00
jason.woltje ce4040542f row 283 (#1788): design draft 2 folds webby-0169 R1 (editor refuses < and >, T3, M6b) and N1 (check 8 compares NFC and case, NFD case in T6, M4b); Q2-Q4 accepted, Q4 handoff to C2-02 in BUILD.md; doc only 2026-10-23 15:17:25 -05:00
jason.woltje f2f76fd2c3 row 283 (#1788): design draft 1. supporting lists with the playground's prefix rules and library-supporting-other-universe, cross-list rules, the optional editor, supporting first in classify, supportingPath over the listTree array; survey.mjs departure Q1 for Sage, Q2-Q5 for Webby; doc only (sage-2906) 2026-10-23 15:17:25 -05:00
jason.woltje 59226f878f queue: revs 3637-3677: row 226 in-review and failed request (gosalyn 3637-3638), request (sage 3639-3640), approve record (webby 3641), landing note and done (sage 3665-3666); row 283 in-progress (honker 3642), E1 note, in-review and failed request (honker 3671-3673), request (sage 3674-3675, comment 31337), approve record (webby 3677); owner assigns 217 225 298 296 297 288 227 (sage 3643-3649); 225 and 217 after sets, 288 note (sage 3650-3652); row 227 in-progress (gizmoduck 3653); rows 220 and 216 in-progress, in-review and failed requests (researcher 3654-3659), requests (sage 3661-3664, comments 31321 31322); row 298 in-progress (boyd 3660), in-review and failed request (boyd 3667-3668), request (sage 3669-3670, comment 31336); row 319 GitHub consumer added (sage 3676, mos-1525) 2026-10-23 15:16:03 -05:00
jason.woltje f67e5c15c5 docs: brief for the GitHub consumer of row 297's protected githubWithToken callback, honoring expiry and cancellation, post-10-27 (mos-1525, #1803); docs only 2026-10-23 15:10:34 -05:00
jason.woltje e2b8733904 deferred: row 226 Webby N1-N4 (install id regex, first-run refusal leftovers, clone sha on the run sheet, library-status lock wait), webby-0225, #1727 2026-10-23 14:42:22 -05:00
jason.woltje fd3d2a99fe docs: host run sheet section 2 verifies Node's SHASUMS256.txt with the detached SHASUMS256.txt.sig, not the clearsigned .asc (Vikunja 611, ops-0243, mos-1514, mos-1515); docs only 2026-10-23 14:41:39 -05:00
jason.woltje 661890e909 gosalyn: row 226 C2-13b build, case2-install.sh writes the business file and personas through a plan step before any write, case2-precheck.sh adds the D6a mode, persona and Discord checks and --library-status with lastError first and the wider escape, case2-install.test.mjs, run sheet lines; candidate before the gate (webby-0087 N2 N3, sage-2195, sage-2205, #1727) 2026-10-23 14:41:39 -05:00
jason.woltje 3046fd60a3 gosalyn: row 226 C2-13b design d2, release package and activate dropped, precheck split into pre-start checks and --library-status after the bus is up, Webby's N1-N6 taken in, design 10 text change listed (webby-0085, webby-0086, sage-2189, #1727) 2026-10-23 14:41:39 -05:00
jason.woltje b97f9df1ee gosalyn: row 226 C2-13b design d1, the business file as an input, install steps, persona staging before 2b, re-run rules, precheck library checks and tests, Q1-Q3 for review (#1727) 2026-10-23 14:41:39 -05:00
jason.woltje 8352da88c5 agents: register Beakley, Fethry, Boyd, Lena, Violet and Bubba as seats so the queue can name them as row owners (Q245, mos-1506) 2026-10-23 14:18:27 -05:00
jason.woltje 45dca69f6e sessions: Sage 10-23 Vikunja 571 W rows 309-318 filed, 571 done 2026-10-23 13:19:06 -05:00
jason.woltje 293b42fee9 queue: revs 3617-3636: Vikunja 571 W build rows 309-318 added (sage 3617-3626: W1, W2, W3a, W3b, W6, W3, W4b, W5, W7, W8, post-10-27, brief docs/plans/2026-10-21_q195-writing-editor.md) and owners set to unassigned (sage 3627-3636) 2026-10-23 13:16:56 -05:00
jason.woltje 369607e92d sessions: Sage 10-23 rows 308 and 252 landings, 571 Connections design amendment, Vikunja 597; Scrooge row 252 line 2026-10-23 12:51:36 -05:00
jason.woltje 59f013247c queue: revs 3589-3616: row 306 in-progress, in-review and failed request (morgana 3589, 3592-3593), request (sage 3594-3595, comment 31207), approve record (dewey 3596), note and done (sage 3599-3600); row 308 added and briefed (sage 3590-3591), claim, in-review and failed request (gosalyn 3601-3603), request (sage 3604-3605, comment 31223), approve record (webby 3606, comment 31224), note and done (sage 3613-3614, landed 30e6bb680); row 291 note and done (sage 3597-3598); row 252 issue #1753 (sage 3607), in-review and failed request (scrooge 3608-3609), request (sage 3610-3611, comment 31230), approve record (webby 3612, comment 31229), note and done (sage 3615-3616, landed 45ea3fa0d) 2026-10-23 12:51:27 -05:00
jason.woltje e8bb13df84 docs: clarify Connections opening order and current-link filtering 2026-10-23 12:47:20 -05:00
jason.woltje dba2ebdb85 docs: plan required Console Connections view before real import 2026-10-23 12:47:19 -05:00
jason.woltje 45ea3fa0d2 row 252: library-cli and thread-claims bus.mjs stubs gain the throwing consoleCall export cli.mjs now imports (Mos GO mos-1465 under mos-1272, via sage-3497) 2026-10-23 12:25:40 -05:00
jason.woltje f69c962009 row 252: decide-sso J19 killer (a granted user's config says decide false, its decision POSTs stop at owner-only), J16 checks the config that starts without send; BUILD.md rulings, J11c and J18 equivalence, part 2 mutants (#1753) 2026-10-23 12:25:40 -05:00
jason.woltje 5b6c878143 row 252: decide-browser placements (mos-1272): the hostile grant goes in with its INSERT since decisions is append-only, and page() loads about:blank first so a same-URL visit reloads 2026-10-23 12:25:40 -05:00
jason.woltje 8c2c5303cf row 252: access-boot fixture provider gains issuer https://idp.test, so consoleOwners can key the owner (Mos GO mos-1464 under mos-1272, via sage-3494) 2026-10-23 12:25:40 -05:00
jason.woltje 23e3d09fa9 row 252: decide-sso first-run reds placed (mos-1272): a decision transport without --send never starts, and a POST to /api/bus/decision.* meets row 74's read-only refusal; BUILD.md run notes (#1753) 2026-10-23 12:25:40 -05:00
jason.woltje 795a645e65 row 252: console-decide events() keeps the row kind as event, since an answer body's kind shadowed it (first-run red at :180, two vacuous zero counts), and a J7 killer test for the console cap release over the socket (#1753) 2026-10-23 12:25:40 -05:00
jason.woltje 076ca8d6e4 row 252 BUILD.md: rebase onto fe4ee8c7b, commit map and the six conflict resolutions (sage-3482) 2026-10-23 12:25:40 -05:00
jason.woltje 68be863248 row 252: mos-1321, reword the shell.test write-boundary comment so Approve and Deny is the one decision control; BUILD.md records the ruling and its channel-proof review condition 2026-10-23 12:25:40 -05:00
jason.woltje 264fad2e26 row 252 BUILD.md: channel-proof overlap with row 239 (sage-2835) 2026-10-23 12:25:40 -05:00
jason.woltje 24672fd9d6 row 252: Console inbox Approve and Deny for grant requests, human-only through a console owner proof, confirmation then resolve, via console with human.input before the executor (#1753, Webby N1-N5); tests not yet run 2026-10-23 12:25:39 -05:00
jason.woltje 30e6bb6803 gosalyn: PRD 1.17, Case 2 story files are DOCX (row 308, sage-3516, Q235 to Q237, Q239). Applies the approved d9 text at 4607e15b8 word for word to the 1.16 text. Status, the header sentence and a 1.17 source line, the Creative library lead, REQ-LIB-1, -2, -4, -5 and -6 changed as d9 says, new REQ-LIB-8 for the writing store and REQ-LIB-9 for the Console's DOCX editor, the 1.17 notes and four risks. requirements.json goes to 1.17 with 87 ids and the d9 titles, and the tasks and bus test pins follow 2026-10-23 12:20:30 -05:00
jason.woltje 7defb58e97 sessions: Sage 10-23 rows 291 and 306 landings, row 308 launch 2026-10-23 11:37:34 -05:00
jason.woltje 9c8877bdf3 plans: DEFERRED row 306 N1 (revoke Set lost on broker restart) and N2 (pending limit stop answers not-holder first), landed 2d0318a44 (mos-1463) 2026-10-23 11:35:21 -05:00
jason.woltje 2d0318a44a morgana: row 306 build (#1813): #accessRevoked from #revokeLost, #agent answers thread-revoked until endLaunch, runner stops on thread-revoked, READMEs, access-revoke.test 7 7 (mos-1463) 2026-10-23 11:33:17 -05:00
jason.woltje bd3fa2a484 morgana: row 306 red-first tests (#1813): bus revoke-window T1/T2, cli revoke-window T3 forcing test; no product code 2026-10-23 11:33:17 -05:00
jason.woltje ab575ee553 morgana: row 306 design r2 (dewey-0918 C1-C3, sage-3483/mos-1463): T3 asserts no thread-revoked event for A, T2 limit half makes a second call, six-suite gate, access-revoke edit bounded to 7 7 2026-10-23 11:33:17 -05:00
jason.woltje 1676ad0de8 morgana: row 306 design r1 (#1813, sage-3478): #accessRevoked set from #revokeLost, #agent answers thread-revoked until endLaunch, runner maps it to stopped; T1-T3, M1-M3, six access-revoke asserts to Mos via Sage 2026-10-23 11:33:17 -05:00
jason.woltje 4874d1e83a gosalyn: PRD 1.16 routes library.write under REQ-LIB-6 (mos-1328, mos-1329, sage-2919, webby-0164 B2). REQ-WAIT-3 gains the routing paragraph with its bounds, creative roles only and within-role, Markdown under supporting folders a human marks, never a story file, the writing agent's live Gitea grant on the library project, one commit per write by its own account with the trailer, notice and revert. REQ-LIB-6 names the action. Status, the header, a 1.16 source line and a 1.16 note. requirements.json changes its version only, with the test pin 2026-10-23 11:15:49 -05:00
jason.woltje e909ef51a2 plans: PRD 1.17 brief (Gitea #1815, Vikunja 570): Gosalyn builds d9 4607e15b8 onto 1.16 after row 291, Webby reviews, four files, Sage gates 2026-10-23 10:44:58 -05:00
jason.woltje 4607e15b83 sage: PRD 1.17 d9 r3 (02f28dec), Mos's J-b check mos-1470: J-b records N20 as confirmed, REQ-LIB-5's version tag cites Q239 for the Connections view (N21), d9 changes names both 2026-10-23 10:41:08 -05:00
jason.woltje 8b42010551 sage: PRD 1.17 d9 round 2 (b17ce386), Webby round 6 B1: REQ-LIB-5, its note, the Risks line and the A6 line take mos-1443 R3's text as written; J-b in the past tense (N19); the import-waits line cited as Mos's R3 default (N20) 2026-10-23 10:36:16 -05:00
jason.woltje 4863e2caf4 sage: PRD 1.17 draft 9 (7dfc52fd), d8 plus Jason's Q41 O2 (Q239, mos-1467): REQ-LIB-5 requires the Console Connections view for converted chapters, note and Risks line follow, J-b records the answer; Webby round 5 N15-N17 2026-10-23 10:25:37 -05:00
jason.woltje 7b25a60633 agents: webui runs set MOSAIC_REQUIRE_EDITOR_BUILD=1 and linked worktrees npm ci packages/webui (Vikunja 597) 2026-10-23 10:01:25 -05:00
jason.woltje e86df37d76 sessions: Sage 272 and 307 landings, 306 design, 252 rebase check 2026-10-23 09:59:29 -05:00
jason.woltje fe4ee8c7b5 queue: revs 3582-3588: row 307 in-review and failed request (gizmoduck 3582-3583), request (sage 3584-3585, comment 31189), round 1 approve record (duckworth 3586), landing note and done at d243f6b25 (sage 3587-3588); queue only 2026-10-23 09:42:05 -05:00
jason.woltje 0621c439e0 plans: DEFERRED gains row 307 N1 (row 270's store-unreadable doesn't stick; #1814 landed d243f6b25) 2026-10-23 09:40:06 -05:00
jason.woltje d243f6b25f gizmoduck: row 307 run logs: capture.mjs makes each fixture's data root before sessionStore (base session.mjs:78 needs it), BUILD.md expected red adds claude-history test B (duckworth-0287), steps 1-6 results on 1f6db1589 and 1f00d4f91 with skips named and M1-M4 killed (sage-3455, sage-3465) 2026-10-23 09:37:50 -05:00
jason.woltje 869670d1b1 gizmoduck: row 307 BUILD.md: commits, old-test edits against mos-1459, new tests and the empty-session correction to test B, expected red on 1f6db1589, run plan with mos-1275 limits, mutants M1-M4 2026-10-23 09:37:50 -05:00
jason.woltje dbbda25373 gizmoduck: row 307 (#1814, Vikunja 598) harness kind gains compactions: pi's stream scan and Claude-history check move to packages/plugins/harness/pi/compactions.mjs, claude-code answers harness-unsupported, core keeps the ledger and checks each answer, readLedger reads the reason only, the launcher passes the loaded module; four old-test edits under mos-1459 2026-10-23 09:37:50 -05:00
jason.woltje a9da046f83 gizmoduck: row 307 (#1814, Vikunja 598) new tests, red first: row 270's ledgers per reason read the same count and the next collection goes through the harness module, core refuses an answer out of contract, pi answers what base scanPi read, claude-code answers harness-unsupported, a module without compactions refuses missing-export; capture.mjs checks the literals against base 1e629c892 2026-10-23 09:37:49 -05:00
jason.woltje 4a71b56abc gizmoduck: row 307 design r1 notes: seat suite whole and compactions-launch T3 run-not-skip in the gate (Duckworth C1, C2), launcher closure comment on bypassing call() (N1), line refs :301 and :302 (N2) (duckworth-0280) 2026-10-23 09:37:49 -05:00
jason.woltje 5208894196 gizmoduck: row 307 (#1814, Vikunja 598) design: harness export compactions({ store, cursors, budget, streams, first }), interfaceVersion stays 1, core keeps the ledger, readLedger reads the reason, ledger compatibility table, four old-test edits for Mos (sage-3440) 2026-10-23 09:37:49 -05:00
jason.woltje 8dc132bec8 queue: revs 3572-3581: row 272 round 3 approve record (scrooge 3572, comment 31177), row 307 claim (gizmoduck 3573), row 272 round 4 moves (huey 3574-3576), request (sage 3577-3578, comment 31183), round 4 approve record (scrooge 3579, comment 31184), landing note and done at d33989230 (sage 3580-3581); queue only 2026-10-23 08:58:25 -05:00
jason.woltje 08b8831bce plans: DEFERRED gains row 272 N1 (user session verbs) and the row 270 N6 rebound after row 307 (#1777 landed d33989230) 2026-10-23 08:56:47 -05:00
jason.woltje d339892301 row 272: scope unavailable-session waits to the chat area 2026-10-23 08:53:07 -05:00
jason.woltje 0ea3db297b row 272: fix session fixture authority and initial chat render 2026-10-23 08:53:07 -05:00
jason.woltje f859d06d20 row 272: preserve granted-user default chat on denied session catalog 2026-10-23 08:53:07 -05:00
jason.woltje 70651f45d8 row 272: retain session recovery state on invalid selection 2026-10-23 08:53:07 -05:00
jason.woltje 490f45f024 row 272: preserve untested session CLI and Console draft (sage-3145) 2026-10-23 08:53:07 -05:00
jason.woltje 1e629c892d queue: revs 3565-3571: row 272 round 3 moves on 72690cae7 (huey 3565-3567) and request (sage 3569-3570, comment 31174); row 307 added and briefed (#1814, Vikunja 598, mos-1455 item 3; sage 3568, 3571); queue only 2026-10-23 08:08:15 -05:00
jason.woltje 84de3fbca3 plans: row 270 pi compaction reading moves behind the harness kind (#1814, Vikunja 598, mos-1455 item 3, Gizmoduck, reviewer Duckworth); gate template runs all five suites and sets MOSAIC_REQUIRE_EDITOR_BUILD=1 (mos-1455 item 4, mos-1453) 2026-10-23 08:02:15 -05:00
jason.woltje 1e4c1e6e94 queue: revs 3539-3564: rows 300 and 301 round 1 claims and in-review moves (launchpad 3539-3544), round 1 requests (sage 3545-3548), round 2 moves (launchpad 3549-3554), round 2 requests (sage 3555-3558), Duckworth approve records 300 (3559) and 301 (3560), landing notes and done at 07315e651 and 5b846b048 (sage 3561-3564); queue only 2026-10-23 07:33:26 -05:00
jason.woltje 5b846b048a launchpad: row 301 (#1808): library-cli and thread-claims bus.mjs fixtures export throwing busBusiness and userCaller stubs (mos-1451 under mos-1272); BUILD.md repaired with run 1 and the ruling; manifest seven paths; unrun 2026-10-23 07:26:44 -05:00
jason.woltje 59f0e44f47 launchpad: row 301 (#1808): channel-proof re-pins webui bus.mjs at 39fcb27c for the user transport fold, humanCall unchanged (mos-1449 under mos-1272); unrun 2026-10-23 07:26:44 -05:00
jason.woltje bb031ec840 launchpad: row 301 (#1808): R6-N4, user-bus.mjs folded into bus.mjs beside humanCall, unchanged; channel-proof re-pin held for Mos's go; unrun 2026-10-23 07:26:44 -05:00
jason.woltje 07315e6514 launchpad: row 300 (#1807): run 1 gate results in BUILD.md (1/0, webui 375/0, M12 killed) and Duckworth's N1; packet only 2026-10-23 07:26:44 -05:00
jason.woltje fb04cbc431 launchpad: row 300 (#1807): run 1 first-run red placed (mos-1272), the test's call helper resolves headers again as granted-user.test does; manifest re-hashed 2026-10-23 07:26:44 -05:00
jason.woltje 9d929911c8 launchpad: row 300 (#1807): R6-N1, an HTTP-level test of the user-session option swap with the userRoute gate stubbed open by a load hook, and mutant M12; unrun 2026-10-23 07:26:44 -05:00
jason.woltje bcf3c1dacf queue: revs 3531-3538: row 303 landing note and done at e551cd846 (sage 3531/3532); row 304 approve record (dewey 3533), row 305 approve record (filbert 3534); row 304 landing note and done at a863015a5 (sage 3535/3536); row 305 landing note and done at d52d9f1f2 (sage 3537/3538); queue only 2026-10-23 06:54:46 -05:00
jason.woltje d52d9f1f2f row 305 (#1812): gate run 1 evidence (sage-3374): both suites green, mutants a and b killed in both, c a known survivor 2026-10-23 06:49:49 -05:00
jason.woltje 830f3d8bff row 305 (#1812): BUILD.md notes the SIGKILL leak and its cleanup (Filbert N1) 2026-10-23 06:49:49 -05:00
jason.woltje e48d602165 row 305 (#1812): BUILD.md with the trace, change, gate and the three mos-1445 mutants 2026-10-23 06:49:49 -05:00
jason.woltje cabcb81d49 row 305 (#1812): each suite's network check also requires the network present under the run's project before the remove (mos-1445) 2026-10-23 06:49:49 -05:00
jason.woltje 353d65f577 row 305 (#1812, Vikunja 591) draft: per-run COMPOSE_PROJECT_NAME, exit trap removes that one network, one absent-network check per suite; for Mos through Sage before the build (mos-1272) 2026-10-23 06:49:49 -05:00
jason.woltje 2c289f6f0d SESSIONS: filbert row 305 round 1 approve (c31127, rev 3534) 2026-10-23 06:47:32 -05:00
Rocko a863015a51 test: match Claude memory slug normalization under mos-1442 2026-10-23 06:46:02 -05:00
jason.woltje e551cd8466 launchpad: row 303 (#1810): R9 asserts the rehearsal directory is set before the placeholders check joins it, so a null shows the rehearsal output (mos-1422, Vikunja 589) 2026-10-23 06:41:07 -05:00
jason.woltje c13c337e16 queue: revs 3521-3530: rows 304 and 305 claimed (rocko 3521, gizmoduck 3522); row 305 in-review on 7e8218a2e (gizmoduck 3523), request failed without a token (gizmoduck 3524), sage's request posted c31126 (3525/3526); row 304 in-review on 5e8354ebb (rocko 3527), request failed without a token (rocko 3528), sage's request posted c31128 (3529/3530); queue only 2026-10-23 06:27:36 -05:00
jason.woltje 435a7458d3 sage: PRD 1.17 draft 8 (343cff6f), d7 plus Mos's d8 fix list mos-1443 (R1-R14, M1-M45, J-i to J-l) and the mos-1446 choices (M10 default, M15 quotes Q235 in full, M40 both sentences); M15 and M16 cite b99ca86b9. Webby APPROVE round 5 webby-0210, no B items; N15-N17 carry to d9 2026-10-23 06:21:31 -05:00
jason.woltje b99ca86b9c docs: align editor conversion boundary and host restore with PRD d8 2026-10-23 06:08:20 -05:00
jason.woltje 0e057e05eb queue: revs 3511-3520: rows 304, 305 and 306 added and briefed (sage 3511-3516); row 272 round 2 in-review on b44332a93 (huey 3517), request failed without a token (huey 3518), sage's request posted c31120 (3519/3520); queue only (sage) 2026-10-23 06:02:42 -05:00
jason.woltje c16e943b90 briefs: mos-1442 approvals for the 590 and 591 rows (#1811, #1812), the 295 N1 revoke-window row (#1813); DEFERRED 295 N1 (sage) 2026-10-23 05:51:16 -05:00
jason.woltje ac1644e1ce BUILD-LOG and SESSIONS: rows 302, 295 and 219 landings, the Docker pool diagnostic; DEFERRED 219 N1 (U6); brief for the Vikunja 590 and 591 rows (sage) 2026-10-23 05:48:40 -05:00
jason.woltje 90633c8648 queue: revs 3495-3509: row 295 round 2 in-progress and in-review (morgana 3495-3497), sage's request posted (3498/3499), dewey approve record (3500), row 295 landing note and done at 2efd127ce (sage 3501/3502); row 219 in-review on b899095e4 (rocko 3503/3504, request failed without a token), sage's request posted c31107 (3505/3506), dewey approve record c31108 (3507), row 219 landing note and done at 5fdfd7275 (sage 3508/3509); queue only 2026-10-23 05:45:46 -05:00
Rocko 5fdfd7275c docs: preserve row 219 full gate on the post-295 merge 2026-10-23 05:37:44 -05:00
Rocko a236dbc30a docs: preserve row 219 mos-1429 short-run evidence 2026-10-23 05:37:44 -05:00
Rocko 312260db7b test: prepare row 219 admission pins under mos-1429 2026-10-23 05:37:43 -05:00
Rocko d7b4967ed0 docs: record row 219 rebase after granted-user Console 2026-10-23 05:37:43 -05:00
Rocko 90a3c03cfb test: assert creative history in its native session store
Apply only the paths and legacy absence pins approved by mos-1420 and sage-3243. Preserve exact expected history and the stopped run evidence. No product change or rerun.
2026-10-23 05:37:43 -05:00
Rocko 282f5b4e45 test: pin the compaction audit before the persona refusal
Apply the exact two-row fixture assertion approved by mos-1418 and sage-3232. Preserve earlier red logs; no product change and no rerun before review.
2026-10-23 05:37:43 -05:00
Rocko 781fd509c4 test: give row 219 persona fixture its explicit session
Apply mos-1408 and sage-3178 without creating the directory being asserted. Preserve the first red evidence and select TAP explicitly for the next approved run.
2026-10-23 05:37:43 -05:00
Rocko 52a73e83bd docs: rebase row 219 gate packet and record run bounds 2026-10-23 05:37:43 -05:00
Rocko 049214486b wip: publish unverified row 219 inspection candidate
Preserve the draft for inspection under sage-3113. Tests and mutants have not run. Old-test adaptations approved in mos-1316 and mos-1317 are recorded in OLD-TEST-CHANGES.md.
2026-10-23 05:37:43 -05:00
jason.woltje 2efd127ce6 morgana: row 295 r2 gate results on d68b4300d (sage-3338, sage-3340): red first, green, M8 count, whole files, suites, script limits and skips, M1-M16 killed 2026-10-23 05:06:14 -05:00
jason.woltje fdbe95d88d morgana: row 295 r2 narrow alice grant (Dewey F1, sage-3333): aliceAccess(ref) names only the test's project, set after project.create; asserts and bindLaunch lines byte-identical; BUILD.md preservation record updated 2026-10-23 05:06:14 -05:00
jason.woltje cb96220b53 morgana: row 295 r2 old-test setup (mos-1436 option a): message-filter's :117 and governance-pin tests get an alice collaborator access document, spec-fixtures fixture() takes an optional access (null default); asserts and bindLaunch lines byte-identical; BUILD.md gate record, assertion preservation, N1 revoke window 2026-10-23 05:06:14 -05:00
jason.woltje 6408dcec4f morgana: row 295 r2 first-run reds placed (mos-1272): claim rows spread off the store's null prototype in access-revoke and thread-revoke, demo switches the pi harness on for startBroker, Alice binds at her first call in thread-revoke 2026-10-23 05:06:14 -05:00
jason.woltje 0c8f12ea20 morgana: row 295 r2 rebase on 80793d824 (sage-3256): accessFor comment is stamp-cached (dewey-0871 N3); BUILD.md rebase note 2026-10-23 05:06:14 -05:00
jason.woltje 24f8f5d739 morgana: row 295 r2: wrap the launcher's revoked comment (dewey-0874 nit) 2026-10-23 05:06:14 -05:00
jason.woltje 31da9dcb85 morgana: row 295 r2 (dewey-0871): threadsState ends an expired grant's held claim from the cached read by access-expiry (B1, D7, M16, M11 claim row); access.reload scope as D8 (N1); bus README access.reload, revoked and revocation (N2); tests unrun 2026-10-23 05:06:14 -05:00
jason.woltje ff54a15563 morgana: row 295 FED R4 revocation (#1801): 30 s access timer, access.reload, one-transaction claim end on a loss, threadsState revoked, launcher SIGTERM and no start, CLI reload after grant/revoke; tests unrun (no CLEAR yet) 2026-10-23 05:06:14 -05:00
jason.woltje 249d42dfc5 morgana: row 295 plan (FED R4 revocation, #1801): sweep on timer, access.reload and user requests; threadsState revoked; launcher skip and SIGTERM; bindLaunch and role.claim refuse thread-revoked 2026-10-23 05:06:14 -05:00
jason.woltje 07802dc57a queue: revs 3488-3494: row 302 (#1809) in-review on 2a8281a6f (gizmoduck 3488), gizmoduck's request failed without a token (3489), sage's request posted c31091 (3490/3491), dewey approve record c31092 (3492); row 302 landing note and done move at 3ed9fd754 (sage 3493/3494); queue only 2026-10-23 03:53:06 -05:00
jason.woltje 3ed9fd754a gizmoduck: row 302 (#1809) gate results: run 1 stopped on launcher-released.test:89 (d6, mos-1430); run 2 on merge 783602e06 (5b63ea323 onto 1ac655005) red as ruled, suites green, M1-M5 M7-M9 killed; RESULTS.md and logs, packet only 2026-10-23 03:47:38 -05:00
jason.woltje c9fcf9b5af gizmoduck: row 302 (#1809) d6: launcher-released.test:89 counts only a-run's delivery rows and pins the one routed row with holder_run null; #route writes that row for every message (gizmoduck-0388, sage-3294, sage-3296, Mos ruling pending sage-3293); local, not pushed 2026-10-23 03:47:38 -05:00
jason.woltje 2b6111a176 row 302 (#1809, Vikunja 588): a run threadIdle or landRelease released answers launcher-released on every call needing the claim until it ends, role.claim refuses it (Dewey D1), and the runner exits stopped without releasing again 2026-10-23 03:47:38 -05:00
jason.woltje 4a827edb0c row 302 (#1809, Vikunja 588): red first, the final forcing tests and the four pins Mos ruled (mos-1414/1415/1416), over unfixed product files; BUILD.md d3-d5 and ASSERTION-PRESERVATION 2026-10-23 03:47:38 -05:00
jason.woltje 908f92b039 gizmoduck: row 302 design d2: threads.test pins are :392/:394/:395 (sage-3204), land-relaunch grep finds land.test:464 as a third old pin under Q1 2026-10-23 03:47:38 -05:00
jason.woltje 62470a3ec3 gizmoduck: row 302 BUILD.md folds Dewey's d1 approval (dewey-0875): D1 role.claim refuses a released run, landRelease reaches runner.test:742-772 so Q1 moves :771-772, Q2-Q4 and N1-N4 settled 2026-10-23 03:47:38 -05:00
jason.woltje fee08d7ab9 gizmoduck: row 302 (#1809, Vikunja 588) idle-stop race design round d1 for Dewey: idle-released code from the broker's own record of threadIdle's release, runner maps it to stopped/0, forcing cli test holds the window open until a call lands, threads.test:393 is the one changed pin (sage-3200, mos-1411) 2026-10-23 03:47:38 -05:00
jason.woltje 1ac655005e BUILD-LOG and SESSIONS: row 299 gate and landing, row 303 review, 219 and 295 rebases (sage) 2026-10-23 03:10:29 -05:00
jason.woltje 8a35ffadb4 queue: revs 3474-3487: row 303 (#1810) in-progress and in-review on 3c3be5d3 (launchpad 3474/3475), launchpad's request failed without a token (3476), sage's request posted c31082 (3477/3478), duckworth approve record c31079 (3480); row 299 (#1806) claim (gander 3479), in-review on 277ace0b (gander 3481), gander's request failed without a token (3482), sage's request posted c31083 (3483/3484), filbert approve record c31084 (3485); row 299 landing note and done move at ffb2fedfb (sage 3486/3487); queue only 2026-10-23 03:07:32 -05:00
jason.woltje ffb2fedfbc docs(row299): record fresh timing gate and six assertion kills 2026-10-23 03:03:09 -05:00
jason.woltje 11d1e2e0ce docs(row299): record clean integration on 80793d824 2026-10-23 03:03:09 -05:00
jason.woltje ed81f6eba0 docs(row299): record mos-1409 preservation and static candidate 2026-10-23 03:03:09 -05:00
jason.woltje e14164ab49 test(case): observe P10 wait directly under mos-1409 2026-10-23 03:03:09 -05:00
jason.woltje 10113b04f5 docs(row299): propose direct P10 wait timing for mos-1272 review 2026-10-23 03:03:09 -05:00
jason.woltje c1f910b4cc SESSIONS: filbert row 299 manifest round 1 approve (c31084, rev 3485) 2026-10-23 03:00:12 -05:00
jason.woltje 15e688cc01 BUILD-LOG and SESSIONS: row 294 rounds 3-4 and landing, R9 transient and row 303, row 219 edits 2-3 (sage) 2026-10-23 02:11:43 -05:00
jason.woltje 80793d824e queue: revs 3464-3473: row 294 (#1800) round 4 in-progress and in-review on a1ff5d67 (launchpad 3464/3465), launchpad's request without a token failed (3466), sage's request posted c31055 (3467/3468), duckworth approve record c31053 (3469); row 294 landing note and done move at d3059c2c3 (sage 3470/3471); row 303 (R9 guard, #1810, Vikunja 589, mos-1422) added and briefed (sage 3472/3473); queue only 2026-10-23 02:10:05 -05:00
jason.woltje ad6ca79304 docs: brief for the R9 guard row (Vikunja 589, #1810, mos-1422); docs only 2026-10-23 02:07:02 -05:00
jason.woltje d3059c2c3d launchpad: row 294 run 4 (#1800): whole gate green on 8616b9a4f (webui 365, cli 909, bus 873, 10 scripts), M1-M11 killed; M1 record names G4's first failure and G5 green (Duckworth C1); receipts in run4/ 2026-10-23 01:37:03 -05:00
jason.woltje 6f07930679 launchpad: row 294 round 4 (#1800): rehearsal fixture copies carry cli access.mjs and transport.mjs, B1-B3 pin the fixture's tracker warning in full (Mos mos-1419, sage-3238); manifest round 4 (19 paths), run 3 receipts; unrun 2026-10-23 01:37:03 -05:00
jason.woltje b01e1c9ee1 launchpad: row 294 round 3 (#1800): G5's baseline is coalesce(max(seq), 0), since max(seq) is NULL on the fixture's empty events table and run 2 read 0 of 22 refusal events (sage-3212, Mos ruling pending sage-3211); manifest round 3, run 2 receipts; unrun 2026-10-23 01:37:03 -05:00
jason.woltje 8716e72f26 launchpad: row 294 round 2 (#1800): browser.test pin gains /federation.js at index 2 (Mos mos-1412 (a)), G5 pins one action.refused {code: access-refused} per refused verb and every other table unchanged (sage-3194); manifest round 2 (18 paths), ASSERTION-PRESERVATION.json, run 1 receipts; unrun 2026-10-23 01:37:03 -05:00
jason.woltje 9beeeb9955 launchpad: row 294 run limits from recorded durations, 3x or more (sage-3187, mos-1275) 2026-10-23 01:37:03 -05:00
jason.woltje 9e43fefe60 launchpad: row 294 BUILD.md M1 expectation corrected (Duckworth C1), review recorded with N1-N4 dispositions 2026-10-23 01:37:03 -05:00
jason.woltje d0460ed475 launchpad: row 294 round 1 manifest (17 paths from 9450774cb) and notes with the owner-transport exception 2026-10-23 01:37:03 -05:00
jason.woltje 26f93fa746 launchpad: row 294 sage-3157, owner-transport exception written out, userOptionsFor, G9 pins no user value, M10/M11 (unrun, #1800) 2026-10-23 01:37:03 -05:00
jason.woltje c9e67e7d2d launchpad: row 294 BUILD.md M4 kill names the moved test 2026-10-23 01:37:03 -05:00
jason.woltje 52d2a16109 launchpad: row 294 rulings sage-3153 (boot refusal line, owner transport seam G9, C7 follow-up, access.test.mjs unchanged; unrun, #1800) 2026-10-23 01:37:03 -05:00
jason.woltje afef0ea887 launchpad: row 294 FED R6 build and plan, granted-user sign-in (unrun, #1800)
Console granted-user sign-in, a user-cli transport per session, the
per-request grant re-read, the owner-only gate and user page, the notice,
the hub label and peer links, accessContextFor peers, and the bus boot
access wiring (sage-3142). Tests G1-G8 and B1-B3 are written and not yet
run; runs wait for Sage's CLEAR. Choices C1-C9 in
agents/launchpad/work/queue-294/BUILD.md.
2026-10-23 01:37:03 -05:00
jason.woltje 09d0d6fafa queue: revs 3457-3463: row 294 (#1800) round 3 in-progress and in-review on cb1648f3 (launchpad 3457/3458), launchpad's request without a token failed (3459), sage's request posted c31049 (3460/3461), duckworth approve record c31045 (3462); row 219 restart note on b97a3ff97 (rocko 3463); queue only 2026-10-23 00:53:42 -05:00
jason.woltje ffbc0d7a6d BUILD-LOG and SESSIONS: row 292 landing, idle-stop race row 302 and its rulings, rows 300/301, row 294 rounds 2-3 (sage) 2026-10-23 00:47:17 -05:00
jason.woltje 756284e8e9 queue: revs 3448-3456: row 294 (#1800) round 2 in-progress and in-review on 7ec7b1ea (launchpad 3448/3449), launchpad's request without a token failed (3450), sage's request without a token failed (3451/3452), sage's request posted c31042 (3453/3454), duckworth approve record c31029 (3455); row 302 (#1809) in-progress (gizmoduck 3456); queue only 2026-10-23 00:40:17 -05:00
jason.woltje 0e30a85fac queue: revs 3444-3447: row 302 (idle-stop race, #1809, Vikunja 588, mos-1411) added and briefed; row 292 (#1797) landing note and done move at 6aab979e6 (sage); queue only 2026-10-23 00:22:51 -05:00
jason.woltje 6aab979e6c row 292 (#1797) gate results on 0d0021454: r2 old-test red compactions-launch:229 (exit-22 race, Vikunja 588), mos-1411 diagnostic 0/10 with one not-holder exit 22 seen in the clear test, r3 cli rerun 910/910, ten shells green, M1-M9 killed; rebase receipts (sage-3183, sage-3185, sage-3193) 2026-10-23 00:18:02 -05:00
jason.woltje e5ffa76932 row 292 (#1797) packet: targeted mutant kill rules per sage-3152 (pattern, stack lines and text per mutant; anything else is a STOP; a survivor gets one whole-file run), short TMPDIR per stage, run plan after Duckworth's round 2026-10-23 00:18:02 -05:00
jason.woltje bf4ba4280e row 292 (#1797) packet: rebase onto b23783f39 with the 0585b3213 resolution (row 203's console and federation text kept word for word, Gander's text for any other key), range-diff, the three patch-ids, C1/N3, mutants M1-M9 (unrun) and the run plan (sage-3146, sage-3148) 2026-10-23 00:18:02 -05:00
jason.woltje 495c128658 row 292 (#1797) C1 and N3 for duckworth-0229: a pre-270 loader stand-in of its own (C1's loader without the row 270 concat, the list before bce491715) refuses compactionReadBytes and compactionStreams on a full activate and rollback, naming the key; C1's loader reads both; the missing-loader case uses compactionStreams 1024 and checks row 203's console and federation text word for word with no loader 2026-10-23 00:18:02 -05:00
jason.woltje 4b612781b4 docs(release): record static approval and post-compaction review conditions 2026-10-23 00:18:02 -05:00
jason.woltje be43572166 docs(release): record any-key config plan and static review packet 2026-10-23 00:18:02 -05:00
jason.woltje 39bde4fd43 fix(release): validate non-console config keys with target loader 2026-10-23 00:18:01 -05:00
jason.woltje fdedc56e2a docs: idle-stop race brief records the 10-run diagnostic (not-holder seen once, run r846b8d083502); docs only 2026-10-23 00:04:20 -05:00
jason.woltje e3ef1eaf6f docs: brief for the idle-stop race row (Vikunja 588, #1809, mos-1411); docs only 2026-10-23 00:00:21 -05:00
jason.woltje c902a767dc queue: revs 3439-3443: rocko row 219 claim (3439), sage adds rows 300 (R6-N1, #1807) and 301 (R6-N4, #1808) and briefs both; queue only 2026-10-22 23:30:34 -05:00
jason.woltje 86d5ac69bf docs: R6 follow-up briefs for row 294 N1 (#1807) and N4 (#1808); docs only 2026-10-22 23:13:49 -05:00
jason.woltje 4a9c536e86 Row 293 (574) landing e51d11640 and the 3m-3n live window (activation 20261023T034557Z-464010fbe4c6): BUILD-LOG phase line, Darkwing and Sage SESSIONS lines; docs only 2026-10-22 23:01:20 -05:00
jason.woltje 83f1f854de queue: row 293 (574, #1805) landing note and done move (sage); queue only 2026-10-22 23:01:20 -05:00
jason.woltje e51d116402 docs(row293): record green integrated trace and whole suites 2026-10-22 22:55:25 -05:00
jason.woltje 78bbe12233 docs(row293): record integrated run2 and short TMPDIR correction 2026-10-22 22:55:25 -05:00
jason.woltje 92c0ca3db2 docs: preserve row293 first trace run and TMPDIR stop 2026-10-22 22:55:25 -05:00
jason.woltje d0ede15b95 docs(v574): record static approval and trace evidence requirements 2026-10-22 22:55:25 -05:00
jason.woltje 29bb1ccd46 docs(v574): audit fixture comparisons and plan trace proof 2026-10-22 22:55:25 -05:00
jason.woltje 4e22bd49f9 test(git): disable detached fixture maintenance per mos-1369 2026-10-22 22:55:25 -05:00
jason.woltje 464010fbe4 queue: revs 3435-3436. Row 294 (#1800): Duckworth APPROVE c30998 (3435, candidate 0b3f9c9d). Row 272 (#1777): Scrooge CHANGES c31006 (3436, candidate 0c3dc2ed); queue only 2026-10-22 22:39:36 -05:00
jason.woltje e57bfde734 queue: revs 3407-3434. Row 293 (574, #1805): Gander in-review r1 (3407, failed pre-send 3408), Sage request c30981 (3409/3410), Filbert APPROVE c30982 (3411). Row 292 (#1797): assigned gizmoduck (mos-1387), claim 3413, in-review r1 3419 (3420 failed), Sage request c30992 (3425/3426), Duckworth APPROVE c30975 (3433). Row 294 (#1800): Launchpad claim 3418, in-review r1 3422 (3423 failed), Sage request c30993 (3427/3428). Row 295 (#1801): Morgana claim 3414, in-review r1 3416 (3417 failed), Sage request c30991 resolved (3421/3424), Dewey CHANGES c30994 (3431). Row 272 (#1777): Huey claim 3415, in-review r1 3429 (3430 failed), Sage request c30997 resolved (3432/3434); queue only 2026-10-22 22:34:14 -05:00
jason.woltje 319d9f87ea sessions: Filbert row 293 (Vikunja 574) APPROVE c30982 rev 3411, plus re-added S0 re-check and 574 static review lines; docs only 2026-10-22 22:15:06 -05:00
jason.woltje b23783f395 Rows 270+271 landing (7328da8ca), 571 landing, MVP rows 293-299: BUILD-LOG phase line and Sage SESSIONS line; docs only 2026-10-22 21:34:23 -05:00
jason.woltje e18ad27115 docs: define mixed-format chapter ordering for conversion 2026-10-22 21:34:23 -05:00
jason.woltje 12f8c3089c queue: rows 293-299 briefed (revs 3399, 3401-3406, sage) and row 293 claimed by gander (rev 3400, gander-293-start); queue only 2026-10-22 21:34:06 -05:00
jason.woltje 253346e3c3 queue: rows 293-299 added (574 #1805, FED R6 #1800, FED R4 #1801, FED R7 #1802, GitHub grant method #1803, Q228 #1804, 573 #1806; mos-1371/1372), 208 after 294; 270 round 3 request c30929 and Duckworth APPROVE c30930; 270+271 done at 7328da8ca (mos-1351); queue only 2026-10-22 21:19:12 -05:00
jason.woltje 7328da8ca4 gizmoduck: row 270 (264c, #1775) gate results: run 3 red on case1-accept P10 band (Vikunja 573) and run 4 red on the checkout.test fixture race (Vikunja 574), both old tests unchanged in the range; run 5 GREEN on 53406f3e4 under mos-1369 and sage-3106, all phases and 38/38 mutants killed; BUILD.md only 2026-10-22 21:07:51 -05:00
jason.woltje 84002f960a gizmoduck: row 270 (264c, #1775) gate run 2 second red, fixed under mos-1364 and sage-3093: compactions-budget.test F1 (:39 input 8.5 * MiB is a whole number, now MiB + 0.5) and F2 (the 0o000 window in try/finally; the after-hook ran after setup's rm); K M22 :129, M23 :120, M22 and M15 notes; BUILD.md run 2 2026-10-22 21:07:51 -05:00
jason.woltje f89aaf57fe gizmoduck: row 270 (264c, #1775) gate run 1 red placed (mos-1272): compactions-launch.test's host wires row 271's five clear ops, as session-clear.test does; the clear test's successor never started without them; kill lines +5 in mutants.py K; BUILD.md run 1 2026-10-22 21:07:51 -05:00
jason.woltje d3a49f301a gizmoduck: rows 270+271 combined gate (C2) record before the first run (sage-3073, sage-3086, mos-1275, mos-1351): blob table, timeout table, GREEN and RED, order; code is ac44d0de9's 2026-10-22 21:07:51 -05:00
jason.woltje 562b05b43c gizmoduck: row 270 (264c, #1775) round 4 for sage-3073 and sage-3078: rows 270 and 271 rebased onto 25c09f19f (row 203 plus the O2 docs); mosaic-config.mjs keeps 203's federation key and both compaction keys; BUILD.md round 4 with the range-diff, the three merged files and C1 after 203; not run 2026-10-22 21:07:51 -05:00
jason.woltje 8c28ee7315 gizmoduck: row 270 (264c, #1775) round 3 for duckworth-0226 B4 (sage-3038): one collection opens at most the system config's compactionStreams stream files in name order (default 1024, 32 to 65536, a bad value takes the default and logs), not-collected past it with no cursor for an unopened stream; the missing-stream check uses a Set; readStreams, cap and launcher tests; mutants M22-M24, M10 anchor moved; docs/TOOLS.md has both keys and C1 (N4); BUILD.md round 3 with stream counts, the 231 KB bound, C1 and N5; not run 2026-10-22 21:07:51 -05:00
jason.woltje bce4917154 gizmoduck: row 270 (264c, #1775) round 2 for duckworth-0223 B1-B3 (sage-3030, sage-3031, mos-1352, sage-3033): pi streams read in 1 MiB chunks under a budget from the system config's compactionReadBytes (default 64 MiB, 1 MiB to 1 GiB, a bad value takes the default and logs), not-collected past it; Claude history from before the ledger is harness-unsupported for good; launcher, runtime reader, clear and legacy tests; mutants M13-M21; BUILD.md round 2 with sizes, schema change, rollback hazard, N1-N3; not run 2026-10-22 21:07:51 -05:00
jason.woltje 01b57f48bb gizmoduck: row 270 (264c, #1775) round 1 for review (sage-3024): mutants.py M1-M12 with anchors at 7d199f033, each matching once, kills read from the tests; run plan with broker.mjs reruns; launcher and runtime wiring named as untested; not run 2026-10-22 21:07:51 -05:00
jason.woltje 54ec0005e0 row 271 (264d, #1776): BUILD.md r3 gate on 9e18a9aaf (sage-3017): cli and bus session-clear.test whole green (5/5, 19/19), cli suite 874/874, M14 killed by the T6 test's first lines() assertion at :365; no first-run red. Doc only. 2026-10-22 21:07:51 -05:00
jason.woltje 61e262b7c0 row 271 (264d, #1776): r3 packet carries mutants.py, M1-M14 with their anchors, as the gate applies them (duckworth-0212 C1). Doc and harness only; no src or test change. 2026-10-22 21:07:51 -05:00
jason.woltje 540b6f16ba row 271 (264d, #1776): r3, T6 per sage-3001. New cli test: a bus unavailable (broker-exited) at the exit proof, then at retirement, holds the clear with no retirement, successor launch or slot handed on, logs once, and resumes when the bus answers. BUILD.md maps the halt case to session-launch.test.mjs:372 and launcher.mjs:824, binds the Q198 hold to row 257 with duckworth-0210's carry, and names M14 (drop clearPass's try/catch) and its kill. No src change. Not run (no CLEAR). 2026-10-22 21:07:51 -05:00
jason.woltje e6a675ee83 row 271 (264d, #1776): BUILD.md gate results on e8af389e6 (sage-2991): 18 touched files, bus/seat/cli suites and every test-*.sh green, M1-M13 killed by assertions in the named tests; the row gate's T6 coverage open to Sage. Doc only. 2026-10-22 21:07:51 -05:00
jason.woltje e77635cebb row 271 (264d, #1776): BUILD.md run limits for the e567f949c gate (mos-1275, sage-2991); mutant lines moved one down past the B1 comment. Doc only. 2026-10-22 21:07:51 -05:00
jason.woltje 3fc8ccef1a row 271 (264d, #1776): duckworth-0201 B1: #ownerRefusal passes 'session.clear' to #granted, so the project and instance sit in their own slots and a live collaborator grant passes the retirement recheck. N4 setup shared; a second N4 test keeps the grant and expects retired plus the successor; M13 restores the defect. 264e carry noted at the N4 tests. Not run (no CLEAR). 2026-10-22 21:07:51 -05:00
jason.woltje 27d3266fff row 271 (264d, #1776): BUILD.md records mos-1336, Mos's approval under mos-1292 of the later3l, rows() and thread-shares migration test changes on the 3m to 3n rebase, with its conditions 2026-10-22 21:07:51 -05:00
jason.woltje 6bd67225b5 row 271 (264d, #1776): BUILD.md states the post-rebase '3m' grep result as measured 2026-10-22 21:07:51 -05:00
jason.woltje 14715d644a row 271 (264d, #1776): r2 on 0cbe2e9b3 (sage-2968): 3m to 3n migration and 3m engine tests from fixtures/schema-3m.sql; BUILD.md records the label change, the old-test changes (later3l, rows() and the thread-shares migration test outside the mos-1315 list, for Mos) and the mutant lines on the rebased tree 2026-10-22 21:07:51 -05:00
jason.woltje f9a9c9b5a0 row 271 (264d, #1776): BUILD.md defines M1-M12 with their expected kills 2026-10-22 21:07:51 -05:00
jason.woltje 34388223d8 row 271 (264d, #1776): launcher uncertain-path test with test-driven ticks and a stopped runner; start() takes stopTimeoutMs 2026-10-22 21:07:51 -05:00
jason.woltje 3adb391b57 row 271 (264d, #1776): N4 failed-clear test on a user's thread with raw first rows; BUILD.md notes the failed path has no verb route yet 2026-10-22 21:07:51 -05:00
jason.woltje 4da907cd5e row 271 (264d, #1776): T4 tests round 1, not run (slot held). Bus session-clear.test.mjs (15), cli session-clear.test.mjs (3, bwrap) with clear-adapter.mjs; BUILD.md maps each T4 item and names what is still open (failed clear, launcher uncertain path, mutants) 2026-10-22 21:07:51 -05:00
jason.woltje aa8fc490f5 row 271 (264d, #1776): clear context build round 1, not run (slot held). Broker: session.clear, session.cancel and session.operation, the fence on send/open/claim, cancel at arrival for routed messages, the drained receive and the end drain, trusted ops sessionClears and sessionClearExited/Uncertain/Retire/Start. Launcher: clearPass before the threads loop (stop, proof, retire, successor start through check()/start()), waiting on a live row 269 survivor. Old tests per mos-1315, rebased on row 206 (sage-2968): label 3m to 3n, future step 3n to 3o, 3m-3n.sql in the engine copies and file lists, ready lines, later3l and the rows() exclusions gain both tables as 206 did for thread_shares (mos-1292, approved in mos-1336), schema.test counts 25 tables and 96 triggers, COUNTED and T45 LISTED gain both tables after thread_shares (mos-1318, mos-1319), TESTER_VERBS pin (mos-1325), fixtures/schema-3m.sql 2026-10-22 21:07:51 -05:00
jason.woltje a9884dc75c row 271 (264d, #1776): schema step 3m to 3n (rebased on row 206's 3l to 3m, sage-2968), session_ops and message_cancels with 7 triggers; successor id pinned as a lowercase version 8 UUID for Huey (gizmoduck-0274) 2026-10-22 21:07:51 -05:00
jason.woltje 25c2c1a560 gizmoduck: row 271 design: duckworth-0171 C1 (start stages keyed on a report counter, work attempt in its own column) and C2 (cancelled in the stage CHECK at attempt 0 and closing the op, claim and cancels untouched by a pre-retire cancel, post-retire successor reading stated, race and held tests); N1 grep at build 2026-10-22 21:07:51 -05:00
jason.woltje 4f827a5e81 gizmoduck: row 271 design: session.cancel and the cancelled stage built in 271 (sage-2828 re-rules Q3 per D7:263-264), pre- and post-retire paths, cancel tests and the fence-release mutant; N2 refuses session-name-too-long at accept 2026-10-22 21:07:51 -05:00
jason.woltje 7dc8ff1bfa gizmoduck: row 271 design: T45 LISTED gains session_ops and message_cancels to match COUNTED (mos-1319) 2026-10-22 21:07:51 -05:00
jason.woltje 61df3061ed gizmoduck: row 271 design: duckworth-0170 B1-B4 folded (cancel at arrival for routed messages, claim refused while clearing, op namespace both ways, attempt key on start stages) and N1-N8 answered; cancel recorded as a departure from D7:263-264 2026-10-22 21:07:51 -05:00
jason.woltje b212182ed1 gizmoduck: row 271 design: both new tables join COUNTED in stack-release.sh, so T46 passes unchanged; schema.test count pins name the 2 tables and 7 triggers; T45 LISTED question to Mos (mos-1318) 2026-10-22 21:07:51 -05:00
jason.woltje dac64ff311 gizmoduck: row 271 (264d) design draft 2: drained acknowledged by the run's own receive at a turn boundary (a landing turn has unread 0 with a child running), SIGTERM only after it; successor <old>-N bound at request with a deterministic id; no cancel (sage-2826); pre-existing test change list per mos-1315 2026-10-22 21:07:51 -05:00
jason.woltje b329ad69f5 gizmoduck: row 271 (264d) design draft 1 in the packet: the threadIdle fence as the drain, the idle stop as the only signal, a session_ops journal and message_cancels in one schema step; Q1-Q4 for Sage and Mos 2026-10-22 21:07:51 -05:00
jason.woltje 8d4d4ec598 gizmoduck: row 270: the bus legacy test inserts its legacy thread by hand (sessions is append-only) and the test business has the assistant thread.create needs; not run 2026-10-22 21:07:51 -05:00
jason.woltje 5ddc36ca97 gizmoduck: row 270 (264c, #1775): completed Pi compactions counted into a host ledger beside the session store, keyed (entry id, timestamp) store-wide (sage-2806, sage-2814); launcher collects at run start and end under the workspace lock; session.list rows gain compactions through a runtime-injected reader; not run (slot held) 2026-10-22 21:07:51 -05:00
jason.woltje f510d73676 gizmoduck: rows 270 and 271 packets: the 264c count and 264d clear contracts pinned for row 272 (Huey), and the Pi 0.85.1 compaction source contract 2026-10-22 21:07:51 -05:00
jason.woltje 767bb62c7d docs: close remote credential and private review access findings 2026-10-22 21:06:29 -05:00
jason.woltje 6345aae3d8 docs: align editor graph, Markdown transition and archive with PRD d6 2026-10-22 21:06:29 -05:00
jason.woltje ee5f7b9ef8 docs: align O2 chapter conversion and Case 2 access with owner rulings 2026-10-22 21:06:22 -05:00
jason.woltje 0b923a2759 MVP readiness briefs (mos-1371/1372): FED R6 #1800, FED R4 #1801, FED R7 #1802, GitHub grant method #1803, Q228 grant scope #1804, 574 #1805, 573 #1806; docs only 2026-10-22 20:32:37 -05:00
jason.woltje b0a6838ca6 SESSIONS: Filbert Q195 O2 S0 review (#1798, c30914); doc only 2026-10-22 19:05:06 -05:00
jason.woltje 0626464874 Q195 O2 W4 (#1799): log lines for the W4 design and review landing, row 203 and O2 landing; docs only 2026-10-22 18:55:11 -05:00
jason.woltje 66299eeef7 Q195 O2 W4 (#1799): Megavolt's round 4 review of 994c3f7fb (blob 2af460ab7): APPROVE, R3-B1 and R3-B2 closed, R4-N1 (re-migration after a pre-W4b restore) non-blocking for W4b; doc only 2026-10-22 18:54:51 -05:00
jason.woltje 569bb6b177 Q195 O2 W4 (#1799): Megavolt's round 3 review of 54246cb32 (blob 0c4f55826): CHANGES, R2-B1 projection and R2-B2 closed, R3-B1 (reserved notes keyed on negative IDs) and R3-B2 (fence initial state and confirmation scope undefined); doc only 2026-10-22 18:54:51 -05:00
jason.woltje fb404c909d Q195 O2 W4 (#1799): Megavolt's round 2 review of 019a0ea5b (blob 14dfe92d9): CHANGES, B1-B9 and M1 closed, R2-B1 (paragraph-mark revisions, reserved-note leaves) and R2-B2 (release backup/restore keeps O2 text and revives revocations); doc only 2026-10-22 18:54:51 -05:00
jason.woltje 4c0a2c4fd4 Q195 O2 W4 (#1799): Megavolt's review of the DOCX citation design at 15e91538f (blob 662abdb7c): CHANGES, B1-B9 and M1 (Case 2 narrowing in O2-context turns goes to Mos/Jason); doc only 2026-10-22 18:54:51 -05:00
Rocko 2f06aad3f0 docs: define reserved notes and initial O2 restore fence 2026-10-22 18:54:51 -05:00
Rocko 6863d4c852 docs: specify O2 projection marks and restore revocation fence 2026-10-22 18:54:51 -05:00
Rocko 9ef5798acb docs: close W4 locator and access review gaps 2026-10-22 18:54:51 -05:00
Rocko 4897520c31 docs: define committed DOCX citation and access contract 2026-10-22 18:54:51 -05:00
jason.woltje 4ca2703079 queue: revs 3360-3368. Row 203 (#1701): Sage brief re-pin to 8adfb261f (3360, Webby N2), Quackerjack claim, in-review r2 and outcome (3361-3363), Sage request as jarvis (3364-3365), Webby approve record (3366), Sage landing note and done (3367-3368). 2026-10-22 18:54:10 -05:00
jason.woltje 25c09f19fe docs: name save-group settings and enforce adoption gates 2026-10-22 18:51:33 -05:00
jason.woltje a6da8718c4 docs: fix O2 review gates, shipping and save semantics 2026-10-22 18:51:33 -05:00
jason.woltje ee26cfbada docs: redesign Q195 for full WordCraft O2 editor 2026-10-22 18:51:33 -05:00
jason.woltje a4da4e6df4 row 203: gate results on the rebased tip (c7b754d7b): stack-release 219/0, test-config 51/0, mutants 17/17, cli 895/0, ten scripts green with named skips; code tree unchanged from 7309260ae 2026-10-22 18:39:28 -05:00
jason.woltje 7309260aeb row 203: gate record on the rebased tip (c7b754d7b): blob table and timeout table, written before the first run 2026-10-22 18:01:35 -05:00
jason.woltje 7c543fd4a1 row 203 FED R2: cases for missing self, peer id and label (webby-0191 B3)
The pattern test coerces an absent value to the string 'undefined', which
matches, so the typeof halves are the only refusal for a missing value. Adds
a case for each, and M15-M17 in BUILD.md; keeps the config-console-key check
name on purpose. Not run yet.
2026-10-22 17:57:25 -05:00
jason.woltje 284d55cf2c row 203 FED R2: stack-release probe reads federation; a refusal case per federation check
stack-release config_checks refuses a target whose loader refuses a key the
config holds; it looked only for console, so a federation-only config passed
to a pre-203 copy. The probe now reads console or federation. The fixture's
B loader replace follows the new rejectUnknownKeys list, which the federation
key changed.

Adds a test for each federation refusal in test-config.sh (six uncovered,
plus trailing slash and duplicate peer id), and one stack-release test for
the target-loader refusal. Mutants M7-M14 in BUILD.md. Not run yet.
2026-10-22 17:57:25 -05:00
jason.woltje 93a491d732 row 203 FED R2: federation key in the system config (#1701)
The loader validates an optional federation block: self and peers[].id
labels, peers[].origin as an https origin with no path, query or userinfo,
peers[].label non-empty and at most 80 characters, peer ids unique and
distinct from self. Unknown sub-keys refuse. Labels and URLs only; the key
grants no trust. Absent key: config loads with no federation output.

Tests in scripts/test-config.sh cover each refusal and the no-key case.
Notes and mutants M1-M6 in agents/quackerjack/work/queue-203/BUILD.md.
Not run yet: the gate runs on CLEAR.
2026-10-22 17:57:25 -05:00
jason.woltje c7b754d7b1 queue: revs 3339-3359. Row 292 (#1797, Gander) added and briefed (Sage, 3339-3340). Row 291: Gosalyn claim and in-review r1 (3341, 3344-3345), Sage request as jarvis (3353-3354), Webby approve record (3357). Row 207: Megavolt in-review (3342), Sage abandon and request as jarvis, resolved on c30841 (3347, 3349-3350), Duckworth approve record (3356), Sage landing note and done (3358-3359). Row 270: Gizmoduck claim and in-review r3 (3343, 3346), Sage abandon and request as jarvis (3348, 3351-3352), Duckworth approve record (3355). 2026-10-22 17:53:26 -05:00
jason.woltje a94c95522f docs: row 207 landing records (SESSIONS, BUILD-LOG, Megavolt's lines), DEFERRED 207 N1 (duckworth-0230) and 270 N6 bound to row 272 (duckworth-0228) 2026-10-22 17:51:32 -05:00
jason.woltje c4f77373f9 row 207 (#1705): BUILD.md Runs records the gate on 712f79c0a (sage-3041): access.test 31/31, M1-M8 killed on their named tests, cli 894/894, ten scripts green under the mos-1275 limits, and the stopped first run's kill-check correction; doc only 2026-10-22 17:28:04 -05:00
jason.woltje c7e77202d6 row 207 (#1705): BUILD.md records sage-2810 (Q1 no reload, cited to broker.mjs:384; Q2 refuse with user-has-grants) and the usage/help pin sweep: access.test.mjs is the only reader, no hash pin; doc only 2026-10-22 17:28:04 -05:00
jason.woltje a0094633f6 row 207 (#1705): access.test.mjs T1-T9 for user add|remove; BUILD.md pins M7/M8 as edits and records the row 275 path check (bus only, morgana/row275 empty); not yet run, waits for Sage's CLEAR (sage-2790) 2026-10-22 17:28:04 -05:00
jason.woltje 721268b084 row 207 (#1705): mosaic access user add|remove on R5's path (proof, lock, revision, checkAccess, receipt user.add/user.remove); remove refuses user-has-grants; --level viewer already in R5; BUILD.md records Q1-Q5 (no access.reload, R4's) and the tests and mutants; tests held for the row 275 manifest check (sage-2790) 2026-10-22 17:28:04 -05:00
jason.woltje f0e3dcdf41 plans: brief for the config_checks follow-up (row 270 rollback hazard, duckworth-0226, sage-3038) 2026-10-22 17:11:21 -05:00
jason.woltje 01983cd3f1 queue: rev 3338. Row 224 waits on row 216 (Sage, mos-1351: della/row224 carries row 216's commit 4f3fbc25a). 2026-10-22 17:06:42 -05:00
jason.woltje 626c19e78c queue: revs 3325-3337. Row 271: Gizmoduck claim and in-review r3 (3325-3327), Sage review request as jarvis (3328-3329), Duckworth approve record (3330). Row 276: Gander in-review r1 (3331-3332), Sage review request as jarvis (3333-3334), Duckworth approve record (3335), Sage landing note and done (3336-3337). 2026-10-22 17:04:08 -05:00
jason.woltje f32b867f34 docs(row276): record green run5 gate and all seventeen assertion kills 2026-10-22 16:59:44 -05:00
jason.woltje 826e8fd7ff docs(row276): refresh mos-1350 baseline cleanup packet and limits 2026-10-22 16:59:44 -05:00
jason.woltje e06130fc01 test(case): require baseline session cleanup per mos-1350 review 2026-10-22 16:59:44 -05:00
jason.woltje 466562ba03 docs(row276): pin mos-1350 baseline candidate and timing audit 2026-10-22 16:59:44 -05:00
jason.woltje 931fab079a perf(case): remove duplicate head validation per mos-1350 2026-10-22 16:59:44 -05:00
jason.woltje 135bb8fae2 test(case): isolate P10 timing with per-mode baseline per mos-1350 2026-10-22 16:59:44 -05:00
jason.woltje cf228eabc9 docs(row276): record run4 stop and mos-1349 timing pairs 2026-10-22 16:59:44 -05:00
jason.woltje 41f8bd1972 docs(row276): packet stdout spool and M17 per mos-1345 2026-10-22 16:59:44 -05:00
jason.woltje 47906e4fde fix(case): isolate legacy stdout after outer timeout per mos-1345 2026-10-22 16:59:44 -05:00
jason.woltje c2b845c76d docs(row276): preserve run3 whole-file stop for placement 2026-10-22 16:59:44 -05:00
jason.woltje 74635fc608 fix(row276): correct multi-file driver path per mos-1337 review 2026-10-22 16:59:44 -05:00
jason.woltje 257003ba1a test(row276): record mos-1337 N5 delta and both-copy mutant 2026-10-22 16:59:44 -05:00
jason.woltje 537ce2dd4a fix(case): silence vanished stat opens per mos-1337 N5 2026-10-22 16:59:44 -05:00
jason.woltje 3b90428021 docs(row276): record run2 stop for Mos placement 2026-10-22 16:59:44 -05:00
jason.woltje 859ae37083 docs(row276): void setup-red run and pin first fixture correction 2026-10-22 16:59:44 -05:00
jason.woltje 88179d6de4 test(row276): define read helper for new legacy fixtures 2026-10-22 16:59:44 -05:00
jason.woltje ccfa17eefc docs(row276): integrate schema3m base and record dependency drift 2026-10-22 16:59:44 -05:00
jason.woltje b5d9efa1ba docs(row276): pin integration on 94c33a43c and preserve upstream docs 2026-10-22 16:59:44 -05:00
jason.woltje 69979bb8a8 docs(row276): record static approval and upstream deferred drift 2026-10-22 16:59:44 -05:00
jason.woltje 155f643224 docs(row276): pin supervised-call candidate and fifteen mutants 2026-10-22 16:59:44 -05:00
jason.woltje b96b4e303d fix(case1): supervise legacy user calls across sudo sessions 2026-10-22 16:59:44 -05:00
jason.woltje f2735bb6a1 queue: revs 3317-3324. Row 206: Launchpad claim and in-review (3317-3319), Sage review request (3320-3321), Duckworth approve record (3322), Sage landing note and done (3323-3324). 2026-10-22 15:14:46 -05:00
jason.woltje 0cbe2e9b35 row 206 (#1704): BUILD.md Runs, gate GREEN on 9538e0fc8 (bus 850, cli 869, shell suites, M2-M9 and Q2 killed) 2026-10-22 14:40:53 -05:00
jason.woltje 9538e0fc86 row 206 (#1704): thread-shares trail test threads the reply into A's default session, not the thread id (first-run red, mos-1272) 2026-10-22 14:19:00 -05:00
jason.woltje 1a228f395f row 206 r4 (#1704): BUILD.md records the slot rebase onto 17f415792 (269, 282 landed) and the drift sweep 2026-10-22 14:16:21 -05:00
jason.woltje 8295622600 row 206 (#1704): BUILD.md records duckworth-0179/0180, C3 met on the pushed tip 670658dd1 2026-10-22 14:15:48 -05:00
jason.woltje ac0e4dc9bc row 206 r3 (#1704): BUILD.md records the C3 rebase onto 275 at 3410df7c3 on 253's 48e450ce8, and the sweep 2026-10-22 14:15:47 -05:00
jason.woltje c49fdb2692 row 206 (#1704): BUILD.md records duckworth-0175 (round 2 meets C1/C2, APPROVE carries) and C3 2026-10-22 14:15:47 -05:00
jason.woltje cfb86f1bd7 row 206 r2 (#1704): rebased on 275 r3 957a9bfe0; share verbs need collaborator, viewer reads a share (duckworth-0169 C1, C2) 2026-10-22 14:15:47 -05:00
jason.woltje 178eefd5c4 row 206 (#1704): BUILD.md records Duckworth's manifest APPROVE (duckworth-0169), C1/C2 for the 275 round, N1-N4 2026-10-22 14:15:47 -05:00
jason.woltje 8a29f94771 row 206 (193b2, #1704): sage-2818 rulings, only a human principal matches a share
#readable returns false for an agent session, so a `*` share no longer shows a user's message
in an agent's trail. New tests: a sharee's session.list refuses (Q1), and an agent bound to the
shared thread, a chief run and the tester match no share (Q2). BUILD.md records the Q1
follow-up, Q2-Q4 and the live --migrate as Mos's go under Q173. README names the agent rule.
2026-10-22 14:15:47 -05:00
jason.woltje d78a9cc83c row 206 (193b2, #1704): thread shares, schema 3l→3m
thread_shares (row 193 design 5.2) with its index and append-only triggers; the
3l-3m step only adds them. thread.share, thread.unshare and thread.shares for a
thread's owner; #readable holds design 5.4's four rules, #threadRead serves
thread.messages only, and thread.list {shared:true} adds owner. replies and
trail show shared user threads to the owner and readers. COUNTED, LISTED,
timedTables and the clock list take the table. Tests: thread-shares.test.mjs
and the 3l→3m pins. Packet agents/launchpad/work/queue-206/BUILD.md. Not run
yet: node waits for Sage's CLEAR (sage-2789).
2026-10-22 14:15:47 -05:00
jason.woltje 17f4157920 queue: revs 3217-3316. Q226 gap (rows 216-229, 265-267 re-pins; 217 unblocked; 223 blocked; rows 282-290 added), rows 253, 275, 269 and 282 reviews, notes and done moves, row 291 (PRD 1.16, #1796) added, claims and in-review moves for 173, 207, 211, 214, 224, 239, 252, 258, 276 (sage, darkwing, della, dewey, gander, herb, honker, megavolt, scrooge, ludwig, gizmoduck, gosalyn, webby, duckworth, morgana); review requests posted as jarvis by Sage 2026-10-22 14:13:04 -05:00
jason.woltje 647424442f gosalyn: PRD 1.15 round 2 for Webby webby-0158 B1: requireCitation makes every reply carry a citation except the runner's four fixed notices, as the design keeps them passing, and the REQ-LIB-1 rewrap joins organization file to its sentence (N1) 2026-10-22 14:06:25 -05:00
jason.woltje 71fed6281c gosalyn: PRD 1.15 rewrites REQ-LIB-6 to Q223 and Q226 (mos-1320 item 8): agents never write story and write .md files only in supporting folders a human marks, each as a commit by their own Gitea account with a notice she can revert, chat is free text, any citation is checked, and requireCitation is a human-only setting off by default. REQ-LIB-1 and REQ-LIB-2 gain supporting folders and the canon-cite rule. The 1.12 note's residual becomes the supporting-doc residual, and the 1.15 note records the old texts and lists REQ-LIB-3, 4, 5 and 7 as unchanged. requirements.json version 1.15 with three titles changed, and the test's version pin. The id count stays 85 2026-10-22 14:06:25 -05:00
jason.woltje 86a665bdf0 docs: PRD 1.16 brief, library.write routes under REQ-LIB-6 (#1796, mos-1328) 2026-10-22 13:51:55 -05:00
jason.woltje efcc9ea8dd row 269 (264b, #1774): BUILD.md M11 kill line is the survivor log assertion at session-launch.test.mjs:309, not the outcome assertion (mutant run 17:49Z, duckworth-0181) 2026-10-22 13:37:34 -05:00
jason.woltje f39508c24f row 269 (264b, #1774): the M6 halt test halts after mayLaunch answers
A halt inside the op reaches the bus's own fence first (runtime.mjs:564-566,
processingWork at :352-356), so the launcher refused limit-check-failed
(launcher.mjs:389-391) before its recheck admission() at :397. First-run red of
a new test on 6d9ab3503 early signal, placed under mos-1272.
2026-10-22 13:37:34 -05:00
jason.woltje d20ef317fc row 269 (264b, #1774): BUILD.md names the sessioned-survivor residual in Q2 and records N1's mos-1292 allowance (duckworth-0159 N3, N4) 2026-10-22 13:37:34 -05:00
jason.woltje 6e50bd6304 row 269 (264b, #1774): BUILD.md Q2 notes that a survivor's released claim doesn't prove its run has exited, and the per-leftover 5 s wait (duckworth-0158 N1, N2) 2026-10-22 13:37:34 -05:00
jason.woltje 6c80b12904 row 269 (264b, #1774): BUILD.md answers sage-2750 on the recover() change; the survivor log names its pids
The section "recover() change, for a design read" covers three things, with
file:line against aca16404c. Every leftover is still bound and ended as
host-lost, and a survivor only refuses legacy-run-live while it lives. The
5 s wait applies only in the bwrap kill branch. No old test's expected value
changes. The fallback is to revert to the base recover() and leave the
refusal untested. The survivor log line now names the outer and runner pids
so an operator can clear it, and the new test's log assertion matches.
2026-10-22 13:37:34 -05:00
jason.woltje 42fd3edd45 row 269 (264b, #1774): legacy-run-live gets its test (duckworth-0156)
recover() kept a survivor only when a bwrap outer pid outlived SIGKILL, so
the Q2 refusal (BUILD.md:177-179, t1-sessions.md:109) had no test. A leftover
whose runner still ran after its outer pid was gone was ended and dropped.
Now recover() waits on the outer pid and the runner, keeps any leftover where
either still runs, and logs that it still runs. check() reads only the
survivors that still run.

session-launch.test.mjs adds a test where a sessionless leftover's runner is
a sleep child and its outer pid is gone. It asserts the legacy-run-live
refusal with no launch and no session workspace, then one launch once the
child exits. BUILD.md adds mutants M10-M12 and replaces the "no test" note.
2026-10-22 13:37:34 -05:00
jason.woltje dc5836c7df row 269 (264b, #1774): refusedOnce in sessions.test.mjs pins actor_run, closing Duckworth N1 (DEFERRED.md:474-480)
Allowed by Mos in mos-1292 (copy mos-1294) on mos-1285's terms. The SELECT
reads actor_run, the expected row gets the run-name literal, and the three
callers pass `${name}-run`. Nothing else in the test changes. The old
expected row was:

  [['action.refused', { code: 'not-holder' }]]

DEFERRED.md gets a closing line on the entry naming row 269.
2026-10-22 13:37:34 -05:00
jason.woltje 2133c5a0c6 row 269 (264b, #1774): per-session store, workspace and single-writer lock
threadsState gives one row per session with `session` and `legacy`; threadIdle
idles a run against its bound session. Each session gets its own store
(threads/<b>/<t>/sessions/<s>/, or the thread's old store for a legacy-3l
session) and its own workspace (session-workspaces/<b>/<i>/<s>/), held by an
O_EXCL <ws>.lock from before the clones to the run's proven exit. A legacy
session's workspace binds in-sandbox at the old instance path. sessions.json
is v2 and reads v1. New tests: cli session-launch.test.mjs, seat
session-workspace.test.mjs. Not yet run: tests wait for Sage's CLEAR.

Two old assertions change as exact updates:
- mos-1285: end-launch.test.mjs threadsState deepEqual. The old row shape was
  { thread: 'th-1', instance: 'coder', pending: 0, unread: 0, lastMessage: null,
  lastOpen: '2026-10-15T00:00:01.000Z', lastClaim: null, holder: null }; the
  row keeps every key and value and adds session: 'th-1', legacy: true.
- mos-1289: thread-launch.test.mjs:182, old line
  `const store = join(f.dataRoot, "threads", "acme", A);`
  now reads A's default session id from threadsState's `session` key; :183-185
  unchanged; one added assert that threads/acme/<A>/session is absent.
2026-10-22 13:37:34 -05:00
jason.woltje 194dec83d6 row 269 (264b, #1774): BUILD.md lists thread-launch.test.mjs:182 as a second old assertion that changes. A thread.create thread's default session isn't legacy-3l, so its store takes D2's layout (t1-sessions.md:100, :294). Proposed as an exact path update, for Mos through Sage 2026-10-22 13:37:34 -05:00
jason.woltje 84b32e3903 row 269 (264b, #1774): BUILD.md drops the planned bindLaunch session-running refusal. Two old tests bind a second unended run to one session and expect the claim refusal (threads.test.mjs:88-89, sessions.test.mjs:119-120), so the broker half of the fence is the existing per-session claim, thread-already-held (broker.mjs:4815) 2026-10-22 13:37:34 -05:00
jason.woltje 9d241fdcc2 row 269 (264b, #1774): design notes for Duckworth's early look (duckworth-0150). C1 adds the Console and R-guard sessions.json readers, the 264a refusals a v2 file causes, the /proc live check and the Console restart; C2 pins M6 to a generation change after check() with all eight start() admission calls named; C3 gives the realpath compare its own code and a symlinked workspaces root as M4's input; C4 lists the old threadsState assertions, end-launch.test:193 the only change, under mos-1285 2026-10-22 13:37:34 -05:00
jason.woltje 76a6524cfe row 269 (264b, #1774): design notes for sage-2717. Rollback names the four steps past the 264a exit-3 refusal and the re-pin plan section that carries them; new M8 binds a non-default session at the legacy path, old M8 becomes M9; Duckworth's legacy-bind check 2026-10-22 13:37:34 -05:00
jason.woltje 693f7e745e row 269 (264b, #1774): design notes. D9 audit of every sessions.json reader at 84f53540d and of threadsState's consumers; sessions.json goes to v2 because recover() rebinds without session; pi 0.85.1 resumes by cwd, so the legacy session keeps its in-sandbox path; mutants M1-M8 and run limits (sage-2707) 2026-10-22 13:37:34 -05:00
2351 changed files with 482656 additions and 1634 deletions

No files matched your search

+177
View File
@@ -5342,3 +5342,180 @@ Gander: after Duckworth-0100 design approval with C1-C5, prepared the two host-s
2026-10-22T17:42:16Z | Sage | Row 253 (#1758, Gander, Duckworth) LANDED 48e450ce8. Before: refactor at aca16404c; case-sudo calls had no supervised session check and the M21 survivor hid behind a fast-exit fixture (mos-1297). After: a fast-forward of 22 commits; manifest 591020a1 rechecked with 0 mismatches; run 5 whole gate green with M1-M40 killed, the M38 PID equals SID assertion added under mos-1298; Duckworth APPROVE rev 3252, note rev 3253, done rev 3254; #1758 comment 30701 and closed; P19 416 comment 719. N1 (fast child reported as exit 85) is DEFERRED as Vikunja 532.
2026-10-22T18:11:57Z | Sage | Row 275 (#1780, Morgana, Duckworth) LANDED 3410df7c3. Before: refactor at 48e450ce8; viewers had no verb list of their own and board reads were not refused to users. After: a fast-forward of 3 commits; manifest 39847b15 (4 paths) blobs match; gate 17:52:12Z-18:05:00Z green (whole files 7/22/6, bus 834, cli 861, harness 151, business 231, seat 167, 10 scripts with 3 named skips), M6 and M10 killed; Duckworth APPROVE rev 3260 (comment 30717); note and done by sage-2897; #1780 comment 30728 and closed. N1 (board refusal test as a loop over BOARD_VERBS) is non-blocking.
2026-10-22 18:11:58 UTC | Gander row276 #1781 prepared, gate pending | Before: row253 left5legacy Case1 AS_USER calls unsupervised across sudo pty sessions. After: candidate uses its unchanged supervisor with per-call inner/outer budgets, separate streams, strict display-only failure trailer, fake-only paired process-model cases and15unique mutants. Duckworth0182 B1 corrected the plan before product code;0183 cleared build. Parse-only Bash checks pass; no Node, behavioral test, host, unit or config action. Runtime gate and publication await Sage.
2026-10-22T22:51:32Z | Megavolt | Row 207 (193c, #1705): rebased onto 01983cd3f as 712f79c0a; gate green under sage-3041 (access.test 31/31, M1-M8 killed on named tests, cli 894/894, ten scripts under mos-1275 limits). Correction: the first run's kill check grepped TAP "not ok" against node's spec output and was stopped and rerun. Runs note in 9bb406c6c.
2026-10-22T22:51:32Z | Sage | Row 207 (#1705, Megavolt, Duckworth) LANDED c4f77373f. Before: refactor at f0e3dcdf4; mosaic access had no user verbs. After: fast-forward of 4 commits, a cherry-pick of the gated 01983cd3f..9bb406c6c (range-diff 4/4 equal, patch-ids equal, the 4 manifest blobs equal; the base moved only by the #1797 brief, which no test reads; no open branch touches the manifest). Duckworth APPROVE c30849 rev 3356; done rev after the note. N1 (any-business refusal untested) DEFERRED. No live change. Correction: my first 207 review request ran under timeout 120, which killed it while it wrote the outcome; the comment (c30841) had posted, so I removed the dead lock and resolved it at rev 3350.
2026-10-22T23:03:39Z | Gyro Q195 O2 rewrite, #1752 / Vikunja #448, mos-1356 | Before: landed O3 design 95e3f7166/blob 4cb59999. After: Q231/Q233 full WordCraft O2 design on gyro/editor-o2 from refactor c4f77373f; canonical git DOCX, original Markdown/wiki preservation, human cadence default 0 with instant accepted-save commits, full rich-feature first slice. Ten briefs include independent source/dependency security clearance before any build queue entry, exact editor-only CSP approval gate, restricted source/build/bridge, separate reviewed DOCX citation gate and flags-only agent access. Existing Case 2 semantics unchanged; any integration requirement change goes through Mos to Jason. Static checks: ten briefs/seven fields, independent reviewers, unique anchors, current source/base/blob pins, docs scope and append-only logs pass. No builds, browser/worker runs, code, queue or live changes. Fenton review pending; CSP and implementation gates remain closed.
2026-10-22T23:03:53Z | Gyro Q195 O2 push guard | CI queue guard identity gyro / purpose push returned exit 0, documented degraded-pass: CANNOT_ASSERT credential-unresolvable. Audit: /mnt/storage/scratch/gyro-q195-ci-queue-audit.jsonl. No credential fallback or CI-green claim.
2026-10-22T23:09:38Z | Gyro Q195 O2 fenton-0006 fixes | Before: e012bab0b left stale-source ambiguity, incomplete migration/shipping ownership, undefined typing transactions and an unmeasured CSP gate. After: D12 explicitly routes superseded-source/C2 reply notices to Mos/Jason and refuses adoption before W4b/notice path; Q2 remains open. F2-F6 add schema-edge placeholders and restore-accounting files, shipped runtime data/writing closure with no sandbox store mount, per-chapter DOCX and 2s-pause/15s-span save groups, volume/latency/growth gates, split-run clickable wikilinks and historical Obsidian graph warning, and S0 isolated existing-artifact CSP measurement before exact-header approval. Static ten-brief/ownership/settings/checklist checks pass. No build/browser run, product/queue/live change. Independent re-check pending.
2026-10-22T23:09:50Z | Gyro fenton-0006 push guard | identity gyro, purpose push, exit 0 documented degraded-pass CANNOT_ASSERT credential-unresolvable; audit gyro-q195-ci-queue-audit.jsonl. No fallback credentials or CI-green claim.
2026-10-22T23:10:14Z | Gyro mos-1358 ruling recorded | Q36 / Vikunja 562 keeps C2 superseded notices OPEN with Jason. Markdown adoption refusal until W4b PASS is now a separate settled Mos build-order ruling, not a Jason question. D12 and Q2 distinguish them; no notice build authorized.
2026-10-22T23:13:27Z | Gyro Q195 O2 fenton-0007 F7/F8 | Named human-only editor.saveGroupPauseMs=2000 and editor.saveGroupMaxMs=15000 with integer/range/cross-field validation and W3a UI/CLI refusal tests. W3b owns production adoption refusal until W4b; isolated fixture conversion remains testable without request-flag bypass. W4b owns adoption module/API tests and reviewed lifting only with committed-reader/citation readiness and, if Q36 approves, the separate notice row PASS. Q36 unresolved stays closed. Static ten-brief, setting-key/bounds, refusal/lift ownership and two-question checks pass. Docs only; no build, browser/worker run, product/queue/live change. Fenton checks F7/F8 on next push.
2026-10-22T23:13:48Z | Gyro mos-1359 / r3 push guard | D13 records save-group timing as Mos's accepted reading of Q226 F41, not Jason's ruling; both defaults remain human-only settings. Push guard identity gyro/purpose push: exit 0 documented degraded-pass, CANNOT_ASSERT credential-unresolvable; audit gyro-q195-ci-queue-audit.jsonl, no credential fallback or CI-green claim.
2026-10-22T23:23:42Z | Rocko, W4 #1799 | Before, D24-D26 had no separate exact DOCX citation/access contract. After, 15e91538f proposed a versioned schema, parser/story/view/refusal rules, live authorization/sharing and generic/git/session bypass closure, compatibility gates and 22 acceptance rows. Two JSON examples parse, diff check clean; no code or implementation acceptance. Megavolt review pending.
2026-10-22T23:55:11Z | Sage, W4 #1799 docs landing | Megavolt reviewed four rounds (CHANGES 15e91538f, 019a0ea5b, 54246cb32; APPROVE 994c3f7fb, #1799 c30868/c30870/c30876/c30884). Landed here as cherry-picks: docs/plans/2026-10-22_q195-docx-citations.md blob 2af460ab7 and docs/reviews/2026-10-22_q195-docx-citations.md blob bedde1716, both new files. 32 acceptance rows go to W4b; R4-N1 (re-migration after a pre-W4b restore keeps the rotated fence and needs owner confirmation) goes into W4b's brief and A32. W4 is design-approved only: its gate still needs Sage's W4b implementation brief, which waits for S0 (#1798) PASS. Q36 open, adoption closed. Docs only, no test reads these files.
2026-10-23T00:52:58Z | Gyro Q235-Q237 policy rewrite started, Vikunja 571, mos-1366/1367 | Before: approved O2 e36bce352 keeps Markdown originals at their paths and Q36 notices open; landed W4 2af460ab7 has the same boundary. Imported that byte-identical W4 baseline as 1ac76a417, from refactor 062646487, to make the policy-only revision diff explicit. Prepared P1-P6/B1-B4: human one-way per-story import, human-set source-repo archive, DOCX current reader, scoped format map/archived non-canon reads, W7 conversion publication after W4b/approved PRD/10-27 and Jason first-real-book go. Q234 exact CSP, mos-1363 and S0 M1-M14 retained. W4 locator/extractor, shares and restore-fence blocks compare byte-identical to the approved baseline. Scope/source review ongoing; Mos impact map must be folded before Fenton handoff. No build/browser/worker run, code, queue, private-book or live action.
2026-10-23T01:37:07Z | Gyro Vikunja571 final impact-map / mos-1372/1375 fold | Prepared parent/W4 rewrite against brain-redux d183246 impact map at stack 062646487. P1-P6/B1-B4 and engineering Q1-Q16 are mapped to eleven briefs. D9 replaces the earlier private O2-only context/per-document/share model: normal Case 2 access in any authorized thread/room, supporting writes intact, changed policy awaits PRD 1.17 approval. New DOCX story creation has the same opening gate as human per-story import. Host-only push to human-set off-host remote replaces the no-remote ban; remoteURL defaults unset and same-host bare is disallowed. W7 gates on Hermes #423 step5, W4b, PRD approval, post-10-27 and first-real-book go; owns conversion events COUNTED/--events/pre-conversion restore reconciliation, manifest order/next_chapter, creative role cite wording, archive/old-path edits and format/link/citation routing. Store+off-host acknowledgment precedes archive commit/push, then catalogue publication; post-push failures remain resumable pending with pinned source. Current checks pass: complete brief fields, policy/map coverage, exact Q234 CSP, locator/projection mechanics byte-equivalent except explicit authority wording, A01-A35 IDs, immutable map pin, four-doc scope and append-only logs. W4 authority/remote/recovery sections reopened for Fenton; older APPROVE not reused. No product/build/browser/worker/private-book/queue/live action. Earlier entry describing preserved shares/fence applies only to the pre-D9 intermediate draft; D9 now withdraws those unimplemented structures.
2026-10-23T01:37:55Z | Gyro 571 push guard | identity gyro/purpose push: exit 0 documented degraded-pass CANNOT_ASSERT credential-unresolvable, scratch audit gyro-q195-ci-queue-audit.jsonl; no credential fallback or CI-green claim.
2026-10-23T01:41:59Z | Gyro sage-3121 A1-A3 PRD alignment | Before: 8d209016b adds a current Connections graph, excludes new Markdown stories in converted books and defaults archiveFolder. After: parent/W4 align with PRD1.17 d6 sha256 886b93c571f87bfbb2f27ee3113b6800a32d8f89196d95ace33566031bee380a: clickable editor links only; graph/tests later pending J-b; new different-path Markdown in a converted book remains canon until import, only recreated converted old paths are unmapped; archive folder is human-set in library mapping with no default, missing folder refuses conversion. Static A1-A3/11-brief checks pass; W4 locator/extractor/access/remote/recovery blocks unchanged. Local commit only, push held for Sage's named gap while Gizmoduck holds 270+271 run5. No product/build/browser/worker/queue/live action. Fenton gets local SHA through shared object store.
2026-10-23T01:49:08Z | Gyro fenton-0012 B1/B2 and N1-N6, mos-1379 | B1: off-host remote must deny the real shared jason.woltje seat-helper credential as well as seat identities until #431; private visibility/dummy-token denial is insufficient; W3b/A16/A26 require that future fixture proof. B2 follows mos-1379: human-only editor.agentReadComments and editor.agentReadTrackedDeletions both default false, comment/original/markup reads/resolves/index/context refuse when off; final access remains D9 and no role allowlist/per-document grant. N1 staging-ref allowlist and retained private refused/published audit refs; N2 URLs literal with fidelity-report loss and confirmation; N3 future paths marked new or predecessor row; N4 rename/sharing wording fixed; N5 historical thread text not refreshed; N6 protected VM1012 backup cited in P5. Static checks pass, locator JSON/package/projection mechanics retained. Local commit only; HTTPS push still held for Sage's named gap. No credentials tested/read/printed, no product/build/browser/worker/queue/live action. Fenton gets exact local SHA/blobs.
2026-10-23T01:53:25Z | Gyro fenton-0013 N7 mixed-format chapter order | Fenton approved local 0f4fa4f93. D10 now explicitly orders every chapter ID regardless of Markdown/DOCX format, inserts new canon Markdown by row216 or human committed order, and preserves ID/position at import. W7 tests cover mixed traversal/insertion/import stability. Static diff/append-only checks and docs hook pass. Local commit only, narrow re-check requested, HTTPS push still held for Sage gap. No runtime, queue or live change.
2026-10-23T02:21:06Z | Sage, rows 270+271 landing, 571 landing, MVP rows | Before: 270 (#1775) and 271 (#1776) were approved on gizmoduck/row270-271-r4 49cee846e and 2b964a082 after combined gate C2 run 5 GREEN on 53406f3e4 (bus 873, seat 202, cli 905, ten scripts, 38/38 mutants). After: 33 commits cherry-picked onto 767bb62c7 as 7328da8ca, range-diff all "=", 40 paths identical to the candidate; 270 manifest f4174458 matches, 271 manifest 3ab1f5c8 matches on 29 paths, the other 4 moved under 270 and match its manifest. Done revs 3396/3398, #1775 c30962 and #1776 c30964 closed, P19 463 c861. 571 (Gyro, Fenton APPROVE) picked as ee5f7b9ef, 6345aae3d, 767bb62c7 (blobs 9382f85b, 7ec0897b), 1ac76a417 left out; N7 911dad2aa (Fenton-0014) picked after. Rows 293-299 added (574, FED R6, R4, R7, GitHub grant, Q228, 573), queue commit 253346e3c. Correction: the push sync step checked out O..S paths over the canonical worktree without testing for uncommitted edits, so any pending SESSIONS or BUILD-LOG line in the canonical checkout at 02:06Z would have been overwritten; the sync now skips edited paths. Schema 3n is not live (LIVE 0cbe2e9b3 at 3m).
2026-10-23T03:59:52Z | Sage, row 293 (Vikunja 574) landing and 3m-3n live window | Before: live 0cbe2e9b3 at schema 3m; 574 approved by Filbert (c30982, cdda41f5) on gander/v574-r2 a9cae2bd6 after run 2 GREEN on 6bfab273b (four files 153/0, seat 202/0, cli 905/0, 312 flagged commits with 0 maintenance children). After: Darkwing's window put live on 464010fbe at 3n (activation 20261023T034557Z-464010fbe4c6, 26/97/5/28, Console 7332 200, W9b pm ra38826f3c6e2 left live, STATE darkwing/window-migrate-3n 8708927e5); 574's six commits cherry-picked onto 464010fbe as e51d11640, range-diff all =, patch-ids equal, only docs differ from a9cae2bd6. #1805 closed c31013, P19 386 c887 and 574 c888. Residual: queue store.mjs, discord git.mjs, harness tools.mjs commit without the maintenance flags; no whole-root test covers them yet.
2026-10-23T05:47:17Z | Sage, row 292 (#1797) landing, idle-stop race row 302, rows 300/301, row 294 rounds 2-3 | Before: refactor 4a9c536e8; 292's gate on 0d0021454 hit one red at compactions-launch.test.mjs:229, ['session-invalid',22,null] where ['stopped',0,null] was expected, product and test unchanged. Gizmoduck read it as a race: threadIdle releases the claim, then the launcher sends SIGTERM, and a runner call in between gets not-holder and exits 22. Mos (mos-1411) rejected loosening :229, let 292 count one whole unedited green cli rerun, and allowed one rerun for that exact signature on other gates until the race row lands (hits logged on Vikunja 588). The 10-run diagnostic passed 10/10, but one runner log (r846b8d083502) showed not-holder then exit 22. After: the cli rerun was 910/910. 292 LANDED 6aab979e6 05:18Z (7 cherry-picks, range-diff all =, patch-ids equal), done rev 3447, #1797 closed c31038, Vikunja 588 c891. Briefs 86d5ac69b (R6-N1 #1807, R6-N4 #1808, rows 300/301) and e3ef1eaf6/fdedc56e2 (race, #1809, row 302). Row 302 design d1/d2 approved by Dewey with D1 (role.claim refuses a released run), c31044. Mos ruled landRelease folded in, code launcher-released, and four old-test lines moved to exact values (mos-1414/1415/1416): threads.test:394, runner.test:771-772, land.test:464. Row 294 round 2 stopped at webui G5 granted-user.test:269: max(seq) over an empty events table is NULL. Round 3 is one line, coalesce(max(seq),0) (mos-1417), Duckworth APPROVE c31045 rev 3462, gate pending. Queue commit 756284e8e (revs 3448-3456). Correction: two review-request attempts this window ran without MOSAIC_GITEA_CREDENTIAL_FILE exported and failed (3450 Launchpad, 3451/3452 Sage); the posted request was 3453/3454.
2026-10-23T07:11:43Z | Sage, row 294 (#1800) rounds 3-4 and landing, row 219 edits 2-3, R9 transient and row 303 | Before: refactor 09d0d6faf; 294 run 3 on cb1648f3 stopped with 20 cli reds from two causes. A: the stack-release rehearsal fixture copies lacked cli access.mjs and transport.mjs, which 294's config.mjs now imports. B: the B1-B3 boot tests read warnings that now carry the fixture tracker line. Mos ruled A as two copy-list entries and B as a full pin, no filter: a TRACKER const and deepEqual (mos-1419). After: round 4 8616b9a4f, manifest a1ff5d67, Duckworth APPROVE c31053 rev 3469 with C1/C2. Run 4 from npm ci green: webui 365, cli 909, bus 873, 10 scripts, M1-M11 killed. Merged tree d3059c2c3 (11 cherry-picks, range-diff all =, patch-id 8371405a equal): stack-release-external 25/25, stack-upgrade 21/21. stack-release 223/224 on the first run, R9 at :2178: TypeError on join(r.dir) with r.dir null, so rehearse stopped before its directory and the output was lost. R9 passed 6/6 run alone on d3059c2c3, 09d0d6faf and 24b745447. Mos (mos-1422) allowed one unedited whole rerun: 224/224. 294 LANDED d3059c2c3 07:04Z, done rev 3471, #1800 closed c31068, P19 269 c895. Row 303 (#1810, Vikunja 589, brief ad6ca7930) adds an r.dir guard in R9 only. Queue commit 80793d824 (revs 3464-3473). Row 219: Rocko's second edit 7cbd839d0 (mos-1418, Dewey dewey-0883) restarted and went red at thread-launch C2-09a :489 on a legacy history path. The third edit 5f2ef92e5 (mos-1420, Dewey dewey-0885) reads the native session path. 219 now rebases onto 80793d824, because 294 overlaps its webui files. Correction: the first merged-tree check counted on the 292 drift and found an unrelated transient, and my P19 placeholder sed also rewrote the script's own guard line; the guard refused to post, and I restored the line before posting.
Row 299 (573, #1806, Gander, Filbert): before, the P10 band test timed a fault run minus a separate baseline run, and a loaded whole-suite run went red. Mos approved direct timing from host /proc/uptime stamps with ambient load only (mos-1409). After: rebased onto 80793d824 as ffa93b054 (range-diff 3/3 =, manifest 277ace0b unchanged). Gate 07:26Z-07:50Z: case1 whole 3x 53/0/0, cli whole 917/0/0 (59 files, load 1.54-7.17), P10 inner 2.27 s, outer 4.01 s, M1-M6 killed. M4's planned guard return then exact outer-reason failure counts as its kill (sage-3271, mos-1426). Filbert APPROVE c31084 rev 3485, N1 M1 margin 0.02 s. 299 LANDED ffb2fedfb 08:03Z, done rev 3487, #1806 closed c31087; queue commit 8a35ffadb (revs 3474-3487). Row 303: Duckworth APPROVE c31079 rev 3480 with C1, the whole-file gate. Rows 219 (bfa421b6c) and 295 r2 (b16cef1d0) rebases: Dewey static clean. Corrections: Launchpad and Gander have no token, and the CLI refuses another seat's token file, so I posted both requests as sage (c31082, c31083). My sage-3265 wording led Duckworth to poll queue show into Gander's slot (07:20Z-07:26Z); I ruled it ambient load (sage-3274).
2026-10-23T10:48:40Z | Sage, rows 302, 295 and 219 landings, the Docker pool diagnostic, rows for Vikunja 590 and 591 | Before: refactor 1ac655005. 302 (#1809, Gizmoduck, Dewey) LANDED 3ed9fd754 08:49Z: 7 commits onto 1ac655005, range-diff all =, tree = gated merge 783602e06; queue commit 07802dc57 (revs 3488-3494). Row 219's gate went 11/3 in test-release.sh: release activate's health check failed because Docker could not create sage-diag1437_default, since all predefined address pools were used up. Under mos-1437 I reproduced it on clean 07802dc57 (11/3, the same stderr). I then removed 18 unused gate _default networks, and the rerun went 14/0 with the run-task marker ok. Mos accepted the removal and ruled that a probe that can create something waits for the go and a removal waits for the report (mos-1438). 295 (#1801, Morgana, Dewey) round 2 gate on d68b4300d (manifest e94c9aeb) was green. It LANDED 2efd127ce 10:10Z: 9 commits onto 07802dc57, HEAD~1 tree = gated a86592ffc. Done rev 3502, #1801 c31105, P19 414 c911. 219 (#1720, Rocko, Dewey): the restart on the post-295 merge 054da642f (manifest 4a2271dd, my mos-1439 call) passed node 2523/0/2 and shells 449/0, with 24 mutants killed. It LANDED 5fdfd7275 10:40Z (8 row commits plus packet-only evidence, tree e86a84a85 = gated). Done rev 3509, #1720 c31110, P19 416 c913. Queue commit 90633c864 (revs 3495-3510). Brief docs/plans/2026-10-23_gate-env-rows.md names rows for 590 (claude-session slug) and 591 (compose network cleanup), and DEFERRED.md gets 219 N1 (U6). Row 272 (Huey) conflicts with 5fdfd7275 in code, so it moves back to in-progress for a rebase. Its new fallback is bounded to a session.list access-refused on an omitted-session route (sage-3357). Corrections: my network create probe ran before Mos's go, and the removal ran before the report. My first slot-order line put the diag start at 09:44Z; it was about 09:41Z. My 219 push piped its output through grep, but the after-fetch confirmed origin. Queue commit 90633c864 also carries Huey's rev 3510 (272 back to in-progress), and its message names only 3495-3509.
2026-10-23T11:03:46Z | Gyro Vikunja571 mos-1444 PRD d8 follow-on | Branch gyro/editor-571-d8 from origin/refactor c16e943b9. Both designs now keep library.convert outside ACTIONS/ROUTED and broker processing, retain REQ-WAIT-1/hard-wait test unchanged, constrain unmarked story eligibility to mapped book/playground scope, and add whole-host pre-import restore recovery from remote import manifests plus the Gitea archive commit. Lookups refuse until one current version is proven; VM1012 restore needs Jason present under Q185. W7 no longer owns hard-waits.test.mjs. Canonical queue next gyro returned nothing; direct Mos assignment governs. Static diff, exact replacement and append-only checks pass. No code, tests, build, browser, private-file or live action. Fenton re-check requested after authorized branch push.
2026-10-22 | Huey | Row 272 / 264e (#1777) preparation on huey/row272, base 2d0d407ba. Before: bus session metadata and launcher isolation exist, CLI/Console expose only the saved thread default. Draft: session CLI, Console chooser with isolated drafts/cursors/receipts, metadata counts and safe-clear operation receipts against Gizmoduck's 0260 contracts; narrow deferred B6 reply fence. Tests authored, not run: Gander row 253 holds Sage's slot; no Node, claim, HTTPS git, push or live changes. This entry records preparation after the first draft, not a green acceptance result.
2026-10-22 | Huey | Row 272 draft, 264d additive contract gizmoduck-0272 (78e14352f). Added confirmed cancellation through the human channel, cancelled receipt retirement distinction, named refusals and routed-message cancellation output. Before: cancelled was not recognized as terminal; after: draft CLI stops polling and Console shows the before/after retirement outcome. Acceptance remains unverified: no Node/tests/claim/commit/push under Sage's gate. No runtime/lifecycle authority expanded.
2026-10-23 | Huey | Row 272 / 264e sage-3141 local rebase. Before: uncommitted draft on 2d0d407ba. After: same draft on new huey/row272-b23783f39 at b23783f39, with 270/271 landed (7328da8ca) and schema 3n. Product changes auto-merged; both append-only logs retain the full new base and original Huey additions. Checked landed session.list and clear/cancel/operation envelopes against the wired draft: no incompatible contract change. Historical unavailable-dependency cases stay as stand-ins; actual base supplies counters and lifecycle state. No tests/Node/claim/commit/push while Gander holds row 574 run 2. Existing-test fixture/assertion delta is named in the packet for Mos's ruling via Sage before execution.
2026-10-23 | Huey | Row 272 sage-3145 preservation correction. refs/stash is shared, so it was unsafe as sole draft storage. Pinned exact stash commit 07dc9d2f7944b4781b5e80dfa18425f4749f7a45 to local huey/row272-stash-keep and left the entry untouched. Sage explicitly directed committing the rebased draft before testing to preserve it: an untested local checkpoint, no acceptance claim. No Node/test/queue/network/live action. Separate claims and test CLEARs remain pending; old-test delta is with Mos via sage-3144.
2026-10-23 | Huey | Row 272 early static review follow-up, scrooge-272-early-read-huey-1. Before: a bad-session 404 erased sibling draft/recovery caches, malformed clear/cancel write receipts omitted the audit line, and another session's op key produced an ambiguous error. Draft after: purge only on named thread-level refusals, write one redacted malformed-receipt audit line, and identify key reuse without a write. New browser/HTTP/CLI tests authored, unrun under test hold; approved old-test hunks unchanged. Published 850b22680/round-1 manifest unchanged; follow-up is uncommitted, no acceptance claim.
2026-10-23 | Huey | Row 272 round 2 on row 219 landing 5fdfd7275, after 295. Replayed round 1 and B1/N1/N2; seven conflicts resolved retaining both log histories, both test sets, 219 instance chooser and 295 owner-settings-only transport. Static comparison confirms old tests differ only by mos-1388 approved hunks. Sage3357/Mos1442 authorize bounded granted-user legacy fallback: only session.list access-refused and omitted-session route; no new session grants or owner routing. RED first under3358 on new file only: 1 expected legacy assertion failure, 3 guards pass, 3.504s, TMPDIR mktemp/no underscore, no compose network; slot returned as huey0035. Then implemented fallback and added timeout/bus/malformed guards plus isolated-copy mutant runner, all unrun afterward. Candidate commit/push precedes Sage's full gate by3354; no green claim.
2026-10-23 | Huey | Row 272 round 3 per mos-1455 / sage-3435. Gate run 1 on b44332a93 RED: bus 891/0, business 231/0, CLI 940/1, plugins 110/1, webui 372/20; no mutants. Fixed only new CLI fixture role authority and three null-old render guards. Catching browser tests unchanged. manifest.r3 freezes the same 17 paths. Authorized pre-gate follow-up commit/push; no local tests, Node or queue writes; separate compactions dependency and Sage gate remain pending.
2026-10-23 | Sage (1ef1e4f8) | Row 272 landing (#1777, 264e) | Gate r4 on bea0c8e1c over 1e629c892: bus 891/0, cli 941/0, webui 392/0, business 231/0; plugins 110/1, the single red being row 65 harness.test.mjs:192 naming compactions.mjs, which row 307 owned and fixed. M1-M6 and F1-F4 killed, restore clean. Landed d33989230, queue commit 8dc132bec.
2026-10-23 | Sage (1ef1e4f8) | Row 307 landing (#1814, Vikunja 598) | Six first-parent commits replayed onto 8dc132bec with matching patch-ids, 16 paths equal to 6fdfe3790, manifest digest 17c9f8d9 rebuilt from git. Gate green 14:37:21Z: bus 891/0, cli 941/0, plugins 119/0, webui 392/0, business 231/0, every other package 0 failed 0 skipped, every scripts/test-*.sh passed (skips: test-queue canonical root, test-task live provider x2). M1-M4 killed, restore clean. Landed d243f6b25, DEFERRED 307 N1 0621c439e, queue commit fe4ee8c7b. Correction: my first note said Vikunja 598 done when I had only commented (951); Mos closed it (952).
2026-10-23T17:29:46Z | Gyro Vikunja571 sage-3542 Connections amendment | Branch gyro/editor-connections-design cut exactly from landed PRD1.17 30e6bb680; read REQ-LIB-5 in that PRD. Replaced stale J-b waits in parent and W4. Proposed W8 owns current authorized Markdown/DOCX links/backlinks list, labels, versioned refresh, leakage refusals and fixture tests. Build order under mos-1470/comment961 is W7 closed routing candidate, W8 landing, then W7 human first-real-import opening. No REQ-LIB-8 condition or acceptance change. Q234/mos-1363/S0 M1-M14 and post-10-27/MVP priority fixed. Static diff, twelve brief sections and append-only checks pass. No repo Node, tests, build, browser, queue mutation or live action. Fenton reviews after authorized docs branch push; Sage lands on approval.
2026-10-23T17:32:37Z | Gyro sage-3544 fenton-0016 N1/N2 delta | Before: W7 Gate/final real-conversion list omit the W8 build-order cross-reference and W8 human-view filtering cites agent settings. After: both locations explicitly put W8 landing before human opening as mos-1470 build order, not acceptance; comment/tracked-deletion links are not current story links and never appear in the human Connections view regardless of agent settings. New commit atop approved 5af060fb5, no amend. Static diff and append-only checks pass. Docs only, no repo Node/tests/live action. Fenton checks only this delta.
2026-10-23 | Gladstone | Gitea #1816 / Vikunja 614 hostcheck item 5 and bundle verification | Before: dpkg's correct 750 form falsely fails item 5, and two run-sheet bundle verifies require a missing repository. Draft after: exact root/mosaic/path with octal 0750 equivalence; stat/output unchanged; both verifies use cleaned-up bare scratch repos. Three additive-only test blocks, two planned mutants. Untested under Sage-3738; Sage-3740 authorizes untested branch push for static review. Queue row pending; Sage owns gate and landing.
2026-10-23 | Gladstone | #1816 / Vikunja 614 scope amendment mos-1534, sage-3741 | F1 narrowed to exact 750/0750 and single spaces; F3 allows @ in absolute unit paths with unsafe-character refusals retained; F4 moves copy_tree to / after path resolution. AS_USER audit found git -C and stack-release's existing checkout cd cover the other steps. Added new unit and unreadable-cwd copy tests only. Untested under Sage's no-Node hold; no live action.
2026-10-23 | Gladstone | #1816 / Vikunja 614 F5 draft (mos-1536) | Before: the run sheet omits the explicit notify decision and precheck misses a bus-start refusal. After: section 9a creates a private null-binding decision as mosaic; precheck directly reuses readNotifyConfig and private_dir, and new tests cover accepted and refused decisions. Existing fixture setup additions await Mos approval through Sage; installer unchanged. Untested under no-Node hold.
2026-10-23 | Gladstone | #1816 / Vikunja 614 fixture ruling mos-1537 | Added only three setup lines each to host(t)/world(t) for the explicit null notifier decision. Existing assertions/fakes/lines intact. New install test checks decision bytes/mode preserved and missing decision remains absent. F5 missing-file fault removes the setup file. Untested under Sage's hold; separate follow-up atop 33950cf9b.
2026-10-23 | Gladstone | #1816 / Vikunja 614 F6 and notify parent (mos-1537) | Before: the run sheet's copy check lacks its required CLI wrapper; mkdir -p -m does not guarantee the notify parent mode. After: a separately Mos-gated wrapper --create step follows install and precedes check, as mosaic from cwd /; section 9a explicitly creates both notify directories at 0700. Docs only, no live action; Node/tests still held.
2026-10-23 | Gladstone | Row320 / #1816 first review CHANGES (morgana-0217) | Reviewer run: hostcheck19/19, unit47/47, install24/24, copy17/18; seven of eight mutants killed, M4 survived because both base/mutant failed only cleanup. Fixed this row's F4 test to enter cwd then chmod000, assert no read/search, pass an absolute outside bundle, and restore0700 in finally. Existing tests/setup and production scripts unchanged. Correction untested locally pending Morgana's focused rerun; no acceptance claim.
2026-10-23 | Boyd | Row 298 (#1804, Q228), before implementation completion | Took over Megavolt 7a141269c on boyd/row298 at 45dca69f6 under mos-1496/1502. Approved D1-D6 govern human-only grants.scope.set, empty fallback, in-scope close/evidence and spend recheck. All inherited code UNTESTED; no Node/tests until Sage CLEAR. Plan and static gaps recorded in agents/boyd/work/queue-298/BUILD.md; no live grant or credential access.
2026-10-23 | Boyd | Row 298 (#1804, Q228), targeted verification | On sage-3642 T1 lane B, five whole files serial: business scope 7/0, bus scope 14/0, scope runtime 1/0, CLI scope 4/0, project runtime 3/0 (29/0, no skips). Initial bus fixture typo recorded and corrected. M1-M10 killed by named assertions, source restored and final files green. Dewey dewey-0933 positive control and notes addressed; manifest and evidence in agents/boyd/work/queue-298/BUILD.md. Full package/script gate remains Sage's. No live scope set.
2026-10-23T22:41:07Z | Boyd | Row 298 (#1804), rebase after row 239 | Rebased onto 833ec1cc8d7c11842efb82e57c1a0b256c8d22d7 on boyd/row298-r2 without altering published boyd/row298. Only append-log conflicts; upstream bytes preserved and Boyd suffixes appended. Product merges automatic; row 239 writer-lock revoke and post-revoke error handling preserved, organization.mjs unchanged from new base. Static checks only; UNTESTED on new base pending Sage CLEAR. Details in Boyd BUILD.md.
2026-10-23 | Goldie | Row 322 / #1818 F8/F9 before | The library installer runs the clone importer, whose yaml dependency is absent on fresh clones, and tail -n 1 hides uncaught errors behind Node's version banner. Plan: run the same-commit copy importer, include it in COPY_PATHS, keep the first error line with last-line fallback, append isolated regression coverage. Mos-1550 approves setup-only world(t) additions and the one-path copy-file pin addition. No tests run yet; Sage slot required.
2026-10-23 | Goldie | Row 322 / #1818 F8/F9 after | Importer now runs from the same-commit dependency-equipped copy; COPY_PATHS includes it. One-line refusal selects an actual Error/ERR_ line, avoiding Node's source excerpt/banner, with last-line fallback. Mos-1550-approved fixture setup and one-file pin changes; two append-only regression tests. Under sage-3808 CLEAR, serialized timeout -k 10 runs in /mnt/storage/scratch/tmp/goldieuQ2664: install26/26, copy18/18, pinned-copy10/10; new tests2/2 first run and restored; N installer expected-red2/2, F8 and F9 mutants killed, installer SHA256 restored each time. No unexpected red. Evidence and exact old-test changes in agents/goldie/work/queue-322/BUILD.md; full gate and Morgana review belong to Sage.
2026-10-23 | Goldie | Row 324 / #1820 before (Q247, mos-1555) | New branch goldie/row324 at row298 approved860afc2b6. Design/readers audit in agents/goldie/work/queue-324/BUILD.md: normalize omitted tracker to null, preserve present validation, guard sync readers/adapter config; runtime/instance-settings/broker checks already optional. Existing business.test.mjs98 explicitly requires tracker, so implementation held for Mos approval of removing that one list entry; no old test or product edit, no tests run.
2026-10-23 | Goldie | Row 324 / #1820 draft built (sage-3836, mos-1556) | Claim rev3759. Omitted tracker normalizes null; present including null/malformed stays validated. Loader, business validate, bootConfig trackerFor and Console sync reader handle absence. Row298's guarded runtime/instance-settings/broker paths preserved. Two new test files (9 planned tests); sole old-test edit drops tracker from required-key list under mos-1556. node --check6/6 and diff check pass. No tests run: untested branch push expressly ordered before CLEAR; Duckworth review and Sage gate pending.
2026-10-23 | Goldie | Row 324 / #1820 rebased verification (sage-3850) | Rebased onto3569bf54f as7e59ba8b3; only append-log conflicts, eight manifest files byte-equal. Serialized timeout-k10 scratch TMPDIR goldieOdgIjr: new business5/5, new CLI4/4 (includes Console absent read), existing business21/21; presence mutant killed, bytes restored, new files rerun5/5 and4/4. No unexpected red. Published rebased branch goldie/row324-r2 preserves original remote draft without force-push. Evidence/mutant diff/reader list in BUILD.md; review/full gate pending.
2026-10-23 | Goldie | Row 323 / #1819 before | Case 1 lacks a committed business file. Brief requires actual .53 values and refuses guessing. New branch goldie/row323 from local refactor da537e7d1; source review shows project root, literal human id, tracker sync identity/reference metadata and launch model values absent from DESIGN, plus nonempty launch.instances requires another role. Asked Sage (goldie-0008); no config or test written, no test run. Details agents/goldie/work/queue-323/BUILD.md.
2026-10-23 | Goldie | Row 323 / #1819 static blocker (sage-3823) | Mos-1554 requires no bot and an absent, never-created tracker token path. Static tracing confirms this refuses install validation (business cli84-97, credentials78-83) and bus boot (runtime131/157, bus credentials225-228), even without tracker.baseUrl; unset env also refuses at bus credentials278. Reported Sage goldie-0009; no JSON/test/credential written, no tests. Accepted source values/role and refusal-test rulings are recorded in BUILD.md; waiting for product-boundary resolution.
2026-10-24 | Goldie | Row 323 / #1819 resumed draft (sage-3859) | Rebasing prior notes onto Q247 landing dd6cb5872 resolved only append logs. Added trackerless .53 factory JSON: jason, approved project root, chief+assistant for required nonempty launch.instances, claude-code/Opus5.5/high, tester on. No credentials or token placeholder. Seven new tests prepare exact-doc loading plus scratch real validate/install/boot and three refusal paths; one restoring tester-switch mutant prepared. No old test edits; no tests before Sage CLEAR. Source choices/rulings in BUILD.md.
2026-10-24 | Goldie | Row 323 / #1819 pre-test commit (sage-3861 CLEAR) | Sage explicitly requests commit before runs; JSON/new7-case test/restoring mutant and field provenance committed untested before slot work. Exact sources distinguish mos-1554 human/no-bot intent, sage-3820 roles, sage-3822 project/model, and Q247 tracker omission. No old test edits. Next runs: new file, business whole, CLI whole, mutant/restored file, serialized scratch TMPDIR timeout-k10.
2026-10-24 | Goldie | Row 323 / #1819 first slot STOP (sage-3861) | On committed571376c30: new file7/7 and business261/261 green; whole CLI hit unchanged revoke-window.test.mjs170 (test579, row306 R4), no RESULT after20.1s at ask167/Promise.all194. Stopped suite on observing red, cleaned only positively identified own scratch fixture. Partial631 pass/1 fail before termination, not full-suite green. No mutant/restored run, no old-test edit/rerun. Manifest unchanged; Sage notified goldie-0016 and slot returned. Evidence local under queue-323, awaits ruling.
2026-10-24 | Goldie | Row 323 / #1819 second red STOP (mos-1560, sage-3864) | Isolated revoke-window whole-file run1 on unchanged571376c30 failed0/1 after20.126s, same no RESULT at ask167/test194. Start00:24:22Z, load1.46/1.68/2.70, busyhelperCLEAR, fresh scratch goldieBObDQ9. No run2/3/CLI retry/mutant/restored run; no source/old-test edit. Sage goldie-0018 has log/load/error; slot returned, awaits base-dd6cb5872 root cause. Remote remains unverified571.
2026-10-24 | Goldie | Row 323 / #1819 accepted evidence (mos-1561, sage-3869) | Sage traced revoke-window reds to37-byte TMPDIR making109-byte tools.sock >107 limit (session.mjs278), not Codex. Fresh31-byte /scratch/tmp/XXXXXX confirmation passes1/1 in0.84s. On unchanged571376c30 serialized timeout-k10: business261/261, new7/7, tester-switch mutant killed/restored SHA85e6b9ac, restored new7/7. Every log starts UTC/load/helperCLEAR; all positive runs0 fail/skip/cancel. CLI whole acceptance comes from Sage gate under mos-1561; no local CLI rerun. Evidence-only notes/log commit follows, no old test/source changes.
2026-10-24 | Goldie | Row325 / #1821 before (mos-1563/1564) | Real .mosaic/project.json idstack disagrees with Case1 project's mosaic-stack key; row323 scratch fixture omitted project file and only warned. New goldie/row325 at99930362e changes only that JSON key and expressly authorized old assertion key; new real-byte project-copy validation tests require valid and reject old key. Mutant prepared; no tests before Sage CLEAR, no queue writes/host actions.
2026-10-24 | Goldie | Row325 / #1821 after (sage-3882 CLEAR) | Only Case1 projects key becomesstack; only old test70 expected key updated under mos-1564. New3-case test copies real .mosaic/project.json bytes, requires CLI project valid, rejects old key. Serialized shortTMP timeout-k10: new3/3, business264/264, old-key mutant killed/restored SHA9e43bfef, restored new3/3; all positive0 fail/skip/cancel. Manifest4/4 verifies including unchanged project document. Logs/load lines and mutant diff in BUILD.md; no queue writes/host action, Gladstone review/Sage gate pending.
2026-10-24 — Poe, row 208 / 193d (#1706), before: building Console shared list,
share controls and per-grant viewer read-only against approved design e2d161e2e.
Base ec86f2c84. Isolated tests and UI-guard mutants pending Sage CLEAR; no live action.
2026-10-24 — Poe, row 208 / 193d (#1706), after: Console shared list, share/unshare
controls and live per-grant viewer UI implemented. Webui 418/418 and plugins
119/119 green under sage-3925 CLEAR; four UI guard mutants killed with viewer
bus bypass refusals. Prior old-test draft regression fixed under sage-3918;
missing root oauth4webapi corrected by pinned npm ci under sage-3924. Evidence:
agents/poe/work/queue-208/BUILD.md. Independent reviews and Sage's global gate
remain; no live state, schema or bus policy change.
2026-10-24 | Goldie | Row265 / #1770 before, recorded during authorized verification | C2-09b has no project room verbs. On goldie/row265 at ec86f2c84, add only room.open/send/read, pure exported leading-tag parser, README verb rows and new bus tests. Sage-3921 fixes EOF-tag and message-only timestamp readings; tester list/helpers/schema stay unchanged. Claim rev3814; Sage-3932 CLEAR for serialized new files, whole bus and twelve refusal mutants. No old-test edits authorized; stop rules apply.
2026-10-24 | Goldie | Row265 / #1770 first slot STOP (sage-3932) | New parser14/14, rooms18/18 green; serialized bus stops at old project-runtime.test.mjs:14 import-closure pin, partial619 ok/1 not ok. New pure address.mjs import is absent from expected imports. Static trace also needs address.mjs in seat RUNNER_FILES. No old-test/product correction, no mutant/restored run, no green commit/push; old-pin and out-of-owned-files mount change sent to Sage for ruling. Audit prose missed the direct source pin despite raw grep hit; correction recorded in BUILD.md.
2026-10-24 | Goldie | Row265 / #1770 verified (mos-1567, sage-3942) | Approved correction adds solely address import pin + Row265 comment to project-runtime.test and one pure-source RUNNER_FILES mount; new block checks parser has no imports. Serialized fresh-short-TMP timeout-k10: unchanged sandbox10/10, parser15/15, rooms18/18, full bus957/957, twelve named refusal mutants killed (each Node1, driver0), restored parser15/15 + rooms18/18. All positives zero fail/skip/cancel; every mutation restored full broker SHA71b32ee4. Old first-red evidence retained, no other old-test change. Slot returned goldie-0034; Boyd packet explicitly includes mount-list review, candidate push next.
2026-10-24T07:18:53Z | Sage | Row 327 (#1825, Bradford, Poe and Dewey) LANDED 68c08b4e7. Before: refactor at 94d9e90a6; the push guard was a scratch script with no reviewed-binary check. After: scripts/push-check.sh and scripts/test-push-check.sh on refactor, 3 commits cherry-picked onto 6a5e12511 with blobs equal to the round 3 tip d858c9f8b, plus doc commits 76f84465f and 68c08b4e7. Binaries are found by numstat or a NUL in the first 8000 committed bytes, regardless of attributes; each needs its sha256 and path in an approved latest-round candidate; an unconfirmed queue tail exits 2. Reviews: Poe c31525 rev 3882, Dewey c31526 rev 3883. Gate: 1st run 06:57Z RED, not the candidate: canonical node_modules was empty from 05:45:15Z (sage-4023). Rerun with its own root npm ci GREEN 07:15:49Z: 17 package suites 0 failures (cli 986, plugins 119, webui 418), 11 scripts exit 0, push-check 6 mutants KILLED; skips are the queue canonical-root check and the row 244 live provider cases. The landed push-check.sh passed its own push (NO_BINARY, NO_ATTRIBUTION, PUSH_READY). mos-1575: gates install their own node_modules; canonical restored with npm ci (128 packages).
## 2026-10-23 — Lena, row 296 / #1802 FED R7 start
Before: R4 and R6 landed in base 45dca69f6; no scratch two-instance acceptance script.
Plan: preserve Quackerjack handoff c6ab9bdc9, add isolated script/CLI test harness with real
Console proof in transient user services, map assertions and two mutants for Filbert.
Untested: all Node/tests and shared gate wait for Sage CLEAR; no production or live state changes.
## 2026-10-24 — Lena, row 296 / #1802 scoped acceptance verified
After: lena/row296-r2 rebased onto e0c6142f3 with both append logs preserved and row source
unchanged. Own root/webui npm ci (128/2 packages), canonical dependencies untouched. Sage-4035
slot: plain acceptance 1/1, killed-driver cleanup expected exit1 with cleanup verified, M1/M2
both killed by named assertions with product hashes restored, whole new file intentionally
skips outside its script. No unexpected first-run red, no old test change, no full/shared gate
claim. Receipts and limitations in agents/lena/work/queue-296/BUILD.md and run-r2/.
2026-10-23 | Beakley (88b97f65) | Row 217 #1718 takeover, before implementation | Clean base 45dca69f6 on beakley/row217. Recovering Launchpad handoff for citation guard, live settings, page store and runner retry. Acceptance is C2-06/design 5.2 plus sage-3595/3599/3602. Tracking agents/beakley/work/queue-217/BUILD.md; no product changes or Node/tests; Sage CLEAR required.
2026-10-23 | Beakley (88b97f65) | Row 217 #1718 untested draft checkpoint | Continued Launchpad e25ef0373; added runner retry/text/note implementation, pure protocol constants and sage-3640 approved single read-only mount, CLI documentation and new acceptance test files. Static checks caught missing projects compatibility, async request mutation and Git pathspec matching; bounded fixes and regression tests authored. git diff --check clean. No Node/test/mutant executed; Sage holds CLEAR. 283/216/285 dependency checks and all acceptance execution remain open. Packet agents/beakley/work/queue-217/MANIFEST.md.
2026-10-23 | Beakley (88b97f65) | Row 217 early-look follow-up, Untested | Webby 0939c0682 E1 adds ordinary mallory human-swap test; E2 adds stored trailer-derived agent/file event evidence; E6 creative-sender matrix and E7 runtime readRaw tests authored. Sage-3668/3670 accepts direct writer substitution because setter keys exclude replyLimits (organization.set exists, correcting review premise), and requires distinct availability refusal for E4. Real held-lock/socket and runner-reason regressions plus M5 authored before that production fix; expected RED awaits Sage CLEAR. No Node/tests/mutants, no old-test edits, no green claim.
2026-10-24 | Beakley (88b97f65) | Row 217 round 2, sage-4037 | Rebased published dde5b8496 onto e0c6142f3 on new beakley/row217-r2; both append-log histories retained. Conflicts preserve landed grant dispatch, revocation hook and lookup exports. Added E4 citation-unavailable product path and real supporting-scope/index comparison tests after row283 8d2856ee3. Untested: no Node/npm/tests/mutants/build; ready for Sage CLEAR after Lena296. Full range-diff and honest discarded local rebase correction in agents/beakley/work/queue-217/BUILD.md.
2026-10-24T10:21Z | Beakley (88b97f65) | Row 217 round2 slot verified, sage-4042/4043 | Source 2d274a5b6: touched57/57, whole library142/142 business270/270 bus974/974 cli988/988 harness172/172 seat218/218, all zero fail/skip/cancel. M1-M5 killed, controls/restored controls green, product hashes restored after each; E4 RED stand-in observed. Only first-red was new runtime fixture invalid-authority, corrected and retained in receipts; no old test failed/edited. Local root/webui npm ci, short TMPDIR, timeout-k10; no canonical npm/rm or module link. Full evidence agents/beakley/work/queue-217/run-r2; Sage owns scripts landing gate and formal review.
2026-10-24T11:15:29Z | Sage | Rows 296 (#1802, Lena, Filbert) and 217 (#1718, Beakley, Webby) LANDED d0a6a87cd. Before: refactor at e0c6142f3 (local 98235fdb3). After: 296's 5 commits (range-diff 5 =, blobs equal b43156fd9 on 28 paths) and 217's 9 commits (5 = and 4 !, the ! are BUILD-LOG/SESSIONS append conflicts kept both sides; blobs equal 96659ccf4 on 79 paths) on 98235fdb3, with doc commits b19ffa04f and 98235fdb3. Reviews: Filbert c31547 rev 3896, Webby c31549 rev 3901. Gate: 1st run 10:57:16Z RED on one rule only, the gate's "cli skipped 0": 296's FED R7 test skips in the cli suite by design and runs only through scripts/test-federation-acceptance.sh, which passed 1/1 in the same run. Mos ruled that a RED gate doesn't land (mos-1583). The gate now allows a cli skip only from an explicit list (test file, test name, runner script) whose runner ran in the same gate with rc 0, at least 1 pass, 0 skipped and the named test passed; any unlisted skip stays RED; checked against a wrong-file and a runner-skip control, both RED. Rerun GREEN 11:14:53Z with its own npm ci: 17 package suites 0 failures (cli 989/988 pass, the allowed FED R7 skip; plugins 119; webui 418), every scripts/test-*.sh rc 0, federation-acceptance cleanup line present; skips otherwise are the queue canonical-root check and the row 244 live provider cases. push-check SECRETS_CLEAN, NO_ATTRIBUTION, PUSH_READY. #1802 closed c31557, #1718 closed c31559, Vikunja 533 comment 1054 (design task, left open for Q29). Row 286's approved manifest shares broker.mjs, runtime.mjs and library/src/index.mjs with 217, so 286 needs a rebase round before its gate. Brief template gains the skip-list rule.
2026-10-24T10:02Z | Magica | Row 285 / #1790 r3 before/after (sage-4039, mos-1542) | Before: assigned magica/row285-r3 at b19ffa04f, Scrooge r2 untested at 53db6b7ca. After: seven commits cherry-picked through 644bcaa16; five named overlaps auto-merge preserving newer base changes. Range-diff six '=', one context-only '!'; six patch IDs identical, fixture patch ID differs with upstream import context, exact test added/removed-line comparison identical for all changed tests. business.mjs equals base; Scrooge BUILD equals r2. CREATIVE_KINDS absent in packages/roles/scripts; no 64-hex changed-path pin; 291 conservative reader candidates recorded. No npm or tests before Sage CLEAR; N1 remains follow-up. Own-branch evidence push next, not accepted/green or landed.
2026-10-24T09:58:36Z | Magica | Row 285 timestamp correction | The preceding Magica entry marked 10:02Z used an incorrect timestamp; replay/evidence commit 87b7547f8 occurred before the measured 09:58:22Z push start. Technical evidence is unchanged.
2026-10-24T10:32:02Z | Magica | Row285 / #1790 gate STOP (sage-4048) | Before: pushed66a800e15, no tests. After: own root/webui npm ci, short scratch TMPDIR, whole files serial timeout-k10; bus958/958 green (108 files), business partial80pass/4fail, first red old row323 case1-business-file tests57/86/95/105 because committed Case1 chief lacks required gitea ref. No more tests/mutants or source edits. Static diagnosis also finds old empty-credential assertions81/112/114, requiring a specific owner ruling. Sage notified magica-0002. No in-review move or green claim.
2026-10-24T10:42:28Z | Magica | Row285 / #1790 Amendment1 before/after | Before: unconditional chief gitea broke row323. After: chief-only library conditional plus named required-reference refusal, checkCredentialMap unchanged; new three-case test file; own helper/resolve fixture hunks restored to base, own chief/business/identity hunks reconciled under sage-4060. Case1 doc/test byte-identical. M10 planned against new no-library positive and old Case1 doc test. No tests run under held slot; not green/accepted. Residual base library fixture references need authority alignment before re-CLEAR.
2026-10-24T10:59:43Z | Magica | Row285 / #1790 B1 before/after | Before: Amendment1 candidatebabae6adc with missing refs in base library/creative fixtures. After: 26 data-only credential insertions across13 direct-reader files; original callback lines preserved, one expressly allowed credentials?.vikunja setup guard. Every other byte reconstructs prior candidate exactly; no base assertion edits. Base and candidate put role set is pm,cto,coder,reviewer; chief lacks vikunja. Literal e0c6142f3 word diffs and known preexisting r2 hunks recorded. No tests, green claim or queue move; next whole gate +M10 waits for Sage CLEAR.
2026-10-24T11:24:17Z | Magica | Row285 / #1790 r4 before/after | Before: r3 eee8ad776 on b19ffa04f, gate unverified after amendments. After: new r4 from landed296+217 base d0a6a87cd, twelve commits replayed; only append logs conflicted, complete base prefixes preserved. Product/test patch lines identical across assigned bases; tests byte-equal r3; replyLimits and broker citation work retained. Regenerated range-diff and e0c6142f3 base word/line diffs. No npm/tests or queue moves; own-branch push explicitly authorized by sage-4078.
2026-10-24T12:09:17Z | Magica | Row285 / #1790 r4 C1 diagnostic result | Before: valid landed-base candidate0f6cdc861; first old citation-runtime red. After: mos-1584/sage-4086 full unchanged collection, six suites2950 tests2937pass/12fail/1skip/0cancel; WebUI418 and plugins119 green, all12 script suites exit0, dedicated federation1/1. CLI release300s runner cap interrupted; retained and resolved via unchanged1800s retry224/224 in599.6s. Failures: citation-runtime1, instance-settings2, lifecycle-settings1, launcher1, harnesscreative7. Static root causes/fix classes and r3 parity in agents/magica/work/queue-285/BUILD.md. No source/test edits or fix round/mutants; no final manifest or in-review; owner ruling required.
2026-10-24T13:02:03Z | Magica | Row285 / #1790 r4 VERIFIED | Before: C1 collection12 failures. After: approved three data corrections, actual-bound-ref guard, duplicate-before-eligibility hire, data-derived creative equal-service retention/listing with validator first; no old assertion edits. Own fresh128/2 installs, editor-required shortTMP serialized final gate: bus975/975 business282/282 cli988pass/1expectedskip webui418/418 harness172/172 plugins119/119, all12 scripts exit0.13 mutations14 independent checks killed; each SHA256/Git blob restored; restored controls136/136. Case1 doc/test/helper base-identical; N1 deferred. Own r4 candidate for Poe/Webby review, no landing/live action.
2026-10-24T13:33:42Z | Sage | Row 285 (#1790, C2-08b, Magica on Codex, Poe and Webby) LANDED 1f3d0350f. Before: refactor at 25874bc86. After: r4 candidate 2e4503dc7's 14 commits cherry-picked onto 25874bc86. The one conflict (9f7adb03e, BUILD-LOG.md and SESSIONS.md) is append-only and kept both sides, with 0 lines removed against either parent. Apart from the logs, the tree equals the candidate except on the 7 paths 25874bc86 and 4c6190645 had changed. Reviews: Poe first review c31568 rev 3919, Webby landing review c31569 rev 3920, both static. Sage posted both because neither seat has a token. Gate GREEN 13:28:46Z with its own root and webui npm ci (mos-1575): 17 package suites, 4236 tests, 0 fail, 1 skip, which is the allowed FED R7 entry whose runner passed 1/1 (mos-1583). All 12 scripts/test-*.sh rc 0. The other skips are the queue canonical-root check and the row 244 live provider cases. Brief gate: no CREATIVE_KINDS in packages, roles or scripts; no test or script pins the old or new sha256 or blob of a changed role file (positive control found chief-of-staff.json readers); role JSONs match mos-1309 item 5 design 4, with gitea scopes added (read for the chief, read:user and write:repository for the creative roles). Before the push, the in-review overlap sweep found only row 286 (broker.mjs), which rebases as r5. push-check FF_OK, NO_BINARY, SECRETS_CLEAN, NO_ATTRIBUTION. #1790 closed with c31580, Vikunja 546 c1056 (already done). Queue note rev 3921, done rev 3922. Correction to my own rulings: sage-2921 (285's #giteaRole refuses the chief) and sage-2947 (286's T7/T9 mint the chief's grant through the real raise, no SQL staging) conflict now that 285 has landed (rockerduck-0008). sage-4100 keeps the refusal and has T7/T9 seed a read-only chief grant as labeled fixture data, with an assertion that the real path refuses and with revoke and fire still on the real verbs. The tradeoff is that the chief mint goes untested until C2-21 (row 287), whose brief now replaces the seeds. Dewey confirms in 286's round-2 delta. Brief template gains the mos-1584 businessDoc library chief-ref line. The C2-02 brief gains webby-0282 N1 (tool names match the creative contracts). Follow-up webby-0282 N3: business.mjs uses the literal "chief-of-staff" instead of STAFF_TO. The live stack is not re-pinned.
+8
View File
@@ -47,6 +47,14 @@ its launch configuration remains fixed, including on resume. Use Filbert's
wrapper to select that configuration; a direct shared-helper invocation uses
its own supplied flags or the system defaults.
Any run that includes the webui suite, whether a seat's slot run or a landing
gate, sets `MOSAIC_REQUIRE_EDITOR_BUILD=1`, so a missing editor toolchain fails
the run instead of skipping the rebuild test. A worktree that links the
canonical `node_modules` also runs `npm ci --ignore-scripts --no-audit --no-fund`
in its own `packages/webui` first. The root install carries esbuild 0.28.1
through pi-coding-agent, and the rebuild needs the 0.28.2 that
`packages/webui/package-lock.json` pins (Vikunja 597, mos-1453).
All agents follow repository governance and current user direction. Team
leadership does not add deployment or push authority. Coordinate overlapping
work with Sage and preserve other sessions' changes.
+11
View File
@@ -0,0 +1,11 @@
# Beakley
Builder seat, Codex gpt-6.1-sol, started by Mos under Q245 (mos-1506). Owns row 217 (C2-06, handed over from Launchpad).
No launcher in this directory. The seat runs as a T3 thread (thread 88b97f65) and works in its own worktree. It has no
credentials of its own; it pushes only its own `beakley/*` branches through the repository credential helper (mos-0981),
never `refactor`, `main` or another seat's branch. Claude seats orchestrate and review (Q245). Registered by Sage on
2026-10-23 so the queue can name the seat as row owner (store.mjs isSeatDir).
Reports go to Sage's T3 thread (1ef1e4f8-3ead-4208-beca-38f9f1add079) and the next seat's, per the brief's Handoffs.
Mos's thread gets a copy only when Mos has a step (mos-1579, 2026-10-24).
+314
View File
@@ -0,0 +1,314 @@
# Row 217 — C2-06 citation guard, page store and runner retry
Owner: Beakley (88b97f65-97db-4f05-8c6e-081f92bc3501), assigned by Mos Q245.
Issue: #1718. Reviewer: Webby. Current branch: `beakley/row217-r2` (original `beakley/row217` preserved).
Brief: `docs/plans/2026-10-20_case2-rows.md`, C2-06.
Status: six whole suites green and M1–M5 killed under sage-4042/4043; ready for formal review. Landing scripts and integration remain Sage's.
## Plan and boundaries
Continue Launchpad's implementation from its handed-off ref. Complete the guard,
live reply limits and M11 writer fence, broker page store and check evidence,
CLI setter and runner retry/note behavior against the brief and design 5.2.
Supply acceptance tests and mutants, then request Sage's test slot and Webby's
review. Sage owns queue movement, gate and landing. Push only `beakley/*`, add
commits without amend/force or attribution lines. No credential reads.
## Standing rulings received from Sage (sage-3610)
- sage-3595: stub supporting scope until row 283 lands, then rebase onto it and
add real-fixture tests. Landing follows 283. `runtime.mjs` wiring approved.
- Check evidence belongs in an `action.allowed` event in the same transaction
as message insertion; no new event kind. Read the library at the cited commit.
- In library businesses only, JSON over 32,768 characters gets the
`request-too-large` retry. `role.claim` adds `library` only for a library business.
- Store `check.citations` entries with `scope`, `agent`, and `file` (the file's
last commit at the cited commit). On `thread.messages`, add `last` at the served
tip, one git call per distinct path per read. Scope/agent are broker evidence.
- sage-3599: optional `BusError.reason`, guard refusals only, capped at 300
characters. Add bus server/client to manifest. Reasonless envelopes stay
byte-identical.
- `render.mjs` obsolete notice hits belong to row 225.
- Node and tests require Sage CLEAR (sage-3610 supersedes the initial permission
for targeted new tests). Full suites, webui builds and gate require shared slot.
- Existing test edits require Mos GO through Sage; list every file and numstat
below before seeking that approval.
## Recovery and coordination
Initial base `45dca69f6`, clean. `scripts/mosaic queue next beakley` refused:
linked worktrees cannot run the queue. Reported to Sage/Mos in beakley-0001;
Sage will change ownership at a queue gap. No queue files changed.
Read AGENTS.md, agents/README.md, C2-06 brief, design 5.2 and the row 225 BUILD
contract. Requested Launchpad handoff in beakley-0002. Its header timestamp was
mistakenly typed ahead of the actual clock; sequence key identifies the message.
## Existing test changes
None yet. No tests or Node commands run.
## Handoff adopted and independent work (2026-10-23)
Fast-forwarded `beakley/row217` to Launchpad `e25ef0373` on `45dca69f6`.
The full original handoff/rulings remain at
`agents/launchpad/work/queue-217/BUILD.md`. No handoff code was rebuilt from scratch.
Implemented the runner path: role.claim library switch; exact fixed texts; note
inside JSON text with citations retained and no JSON clip; fixed texts defer
notes; one same-session retry for guard codes and both existing size caps;
retry fallback chosen from the second refusal; separate usage turn id for retry.
Outside library businesses the existing send path remains intact.
Added the CLI README usage paragraph. New acceptance tests cover library parsing,
real Git reachability/quotes/scope/origin, settings fallback, M11 direct writer
and serialization, CLI dispatch, broker insert/check atomicity, live settings,
page bounds/lifecycle, socket reasons, per-path last reads, request snapshots,
and runner RESULT/typed send_message, fixed texts, long JSON and unslop behavior.
These are authored evidence only: none has executed.
Static defects corrected locally: a missing projects object now means no library;
the guard sends its captured request arguments after the asynchronous check;
origin/last Git logs use literal pathspecs; a web quote can match any retained
fetch of the cited URL. Each has new-file regression coverage.
## Scope additions and cross-row contract
- `packages/library/src/reply-protocol.mjs`: shared GUARD_CODES/FIXED_TEXTS,
import-free, so runner imports do not reach host Git modules. guard.mjs
reexports them to preserve Launchpad's API. Fethry confirmed no renderer import
is needed when the renderer simply displays fixed texts as ordinary text.
- `packages/seat/src/sandbox.mjs`: one RUNNER_FILES entry for that pure file,
approved by sage-3640. No other mount change. The existing sandbox.test.mjs
import-closure test must pass unchanged; seat joins the gate list.
- Runtime hunks remain exactly Launchpad's import and library guard/limits/last
adapters, plus library.limits.set dispatch. Drift checks wait on 216 and 285.
- Status contract confirmed with Fethry (beakley-0004, fethry-0009): nested
`replyLimits: {requireCitation, citationsPerReply, fallback: [keys],
problem: "reply-limits-unreadable" | null}`. Check entries remain ordered
`scope/agent/file`, plus `last` on reads; no changed boolean.
## Verification and remaining acceptance
- Static `git diff --check`: clean so far. No Node, suite, test or mutant run.
- Existing test file edits: none (numstat 0/0 for every pre-existing test).
All new test files are listed in manifest.r1.sha256; no Mos approval requested.
- `mutants.py` is authored for isolated HEAD archives with green controls:
M1 remove both writer fences; M2 compare incoming human; M3 split evidence
from insert; M4 drop client reason. Not executed.
- Still required: Sage CLEAR for targeted runs; fix first-run failures; supporting
scope acceptance against row 283; 216 index/readLibrary fixture comparison;
285/runtime drift check; full library/business/bus/cli/harness/seat suites and
every scripts/test-*.sh on Sage's gate; mutant execution; Webby approval.
- Before in-review, perform brief's obsolete-code/key search and report outside
ownership hits to Sage. render.mjs/render.test.mjs hits belong to 225.
- No queue changes, protected branch pushes, gate claims or acceptance claims.
Static obsolete-code/key search completed: only packages/library/src/render.mjs:6 and packages/library/tests/render.test.mjs:58 match no-cited-answer; both belong to row 225 per standing ruling. No owned-path hit. Repeat before in-review after dependency changes.
## Webby early look 0939c0682 / webby-0249 and sage-3668/3670
This remains an untested draft. The follow-up adds tests only; production E4
changes wait for the held-lock regression's first RED under Sage CLEAR.
- E1: added an ordinary actor `mallory` that sets both `human` to itself and
`replyLimits`. The existing role/tester actors did not distinguish M2 because
the actor-shape exclusions rejected them independently of the human comparison.
M2 is still unrun; no kill claimed.
- E2: added a real bus event assertion for `agent: "acme/scribe"` from a file's
Mosaic-Agent trailer. The cited tip includes a later unrelated commit, so the
event must store the file commit rather than the library tip. thread.messages
must show `last === file` for that unchanged path. Supporting scope still waits
for row 283's real fixture, as ruled.
- E3: sage-3668 accepts direct writer.write tests under chief and tester actors
as substitutes for the brief's setter cases (brief lines 483-491 at base
45dca69f6). Correction to the early-look premise: organization.set DOES exist,
broker.mjs:4701/4709, but ORGANIZATION_KEYS excludes replyLimits; instances.set
also cannot carry it. Direct writes exercise the shared M11 boundary those
setters cannot reach with that input. Sage confirmed the accurate reason in
sage-3670; the unrelated actor case remains required.
- E4: traced readSyncState -> withLibraryLock -> library-sync-busy after five
seconds -> servedMirror catch-all -> null served -> misleading citation-invalid.
New real-flock/socket test first proves the cite valid, holds the lock, asserts
the exact citation-unavailable reason the agent receives, verifies no insert,
and checks fixed fallback delivery and recovery after unlock. Additional tests
distinguish malformed sync state from absent/new mirrors, and assert that the
actual runner retry request contains that reason. These tests are expected RED
until the fix. Planned production change: only an absent mirror or legitimate
empty state yields null; other failures become GuardError citation-unavailable;
bodies without path cites do not require the mirror lock. Add the code to
GUARD_CODES so the runner sends the agent that reason on its one retry. Per
sage-3670, existing four fallback bodies can remain only if that delivery is
verified. M5 restores catch-all behavior; authored, not run.
- E5: first-library-project selection is a Launchpad handoff implementation
choice, not a validated rule that a business can only have one library.
Cites into another library remain a limitation. No mapping/schema rule added.
- E6: the broker's full guard table now runs as both coder and research.
- E7: new citation-runtime.test.mjs starts the real runtime, reads limits from
the real organization file, then changes, corrupts and removes that fixture
file and checks library.status without replacing the library adapter.
No Node, tests or mutants ran. No test that predated row 217 changed.
## Webby follow-up 192049c98 / webby-0258
E1, E2, E6 and E7 closed statically; no executed acceptance claimed. E3 correction and E5 limitation accepted. E4 tests accepted statically; real RED then production fix/green remain on hold for Sage CLEAR, with supporting scope waiting on 283. F1: citation-helpers status now uses its mutable served value, matching guard/last after setServed instead of reporting the original fixture commit. Test-only fixture correction, unrun. manifest.r3.sha256 records the updated helper; no production or old-test changes.
## Round 2 / sage-4037 — 2026-10-24, Untested
New branch `beakley/row217-r2` from published `dde5b8496`, rebased exactly onto
`origin/refactor` at `e0c6142f3` (109 upstream commits since `45dca69f6`). The
published original branch is unchanged; no amend or force-push. The replayed
four commits are b9ef816ff, 7400509ba, a447880cb, 2655ec010. Full range-diff:
`rebase-r2.range-diff.txt`. Last commit is `=`, the first three are `!` from
conflict context/indentation and append-log placement described below.
Conflict resolutions:
- broker.mjs: retained landed grants.scope/grants.scope.set dispatch and added
library.limits.set to the organization verb dispatch; neither path removed.
- runtime.mjs: retained grants.scope.set and added library.limits.set alongside
it; retained query/sync wiring and all new base lifecycle behavior.
- organization.mjs: retained row 239's beforeWrite/revoked wrapper, placing both
M11 fences before validations/revocation as on the old candidate. A refused
reply-limit write cannot invoke beforeWrite.
- library/index.mjs: retained C2-05a buildIndex/query exports and added the guard
and reply-limits exports.
- BUILD-LOG.md and docs/SESSIONS.md: retained upstream appends followed by all
Beakley appends. Static byte-prefix checks prove the entire e0c6142f3 log
histories survive; all original Beakley entries also survive.
- business.mjs, cli README and sandbox.mjs auto-merged. Static diff against the
target confirms only this row's TOP_KEYS addition, README paragraph and one
import-free protocol mount; landed supporting scope and room-address mount
remain intact. runtime diff contains only the approved import, injected
guard/limits/last adapters and setter dispatch, now beside grants.scope.set.
Correction recorded honestly: the first unpublished rebase attempt used an
unbounded marker regex that removed code after a conflict. The diff stat caught
it immediately; aborted the rebase and repeated with bounded markers. No result
from that discarded attempt was pushed. The successful first replay matches the
original 589 insertions/20 deletions; no broad deletions remain.
Implemented E4 under sage-4037's explicit direction to make the product fix
while keeping all tests unrun. This supersedes the earlier planned RED-first
execution order; no RED or green has been observed. The existing regression
cases predate the fix. GUARD_CODES now includes citation-unavailable. Only a
mirror confirmed absent by lstat, or readSyncState's legitimate empty state,
yields no served commit. Other read/lock/metadata errors give the fixed safe
reason: "The library is busy or unavailable. Retry the answer when the library
is available." The runner receives it through BusError.reason and includes it
in its one retry request. The existing four fallback bodies remain. Plain,
web-only and fixed replies require no mirror read, so a busy mirror cannot
block the runner's fixed fallback. M5's real production anchor now exists.
Supporting scope after row 283 (`8d2856ee3`): added two broker tests using real
mapping/reader classification, not a scope stub. A path in both supporting and
playground refuses as canon; an agent-committed supporting path stores
scope=supporting, agent=acme/scribe and its file commit in message.checked.
C2-05a comparison: index-build.mjs builds its file map directly from readLibrary
files; indexFor calls that same reader at the requested commit. Added a real
fixture test comparing the index set, readLibrary set and libraryReader.lines
admission, including supporting, unmapped Markdown and .canvas. This comparison
is authored and statically traced, not executed; numerical results wait on CLEAR.
Current packet: manifest.r4.sha256, relative to e0c6142f3. No test file already
present at that base was edited. No Node, npm, tests, mutants or webui build run.
Ready for CLEAR after Lena's row 296. On CLEAR, install with npm ci
--ignore-scripts --no-audit --no-fund in THIS worktree root and packages/webui;
never link to canonical node_modules or run npm/rm in the canonical checkout.
Use short mktemp TMPDIR and timeout -k 10. Any old-test red goes to Sage before
an edit. Full green gate, mutants and Webby verdict remain outstanding.
Range-diff receipt rendering trims trailing whitespace on diff separator lines; no substantive range-diff content changed. This removes whitespace warnings caused by embedding raw diff output in a tracked text file.
Final base-to-candidate whitespace check found a trailing blank line inherited from Launchpad in limits.mjs; removed it without behavior changes. manifest.r5.sha256 supersedes r4 for the exact candidate file hashes.
## CLEAR sage-4042/4043 — execution started 2026-10-24
Queue beakley-217-start initially refused Lena's review-outcome lock twice;
same-op retry succeeded at rev3894 (briefed→in-progress). No queue bypass.
Short TMPDIR /mnt/storage/scratch/tmp/tNoueZ. Worktree-local npm ci at root
(128 packages) and packages/webui (2) completed; neither path was a symlink.
No npm/rm command ran in canonical. All test commands use timeout -k 10.
E4 current file: 3 pass/0 fail/0 skip. M5 isolated pre-fix stand-in: 1 pass,
2 expected assertion failures (citation-invalid instead of citation-unavailable),
exit1. Restored product bytes and checkout product hashes, then E4 restored
control 3/3. Receipts under run-r2/m5-red. M1 six-space anchors both match
exactly once on the eight-space lines.
Touched test files first run: 56 pass/1 fail, zero skip/cancel. The sole first-red
was NEW citation-runtime.test.mjs invalid-authority at Broker.checkBusiness:
validator output has unresolved roles and is not the host's broker projection.
Adjusted that new fixture only, following limits-runtime.test.mjs: minimal
empty-authority coder, validated real project mappings, real organization adapter
and systemFor(root). Single rerun 1/1, then all touched files 57/57. No base test
failure or edit. First log retained as run-r2/touched-first.log and reported to
Sage in beakley-0014. No production change was required.
The isolated mutant driver now wraps each node run in timeout -k 10, refuses a
symlinked root node_modules, restores mutated files in finally, verifies original
checkout product hashes after every mutant and reruns the restored control.
Optional name filters allow the E4 M5 RED before the full mutant pass. No
canonical dependency link is used; isolated copies link only this worktree's
own dependency install.
## Final slot results / 2026-10-24 10:21Z
All requested runs completed serially under sage-4042/4043 on source revision
`2d274a5b6`. Final receipt commits change only tracking and logs, not packages.
| Whole suite | Pass | Fail / skip / cancel |
| --- | ---: | --- |
| library | 142 | 0 / 0 / 0 |
| business | 270 | 0 / 0 / 0 |
| bus | 974 | 0 / 0 / 0 |
| cli | 988 | 0 / 0 / 0 |
| harness | 172 | 0 / 0 / 0 |
| seat | 218 | 0 / 0 / 0 |
Total 2,764 whole-suite tests. Touched files rerun 57/57. The unchanged
RUNNER_FILES import-closure test passed in seat (seat-suite.log:153). The only
first-run failure was the NEW runtime fixture already recorded above; no old
test failed and no test present at e0c6142f3 was edited.
M1–M5 all killed by the intended assertion, each with Node exit1, a green
control and green restored control. Driver exit0. M1 catches missing writer
refusals; M2 is killed by mallory's human swap; M3 detects one message left
behind after evidence failure; M4 detects the missing reason; M5 detects
citation-invalid in place of citation-unavailable on contention and bad state.
Every mutation was in a disposable HEAD archive. Each changed file was restored,
checkout product hashes checked after every mutant, and the restored control
rerun. All five final restored.sha256 certificates match current product files.
M5 also ran separately before the whole suites as the authorized pre-fix RED
stand-in; its held-lock and malformed-state assertions failed, then restored
E4 passed 3/3. Full raw controls/negatives/restores are retained.
Receipts: run-r2/summary.json and summary.txt; *-suite.log; touched-first.log,
touched-rerun.log; availability-green.log; runtime-fixture-retry.log; npm-root.log
and npm-webui.log; m1-anchors.txt; m5-red/ and mutants/. All are text, no binary
artifact added. All Node/mutant/npm runs used the short TMPDIR and timeout -k 10.
Both node_modules trees are local npm ci installs. No canonical npm/rm or
canonical dependency link. No further runtime/source changes after the tests.
Acceptance formerly waiting on dependencies is executed: real row283 supporting
canon refusal and supporting/agent event pass; the C2-05a readLibrary/index set
comparison passes; runtime readRaw live/corrupt/missing-file test passes; runner
retry request carries the E4 availability reason. The repeat obsolete-name
search finds only render.mjs:6 and render.test.mjs:58, owned by row225; no owned
hit. First-library selection remains the accepted E5 limitation. Webby-0274 N1
is a nonblocking wording limitation: configuration faults share the safe
busy-or-unavailable retry text. No policy/schema restriction was invented.
Current complete changed-file manifest over e0c6142f3..candidate is
candidate-manifest.sha256, excluding itself to avoid a circular hash. It includes
source, tests, records and evidence. Earlier numbered manifests are historical.
Formal Webby verdict and all scripts/test-*.sh at landing remain Sage's steps;
this is verified for review, not an integration/deployment claim.
Exact negative-test logs retain Node's whitespace-only diagnostic lines. Whole diff --check reports those 12 blank-line padding warnings in run-r2 logs; source/docs diff --check excluding captured run-r2 evidence is clean. No source whitespace problem or test failure is hidden by that exclusion.
+61
View File
@@ -0,0 +1,61 @@
# Row 217 round 2 — verified for review
Issue #1718, C2-06. Base e0c6142f3; branch beakley/row217-r2. Continued
Launchpad e25ef0373 through the preserved original dde5b8496 branch. Range-diff,
conflict resolutions and acceptance receipts are in BUILD.md. Tested source
revision: 2d274a5b6; the final commits add records/evidence only.
The broker checks agent-to-human citations before insertion, stores trusted
scope/agent/file evidence atomically with the message, and supplies per-path last
on thread reads. It keeps session-local fetched pages and reads reply settings
live through the M11 human-only writer. The runner preserves cited JSON, defers
notes on fixed replies, and retries once with the refusal code and safe reason.
E4 adds citation-unavailable for mirror/state/lock faults; uncited/web-only/fixed
bodies do not need the mirror lock. Supporting scope uses landed row283 code.
## Product and test scope
The package paths listed in candidate-manifest.sha256 are exactly this row's
base-to-candidate changes. Fourteen product paths cover library guard/limits/
protocol/exports; business validation/writer; bus broker/runtime/server/client;
CLI command/README; runner; and the single approved pure-protocol sandbox mount.
Nine test/helper/fixture paths are additions. No existing test is modified.
The mounted protocol stays import-free. Runtime retains the landed grant/query/
sync behavior; the writer retains beforeWrite/revoked handling and fences before
revocation. No SQL schema, event kind, role authority or credential change.
## Executed evidence
| Whole suite | Pass | Fail / skip / cancel |
| --- | ---: | --- |
| library | 142 | 0 / 0 / 0 |
| business | 270 | 0 / 0 / 0 |
| bus | 974 | 0 / 0 / 0 |
| cli | 988 | 0 / 0 / 0 |
| harness | 172 | 0 / 0 / 0 |
| seat | 218 | 0 / 0 / 0 |
Touched files 57/57; total whole suites 2,764. First run was 56/57 due solely
to a new runtime fixture missing the broker's resolved authority shape. Only
that new fixture changed; single and full touched reruns passed. No old test
failed. First-red evidence remains in run-r2/touched-first.log.
M1–M5 killed: missing M11 fences, incoming-human trust, split check transaction,
dropped client reason, and hidden library availability. Every negative run has
green control/restored runs and matching restored product certificates. M5 is
also the authorized E4 pre-fix RED stand-in. Supporting canon refusal, stored
supporting/agent evidence, the C2-05a index comparison, runtime raw settings and
agent-visible E4 retry reason all pass. The unchanged sandbox closure test passes.
Commands ran serially under Sage CLEAR with short TMPDIR and timeout -k 10.
Root/webui dependencies came from local npm ci, never canonical links. Full logs,
summary.json and mutant certificates are in run-r2/. The complete changed-file
manifest candidate-manifest.sha256 covers e0c6142f3..candidate, excluding itself;
its SHA256 is supplied with the pushed tip. Historical manifests stay untouched.
## Remaining boundaries
Sage runs every scripts/test-*.sh at landing and posts the formal Webby review
request. No merge/deployment performed. First-library selection remains the
accepted limitation; configuration faults share the safe unavailable reason
(Webby N1, nonblocking). Obsolete-name search hits only row225's render files.
@@ -0,0 +1,80 @@
74398edcedf16a3d856ab9e7ea900eb61a4df7f726f04b74b2ff123e7536e9c1 BUILD-LOG.md
87880c30c2be0180e6eec4dbe203f86e93ae2b1b4be44031b6a4903c6245a0ec agents/beakley/work/queue-217/BUILD.md
e7ecf624ccb2b918efb08001ae9da36380fe918f8c27db704860809b6792e6f2 agents/beakley/work/queue-217/MANIFEST.md
f4a042b5d6d393d2be62b107d7157ae51dd8fbf36f4360f5cd8cf07c03c74251 agents/beakley/work/queue-217/manifest.r1.sha256
53f051a4e416a34181ad9bcc7687f0d686274542b06d9758e2db7eb81e848811 agents/beakley/work/queue-217/manifest.r2.sha256
f96fccc566d01d70db32188574d0b5331ef3c90bce66558449a51b3f21da1b29 agents/beakley/work/queue-217/manifest.r3.sha256
faf8ec3e0ab458fe95120345ec93e077b0dcad9458c0f2683a20effb6ce3ed93 agents/beakley/work/queue-217/manifest.r4.sha256
a58f0e273b60508b95c833cbace26799d7aa935117fd1f9a27812fba65b93d54 agents/beakley/work/queue-217/manifest.r5.sha256
120b15db5eb75897095fe3d0759553e482365d58061d763beba7754a6e0d0734 agents/beakley/work/queue-217/manifest.r6.sha256
04a9d0585b5ae4818d87d67ac27f838355f1a6f586625a16cf01d91d7bb6d4a0 agents/beakley/work/queue-217/mutants.py
4a5f7b3373fd3ff46e2d6a5f7ee7106ad76a71c9034ca5a44b9e7340f0cc4cff agents/beakley/work/queue-217/rebase-r2.range-diff.txt
630070b0d682120ba64b382ab3b47b3fa3e8f0bcfc695ca09432d01d705fbcb3 agents/beakley/work/queue-217/run-r2/README.md
c4245272d5fc89c5fd3a9ea979e7d65727ea76e24364190af57556c59ad2fe34 agents/beakley/work/queue-217/run-r2/availability-green.log
700fff38b0a99ffdb44863f13015673cb459e5e645c5df46580eafbc407c95c8 agents/beakley/work/queue-217/run-r2/bus-suite.log
ef216d0af325c2b6647eb8405e5de70ebb5a0e7a28bb3d8fe3abc6a289a8d3d2 agents/beakley/work/queue-217/run-r2/business-suite.log
af173117f83359ebba62c5c00eadc749bb179551a8e290bcf55bbe39b1e7272c agents/beakley/work/queue-217/run-r2/cli-suite.log
a615f69ba60859e9d7817f3353b0d7c71e6c12eecc3ecf0f630d473be21e5fef agents/beakley/work/queue-217/run-r2/harness-suite.log
acaa08001101fd69a12cae377984e0d469c2cedc2affb5ccf9af426a72549dcc agents/beakley/work/queue-217/run-r2/library-suite.log
5414ce5b94e7ac7918ed64f62e5fd2b921d49c7e93cf73042b9187d014069934 agents/beakley/work/queue-217/run-r2/m1-anchors.txt
7d7138b25568adb98932bbe180a337fe6798c3eddcd7134ce7278c24fea48818 agents/beakley/work/queue-217/run-r2/m5-driver.log
de7dd716d3981fd9fa1d114882e60f9a83736cdb8f8e2096c3913c9f8620238a agents/beakley/work/queue-217/run-r2/m5-red/M5-hide-library-unavailable-control.log
6b98d3943d04d99f3ef212f11901d2257422410c477abec27ed3100a0d20dad9 agents/beakley/work/queue-217/run-r2/m5-red/M5-hide-library-unavailable-restored-green.log
a58f0e273b60508b95c833cbace26799d7aa935117fd1f9a27812fba65b93d54 agents/beakley/work/queue-217/run-r2/m5-red/M5-hide-library-unavailable-restored.sha256
d852a464fd624ce12d8d6bdc9800402639bb500a6d40c628cb836ca1bcf1e326 agents/beakley/work/queue-217/run-r2/m5-red/M5-hide-library-unavailable.log
7d7138b25568adb98932bbe180a337fe6798c3eddcd7134ce7278c24fea48818 agents/beakley/work/queue-217/run-r2/m5-red/summary.txt
1c405f1f15d2ce2db37b5809cdf5eaff68f18c99c5621e1c43262a289c5e35c4 agents/beakley/work/queue-217/run-r2/mutants-driver.log
c96487e87c1ae9e34a7222b04701c5efcce25fe201f03a0213b989f7cde2c376 agents/beakley/work/queue-217/run-r2/mutants/M1-writer-fence-control.log
8b294ecc057ad64ace7f520a1785b54df7df5a9eddf962813c3e5f8fa723ffd4 agents/beakley/work/queue-217/run-r2/mutants/M1-writer-fence-restored-green.log
120b15db5eb75897095fe3d0759553e482365d58061d763beba7754a6e0d0734 agents/beakley/work/queue-217/run-r2/mutants/M1-writer-fence-restored.sha256
be749486956e85a71f08107139613e09b62c53b58e8cc10e0fbe807e95d079a6 agents/beakley/work/queue-217/run-r2/mutants/M1-writer-fence.log
525da1cc780dfea1a66f95739d444516bd16271c7ec539d615012ec9c8e7c139 agents/beakley/work/queue-217/run-r2/mutants/M2-incoming-human-control.log
3546705980bb4a73295f16e42ab55f38c6adca9a5c53252264ae4ef66c595dfc agents/beakley/work/queue-217/run-r2/mutants/M2-incoming-human-restored-green.log
120b15db5eb75897095fe3d0759553e482365d58061d763beba7754a6e0d0734 agents/beakley/work/queue-217/run-r2/mutants/M2-incoming-human-restored.sha256
77352c22c459c516ff47ff1caa42fe9763fe201a04079646b0ccc0da6a145804 agents/beakley/work/queue-217/run-r2/mutants/M2-incoming-human.log
58de145ec0384de4f560b28dcfa76e98c384be5c771d6561fb1054f07ea8166b agents/beakley/work/queue-217/run-r2/mutants/M3-split-check-transaction-control.log
6a4cd0ef36b0d2318ef71c941ce300d215b6d2f87d0b4328c461ba53d812434c agents/beakley/work/queue-217/run-r2/mutants/M3-split-check-transaction-restored-green.log
120b15db5eb75897095fe3d0759553e482365d58061d763beba7754a6e0d0734 agents/beakley/work/queue-217/run-r2/mutants/M3-split-check-transaction-restored.sha256
2deb72f2d442f413fd06e205093f6fa3f955ec6ef707b7ca65b86be8c8883f9b agents/beakley/work/queue-217/run-r2/mutants/M3-split-check-transaction.log
31cac91f43c8b7ebe0431f27a038b0fcd554a12b232592747f3972213cfa192b agents/beakley/work/queue-217/run-r2/mutants/M4-drop-client-reason-control.log
e06c1da8dcd9e7eb013a4597b14369e296e21b812476bd6d88c7a7aa040d4065 agents/beakley/work/queue-217/run-r2/mutants/M4-drop-client-reason-restored-green.log
120b15db5eb75897095fe3d0759553e482365d58061d763beba7754a6e0d0734 agents/beakley/work/queue-217/run-r2/mutants/M4-drop-client-reason-restored.sha256
66d8f72df3bc0428624dab437cb04923ecab42055d29c6ffde43af98d47f32ae agents/beakley/work/queue-217/run-r2/mutants/M4-drop-client-reason.log
3f74fbd3b4297868b9bb637a7924739363470964873a4bd3dc2f5daf2d0e9c8a agents/beakley/work/queue-217/run-r2/mutants/M5-hide-library-unavailable-control.log
96d95a45d5326e614328531a7dadebce5d3ce70e40ec23dd49a66c1a676b45be agents/beakley/work/queue-217/run-r2/mutants/M5-hide-library-unavailable-restored-green.log
120b15db5eb75897095fe3d0759553e482365d58061d763beba7754a6e0d0734 agents/beakley/work/queue-217/run-r2/mutants/M5-hide-library-unavailable-restored.sha256
fa57189e9de99c4a76be27da3b857c07fc76706f7d0ee7409ba4efd43c3642b7 agents/beakley/work/queue-217/run-r2/mutants/M5-hide-library-unavailable.log
1c405f1f15d2ce2db37b5809cdf5eaff68f18c99c5621e1c43262a289c5e35c4 agents/beakley/work/queue-217/run-r2/mutants/summary.txt
862418d3d4124871ca5fcaf35e16c318a04e2888da83836751ddfea110efeb06 agents/beakley/work/queue-217/run-r2/npm-root.log
38b75d8bddacf8d227883a29dd8a10f87a7f02d8a95f3f8809cb966fc9c8cf7a agents/beakley/work/queue-217/run-r2/npm-webui.log
7f29b5a328fd6be61ebc4110a048305b50856810ab97a7798cd427924d74e8c9 agents/beakley/work/queue-217/run-r2/runtime-fixture-retry.log
3bd51fe222a61412e8285eb522a2f7b5c1b0b035f7dca0e9ff66190bd53e6706 agents/beakley/work/queue-217/run-r2/seat-suite.log
8b98c6ba76de46ddd858b4b95bae7bce2d1bf969edb85901ad8819e1280869a1 agents/beakley/work/queue-217/run-r2/summary.json
e374cb7ab28a46dd560b267b0fe6691b11c0c2fabd00087c4e49a02ab1bf8086 agents/beakley/work/queue-217/run-r2/summary.txt
ad2022c7ccdfa151e029eed92cd309369a97f197d9304775f6d2be3dc5f11080 agents/beakley/work/queue-217/run-r2/touched-first.log
e1fe5ebae1a36f196470848bf27b99c21d316c9236a1d1328d7bcaca0ee4d3e9 agents/beakley/work/queue-217/run-r2/touched-rerun.log
0c1b1f079b4b993e8d1aeb730d743e28696413eae8be6dd79731d749d1d45d0b agents/launchpad/work/queue-217/BUILD.md
76b0a5785f134c09cda677e8f5fb3e7454b39883c4a6f55360d9d277476fcd2c docs/SESSIONS.md
eeca81ab965f9e94f930ee5f51d16f019af6368bc6c3994895e204f7a54ec8d2 packages/bus/src/broker.mjs
ad3c686a089f67f3c89610937c6fc9b32367cea5d9735125d89bef042082d4e8 packages/bus/src/client.mjs
36b05dd3119e5929211aa1cc5d45c5043f5a1c34567ddc7cac8f002835d44abe packages/bus/src/runtime.mjs
66b26d131a19f4f411686427274936850c1ff0aed11e9b281ae4aadcf4b289fc packages/bus/src/server.mjs
cdd0304ec25ef1ad3e31c52502fa46f2c80bd77c8d3c2e13f8ed4b5328f342c9 packages/bus/tests/citation-availability.test.mjs
2e05074cd9d15d810103658af3858161cee2af78b0a2e1ba910222fab3e84401 packages/bus/tests/citation-guard.test.mjs
2c7a2102e2e0244876e41b664f4f706baefe3375100b956655551db1230f5da3 packages/bus/tests/citation-helpers.mjs
9768b6dc5ae078c5cc4f76473097287b74c5bc5853d39e1f57f153e646f861af packages/bus/tests/citation-runtime.test.mjs
abaeac64f2c3bf8ba83c9a4488edd9105c4707a6564560c5333d5421445653af packages/business/src/business.mjs
3a6044de5d1ca2cc35c5285b460c3e402b4274837e5d88b97f489797f6004903 packages/business/src/organization.mjs
4d2eb11beaa80175e524af1b95c81e7164990fba1d3e1754f5ba06eee390a14f packages/business/tests/reply-limits.test.mjs
a2bb98734bcc2556f8b2168f0faf8a89f7064c3f0aa49feb7d1975d596192f09 packages/cli/README.md
2f291a71f490f2741edada7a3e3788500f8976a08eb8ab1411f6c5982f778260 packages/cli/src/limits.mjs
f38af2d46d5f5f6388f599912507b94b87a0bf9dcc2104bb2187c38ee35118d5 packages/cli/tests/reply-limits.test.mjs
6ad72b4245e0a66e32725941900c1ece64c2e5de2fb73d65c8e042b4f3a691a6 packages/harness/src/runner.mjs
a5ef1b65230239a7baf6d0e8f2b8a51c0516348c7c4339a55b3f0a1a6ff531ba packages/harness/tests/citation-runner.test.mjs
330bc71bf6c7e64d3ddb70440903d2d9acf7878d44a49d7e30c2352ee4c807ec packages/harness/tests/fixtures/citation-adapter.mjs
f710d9600a17f6e2989a289cfe84e58f161d86c7306605946ce05fa71b364eb2 packages/library/src/guard.mjs
c0d630798914e300e461c247340533328e97119e54909c6a9406340e61fed8b7 packages/library/src/index.mjs
98ef45ed61144aaea44d8aea1ac43082b6d340297e46846d01772da38728e530 packages/library/src/limits.mjs
7b46f47b5e9d6b554b5d39bce2cd95c4610f5f35b8ab8fdc5a2864b3214be809 packages/library/src/reply-protocol.mjs
406146ebbce3710f308243b684a1c17e7626c1b65a4468489364317e31537a48 packages/library/tests/guard.test.mjs
39c8e6c8250a13fa43015fb2c407195e30ee642f729a9f6a644c38b4ea758a72 packages/seat/src/sandbox.mjs
@@ -0,0 +1,21 @@
68c05644d29188b897e2d4695d8e7025e143d424d69a91bc07bc950f589d34bf packages/bus/src/broker.mjs
ad3c686a089f67f3c89610937c6fc9b32367cea5d9735125d89bef042082d4e8 packages/bus/src/client.mjs
49e01e5e73cc3e830ad48a1b6b13fe4d06a38950f17847dc049b75209d6d3f0a packages/bus/src/runtime.mjs
66b26d131a19f4f411686427274936850c1ff0aed11e9b281ae4aadcf4b289fc packages/bus/src/server.mjs
29114051a9bc5271e48978a9552d64b51b0ac4810f94a1f98940bf617b148df8 packages/bus/tests/citation-guard.test.mjs
dc2d5836f10f591fc174aaf9587a3bff793b24ac29efe9ab68c6a9243d1d1c2c packages/bus/tests/citation-helpers.mjs
825da818ba3cf45a4837f0f15a9c2cdba55a3d0bbb4479d55236f35799427c6f packages/business/src/business.mjs
dbd79a4dfc926620d034b540f98f39336d81e4c79f214424c3cf19250c1d1f8d packages/business/src/organization.mjs
bec04a894bc2af000548283ed7719e4de1c6d56688f42238a113390e9b2d3fbe packages/business/tests/reply-limits.test.mjs
1f1bea250f694a2aae9b9dc856b3c3424ceca153ccf826c99ccb98e6ea9cd394 packages/cli/README.md
2f291a71f490f2741edada7a3e3788500f8976a08eb8ab1411f6c5982f778260 packages/cli/src/limits.mjs
f38af2d46d5f5f6388f599912507b94b87a0bf9dcc2104bb2187c38ee35118d5 packages/cli/tests/reply-limits.test.mjs
6ad72b4245e0a66e32725941900c1ece64c2e5de2fb73d65c8e042b4f3a691a6 packages/harness/src/runner.mjs
ec7ef0cbf493217eb9229895cae2fe7ef603f41913840e59a73220df387c81ca packages/harness/tests/citation-runner.test.mjs
330bc71bf6c7e64d3ddb70440903d2d9acf7878d44a49d7e30c2352ee4c807ec packages/harness/tests/fixtures/citation-adapter.mjs
0365114cf5773cbaa9fba196fbd1e773b2ec5ad2300c40231c357ca58884b9e3 packages/library/src/guard.mjs
aaa8f7ba60a729a88a6ef57b3d5ff5a69bcf0e17b60e7db51a8dc5a697627b6c packages/library/src/index.mjs
3e04fa25a64334d33ffbec704205b32cd01992f2d341e908f933a345199beee0 packages/library/src/limits.mjs
c9e682eff87e822647921288d7fce0ebdc7b09f0a6dfdd6528f10249ae26e81b packages/library/src/reply-protocol.mjs
dd056409712113eb9c1b70e29b21022f5b30df6ffbfb2658e293edd6ec7195c7 packages/library/tests/guard.test.mjs
2f3ec99129d16394d4458e252b9cba4e38ff66cd9393e3889f8afc3140e15a8e packages/seat/src/sandbox.mjs
@@ -0,0 +1,23 @@
68c05644d29188b897e2d4695d8e7025e143d424d69a91bc07bc950f589d34bf packages/bus/src/broker.mjs
ad3c686a089f67f3c89610937c6fc9b32367cea5d9735125d89bef042082d4e8 packages/bus/src/client.mjs
49e01e5e73cc3e830ad48a1b6b13fe4d06a38950f17847dc049b75209d6d3f0a packages/bus/src/runtime.mjs
66b26d131a19f4f411686427274936850c1ff0aed11e9b281ae4aadcf4b289fc packages/bus/src/server.mjs
cdd0304ec25ef1ad3e31c52502fa46f2c80bd77c8d3c2e13f8ed4b5328f342c9 packages/bus/tests/citation-availability.test.mjs
8dc344b8a905c58d544b031ca84adb7eb869d9de88eb8e6b0fc1d9190702a38a packages/bus/tests/citation-guard.test.mjs
62d8a55945d4b700e22c8c49b6420a5e25719d266901a2ad20c72514735e65e9 packages/bus/tests/citation-helpers.mjs
168dcac99d9bfdfdf5ff0eaa2c0fff91595b351b4d0092dc299532c9c32869f0 packages/bus/tests/citation-runtime.test.mjs
825da818ba3cf45a4837f0f15a9c2cdba55a3d0bbb4479d55236f35799427c6f packages/business/src/business.mjs
dbd79a4dfc926620d034b540f98f39336d81e4c79f214424c3cf19250c1d1f8d packages/business/src/organization.mjs
4d2eb11beaa80175e524af1b95c81e7164990fba1d3e1754f5ba06eee390a14f packages/business/tests/reply-limits.test.mjs
1f1bea250f694a2aae9b9dc856b3c3424ceca153ccf826c99ccb98e6ea9cd394 packages/cli/README.md
2f291a71f490f2741edada7a3e3788500f8976a08eb8ab1411f6c5982f778260 packages/cli/src/limits.mjs
f38af2d46d5f5f6388f599912507b94b87a0bf9dcc2104bb2187c38ee35118d5 packages/cli/tests/reply-limits.test.mjs
6ad72b4245e0a66e32725941900c1ece64c2e5de2fb73d65c8e042b4f3a691a6 packages/harness/src/runner.mjs
a5ef1b65230239a7baf6d0e8f2b8a51c0516348c7c4339a55b3f0a1a6ff531ba packages/harness/tests/citation-runner.test.mjs
330bc71bf6c7e64d3ddb70440903d2d9acf7878d44a49d7e30c2352ee4c807ec packages/harness/tests/fixtures/citation-adapter.mjs
0365114cf5773cbaa9fba196fbd1e773b2ec5ad2300c40231c357ca58884b9e3 packages/library/src/guard.mjs
aaa8f7ba60a729a88a6ef57b3d5ff5a69bcf0e17b60e7db51a8dc5a697627b6c packages/library/src/index.mjs
3e04fa25a64334d33ffbec704205b32cd01992f2d341e908f933a345199beee0 packages/library/src/limits.mjs
c9e682eff87e822647921288d7fce0ebdc7b09f0a6dfdd6528f10249ae26e81b packages/library/src/reply-protocol.mjs
dd056409712113eb9c1b70e29b21022f5b30df6ffbfb2658e293edd6ec7195c7 packages/library/tests/guard.test.mjs
2f3ec99129d16394d4458e252b9cba4e38ff66cd9393e3889f8afc3140e15a8e packages/seat/src/sandbox.mjs
@@ -0,0 +1,23 @@
68c05644d29188b897e2d4695d8e7025e143d424d69a91bc07bc950f589d34bf packages/bus/src/broker.mjs
ad3c686a089f67f3c89610937c6fc9b32367cea5d9735125d89bef042082d4e8 packages/bus/src/client.mjs
49e01e5e73cc3e830ad48a1b6b13fe4d06a38950f17847dc049b75209d6d3f0a packages/bus/src/runtime.mjs
66b26d131a19f4f411686427274936850c1ff0aed11e9b281ae4aadcf4b289fc packages/bus/src/server.mjs
cdd0304ec25ef1ad3e31c52502fa46f2c80bd77c8d3c2e13f8ed4b5328f342c9 packages/bus/tests/citation-availability.test.mjs
8dc344b8a905c58d544b031ca84adb7eb869d9de88eb8e6b0fc1d9190702a38a packages/bus/tests/citation-guard.test.mjs
8a2d4b636f8d4f926c484254c33ecf7b7e4722acef3250d2730593984d5ac06b packages/bus/tests/citation-helpers.mjs
168dcac99d9bfdfdf5ff0eaa2c0fff91595b351b4d0092dc299532c9c32869f0 packages/bus/tests/citation-runtime.test.mjs
825da818ba3cf45a4837f0f15a9c2cdba55a3d0bbb4479d55236f35799427c6f packages/business/src/business.mjs
dbd79a4dfc926620d034b540f98f39336d81e4c79f214424c3cf19250c1d1f8d packages/business/src/organization.mjs
4d2eb11beaa80175e524af1b95c81e7164990fba1d3e1754f5ba06eee390a14f packages/business/tests/reply-limits.test.mjs
1f1bea250f694a2aae9b9dc856b3c3424ceca153ccf826c99ccb98e6ea9cd394 packages/cli/README.md
2f291a71f490f2741edada7a3e3788500f8976a08eb8ab1411f6c5982f778260 packages/cli/src/limits.mjs
f38af2d46d5f5f6388f599912507b94b87a0bf9dcc2104bb2187c38ee35118d5 packages/cli/tests/reply-limits.test.mjs
6ad72b4245e0a66e32725941900c1ece64c2e5de2fb73d65c8e042b4f3a691a6 packages/harness/src/runner.mjs
a5ef1b65230239a7baf6d0e8f2b8a51c0516348c7c4339a55b3f0a1a6ff531ba packages/harness/tests/citation-runner.test.mjs
330bc71bf6c7e64d3ddb70440903d2d9acf7878d44a49d7e30c2352ee4c807ec packages/harness/tests/fixtures/citation-adapter.mjs
0365114cf5773cbaa9fba196fbd1e773b2ec5ad2300c40231c357ca58884b9e3 packages/library/src/guard.mjs
aaa8f7ba60a729a88a6ef57b3d5ff5a69bcf0e17b60e7db51a8dc5a697627b6c packages/library/src/index.mjs
3e04fa25a64334d33ffbec704205b32cd01992f2d341e908f933a345199beee0 packages/library/src/limits.mjs
c9e682eff87e822647921288d7fce0ebdc7b09f0a6dfdd6528f10249ae26e81b packages/library/src/reply-protocol.mjs
dd056409712113eb9c1b70e29b21022f5b30df6ffbfb2658e293edd6ec7195c7 packages/library/tests/guard.test.mjs
2f3ec99129d16394d4458e252b9cba4e38ff66cd9393e3889f8afc3140e15a8e packages/seat/src/sandbox.mjs
@@ -0,0 +1,23 @@
eeca81ab965f9e94f930ee5f51d16f019af6368bc6c3994895e204f7a54ec8d2 packages/bus/src/broker.mjs
ad3c686a089f67f3c89610937c6fc9b32367cea5d9735125d89bef042082d4e8 packages/bus/src/client.mjs
36b05dd3119e5929211aa1cc5d45c5043f5a1c34567ddc7cac8f002835d44abe packages/bus/src/runtime.mjs
66b26d131a19f4f411686427274936850c1ff0aed11e9b281ae4aadcf4b289fc packages/bus/src/server.mjs
cdd0304ec25ef1ad3e31c52502fa46f2c80bd77c8d3c2e13f8ed4b5328f342c9 packages/bus/tests/citation-availability.test.mjs
2e05074cd9d15d810103658af3858161cee2af78b0a2e1ba910222fab3e84401 packages/bus/tests/citation-guard.test.mjs
2c7a2102e2e0244876e41b664f4f706baefe3375100b956655551db1230f5da3 packages/bus/tests/citation-helpers.mjs
168dcac99d9bfdfdf5ff0eaa2c0fff91595b351b4d0092dc299532c9c32869f0 packages/bus/tests/citation-runtime.test.mjs
abaeac64f2c3bf8ba83c9a4488edd9105c4707a6564560c5333d5421445653af packages/business/src/business.mjs
3a6044de5d1ca2cc35c5285b460c3e402b4274837e5d88b97f489797f6004903 packages/business/src/organization.mjs
4d2eb11beaa80175e524af1b95c81e7164990fba1d3e1754f5ba06eee390a14f packages/business/tests/reply-limits.test.mjs
a2bb98734bcc2556f8b2168f0faf8a89f7064c3f0aa49feb7d1975d596192f09 packages/cli/README.md
2f291a71f490f2741edada7a3e3788500f8976a08eb8ab1411f6c5982f778260 packages/cli/src/limits.mjs
f38af2d46d5f5f6388f599912507b94b87a0bf9dcc2104bb2187c38ee35118d5 packages/cli/tests/reply-limits.test.mjs
6ad72b4245e0a66e32725941900c1ece64c2e5de2fb73d65c8e042b4f3a691a6 packages/harness/src/runner.mjs
a5ef1b65230239a7baf6d0e8f2b8a51c0516348c7c4339a55b3f0a1a6ff531ba packages/harness/tests/citation-runner.test.mjs
330bc71bf6c7e64d3ddb70440903d2d9acf7878d44a49d7e30c2352ee4c807ec packages/harness/tests/fixtures/citation-adapter.mjs
f710d9600a17f6e2989a289cfe84e58f161d86c7306605946ce05fa71b364eb2 packages/library/src/guard.mjs
c0d630798914e300e461c247340533328e97119e54909c6a9406340e61fed8b7 packages/library/src/index.mjs
3e04fa25a64334d33ffbec704205b32cd01992f2d341e908f933a345199beee0 packages/library/src/limits.mjs
7b46f47b5e9d6b554b5d39bce2cd95c4610f5f35b8ab8fdc5a2864b3214be809 packages/library/src/reply-protocol.mjs
406146ebbce3710f308243b684a1c17e7626c1b65a4468489364317e31537a48 packages/library/tests/guard.test.mjs
39c8e6c8250a13fa43015fb2c407195e30ee642f729a9f6a644c38b4ea758a72 packages/seat/src/sandbox.mjs
@@ -0,0 +1,23 @@
eeca81ab965f9e94f930ee5f51d16f019af6368bc6c3994895e204f7a54ec8d2 packages/bus/src/broker.mjs
ad3c686a089f67f3c89610937c6fc9b32367cea5d9735125d89bef042082d4e8 packages/bus/src/client.mjs
36b05dd3119e5929211aa1cc5d45c5043f5a1c34567ddc7cac8f002835d44abe packages/bus/src/runtime.mjs
66b26d131a19f4f411686427274936850c1ff0aed11e9b281ae4aadcf4b289fc packages/bus/src/server.mjs
cdd0304ec25ef1ad3e31c52502fa46f2c80bd77c8d3c2e13f8ed4b5328f342c9 packages/bus/tests/citation-availability.test.mjs
2e05074cd9d15d810103658af3858161cee2af78b0a2e1ba910222fab3e84401 packages/bus/tests/citation-guard.test.mjs
2c7a2102e2e0244876e41b664f4f706baefe3375100b956655551db1230f5da3 packages/bus/tests/citation-helpers.mjs
168dcac99d9bfdfdf5ff0eaa2c0fff91595b351b4d0092dc299532c9c32869f0 packages/bus/tests/citation-runtime.test.mjs
abaeac64f2c3bf8ba83c9a4488edd9105c4707a6564560c5333d5421445653af packages/business/src/business.mjs
3a6044de5d1ca2cc35c5285b460c3e402b4274837e5d88b97f489797f6004903 packages/business/src/organization.mjs
4d2eb11beaa80175e524af1b95c81e7164990fba1d3e1754f5ba06eee390a14f packages/business/tests/reply-limits.test.mjs
a2bb98734bcc2556f8b2168f0faf8a89f7064c3f0aa49feb7d1975d596192f09 packages/cli/README.md
2f291a71f490f2741edada7a3e3788500f8976a08eb8ab1411f6c5982f778260 packages/cli/src/limits.mjs
f38af2d46d5f5f6388f599912507b94b87a0bf9dcc2104bb2187c38ee35118d5 packages/cli/tests/reply-limits.test.mjs
6ad72b4245e0a66e32725941900c1ece64c2e5de2fb73d65c8e042b4f3a691a6 packages/harness/src/runner.mjs
a5ef1b65230239a7baf6d0e8f2b8a51c0516348c7c4339a55b3f0a1a6ff531ba packages/harness/tests/citation-runner.test.mjs
330bc71bf6c7e64d3ddb70440903d2d9acf7878d44a49d7e30c2352ee4c807ec packages/harness/tests/fixtures/citation-adapter.mjs
f710d9600a17f6e2989a289cfe84e58f161d86c7306605946ce05fa71b364eb2 packages/library/src/guard.mjs
c0d630798914e300e461c247340533328e97119e54909c6a9406340e61fed8b7 packages/library/src/index.mjs
98ef45ed61144aaea44d8aea1ac43082b6d340297e46846d01772da38728e530 packages/library/src/limits.mjs
7b46f47b5e9d6b554b5d39bce2cd95c4610f5f35b8ab8fdc5a2864b3214be809 packages/library/src/reply-protocol.mjs
406146ebbce3710f308243b684a1c17e7626c1b65a4468489364317e31537a48 packages/library/tests/guard.test.mjs
39c8e6c8250a13fa43015fb2c407195e30ee642f729a9f6a644c38b4ea758a72 packages/seat/src/sandbox.mjs
@@ -0,0 +1,23 @@
eeca81ab965f9e94f930ee5f51d16f019af6368bc6c3994895e204f7a54ec8d2 packages/bus/src/broker.mjs
ad3c686a089f67f3c89610937c6fc9b32367cea5d9735125d89bef042082d4e8 packages/bus/src/client.mjs
36b05dd3119e5929211aa1cc5d45c5043f5a1c34567ddc7cac8f002835d44abe packages/bus/src/runtime.mjs
66b26d131a19f4f411686427274936850c1ff0aed11e9b281ae4aadcf4b289fc packages/bus/src/server.mjs
cdd0304ec25ef1ad3e31c52502fa46f2c80bd77c8d3c2e13f8ed4b5328f342c9 packages/bus/tests/citation-availability.test.mjs
2e05074cd9d15d810103658af3858161cee2af78b0a2e1ba910222fab3e84401 packages/bus/tests/citation-guard.test.mjs
2c7a2102e2e0244876e41b664f4f706baefe3375100b956655551db1230f5da3 packages/bus/tests/citation-helpers.mjs
9768b6dc5ae078c5cc4f76473097287b74c5bc5853d39e1f57f153e646f861af packages/bus/tests/citation-runtime.test.mjs
abaeac64f2c3bf8ba83c9a4488edd9105c4707a6564560c5333d5421445653af packages/business/src/business.mjs
3a6044de5d1ca2cc35c5285b460c3e402b4274837e5d88b97f489797f6004903 packages/business/src/organization.mjs
4d2eb11beaa80175e524af1b95c81e7164990fba1d3e1754f5ba06eee390a14f packages/business/tests/reply-limits.test.mjs
a2bb98734bcc2556f8b2168f0faf8a89f7064c3f0aa49feb7d1975d596192f09 packages/cli/README.md
2f291a71f490f2741edada7a3e3788500f8976a08eb8ab1411f6c5982f778260 packages/cli/src/limits.mjs
f38af2d46d5f5f6388f599912507b94b87a0bf9dcc2104bb2187c38ee35118d5 packages/cli/tests/reply-limits.test.mjs
6ad72b4245e0a66e32725941900c1ece64c2e5de2fb73d65c8e042b4f3a691a6 packages/harness/src/runner.mjs
a5ef1b65230239a7baf6d0e8f2b8a51c0516348c7c4339a55b3f0a1a6ff531ba packages/harness/tests/citation-runner.test.mjs
330bc71bf6c7e64d3ddb70440903d2d9acf7878d44a49d7e30c2352ee4c807ec packages/harness/tests/fixtures/citation-adapter.mjs
f710d9600a17f6e2989a289cfe84e58f161d86c7306605946ce05fa71b364eb2 packages/library/src/guard.mjs
c0d630798914e300e461c247340533328e97119e54909c6a9406340e61fed8b7 packages/library/src/index.mjs
98ef45ed61144aaea44d8aea1ac43082b6d340297e46846d01772da38728e530 packages/library/src/limits.mjs
7b46f47b5e9d6b554b5d39bce2cd95c4610f5f35b8ab8fdc5a2864b3214be809 packages/library/src/reply-protocol.mjs
406146ebbce3710f308243b684a1c17e7626c1b65a4468489364317e31537a48 packages/library/tests/guard.test.mjs
39c8e6c8250a13fa43015fb2c407195e30ee642f729a9f6a644c38b4ea758a72 packages/seat/src/sandbox.mjs
+90
View File
@@ -0,0 +1,90 @@
#!/usr/bin/env python3
"""Run only on Sage CLEAR. Mutate isolated HEAD archives; never edit the checkout.
A green control run is required before each negative result counts as a kill.
Usage: python3 agents/beakley/work/queue-217/mutants.py OUTPUT_DIRECTORY
"""
from pathlib import Path
import io
import hashlib
import os
import subprocess
import sys
import tarfile
import tempfile
ROOT = Path(__file__).resolve().parents[4]
OUT = Path(sys.argv[1]).resolve()
OUT.mkdir(parents=True, exist_ok=True)
WRITER = "packages/business/src/organization.mjs"
BROKER = "packages/bus/src/broker.mjs"
CLIENT = "packages/bus/src/client.mjs"
ATOMIC = "if (check) this.#event(s, 'action.allowed', { action: 'message.checked', message: mid, check }, mid, checkEventId(mid));"
REENTER = "return this.#reenter(cap, s, { verb: 'message.send', args }, check);"
SPLIT = """const result = this.#reenter(cap, s, { verb: 'message.send', args }, check);
if (check) this.#store.transaction(() => this.#event(s, 'action.allowed', { action: 'message.checked', message: result.id, check }, result.id, checkEventId(result.id)));
return result;"""
MUTANTS = [
("M1-writer-fence", [(WRITER, " replyLimitsFence(old, document, actor);", ""),
(WRITER, " replyLimitsFence(old, written, actor);", "")],
["packages/business/tests/reply-limits.test.mjs"]),
("M2-incoming-human", [(WRITER, "actor === old.human", "actor === document.human")],
["packages/business/tests/reply-limits.test.mjs"]),
("M3-split-check-transaction", [(BROKER, ATOMIC, ""), (BROKER, REENTER, SPLIT)],
["packages/bus/tests/citation-guard.test.mjs"]),
("M5-hide-library-unavailable", [("packages/library/src/guard.mjs",
"refuse('citation-unavailable', 'The library is busy or unavailable. Retry the answer when the library is available.');",
"served = null;")], ["packages/bus/tests/citation-availability.test.mjs"]),
("M4-drop-client-reason", [(CLIENT, "new BusError(r.error, typeof r.reason === 'string' ? r.reason.slice(0, 300) : undefined)", "new BusError(r.error)")],
["packages/bus/tests/citation-guard.test.mjs"]),
]
archive = subprocess.check_output(["git", "archive", "HEAD", "packages", "roles", "scripts", "tools", "docs", "package.json", "RELEASE"], cwd=ROOT)
summary = []
selected = set(sys.argv[2:])
product_files = [line.split(' ', 1)[1] for line in (ROOT / 'agents/beakley/work/queue-217/manifest.r5.sha256').read_text().splitlines()]
def hashes(base, files):
return {file: hashlib.sha256((base / file).read_bytes()).hexdigest() for file in files}
original_products = hashes(ROOT, product_files)
for name, changes, tests in MUTANTS:
if selected and name not in selected:
continue
with tempfile.TemporaryDirectory(prefix="row217-mutant-") as directory:
work = Path(directory)
with tarfile.open(fileobj=io.BytesIO(archive)) as source:
source.extractall(work, filter="data")
modules = ROOT / "node_modules"
if modules.is_symlink():
raise SystemExit('root node_modules must be a local install, never a canonical link')
if modules.exists():
os.symlink(modules.resolve(), work / "node_modules", target_is_directory=True)
cmd = ["timeout", "-k", "10", "120", "node", "--test", *tests]
with (OUT / f"{name}-control.log").open("w") as log:
control = subprocess.run(cmd, cwd=work, stdout=log, stderr=subprocess.STDOUT, timeout=120)
if control.returncode:
raise SystemExit(f"{name}: control RED, no mutant result claimed")
originals = {file: (work / file).read_bytes() for file, _, _ in changes}
try:
for file, before, after in changes:
path = work / file
text = path.read_text()
if text.count(before) != 1:
raise SystemExit(f"{name}: expected exactly one mutation anchor in {file}")
path.write_text(text.replace(before, after))
with (OUT / f"{name}.log").open("w") as log:
mutant = subprocess.run(cmd, cwd=work, stdout=log, stderr=subprocess.STDOUT, timeout=140)
if mutant.returncode != 1:
raise SystemExit(f"{name}: expected assertion failure exit 1, got {mutant.returncode}")
finally:
for file, content in originals.items():
(work / file).write_bytes(content)
assert all((work / file).read_bytes() == content for file, content in originals.items())
assert hashes(ROOT, product_files) == original_products, 'checkout product hashes changed'
(OUT / f"{name}-restored.sha256").write_text(''.join(f'{digest} {file}\n' for file, digest in sorted(original_products.items())))
with (OUT / f"{name}-restored-green.log").open("w") as log:
restored = subprocess.run(cmd, cwd=work, stdout=log, stderr=subprocess.STDOUT, timeout=140)
if restored.returncode:
raise SystemExit(f"{name}: restored control RED")
summary.append(f"{name}: killed (control green, mutant exit {mutant.returncode}, hashes restored, restored green)")
(OUT / "summary.txt").write_text("\n".join(summary) + "\n")
print(summary[-1], flush=True)
@@ -0,0 +1,112 @@
1: e25ef0373 ! 1: b9ef816ff launchpad: row 217 C2-06 work in progress, UNTESTED, handed to Beakley (mos-1500)
@@ packages/bus/src/broker.mjs: export class Broker {
if (CREDENTIAL_VERBS.includes(request.verb)) return this.#requestCredential(s, request.verb, structuredClone(args));
if (request.verb === 'instance.hire' || request.verb === 'instance.fire')
return this.#chiefLifecycle(s, request.verb, structuredClone(args));
+ if (request.verb === 'grants.scope' || request.verb === 'grants.scope.set')
+ return this.#grantScopeVerb(s, request.verb, structuredClone(args));
- if (["limits", "limits.set", "organization.set", "organization.revision", "plugins", "plugins.set", "instances", "instances.set", "routes", "routes.set", "veto.set"].includes(request.verb)) {
+ if (["limits", "limits.set", "organization.set", "organization.revision", "plugins", "plugins.set", "instances", "instances.set", "routes", "routes.set", "veto.set", "library.limits.set"].includes(request.verb)) {
// Row 123 (#1617, REQ-COS-1, REQ-LIMIT-1): organization.set is limits.set for a role whose
@@ packages/bus/src/runtime.mjs: export async function startBroker({
project: {
readSpec: context => projectModule.readSpec({ ...context, dataRoot }),
@@ packages/bus/src/runtime.mjs: export async function startBroker({
- else if(verb==='plugins.set')result=plugins.set(id,args,actor);
- // Row 194 (#1692, V6): the human's keep and noHire lists, through the instance writer.
else if(verb==='veto.set')result=instances.veto(id,args,actor);
+ // Row 298: the human's grant scope, through the instance writer.
+ else if(verb==='grants.scope.set')result=instances.grantScope(id,args,actor);
+ // C2-06 M11: the human's replyLimits, through the organization writer's fence.
+ else if(verb==='library.limits.set')result=setReplyLimits(organizationWriter({dir:organization.dir,rolesDir:organization.rolesDir}),id,args,actor);
// Row 194 (D2.1, D2.2): the chief's hire and fire, with the reason in the change context.
@@ packages/business/src/organization.mjs: export function organizationWriter({ dir
const parent = join(dir, "businesses");
directory(evidence);
@@ packages/business/src/organization.mjs: export function organizationWriter({ dir, rolesDir, barrier = () => {} }) {
- // mapping, including library playgrounds and hybrid universes.
- if (canonicalJson(document?.projects) !== canonicalJson(old.projects))
- fail('organization-projects-protected');
-+ replyLimitsFence(old, document, actor);
- validateBusinessDocument(document, file, { rolesDir });
- const bytes = JSON.stringify(document, null, 2) + "\n";
- // Check and log exactly what lands on disk, for every setter: a value JSON
+ // mapping, including library playgrounds and hybrid universes.
+ if (canonicalJson(document?.projects) !== canonicalJson(old.projects))
+ fail('organization-projects-protected');
++ replyLimitsFence(old, document, actor);
+ validateBusinessDocument(document, file, { rolesDir });
+ const bytes = JSON.stringify(document, null, 2) + "\n";
+ // Check and log exactly what lands on disk, for every setter: a value JSON
@@ packages/business/src/organization.mjs: export function organizationWriter({ dir, rolesDir, barrier = () => {} }) {
- const written = JSON.parse(bytes);
- if (canonicalJson(written.projects) !== canonicalJson(old.projects))
- fail('organization-projects-protected');
-+ replyLimitsFence(old, written, actor);
- validateBusinessDocument(written, file, { rolesDir });
- const after = sha256(bytes);
- const transaction = randomUUID();
+ const written = JSON.parse(bytes);
+ if (canonicalJson(written.projects) !== canonicalJson(old.projects))
+ fail('organization-projects-protected');
++ replyLimitsFence(old, written, actor);
+ validateBusinessDocument(written, file, { rolesDir });
+ if (beforeWrite) {
+ beforeWrite();
@@ packages/business/src/organization.mjs: export function organizationWriter({ dir, rolesDir, barrier = () => {} }) {
});
}
@@ packages/library/src/guard.mjs (new)
+}
## packages/library/src/index.mjs ##
-@@ packages/library/src/index.mjs: export { renderItems, KINDS, NOTICES, UNREADABLE } from './render.mjs';
- export { survey, formatSurvey, surveyMain } from './survey.mjs';
- export { SYNC_STATE_FILE, mirrorPath, ensureMirror, withLibraryLock, servedCommit, readSyncState, libraryStatus, readLibraryFile } from './mirror.mjs';
+@@ packages/library/src/index.mjs: export { SYNC_STATE_FILE, mirrorPath, ensureMirror, withLibraryLock, servedCommi
export { syncCommand, sync, ASKPASS, SLOT, SYNC_INTERVAL_MS } from './sync.mjs';
+ export { buildIndex, indexFor, clearIndexCache, indexCacheSize } from './index-build.mjs';
+ export { sees, find, get, search, manuscript, universeInfo, QUERY_REPLY_CAP, LOOKUP_LIMIT, MANUSCRIPT_LINES } from './query.mjs';
+export { REPLY_LIMITS, resolveReplyLimits, checkReplyLimits } from './limits.mjs';
+export { GUARD_CODES, FIXED_TEXTS, WEB_CITE_DEFINITIONS, REASON_MAX, GuardError, parseReply, checkReply, libraryReader, guardReply, lastCommits } from './guard.mjs';
2: c25f5b8da ! 2: 7400509ba row 217: citation runner retry and acceptance draft (Untested)
@@ Commit message
row 217: citation runner retry and acceptance draft (Untested)
## BUILD-LOG.md ##
-@@ BUILD-LOG.md: Row 299 (573, #1806, Gander, Filbert): before, the P10 band test timed a fault r
- 2026-10-23T17:29:46Z | Gyro Vikunja571 sage-3542 Connections amendment | Branch gyro/editor-connections-design cut exactly from landed PRD1.17 30e6bb680; read REQ-LIB-5 in that PRD. Replaced stale J-b waits in parent and W4. Proposed W8 owns current authorized Markdown/DOCX links/backlinks list, labels, versioned refresh, leakage refusals and fixture tests. Build order under mos-1470/comment961 is W7 closed routing candidate, W8 landing, then W7 human first-real-import opening. No REQ-LIB-8 condition or acceptance change. Q234/mos-1363/S0 M1-M14 and post-10-27/MVP priority fixed. Static diff, twelve brief sections and append-only checks pass. No repo Node, tests, build, browser, queue mutation or live action. Fenton reviews after authorized docs branch push; Sage lands on approval.
+@@ BUILD-LOG.md: remain; no live state, schema or bus policy change.
- 2026-10-23T17:32:37Z | Gyro sage-3544 fenton-0016 N1/N2 delta | Before: W7 Gate/final real-conversion list omit the W8 build-order cross-reference and W8 human-view filtering cites agent settings. After: both locations explicitly put W8 landing before human opening as mos-1470 build order, not acceptance; comment/tracked-deletion links are not current story links and never appear in the human Connections view regardless of agent settings. New commit atop approved 5af060fb5, no amend. Static diff and append-only checks pass. Docs only, no repo Node/tests/live action. Fenton checks only this delta.
-+
+ 2026-10-24 | Goldie | Row265 / #1770 verified (mos-1567, sage-3942) | Approved correction adds solely address import pin + Row265 comment to project-runtime.test and one pure-source RUNNER_FILES mount; new block checks parser has no imports. Serialized fresh-short-TMP timeout-k10: unchanged sandbox10/10, parser15/15, rooms18/18, full bus957/957, twelve named refusal mutants killed (each Node1, driver0), restored parser15/15 + rooms18/18. All positives zero fail/skip/cancel; every mutation restored full broker SHA71b32ee4. Old first-red evidence retained, no other old-test change. Slot returned goldie-0034; Boyd packet explicitly includes mount-list review, candidate push next.
+ 2026-10-24T07:18:53Z | Sage | Row 327 (#1825, Bradford, Poe and Dewey) LANDED 68c08b4e7. Before: refactor at 94d9e90a6; the push guard was a scratch script with no reviewed-binary check. After: scripts/push-check.sh and scripts/test-push-check.sh on refactor, 3 commits cherry-picked onto 6a5e12511 with blobs equal to the round 3 tip d858c9f8b, plus doc commits 76f84465f and 68c08b4e7. Binaries are found by numstat or a NUL in the first 8000 committed bytes, regardless of attributes; each needs its sha256 and path in an approved latest-round candidate; an unconfirmed queue tail exits 2. Reviews: Poe c31525 rev 3882, Dewey c31526 rev 3883. Gate: 1st run 06:57Z RED, not the candidate: canonical node_modules was empty from 05:45:15Z (sage-4023). Rerun with its own root npm ci GREEN 07:15:49Z: 17 package suites 0 failures (cli 986, plugins 119, webui 418), 11 scripts exit 0, push-check 6 mutants KILLED; skips are the queue canonical-root check and the row 244 live provider cases. The landed push-check.sh passed its own push (NO_BINARY, NO_ATTRIBUTION, PUSH_READY). mos-1575: gates install their own node_modules; canonical restored with npm ci (128 packages).
+2026-10-23 | Beakley (88b97f65) | Row 217 #1718 takeover, before implementation | Clean base 45dca69f6 on beakley/row217. Recovering Launchpad handoff for citation guard, live settings, page store and runner retry. Acceptance is C2-06/design 5.2 plus sage-3595/3599/3602. Tracking agents/beakley/work/queue-217/BUILD.md; no product changes or Node/tests; Sage CLEAR required.
+
+2026-10-23 | Beakley (88b97f65) | Row 217 #1718 untested draft checkpoint | Continued Launchpad e25ef0373; added runner retry/text/note implementation, pure protocol constants and sage-3640 approved single read-only mount, CLI documentation and new acceptance test files. Static checks caught missing projects compatibility, async request mutation and Git pathspec matching; bounded fixes and regression tests authored. git diff --check clean. No Node/test/mutant executed; Sage holds CLEAR. 283/216/285 dependency checks and all acceptance execution remain open. Packet agents/beakley/work/queue-217/MANIFEST.md.
@@ agents/beakley/work/queue-217/mutants.py (new)
## docs/SESSIONS.md ##
@@ docs/SESSIONS.md: are never rewritten or removed; corrections are new entries.
- 2026-10-23T17:48:43Z | Scrooge (629b6cd3) | Row 252 Console inbox Approve and Deny (#1753) | Rebased onto 306 landing as 580037105 (range-diff all =), slot run bus 907/0 webui 410/0 cli 943/0, in-review revs 3608/3609, Webby r1 APPROVE, J1-J19 specs to Sage; Sage landed 45ea3fa0d (done rev 3616). Part 1 mutant results were never in BUILD.md; they went to Sage by T3 (scrooge-0252-mutant-specs).
- 2026-10-23 | Sage (1ef1e4f8) | Rows 308 and 252 landings, 571 Connections design amendment, Vikunja 597 | 308 (PRD 1.17, #1815) landed 30e6bb680 and 252 (#1753) landed 45ea3fa0d (replay of 580037105 onto 30e6bb680, range-diff all =), each after a full gate on the landed tree (252 also J1-J19, J11c and J18 equivalent); Gyro's 571 amendment (Fenton APPROVE) landed e8bb13df8; Vikunja 570, 435 and 597 done, canonical webui esbuild 0.28.2; queue revs 3589-3616 committed 59f013247
- 2026-10-23 | Sage (1ef1e4f8) | Vikunja 571 W build rows; rows 13, 42, 257 and 289 check | Filed the design's ten W rows as queue rows 309-318 (revs 3617-3626, owners set to unassigned 3627-3636, queue commit 293b42fee pushed); Vikunja 571 done (comment 994). Row 13's candidate fd72d2689 is on refactor, gate is Monday's row 7 ledger run; 42 paused under mos-1184; 257 post-v1; 289 waits on 214 and 288. Slot released 17:56Z.
+ 2026-10-24T04:27Z | Goldie (a13dd6d5-5e73-4b7d-8318-02abeff24940) | Row265 / #1770 C2-09b rooms | Goldie owns build, Boyd reviews under sage-3915. New goldie/row265 worktree at ec86f2c84, claim rev3814; room verbs/parser/new tests prepared, no old tests changed. Sage-3932 slot: new parser14/14 and rooms18/18 passed; whole bus in progress before refusal mutants, stop rule active.
+ 2026-10-24T04:35Z | Goldie (a13dd6d5-5e73-4b7d-8318-02abeff24940) | Row265 / #1770 verified | First slot stopped at project-runtime import pin. mos-1567 narrowly authorizes pin and pure-source mount correction. sage-3942 rerun: sandbox10/10, parser15/15, rooms18/18, bus957/957, twelve refusal mutants killed/restored SHA71b32ee4, parser15/15 + rooms18/18 again. Slot returned goldie-0034; no further test runs. Boyd reviews RUNNER_FILES alongside rooms; own-branch push/claimant in-review next.
+ 2026-10-24T07:18:53Z | Sage (1ef1e4f8) | Row 327 / #1825 push guard landed (mos-1572 option A, mos-1575) | Gate went red 06:57Z on an empty canonical node_modules (Glomgold's webui npm ci through a link to canonical, glomgold-0011); rerun with its own npm ci GREEN 07:15:49Z on 1bd214e38; pushed 68c08b4e7 07:18:03Z; #1825 closed c31530; canonical restored (128 packages); brief template rule 4db23a51f | landed
+
+2026-10-23 | Beakley (88b97f65, Codex gpt-6.1-sol) | Row 217 #1718 takeover under Q245 | Registered beakley/row217; read brief/design and standing Sage rulings; awaiting Launchpad ref before implementation. Queue next refused linked worktree; reported to Sage. Untested, no Node/test run pending CLEAR.
3: b6c3129d2 ! 3: a447880cb row 217: early-review coverage and availability RED cases (Untested)
@@ Commit message
row 217: early-review coverage and availability RED cases (Untested)
## BUILD-LOG.md ##
-@@ BUILD-LOG.md: Row 299 (573, #1806, Gander, Filbert): before, the P10 band test timed a fault r
+@@ BUILD-LOG.md: remain; no live state, schema or bus policy change.
2026-10-23 | Beakley (88b97f65) | Row 217 #1718 takeover, before implementation | Clean base 45dca69f6 on beakley/row217. Recovering Launchpad handoff for citation guard, live settings, page store and runner retry. Acceptance is C2-06/design 5.2 plus sage-3595/3599/3602. Tracking agents/beakley/work/queue-217/BUILD.md; no product changes or Node/tests; Sage CLEAR required.
2026-10-23 | Beakley (88b97f65) | Row 217 #1718 untested draft checkpoint | Continued Launchpad e25ef0373; added runner retry/text/note implementation, pure protocol constants and sage-3640 approved single read-only mount, CLI documentation and new acceptance test files. Static checks caught missing projects compatibility, async request mutation and Git pathspec matching; bounded fixes and regression tests authored. git diff --check clean. No Node/test/mutant executed; Sage holds CLEAR. 283/216/285 dependency checks and all acceptance execution remain open. Packet agents/beakley/work/queue-217/MANIFEST.md.
4: dde5b8496 = 4: 2655ec010 row 217: keep fixture status on its current served tip (Untested)
@@ -0,0 +1,30 @@
# Row217 round2 test receipts
Sage CLEAR sage-4042/4043, 2026-10-24. Source revision 2d274a5b6. All runs
serialized; source files stayed unchanged through the whole-suite and mutant pass.
Commands used TMPDIR=/mnt/storage/scratch/tmp/tNoueZ and timeout -k 10.
- npm ci --ignore-scripts --no-audit --no-fund at the worktree root (300s bound),
then packages/webui (300s). Actual directories, no canonical links.
- node --test packages/bus/tests/citation-availability.test.mjs (180s).
- python3 agents/beakley/work/queue-217/mutants.py <m5-red> M5-hide-library-unavailable
(420s). Green control, the authorized pre-fix RED stand-in, restore+green.
- node --test --test-concurrency=1 with the seven new test files (900s):
library/guard, business/reply-limits, cli/reply-limits, bus/citation-availability,
bus/citation-guard, bus/citation-runtime and harness/citation-runner. Whole files.
- First attempt 56/57: new runtime fixture invalid-authority. Only that fixture
was corrected to the established broker projection. runtime-fixture-retry.log
is its 1/1 rerun (180s); touched-rerun.log is the whole-file 57/57 rerun.
- npm test in packages/library, then business (900s each), bus and cli (1200s
each), harness and seat (900s each). Never overlapped package runs.
- python3 agents/beakley/work/queue-217/mutants.py <mutants> (900s).
The driver wraps each Node run in timeout -k 10 120. Each negative exits1,
is preceded by a green control, restores its product bytes/hashes and then
reruns the restored control green. No checkout product file is mutated.
summary.json holds complete counts; summary.txt is the short version. M1 anchors
are recorded in m1-anchors.txt. The five *-restored.sha256 files match current
product files. Full outputs are retained, including the first new-test failure.
Negative logs intentionally keep Node's whitespace-only diagnostic padding;
standard git diff --check flags that padding, not source code. No binary logs.
No old test failed or was edited. Sage runs scripts/test-*.sh at landing.
@@ -0,0 +1,11 @@
✔ C2-06 held library lock gives the agent citation-unavailable and its retry reason (5142.976705ms)
✔ C2-06 malformed sync state is availability failure, never a fabricated invalid cite (33.874404ms)
✔ C2-06 no mirror or freshly initialized empty mirror still means no served citation (33.746516ms)
ℹ tests 3
ℹ suites 0
ℹ pass 3
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 5307.376982
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,280 @@
npm notice run @mosaic/[email protected] test
npm notice run node --test tests/
✔ a grant's level is collaborator or viewer (2.351697ms)
✔ any other level refuses with the key path named (1.505284ms)
✔ covers tells a viewer grant from a collaborator grant (0.605812ms)
✔ covers refuses a call with no level, so a viewer grant can't slip past a collaborator check (0.247487ms)
✔ a viewer grant still needs its business, project, instance and expiry to cover (0.247397ms)
✔ a valid document passes and comes back frozen (4.146183ms)
✔ checkAccess does not freeze or alias the caller's document (0.552481ms)
✔ LEVELS is the single allowed level set, collaborator and viewer (row 193a) (0.259109ms)
✔ accessFilePath is access.json in the config directory (0.495701ms)
✔ top level: object, unknown keys, accessVersion, revision, arrays (2.131141ms)
✔ users: unknown keys and the id rule (0.609866ms)
✔ users: human, tester and any business's human are refused (0.455944ms)
✔ users: home is a given peer or local (0.372673ms)
✔ users: subjects, provider, sub, uniqueness and owner subjects (2.126611ms)
✔ grants: unknown keys, id, user and business (0.897075ms)
✔ grants: projects is ["*"] or distinct lowercase UUIDs (1.199677ms)
✔ grants: instances is ["*"] or distinct declared instances of that business (0.889396ms)
✔ grants: any level other than collaborator or viewer refuses, naming grants[i].level (1.13158ms)
✔ grants: expires is optional ISO time, and a past expiry is not refused (0.979808ms)
✔ the context is required and checked (1.713394ms)
✔ loadAccess reads a valid file and checks it (0.755936ms)
✔ loadAccess refuses a missing file, a symlink and a directory with exit 4 (0.519376ms)
✔ loadAccess refuses another owner and group or other write (0.581157ms)
✔ loadAccess refuses bad JSON and a bad document with exit 2 (1.841309ms)
✔ covers: * and listed ids match (0.340508ms)
✔ covers: an unlisted project, instance or business doesn't match (0.20254ms)
✔ covers: an expired grant doesn't match, at and after the instant (0.698261ms)
✔ covers: level is the least level asked for (row 193a) (0.213107ms)
✔ covers: a missing or unknown level throws (row 193a, N1) (0.385188ms)
✔ covers: a grant with an unknown level covers nothing (row 193a) (0.191435ms)
✔ covers: now must be a valid Date (0.21008ms)
✔ today's files load unchanged: identity, publish and remote are optional (11.61814ms)
✔ a granted agent loads with its identity, grant and the project's upstream (4.906248ms)
✔ N10: publish needs identity and a gitea definition, and the error names the grant (9.522958ms)
✔ publish names declared projects that have a remote, each once (7.911234ms)
✔ identity fields are checked (14.073433ms)
✔ D9c: the upstream must be its own normalized form, exactly /OWNER/REPO (29.451403ms)
✔ D9c: one .git is stripped, and the fork is built from the stripped name (1.733511ms)
✔ D9c: gitea.url names the instance only (10.698646ms)
✔ the upstream's host and port must be the agent's Gitea's (4.064711ms)
✔ remote-not-fork: an upstream the agent's own user owns, compared without case (10.115713ms)
✔ store references: own path only (design D1, D3a) (0.50611ms)
✔ the role file loads and resolves through loadBusiness (18.165733ms)
✔ the shipped file is exactly the approved list (1.392044ms)
✔ the assistant's authority is message.send and record.write within role (4.312182ms)
✔ the assistant talks to the user and the chief of staff only, and no other shipped role is limited (0.978023ms)
✔ a business grant through limits does not widen the role (6.715605ms)
✔ a launch block whose by is the assistant is refused (3.553443ms)
✔ the instance takes no credential references and no tracker (9.975785ms)
✔ an arbiter whose role definition declares messaging lists is refused, for each kind (8.992963ms)
✔ an arbiter without messaging lists is accepted beside the limited assistant (3.104416ms)
✔ the contract passes work to the chief of staff and directs no one (0.788753ms)
✔ REQ-HARN-2: the assistant, companion and research hold the web grant, and no other role file does (1.683056ms)
✔ C2-04: library mappings load without roots, remain frozen, and retain mapping refusals (31.538067ms)
✔ C2-04: an otherwise valid publish grant cannot name a library repo (4.356759ms)
✔ config directory and file path follow MOSAIC_CONFIG (0.467526ms)
✔ the fixture business validates and comes back frozen (4.106001ms)
✔ two instances may share a definition (2.097865ms)
✔ top-level refusals (6.537312ms)
✔ arbiters and projects (24.968268ms)
✔ role instances (9.057417ms)
✔ Vikunja bots (29.820456ms)
✔ a role without Vikunja takes no tracker block (9.629575ms)
✔ credential references match the definition's services (11.680645ms)
✔ launch (31.945766ms)
✔ REQ-THREAD-2 REQ-LAUNCH-1 launch.threadIdleSeconds: absent is the default, a positive integer is used, anything else refuses (34.141496ms)
✔ loadBusiness: file checks (12.995702ms)
✔ loadBusiness: not a regular file (111.510997ms)
✔ loading writes nothing (1.787307ms)
✔ names that are Object.prototype properties don't count as declared (5.786433ms)
✔ the shipped example refuses as written and validates once filled in (2.551686ms)
✔ persona vars: agent layer, creative definition only, both or neither (26.121282ms)
✔ row 194 keep, noHire and retired validate, and a file without them loads as before (4.607715ms)
✔ row 194 each bad keep, noHire or retired entry refuses (19.966409ms)
✔ row 323: committed Case 1 document loads unchanged through the business loader (10.685638ms)
✔ row 323: real business validate accepts the Case 1 fixture without tracker credentials (226.106251ms)
✔ row 323: real factory install accepts the document's scratch input and writes it unchanged (294.937207ms)
✔ row 323: the Case 1 business boots without a tracker or @sync credential (60.850375ms)
✔ row 323: factory install refuses bus.tester false before writing (39.485453ms)
✔ row 323: literal library key refuses through final business validation (176.986326ms)
✔ row 323: a library project refuses through the factory profile plan (36.685902ms)
✔ row 325: the Case 1 project's sole key matches the repository project id (7.063988ms)
✔ row 325: real business validate reports the copied repository project valid (203.591785ms)
✔ row 325: the old mosaic-stack project key refuses against those same project bytes (227.47487ms)
✔ the role file loads and resolves through loadBusiness (22.21166ms)
✔ the shipped file is exactly the approved list (0.355811ms)
✔ the resolved record matches the approved list, so a widened file fails (4.433743ms)
✔ the chief of staff holds role.launch, message.send, role.end, organization.change, record.write, instance.name, role.hire and role.fire; every other action is gated (6.025087ms)
✔ the pm does not hold role.launch (7.814194ms)
✔ a business grant of a gated action through limits does not widen the role (5.309288ms)
✔ a limit that drops role.launch leaves the chief of staff with no launch block (5.488981ms)
✔ a launch block whose by is the pm instance is refused (4.031539ms)
✔ the contract names no duty to talk to the human and the pm contract no launch (1.077581ms)
✔ the instance takes no credential references and no tracker (7.111256ms)
✔ C2-04: business validate and resolve skip a library before code projects and credential checks (581.819531ms)
✔ usage errors exit 4 (330.347677ms)
✔ validate: a good business exits 0 and prints instance digests (80.712835ms)
✔ validate: project files (358.68705ms)
✔ validate: missing files and a broken system config (272.747082ms)
✔ validate: credential reference problems exit 2 and name each one (75.47514ms)
✔ validate: a not-issued store agent dated today passes, and an issued one with a past expiry fails (152.378642ms)
✔ validate: a token file inside the repository is refused (76.459487ms)
✔ validate: role definitions come from MOSAIC_ROLES_DIR (210.323656ms)
✔ resolve: prints one instance's record (260.543734ms)
✔ resolve: refusals (375.881441ms)
✔ parse: exactly one of file or env, plus the service's date (3.551882ms)
✔ check: a good file has no problems (1.2198ms)
✔ check never opens the file: a write-only token passes (0.477268ms)
✔ check: file problems (1.60977ms)
✔ check: token files can't live in the repository or dataRoot, even through a linked directory (1.508979ms)
✔ check: dates and environment references (0.686041ms)
✔ each definition loads, with a contract file, and is exactly the approved list (4.83466ms)
✔ an organization file that declares them passes, and each resolves to least privilege (10.307081ms)
✔ the chief of staff launches each one; no other role does (11.082937ms)
✔ a C-suite role can't be made the launcher: launch.by must hold role.launch (5.052598ms)
✔ limits can narrow a C-suite role but never widen it (4.524289ms)
✔ any unknown key, tool, action or version in a role file is refused (4.904699ms)
✔ row 298: checkGrantScope takes the D2 shape and refuses anything else (2.752624ms)
✔ row 298: a missing scope is empty and a bad one falls back to empty, which covers nothing (0.482721ms)
✔ row 298: a Gitea grant is in scope only when its agent and every project are listed (0.341447ms)
✔ row 298 (sage-3594 Q2): host commands match whole argv tokens, and enrollment is never in scope (0.467524ms)
✔ row 298: a bad grantScope in the file still loads, and the read shows the fallback (18.355754ms)
✔ row 298: the writer checks the scope, logs the change and removes the key for {} (142.313501ms)
✔ row 298 (sage-3594 Q1): the general writers can't write grantScope (25.353249ms)
✔ REQ-WAIT-1: GATED_ONLY is exactly the hard waits; the new actions are in the vocabulary (1.86466ms)
✔ REQ-ROLE-2: END_PROTECTED includes the assistant's thread definition (0.234237ms)
✔ REQ-COS-3: role.hire and role.fire are routed, not hard waits (0.300439ms)
✔ REQ-WAIT-3: every action is routed or a hard wait, never both, and the routed list names only actions (0.967731ms)
✔ REQ-WAIT-3: instance.name is routed under REQ-MSG-2 (1.5), not a hard wait (row 141, sage-0589) (1.313696ms)
✔ REQ-WAIT-2: a role listing a hard wait at either class is refused; the actions that left can be granted (5.343386ms)
✔ S1: the business file refuses hosts at the top level and in a role, and host.<id> references (56.500208ms)
✔ T1: address, user and host key checks, which the enrollment raise uses (11.374442ms)
✔ T26: no wildcard and no shell, runner or interpreter as a prefix (2.722004ms)
✔ D6: argv shape and the literal prefix match (0.922698ms)
✔ C2-04: instance settings skip a library while checking a later code project (98.596648ms)
✔ row 165 read lists each instance and the definitions add accepts (16.615936ms)
✔ row 165 add: two instances join, validate exits 0, the log names the human, and the writer asks for no restart (row 194, D3) (308.207149ms)
✔ row 165 change: definition, vars and launch membership log before and after; none asks for a restart, the bus reloads (row 194, D3) (180.35178ms)
✔ row 165 refuses each validation failure and leaves the file's bytes alone (44.040709ms)
✔ T19 add of a credentialed definition writes store references dated today, names its bot, and validate exits 0 (101.60641ms)
✔ T19 add of a definition that declares host writes references for its token services only (12.273146ms)
✔ row 165 refuses a definition change to or from one that declares credentials (6.011439ms)
✔ row 165 a vars or launch change on an instance with its binding succeeds and keeps the binding (87.081633ms)
✔ row 165 refuses an END_PROTECTED definition and every change to a protected instance (9.425714ms)
✔ row 165 refuses while a project file doesn't resolve, as validate would (21.508015ms)
✔ row 165 refuses a stale revision and leaves the file's bytes alone (13.794117ms)
✔ row 65 an instance write refuses harness-off, thinking-unsupported, an unknown model and a partial fallback (38.79158ms)
✔ row 213 a creative instance is the human's: add, vars and definition changes, persona digest only (105.47603ms)
✔ row 256 T1-T3, T5 the human deletes a creative instance, no other actor does, and the assistant stays (106.119319ms)
✔ row 256 T4 the human's delete of the only listed instance, a creative one, is the last-listed refusal (3.635722ms)
✔ REQ-LIMIT-1 schema: every scope unset or zero, adjustable above four, bad values and unknown models refuse (27.767213ms)
✔ REQ-LIMIT-1 counts each exact scope at/over limit, unlimited and old tuple after model reassignment (1.218782ms)
✔ REQ-ROLE-3 writer: atomic validated revision, immutable previous bytes and authenticated actor/old/new receipt (65.935591ms)
✔ REQ-ROLE-3 writer: pre-rename fault leaves old file, post-rename recovery records commit, conflicting recovery refuses (42.79247ms)
✔ REQ-LIMIT-1 / decision145 migration prints only, preserves values, rejects ambiguity, and is idempotent (20.740471ms)
✔ REQ-LIMIT-1 shared settings validates the complete proposed selection and logs exact actor (73.013224ms)
✔ REQ-LIMIT-1 provider is table data: another provider routes separately and aliases share exact counts (5.530215ms)
✔ REQ-ROLE-3 refuses live writer locks, symlink targets and uncertain recovery without changing bytes (31.489428ms)
✔ Q169 assistants: vars and definition change and log the actor; tracker null leaves no tracker (74.510885ms)
✔ Q169 assistants: refuses other instances, other definitions, holder and credentials, empty entries, a tracker the definition has no credential for and a stale revision (46.648048ms)
✔ Q169 assistants: a definition with a vikunja credential takes a tracker change and refuses its removal or a used bot (28.59175ms)
✔ row 65 routes lists every instance with harness, model, thinking and fallback, the switched-on harnesses, the model keys and each harness's levels (4.496203ms)
✔ row 65 setRoutes saves a harness, model, thinking and whole fallback, reads each back from the file, logs the actor, and a null fallback clears all three (28.880486ms)
✔ row 65 setRoutes refuses a partial fallback, a switched-off harness, a level the harness doesn't apply, an unloaded module, an unknown model or instance, a malformed route, no change and a stale revision, with the file unchanged (33.617502ms)
✔ row 65 a file with harness vars and no plugins.harness loads and its views read; a model change still saves, and a route change refuses harness-off (15.471063ms)
✔ B7 kept instance: the models keys it names and the instances key are the human's (32.512862ms)
✔ B7 kept instance: its route is the human's (13.733689ms)
✔ M10 creative instance: models keys it names, the instances key and its route are the human's (41.972839ms)
✔ C2-04 M9: changed playground and hybrid entries leave business and changes.jsonl byte-identical (75.744651ms)
✔ C2-04 M9: code projects, additions, deletions and array changes are protected too (73.935851ms)
✔ C2-04 M9: canonical key order is allowed and a non-project setter still records its change (53.997154ms)
✔ C2-04 M9: a serialization hook cannot change projects after the canonical comparison (29.857522ms)
✔ M7/M8: library seats come from library businesses, creative seats from their creative definitions (20.881147ms)
✔ M8: a business with no library project puts no seat in either set (19.190367ms)
✔ M7/M8: a business file that is not valid JSON throws; no empty set (7.135915ms)
✔ M7/M8: an absent businesses directory gives empty sets (1.688414ms)
✔ M7/M8: a businesses path that is not a directory throws; no empty set (4.583153ms)
✔ M7/M8: a businesses symlink to a missing target throws; no empty set (2.208552ms)
✔ M7/M8: a config directory under a regular file throws (lstat fails with ENOTDIR); no empty set (0.601986ms)
✔ M7/M8: a business file that can't be read throws; no empty set (12.318486ms)
✔ T6 delete refuses in the design's order and leaves the file's bytes alone (104.896221ms)
✔ T6 delete refuses the last listed instance (7.490182ms)
✔ T6 a clean delete removes the entry and its own references, adds retired, and the name can't come back (213.690055ms)
✔ T7 veto: keep, unkeep, nohire and hire each write once, a repeat is no change, and the log names the human (171.894178ms)
✔ T7 veto refuses an unknown or END_PROTECTED keep, a bad request, a stale revision and a business without launch (26.238526ms)
✔ D2.2 hire adds and lists a new instance, logs the chief's context, and sets only model and limits (92.062371ms)
✔ D2.2 hire refuses noHire, a kept name and a listed name, and re-lists a fired one only as it was (29.586421ms)
✔ D2.2 fire delists and keeps the entry, a repeat is done with no write, and each refusal holds (88.451593ms)
✔ row 256 checkDelete passes the human's creative delete and refuses another actor's; fire still refuses (5.294872ms)
✔ row 239 T1 a fire on a revision that goes stale before the writer's lock refuses there and revokes nothing (5.756058ms)
✔ row 239 T2 a write after the revoke refused before publication carries revoked, and the file keeps the edit (7.753057ms)
✔ row 239 T3 any error after the revoke carries revoked, for a fire and a delete; a revoke that throws carries nothing (32.403692ms)
✔ Q247: omitting tracker loads as null and preserves independent role bots (10.793015ms)
✔ Q247: real business validate passes without a sync credential reference or file (168.186763ms)
✔ Q247: present tracker retains its values and validation without mutating the input (9.372029ms)
✔ Q247: present null, undefined and malformed trackers still refuse (18.314895ms)
✔ Q247: absent business tracker does not waive a role's Vikunja bot requirement (2.859494ms)
✔ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (40.546579ms)
✔ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (92.751615ms)
✔ vikunja:19/309 a patch changes only the kinds it names; null removes one kind, explicitly and in the trail (100.494327ms)
✔ vikunja:19/309 an unknown kind (set or removed), a bad module, an empty patch and null on the wrong shape are refused, nothing written (9.927988ms)
✔ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (19.985103ms)
✔ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (4.143331ms)
✔ vikunja:19/305 with an exists check, the setter refuses a module no tree file answers to, before anything is written (18.273494ms)
✔ optional project repo is preserved and must be a normalized absolute path (32.895793ms)
✔ loaded business project repo cannot be nested in any declared code checkout (6.807091ms)
✔ path and load (3.706713ms)
✔ refusals (1.897981ms)
✔ record.write is within-role for the eleven approved v2 agents, never gated-only (3.85853ms)
✔ C2-06 M11 human replacement works; omitted settings return to defaults (98.331729ms)
✔ C2-06 M11 agents and tester cannot change settings, including by changing human (55.766765ms)
✔ C2-06 M11 serialization cannot replace settings after the first fence (17.47904ms)
✔ C2-06 M11 an unrelated actor cannot appoint itself human and change reply limits (16.039248ms)
✔ C2-06 invalid setter values preserve the business and changes.jsonl (17.259974ms)
✔ C2-06 validator accepts hand-edited settings; raw reader fails closed on invalid files (19.048524ms)
✔ C2-04: a library first in projects does not hide a later project layer (21.880181ms)
✔ systemVars flattens the validated config (1.820728ms)
✔ precedence: system, business, project, project role, agent (10.989776ms)
✔ limits narrow the definition and never widen it (8.400306ms)
✔ role.launch stays within-role only for the instance the launch block names (18.468852ms)
✔ limits.authority without role.launch leaves the launcher with no launch block (13.185333ms)
✔ limits.authority narrows cross-role actions too (2.699689ms)
✔ classify (6.249491ms)
✔ the record carries what the broker and launcher need (4.7922ms)
✔ digest: key order doesn't matter, any value change does (12.395981ms)
✔ refusals (3.790542ms)
✔ the four shipped version 2 roles load (5.229965ms)
✔ shipped role scopes match addendum B section 2 and the SR runbook (2.178782ms)
✔ shipped authority follows the note's table (13.291498ms)
✔ every role file in roles/ loads through the validator, and a v2 contract exists (2.100731ms)
✔ version 1 files keep loading with no authority (1.521097ms)
✔ the conductor policy isn't a role (0.302424ms)
✔ a missing role file is exit 4, a symbolic link too (0.564721ms)
✔ version 2 refusals (3.788273ms)
✔ authority: closed vocabulary, no gated-only action, no overlap (3.881951ms)
✔ messaging: optional, role definitions and human, never the tester (1.949889ms)
✔ row 64 skills: optional, distinct skill directory names, none on version 1 (2.255987ms)
✔ credentials: Gitea scopes (1.343013ms)
✔ credentials: Vikunja scopes are a group-to-verbs map from the grantable list (1.709889ms)
✔ credentials: services (0.759517ms)
✔ contract: a non-empty regular Markdown file beside the role file (0.838905ms)
✔ the six creative roles load: read tools, message.send only, messaging with the human only (0.693212ms)
✔ M1: a creative role file wider than read and answer is refused (1.897832ms)
✔ hireable: HIRE_ALLOWED is exactly the six plain work actions, and every one is routed (0.173708ms)
✔ hireable: a list naming a definition that holds any refused action refuses at load, one case per action (18.133668ms)
✔ hireable: a mixed definition refuses, a clean list loads, and the named file's own hireable isn't read (1.146869ms)
✔ hireable: a missing, version 1, duplicate or badly named entry refuses, and the key is optional (3.734122ms)
✔ the pm and the cto check a saved spec against settled decisions and work in flight, and answer with a BLOCK or an accept (11.616694ms)
✔ the chief of staff relays a BLOCK or an accept to the assistant as a reply to the message that carried it (1.277302ms)
✔ the assistant summarizes a spec review in its own words and doesn't repeat the chief of staff's text (0.70976ms)
✔ REQ-LIMIT-3 schema: each subject kind, limit 0 and no ceiling are accepted; bad limits, times, keys and undeclared instances refuse (49.216064ms)
✔ REQ-LIMIT-3 the writer stamps since: a new limit gets now, a changed one keeps its time, a different time is refused (85.0223ms)
✔ REQ-LIMIT-3 only tokens.* at schema depth holds token limits: agent limits named `limit` save as sent, and a token limit named `limit` is stamped and reset (67.775561ms)
✔ REQ-LIMIT-3 a reset moves since to now, is logged with its actor, and refuses a path that is not a limit (34.296428ms)
✔ REQ-LIMIT-2 schema: launch.account names a credential set; a daily quota needs a reset and an IANA zone and names the account (33.871693ms)
✔ REQ-LIMIT-2 the writer stamps a daily quota's since, keeps its reset and zone, and a reset moves since (33.845575ms)
✔ every key names known layers and a merge rule (1.726458ms)
✔ unknown keys and wrong layers refuse (1.084085ms)
✔ types (3.275461ms)
✔ merge: defaults, then the most specific layer wins (0.419589ms)
✔ merge: limits only narrow, and provenance lists each source (0.757115ms)
✔ merge doesn't change its inputs (0.206627ms)
✔ web.searxng takes https anywhere and http on loopback, so Jason's 127.0.0.1:8888 passes (0.262745ms)
✔ both definitions load, with a contract file, and are exactly the approved lists (5.013658ms)
✔ security-reviewer has no write or shell tool and classifies only the verdict as its own (9.066819ms)
✔ merge-gate's only grant is git.merge.protected cross-role, and it has no write tool (3.470869ms)
✔ neither role can be an arbiter: its messaging lists refuse the business file (row 133) (8.498658ms)
✔ every role contract carries the proactive line in its Authority section (1.099286ms)
✔ pm and chief-of-staff say where a raise goes under REQ-DEC-2 (0.851681ms)
✔ the merge landing takes two runs: merge-gate, cto and chief-of-staff each say their part (0.660442ms)
ℹ tests 270
ℹ suites 0
ℹ pass 270
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 2873.146579
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,182 @@
npm notice run test
npm notice run node --test tests/*.test.mjs
✔ sessionModel: the route is the instance's own vars, and a missing one refuses no-route by name (37.340888ms)
✔ a pi bundle: prompt, policy, tools and manifest, 0600 in a 0700 directory (10.573131ms)
✔ a chief-of-staff bundle lists launch among the bus tools and the manifest's typed tools (4.412373ms)
✔ a chief-of-staff bundle lists end_run, change_organization and set_name as typed and nothing untyped, for either harness (8.193363ms)
✔ the stop line names end_run for a role.end holder, and every other role keeps today's text (13.648406ms)
✔ a claude-code bundle adds the wrapped gate hook and the MCP config (7.875641ms)
✔ the prompt's built-in tools line is the harness's own names, as the manifest lists them (22.548582ms)
✔ the prompt names the project clones in the workspace, and none when there are none (13.290253ms)
✔ the prompt explains the review loop to a role with push_working, and reviews to one with fetch_review (15.420914ms)
✔ the prompt explains landing to a role with land_work, and to no other (9.918107ms)
✔ the prompt tells the pm to ask the chief of staff for sessions, and no other role (18.356673ms)
✔ a bundle is written once: an existing file refuses (3.135889ms)
✔ a path with a single quote can't go into the hook command (3.86973ms)
✔ web grant on pi: the bundle has web_search and web_fetch, and no built-in web tool (4.927453ms)
✔ no web grant on pi: no web tool in the bundle, and the gate blocks a web call (4.535472ms)
✔ web grant on claude-code: the bundle has web_search and web_fetch, and no built-in web tool (4.409455ms)
✔ no web grant on claude-code: no web tool in the bundle, and the gate blocks a web call (7.034483ms)
✔ a granted session's gate lets the typed web tools through and still blocks the built-ins (6.471178ms)
✔ search-source searxng-url: a granted role gets the typed broker tools and no harness web tool; an ungranted role gets nothing (12.185523ms)
✔ search-source searxng-bundled: a granted role gets the typed broker tools and no harness web tool; an ungranted role gets nothing (11.958441ms)
✔ search-source harness-builtin: claude-code gets WebSearch and WebFetch and no typed web tool, only when granted (12.933659ms)
✔ search-source harness-builtin is refused for a granted pi role, which has no built-in web tool (4.064682ms)
✔ C2-06 RESULT reply-invalid retries once, delivers only the valid answer and names reason (351.396996ms)
✔ C2-06 RESULT citation-missing retries once, delivers only the valid answer and names reason (256.673143ms)
✔ C2-06 RESULT citations-over-limit retries once, delivers only the valid answer and names reason (222.852677ms)
✔ C2-06 RESULT citation-invalid retries once, delivers only the valid answer and names reason (261.389143ms)
✔ C2-06 RESULT playground-cited-as-canon retries once, delivers only the valid answer and names reason (268.849657ms)
✔ C2-06 RESULT citation-cross-universe retries once, delivers only the valid answer and names reason (231.674929ms)
✔ C2-06 RESULT citation-unfetched retries once, delivers only the valid answer and names reason (216.064282ms)
✔ C2-06 RESULT two guard refusals use the citation fixed text and exactly one retry (188.874138ms)
✔ C2-06 RESULT JSON 34000 characters retries with a shorter valid answer (236.68605ms)
✔ C2-06 RESULT JSON 70000 characters retries with a shorter valid answer (234.722358ms)
✔ C2-06 RESULT two oversized JSON bodies use the length fixed text with citations required (193.029509ms)
✔ C2-06 multibyte plain bodies also receive the one request-size retry (223.988818ms)
✔ C2-06 two multibyte plain bodies use the length fallback (205.649902ms)
✔ C2-06 RESULT a length refusal then citation refusal shares one retry and citation fallback (206.128944ms)
✔ C2-06 fixed empty/failed replies defer unslop note until the next cited reply (295.722008ms)
✔ C2-06 cited JSON above the old 32000 clip retains its citations and text (189.724785ms)
✔ C2-06 a flagged cited answer keeps the note inside text and citations whole (192.59344ms)
✔ C2-06 send_message typed tool runs every guard code before the valid RESULT (262.703841ms)
✔ C2-06 outside library the old failed text, clip and unslop behavior hold (208.584382ms)
✔ C2-06 outside library a refused send keeps the existing no-retry behavior (159.048751ms)
✔ C2-06 the retry turn delivers citation-unavailable reason to the agent (190.203749ms)
✔ allow exits 0, a deny exits 2 with the reason on stderr (211.158287ms)
✔ a missing or wrong policy, or a bad event, exits 2 (113.877105ms)
✔ the bundle's wrapped command: a missing gate or node still blocks (1104.288151ms)
✔ claude: typed tools through MCP, the hook blocks, builtins outside --tools don't exist (1070.940549ms)
✔ claude: the hook alone blocks a path outside the workspace (568.174554ms)
✔ claude: a second turn resumes the first turn's session (940.097062ms)
✔ claude adapter: --restricted is always passed (6.108878ms)
✔ claude adapter: MOSAIC_CLAUDE_BIN wins over PATH and must be an absolute executable (19.555633ms)
✔ claude adapter: a directory pin exits 2 before it runs; a pin with a space runs (6.450898ms)
✔ claude: CLAUDE.md files and auto-memory don't reach the model; without --restricted they do (912.426727ms)
✔ claude: a missing hook or MCP file refuses before claude starts (8.255308ms)
✔ claude: row 66 a reply with a tell gets the correction notice on the next turn, a clean reply gets none, and the counts read after (1813.719749ms)
✔ claude: row 66 a broken lists.json gives no clean verdict, the operator is told once, and the session still answers (861.243377ms)
✔ M2: the gate refuses write, edit and bash to every creative role on pi and claude-code (58.57362ms)
✔ M6: no creative session gets raise_decision; the assistant and the chief of staff keep it (27.01682ms)
✔ web: research and companion get the broker's typed web tools, and a harness-builtin source refuses web-source-not-allowed (34.87358ms)
✔ persona: the block sits between the contract and ## This session, fenced, with the name and digest (10.05189ms)
✔ persona: each unsafe or unpinned file refuses before the bundle directory is made (30.976676ms)
✔ adapters pass the prompt file's absolute path; the persona and the prompt text never sit in argv (48.053085ms)
✔ the pi adapter refuses a missing, unreadable or directory prompt file before pi starts (13.20329ms)
✔ pi: policy tools and typed tools pass, anything else is blocked (4.524582ms)
✔ claude: builtins map from pi names, typed tools need the mcp prefix (1.1263ms)
✔ file tool paths must resolve inside the workspace (4.02957ms)
✔ pi's own path normalisation can't be used to step out (1.586245ms)
✔ a symlink inside the workspace that points out is outside (1.300474ms)
✔ a dangling symlink is refused at any depth, in both harnesses (5.091178ms)
✔ read is checked under every spelling pi's read would open, in both harnesses (29.6566ms)
✔ other spellings cover directories, dangling links and pi's cwd (2.651598ms)
✔ a relative path climbs from the workspace's real path, in both harnesses (9.557314ms)
✔ claude path fields per tool (1.146391ms)
✔ glob patterns stay inside the workspace (1.220629ms)
✔ a path that can't be checked is blocked (0.713439ms)
✔ fetch_review's have lists the working refs before origin's, and no more than HAVE_MAX (358.466429ms)
✔ fetch_review's have orders the working refs newest first within each clone, one clone after another (177.220281ms)
✔ a runner git past its time: SIGTERM reaches its process group, and SIGKILL follows after the grace period (1810.093816ms)
✔ once a signalled runner git has closed, its group gets SIGKILL, so a process that ignored SIGTERM dies too (303.717292ms)
✔ land_work sends one land line and resolves the host's started answer (3.694332ms)
✔ initialize, ping and tools/list (73.055562ms)
✔ tools/call goes through the tool socket; a refusal is an isError result (66.566638ms)
✔ replies are compact JSON; over the cap a tool error names the size and the cap (60.558157ms)
✔ unknown tools and methods are JSON-RPC errors and never reach the socket (52.967178ms)
✔ a missing argument is a usage error (35.244954ms)
✔ pi: typed tools reach the socket, the gate blocks, agent_end writes the marker (676.072372ms)
✔ pi: a reply over the cap is a tool error naming the size and the cap; list_tasks asks for open tasks (532.762084ms)
✔ pi: a write through a dangling symlink is blocked, and nothing appears outside (479.264215ms)
✔ pi: a read is refused when pi would open another spelling outside (479.008336ms)
✔ pi: a relative path climbs from the real path of a workspace behind a symlink (495.496517ms)
✔ pi: a relative path climbs from the real path of a dataRoot behind a symlink (458.873867ms)
✔ pi: a missing extension refuses before any model call (6.358156ms)
✔ pi: an extension without its configuration fails pi's start (380.653357ms)
✔ pi: row 66 a reply with a tell gets the correction notice on the next turn, a clean reply gets none, and the counts read after (1353.463628ms)
✔ pi: row 66 a broken lists.json gives no clean verdict, the operator is told once, and the session still answers (748.010347ms)
✔ raise_decision offers domain as technical or delivery only, optional, and says where a raise goes (23.00088ms)
✔ raise_decision forwards domain to decision.raise, and a call without it sends none (100.23044ms)
✔ founderCheck: founder variables, then a needed service without a usable token (3.039179ms)
✔ turnRequest names the sender, class, reply and decision (0.355597ms)
✔ turnRequest says a tester's message is a test and never Jason's instruction (0.317095ms)
✔ turnRequest says a user's message is a granted user's and never the owner's instruction (0.277911ms)
✔ turnRequest shows the message's own sent time, a day old as well as new (0.227187ms)
✔ stateBlock names the launch state with its time and event, and the open tasks with the cap (0.334368ms)
✔ a message becomes a turn, the answer goes back as a RESULT, SIGTERM releases and exits 0 (257.255462ms)
✔ launches revoked and then restored: the turn's block reads allowed and gives the restore time (272.592717ms)
✔ a task closed on the tracker is missing from the next turn's open list (239.571073ms)
✔ a message read a day after it was sent shows the time it was sent (148.998515ms)
✔ a decision the human resolves becomes a turn citing the decision and the answer (196.043584ms)
✔ a failed state read fails the turn: no adapter runs, the sender hears why, the message is read (103.372577ms)
✔ a SIGTERM before the claim stops the runner with exit 0 and no claim (91.622163ms)
✔ typed tools carry the runner's capability; launch goes to the host's launch socket (336.226718ms)
✔ end_run, organization_revision and change_organization reach the broker with the tool's arguments, and refusals keep their codes (429.635331ms)
✔ set_name reaches the broker's name.set with the tool's arguments, and refusals keep their codes (182.337097ms)
✔ a RESULT gets no automatic reply; failed turns reply with the reason (1269.003752ms)
✔ the bus's launch notice is one turn with no reply, and is not taken again (269.091562ms)
✔ SIGTERM during a turn kills the turn's process group and still exits 0 (122.399792ms)
✔ founder credentials stop before the claim (20) (162.909348ms)
✔ a refused claim exits 21; an ended run's capability exits 22 (165.231771ms)
✔ the launch ending under a running session exits 22 (134.851141ms)
✔ a broker that stays unreachable exits 23 after brokerRetries polls (234.508622ms)
✔ a broker that is down at the claim exits 23, not 21 (78.168597ms)
✔ no capability, or a malformed one, on stdin exits 2 (194.303544ms)
✔ a missing or malformed policy exits 2 before the claim (120.576748ms)
✔ REQ-LIMIT-4 runner brackets its actual harness turn before the reply and read receipt (194.53726ms)
✔ REQ-LIMIT-4 a runner at its limit stops at the end of its turn: RESULT and read first, then exit 22 and a limit-check revoke (168.261307ms)
✔ landingRequest is the fixed template, with the decision and task ref and nothing else (0.147237ms)
✔ each landing entry is one turn before any message, with the state block and the fixed request; it sends nothing and reads nothing (226.715761ms)
✔ an empty landing takes no landing turn: the message is turn 1 (195.475495ms)
✔ a run in a landing turn isn't released for a second held decision until its landing turns end and it has read its messages (596.516739ms)
✔ a malformed landing exits 2 before the claim, with no turn (568.856934ms)
✔ row 65 a session.json without a turnEnd of marker or exit, or a harnessEnv of strings, exits 2 before the claim (269.597797ms)
✔ row 65 harnessEnv reaches the adapter, and an exit harness needs no turn marker (141.169295ms)
✔ row 66 the adapter gets the run's unslop log, and a flagged reply's note rides that reply's RESULT, once (300.426996ms)
✔ row 66 a turn with no reply holds its note for the next reply; a broken check is told once (345.164969ms)
✔ row 66 unslopNotes keeps a note until sent(), reads only whole lines, and unslopCounts reads a log after the session (1.68702ms)
✔ row 66 a clipped answer with both note parts stays under the bus's body limit, and the note under 600 (161.518813ms)
✔ row 66 a refused send keeps the note: it rides the next RESULT the session sends (264.81696ms)
✔ each repo role's prompt carries exactly its listed skills, each file as the bundle copy and the source (69.791416ms)
✔ a skill's files go into the prompt in sorted path order, sub-directories included (9.238961ms)
✔ a role with no skills gets no Skills section, no skills directory and an empty manifest list (11.39746ms)
✔ an enabled skill the role doesn't list stays out of the prompt (8.706347ms)
✔ the bundle copy outlives the source: deactivating a skill after the build leaves the run's copy (4.473957ms)
✔ a listed skill that isn't enabled refuses skill-not-enabled, naming the activate command (9.541232ms)
✔ a skill directory that isn't plain refuses: a symlinked skill, SKILL.md or sub-file, or a non-file entry (2.643822ms)
✔ a skill file that can't go into the prompt refuses: a bad name, non-UTF-8 bytes, or the end marker (3.518581ms)
✔ a role's skills over SKILL_BYTES together refuse, naming the skill that crossed it (10.193929ms)
✔ each adapter passes the skills only in the prompt file, with skill discovery off (59.00799ms)
✔ every role sees read_spec, record writer follows its grant, citation schemas stay strict (25.138022ms)
✔ typed socket forwards read content/history and agent record writes, and cannot write a spec (172.529974ms)
✔ the PM gets its task verbs and the reads, and no launch (11.972118ms)
✔ send_message offers the BLOCK class, beside the classes it already had (3.837774ms)
✔ the chief of staff gets launch, send_message, end_run, hire, fire, change_organization and set_name, and no task verbs (4.871494ms)
✔ hire and fire send instance.hire and instance.fire under role.hire and role.fire, only for a holder of the grant (22.751702ms)
✔ request_staff is the pm's alone: staff.request over message.send, roles and counts bounded (15.291362ms)
✔ end_run sends role and reason, no decision; change_organization sends revision and the organization keys (2.689052ms)
✔ set_name sends instance and name to name.set under instance.name, only for a holder of that grant (12.695737ms)
✔ the organization keys change_organization takes are the broker's ORGANIZATION_KEYS and the settings' SETTINGS_KEYS (0.178758ms)
✔ a role without role.end or organization.change gets none of the three tools, and each follows its own grant (12.115972ms)
✔ no role's tools send instances or instances.set, and change_organization takes no instance write keys (10.7825ms)
✔ the assistant gets send_message, the reads and the web tools (it holds the web grant), no launch (2.17462ms)
✔ list_requirements reads the requirement ids, for a task.create holder with a tracker (3.939398ms)
✔ a coder gets no launch, no resolve_decision, and no task tools without a tracker (3.125698ms)
✔ a coder with a tracker gets its own task tools and no task_reassign (2.258296ms)
✔ launch only when the business's launch block names the instance as launcher (3.280204ms)
✔ an action outside the instance's authority has no tool (1.994949ms)
✔ the review loop: push_working and request_review for the coder, fetch_review and review_verdict for the reviewer, none for the PM (7.387015ms)
✔ land_work is there only with land, after push_working, with the task and the decision (4.431191ms)
✔ callTool: one JSON line out, the result back, a refusal rejects (16.610729ms)
✔ list_tasks takes the broker's filters and pages; get_task takes a task_ref (4.144909ms)
✔ callTool sends list_tasks done false unless the session names done; other tools as given (3.985977ms)
✔ replyText: compact JSON up to the cap, an error naming the size and the cap over it (1.008682ms)
✔ web_search's query maxLength is the web layer's SEARCH_MAX_QUERY_CHARS (4.810935ms)
ℹ tests 172
ℹ suites 0
ℹ pass 172
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 12131.328093
@@ -0,0 +1,153 @@
npm notice run @mosaic/[email protected] test
npm notice run node --test tests/*.test.mjs
✔ C2-06 reply schema: free bodies, exact objects and safe refusal reasons (31.081491ms)
✔ C2-06 citation setting and all four exact fixed texts (27.31137ms)
✔ C2-06 default citation cap passes 20 and refuses 21, even with optional citations (144.940253ms)
✔ C2-06 real Git citation scope, reachability, lines and normalized quotes (71.988432ms)
✔ C2-06 playground cites pass but cannot state canon (42.141068ms)
✔ C2-06 independent universes refuse; a hybrid and only its sources pass (69.134397ms)
✔ C2-06 web cites require allowed definition, this session fetch and kept quote (17.090852ms)
✔ C2-06 file origin is the path commit and trailer, while last follows served changes (51.160201ms)
✔ C2-06 origin uses literal paths even when a filename contains a glob (35.841257ms)
✔ C2-06 cited-commit guard reads exactly the C2-05a indexed file set with supporting scope (79.711572ms)
✔ C2-06 reply limits fall back independently without coercion or inherited keys (0.78046ms)
✔ the same commit, repo path and mapping return the same index, and only mapped files are in it (53.330474ms)
✔ a different repo path, mapping or commit gets its own index (73.465944ms)
✔ the cache holds at most eight indexes and evicts the least recently used (93.355098ms)
✔ a failed read is not kept in the cache (19.15839ms)
✔ a missing or unchecked mapping is refused before any read (18.591276ms)
✔ a 3,000-file rebuild completes and its time is reported (3339.384537ms)
ℹ 3,000-file index rebuild: 3093 ms
✔ resolver step 1: a path from the repo root, with or without .md (2.003164ms)
✔ resolver step 2: the same path with vaultPrefix/ stripped (0.323373ms)
✔ resolver step 3: a path relative to the linking file, never above the repo root (0.278534ms)
✔ resolver step 4: a base name that matches exactly one indexed file (0.322938ms)
✔ a link into another of her repos resolves to nothing (0.213594ms)
✔ wikilink forms, embeds, and links skipped inside code (1.24016ms)
✔ only a body embed whose target has an extension other than .md, in any case, is an attachment (0.455416ms)
✔ the fixture mapping checks and comes back frozen (2.830981ms)
✔ C2-01c: a prefix inside or holding another entry's book refuses library-playground-other-universe (1.34922ms)
✔ C2-01c: a prefix equal to a book folder, or holding its own, refuses library-mapping-invalid (0.74756ms)
✔ C2-01c: universe-level prefixes lie outside every book, in a plain universe and in a hybrid with no books (1.203696ms)
✔ C2-01c: a draft takes kind, name and playground only, and comes back frozen with books [] (1.782129ms)
✔ C2-01d: supporting prefixes at book level, universe level, in a hybrid and in a draft, [] when absent (0.643444ms)
✔ C2-01d: each supporting prefix rule refuses with its code (2.880363ms)
✔ C2-01d: between the lists, a supporting prefix may equal its own playground, and a playground may hold its own supporting (0.978814ms)
✔ C2-01d: editor is optional, kept when given, and refuses anything but a plain name and email (5.417269ms)
✔ C2-01d: an accepted editor round-trips through a real git commit unchanged (22.81842ms)
✔ no playground prefix holds another, and no book folder holds another (1.309845ms)
✔ shape refusals: kind, remote, branch, unknown keys, types, manuscript, folder names (1.68793ms)
✔ C2-03a sage-2021: user is optional, kept when given, and must be a plain account name (0.986251ms)
✔ a hybrid universe is a shape the query code can take (1.4), with sources that must exist (1.600445ms)
✔ a caller-supplied fail receives the code, as business file loading will pass it (C2-04) (0.396233ms)
✔ scope comes from the path alone (design 1.2) (2.453311ms)
✔ C2-04 mirror: exact default path, bare without checkout or remote, and idempotent initialization (82.599485ms)
✔ C2-04 mirror: simultaneous creators publish one intact mirror and leave no staging paths (49.399699ms)
✔ C2-04 mirror: skipped publication accepts both coreutils statuses without removing the winner (174.577156ms)
✔ C2-04 mirror: preserve occupied directories and reject symlink ancestors and code overlaps (20.556264ms)
✔ C2-04 mirror: existing metadata accepts only bare Git plus state and the precreated lock (34.414614ms)
✔ C2-04 state: missing state is empty only while the served ref is absent (54.101069ms)
✔ C2-04 state: valid problems and sync metadata return no content and change no state bytes (57.832223ms)
✔ C2-04 state: strict keys, types, times, branch, commit and fixed R messages fail closed (158.515834ms)
✔ C2-04 state: symlink, hardlink, non-private state and missing lock refuse without replacement (57.609887ms)
✔ C2-04 file: served commit, not HEAD or a caller commit, owns the exact returned text (113.829438ms)
✔ C2-04 file: R1, R2 and R7 exclusions and never-synced mirrors cannot return file bodies (124.255784ms)
✔ C2-04 lock: a first-sync and fast-forward reader wait for a consistent pair across processes (314.221744ms)
✔ C2-04 lock: same-process waits, timeout code, callback expiry and throw release (5038.833094ms)
✔ C2-04 lock: owner death releases the kernel lock without replacing its file (54.543028ms)
✔ C2-04 lock: a missing flock binary becomes a handled refusal (49.73045ms)
✔ C2-04 lock: an unawaited scoped read drains before the lock is released (20.869629ms)
✔ the query reply cap equals the harness reply cap (1.544541ms)
✔ find is bound to its universe and refuses a call without one (70.281377ms)
✔ every result carries its scope, and playground appears only when asked for (39.878964ms)
✔ unmapped files never appear in any reply (35.123505ms)
✔ a hybrid sees its sources canon, minus exclusions, and no playground (39.679182ms)
✔ a hybrid gets a source file it can see, and not an excluded or foreign one (54.602693ms)
✔ get lists visible links both ways and drops a target another universe cannot see (50.638492ms)
✔ a long list pages by position, never cuts an item, and returns 50 per page (193.227492ms)
✔ a page stays under the reply cap when items are large (91.885035ms)
✔ a search line too long to fit alone comes back marked, with no excerpt, and the other hits still return (33.20163ms)
✔ a find item that cannot fit alone is refused, not cut (46.447292ms)
✔ get pages its lines, and the next line picks up where the page stopped (39.12526ms)
✔ get refuses a file whose front matter alone is over the cap, and a line alone is over the cap (36.804238ms)
✔ get pages the links of a hub note, every page carries the front matter, and the pages add up (1107.995321ms)
✔ get rejects a bad links_from (34.377162ms)
✔ search returns scoped line hits, case-insensitively, and refuses empty text (30.729667ms)
✔ a manuscript call returns one chapter, at most 400 lines, and names its next line (47.791378ms)
✔ a manuscript call without a chapter returns the first chapter in path order and names the next (26.366902ms)
✔ a chapter name that matches two visible files is refused (25.448584ms)
✔ a hybrid reads a source chapter through its declared sources only (39.969561ms)
✔ universe info reports a hybrid sources, constraints and notes, and refuses an unknown universe (15.657923ms)
✔ an exclusion hides what it names from a hybrid and from nothing else (39.404555ms)
✔ PRD 1.14: a lookup that names a book leaves book-null files out (34.647951ms)
✔ PRD 1.14: library_manuscript never reads a book-null file (32.637362ms)
✔ PRD 1.14: a draft universe has no canon, so its lookups return files only with scope playground (32.338176ms)
✔ PRD 1.14: library_universe on a draft returns its kind, name and prefixes (15.442774ms)
✔ a hybrid gets a source playground file as null, while the source gets it with scope playground (42.674554ms)
✔ the fixture reads clean: every resolver step, appears_in and relationships wikilinks indexed (63.033383ms)
✔ R1: executables, symlinks, gitlinks, blobs over 1 MiB and non-UTF-8 text are not indexed (95.339567ms)
✔ R2: unmapped paths are reported and not indexed (31.564751ms)
✔ R3: front matter not fully parsed stays raw, with the line where parsing stopped (36.896696ms)
✔ front matter forms the reader accepts and refuses (1.596508ms)
✔ R4: a link to no file, to more than one, or into another repo is reported and not followed (35.504393ms)
✔ a block list link carries its item line, a scalar or flow link its key line, and problems follow (37.229678ms)
✔ an unresolved attachment embed gives no problem; a link or front matter value to one is R4; a note embed resolves (33.783255ms)
✔ an indexed Dr.Quinn.md resolves as a body link, a block list link and an embed (33.230236ms)
✔ R5: a canon file that refers into the playground is reported, and the link still goes by path (29.709099ms)
✔ R6: a canon file that refers into another universe is reported; a hybrid may refer into its sources (30.970646ms)
✔ R7: two paths that differ only in case are both left out (41.126208ms)
✔ the reader reads the commit, never the working tree, and refuses a bad commit id (41.98282ms)
✔ a bare mirror reads the same as the clone (53.445984ms)
✔ renderItems snapshot: fact (1.786386ms)
✔ renderItems snapshot: finding (0.299155ms)
✔ renderItems snapshot: correction (0.259329ms)
✔ renderItems snapshot: question (0.218182ms)
✔ renderItems snapshot: idea (0.223821ms)
✔ renderItems numbers several items and takes a parsed body as well as a string (1.090019ms)
✔ without options a path cite has no badge and is never marked changed (0.280013ms)
✔ renderItems snapshot: notice no-cited-answer (0.237711ms)
✔ renderItems snapshot: notice no-answer (0.198705ms)
✔ renderItems snapshot: notice turn-failed (0.337126ms)
✔ a body without the reply shape shows a fixed line and none of its text (0.613863ms)
✔ C2-01c: each level gives its universe, and its book or null (4.092943ms)
✔ C2-01c: prefixes come first: in a book that holds a prefix, a file outside it is canon and one under it playground (0.607188ms)
✔ C2-01c: a canon file linking into a draft gives R6, and into its own universe-level prefix gives R5 (65.023589ms)
✔ C2-01d: each supporting level gives its universe, and its book or null (0.8244ms)
✔ C2-01d: supporting comes before playground; a folder in both lists is supporting, one in the playground only stays playground (0.633065ms)
✔ C2-01d: only .md files are supporting; a .canvas or .base under a supporting prefix is unmapped (0.517375ms)
✔ C2-01d: a path passes at book level, universe level, in a draft and in a folder in both lists (2.312377ms)
✔ C2-01d: a path of exactly 1024 bytes passes, and 1025 bytes made of multi-byte characters refuses (0.98988ms)
✔ C2-01d: a path outside the universe's supporting folders refuses (0.763326ms)
✔ C2-01d: malformed paths refuse by class, in order (0.710036ms)
✔ C2-01d: a symlink or gitlink on the way, or at the path itself, refuses (0.383033ms)
✔ C2-01d: a name that differs from a tree name only in case or Unicode form refuses, at the file or any folder (0.99427ms)
✔ the survey prints folder names, counts, key sets and link-form counts, and never text (65.469359ms)
✔ folder names print DEL, C1 and bidi controls, U+061C among them, as escapes (37.571162ms)
✔ an embed of an attachment counts as an embed and as an attachment; a plain link to one does not (24.053267ms)
✔ with --mapping the survey adds scope, resolver step and problem counts (51.551822ms)
✔ C2-01d: with --mapping the survey counts supporting files (49.232972ms)
✔ survey exit codes: usage 4, bad mapping 3, unreadable repo 2 (19.679523ms)
✔ scripts/mosaic library survey reaches the survey (97.237921ms)
✔ C2-03a argv: the fixed sequence, one https allow, no other protocol key (2.539459ms)
✔ C2-03a argv: only an https URL with a plain host, no userinfo, and a plain user (1.147619ms)
✔ C2-03a helper: answers only the exact prompts for the configured host and user (dewey-0765) (43.662638ms)
✔ C2-03a first sync: served is the fetched tip, HEAD is served, the survey reads it, and the token stays in the slot (199.624214ms)
✔ C2-03a fast-forward: served moves, problems are rebuilt, and a repeat changes only lastFetch (272.12795ms)
✔ C2-03a Filbert N2: a read that took served before a sync still finds its objects after served moves (255.892244ms)
✔ C2-03a overlap: a reader during a sync sees the old pair or the new one, never a mix (220.077465ms)
✔ C2-03a diverged: a non-fast-forward keeps serving and holds until a human accepts the tip (511.485441ms)
✔ C2-03a accept starts the record over, so a changed branch gets a fresh state (204.895458ms)
✔ C2-03a fetch failure: a wrong token keeps serving and records the error, lastFetch unchanged (210.171392ms)
✔ C2-03a a failed first fetch records the error with nothing served (57.52009ms)
✔ C2-03a a 302 to another host fails the fetch and the other host sees nothing (68.211135ms)
✔ C2-03a the slot: missing or unsafe refuses before git, and sync never opens it (65.636096ms)
✔ C2-03a sage-2021: an entry with no user refuses library-remote-invalid and runs no git (34.004871ms)
✔ C2-03a one sync per mirror: an overlapping call refuses library-sync-busy (129.134012ms)
ℹ tests 142
ℹ suites 0
ℹ pass 142
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 6490.060843
@@ -0,0 +1,2 @@
1 match: replyLimitsFence(old, document, actor);
1 match: replyLimitsFence(old, written, actor);
@@ -0,0 +1 @@
M5-hide-library-unavailable: killed (control green, mutant exit 1, hashes restored, restored green)
@@ -0,0 +1,11 @@
✔ C2-06 held library lock gives the agent citation-unavailable and its retry reason (5151.319291ms)
✔ C2-06 malformed sync state is availability failure, never a fabricated invalid cite (37.53806ms)
✔ C2-06 no mirror or freshly initialized empty mirror still means no served citation (35.257703ms)
ℹ tests 3
ℹ suites 0
ℹ pass 3
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 5310.30031
@@ -0,0 +1,11 @@
✔ C2-06 held library lock gives the agent citation-unavailable and its retry reason (5147.642347ms)
✔ C2-06 malformed sync state is availability failure, never a fabricated invalid cite (32.256875ms)
✔ C2-06 no mirror or freshly initialized empty mirror still means no served citation (31.701926ms)
ℹ tests 3
ℹ suites 0
ℹ pass 3
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 5295.499085
@@ -0,0 +1,23 @@
eeca81ab965f9e94f930ee5f51d16f019af6368bc6c3994895e204f7a54ec8d2 packages/bus/src/broker.mjs
ad3c686a089f67f3c89610937c6fc9b32367cea5d9735125d89bef042082d4e8 packages/bus/src/client.mjs
36b05dd3119e5929211aa1cc5d45c5043f5a1c34567ddc7cac8f002835d44abe packages/bus/src/runtime.mjs
66b26d131a19f4f411686427274936850c1ff0aed11e9b281ae4aadcf4b289fc packages/bus/src/server.mjs
cdd0304ec25ef1ad3e31c52502fa46f2c80bd77c8d3c2e13f8ed4b5328f342c9 packages/bus/tests/citation-availability.test.mjs
2e05074cd9d15d810103658af3858161cee2af78b0a2e1ba910222fab3e84401 packages/bus/tests/citation-guard.test.mjs
2c7a2102e2e0244876e41b664f4f706baefe3375100b956655551db1230f5da3 packages/bus/tests/citation-helpers.mjs
168dcac99d9bfdfdf5ff0eaa2c0fff91595b351b4d0092dc299532c9c32869f0 packages/bus/tests/citation-runtime.test.mjs
abaeac64f2c3bf8ba83c9a4488edd9105c4707a6564560c5333d5421445653af packages/business/src/business.mjs
3a6044de5d1ca2cc35c5285b460c3e402b4274837e5d88b97f489797f6004903 packages/business/src/organization.mjs
4d2eb11beaa80175e524af1b95c81e7164990fba1d3e1754f5ba06eee390a14f packages/business/tests/reply-limits.test.mjs
a2bb98734bcc2556f8b2168f0faf8a89f7064c3f0aa49feb7d1975d596192f09 packages/cli/README.md
2f291a71f490f2741edada7a3e3788500f8976a08eb8ab1411f6c5982f778260 packages/cli/src/limits.mjs
f38af2d46d5f5f6388f599912507b94b87a0bf9dcc2104bb2187c38ee35118d5 packages/cli/tests/reply-limits.test.mjs
6ad72b4245e0a66e32725941900c1ece64c2e5de2fb73d65c8e042b4f3a691a6 packages/harness/src/runner.mjs
a5ef1b65230239a7baf6d0e8f2b8a51c0516348c7c4339a55b3f0a1a6ff531ba packages/harness/tests/citation-runner.test.mjs
330bc71bf6c7e64d3ddb70440903d2d9acf7878d44a49d7e30c2352ee4c807ec packages/harness/tests/fixtures/citation-adapter.mjs
f710d9600a17f6e2989a289cfe84e58f161d86c7306605946ce05fa71b364eb2 packages/library/src/guard.mjs
c0d630798914e300e461c247340533328e97119e54909c6a9406340e61fed8b7 packages/library/src/index.mjs
98ef45ed61144aaea44d8aea1ac43082b6d340297e46846d01772da38728e530 packages/library/src/limits.mjs
7b46f47b5e9d6b554b5d39bce2cd95c4610f5f35b8ab8fdc5a2864b3214be809 packages/library/src/reply-protocol.mjs
406146ebbce3710f308243b684a1c17e7626c1b65a4468489364317e31537a48 packages/library/tests/guard.test.mjs
39c8e6c8250a13fa43015fb2c407195e30ee642f729a9f6a644c38b4ea758a72 packages/seat/src/sandbox.mjs
@@ -0,0 +1,68 @@
✖ C2-06 held library lock gives the agent citation-unavailable and its retry reason (5108.905478ms)
✖ C2-06 malformed sync state is availability failure, never a fabricated invalid cite (40.518617ms)
✔ C2-06 no mirror or freshly initialized empty mirror still means no served citation (37.68422ms)
ℹ tests 3
ℹ suites 0
ℹ pass 1
ℹ fail 2
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 5261.169843
✖ failing tests:
test at packages/bus/tests/citation-availability.test.mjs:13:1
✖ C2-06 held library lock gives the agent citation-unavailable and its retry reason (5108.905478ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
+ actual - expected
+ 'citation-invalid'
- 'citation-unavailable'
^
at Object.<anonymous> (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-pd3x2htc/packages/bus/tests/citation-availability.test.mjs:29:14)
at expectedException (node:assert:547:17)
at expectsError (node:assert:672:21)
at strict.rejects (node:assert:738:3)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-pd3x2htc/packages/bus/tests/citation-availability.test.mjs:28:5
at async withLibraryLock (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-pd3x2htc/packages/library/src/mirror.mjs:171:18)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-pd3x2htc/packages/bus/tests/citation-availability.test.mjs:27:3)
at async Test.run (node:internal/test_runner/test:1409:7)
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: 'citation-invalid',
expected: 'citation-unavailable',
operator: 'strictEqual',
diff: 'simple'
}
test at packages/bus/tests/citation-availability.test.mjs:40:1
✖ C2-06 malformed sync state is availability failure, never a fabricated invalid cite (40.518617ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
+ actual - expected
Comparison {
+ code: 'citation-invalid'
- code: 'citation-unavailable'
}
at async TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-pd3x2htc/packages/bus/tests/citation-availability.test.mjs:45:3)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: Error: citation-invalid: citation 1 (Book One/Characters/Mara Vell.md) isn't an indexed file at a commit reachable from the served commit
at refuse (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-pd3x2htc/packages/library/src/guard.mjs:24:42)
at checkReply (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-pd3x2htc/packages/library/src/guard.mjs:80:25)
at async waitForActual (node:assert:615:5)
at async strict.rejects (node:assert:738:25)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-pd3x2htc/packages/bus/tests/citation-availability.test.mjs:45:3)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7),
expected: { code: 'citation-unavailable' },
operator: 'rejects',
diff: 'simple'
}
@@ -0,0 +1 @@
M5-hide-library-unavailable: killed (control green, mutant exit 1, hashes restored, restored green)
@@ -0,0 +1,5 @@
M1-writer-fence: killed (control green, mutant exit 1, hashes restored, restored green)
M2-incoming-human: killed (control green, mutant exit 1, hashes restored, restored green)
M3-split-check-transaction: killed (control green, mutant exit 1, hashes restored, restored green)
M5-hide-library-unavailable: killed (control green, mutant exit 1, hashes restored, restored green)
M4-drop-client-reason: killed (control green, mutant exit 1, hashes restored, restored green)
@@ -0,0 +1,14 @@
✔ C2-06 M11 human replacement works; omitted settings return to defaults (29.278355ms)
✔ C2-06 M11 agents and tester cannot change settings, including by changing human (22.040025ms)
✔ C2-06 M11 serialization cannot replace settings after the first fence (8.805323ms)
✔ C2-06 M11 an unrelated actor cannot appoint itself human and change reply limits (8.829275ms)
✔ C2-06 invalid setter values preserve the business and changes.jsonl (9.171416ms)
✔ C2-06 validator accepts hand-edited settings; raw reader fails closed on invalid files (10.423621ms)
ℹ tests 6
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 139.016448
@@ -0,0 +1,14 @@
✔ C2-06 M11 human replacement works; omitted settings return to defaults (27.397407ms)
✔ C2-06 M11 agents and tester cannot change settings, including by changing human (23.565905ms)
✔ C2-06 M11 serialization cannot replace settings after the first fence (8.312613ms)
✔ C2-06 M11 an unrelated actor cannot appoint itself human and change reply limits (8.050944ms)
✔ C2-06 invalid setter values preserve the business and changes.jsonl (8.746752ms)
✔ C2-06 validator accepts hand-edited settings; raw reader fails closed on invalid files (11.061782ms)
ℹ tests 6
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 137.787038
@@ -0,0 +1,23 @@
eeca81ab965f9e94f930ee5f51d16f019af6368bc6c3994895e204f7a54ec8d2 packages/bus/src/broker.mjs
ad3c686a089f67f3c89610937c6fc9b32367cea5d9735125d89bef042082d4e8 packages/bus/src/client.mjs
36b05dd3119e5929211aa1cc5d45c5043f5a1c34567ddc7cac8f002835d44abe packages/bus/src/runtime.mjs
66b26d131a19f4f411686427274936850c1ff0aed11e9b281ae4aadcf4b289fc packages/bus/src/server.mjs
cdd0304ec25ef1ad3e31c52502fa46f2c80bd77c8d3c2e13f8ed4b5328f342c9 packages/bus/tests/citation-availability.test.mjs
2e05074cd9d15d810103658af3858161cee2af78b0a2e1ba910222fab3e84401 packages/bus/tests/citation-guard.test.mjs
2c7a2102e2e0244876e41b664f4f706baefe3375100b956655551db1230f5da3 packages/bus/tests/citation-helpers.mjs
9768b6dc5ae078c5cc4f76473097287b74c5bc5853d39e1f57f153e646f861af packages/bus/tests/citation-runtime.test.mjs
abaeac64f2c3bf8ba83c9a4488edd9105c4707a6564560c5333d5421445653af packages/business/src/business.mjs
3a6044de5d1ca2cc35c5285b460c3e402b4274837e5d88b97f489797f6004903 packages/business/src/organization.mjs
4d2eb11beaa80175e524af1b95c81e7164990fba1d3e1754f5ba06eee390a14f packages/business/tests/reply-limits.test.mjs
a2bb98734bcc2556f8b2168f0faf8a89f7064c3f0aa49feb7d1975d596192f09 packages/cli/README.md
2f291a71f490f2741edada7a3e3788500f8976a08eb8ab1411f6c5982f778260 packages/cli/src/limits.mjs
f38af2d46d5f5f6388f599912507b94b87a0bf9dcc2104bb2187c38ee35118d5 packages/cli/tests/reply-limits.test.mjs
6ad72b4245e0a66e32725941900c1ece64c2e5de2fb73d65c8e042b4f3a691a6 packages/harness/src/runner.mjs
a5ef1b65230239a7baf6d0e8f2b8a51c0516348c7c4339a55b3f0a1a6ff531ba packages/harness/tests/citation-runner.test.mjs
330bc71bf6c7e64d3ddb70440903d2d9acf7878d44a49d7e30c2352ee4c807ec packages/harness/tests/fixtures/citation-adapter.mjs
f710d9600a17f6e2989a289cfe84e58f161d86c7306605946ce05fa71b364eb2 packages/library/src/guard.mjs
c0d630798914e300e461c247340533328e97119e54909c6a9406340e61fed8b7 packages/library/src/index.mjs
98ef45ed61144aaea44d8aea1ac43082b6d340297e46846d01772da38728e530 packages/library/src/limits.mjs
7b46f47b5e9d6b554b5d39bce2cd95c4610f5f35b8ab8fdc5a2864b3214be809 packages/library/src/reply-protocol.mjs
406146ebbce3710f308243b684a1c17e7626c1b65a4468489364317e31537a48 packages/library/tests/guard.test.mjs
39c8e6c8250a13fa43015fb2c407195e30ee642f729a9f6a644c38b4ea758a72 packages/seat/src/sandbox.mjs
@@ -0,0 +1,73 @@
✔ C2-06 M11 human replacement works; omitted settings return to defaults (26.703775ms)
✖ C2-06 M11 agents and tester cannot change settings, including by changing human (12.156717ms)
✖ C2-06 M11 serialization cannot replace settings after the first fence (11.431272ms)
✖ C2-06 M11 an unrelated actor cannot appoint itself human and change reply limits (14.308135ms)
✔ C2-06 invalid setter values preserve the business and changes.jsonl (9.043165ms)
✔ C2-06 validator accepts hand-edited settings; raw reader fails closed on invalid files (9.576698ms)
ℹ tests 6
ℹ suites 0
ℹ pass 3
ℹ fail 3
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 131.91294
✖ failing tests:
test at packages/business/tests/reply-limits.test.mjs:34:1
✖ C2-06 M11 agents and tester cannot change settings, including by changing human (12.156717ms)
AssertionError [ERR_ASSERTION]: Missing expected exception.
at refused (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-m6rnq3wd/packages/business/tests/reply-limits.test.mjs:22:10)
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-m6rnq3wd/packages/business/tests/reply-limits.test.mjs:37:5)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.processPendingSubtests (node:internal/test_runner/test:974:18)
at Test.postRun (node:internal/test_runner/test:1542:19)
at Test.run (node:internal/test_runner/test:1467:12)
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: undefined,
expected: { code: 'organization-reply-limits-human-only' },
operator: 'throws',
diff: 'simple'
}
test at packages/business/tests/reply-limits.test.mjs:43:1
✖ C2-06 M11 serialization cannot replace settings after the first fence (11.431272ms)
AssertionError [ERR_ASSERTION]: Missing expected exception.
at refused (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-m6rnq3wd/packages/business/tests/reply-limits.test.mjs:22:10)
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-m6rnq3wd/packages/business/tests/reply-limits.test.mjs:45:3)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.processPendingSubtests (node:internal/test_runner/test:974:18)
at Test.postRun (node:internal/test_runner/test:1542:19)
at Test.run (node:internal/test_runner/test:1467:12)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: undefined,
expected: { code: 'organization-reply-limits-human-only' },
operator: 'throws',
diff: 'simple'
}
test at packages/business/tests/reply-limits.test.mjs:52:1
✖ C2-06 M11 an unrelated actor cannot appoint itself human and change reply limits (14.308135ms)
AssertionError [ERR_ASSERTION]: Missing expected exception.
at refused (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-m6rnq3wd/packages/business/tests/reply-limits.test.mjs:22:10)
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-m6rnq3wd/packages/business/tests/reply-limits.test.mjs:54:3)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.processPendingSubtests (node:internal/test_runner/test:974:18)
at Test.postRun (node:internal/test_runner/test:1542:19)
at Test.run (node:internal/test_runner/test:1467:12)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: undefined,
expected: { code: 'organization-reply-limits-human-only' },
operator: 'throws',
diff: 'simple'
}
@@ -0,0 +1,14 @@
✔ C2-06 M11 human replacement works; omitted settings return to defaults (31.955623ms)
✔ C2-06 M11 agents and tester cannot change settings, including by changing human (22.832309ms)
✔ C2-06 M11 serialization cannot replace settings after the first fence (9.274775ms)
✔ C2-06 M11 an unrelated actor cannot appoint itself human and change reply limits (8.69039ms)
✔ C2-06 invalid setter values preserve the business and changes.jsonl (8.733202ms)
✔ C2-06 validator accepts hand-edited settings; raw reader fails closed on invalid files (10.441869ms)
ℹ tests 6
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 143.570268
@@ -0,0 +1,14 @@
✔ C2-06 M11 human replacement works; omitted settings return to defaults (29.948602ms)
✔ C2-06 M11 agents and tester cannot change settings, including by changing human (22.139351ms)
✔ C2-06 M11 serialization cannot replace settings after the first fence (9.054641ms)
✔ C2-06 M11 an unrelated actor cannot appoint itself human and change reply limits (8.381635ms)
✔ C2-06 invalid setter values preserve the business and changes.jsonl (9.081946ms)
✔ C2-06 validator accepts hand-edited settings; raw reader fails closed on invalid files (10.33004ms)
ℹ tests 6
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 141.370383
@@ -0,0 +1,23 @@
eeca81ab965f9e94f930ee5f51d16f019af6368bc6c3994895e204f7a54ec8d2 packages/bus/src/broker.mjs
ad3c686a089f67f3c89610937c6fc9b32367cea5d9735125d89bef042082d4e8 packages/bus/src/client.mjs
36b05dd3119e5929211aa1cc5d45c5043f5a1c34567ddc7cac8f002835d44abe packages/bus/src/runtime.mjs
66b26d131a19f4f411686427274936850c1ff0aed11e9b281ae4aadcf4b289fc packages/bus/src/server.mjs
cdd0304ec25ef1ad3e31c52502fa46f2c80bd77c8d3c2e13f8ed4b5328f342c9 packages/bus/tests/citation-availability.test.mjs
2e05074cd9d15d810103658af3858161cee2af78b0a2e1ba910222fab3e84401 packages/bus/tests/citation-guard.test.mjs
2c7a2102e2e0244876e41b664f4f706baefe3375100b956655551db1230f5da3 packages/bus/tests/citation-helpers.mjs
9768b6dc5ae078c5cc4f76473097287b74c5bc5853d39e1f57f153e646f861af packages/bus/tests/citation-runtime.test.mjs
abaeac64f2c3bf8ba83c9a4488edd9105c4707a6564560c5333d5421445653af packages/business/src/business.mjs
3a6044de5d1ca2cc35c5285b460c3e402b4274837e5d88b97f489797f6004903 packages/business/src/organization.mjs
4d2eb11beaa80175e524af1b95c81e7164990fba1d3e1754f5ba06eee390a14f packages/business/tests/reply-limits.test.mjs
a2bb98734bcc2556f8b2168f0faf8a89f7064c3f0aa49feb7d1975d596192f09 packages/cli/README.md
2f291a71f490f2741edada7a3e3788500f8976a08eb8ab1411f6c5982f778260 packages/cli/src/limits.mjs
f38af2d46d5f5f6388f599912507b94b87a0bf9dcc2104bb2187c38ee35118d5 packages/cli/tests/reply-limits.test.mjs
6ad72b4245e0a66e32725941900c1ece64c2e5de2fb73d65c8e042b4f3a691a6 packages/harness/src/runner.mjs
a5ef1b65230239a7baf6d0e8f2b8a51c0516348c7c4339a55b3f0a1a6ff531ba packages/harness/tests/citation-runner.test.mjs
330bc71bf6c7e64d3ddb70440903d2d9acf7878d44a49d7e30c2352ee4c807ec packages/harness/tests/fixtures/citation-adapter.mjs
f710d9600a17f6e2989a289cfe84e58f161d86c7306605946ce05fa71b364eb2 packages/library/src/guard.mjs
c0d630798914e300e461c247340533328e97119e54909c6a9406340e61fed8b7 packages/library/src/index.mjs
98ef45ed61144aaea44d8aea1ac43082b6d340297e46846d01772da38728e530 packages/library/src/limits.mjs
7b46f47b5e9d6b554b5d39bce2cd95c4610f5f35b8ab8fdc5a2864b3214be809 packages/library/src/reply-protocol.mjs
406146ebbce3710f308243b684a1c17e7626c1b65a4468489364317e31537a48 packages/library/tests/guard.test.mjs
39c8e6c8250a13fa43015fb2c407195e30ee642f729a9f6a644c38b4ea758a72 packages/seat/src/sandbox.mjs
@@ -0,0 +1,35 @@
✔ C2-06 M11 human replacement works; omitted settings return to defaults (28.334896ms)
✔ C2-06 M11 agents and tester cannot change settings, including by changing human (22.541196ms)
✔ C2-06 M11 serialization cannot replace settings after the first fence (8.304131ms)
✖ C2-06 M11 an unrelated actor cannot appoint itself human and change reply limits (11.712463ms)
✔ C2-06 invalid setter values preserve the business and changes.jsonl (8.875517ms)
✔ C2-06 validator accepts hand-edited settings; raw reader fails closed on invalid files (9.882976ms)
ℹ tests 6
ℹ suites 0
ℹ pass 5
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 140.418146
✖ failing tests:
test at packages/business/tests/reply-limits.test.mjs:52:1
✖ C2-06 M11 an unrelated actor cannot appoint itself human and change reply limits (11.712463ms)
AssertionError [ERR_ASSERTION]: Missing expected exception.
at refused (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-_aqjby1c/packages/business/tests/reply-limits.test.mjs:22:10)
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-_aqjby1c/packages/business/tests/reply-limits.test.mjs:54:3)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.processPendingSubtests (node:internal/test_runner/test:974:18)
at Test.postRun (node:internal/test_runner/test:1542:19)
at Test.run (node:internal/test_runner/test:1467:12)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: undefined,
expected: { code: 'organization-reply-limits-human-only' },
operator: 'throws',
diff: 'simple'
}
@@ -0,0 +1,21 @@
✔ C2-06 coder send_message guard covers every table refusal; inserts nothing (118.943843ms)
✔ C2-06 research send_message guard covers every table refusal; inserts nothing (94.790271ms)
✔ C2-06 stored check carries the file author trailer at an unrelated cited tip (65.901789ms)
✔ C2-06 supporting cite cannot state canon, including a folder also marked playground (41.908138ms)
✔ C2-06 supporting file stores supporting scope and its real agent trailer (48.179621ms)
✔ C2-06 check evidence and insert are atomic when storing evidence fails (41.94764ms)
✔ C2-06 live limits change both directions; unreadable file keeps checks and exact fixed texts (56.521104ms)
✔ C2-06 page store is session-local, caps 20 fetches and 200 KiB, drops at disconnect (88.283371ms)
✔ C2-06 transport passes safe capped guard reason; ordinary refusal envelope is byte-identical (55.47311ms)
✔ C2-06 non-library businesses retain role.claim shape and unguarded free sends (26.321347ms)
✔ C2-06 thread messages carry file/last evidence with one read per distinct path (77.5591ms)
✔ C2-06 guarded request snapshot cannot change between check and insert (24.639839ms)
✔ C2-06 library.limits.set is human-only and invalid settings leave file and receipts unchanged (42.159103ms)
ℹ tests 13
ℹ suites 0
ℹ pass 13
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 866.146033
@@ -0,0 +1,21 @@
✔ C2-06 coder send_message guard covers every table refusal; inserts nothing (162.15169ms)
✔ C2-06 research send_message guard covers every table refusal; inserts nothing (151.110586ms)
✔ C2-06 stored check carries the file author trailer at an unrelated cited tip (100.984805ms)
✔ C2-06 supporting cite cannot state canon, including a folder also marked playground (81.389166ms)
✔ C2-06 supporting file stores supporting scope and its real agent trailer (92.148118ms)
✔ C2-06 check evidence and insert are atomic when storing evidence fails (78.197117ms)
✔ C2-06 live limits change both directions; unreadable file keeps checks and exact fixed texts (168.055107ms)
✔ C2-06 page store is session-local, caps 20 fetches and 200 KiB, drops at disconnect (271.850306ms)
✔ C2-06 transport passes safe capped guard reason; ordinary refusal envelope is byte-identical (92.491602ms)
✔ C2-06 non-library businesses retain role.claim shape and unguarded free sends (61.315017ms)
✔ C2-06 thread messages carry file/last evidence with one read per distinct path (126.633466ms)
✔ C2-06 guarded request snapshot cannot change between check and insert (61.436932ms)
✔ C2-06 library.limits.set is human-only and invalid settings leave file and receipts unchanged (118.486786ms)
ℹ tests 13
ℹ suites 0
ℹ pass 13
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1649.634687
@@ -0,0 +1,23 @@
eeca81ab965f9e94f930ee5f51d16f019af6368bc6c3994895e204f7a54ec8d2 packages/bus/src/broker.mjs
ad3c686a089f67f3c89610937c6fc9b32367cea5d9735125d89bef042082d4e8 packages/bus/src/client.mjs
36b05dd3119e5929211aa1cc5d45c5043f5a1c34567ddc7cac8f002835d44abe packages/bus/src/runtime.mjs
66b26d131a19f4f411686427274936850c1ff0aed11e9b281ae4aadcf4b289fc packages/bus/src/server.mjs
cdd0304ec25ef1ad3e31c52502fa46f2c80bd77c8d3c2e13f8ed4b5328f342c9 packages/bus/tests/citation-availability.test.mjs
2e05074cd9d15d810103658af3858161cee2af78b0a2e1ba910222fab3e84401 packages/bus/tests/citation-guard.test.mjs
2c7a2102e2e0244876e41b664f4f706baefe3375100b956655551db1230f5da3 packages/bus/tests/citation-helpers.mjs
9768b6dc5ae078c5cc4f76473097287b74c5bc5853d39e1f57f153e646f861af packages/bus/tests/citation-runtime.test.mjs
abaeac64f2c3bf8ba83c9a4488edd9105c4707a6564560c5333d5421445653af packages/business/src/business.mjs
3a6044de5d1ca2cc35c5285b460c3e402b4274837e5d88b97f489797f6004903 packages/business/src/organization.mjs
4d2eb11beaa80175e524af1b95c81e7164990fba1d3e1754f5ba06eee390a14f packages/business/tests/reply-limits.test.mjs
a2bb98734bcc2556f8b2168f0faf8a89f7064c3f0aa49feb7d1975d596192f09 packages/cli/README.md
2f291a71f490f2741edada7a3e3788500f8976a08eb8ab1411f6c5982f778260 packages/cli/src/limits.mjs
f38af2d46d5f5f6388f599912507b94b87a0bf9dcc2104bb2187c38ee35118d5 packages/cli/tests/reply-limits.test.mjs
6ad72b4245e0a66e32725941900c1ece64c2e5de2fb73d65c8e042b4f3a691a6 packages/harness/src/runner.mjs
a5ef1b65230239a7baf6d0e8f2b8a51c0516348c7c4339a55b3f0a1a6ff531ba packages/harness/tests/citation-runner.test.mjs
330bc71bf6c7e64d3ddb70440903d2d9acf7878d44a49d7e30c2352ee4c807ec packages/harness/tests/fixtures/citation-adapter.mjs
f710d9600a17f6e2989a289cfe84e58f161d86c7306605946ce05fa71b364eb2 packages/library/src/guard.mjs
c0d630798914e300e461c247340533328e97119e54909c6a9406340e61fed8b7 packages/library/src/index.mjs
98ef45ed61144aaea44d8aea1ac43082b6d340297e46846d01772da38728e530 packages/library/src/limits.mjs
7b46f47b5e9d6b554b5d39bce2cd95c4610f5f35b8ab8fdc5a2864b3214be809 packages/library/src/reply-protocol.mjs
406146ebbce3710f308243b684a1c17e7626c1b65a4468489364317e31537a48 packages/library/tests/guard.test.mjs
39c8e6c8250a13fa43015fb2c407195e30ee642f729a9f6a644c38b4ea758a72 packages/seat/src/sandbox.mjs
@@ -0,0 +1,41 @@
✔ C2-06 coder send_message guard covers every table refusal; inserts nothing (121.738375ms)
✔ C2-06 research send_message guard covers every table refusal; inserts nothing (94.199334ms)
✔ C2-06 stored check carries the file author trailer at an unrelated cited tip (59.307121ms)
✔ C2-06 supporting cite cannot state canon, including a folder also marked playground (41.252933ms)
✔ C2-06 supporting file stores supporting scope and its real agent trailer (48.700382ms)
✖ C2-06 check evidence and insert are atomic when storing evidence fails (42.434516ms)
✔ C2-06 live limits change both directions; unreadable file keeps checks and exact fixed texts (56.552861ms)
✔ C2-06 page store is session-local, caps 20 fetches and 200 KiB, drops at disconnect (88.426285ms)
✔ C2-06 transport passes safe capped guard reason; ordinary refusal envelope is byte-identical (54.352185ms)
✔ C2-06 non-library businesses retain role.claim shape and unguarded free sends (26.064514ms)
✔ C2-06 thread messages carry file/last evidence with one read per distinct path (81.176348ms)
✔ C2-06 guarded request snapshot cannot change between check and insert (25.324993ms)
✔ C2-06 library.limits.set is human-only and invalid settings leave file and receipts unchanged (42.147552ms)
ℹ tests 13
ℹ suites 0
ℹ pass 12
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 872.02572
✖ failing tests:
test at packages/bus/tests/citation-guard.test.mjs:71:1
✖ C2-06 check evidence and insert are atomic when storing evidence fails (42.434516ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
1 !== 0
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-etkv3bqf/packages/bus/tests/citation-guard.test.mjs:76:10)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: 1,
expected: 0,
operator: 'strictEqual',
diff: 'simple'
}
@@ -0,0 +1,21 @@
✔ C2-06 coder send_message guard covers every table refusal; inserts nothing (107.311079ms)
✔ C2-06 research send_message guard covers every table refusal; inserts nothing (92.235404ms)
✔ C2-06 stored check carries the file author trailer at an unrelated cited tip (59.017311ms)
✔ C2-06 supporting cite cannot state canon, including a folder also marked playground (41.107066ms)
✔ C2-06 supporting file stores supporting scope and its real agent trailer (47.696908ms)
✔ C2-06 check evidence and insert are atomic when storing evidence fails (41.214066ms)
✔ C2-06 live limits change both directions; unreadable file keeps checks and exact fixed texts (54.665908ms)
✔ C2-06 page store is session-local, caps 20 fetches and 200 KiB, drops at disconnect (86.001777ms)
✔ C2-06 transport passes safe capped guard reason; ordinary refusal envelope is byte-identical (55.168942ms)
✔ C2-06 non-library businesses retain role.claim shape and unguarded free sends (26.744539ms)
✔ C2-06 thread messages carry file/last evidence with one read per distinct path (79.212003ms)
✔ C2-06 guarded request snapshot cannot change between check and insert (24.722314ms)
✔ C2-06 library.limits.set is human-only and invalid settings leave file and receipts unchanged (41.933148ms)
ℹ tests 13
ℹ suites 0
ℹ pass 13
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 841.716764
@@ -0,0 +1,21 @@
✔ C2-06 coder send_message guard covers every table refusal; inserts nothing (110.781773ms)
✔ C2-06 research send_message guard covers every table refusal; inserts nothing (91.548051ms)
✔ C2-06 stored check carries the file author trailer at an unrelated cited tip (57.119223ms)
✔ C2-06 supporting cite cannot state canon, including a folder also marked playground (40.819326ms)
✔ C2-06 supporting file stores supporting scope and its real agent trailer (47.776616ms)
✔ C2-06 check evidence and insert are atomic when storing evidence fails (41.268825ms)
✔ C2-06 live limits change both directions; unreadable file keeps checks and exact fixed texts (53.375873ms)
✔ C2-06 page store is session-local, caps 20 fetches and 200 KiB, drops at disconnect (82.822565ms)
✔ C2-06 transport passes safe capped guard reason; ordinary refusal envelope is byte-identical (54.131458ms)
✔ C2-06 non-library businesses retain role.claim shape and unguarded free sends (26.350984ms)
✔ C2-06 thread messages carry file/last evidence with one read per distinct path (80.819295ms)
✔ C2-06 guarded request snapshot cannot change between check and insert (26.401011ms)
✔ C2-06 library.limits.set is human-only and invalid settings leave file and receipts unchanged (41.116925ms)
ℹ tests 13
ℹ suites 0
ℹ pass 13
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 839.688386
@@ -0,0 +1,23 @@
eeca81ab965f9e94f930ee5f51d16f019af6368bc6c3994895e204f7a54ec8d2 packages/bus/src/broker.mjs
ad3c686a089f67f3c89610937c6fc9b32367cea5d9735125d89bef042082d4e8 packages/bus/src/client.mjs
36b05dd3119e5929211aa1cc5d45c5043f5a1c34567ddc7cac8f002835d44abe packages/bus/src/runtime.mjs
66b26d131a19f4f411686427274936850c1ff0aed11e9b281ae4aadcf4b289fc packages/bus/src/server.mjs
cdd0304ec25ef1ad3e31c52502fa46f2c80bd77c8d3c2e13f8ed4b5328f342c9 packages/bus/tests/citation-availability.test.mjs
2e05074cd9d15d810103658af3858161cee2af78b0a2e1ba910222fab3e84401 packages/bus/tests/citation-guard.test.mjs
2c7a2102e2e0244876e41b664f4f706baefe3375100b956655551db1230f5da3 packages/bus/tests/citation-helpers.mjs
9768b6dc5ae078c5cc4f76473097287b74c5bc5853d39e1f57f153e646f861af packages/bus/tests/citation-runtime.test.mjs
abaeac64f2c3bf8ba83c9a4488edd9105c4707a6564560c5333d5421445653af packages/business/src/business.mjs
3a6044de5d1ca2cc35c5285b460c3e402b4274837e5d88b97f489797f6004903 packages/business/src/organization.mjs
4d2eb11beaa80175e524af1b95c81e7164990fba1d3e1754f5ba06eee390a14f packages/business/tests/reply-limits.test.mjs
a2bb98734bcc2556f8b2168f0faf8a89f7064c3f0aa49feb7d1975d596192f09 packages/cli/README.md
2f291a71f490f2741edada7a3e3788500f8976a08eb8ab1411f6c5982f778260 packages/cli/src/limits.mjs
f38af2d46d5f5f6388f599912507b94b87a0bf9dcc2104bb2187c38ee35118d5 packages/cli/tests/reply-limits.test.mjs
6ad72b4245e0a66e32725941900c1ece64c2e5de2fb73d65c8e042b4f3a691a6 packages/harness/src/runner.mjs
a5ef1b65230239a7baf6d0e8f2b8a51c0516348c7c4339a55b3f0a1a6ff531ba packages/harness/tests/citation-runner.test.mjs
330bc71bf6c7e64d3ddb70440903d2d9acf7878d44a49d7e30c2352ee4c807ec packages/harness/tests/fixtures/citation-adapter.mjs
f710d9600a17f6e2989a289cfe84e58f161d86c7306605946ce05fa71b364eb2 packages/library/src/guard.mjs
c0d630798914e300e461c247340533328e97119e54909c6a9406340e61fed8b7 packages/library/src/index.mjs
98ef45ed61144aaea44d8aea1ac43082b6d340297e46846d01772da38728e530 packages/library/src/limits.mjs
7b46f47b5e9d6b554b5d39bce2cd95c4610f5f35b8ab8fdc5a2864b3214be809 packages/library/src/reply-protocol.mjs
406146ebbce3710f308243b684a1c17e7626c1b65a4468489364317e31537a48 packages/library/tests/guard.test.mjs
39c8e6c8250a13fa43015fb2c407195e30ee642f729a9f6a644c38b4ea758a72 packages/seat/src/sandbox.mjs
@@ -0,0 +1,47 @@
✔ C2-06 coder send_message guard covers every table refusal; inserts nothing (109.280676ms)
✔ C2-06 research send_message guard covers every table refusal; inserts nothing (94.019544ms)
✔ C2-06 stored check carries the file author trailer at an unrelated cited tip (58.84355ms)
✔ C2-06 supporting cite cannot state canon, including a folder also marked playground (42.275234ms)
✔ C2-06 supporting file stores supporting scope and its real agent trailer (48.954969ms)
✔ C2-06 check evidence and insert are atomic when storing evidence fails (41.628985ms)
✔ C2-06 live limits change both directions; unreadable file keeps checks and exact fixed texts (54.367118ms)
✔ C2-06 page store is session-local, caps 20 fetches and 200 KiB, drops at disconnect (85.049228ms)
✖ C2-06 transport passes safe capped guard reason; ordinary refusal envelope is byte-identical (53.346085ms)
✔ C2-06 non-library businesses retain role.claim shape and unguarded free sends (26.218776ms)
✔ C2-06 thread messages carry file/last evidence with one read per distinct path (78.373306ms)
✔ C2-06 guarded request snapshot cannot change between check and insert (24.622347ms)
✔ C2-06 library.limits.set is human-only and invalid settings leave file and receipts unchanged (41.8227ms)
ℹ tests 13
ℹ suites 0
ℹ pass 12
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 840.560306
✖ failing tests:
test at packages/bus/tests/citation-guard.test.mjs:116:1
✖ C2-06 transport passes safe capped guard reason; ordinary refusal envelope is byte-identical (53.346085ms)
AssertionError [ERR_ASSERTION]: The validation function is expected to return "true". Received false
Caught error:
Error: citation-invalid
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-db3vgbd1/packages/bus/tests/citation-guard.test.mjs:121:3)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: Error: citation-invalid
at Socket.<anonymous> (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-db3vgbd1/packages/bus/src/client.mjs:45:17)
at Socket.emit (node:events:514:20)
at addChunk (node:internal/streams/readable:575:12)
at readableAddChunkPushByteMode (node:internal/streams/readable:526:3)
at Readable.push (node:internal/streams/readable:406:5)
at Pipe.onStreamRead (node:internal/stream_base_commons:189:23),
operator: 'rejects',
diff: 'simple'
}
@@ -0,0 +1,11 @@
✔ C2-06 held library lock gives the agent citation-unavailable and its retry reason (5143.590096ms)
✔ C2-06 malformed sync state is availability failure, never a fabricated invalid cite (33.560438ms)
✔ C2-06 no mirror or freshly initialized empty mirror still means no served citation (31.849587ms)
ℹ tests 3
ℹ suites 0
ℹ pass 3
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 5290.343804
@@ -0,0 +1,11 @@
✔ C2-06 held library lock gives the agent citation-unavailable and its retry reason (5131.56715ms)
✔ C2-06 malformed sync state is availability failure, never a fabricated invalid cite (32.560014ms)
✔ C2-06 no mirror or freshly initialized empty mirror still means no served citation (31.756895ms)
ℹ tests 3
ℹ suites 0
ℹ pass 3
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 5271.350019
@@ -0,0 +1,23 @@
eeca81ab965f9e94f930ee5f51d16f019af6368bc6c3994895e204f7a54ec8d2 packages/bus/src/broker.mjs
ad3c686a089f67f3c89610937c6fc9b32367cea5d9735125d89bef042082d4e8 packages/bus/src/client.mjs
36b05dd3119e5929211aa1cc5d45c5043f5a1c34567ddc7cac8f002835d44abe packages/bus/src/runtime.mjs
66b26d131a19f4f411686427274936850c1ff0aed11e9b281ae4aadcf4b289fc packages/bus/src/server.mjs
cdd0304ec25ef1ad3e31c52502fa46f2c80bd77c8d3c2e13f8ed4b5328f342c9 packages/bus/tests/citation-availability.test.mjs
2e05074cd9d15d810103658af3858161cee2af78b0a2e1ba910222fab3e84401 packages/bus/tests/citation-guard.test.mjs
2c7a2102e2e0244876e41b664f4f706baefe3375100b956655551db1230f5da3 packages/bus/tests/citation-helpers.mjs
9768b6dc5ae078c5cc4f76473097287b74c5bc5853d39e1f57f153e646f861af packages/bus/tests/citation-runtime.test.mjs
abaeac64f2c3bf8ba83c9a4488edd9105c4707a6564560c5333d5421445653af packages/business/src/business.mjs
3a6044de5d1ca2cc35c5285b460c3e402b4274837e5d88b97f489797f6004903 packages/business/src/organization.mjs
4d2eb11beaa80175e524af1b95c81e7164990fba1d3e1754f5ba06eee390a14f packages/business/tests/reply-limits.test.mjs
a2bb98734bcc2556f8b2168f0faf8a89f7064c3f0aa49feb7d1975d596192f09 packages/cli/README.md
2f291a71f490f2741edada7a3e3788500f8976a08eb8ab1411f6c5982f778260 packages/cli/src/limits.mjs
f38af2d46d5f5f6388f599912507b94b87a0bf9dcc2104bb2187c38ee35118d5 packages/cli/tests/reply-limits.test.mjs
6ad72b4245e0a66e32725941900c1ece64c2e5de2fb73d65c8e042b4f3a691a6 packages/harness/src/runner.mjs
a5ef1b65230239a7baf6d0e8f2b8a51c0516348c7c4339a55b3f0a1a6ff531ba packages/harness/tests/citation-runner.test.mjs
330bc71bf6c7e64d3ddb70440903d2d9acf7878d44a49d7e30c2352ee4c807ec packages/harness/tests/fixtures/citation-adapter.mjs
f710d9600a17f6e2989a289cfe84e58f161d86c7306605946ce05fa71b364eb2 packages/library/src/guard.mjs
c0d630798914e300e461c247340533328e97119e54909c6a9406340e61fed8b7 packages/library/src/index.mjs
98ef45ed61144aaea44d8aea1ac43082b6d340297e46846d01772da38728e530 packages/library/src/limits.mjs
7b46f47b5e9d6b554b5d39bce2cd95c4610f5f35b8ab8fdc5a2864b3214be809 packages/library/src/reply-protocol.mjs
406146ebbce3710f308243b684a1c17e7626c1b65a4468489364317e31537a48 packages/library/tests/guard.test.mjs
39c8e6c8250a13fa43015fb2c407195e30ee642f729a9f6a644c38b4ea758a72 packages/seat/src/sandbox.mjs
@@ -0,0 +1,70 @@
✖ C2-06 held library lock gives the agent citation-unavailable and its retry reason (5104.72293ms)
✖ C2-06 malformed sync state is availability failure, never a fabricated invalid cite (35.117198ms)
✔ C2-06 no mirror or freshly initialized empty mirror still means no served citation (31.286656ms)
ℹ tests 3
ℹ suites 0
ℹ pass 1
ℹ fail 2
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 5250.151124
✖ failing tests:
test at packages/bus/tests/citation-availability.test.mjs:13:1
✖ C2-06 held library lock gives the agent citation-unavailable and its retry reason (5104.72293ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
+ actual - expected
+ 'citation-invalid'
- 'citation-unavailable'
^
at Object.<anonymous> (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-xglaeqeb/packages/bus/tests/citation-availability.test.mjs:29:14)
at expectedException (node:assert:547:17)
at expectsError (node:assert:672:21)
at strict.rejects (node:assert:738:3)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-xglaeqeb/packages/bus/tests/citation-availability.test.mjs:28:5
at async withLibraryLock (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-xglaeqeb/packages/library/src/mirror.mjs:171:18)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-xglaeqeb/packages/bus/tests/citation-availability.test.mjs:27:3)
at async Test.run (node:internal/test_runner/test:1409:7)
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: 'citation-invalid',
expected: 'citation-unavailable',
operator: 'strictEqual',
diff: 'simple'
}
test at packages/bus/tests/citation-availability.test.mjs:40:1
✖ C2-06 malformed sync state is availability failure, never a fabricated invalid cite (35.117198ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
+ actual - expected
Comparison {
+ code: 'citation-invalid'
- code: 'citation-unavailable'
}
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-xglaeqeb/packages/bus/tests/citation-availability.test.mjs:45:3)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: Error: citation-invalid: citation 1 (Book One/Characters/Mara Vell.md) isn't an indexed file at a commit reachable from the served commit
at refuse (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-xglaeqeb/packages/library/src/guard.mjs:24:42)
at checkReply (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-xglaeqeb/packages/library/src/guard.mjs:80:25)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async waitForActual (node:assert:615:5)
at async strict.rejects (node:assert:738:25)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/tNoueZ/row217-mutant-xglaeqeb/packages/bus/tests/citation-availability.test.mjs:45:3)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7),
expected: { code: 'citation-unavailable' },
operator: 'rejects',
diff: 'simple'
}
@@ -0,0 +1,5 @@
M1-writer-fence: killed (control green, mutant exit 1, hashes restored, restored green)
M2-incoming-human: killed (control green, mutant exit 1, hashes restored, restored green)
M3-split-check-transaction: killed (control green, mutant exit 1, hashes restored, restored green)
M5-hide-library-unavailable: killed (control green, mutant exit 1, hashes restored, restored green)
M4-drop-client-reason: killed (control green, mutant exit 1, hashes restored, restored green)
@@ -0,0 +1,3 @@
npm warn deprecated [email protected]: Use your platform's native DOMException instead
added 128 packages in 2s
@@ -0,0 +1,2 @@
added 2 packages in 205ms
@@ -0,0 +1,9 @@
✔ C2-06 runtime reads changed and unreadable reply limits without restarting (118.083931ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 227.817729
@@ -0,0 +1,234 @@
npm notice run @mosaic/[email protected] test
npm notice run node --test tests/
✔ C2-04: ensureCheckouts skips a library before a real clone and leaves no books path (66.766764ms)
✔ a first launch clones the root at its branch, with the root's path as origin (47.521672ms)
✔ the clone is not at its place until git clone has finished (31.999361ms)
✔ a later launch fast-forwards a clean clone after a commit to the root, then finds it current (87.563022ms)
✔ a clone ahead of the root keeps its commits and counts as current (53.447311ms)
▶ a dirty clone and one on another branch are fetched, and nothing but refs/remotes moves
✔ a modified file (53.258759ms)
✔ an untracked file (52.286642ms)
✔ a staged file (55.132154ms)
✔ another branch (53.48074ms)
✔ a detached HEAD (54.504119ms)
✔ a dirty clone and one on another branch are fetched, and nothing but refs/remotes moves (269.989404ms)
✔ a diverged clone gets the fetch into refs/remotes and is kept, not-fast-forward (53.461206ms)
▶ a clone kept before the branch check, or for a failed status, gets no fetch
✔ not-a-clone (27.485728ms)
✔ hooks-present (31.094616ms)
✔ submodule (38.060187ms)
✔ config-changed (36.195255ms)
✔ root-unreadable (36.385271ms)
✔ root-detached (39.627905ms)
✔ status-failed, on the root's branch and clean (42.704327ms)
✔ status-failed, dirty (44.881211ms)
✔ a clone kept before the branch check, or for a failed status, gets no fetch (297.899967ms)
✔ a dirty clone whose fetch fails is kept, fetch-failed, exactly as it was (47.755395ms)
✔ every git call the host makes, for a new clone and an existing one, carries maintenance.auto=false and gc.auto=0 (57.603139ms)
✔ a clone with loose objects enough for gc --auto gets no maintenance or gc from the fetch and the merge (89.466874ms)
▶ a clone with user.name or user.email in its config is kept, and git runs nothing in it
✔ user.name (28.628791ms)
✔ user.email (30.423895ms)
✔ a clone with user.name or user.email in its config is kept, and git runs nothing in it (59.627127ms)
✔ a commit git can't read after the fast-forward is null (57.084762ms)
✔ a new clone whose commit can't be read refuses the launch and leaves nothing behind (21.081119ms)
▶ a clone the session rigged is kept, and git runs nothing and writes nothing outside it
✔ core.fsmonitor (39.453854ms)
✔ core.hooksPath (34.616469ms)
✔ a hook file (35.090442ms)
✔ include.path (34.527401ms)
✔ includeIf (35.13899ms)
✔ a filter driver (34.195382ms)
✔ origin moved (37.391948ms)
✔ a second origin url (35.731817ms)
✔ the origin url twice, both the root (33.999145ms)
✔ an ext:: origin (31.652835ms)
✔ a branch tracking another remote (33.3147ms)
✔ a branch merging a tag (33.72502ms)
✔ a fetch line onto local branches (34.126505ms)
✔ no origin (32.973963ms)
✔ a config file over the size cap (30.967833ms)
✔ config a symlink to /dev/zero (31.51332ms)
✔ the clone a symlink to the bait (32.976685ms)
✔ the clone a file (39.528201ms)
✔ the clone a plain directory (32.193931ms)
✔ .git a gitdir: file (31.732811ms)
✔ .git a symlink (36.499471ms)
✔ .git/logs a symlink (34.327705ms)
✔ .git/refs/heads a symlink (30.308688ms)
✔ .git/objects a symlink (28.895664ms)
✔ a reflog hard-linked to a file outside (28.33422ms)
✔ HEAD a fifo (29.791372ms)
✔ a commondir file (30.182546ms)
✔ an alternates file (30.414863ms)
✔ a gitlink staged, no .gitmodules (42.003032ms)
✔ a gitlink and .gitmodules staged (47.484582ms)
✔ a gitlink to a repository with its own gitlink (53.625899ms)
✔ a gitlink and .gitmodules committed (45.90129ms)
✔ a gitlink and submodule.active in config (43.005636ms)
✔ a .git/modules with no gitlink (31.240083ms)
✔ a clone the session rigged is kept, and git runs nothing and writes nothing outside it (1201.693467ms)
▶ a root that can't be cloned refuses with the project id and leaves nothing behind
✔ missing (9.543898ms)
✔ not a repository (9.15995ms)
✔ a plain directory inside another repository (13.291966ms)
✔ unreadable (10.409599ms)
✔ on no branch (11.130486ms)
✔ missing an object (14.936384ms)
✔ a root that can't be cloned refuses with the project id and leaves nothing behind (69.273079ms)
✔ a clone whose root is on no branch, or gone, is kept and named (28.705151ms)
✔ no credential or forge remote of the root reaches a clone (46.990023ms)
✔ every project in the business file gets its own clone at its own branch (32.655381ms)
✔ a clone past its time gets SIGTERM and refuses the launch, with nothing left in the workspace (514.003804ms)
✔ a clone that ignores SIGTERM gets SIGKILL once the grace period is over (1016.843724ms)
✔ a timeout signals git's process group, so a process git started dies with it (515.051887ms)
✔ once a signalled git has closed, its group gets SIGKILL, so a process that ignored SIGTERM dies too (514.556145ms)
✔ the budget is the setting's whole number of bytes from 1 MiB to 1 GiB, and the default for anything else (1.567727ms)
✔ a stream past the default budget is not-collected with a lower bound, and a later collection catches up (65.101994ms)
✔ a budget smaller than the streams counts over several collections, once each, and is known when it catches up (2.599724ms)
✔ a line split across reads counts once (9.33078ms)
✔ Claude history from before the ledger makes the first Pi collection harness-unsupported, for good (1.440992ms)
✔ an empty claude-projects/ is no Claude history, and one filled after the ledger exists isn't checked (1.428192ms)
✔ a claude-projects/ that can't be read records nothing, and the next collection checks again (1.330216ms)
✔ the stream cap is the setting's whole number from 32 to 65536, and the default for anything else (0.16791ms)
✔ more streams than the cap is not-collected, with cursors only for the streams opened, and a larger cap catches up (2.344595ms)
✔ the default cap opens STREAMS streams and writes no more cursor lines than that (52.65919ms)
✔ row 307 the known ledger row 270 wrote reads the same count (4.720302ms)
✔ row 307 after the known ledger, one collection through pi's module answers the next count (3.122956ms)
✔ row 307 the store-incomplete ledger row 270 wrote reads the same count (1.172174ms)
✔ row 307 after the store-incomplete ledger, one collection through pi's module answers the next count (1.473641ms)
✔ row 307 the store-unreadable ledger row 270 wrote reads the same count (1.233218ms)
✔ row 307 after the store-unreadable ledger, one collection through pi's module answers the next count (1.478165ms)
✔ row 307 the not-collected ledger row 270 wrote reads the same count (1.059533ms)
✔ row 307 after the not-collected ledger, one collection through pi's module answers the next count (2.381792ms)
✔ row 307 the claude-code ledger row 270 wrote reads the same count (1.16785ms)
✔ row 307 after the claude-code ledger, one collection through pi's module answers the next count (1.422304ms)
✔ row 307 the claude-history ledger row 270 wrote reads the same count (2.943093ms)
✔ row 307 after the claude-history ledger, one collection through pi's module answers the next count (1.5333ms)
✔ row 307 the torn ledger row 270 wrote reads the same count (1.006203ms)
✔ row 307 after the torn ledger, one collection through pi's module answers the next count (2.284545ms)
✔ row 307 core refuses an answer outside the contract and appends nothing (8.468181ms)
✔ row 307 the module gets the store's two native directories, a copy of the cursors, the budget, the cap and first (2.320411ms)
✔ an empty store, a store with no compaction and a failed start count 0, known (7.138038ms)
✔ one and three completed compactions (2.441636ms)
✔ a compaction copied into a branched stream counts once, under the stream it was first seen in (3.056ms)
✔ one collection over two streams holding the same copy counts it once and writes it once (1.831681ms)
✔ the same entry id at another time in another stream is another compaction (1.582065ms)
✔ resume: each collection reads past its cursor and writes a key once (2.114301ms)
✔ a partial trailing line waits for its newline (1.624959ms)
✔ a missing ledger is not-collected and an unreadable one store-unreadable, never 0 (1.322325ms)
✔ a symlinked ledger is store-unreadable and is not written through (1.293154ms)
✔ a torn last ledger line makes the count unknown, a lower bound, and stays so (2.167108ms)
✔ a bad ledger line in the middle makes the count unknown (3.331232ms)
▶ a stream that shrank, changed under its cursor or went away is store-incomplete for good
✔ shrink (2.038847ms)
✔ rewrite (1.477185ms)
✔ remove (1.974024ms)
✔ a stream that shrank, changed under its cursor or went away is store-incomplete for good (6.254361ms)
✔ a stream that isn't a regular file or a Pi session is store-unreadable, and that passes (1.252704ms)
✔ a first line that isn't a session header is store-unreadable (1.120253ms)
✔ a Claude run is harness-unsupported, and stays so after a Pi run (1.273691ms)
✔ storeDir is the store sessionStore makes, without making it (1.538256ms)
✔ the ledger is under no sandbox mount (5.456112ms)
✔ rootHits: a top-level file, a new top-level directory, src/ and v1/ are the root; paths under known directories aren't (1.861197ms)
✔ gateEnv keeps the named variables that are strings and drops everything else (0.310846ms)
✔ isMosaicStack: a checkout whose HEAD descends from the root commit and has node_modules; nothing else (76.743834ms)
✔ gateSteps: each package with tests but queue in name order, then each scripts/test-*.sh (2.377262ms)
✔ runGate: every step passes, each with its own log and a summary line, under the environment it was given (211.160741ms)
✔ runGate: the first failing step stops the gate and names its log (269.569796ms)
✔ runGate: an abort stops the running step and everything in its group, and runs nothing after it (185.986993ms)
✔ the CLI: root-file prints the hits and exits 2, or exits 0; gate exits 0, or 2 with the step and its log; anything else is usage (661.443234ms)
✔ T3: publish pushes the work commit by oid to <user>/<branch> on the fork, with the token only through the helper (318.365034ms)
✔ T3: the token is never in git's argv, the fork URL included; it reaches git on fd 3 only (157.63501ms)
✔ T3: a moved fork branch refuses non-fast-forward; no + and no force (173.077055ms)
✔ T3: D9a: an empty fork and an unrelated fork refuse remote-unrelated; a missing fork refuses fork-unavailable (379.595919ms)
✔ T3: a fork past main refuses remote-unrelated until root catches up (152.254688ms)
✔ T3: a wrong token refuses fork-unavailable; git's stderr isn't in the refusal (102.972548ms)
✔ T3: a 302 is not followed: fork-unavailable, and the target sees no request (113.352932ms)
✔ T3: the helper answers only the fork's host and port: a fork on another port gets no token (95.099891ms)
✔ T3: a fork that echoes the token refuses credential-leak (131.28193ms)
✔ T3: no tls parameter, no trust: the scratch CA reaches git only through it (91.935601ms)
✔ D9 steps 3 and 4: ref-moved and identity-mismatch refuse before any request (143.070058ms)
✔ publishRemote refuses a fork, user or destination that isn't shell- and ref-safe before any git (88.646013ms)
✔ RUNNER_FILES is exactly what the runner and the harness sources it starts import (7.032234ms)
✔ sandboxProblem names a missing bwrap and a bwrap that fails (15.78888ms)
✔ every bind says why; the bundle and session file stay read-only over the run directory (2.196421ms)
✔ row 65 a harness module's mounts bind read-only after the adapter, each with the module's reason (2.143393ms)
✔ REQ-THREAD-2 a thread store binds its session directory and Claude transcripts, and nothing more (1.644658ms)
✔ the host's git socket is bound only when given, read-only and before the writable binds (1.090126ms)
✔ the git identity is the instance's, at <instance>@<business>.mosaic.invalid, and sandboxArgv refuses without it (1.690862ms)
✔ a confined session's shell reaches its own workspace and run directory and nothing of the founder's or another session's (2106.854649ms)
✔ a bind that exposes a stand-in, or a missing workspace bind, fails the matching check (2924.249794ms)
✔ a confined session that runs tester-cli.mjs is refused as tester, and the same shim outside the sandbox binds (300.518853ms)
✔ resolveSeat: by name under --repo resolves the repo layout (2.419588ms)
✔ resolveSeat: by path resolves the fleet layout (0.765582ms)
✔ resolveSeat: refusals for missing dir, missing launch.sh, non-executable launch.sh, invalid name, and unknown layout (1.626754ms)
✔ tmuxContext: outside tmux, default socket, custom socket, and exec failure (1.236572ms)
✔ makeRegistration produces a record that validates; each shape violation throws SeatError (1.593741ms)
✔ writeRegistration/readRegistration: round trip, permissions, absence, and malformed records (2.34318ms)
✔ updateTask: changes task, taskSetBy and updatedAt only, and refuses appropriately (2.203796ms)
✔ CLI launch: registers, execs the fake launch script, and passes args through (66.404825ms)
✔ CLI launch: --harness lands in the record (50.392752ms)
✔ CLI launch: the launch script's own exit code passes through (46.659659ms)
✔ CLI launch: relaunching a seat rewrites the one registration record (89.26575ms)
✔ CLI launch: omitting --task records an empty string, not null (39.318048ms)
✔ CLI seat task: updates only the task after a launch, and refuses on an unlaunched seat (96.331713ms)
✔ CLI refusals: no args, unknown flag, missing config, already-registered env, and exec failure (164.27632ms)
✔ samePath: equal paths, symlinked dirs, distinct dirs, and non-strings (0.422092ms)
✔ resolveSetBy: explicit --by wins over the environment; absent or empty environment gives unknown; invalid explicit or environment values refuse with exit 4 (0.590318ms)
✔ validateRegistration/readRegistration: taskSetBy is optional; a record without it (written before #1511) still loads unchanged; an invalid one is refused; the version does not change (0.734057ms)
✔ updateTask: records setBy, preserves startedAt and every unrelated field, upgrades an old record in place only when the task is set, and replaces a previous attribution (0.906133ms)
✔ CLI seat task: --by beats MOSAIC_AGENT_NAME, the environment beats nothing, empty environment is unknown, invalid --by or environment refuses with exit 4 and leaves the record byte for byte (330.90649ms)
✔ REQ-THREAD-2 sessionStore: a legacy session keeps the thread's store, any other gets sessions/<s>/, each segment checked first (5.360486ms)
✔ REQ-THREAD-2 sessionStore refuses legacy-store-unmapped for a thread whose old store no legacy session maps (1.608175ms)
✔ REQ-THREAD-2 sessionWorkspace: private directories per session, unsafe segments and overlaps refused (3.523108ms)
✔ REQ-THREAD-2 lockSessionWorkspace: one writer; a live host or run holds it, a stale lock is taken over, an unreadable one holds (15.189866ms)
✔ REQ-THREAD-2 sessions.json v2: entries carry session and workspace, running() keys on the session, a v1 file still reads (1.889362ms)
✔ REQ-LIMIT-1: family substring matching is no longer exported (1.378459ms)
✔ sessionEnv passes only the allowlist, the repo's bin on PATH, and the run id (1.063207ms)
✔ ZAI_API_KEY passes the session allowlist, and ZAI_TOKEN does not (0.239826ms)
✔ sessionExit gives a runner's signal death back as the signal; a session credential is one whole set of nonempty variables (0.405172ms)
✔ newRun: short ids, 0700 directories, and a refusal when the socket path won't fit (2.727102ms)
✔ session file and launch log: 0600, the session file written once (2.111664ms)
✔ endReason maps the runner's exit codes; a signal is killed (0.220582ms)
✔ Registry mirrors to sessions.json; readSessions marks live entries; bad files refuse (2.216711ms)
✔ a read-only Registry never writes sessions.json, refuses add() and leaves the file on remove() (2.154331ms)
✔ REQ-THREAD-1 Registry.running keys a thread run by business, instance and thread (1.027065ms)
✔ REQ-THREAD-2 REQ-LAUNCH-1 threadStore checks both segments before the join and refuses an unsafe directory (2.628544ms)
✔ stopSession refuses an unknown run, reports a stale one, and won't signal a pid that isn't a runner (1.552738ms)
✔ a session runs in its sandbox as pid 1 of its namespace, claims, answers, and stops on mosaic stop (293.088316ms)
✔ workRef and validBranch take only what a ref name can hold (2.280976ms)
✔ a push lands as the task's work ref, a fast-forward lands after it, and main is the root's (187.443563ms)
✔ a rewritten branch refuses non-fast-forward and the work ref stays (124.192671ms)
✔ a branch with no history in common with main refuses unrelated-history (60.579235ms)
✔ a bundle that needs commits the working repository lacks refuses missing-prerequisite (51.079109ms)
✔ the root is fetched again before each push and main follows it, so a clone of a newer root pushes (129.47937ms)
✔ a root moved back after the clone leaves the push's base unknown: missing-prerequisite (78.854404ms)
✔ a commit with a broken object refuses invalid-bundle, and only because fsck is on (86.468293ms)
✔ only a v2 bundle with the named branch is read (64.914471ms)
✔ a branch named main, or named for another task, moves only this task's work ref (102.371349ms)
✔ a record that throws moves the work ref back, or removes a new one (141.771502ms)
✔ a work ref that can't go back refuses rollback-failed, naming the ref and the commit (362.776758ms)
✔ a root that can't be read refuses root-unreadable (28.853641ms)
✔ a git past its time gets SIGTERM, leaves no ref lock, and the next push lands (2132.860162ms)
✔ a git that ignores SIGTERM gets SIGKILL once the grace period is over (1025.936026ms)
✔ a working repository path that isn't a directory refuses (23.030329ms)
✔ review bundles a pushed commit as refs/mosaic/review, leaving out what the reviewer has (120.899663ms)
✔ review of a project with no working repository refuses unknown-commit (14.031146ms)
✔ the runner's git tools hold the host's limits and branch rule (1.219295ms)
✔ a reseed moves root but leaves a landed main, and main forwards once root contains it (184.469774ms)
✔ after a landing, a push built on the root still lands and main stays where the landing put it (126.530409ms)
✔ once the root shares no history with a landed main, a push is checked against main, not the root (179.004093ms)
✔ a landing squashes the reviewed diff onto main as the bus host and moves main only at finish (105.224989ms)
✔ a landing refuses ref-moved, base-conflict and root-file before it makes a commit (308.132399ms)
✔ a landing whose applied diff isn't the reviewed one refuses patch-drift and leaves no worktree (121.415385ms)
✔ finish refuses base-moved when main moved, and a record that throws moves main back (242.643351ms)
✔ halted push receipt rolls back only its unrecorded ref and cleans temporary refs (198.696687ms)
ℹ tests 218
ℹ suites 0
ℹ pass 218
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 6318.071226
@@ -0,0 +1,202 @@
{
"base": "e0c6142f3",
"testedRevision": "2d274a5b6c35c3e74b07206ffd724a6579bb149d",
"tmpdir": "/mnt/storage/scratch/tmp/tNoueZ",
"wholeSuites": {
"library": {
"tests": 142,
"pass": 142,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"business": {
"tests": 270,
"pass": 270,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"bus": {
"tests": 974,
"pass": 974,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"cli": {
"tests": 988,
"pass": 988,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"harness": {
"tests": 172,
"pass": 172,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"seat": {
"tests": 218,
"pass": 218,
"fail": 0,
"cancelled": 0,
"skipped": 0
}
},
"touched": {
"touched-first": {
"tests": 57,
"pass": 56,
"fail": 1,
"cancelled": 0,
"skipped": 0
},
"touched-rerun": {
"tests": 57,
"pass": 57,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"availability-green": {
"tests": 3,
"pass": 3,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"runtime-fixture-retry": {
"tests": 1,
"pass": 1,
"fail": 0,
"cancelled": 0,
"skipped": 0
}
},
"mutants": {
"M1-writer-fence": {
"control": {
"tests": 6,
"pass": 6,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"negative": {
"tests": 6,
"pass": 3,
"fail": 3,
"cancelled": 0,
"skipped": 0
},
"restored": {
"tests": 6,
"pass": 6,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"productHashesRestored": true
},
"M2-incoming-human": {
"control": {
"tests": 6,
"pass": 6,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"negative": {
"tests": 6,
"pass": 5,
"fail": 1,
"cancelled": 0,
"skipped": 0
},
"restored": {
"tests": 6,
"pass": 6,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"productHashesRestored": true
},
"M3-split-check-transaction": {
"control": {
"tests": 13,
"pass": 13,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"negative": {
"tests": 13,
"pass": 12,
"fail": 1,
"cancelled": 0,
"skipped": 0
},
"restored": {
"tests": 13,
"pass": 13,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"productHashesRestored": true
},
"M4-drop-client-reason": {
"control": {
"tests": 13,
"pass": 13,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"negative": {
"tests": 13,
"pass": 12,
"fail": 1,
"cancelled": 0,
"skipped": 0
},
"restored": {
"tests": 13,
"pass": 13,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"productHashesRestored": true
},
"M5-hide-library-unavailable": {
"control": {
"tests": 3,
"pass": 3,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"negative": {
"tests": 3,
"pass": 1,
"fail": 2,
"cancelled": 0,
"skipped": 0
},
"restored": {
"tests": 3,
"pass": 3,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"productHashesRestored": true
}
},
"totalWholeSuiteTests": 2764
}
@@ -0,0 +1,9 @@
library: 142/142 pass; fail=0 skipped=0 cancelled=0
business: 270/270 pass; fail=0 skipped=0 cancelled=0
bus: 974/974 pass; fail=0 skipped=0 cancelled=0
cli: 988/988 pass; fail=0 skipped=0 cancelled=0
harness: 172/172 pass; fail=0 skipped=0 cancelled=0
seat: 218/218 pass; fail=0 skipped=0 cancelled=0
Touched rerun 57/57; first run 56/57, new runtime fixture corrected.
M1-M5 killed; each control/restored run green, hashes restored.
No old test failed or was edited. scripts/test-*.sh left to Sage at landing.
@@ -0,0 +1,80 @@
✔ C2-06 held library lock gives the agent citation-unavailable and its retry reason (5129.213097ms)
✔ C2-06 malformed sync state is availability failure, never a fabricated invalid cite (32.312603ms)
✔ C2-06 no mirror or freshly initialized empty mirror still means no served citation (31.769445ms)
✔ C2-06 coder send_message guard covers every table refusal; inserts nothing (104.132156ms)
✔ C2-06 research send_message guard covers every table refusal; inserts nothing (90.030314ms)
✔ C2-06 stored check carries the file author trailer at an unrelated cited tip (57.202238ms)
✔ C2-06 supporting cite cannot state canon, including a folder also marked playground (41.82067ms)
✔ C2-06 supporting file stores supporting scope and its real agent trailer (47.52786ms)
✔ C2-06 check evidence and insert are atomic when storing evidence fails (45.049883ms)
✔ C2-06 live limits change both directions; unreadable file keeps checks and exact fixed texts (54.4217ms)
✔ C2-06 page store is session-local, caps 20 fetches and 200 KiB, drops at disconnect (86.893454ms)
✔ C2-06 transport passes safe capped guard reason; ordinary refusal envelope is byte-identical (55.019525ms)
✔ C2-06 non-library businesses retain role.claim shape and unguarded free sends (26.383322ms)
✔ C2-06 thread messages carry file/last evidence with one read per distinct path (76.778515ms)
✔ C2-06 guarded request snapshot cannot change between check and insert (24.114008ms)
✔ C2-06 library.limits.set is human-only and invalid settings leave file and receipts unchanged (47.161109ms)
✖ C2-06 runtime reads changed and unreadable reply limits without restarting (78.402278ms)
✔ C2-06 M11 human replacement works; omitted settings return to defaults (26.436831ms)
✔ C2-06 M11 agents and tester cannot change settings, including by changing human (21.452407ms)
✔ C2-06 M11 serialization cannot replace settings after the first fence (8.669666ms)
✔ C2-06 M11 an unrelated actor cannot appoint itself human and change reply limits (8.204041ms)
✔ C2-06 invalid setter values preserve the business and changes.jsonl (9.079346ms)
✔ C2-06 validator accepts hand-edited settings; raw reader fails closed on invalid files (10.338142ms)
✔ C2-06 CLI replies reads revision and sends only the JSON settings to the human verb (1.898838ms)
✔ C2-06 CLI replies requires a file and refuses tester writes before a bus call (0.465972ms)
✔ C2-06 RESULT reply-invalid retries once, delivers only the valid answer and names reason (222.089187ms)
✔ C2-06 RESULT citation-missing retries once, delivers only the valid answer and names reason (200.104611ms)
✔ C2-06 RESULT citations-over-limit retries once, delivers only the valid answer and names reason (197.834891ms)
✔ C2-06 RESULT citation-invalid retries once, delivers only the valid answer and names reason (210.156515ms)
✔ C2-06 RESULT playground-cited-as-canon retries once, delivers only the valid answer and names reason (213.835593ms)
✔ C2-06 RESULT citation-cross-universe retries once, delivers only the valid answer and names reason (209.912186ms)
✔ C2-06 RESULT citation-unfetched retries once, delivers only the valid answer and names reason (198.705684ms)
✔ C2-06 RESULT two guard refusals use the citation fixed text and exactly one retry (182.386586ms)
✔ C2-06 RESULT JSON 34000 characters retries with a shorter valid answer (213.370025ms)
✔ C2-06 RESULT JSON 70000 characters retries with a shorter valid answer (199.782915ms)
✔ C2-06 RESULT two oversized JSON bodies use the length fixed text with citations required (184.820165ms)
✔ C2-06 multibyte plain bodies also receive the one request-size retry (201.829013ms)
✔ C2-06 two multibyte plain bodies use the length fallback (182.03426ms)
✔ C2-06 RESULT a length refusal then citation refusal shares one retry and citation fallback (183.540139ms)
✔ C2-06 fixed empty/failed replies defer unslop note until the next cited reply (274.786836ms)
✔ C2-06 cited JSON above the old 32000 clip retains its citations and text (167.141798ms)
✔ C2-06 a flagged cited answer keeps the note inside text and citations whole (168.83631ms)
✔ C2-06 send_message typed tool runs every guard code before the valid RESULT (230.565935ms)
✔ C2-06 outside library the old failed text, clip and unslop behavior hold (197.472747ms)
✔ C2-06 outside library a refused send keeps the existing no-retry behavior (151.296315ms)
✔ C2-06 the retry turn delivers citation-unavailable reason to the agent (184.635398ms)
✔ C2-06 reply schema: free bodies, exact objects and safe refusal reasons (14.759264ms)
✔ C2-06 citation setting and all four exact fixed texts (9.899391ms)
✔ C2-06 default citation cap passes 20 and refuses 21, even with optional citations (76.751112ms)
✔ C2-06 real Git citation scope, reachability, lines and normalized quotes (41.360225ms)
✔ C2-06 playground cites pass but cannot state canon (23.671961ms)
✔ C2-06 independent universes refuse; a hybrid and only its sources pass (41.572641ms)
✔ C2-06 web cites require allowed definition, this session fetch and kept quote (10.468249ms)
✔ C2-06 file origin is the path commit and trailer, while last follows served changes (31.989388ms)
✔ C2-06 origin uses literal paths even when a filename contains a glob (20.084358ms)
✔ C2-06 cited-commit guard reads exactly the C2-05a indexed file set with supporting scope (44.687642ms)
✔ C2-06 reply limits fall back independently without coercion or inherited keys (0.462948ms)
ℹ tests 57
ℹ suites 0
ℹ pass 56
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 11101.06711
✖ failing tests:
test at packages/bus/tests/citation-runtime.test.mjs:12:1
✖ C2-06 runtime reads changed and unreadable reply limits without restarting (78.402278ms)
Error: invalid-authority
at fail (file:///home/jwoltje/.t3/worktrees/mosaic-stack/beakley-row217/packages/bus/src/broker.mjs:215:9)
at checkBusiness (file:///home/jwoltje/.t3/worktrees/mosaic-stack/beakley-row217/packages/bus/src/broker.mjs:366:7)
at new Broker (file:///home/jwoltje/.t3/worktrees/mosaic-stack/beakley-row217/packages/bus/src/broker.mjs:537:63)
at startBroker (file:///home/jwoltje/.t3/worktrees/mosaic-stack/beakley-row217/packages/bus/src/runtime.mjs:274:14)
at async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/beakley-row217/packages/bus/tests/citation-runtime.test.mjs:18:19)
at async Test.run (node:internal/test_runner/test:1409:7)
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
code: 'invalid-authority'
}
@@ -0,0 +1,65 @@
✔ C2-06 held library lock gives the agent citation-unavailable and its retry reason (5131.834326ms)
✔ C2-06 malformed sync state is availability failure, never a fabricated invalid cite (31.609704ms)
✔ C2-06 no mirror or freshly initialized empty mirror still means no served citation (31.510292ms)
✔ C2-06 coder send_message guard covers every table refusal; inserts nothing (102.606635ms)
✔ C2-06 research send_message guard covers every table refusal; inserts nothing (91.30209ms)
✔ C2-06 stored check carries the file author trailer at an unrelated cited tip (55.686451ms)
✔ C2-06 supporting cite cannot state canon, including a folder also marked playground (42.44166ms)
✔ C2-06 supporting file stores supporting scope and its real agent trailer (48.386414ms)
✔ C2-06 check evidence and insert are atomic when storing evidence fails (39.194827ms)
✔ C2-06 live limits change both directions; unreadable file keeps checks and exact fixed texts (54.284625ms)
✔ C2-06 page store is session-local, caps 20 fetches and 200 KiB, drops at disconnect (85.004961ms)
✔ C2-06 transport passes safe capped guard reason; ordinary refusal envelope is byte-identical (54.117068ms)
✔ C2-06 non-library businesses retain role.claim shape and unguarded free sends (26.131034ms)
✔ C2-06 thread messages carry file/last evidence with one read per distinct path (76.437567ms)
✔ C2-06 guarded request snapshot cannot change between check and insert (23.908928ms)
✔ C2-06 library.limits.set is human-only and invalid settings leave file and receipts unchanged (39.656735ms)
✔ C2-06 runtime reads changed and unreadable reply limits without restarting (113.293022ms)
✔ C2-06 M11 human replacement works; omitted settings return to defaults (36.305063ms)
✔ C2-06 M11 agents and tester cannot change settings, including by changing human (21.839826ms)
✔ C2-06 M11 serialization cannot replace settings after the first fence (8.253422ms)
✔ C2-06 M11 an unrelated actor cannot appoint itself human and change reply limits (7.674495ms)
✔ C2-06 invalid setter values preserve the business and changes.jsonl (8.65299ms)
✔ C2-06 validator accepts hand-edited settings; raw reader fails closed on invalid files (9.800617ms)
✔ C2-06 CLI replies reads revision and sends only the JSON settings to the human verb (1.78485ms)
✔ C2-06 CLI replies requires a file and refuses tester writes before a bus call (0.520156ms)
✔ C2-06 RESULT reply-invalid retries once, delivers only the valid answer and names reason (220.792912ms)
✔ C2-06 RESULT citation-missing retries once, delivers only the valid answer and names reason (195.400791ms)
✔ C2-06 RESULT citations-over-limit retries once, delivers only the valid answer and names reason (196.181772ms)
✔ C2-06 RESULT citation-invalid retries once, delivers only the valid answer and names reason (211.797981ms)
✔ C2-06 RESULT playground-cited-as-canon retries once, delivers only the valid answer and names reason (212.360651ms)
✔ C2-06 RESULT citation-cross-universe retries once, delivers only the valid answer and names reason (212.667005ms)
✔ C2-06 RESULT citation-unfetched retries once, delivers only the valid answer and names reason (184.261348ms)
✔ C2-06 RESULT two guard refusals use the citation fixed text and exactly one retry (184.957084ms)
✔ C2-06 RESULT JSON 34000 characters retries with a shorter valid answer (216.343048ms)
✔ C2-06 RESULT JSON 70000 characters retries with a shorter valid answer (198.338992ms)
✔ C2-06 RESULT two oversized JSON bodies use the length fixed text with citations required (183.309434ms)
✔ C2-06 multibyte plain bodies also receive the one request-size retry (198.411283ms)
✔ C2-06 two multibyte plain bodies use the length fallback (182.244769ms)
✔ C2-06 RESULT a length refusal then citation refusal shares one retry and citation fallback (184.948978ms)
✔ C2-06 fixed empty/failed replies defer unslop note until the next cited reply (294.575418ms)
✔ C2-06 cited JSON above the old 32000 clip retains its citations and text (169.454956ms)
✔ C2-06 a flagged cited answer keeps the note inside text and citations whole (164.824669ms)
✔ C2-06 send_message typed tool runs every guard code before the valid RESULT (213.365137ms)
✔ C2-06 outside library the old failed text, clip and unslop behavior hold (198.225522ms)
✔ C2-06 outside library a refused send keeps the existing no-retry behavior (155.955999ms)
✔ C2-06 the retry turn delivers citation-unavailable reason to the agent (188.198987ms)
✔ C2-06 reply schema: free bodies, exact objects and safe refusal reasons (17.723832ms)
✔ C2-06 citation setting and all four exact fixed texts (11.590649ms)
✔ C2-06 default citation cap passes 20 and refuses 21, even with optional citations (79.713842ms)
✔ C2-06 real Git citation scope, reachability, lines and normalized quotes (41.208361ms)
✔ C2-06 playground cites pass but cannot state canon (24.250695ms)
✔ C2-06 independent universes refuse; a hybrid and only its sources pass (42.707909ms)
✔ C2-06 web cites require allowed definition, this session fetch and kept quote (10.901286ms)
✔ C2-06 file origin is the path commit and trailer, while last follows served changes (37.369269ms)
✔ C2-06 origin uses literal paths even when a filename contains a glob (20.592546ms)
✔ C2-06 cited-commit guard reads exactly the C2-05a indexed file set with supporting scope (51.682837ms)
✔ C2-06 reply limits fall back independently without coercion or inherited keys (0.499884ms)
ℹ tests 57
ℹ suites 0
ℹ pass 57
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 11134.473726
+10
View File
@@ -0,0 +1,10 @@
# Bentina
Builder seat, Codex gpt-6.1-sol, started by Sage under Q246 and mos-1566. Owns row 157, I2: the install images, the
install config key, the endpoint helper and the egress proxy (docs/plans/2026-10-18_containerized-install-rows.md),
reassigned from Researcher so the coding runs on Codex.
No launcher in this directory. The seat runs as a T3 thread and works in its own worktree. It has no credentials of its
own; it pushes only its own `bentina/*` branches through the repository credential helper (mos-0981), never `refactor`,
`main` or another seat's branch. Claude seats orchestrate and review the install path (mos-1542 rule 4). Registered by
Sage on 2026-10-24 so the queue can name the seat as row owner (store.mjs isSeatDir).
+8
View File
@@ -0,0 +1,8 @@
# Boyd
Builder seat, Codex gpt-6.1-sol, started by Mos under Q245 (mos-1506). Owns row 298 (the chief-of-staff grant scope, handed over from Megavolt).
No launcher in this directory. The seat runs as a T3 thread (thread 48a3ae38) and works in its own worktree. It has no
credentials of its own; it pushes only its own `boyd/*` branches through the repository credential helper (mos-0981),
never `refactor`, `main` or another seat's branch. Claude seats orchestrate and review (Q245). Registered by Sage on
2026-10-23 so the queue can name the seat as row owner (store.mjs isSeatDir).
+272
View File
@@ -0,0 +1,272 @@
# Row 298 (#1804, Q228): chief-of-staff grant scope
Owner Boyd (48a3ae38), reviewer Dewey. Branch `boyd/row298`, base `45dca69f6`.
Assignment: mos-1496/Q245. Handoff: Megavolt megavolt-0203, local `7a141269c`;
cherry-picked as `4de3cec27` (design) and `7cea739de` (UNTESTED code).
Brief: `docs/plans/2026-10-23_mvp-readiness-rows.md`, chief-of-staff grant scope.
Megavolt's original design remains in `agents/megavolt/work/queue-298/BUILD.md`.
## Authority and accepted design
Sage sage-3594, restated in sage-3612: launch.grantScope, lenient read with empty
fallback, strict human-only write. No general organization setter may write it.
Per-method agents/projects or agents/hosts/commands; host-enroll never in scope.
Host command arrays match whole tokens and exact lengths. `grants.scope.set`
from the human CLI is Approve; no Console page or chief-raised scope change.
Mos mos-1496/1502 requires the same human-shell guard as `mosaic access`.
The broker closes an in-scope request via scope and writes grant.scope.used;
missing evidence must refuse execution. Narrowing before spend fails
scope-changed. Empty scope ships; only Jason sets the live value (Q188).
No credential files read, no live grants, no deployment, no queue writes. Push
only boyd/*, additive commits, no amend/force-push or attribution trailers.
Sage owns queue, shared test slot and landing. No Node/tests before CLEAR.
## Implementation plan and ledger
Using writing-plans and executing-plans inline; the approved brief and D1-D6
are the spec. This packet is the requested plan/tracking location.
- [x] Read brief, roster, implementation and handoff; register session.
- [x] Bring Megavolt's two commits onto Boyd's branch without changing history.
- [x] Add independent CLI tests in `packages/cli/tests/grants-scope.test.mjs`:
scope read/set requests; agent-marker rejection before stdin/transport;
--tester rejection; missing revision, malformed/empty/oversize input.
- [x] Strengthen new business/bus grant-scope tests for exact commands,
scope evidence binding, host-enroll exclusion and spent scope-changed.
- [ ] On Sage CLEAR, observe targeted failures before fixes; fix inherited
implementation using the existing human proof and grant executors.
- [ ] Update bus/CLI docs, append BUILD-LOG before/after evidence, manifest.
- [ ] On Sage CLEAR run touched suites; record exact results and mutants.
- [ ] Commit UNTESTED until verified; push boyd/row298 only when slot permits;
report to Sage and Dewey, cc Mos for pushes/blockers. Dewey reviews manifest.
Pre-flight interfaces: business checkGrantScope/grantScopeOf/grantInScope feed
the instance writer and broker. Runtime supplies a fresh scope from the org
file and routes the human setter to the same organization writer. CLI callFor
supplies refuseInsideAgent and humanTransport. The grant executors consume the
broker's immutable close/evidence. Tests use scratch files/fake Gitea only.
Review focus: exact argv length, stale scope before spend, forged/missing scope
evidence, malformed fallback, and CLI agent ancestry. Tests must cover each.
Static findings before any Boyd Node/test run:
- Handoff introduced commandPrefixes beyond the accepted D2 shape, allowing
trailing args. Remove it; only exact command arrays are authorized.
- scope.used carries a digest without validating it, and no org revision.
Bind evidence to the canonical scope snapshot and grant/close sequence;
preserve historical grants when scope is later changed, recheck at spend.
- Gitea recheck throws inside the spend transaction and rolls back spend on
scope-changed. Preserve spend and log failure for that case (D6).
- The optional giteaStart?. assertion always passes when the API is absent;
use the real runGiteaGrant entry point. Fake Gitea tokens() does exist.
## Existing test changes (mos-1272)
Approved by Mos mos-1510 via Sage sage-3624; edited exactly as approved:
| File | Actual numstat | Reason |
| --- | --- | --- |
| packages/bus/tests/project-runtime.test.mjs | +1 / -1 | Vocabulary import pin adds grantScopeOf and grantInScope. |
Other test work is confined to row 298's new files. No pre-existing CLI tests
will change. Record final numstat here before review.
## Human proof and organization ownership
CLI: `packages/cli/src/cli.mjs` callFor runs refuseInsideAgent before constructing
humanTransport, as `accessCommand` does. The setter takes no --tester flag.
`packages/bus/src/human.mjs` verifyHuman checks the nonce, CLI path and every
ancestor's markers/argv; `bindHuman` and #human in broker.mjs require the
business human, via cli, outsideAgent true. Tests will pin this chain's caller
refusal. The scope receipt records by/via/outsideAgent and old/new sha256.
Org file: `packages/business/src/organization.mjs` regular() requires a regular,
non-symlink file owned by the process uid and not writable by group/other;
write() uses revision checks, locked durable receipts and atomic rename.
The OS owner uid can edit it directly; the agent sandbox does not mount the
user's config (`packages/seat/src/sandbox.mjs`). This is the existing cooperative
human/process boundary, not a hostile same-uid isolation claim.
Chief enrollment: broker instances.set calls #human and #mayHuman before
add/change; credential issue/delete use #requestCredential's human gate.
launch.by is an organization-file setting, excluded from general setters;
only that chief may auto-approve within scope. Additional chief instances
remain on the per-grant human approval path.
## Validation
UNTESTED. No Boyd Node/test run yet; waiting for Sage CLEAR.
M1: bypass in-scope check. M2: bypass invalid-value fallback. M3: remove human
setter guard. M4: drop grant.scope.used. All need named failing tests on gate.
## Session correction
The initial SESSIONS entry labels startup 19:13Z; startup was approximately
19:08Z. Message header timestamps in boyd-0001 through 0004 were estimates;
use T3's receipt timestamps as authoritative. Subsequent reports use date -u.
## Departures from Megavolt 7a141269c (Sage sage-3624)
1. Removed commandPrefixes; host scope commands match exact token arrays only.
2. grantScope callback now supplies one organization read `{value,revision}`.
grant.scope.used includes that revision, canonical scope snapshot and digest;
#approvedGrant validates the digest, shape, method, agent and close sequence.
It uses the immutable snapshot so later narrowing doesn't revoke issued grants.
3. Gitea scope-changed is caught inside the spend transaction and logs a terminal
failure without rolling back its spend. Other recheck failures keep their
existing behavior. Host already catches recheck failures after spending.
Additional handoff corrections: replaced optional nonexistent giteaStart with
runGiteaGrant; added successful host executor/revoke and enrollment-exclusion
coverage; added real runtime writer coverage and independent CLI guard tests.
Sage scheduled push at 19:41Z with MOSAIC_GITEA_CREDENTIAL_FILE unset, then T1
lane B around 19:47Z (after explicit CLEAR), four new files whole and serial,
hard stop 20:00Z. Fethry lane A is disjoint. No test was run early. Production
corrections are marked UNTESTED under that slot mandate; baseline regression
checks against the inherited implementation will run only on CLEAR.
## Candidate preparation (before T1)
The three static corrections, CLI/runtime coverage and docs are prepared but
UNTESTED. `git diff --check` is clean. The approved import-pin edit is exactly
1 addition / 1 deletion. M1-M4 are encoded in mutants.py (not run). No Node,
https git, full suite or webui build has run in Boyd's worktree.
Review package: product/test/documentation files in MANIFEST.sha256, excluding
append-only project logs and the preserved predecessor packet. The manifest
identifies exact bytes for Dewey; each later product change regenerates it and
requires a review delta. Existing tests changed: only project-runtime, 1/1.
## Dewey static review dewey-0933
N1: Added a positive control to the malformed-evidence fixture. A valid event
must pass scope authorization and reach decision-mismatch on the deliberately
absent definition binding; invalid events remain not-authorized. No spend.
N2: Additional named mutants cover spend recheck, exact argv length, Gitea spend
rollback, launch.by eligibility and accepting any evidence row (results below).
N3: At spend only grant scope membership is rechecked, not whether the raising
chief is still launch.by. This implements sage-3594 Q5; changing the launcher
later does not by itself invalidate a pending scope-approved request.
N4: The scope shortcut returns the closed decision view to the chief without
sending a separate close message; documented in the bus verb table.
N5: grant.scope is logged after the organization file commit in a separate bus
transaction. A crash between them leaves durable changes.jsonl as the receipt,
as with other organization writers. The setter does not claim cross-store
atomicity.
## T1 lane B results (sage-3642, 2026-10-23 19:23Z–19:29Z)
TMPDIR: `/mnt/storage/scratch/tmp/boyd298-4bzr6fn7`. Each whole file ran serially
as `timeout -k 10 180 node --test --test-concurrency=1 FILE`, TMPDIR set to that
scratch directory. Final restored candidate results:
| Whole file | Pass | Fail | Skip |
| --- | ---: | ---: | ---: |
| business/tests/grant-scope.test.mjs | 7 | 0 | 0 |
| bus/tests/grant-scope.test.mjs | 14 | 0 | 0 |
| bus/tests/grant-scope-runtime.test.mjs | 1 | 0 | 0 |
| cli/tests/grants-scope.test.mjs | 4 | 0 | 0 |
| bus/tests/project-runtime.test.mjs | 3 | 0 | 0 |
29/0/0 total. `final-1.log` through `final-5.log` hold the final output. The
runtime's reload-needs-restart notice is expected: the fixture's boot document
has fewer credential references than its organization document, as in the
existing instances runtime tests. No credential contents are loaded from the
real user config.
Initial run: business 7/0; bus 13/1 due to Boyd's test typo, an out-of-scope
`opts` reference in the missing-scope assertion. Corrected only that new-test
line, then bus 14/0 and the remaining files green. Dewey N1 positive control
was added and the whole bus file passed again; final rerun above followed all
mutants. No production code changed during this test window.
Mutants: all whole files, serial, with timeout -k 10 and the same TMPDIR.
`mutants.py --sage-clear sage-3642 --logs SCRATCH/review-mutants --deadline
2026-10-23T19:38:00+00:00` restores exact original source after each run.
M1/M2/M3/M4 are brief/Sage mutants; M5–M10 cover review focus and dewey-0933.
Each exited 1 with named assertion failures, no loader/syntax kill.
| Mutant | Change | Pass/fail | Named killer |
| --- | --- | --- | --- |
| M1 | skip raise scope check | 11/3 | bus out-of-scope Gitea waits; empty/bad scope waits; host argv exclusion |
| M2 | skip invalid-value fallback | 5/2 | business missing/bad scope fallback; bad file scope fallback |
| M3 | remove #human from scope verb | 13/1 | bus Q3 caller refusals |
| M4 | drop grant.scope.used write | 9/5 | bus Q4 protected evidence assertion; four executor waits also fail |
| M5 | skip scope digest check | 13/1 | bus Q4 bad evidence: decision-mismatch instead of not-authorized |
| M6 | rethrow narrowing, rolling spend back | 13/1 | bus Q5 Gitea spent assertion |
| M7 | same without length check | 6/1 | business Q2 shorter command prefix exclusion |
| M8 | no-op #scopeRecheck | 12/2 | bus Q5 Gitea and host scope-changed outcomes |
| M9 | remove launch.by check | 13/1 | bus Q6 second chief stays open |
| M10 | accept any matched scope evidence row | 13/1 | bus Q4 bad evidence, with positive control |
Mutation log sha256 (under scratch/review-mutants):
```text
55e9973af5fca0088963e2ca11fd81b2fb46dfead813a577c0e0aad2d6269b68 M1.log
abd1b784eff5ae1333a7b47085d3e199cad6d27a00e2584edf0b62417ad4c888 M2.log
1a56085e548d1e244f0f88fe12a45f77c162375880794f9ef88b241ed3a1704d M3.log
9c120f3f7128488edaf8bfd6d41bae712e69e76da4195a0d4dc0e8336b02038f M4.log
1bba88a3752823454acdaa51abde6aad66fdd5488801b4aceda02a3b42c8123d M5.log
a4ce3cacca9f7ea56b8cdfd503c76173a8e4ff1d8a7ec07032c93f0b51aa60d8 M6.log
acecd5afc93d68d96d713f8a9a2dc08351831a0b7360a13b4e30a572ad4167bf M7.log
fce7fa505ccf4f2d4190bd03c209fd19f1cf2770d3ae1246a3bd03697594019e M8.log
a830a7964890dd04a2dcc7a932a1502f1dea06419a1eae6b91a85f7878dc5681 M9.log
38ce3e7f69f6c6ffe10133397465d52538a930a830f76256a8b9280f8df78e4b M10.log
```
Full touched-package suites and every scripts/test-*.sh remain for Sage's full gate; this CLEAR authorized only the five whole files. Candidate remains
marked Untested for the full gate. No queue row has been changed by Boyd.
## Dewey final delta review (dewey-0935, 2026-10-23 19:31:55Z)
Dewey reviewed 574ece13c..bcd93dc08 with local git only, no Node: CLEAN,
nothing blocks. Verified all 13 manifest entries, exact package-file coverage,
project-runtime 1/1, M5-M10 mutation sites, all ten mutation log hashes and
counts, named assertion kills without loader/syntax errors, final five logs
29/0/0, and N1-N5 coverage. No production code delta in this review range.
Formal Gitea APPROVE on #1804 and queue record wait on the row 291 hold release
and Sage's go. Sage's touched-package and every scripts/test-*.sh gate remains
required. Boyd has released lane B and has no running test processes.
## Rebase after row 239 (sage-3794)
Current branch: `boyd/row298-r2`, rebased from published row 298 tip
`2fc27bce6bfac2debe9703782bf308132c26b393` onto
`833ec1cc8d7c11842efb82e57c1a0b256c8d22d7`, which includes row 239 through
`e0cb1db2c`. Original `boyd/row298` remains intact locally and remotely. A new
Boyd branch carries the rebased candidate so no published history is amended
or force-pushed. This section supersedes the original base/branch header for
current candidate work.
Conflicts: only the first Boyd log append in `BUILD-LOG.md` and
`docs/SESSIONS.md` conflicted while replaying 574ece13c. For each, verified the
old commit's log started with the merge base bytes, then retained the new
base's complete log bytes and appended only Boyd's suffix (434 and 281 bytes
respectively). Later Boyd appends replayed automatically. No prior entries
were removed or rewritten. Five commits replayed; the third/fourth range-diff
entries differ only in append-log context; package-only range-diff is all `=`.
The overlapping product files merged automatically: broker.mjs, runtime.mjs
and instance-settings.mjs had no textual conflicts. Inspected their diff
against the new base: only the existing row 298 scope additions remain.
Preserved row 239's injected writer, fire/delete beforeWrite callback, and
commit() passing beforeWrite into writer.write. There is no pre-lock revoke
call in commit(). `packages/business/src/organization.mjs` is byte-identical
to the new base: beforeWrite still runs inside withLock, after revision and
validation checks; post-revoke errors still carry revoked true. Broker's
row-239 error handling and runtime's lock/revoke wiring remain intact.
Static checks only: package patch range-diff all equal, organization writer
unchanged, diff whitespace clean, refreshed 13-file package manifest verifies.
The only pre-existing row-298 test change remains project-runtime.test.mjs
exactly 1/1 under mos-1510. No test files were changed for this rebase.
UNTESTED on the new base: no Node, tests, mutants, builds or queue writes run.
Earlier 29/0 and M1-M10 results apply to the old base only. Await Sage CLEAR
for whole touched-file reruns; Dewey reviews the new candidate.
Row 321 (#1817) review assignment acknowledged; waiting for Sage's request
and Gladstone's pushed docs-only F7/F10 run-sheet candidate.
@@ -0,0 +1,13 @@
612488b705853e75e6f8952e41552526f4d07dd297d7619d608d434ed75121d6 packages/bus/README.md
63fdf6c048f0994af3551510119eeb294c71f8116702772844214930b827cc56 packages/bus/src/broker.mjs
65425ead353017c99e04f1e0bcc3f85c4ba60054da293badaa0360e681e418dc packages/bus/src/runtime.mjs
e7065db949cacfd4679a1031eebf5cde09ed196ce85612e8400ae563f02a0f18 packages/bus/tests/grant-scope-runtime.test.mjs
4030cf584481a1db12d9e6f744015c48fdebd468335d065ead3e90180858d366 packages/bus/tests/grant-scope.test.mjs
bc432d8d430433b9d84c00883584dc53d4b27afb5e93f739fe3ca28e80f01efa packages/bus/tests/project-runtime.test.mjs
84d6dd15d5ca2926d8f7a34548c70c3e7a3c58e692f0b009414f1af35cb096cc packages/business/src/business.mjs
e3b425f9ad2a0d4e6e0b55bd48827e144015662d95ace4163fe6474e5f98da81 packages/business/src/instance-settings.mjs
fed4177325f65a2b9823a40a9c35c01d60c0520e3ff40b4574c3cf2c29cc096b packages/business/src/vocabulary.mjs
b7f96e45b9ffca2a7ebc18dc446f0adcaac72d3900f098c60157cf6cbf1bfc13 packages/business/tests/grant-scope.test.mjs
60fc267b7f8f9e83eeb0d0207c8abdef68d554f32b08d508e98dbf59b442a366 packages/cli/README.md
b586907ca8f351f60dc19ec2683df75d2d70ddb12955d09fb14560c9d3bed3dc packages/cli/src/grants.mjs
fb7c30b31facd887b03ff02dd6734d48a815978481b33bb21ec48604a51c5ff5 packages/cli/tests/grants-scope.test.mjs
+105
View File
@@ -0,0 +1,105 @@
#!/usr/bin/env python3
"""Row 298 mutants. Run only with Sage's explicit CLEAR in Boyd's slot.
Each mutation is applied to this worktree, runs one whole new test file,
then restores the exact original bytes, including after an interruption.
Logs go to a caller-supplied scratch directory, never the repository root.
"""
import argparse
import datetime
import pathlib
import subprocess
ROOT = pathlib.Path(__file__).resolve().parents[4]
BROKER = ROOT / 'packages/bus/src/broker.mjs'
VOCABULARY = ROOT / 'packages/business/src/vocabulary.mjs'
BUS_TEST = 'packages/bus/tests/grant-scope.test.mjs'
BUSINESS_TEST = 'packages/business/tests/grant-scope.test.mjs'
def replace_once(source, old, new):
if source.count(old) != 1:
raise RuntimeError(f'expected exactly one mutant site, found {source.count(old)}')
return source.replace(old, new, 1)
def mutate(name, source):
if name == 'M1':
return replace_once(source,
'if (!raise?.grant || !grantInScope(scope, raise.grant)) return view;',
'if (!raise?.grant) return view;')
if name == 'M2':
return replace_once(source,
'return scope === null ? { scope: GRANT_SCOPE_EMPTY, fallback: true } : { scope, fallback: false };',
'return { scope: scope ?? value, fallback: false };')
if name == 'M3':
return replace_once(source,
' #grantScopeVerb(s, verb, a) {\n this.#human(s);',
' #grantScopeVerb(s, verb, a) {')
if name == 'M4':
old = """ this.#grantEvent(s.business, {
action: 'grant.scope.used', grantDecision: d.id, decisionSeq: seq, method: raise.grant.method,
agent: raise.grant.agent, scope, revision, scopeSha256: sha256(JSON.stringify(scope)),
}, d.id);"""
return replace_once(source, old, ' // MUTANT: scope evidence omitted.')
if name == 'M5':
return replace_once(source,
"evidence.agent === grant.agent && evidence.scopeSha256 === sha256(JSON.stringify(checked.scope)) &&",
"evidence.agent === grant.agent &&")
if name == 'M6':
start = source.index(" checked = this.#store.transaction(() => {\n const consumed = this.#consumeGrant")
end = source.index('\n } catch (e) {', start)
return source[:start] + " checked = this.#store.transaction(() => this.#giteaRecheck(business, decision, this.#consumeGrant(business, decision, 'gitea')));" + source[end:]
if name == 'M7':
return replace_once(source,
'const same = (a, b) => a.length === b.length && a.every((x, i) => x === b[i]);',
'const same = (a, b) => a.every((x, i) => x === b[i]);')
if name == 'M8':
return replace_once(source,
" if (this.#closed(decision)?.via === 'scope' && !grantInScope(this.#scopeNow(business).scope, g)) fail('scope-changed');",
" // MUTANT: no spend-time scope recheck.")
if name == 'M9':
return replace_once(source,
' if (s.role !== this.#business(s.business).launch?.by) return view;',
' // MUTANT: any chief instance can use scope.')
if name == 'M10':
start = source.index(' const evidence = JSON.parse(row.body);', source.index(' #scopeUsed('))
end = source.index('\n }', start)
return source[:start] + ' return true;' + source[end:]
raise ValueError(name)
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('--sage-clear', required=True, help='CLEAR message key; required before any Node run')
parser.add_argument('--logs', type=pathlib.Path, required=True)
parser.add_argument('--mutant', choices=['M1', 'M2', 'M3', 'M4', 'M5', 'M6', 'M7', 'M8', 'M9', 'M10', 'all'], default='all')
parser.add_argument('--deadline', default='2026-10-23T19:38:00+00:00')
args = parser.parse_args()
deadline = datetime.datetime.fromisoformat(args.deadline)
args.logs.mkdir(parents=True, exist_ok=True)
names = ['M1', 'M2', 'M3', 'M4', 'M5', 'M6', 'M7', 'M8', 'M9', 'M10'] if args.mutant == 'all' else [args.mutant]
for name in names:
remaining = (deadline - datetime.datetime.now(datetime.timezone.utc)).total_seconds()
if remaining <= 15:
raise RuntimeError('Sage slot deadline reached; no new test run')
path, test = (VOCABULARY, BUSINESS_TEST) if name in ['M2', 'M7'] else (BROKER, BUS_TEST)
original = path.read_bytes()
mutated = mutate(name, original.decode())
log = args.logs / f'{name}.log'
try:
path.write_text(mutated)
with log.open('w') as output:
result = subprocess.run(['timeout', '-k', '10', str(int(min(180, remaining - 13))), 'node', '--test', '--test-concurrency=1', test],
cwd=ROOT, stdout=output, stderr=subprocess.STDOUT,
timeout=min(195, remaining - 1), check=False)
print(f'{name}: exit={result.returncode} log={log}', flush=True)
finally:
path.write_bytes(original)
# Exit 1 needs human inspection of the failing test names; errors are not kills.
if result.returncode == 0:
raise RuntimeError(f'{name} survived')
if __name__ == '__main__':
main()
+10
View File
@@ -0,0 +1,10 @@
# Bradford
Builder seat, Codex gpt-6.1-sol, started by Sage under Q246 and mos-1572. Owns the push check row:
`scripts/push-check.sh`, which passes a binary only when an approved review candidate lists its path and sha256
(docs/plans/2026-10-24_push-guard-binary-manifest.md, #1825).
No launcher in this directory. The seat runs as a T3 thread and works in its own worktree. It has no credentials of its
own; it pushes only its own `bradford/*` branches through the repository credential helper (mos-0981), never `refactor`,
`main` or another seat's branch. Poe gives the first Codex review and Dewey the Opus 5.5 landing review (mos-1542,
mos-1571). Registered by Sage on 2026-10-24 so the queue can name the seat as row owner (store.mjs isSeatDir).
+162
View File
@@ -0,0 +1,162 @@
# Row 327 — reviewed binary push check (#1825)
2026-10-24 Bradford, branch bradford/row327, base b617b80f6.
## Plan and boundaries
Implement the scratch check's ordered tokens in scripts/push-check.sh, using an
embedded Node program for byte-safe git paths and SHA-256 blob hashing. Bash is
the public entry point; Node is already a repository requirement. Git commands
use explicit resolved object IDs, disable external diff/textconv, and inspect
committed bytes. No queue writes, hook changes, binary evidence, or live state.
Fetch is opt-in. Read reviewed rows with the queue package rows() API rooted in
the caller's repository; this preserves canonical/witness/replay checks.
Only the latest round counts; any changes receipt blocks that round. A matching
approval authorizes exactly the manifest path/hash, or a path changed from the
commit candidate's first parent with matching committed blob hash and mode.
Deleted binaries need no candidate. Multiple --row values form a union.
Add scratch-only integration coverage in scripts/test-push-check.sh. Reuse queue
test fixture helpers to bootstrap real scratch queues, then use queue verbs to
open rounds and record receipts. All git writes, bare remotes and queues remain
under TMPDIR. Test fail-closed ordering and five required mutants, generated as
text copies in scratch. No old tests are modified. Add the TOOLS entry.
Every run needs Sage CLEAR; run timeout -k 10. Record plain-text results here or
in this packet. After green checks, commit and push only bradford/row327 through
the repository helper, send Sage and Poe tip/base/path sha256 manifest, and move
327 in-review. Sage owns request posting and landing; Dewey reviews once there.
## Recovery and choices
Initial worktree queue next refused linked-worktree access as designed. Queue
claim is performed from the canonical checkout; production reads in the guard
retain the same refusal rather than invent a worktree override.
Requested Sage ruling on AGENTS log appends outside the brief's owned paths.
Sage sage-3989: lead handles BUILD-LOG and SESSIONS at landing. Session entry:
2026-10-24 Bradford — row 327 / #1825 — implementation and scratch verification
in this packet; outcome to be appended after acceptance.
Implementation note: commit candidates use an explicit first-parent diff (empty
tree for a root commit), with rename detection disabled, like verify-commit.
The changes-veto case has both an approval and a changes receipt; a veto mutant
would otherwise still fail for lack of approval and provide false confidence.
A receipt for another candidate cannot be produced through queue verbs: the
suite corrupts only a scratch queue and expects the production reader to refuse.
Diff color, external diff and textconv are disabled so scans inspect plain git
output. Paths are read from NUL-delimited records (including spaces/tabs).
## Verification (Sage CLEAR sage-3991)
First new-suite run red: my whitespace-path fixture attempted a manifest path
that the queue intentionally forbids. Corrected the fixture to a commit
candidate, which can contain that git path. Production queue code and old tests
remain unchanged. Raw first-run output is test-run-1.txt.
Second run green: PASS push-check 22 checks; KILLED skip-hash,
accept-changes, earlier-round, working-tree, no-row. test-run-2.txt holds the
plain-text receipt. bash -n both scripts and git diff --check passed. Runs used
TMPDIR recorded in tmpdir.txt and timeout -k 10 240; all generated binary bytes
were in disposable scratch repositories, never in this checkout or evidence.
The slot was used for only the authorized new suite and syntax/diff checks.
No claim of the lead's full scripts/test-*.sh landing gate is made here.
Final inspection after the first green run found a path-decoding concern: lossy
UTF-8 decoding can conflate distinct git filenames. Hardened NUL-delimited path
decoding to reject invalid UTF-8, and quote newline-containing paths in refusal
output to preserve one STOP line. Added scratch cases for both. Requested a new
CLEAR (bradford-0005) because the previous slot had already been released.
Final run (sage-3994 CLEAR) green on final code: PASS push-check 24 checks,
all five mutants KILLED again, bash -n both scripts and git diff --check passed.
Receipt: test-run-3.txt. The guard rejects non-UTF-8 git paths as environment
errors rather than comparing replacement characters; newline paths remain
checkable through commit candidates and refusals quote them on one line.
Acceptance for the builder stage: ordered tokens and stop behavior, explicit
base/fetch, exact blob manifest/commit checks, latest-round/veto checks, deletion,
log/FF/secrets/attribution refusals, and all required mutants are covered. Queue
reads use rows() with production validation; tests use only scratch queues.
Candidate-mismatched receipts are impossible through the queue API and are
covered by a corrupt scratch queue refusing its read. The lead's full-suite gate,
Poe first review, Dewey landing review, and adoption for Sage's next push remain
landing stages. No hooks, role policy, credentials or other seats' paths changed.
## Poe first review R1 (poe-0010) — changes
cceea407e has a blocking subdirectory bypass: ls-tree without --full-tree can
omit an existing binary outside the caller cwd, making it look deleted.
Accepted the finding. Git now anchors all invocations at the repository root,
ls-tree uses --full-tree, and diff/diff-tree use --no-relative. EXPECTED_LOG still
resolves from the original caller cwd. Added outside-cwd and nested-binary cases
under diff.relative=true: unreviewed stops, reviewed manifest/commit passes.
No old test changed. New run requires Sage CLEAR before execution.
R1 verification under sage-3999 CLEAR: test-run-4.txt records PASS 29 checks
and KILLED all five required mutants. Syntax and diff whitespace checks passed.
A second bounded run used the new suite against cceea407e's script copied under
TMPDIR: r1-regression-red.txt records the outside-cwd unreviewed binary reaching
NO_BINARY/PUSH_READY (actual exit 0, expected 1). Thus the new regression detects
the reviewed bug, while the revised guard refuses it. No code changed between
the green run and this old-candidate reproduction. All runs used timeout -k 10.
Holding claimant queue writes per sage-3999 until Boyd finishes row 309's record.
Last acknowledged row 327 state is in-progress (bradford-0010, revision 3868).
## Dewey landing review B1 (dewey-0956) — changes
Read the invited review body at /mnt/storage/scratch/tmp/dew327vWXloCT/body.md.
B1 identifies a brief-level gap: numstat follows candidate/host git attributes,
so *.bin diff makes a NUL-containing blob disappear from the binary-only set.
The production script indeed filters numstat before reading any blob, consistent
with that data flow. Proposed correction: enumerate every changed numstat path,
skip absent/non-blob entries at SHA, classify binary when numstat says binary OR
committed blob has NUL among first 8000 bytes. Read with cat-file, never worktree.
Test committed .gitattributes, info/attributes, and core.attributesFile overrides
in scratch; reject with no row, allow exact reviewed bytes; add NUL-scan mutant.
Sage owns the brief amendment and next CLEAR/queue sequencing.
N1 acknowledged: candidate-equality check is defense in depth; invalid receipt
cannot pass queue replay, so the corrupt-queue case does not isolate that check.
N2/N3 recorded as described in review, without optional secrets/reader changes.
N4 planned hardening: refuse unconfirmed durable tail notes from rows() with
exit 2, with a real scratch witness-prefix case rather than a test-only reader.
No test run or queue write started for B1/N4 before Sage CLEAR.
Sage sage-4013/4015 authorizes B1 and N4 within the brief; amendment committed on
refactor at 9042754c4 (read with git show, no branch change). Fix and tests written
before requesting CLEAR as directed. Tests cover all three attribute sources,
approved manifest success under each override, exact 7999/8000 offset boundary,
and a real prefix-witness rollback to yield an unconfirmed approval tail.
Added only the requested sixth mutant, skip-nul-scan; the original five remain.
No new production configuration knobs, no secrets-diff change, no queue writes.
Will demonstrate red against the prior candidate using the new tests, then green
against revised code, under the approved slot. Full landing gate remains Sage's.
After Dewey's round-2 CHANGES record (comment 31522, rev3876), Sage sage-4016
released only the claimant return to in-progress. Acknowledged:
`ok bradford-0017 rev 3877 row 327 in-review→in-progress`.
No other queue write before the next in-review candidate move.
Test slot remains pending Sage CLEAR after Gyro's build.
## Amendment 1 verification (sage-4017 CLEAR)
b1-regression-red.txt: new tests against 704910ca3 reproduce attributes-hidden
asset.bin reaching NO_BINARY/PUSH_READY with exit0 instead of exit1.
n4-regression-red.txt: revised code with only the N4 check removed lets the real
scratch unconfirmed approval tail reach BINARY_REVIEWED/PUSH_READY, exit0 rather
than exit2. These are expected negative controls; neither changed committed code.
Final full new-suite run is green: test-run-5.txt records PASS 38 checks and
KILLED skip-hash, accept-changes, earlier-round, working-tree, no-row, skip-nul-scan.
All runs used timeout -k 10 240 with the same scratch TMPDIR; no old tests were
changed or run. bash -n both scripts and git diff --check also passed. No source
changes followed this green run. Sage's full landing gate is still separate.
Scope in the final delta: classify all changed present blobs using numstat OR
first-8000-byte NUL; fail closed on queue unconfirmed-tail notes; regression cases
and requested sixth mutant; TOOLS entry and this plain-text packet. B1's brief
amendment is Sage's 9042754c4; this branch does not edit the brief or queue files.
@@ -0,0 +1,27 @@
node:internal/modules/run_main:107
triggerUncaughtException(
^
AssertionError [ERR_ASSERTION]: LOG_OK
FF_OK
NO_BINARY
SECRETS_CLEAN
NO_ATTRIBUTION
PUSH_READY ee394f31d1e52751716e2413049f41b2f3072e65..76acc948149e718091fcd3f3807257e752a6616e
0 !== 1
at Object.check (file:///home/jwoltje/.t3/worktrees/mosaic-stack/bradford-row327/[eval1]:44:12)
at file:///home/jwoltje/.t3/worktrees/mosaic-stack/bradford-row327/[eval1]:100:7
at process.processTicksAndRejections (node:internal/process/task_queues:104:5) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: 0,
expected: 1,
operator: 'strictEqual',
diff: 'simple'
}
Node.js v26.8.1
@@ -0,0 +1,27 @@
node:internal/modules/run_main:107
triggerUncaughtException(
^
AssertionError [ERR_ASSERTION]: LOG_OK
FF_OK
BINARY_REVIEWED 1
SECRETS_CLEAN
NO_ATTRIBUTION
PUSH_READY c1a8a1e9b8c3988874a8f7a35afab7c06aea94a5..325cd3671a7bf70b9a3aee60f4446bc93594a12a
0 !== 2
at Object.check (file:///home/jwoltje/.t3/worktrees/mosaic-stack/bradford-row327/[eval1]:44:12)
at file:///home/jwoltje/.t3/worktrees/mosaic-stack/bradford-row327/[eval1]:121:7
at process.processTicksAndRejections (node:internal/process/task_queues:104:5) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: 0,
expected: 2,
operator: 'strictEqual',
diff: 'simple'
}
Node.js v26.8.1
@@ -0,0 +1,27 @@
node:internal/modules/run_main:107
triggerUncaughtException(
^
AssertionError [ERR_ASSERTION]: LOG_OK
FF_OK
NO_BINARY
SECRETS_CLEAN
NO_ATTRIBUTION
PUSH_READY 896bdf0ef56596c67d2dc427275743c46026e832..ad9f9c86112fadafef4d4854f46bd9994fe2fe5d
0 !== 1
at Object.check (file:///home/jwoltje/.t3/worktrees/mosaic-stack/bradford-row327/[eval1]:44:12)
at file:///home/jwoltje/.t3/worktrees/mosaic-stack/bradford-row327/[eval1]:130:7
at process.processTicksAndRejections (node:internal/process/task_queues:104:5) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: 0,
expected: 1,
operator: 'strictEqual',
diff: 'simple'
}
Node.js v26.8.1
@@ -0,0 +1,21 @@
node:internal/modules/run_main:107
triggerUncaughtException(
^
AssertionError [ERR_ASSERTION]: queue: candidate manifest path must be a repo-relative path: "space tab\tasset.bin"
2 !== 1
at Object.round (file:///home/jwoltje/.t3/worktrees/mosaic-stack/bradford-row327/[eval1]:61:12)
at file:///home/jwoltje/.t3/worktrees/mosaic-stack/bradford-row327/[eval1]:116:7
at process.processTicksAndRejections (node:internal/process/task_queues:104:5) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: 2,
expected: 1,
operator: 'strictEqual',
diff: 'simple'
}
Node.js v26.8.1
@@ -0,0 +1,6 @@
PASS push-check 22 checks
KILLED skip-hash
KILLED accept-changes
KILLED earlier-round
KILLED working-tree
KILLED no-row
@@ -0,0 +1,6 @@
PASS push-check 24 checks
KILLED skip-hash
KILLED accept-changes
KILLED earlier-round
KILLED working-tree
KILLED no-row
@@ -0,0 +1,6 @@
PASS push-check 29 checks
KILLED skip-hash
KILLED accept-changes
KILLED earlier-round
KILLED working-tree
KILLED no-row
@@ -0,0 +1,7 @@
PASS push-check 38 checks
KILLED skip-hash
KILLED accept-changes
KILLED earlier-round
KILLED working-tree
KILLED no-row
KILLED skip-nul-scan
@@ -0,0 +1 @@
/mnt/storage/scratch/tmp/YPrPwR
+8
View File
@@ -0,0 +1,8 @@
# Bubba
Builder seat, Codex gpt-6.1-sol, started by Mos under Q245 (mos-1506). Owns row 288 (agent write notices and library revert, handed over from Honker).
No launcher in this directory. The seat runs as a T3 thread (thread 3d6672b5) and works in its own worktree. It has no
credentials of its own; it pushes only its own `bubba/*` branches through the repository credential helper (mos-0981),
never `refactor`, `main` or another seat's branch. Claude seats orchestrate and review (Q245). Registered by Sage on
2026-10-23 so the queue can name the seat as row owner (store.mjs isSeatDir).
@@ -0,0 +1,78 @@
# Row 208 (193d) second review: poe/row208 4a4bef6c1 (duckworth-0302)
Request: sage-3934 (sage-3931 request, c31492 on #1706). Candidate: 4a4bef6c1 on ec86f2c84, one
commit. Design: e2d161e2e:agents/morgana/work/queue-193/DESIGN.md section 8, sha256 dd7fcb41
(matches). Scope under mos-1542: the guards only. The question is whether a viewer can widen
authority.
Method: static. Git reads, plus the mutant summary Sage sent by path. No node, no tests.
## Verdict: APPROVE (static)
The diff has no bus or schema change. Every write is still decided by the broker as it stood at the
base. The webui adds routes and hints, and no authority.
- **chat-http.mjs.**
- share and unshare are POST only. They come after the same write fences as every other write:
send and named mode, the SSO session or auth header, Origin, and sec-fetch-site.
- The body must be exactly `{to}`: a string of 1-200 characters with no CR, LF or NUL. Extra keys
(owner, verb) refuse 400, and the test covers that.
- shares is GET only and takes no query.
- The reply must echo thread, to and op exactly. Anything else is 503 outcome-unknown.
- The new STATUS codes map share-not-covered to 403, share-exists to 409 and share-not-found to 404.
- `?shared=` accepts only `true`.
- **chat.mjs and the adapter.**
- The three verbs go over `createChannelCaller` to the webui adapter (index.mjs:12-14). The adapter
is an allowlist passthrough to the session's own `call`.
- A granted user's chat is rebound per session (serve.mjs:701), so share calls carry the user's
principal, never the owner's.
- The test fixture runs the real adapter and the real Broker.
- **The broker decides each new path, unchanged from the base.**
- thread.share, thread.unshare and thread.shares are in USER_VERBS and not in VIEWER_VERBS, so
userLevel gives collaborator. A viewer gets access-refused at #grantedThread (broker.mjs:950).
- Each of the three goes through `#thread`'s owner check (broker.mjs:909-913). A sharee gets
thread-not-owned and can't reshare.
- share-not-covered applies to a `user:` target (broker.mjs:6559).
- Only thread.messages takes `#threadRead`, so a share gives read access and nothing else.
- **The grant-hint predicate.**
- access.mjs `chatGrants` re-runs `lookup`, so the subject must still sign in as session.user with a
live grant. It then keeps only that user's grants in this business that cover at collaborator,
which is the same `covers` call as the broker's `#granted`.
- It returns only `{projects, instances}`. No ids, receipts, subjects or other users escape. Any
failure gives [].
- The client's `scopeWrites` requires the project and the instance to match within one grant
(`some(g => project && instance)`). It never pairs a project from one grant with an instance from
another, so mixed grants can't combine into a scope that no single grant has.
- `includes('*')` on the client is equivalent to covers' `[0] === '*'`, because checkScope
(business access.mjs:97-103) refuses `*` unless it is alone.
- The hint is never carried over: chatGrants starts at [] and is re-read from /api/config on each
user render. It is in /api/config only when `granted`.
- **No client-only hiding stands in for a broker refusal.** Each hidden control maps to a refusal:
| Hidden control | Who | Broker refusal |
| --- | --- | --- |
| composer and resume | viewer | thread.send/open: access-refused |
| composer and resume | sharee | thread.send/open: thread-not-owned |
| share form | viewer | access-refused |
| share form | sharee | thread-not-owned |
| create thread | out of scope | collaborator check at create |
| create project | user | project.create isn't in USER_VERBS |
| session controls, clear, cancel | user | session.* isn't in USER_VERBS (tester-only) |
Test :136 POSTs create, send, open and share from the page with the UI bypassed, and checks four
403 access-refused responses, unchanged table counts, and that each verb reached the bus. Test :19
adds unshare and the shares read over HTTP. Test :154 covers the sharee's thread-not-owned on send,
open and share.
- **Mutants, as reported (sage-3920 CLEAR, /mnt/storage/scratch/tmp/8UlAhS/poe-208-mutants.json, not
rerun).**
- There are four served-copy mutants: composer, open, share and create. Each one's anchor must exist,
or the fixture throws.
- Each mutant fails the UI-absence test with ERR_ASSERTION, and the bypass test passes under each
one, so the broker still refuses. That meets design section 8: "With each UI check removed, the
bus still refuses."
- The full webui suite passed 418/0 and plugins 119/0 (sage-3925), as reported.
## Notes
- N1 (outside guard scope). user.js:16 re-renders every 5 s while the tab is visible. Each render
re-reads /api/config, projects, threads and the shared list. This doesn't affect authority, but it
is steady load per open user tab.
@@ -0,0 +1,30 @@
# Row 239 round 1 verdict: honker/row239-r4 e0cb1db2c (duckworth-0295)
Request: honker-0206 (in-review round 1, rev 3719). Candidate: e0cb1db2c on refactor 546366f4a.
Method: git reads of local objects only. No node, no tests, no fetch, no queue reads.
## Verdict: APPROVE
- **The replay is exact.** `git range-diff 93694c518..5b8492b0f 546366f4a..0cae2dad5` gives four `=`
lines. None of the 16 manifest paths changed between 93694c518 and 546366f4a, and
`git diff 5b8492b0f 0cae2dad5` over those 16 paths is empty. My r3 read (REBASE-r3-5b8492b0f.md,
duckworth-0292) applies unchanged, and so do the 0165 design approval and the 0168 code approval with
C1 and C2 met.
- **e0cb1db2c is doc only.** It appends 26 lines to agents/honker/work/queue-239/BUILD.md. No test reads
that file.
- **Pins at e0cb1db2c.** All four 64-hex pins in channel-proof.test.mjs match the files' sha256:
human.mjs, human-cli.mjs, transport.mjs and webui bus.mjs (e3f52172…). Upstream changed library
src/index.mjs and business src/index.mjs, and no test or script pins them. The only hit in my grep
is a basename collision (`cli.mjs` matched `human-cli.mjs`).
- **The run, as Honker reported it (sage-3773 CLEAR, on 0cae2dad5. I didn't rerun it):**
- The six touched test files ran whole: 65/65, 0 skipped, no first-run red.
- Mutants M1-M3g: 9/9 killed as assertion failures in their named tests.
- M3f killed T6, which matches my static trace in 0292.
- Every restore matched by sha256, and the tree was clean afterwards.
Running on the replay rather than r3's base was right, because bus runtime.mjs imports library
src/index.mjs and the cli imports business src/index.mjs, and both changed upstream.
- **What remains is Sage's.** The full gate runs on the replay at landing (sage-3730). Sage's call.
## Notes
- None new. 0168 N1 (endsWith access-revoked) stands as recorded.
@@ -0,0 +1,74 @@
# Row 323 round 1 verdict: goldie/row323 6a0f0f4f8 (duckworth-0300)
Request: sage-3865 (early look at draft 571376c30) and sage-3870 (candidate 6a0f0f4f8, base dd6cb5872,
manifest 903ef0225f2f…cda79f). Brief: docs/plans/2026-10-23_case1-business-file-brief.md, section "Brief:
the Case 1 factory business file".
Method: static. Git reads of local objects only. No node, no tests, no fetch, no queue reads.
## Verdict: APPROVE (static), with one condition
- **The manifest matches.** MANIFEST.sha256 hashes to 903ef0225f2f…cda79f, and both of its blobs match at
6a0f0f4f8: the JSON 85e6b9ac… and the test aecd1c0f…. Neither file changed between 571376c30 and
6a0f0f4f8. The rest of that range is BUILD.md, logs, BUILD-LOG and SESSIONS. dd6cb5872 is an ancestor.
No existing test or source file changed.
- **Fields against the brief and the cited rulings:**
- id `mosaic-stack` (DESIGN section 7). `vars.bus.tester` true. There is no `library` key and no
library project.
- human `jason`. I can't read mos-1554 myself, so this rests on Sage's relay in sage-3823. BUILD.md is
explicit that this is the only literal value that comes from mos-1554.
- The project root /srv/mosaic/src/mosaic-stack is under the DESIGN home /srv/mosaic, and the value
comes from sage-3822. It passes the normalized-absolute check at business.mjs:274. A missing project
file there only gives a warning in validate (cli.mjs:73-77), so the path doesn't need to exist at
install.
- Roles are chief (chief-of-staff) and assistant. The assistant is needed because checkLaunch requires
`launch.instances` to be nonempty and to exclude the launcher (business.mjs:186-190). BUILD.md names
that check, as the brief asks. Both arbiters are chief, under sage-3820. launch.by is chief, which
F7 (case1-accept.sh:545-559) reads.
- Claude only. `plugins.harness` is [claude-code] and both roles use harness claude-code. There is no
pi.
- No tracker, no credentials, no library, and no credential value or reference anywhere in the file.
Q247 covers the tracker by omission.
- **The model, provider and effort have sources.**
- The model claude-opus-5-5 is Sage's ruling in sage-3822.
- The provider mapping anthropic/claude-opus-5-5 matches packages/business/README.md:185.
- `thinking: high` is one of the claude-code LEVELS (index.mjs:28) and matches the chief convention at
session-launch.test.mjs:83.
- With no `launch.limits`, there is no ceiling: limitHit (launch.mjs:137-155) checks only the limits
that are defined. That is a valid choice, and N1 records it.
- **The tests read the shipped bytes.**
- DOCUMENT is `REPO/docs/guides/case1-business.mosaic-stack.json`. Case 1 writes those exact bytes,
loads them through loadBusiness, checks the bytes didn't change, and then asserts every field.
- The validate, install, boot and refusal cases copy the document and change only the project root,
under sage-3820. Since an absent root only warns, the copy differs from the shipped file only in a
way validate doesn't refuse.
- The brief's three tests are all there:
- (1) The loader case.
- (2) The real case2-install.sh factory profile with `--business-file`, with only stack-copy stubbed.
- (3) `bus-tester-off`, the literal library key through the final validate (sage-3820), and the
library project through `profile-library-business`.
- The boot case also covers the 324 boundary: bootConfig gives no trackers, credentials.status() is
[], and the reader's credentials are [].
- **The tester-switch mutant is a real kill target.**
- mutant.py asserts that the needle `"bus.tester": true` occurs exactly once, flips only that value,
and restores in a finally block with a byte-equality check.
- The value is asserted at test :66. mutant.log shows `not ok 1`, `false !== true`, `# fail 1`, and the
restored sha256 85e6b9ac… equals the manifest.
- The flip would also make the install case at :95 fail, because the install refuses with
bus-tester-off.
- **The run, as Goldie reported it (sage-3869 CLEAR, 31-byte TMPDIRs, on 571376c30). I didn't rerun it.**
- The new file passed 7/7, the business suite 261/261, and the restored file 7/7 again.
- The mutant was killed.
- The earlier revoke-window red is the tools.sock length limit (session.mjs:278, dda2d07b4). It fails
the same way on the bare base dd6cb5872, so it isn't this row's.
## Condition
- C1. Under mos-1561, the cli suite counts only from Sage's full gate on 6a0f0f4f8. This approval
depends on that gate passing with no new failures.
## Notes
- N1 (doc). `launch` has no `limits`, so the business has no session ceiling. If Mos wants a cap on .53,
it's a later launch-settings edit and doesn't need a new file.
- N2 (doc). An install on .53 with no project file at /srv/mosaic/src/mosaic-stack still passes. It
warns "no project variables" (cli.mjs:76), which the run sheet could mention.
@@ -0,0 +1,56 @@
# Row 324 round 1 verdict: goldie/row324-r2 dbdfcfd52 (duckworth-0298)
Request: sage-3853 (#1820, comment 31469, round 1, rev 3768/3769). Candidate: dbdfcfd52 on refactor
3569bf54f, code commit 7e59ba8b3. Brief: docs/plans/2026-10-23_optional-tracker-brief.md.
Method: static. Git reads of local objects only. No node, no tests, no fetch, no queue reads.
## Verdict: APPROVE (static)
- **The manifest matches.** agents/goldie/work/queue-324/MANIFEST.sha256 hashes to 52874356…2b473d,
the digest Sage gave. All 8 listed blobs match the files at dbdfcfd52.
- **The loader change is narrow.**
- business.mjs:239 drops "tracker" from the required-key loop.
- business.mjs:296 is `Object.hasOwn(document, "tracker") ? checkTracker(document.tracker, file) : null`.
Omission gives `tracker: null`. A present key always goes through checkTracker.
- business.mjs:298 guards the role tracker comparison on `tracker &&`. An absent business tracker
doesn't waive the role pm tracker check, and the new test covers that.
- **A present null still refuses.** checkTracker (business.mjs:85) calls requireObject first, so a
present null, false, [] or a non-object refuses. {} and {sync:{}} refuse further in. The new
refusal test covers each of them.
- **Every business.tracker reader handles absence.** I read each hit in Goldie's reader-audit.txt and
the two outside it in scripts:
- bus runtime.mjs:131 registers `<business>/@sync` only under `b.tracker?.sync?.credentials`. An
absent tracker registers nothing.
- bus runtime.mjs:247 hashes `b.tracker?.sync ?? null`.
- broker.mjs:6242 reads `b.tracker?.sync?.bot`. Broker 3969 and 4497 read the role-level tracker
only.
- cli.mjs:85 and webui reads.mjs:166 use `tracker?.sync?.credentials ?? {}`. The
`b.tracker.sync.bot` inside the reads.mjs loop runs only when there are entries.
- cli config.mjs:58 trackerFor returns null on an absent tracker before the vars check. bootConfig
(config.mjs:138-139) sets config.trackers only for a non-null result.
- tasks/adapter.mjs loads only for configured trackers (process.mjs:136), and its settings refuse
with tracker-config at :25 before the :35 and :81 reads.
- instance-settings.mjs:127 reads `old.tracker?.sync`.
- stack-release.sh:2074 and :2120 use `b.tracker?.sync?.credentials`.
- launch-settings, resolve, instances.mjs and public/bus.js:785 read role-level trackers only.
conversation/controller exec.tracker is a different object.
- **Writers don't serialize the loader's null.** The setters build `next` from the raw file bytes
(organization.mjs:88-93), not from the loaded object, and validate before writing
(organization.mjs:201, :208). A business file without a tracker stays without one.
- **The brief's tests are there.**
- business/tests/optional-tracker.test.mjs has 5 tests: omission loads null, CLI validate with the
sync file gone, a present tracker preserved and frozen, the refusal set, and the role pm check.
- cli/tests/optional-tracker.test.mjs has 4 tests: no trackers from bootConfig with tracker vars
set, startBroker with no @sync credential, businessView with no credentials, and a present
tracker with a missing token refusing credential-file.
- The existing-tracker case runs through business.test.mjs unchanged apart from :98.
- **The one old-test edit is in bounds.** business.test.mjs:98 drops "tracker" from the
required-key loop, as mos-1556 allows.
- **The run, as Goldie reported it (sage-3850 CLEAR, I didn't rerun it):** 5/5, 4/4 and
business.test 21/21. The presence mutant at business.mjs:296 is killed, and the restore matched
sha256 e76db421.
## Notes
- N1 (doc). The 'undefined' refusal case only exists in memory. A JSON file can't carry undefined,
so on disk it is the same as omission. The test is still correct.
+8
View File
@@ -0,0 +1,8 @@
# Fethry
Builder seat, Codex gpt-6.1-sol, started by Mos under Q245 (mos-1506). Owns row 225 (C2-10b, handed over from Morgana).
No launcher in this directory. The seat runs as a T3 thread (thread 14f80e3c) and works in its own worktree. It has no
credentials of its own; it pushes only its own `fethry/*` branches through the repository credential helper (mos-0981),
never `refactor`, `main` or another seat's branch. Claude seats orchestrate and review (Q245). Registered by Sage on
2026-10-23 so the queue can name the seat as row owner (store.mjs isSeatDir).
@@ -0,0 +1,7 @@
{
"base": "01983cd3f",
"test": "packages/cli/tests/stack-release.test.mjs",
"base_is_byte_exact_prefix": true,
"old_assertions_changed": 0,
"old_console_refusal_text_unchanged": true
}
@@ -0,0 +1,48 @@
# Target config validation for every key implementation plan
Goal: #1797, mos-1353, brief f0e3dcdf4:docs/plans/2026-10-22_config-checks-any-key-brief.md. Base01983cd3f, branchgander/config-checks-any-key. Reviewer Duckworth. Queue number pending Sage; packet moves to queue-N when assigned. No Node, test or push before Sage gap/CLEAR. Rows270/271/203 land first; rebase under a new branch name before the gate.
Architecture: config_checks classifies missing/parseable/unreadable config independently of console presence. With a loader, every existing parseable config goes through the target's own validate. Missing config passes. Malformed JSON refuses. With no loader, allow only the oldest four top-level keys: configVersion, environment, dataRoot, execution. Evidence: c3d29e796:scripts/mosaic-config.mjs:114, the first loader commit, rejectUnknownKeys; row200 fixture's LOADER_OLD has the same list. A missing loader plus a later key refuses and names that key, without inventing validation support. The legacy public refusal code config-console-key and existing console-specific message stay byte-identical; new non-console refusals name the loader's first diagnostic and preserve restore-config-backup instruction. The target loader's resolved stdout is discarded. Its first stderr diagnostic is reported and may echo an invalid value.
Files: scripts/stack-release.sh config_checks/comment only; packages/cli/tests/stack-release.test.mjs appended regression coverage only; docs/TOOLS.md broadens the current console-only release-check description. Existing row200 tests and assertions stay unchanged. No fixture-module edit, flags, pointers, migration, schema, data, live unit or host change.
Tests to write before implementation, unrun until CLEAR:
- A target loader rejecting a non-console key refuses activate and rollback before any unit stop/start, pointer/unit/store mutation; one refused log entry; --plan preserves state and lists refusal. Reuse refused() and planOnly(). Use execution, already known to the current loader, to prove console-free dispatch before row270 integration; add compactionReadBytes/compactionStreams cases on final post270 base if needed.
- An accepting target loader is actually called with validate and the selected MOSAIC_CONFIG, succeeds activate/rollback without console, and resolved stdout is not leaked.
- Missing-loader target permits oldest-key config but rejects a later key with backup instruction. A stand-in rejecting the existing execution key exercises the generic target-validation branch; missing-loader later-key test may use console until final post270 base supplies non-console new keys.
- Missing file passes the isolated real config_checks function; malformed JSON refuses there, since load_config otherwise exits before this function. Tests extract only that function and provide copies/path/check_refuse stand-ins, never live state.
- Existing console-key row200 tests and malformed-load test run whole unchanged.
Mutants, each unique target, syntax preflight and byte-identical restore:
M1 restores the console-only skip, killed by the named non-console activate/rollback refusal test.
M2 ignores failed target validation, killed by the same refusal assertions.
M3 allows a missing-loader target with a later key, killed by the explicit missing-loader regression.
M4 treats malformed JSON as absence, killed by isolated parse guard test.
M5 skips the loader for an oldest-key config, killed by accepting-loader invocation witness.
Gate after static review and required rebases: intended RED/GREEN; touched stack-release.test.mjs whole, CLI suite whole and every scripts/test-*.sh whole; M1-M5 with fresh passing controls, no timeout counted as kill, restored bytes/status before next. TMPDIR mktemp-d /mnt/storage/scratch/tmp/gXXX; pipefail/tee and busy check before each start. Node timeout-k10 uses at least3x measured duration plus margin; stack-release prior full receipt around584s implies at least1871s, to be recorded from actual receipts before CLEAR. Shell3x table retained with receipts. No test ran and no behavior passes claimed.
Review focus: parser races after load_config; target stderr naming only the refused key, stdout never persisted; current versus target loader selection; unknown key with no console; missing loader compatibility set from immutable history; upcoming row270 loader-list fixture drift. Final integration audits every test dependency and hash pin against the named base. Session registration remains Sage's.
Implementation ready, unrun. Four appended tests cover full activate/rollback refusal and plan; actual accepting validate witness/configpath and stdout nonleak; oldest-only missing loader with both compaction keys; missing/invalid JSON isolated realfunction. Stand-in loaders are ESM, matching .mjs. Every old test byte is preserved as a prefix. Existing console refusal text including missing-loader diagnostic is unchanged. Missing-loader compatibility is top-level key compatibility only; current load_config still validates the whole config before normal release operations. Three-path manifest, no fixture-module changes. Static target uniqueness M1-M5 passes. No Node parse, Bash execution or behavior run. Exact full compaction activate/rollback cases must be added against post270 loader, before final gate.
Execution state:
- [x] Read brief, config_checks and row200 assertions.
- [x] Pin oldest key set from immutable loader history.
- [x] Write regression tests, implement bounded scope, prepare unique mutants.
- [ ] Duckworth static review.
- [ ] Move packet to queue-N on assignment, rebase after270/271/203 and add full compaction-key cases.
- [ ] On CLEAR run intendedRED/GREEN, touched whole file, CLI whole, M1-M5, ten shells; commit/push records only when authorized.
## Duckworth0229 static approval, gate conditions
Source0585b3213, packet e7371025f, manifestd6226d28 approved by static read, note a5a717391:agents/duckworth/work/row1797/ROUND1-0585b3213.md. No runtime proof yet.
C1: after270/271/203 land, rebase under a new branch name and open a new static round. Add exact compactionReadBytes and compactionStreams full activate/rollback refusals. The existing LOADER_OLD uses the current loader plus concat after270, so it is not a pre270 witness; the new test requires its own pre270 stand-in. Reviewer checks the integrated manifest/test before CLEAR. N3 joins that delta: compactionStreams fixture value1024, matching the real type, instead of ['messages'].
C2: every existing B/C1/C release now validates its copied real loader, including external/upgrade suites. Any old CLI red is a change-related suspect and goes to Mos/Sage under mos-1272; no automatic placement as an unrelated fixture.
N1 console plus another refused key retains the old console text by design. N2 missing-loader wording is retained pending final integration review. N4 corrected above: only resolved stdout is suppressed; first stderr may echo a value, so no blanket secrecy claim. No runtime/Node/queue/push authorization is inferred from static approval.
@@ -0,0 +1,3 @@
eea06caad07c746d194f793603052b210e437b7184009f8b1617c88db49a5517 docs/TOOLS.md
a35c49c5703e02f35073450e4a98e1b90cffcda581490f97a70cbdc6d2afee59 packages/cli/tests/stack-release.test.mjs
f8fe1348796d40a096362fb0c6d5072c15ca68ff8fe10384a3eaa708eb92c150 scripts/stack-release.sh
@@ -0,0 +1,9 @@
{
"reviewer": "duckworth",
"verdict": "static approve, conditions C1-C2",
"message": "duckworth-0229",
"source": "0585b3213",
"manifest": "d6226d28",
"note": "a5a717391:agents/duckworth/work/row1797/ROUND1-0585b3213.md",
"next": "wait for row number and post270/271/203 base, new integration static round before gate"
}
@@ -0,0 +1,5 @@
{
"docs/TOOLS.md": "eea06caad07c746d194f793603052b210e437b7184009f8b1617c88db49a5517",
"packages/cli/tests/stack-release.test.mjs": "a35c49c5703e02f35073450e4a98e1b90cffcda581490f97a70cbdc6d2afee59",
"scripts/stack-release.sh": "f8fe1348796d40a096362fb0c6d5072c15ca68ff8fe10384a3eaa708eb92c150"
}
@@ -0,0 +1,14 @@
{
"issue": 1797,
"row": "pending Sage assignment",
"branch": "gander/config-checks-any-key",
"base": "01983cd3f",
"source": "0585b321309e4d8a199afb1a1024cf6091f56770",
"manifest": "d6226d281c778677a45e90993bbd9c985de89ba0f870d4a3ca12b6923a497e4a",
"runtime": "NOT RUN; no Node, tests or push authorized",
"after": [
270,
271,
203
]
}
@@ -0,0 +1,32 @@
[
{
"id": "M1",
"occurrences": 1,
"before": "f8fe1348796d40a096362fb0c6d5072c15ca68ff8fe10384a3eaa708eb92c150",
"after": "804a86442527f2728f633f485eaeca02552df66a34350eac5101127046415188"
},
{
"id": "M2",
"occurrences": 1,
"before": "f8fe1348796d40a096362fb0c6d5072c15ca68ff8fe10384a3eaa708eb92c150",
"after": "1c2acb6397e29ab898d8a89bc5bc691a294be749ca7d7f7897c83ec1b3e9f9ef"
},
{
"id": "M3",
"occurrences": 1,
"before": "f8fe1348796d40a096362fb0c6d5072c15ca68ff8fe10384a3eaa708eb92c150",
"after": "954c9a9735904e1c566d844001b2e85c13cd16eb16e7b4b91b752974bb6dc754"
},
{
"id": "M4",
"occurrences": 1,
"before": "f8fe1348796d40a096362fb0c6d5072c15ca68ff8fe10384a3eaa708eb92c150",
"after": "953d91bf28073b11e4bc5a6da516a0db1b8dfff892083cd3e6fcebe9c47b6bbf"
},
{
"id": "M5",
"occurrences": 1,
"before": "f8fe1348796d40a096362fb0c6d5072c15ca68ff8fe10384a3eaa708eb92c150",
"after": "310c32b16f0fc554d5a7ffeeb0742ea7dd9fc84e1ddafabb25d7ca3f449865ef"
}
]
@@ -0,0 +1,37 @@
[
{
"id": "M1",
"file": "scripts/stack-release.sh",
"old": " [ \"$key\" != 1 ] || return 0\n if [ \"$key\" != 0 ]; then",
"new": " [ \"$key\" != 1 ] || return 0\n [ \"$extra\" = '\"console\"' ] || return 0\n if [ \"$key\" != 0 ]; then",
"killer": "config-any-key: a non-console target refusal"
},
{
"id": "M2",
"file": "scripts/stack-release.sh",
"old": "elif out=\"$(MOSAIC_CONFIG=\"$cfg\" node \"$loader\" validate 2>&1 >/dev/null)\"; then return 0",
"new": "elif out=\"$(MOSAIC_CONFIG=\"$cfg\" node \"$loader\" validate 2>&1 >/dev/null)\" || true; then return 0",
"killer": "config-any-key: a non-console target refusal"
},
{
"id": "M3",
"file": "scripts/stack-release.sh",
"old": " [ -n \"$extra\" ] || return 0",
"new": " return 0 # drop missing-loader later-key refusal",
"killer": "config-any-key: missing-loader copies"
},
{
"id": "M4",
"file": "scripts/stack-release.sh",
"old": " if [ \"$key\" != 0 ]; then\n check_refuse config-console-key",
"new": " if [ \"$key\" = 99 ]; then\n check_refuse config-console-key",
"killer": "config-any-key: missing config passes but malformed JSON refuses"
},
{
"id": "M5",
"file": "scripts/stack-release.sh",
"old": " if [ ! -f \"$loader\" ]; then",
"new": " [ -n \"$extra\" ] || return 0\n if [ ! -f \"$loader\" ]; then",
"killer": "config-any-key: accepting loaders run validate"
}
]
@@ -0,0 +1,24 @@
{
"base": "48e450ce8",
"removed_assertions": [
" assert.deepEqual([...new Set(cmds)].sort(), [CLI, PRECHECK, CLAUDE, NODE].sort());"
],
"authority": "mos-1326",
"all_other_original_assertion_lines_preserved": true,
"command_level_talk_and_precheck_checks_unchanged": true,
"mos_1350": {
"authority": "mos-1350",
"file": "packages/cli/tests/case1-accept.test.mjs",
"shape": "b: same fixture host and mode healthy baseline before fault",
"old_timing_assertions": [
" if(fault==='inner')assert.ok(seconds<4,`${mode}: ${seconds}s includes functional checks`);",
" assert.ok(seconds>=4&&seconds<6,`${mode}: ${seconds}s; 2s functional-check slack`);"
],
"new_timing_assertions": [
" if(fault==='inner')assert.ok(probeSeconds>=1.25&&probeSeconds<2.75,`${mode}: probe ${probeSeconds}s after baseline ${baselineSeconds}s`);",
" assert.ok(probeSeconds>=3.25&&probeSeconds<4.75,`${mode}: probe ${probeSeconds}s after baseline ${baselineSeconds}s`);"
],
"reason_residual_cleanup_assertions_unchanged": true,
"mutant_timing_dependencies": "Static inspection of row276 M1-M17 and historical row253 M1-M40: no target or named killer refers to either changed timing assertion. Row276 M11 names overflow, whose assertions and baseline-free behavior are unchanged."
}
}
+148
View File
@@ -0,0 +1,148 @@
# Row276 build, gate pending
Base48e450ce8, branchgander/row276. Claim rev3255, gander-276-start-1. Brief b0d0b7f76; Mos1324 starts build, Sage2893 approves plan and authorizes local commits. Duckworth0182 B1 corrected the exit-status plan before product code;0183 approves that correction with C1-C4. PLAN.md records decisions. No runtime/Node check has run.
All5legacy calls use legacy_run: talk320/330 with unchanged conversation300 and concurrent F5 scan; precheck200/210 preserves its existing180s Claude probe; versions5/7; PM list10/12. Both scripts keep the exact old supervisor payload. Case2 code changes only its setuid-member header. Header N2 names inner-cleanup refusal for a uid-changing unkillable member. Root capture/tools N1 counterparts are M10/M11.
Supervisor0 is the sole pass authority. The dropped-uid builtin-only Node runner exits its original command status. Supervisor87 stays87; only its ffail display number may come from the strict final newline-terminated decimal1..255 trailer. A0trailer under87 gives display87, never exited0. Missing/bad256/999/leading-zero/sign/no-newline records also give87 and the fixed reason. Private display files live in root's mktemp WORK directory, explicitly0700, never in user data. Root reads at most65536stderr bytes using a validated system tail. NODE is invoked only after uid drop; ownership fence means non-user-writable, not non-executable by the user. Test stand-ins retain0755.
F3/F4 retain the old displayed code and failure strings. F4's stripped stderr follows its stdout when merged; its precheck contract is whole-check success/failure plus last diagnostic, and no existing test asserts interleaving. F6/F7/F10 now require supervisor0 before interpreting stdout, intentionally tightening their old pipeline behavior. Existing content/refusal assertions remain. The one existing wiring assertion now requires five supervised Bash launcher calls plus the two isolated metadata/probe calls; direct talk/precheck argv assertions remain unchanged.
Tests are written before source, but intentionally unrun because Sage holds all execution until CLEAR. New tests cover each call under exec/hop, exact inner reasons/no-leftovers, stalled outer reason with explicit R3 fixture cleanup, streams, child statuses1/7/81/137, forged trailers before/after actual status, grammar edge refusals, bounded stderr and stdout that looks successful under supervisor failure. Existing case1/case2 whole files are the gate scope because they import the shared fake module. No actual sudo, host or live service is used. Static SUPERVISOR-SHAS and UNIQUENESS verify bytes/targets. Bash-n on source and15variants passes; Node parse/behavior remains pending.
Gate request: intended RED/GREEN against old script; case1-accept.test.mjs andcase2-unit.test.mjs whole under timeout-k10 900 initially; M1-M15 with passing fresh controls, exact restores and no timeout counted as kill; all10scripts/test-*.sh whole under SHELL-LIMITS.json, based on the longest retained row253/196/278 receipts (ceil3x+120). Busy check before every file. TMPDIR from mktemp-d /mnt/storage/scratch/tmp/gXXX. First unexpected failure/survivor/timeout stops for Sage/Mos. Report named skips,timing,full counts and cwd sweep. No passing claim until that gate.
Manifest excludes BUILD-LOG for a doc-only append if Sage needs it. DEFERRED's conditional closure lists F5,N1,N2 individually; R3 and532 remain. No new dependency installation, live state, credentials, ports or units touched. Push waits for a Sage gap. No queue writes after claim.
## mos-1326 wiring assertion authorization
packages/cli/tests/case1-accept.test.mjs:726. The old direct-command shape cannot express the required supervisor. All other old assertion lines are byte-identical, including command-level talk and precheck argv checks. ASSERTION-PRESERVATION.json records the exact static comparison. Structured sudo-argv.jsonl records every argv element before fake path translation. The replacement compares full arrays, never a substring. Its only variable text is the random message marker, separately pinned by the unchanged original talk assertion. Both supervisor bytes and literal bounds are pinned.
Old:
```js
assert.deepEqual([...new Set(cmds)].sort(), [CLI, PRECHECK, CLAUDE, NODE].sort());
```
New:
```js
assert.equal(asMosaic.length,7,'two metadata/probe calls and five legacy calls');
assert.deepEqual([...new Set(cmds)].sort(), ['/usr/bin/bash']);
// mos-1326: assert every argv element, not flattened/substr command detection.
const source=read(SCRIPT);
const supervisor=source.split("<<'MOSAIC_TESTER_SUPERVISOR'")[1].split('\n').slice(1).join('\n').split('\nMOSAIC_TESTER_SUPERVISOR')[0]+'\n';
assert.equal(createHash('sha256').update(supervisor).digest('hex'),'17b881513c35107e26f78c3722bc4a2927d206b197597be0bdbb2c8a8588bb4c');
const runner=/LEGACY_COMMAND_RUNNER='([\s\S]*?)'\nlegacy_display_rc/.exec(source)[1];
const f7=/F7_JS='([\s\S]*?)';\ncheck_f7/.exec(source)[1];
const raw=read(join(h.hc,'sudo-argv.jsonl')).trim().split('\n').map(line=>JSON.parse(line));
const legacy=raw.filter(a=>a[0]==='-u'&&a[1]==='mosaic'&&a[4].startsWith('PATH='));
const marker=legacy[0][20].split(':')[0];
const argv=(tag,inner,command)=>['-u','mosaic','-H','env',`PATH=/opt/mosaic-stack/node-${NODE_PIN}/bin:/usr/local/bin:/usr/bin:/bin`,
'/usr/bin/bash','-c',supervisor,'--',String(inner),'/usr/bin/setsid','/usr/bin/sleep',NODE,'-e',runner,'--',tag,...command];
assert.deepEqual(legacy,[
argv('talk',320,[CLI,'talk','chief',marker+': this is the Case 1 acceptance; reply with one short line.','--business','mosaic-stack','--tester','--wait','300']),
argv('precheck',200,[PRECHECK,'--business','mosaic-stack','--profile','factory']),
argv('claude-version',5,[CLAUDE,'--version']),
argv('pm-list',10,[NODE,'-e',f7,'--',`${HOME}/.config/mosaic-dev/businesses/mosaic-stack.json`,CLI,'mosaic-stack']),
argv('node-version',5,[NODE,'--version']),
]);
```
The existing target-uid config query already requires executing this same NODE before any F check, so a root-only executable mode that prevents the dropped uid running it fails preflight. No new root NODE execution is introduced.
## Static review0186 and upstream drift
Duckworth0186 statically approves164e16647/6887825e4, subject to green gate and log review. N1: M2 is the stand-in for the brief's diagnostic outer-bound mutant. It removes the shared legacy_run outer timer; its named killer runs only the precheck diagnostic in exec/hop with an independently guarded stalled supervisor, exact outer-timeout reason and bounded return. The fixed per-call production budget is also pinned by the inventory assertion. Keep the accepted M1-M15 scope. N2: M5 must die at the streams test because the wiring test reads runner text from source. N3: stderr disk growth retains the old talk.err risk; only root's tail read is bounded, with no new cap claim.
Sage2898 publication: original branch6887825e4 pushed after range check. Drift48e450ce8..94c33a43c on five manifest paths is only31added DEFERRED lines, inserted into its gaps section; no deletion or source/test drift. UPSTREAM-DRIFT.diff/json retain it. Final integration must keep those entries and row276's appended closure; no integration or manifest rewrite has happened yet. No tests or Node ran.
## sage-2964 final integration and gate grant
Rebased05af615fb onto0cbe2e9b3 as gander/row276-0cbe, clean, no conflict. Four source/test blobs identical to164e16647; DEFERRED preserves full new base plus closure. integration-0cbe/DRIFT.json records every upstream changed path and transitive import overlap. Helpers import Broker/Store, so schema3m and its migrations are checked on import; sandbox bind test reads new sandbox.mjs and copies runner files including broker. Neither case test nor case script uses schema step counts or COUNTED/restore guard lists; stack-release appears only in a comment. Ten shells run on this base. No test carried; claim3255 stands. Gate under sage-2964 uses this committed integration and regenerated manifest 4dab70cd251f5ae170856482bde923157ee667d342cd8ea412d242f707307303. Runtime pending.
## Run1 first new-test setup red, placed under sage-2964/mos-1272
New helper calls read(), absent from the original test file. Both old-script intendedRED and focusedGREEN hit ReferenceError before any product call; intendedRED is invalid, focusedGREEN is first unexpected new-test red. No old assertion ran. Fix is one alias near the existing test helpers, readFileSync(file,"utf8"), with no assertion or product change. Sourcec2b39b5d4. Run1 void, no results carry, run2 starts from top; RED harness now checks expected missing-block assertion. New manifestee573455115fa148981dcbd097058b7071d17baba18137945f4f2191ea5f1b11. Any subsequent unexpected red goes to Mos before change.
## Run2 stop, second unexpected red
Syntax2/0. Intended RED is the expected missing-block assertion with byte-identical restore. Focused GREEN0/1: an existing supervisor vanished-/proc diagnostic precedes the expected inner-timeout line, failing exact stderr at test789. No timeout, no whole files, mutants or shells. gander-0140 reports unplaced to Mos, Sage and Duckworth. Slot returned. No code or assertion change; await Mos before repair. run2/STOP.md and raw logs retain evidence. Sweep0 run leftovers,9 pre-existing infrastructure processes separately recorded.
## mos-1337 N5 repair for run2 base red
Mos places the red in row253 base. Sourcec72cdc02f swaps stderr redirection before the stat open in both scripts and changes nothing else in the supervisor. Both copies stay byte-identical; row276 heredoc pin is now34063098d7edb9067c11456165dc7535bc0e779d053c43599884d6b614528639. The exact inner-timeout stderr assertion stays unchanged. New deterministic test extracts stat_fields from each script, uses absent PID2147483647, and requires status3 plus empty stdout/stderr. M16 restores old ordering in both files, killed by that test; one-copy drift remains covered by unchanged case2-unit.test.mjs byte equality. Driver now accepts also_files, checks each unique target and restores/checks all bytes in finally. M1-M15 unchanged. DEFERRED names the separate cmdline read at case1:413; it remains out of scope. No runtime, node or rerun before review and CLEAR. Fresh whole gate on this candidate, M1-M16, both touched files and ten shells, nothing carried.
## Run3 stopped under sage-2988
HEAD804a854dc, manifest214aeb9e. Syntax2/0, valid intendedRED, focusedGREEN1/0. Whole case1 file46/3/0 in225.790s: wiring F7 extraction null at734, new precheck hop timing4.5403s at827, new version/PM extraction at848. Vanished-pid regression passed; no timeout. No case2, mutants or shells started. No source/assertion change after stop. gander-0146 sends unplaced to Mos/Sage/Duckworth, slot returned. run3 holds raw evidence/counts/sweep0;9 pre-existing infrastructure excluded. No results carried.
## mos-1345 run3 placement and stdout spool
Mos places the outer-bound red as a row276 product defect: the outer timer fires82, but a stalled setsid residual holds the caller stdout pipe until the fixture guard. legacy_run now mktemps a stdout spool under private WORK and opens it in root's wrapper before exec sudo. Both errors and output are regular files; the same EXIT trap unlinks them. Root snapshots stdout length with wc -c and copies exactly that size with validated TS_HEAD, only on0 or valid87. Other supervision refusals discard stdout. Published stdout precedes stripped stderr. No cap is added; the R3 residual may grow unlinked spool files and is named in DEFERRED. No cross-session kill. Supervisor heredoc and34063098 pin are unchanged.
Five callers, locations at804a854dc:497 talk redirects stdout to WORK/talk.out while F5 scans and reads only after wait;519 precheck merges the wrapper's stdout then stderr in command substitution for its last diagnostic;528 Claude version captures stdout and private stderr separately;550 PM list captures stdout and private stderr;593 Node version does the same. All four substitutions must get EOF without residual help. F3/F4 existing diagnostic strings stay, and the3s hop regression stays exact.
Row-owned extraction fixes:734 F7 delimiter removes the nonexistent semicolon;847 uses the shell '# The PM check' marker. Existing full argv and FAIL assertions remain exact. New real legacyCall bytes test checks no-terminal-newline stdout exactly on0 and87 in exec/hop, and suppresses a nonempty stalled stdout payload on82 with explicit residual cleanup. M17 restores inherited stdout, killed by the unchanged precheck hop under3s assertion. M1-M16 definitions unchanged. No repair runtime, Node or push before delta review/gap. Whole gate fresh, no carried results; any red goes to Mos.
## sage-3004 run4 limits, recorded before launch
Candidatef3a55ddf7, manifestd7466207. Fresh whole case1 then whole case2, M1-M17, ten shells; no carry and no push in slot. Both whole Node test files and each mutant killer use timeout -k 10 900 with outer930. Shell limits from unchanged SHELL-LIMITS.json (ceil3x maximum receipt +120):
- scripts/test-auth.sh: timeout -k 10 126; longest recorded 1.9081228229999543s, receipt 3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained).
- scripts/test-conductor.sh: timeout -k 10 145; longest recorded 8.057173820000026s, receipt 3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained).
- scripts/test-config.sh: timeout -k 10 130; longest recorded 3.1678915339999367s, receipt 3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained).
- scripts/test-discord.sh: timeout -k 10 147; longest recorded 8.776727847000002s, receipt 3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained).
- scripts/test-extension-package.sh: timeout -k 10 130; longest recorded 3.01285702399991s, receipt 3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained).
- scripts/test-foundation.sh: timeout -k 10 269; longest recorded 49.367s, receipt 3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained).
- scripts/test-land-work.sh: timeout -k 10 171; longest recorded 16.854s, receipt 3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained).
- scripts/test-queue.sh: timeout -k 10 226; longest recorded 35.155s, receipt 3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained).
- scripts/test-release.sh: timeout -k 10 157; longest recorded 12.168674453999964s, receipt 3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained).
- scripts/test-task.sh: timeout -k 10 231; longest recorded 36.783798266s, receipt 3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained).
Estimate12-18minutes. Any unexpected result follows sage-3004/mos-1272.
## Run4 old-test red and mos-1349 measurement
Whole case1:49/1/0,247.951s. Only old P10 inner timing fails exec4.19657134 against4s. All own new tests, wiring, exact bytes and outer<3 regression pass. Driver stops before case2/M1-M17/shells; no timeout. gander-0151 reports unplaced. Sage3007/Mos1349 measurements: five alternating804a/f3a scratch runs, no code edits,900s limits/freshTMPDIR, before3/2 after0/5. Test durations and only actually printed exec timers in run4/timing/NOTE.md. Passing per-mode numbers unavailable without editing; not invented. gander-0153 sends table to Mos/Sage/Duckworth for ruling before more work. Sweeps0 test leftovers; no push.
## mos-1350 old P10 timing correction, test-only
Choose shape(b): each inner/outer mode runs the same host once with no fault and checks baseline status0, before installing the fault or starting its cleanup guard. Subtract that fresh per-mode duration from the fault run. No constant functional cost is assumed. Overflow behavior is unchanged. Exact reason, no-observed, hop-residual and cleanup assertions remain byte-identical. Diagnostics print baseline/fault/net for each mode so the ten repeated runs can be checked.
Probe's configured timers are2s inner and4s outer. Use net windows[1.25,2.75) and[3.25,4.75), a0.75s margin around those timer costs and0.5s separation between inner top and outer floor. The baseline includes the healthy probe startup itself, so net values may sit slightly below the configured timer. Run4's failing whole costs4.0057..4.3695 and its healthy functional checks around2s show why the old whole-run heuristic is unsuitable; actual net values must be proved by10 isolated runs per test before run5. No timing proof is claimed yet. Bound widening on the whole run is not used.
ASSERTION-PRESERVATION.json records the two Mos-authorized old timing replacements. M1-M17 have no target or killer dependent on those lines; M11's old P10 overflow killer is unchanged. Historical row253 inner/outer mutants require fresh proof if used again, and none is carried or claimed in row276. Test-only commit changes no product script. No runtime or timing run until Sage returns the slot after271r3 and Duckworth approves.
## Duckworth0218 B1 and repeated-run condition
After every baseline status0, require pollFixtureGone(files) empty with exact baseline leaves no session assertion. Thus a baseline cannot supply outer-hop residual evidence. No pre-existing reason/residual/cleanup assertion changed. Case1 observed247.951s plus four estimated3s baselines gives259.951s; ceil3x+120=900s, so existing timeout-k10 900 still covers the extended whole file. Recheck after isolated timings before whole launch. Case2 unchanged900; shell3x table unchanged. Ten repetitions per fault must report min/max probeSeconds per mode. Any red or any value within0.25s of either accepted window edge stops for Mos, with no window tuning. Execution remains held for static approval and Sage CLEAR.
## sage-3023 isolated proof and pre-whole limits recheck
Twenty isolated test invocations pass,10 per fault,40 mode measurements. Net min/max inner-exec2.033094/2.171078, inner-hop2.054551/2.135443, outer-exec3.757506/3.960917, outer-hop3.736194/3.910606. Closest edge0.486194s, above0.25 stop threshold. Raw diagnostics in run5/proof; no window tuning. Max measured baseline2.119750332s; prior whole247.951 plus4x baseline gives256.430s; ceil3x+120=890s, existing900s retained. Case2/shell tables unchanged. Fresh whole stage follows with no results carried from any prior gate.
## Run5 GREEN, sage-3023
518pass/0fail/3named skips (93whole,425shell), proof20/0 with40mode timings,17/17 assertion kills,10passing controls,0timeouts/survivors,522.311s whole phase. Sweep0 with9pre-existing infrastructure excluded. N9 passes verbatim in RESULTS. Raw per-step/kill table in run5/SUMMARY.json. Manifest5 blobs unchanged; no result carried. Slot returned gander-0161. Review packet ready.
@@ -0,0 +1,7 @@
{
"docs/plans/DEFERRED.md": "9d40dfe1bc91f60cd9999b3224dcea5b44f46f79019678ec98c6987f815a5099",
"packages/cli/tests/case-sudo-fixture.mjs": "eac5c83f43056bdeb5781101307e17d4bc01f03e97e02f4f5e930436d7e43535",
"packages/cli/tests/case1-accept.test.mjs": "1e8af0656707d93dedade923bf60556022dc7121c43761876a5d7e02731c14aa",
"scripts/case1-accept.sh": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2",
"scripts/case2-unit.sh": "f615d09cd0998bd3a109faff9a16a78ac3f414686300fadc282a7773ec08491a"
}
@@ -0,0 +1,40 @@
{
"whole_files": [
"packages/cli/tests/case1-accept.test.mjs",
"packages/cli/tests/case2-unit.test.mjs"
],
"shells": [
"scripts/test-auth.sh",
"scripts/test-conductor.sh",
"scripts/test-config.sh",
"scripts/test-discord.sh",
"scripts/test-extension-package.sh",
"scripts/test-foundation.sh",
"scripts/test-land-work.sh",
"scripts/test-queue.sh",
"scripts/test-release.sh",
"scripts/test-task.sh"
],
"mutants": [
"M1",
"M2",
"M3",
"M4",
"M5",
"M6",
"M7",
"M8",
"M9",
"M10",
"M11",
"M12",
"M13",
"M14",
"M15",
"M16",
"M17"
],
"red_pattern": "row276 talk legacy inner timeout",
"node_seconds": 900,
"estimate_minutes": "12-18; no row276 measured runtime yet"
}
+9
View File
@@ -0,0 +1,9 @@
# Row276 manifest, unrun candidate
Source 164e166479378caf0702ab8b1eb3871b54219da3, base48e450ce8, branchgander/row276. Five-path manifest digest b0fdd91183d7e1911ed327e32c03b8de7f0efd4c86bd143fa0ad54390358ee63. BUILD-LOG excluded for append-only doc sweep. SOURCE.json pins committed blobs; no Node or behavior run. Duckworth reviews candidate and15mutants (changes.json), including mos-1326 exact wiring and preserved old assertions. Gate scope and stop rules in BUILD.md; next publication waits for Sage gap.
sage-2901 integration onto94c33a43c: source6b898fab465c200db14313a49c07c06b5dff285d, newbranchgander/row276-94c3; manifest2af7e8bafcbf0bb977a26ab1f57371b8453c7a6659dc7233a68f186ef7b5d5f2. Only DEFERRED changes among prior manifest entries. Four source/test blobs identical to164e16647. integration-94c3/BLOB-PROOF.json and range-diff.txt retain evidence. No execution.
Current gated candidate4e76bd6fc, branchgander/row276-0cbe, base0cbe2e9b3. Five-path manifest8f30c19a530789df8b22a77bed24250a5ccd94f9eb0a38534f512d3dd0e82189. Run5 GREEN under sage-3023; RESULTS.md and run5/SUMMARY.json are the final evidence. Historical unrun entries above are superseded. BUILD-LOG remains excluded; Sage appends its phase tail separately.
@@ -0,0 +1,5 @@
9d40dfe1bc91f60cd9999b3224dcea5b44f46f79019678ec98c6987f815a5099 docs/plans/DEFERRED.md
eac5c83f43056bdeb5781101307e17d4bc01f03e97e02f4f5e930436d7e43535 packages/cli/tests/case-sudo-fixture.mjs
1e8af0656707d93dedade923bf60556022dc7121c43761876a5d7e02731c14aa packages/cli/tests/case1-accept.test.mjs
89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2 scripts/case1-accept.sh
f615d09cd0998bd3a109faff9a16a78ac3f414686300fadc282a7773ec08491a scripts/case2-unit.sh
@@ -0,0 +1,9 @@
{
"base": "3c4c463da",
"source": "c72cdc02f",
"only_script_change": "single redirection order swap in each copy",
"existing_test_prefix_unchanged_except_authorized_pin": true,
"case2_test_unchanged": true,
"mutant": "M16 both-copy old-order restore",
"gate": "Pending static review and CLEAR; no runtime check"
}
@@ -0,0 +1,14 @@
[
{
"row": 253,
"count": 40,
"old_timing_targets": [],
"old_timing_killers": []
},
{
"row": 276,
"count": 17,
"old_timing_targets": [],
"old_timing_killers": []
}
]
+23
View File
@@ -0,0 +1,23 @@
# Supervised legacy Case calls implementation plan
Goal: finish row253 F5 on base48e450ce8, brief docs/plans/2026-10-22_case-sudo-legacy-followup.md (b0d0b7f76), row276/#1781. Reviewer Duckworth. No live host, units, config, ports or credentials. Tests and Node wait for Sage CLEAR; publication waits for a gap.
Architecture: keep TESTER_SUPERVISOR byte-identical in both scripts. A case1 legacy launcher uses the validated system Bash/setsid/sleep tools after sudo drops uid, with a separate trusted GNU-timeout outer bound and private notice channel. stdout stays streamed to the caller, stderr stays separate. No root import of copy code. All five original calls are covered; no exception remains.
Bounds (inner/outer seconds): talk320/330, with its unchanged --wait300 conversation and concurrent F5 scan; precheck200/210, preserving its existing timeout180 Claude probe; Claude version5/7; PM launches10/12; Node version5/7. Test extraction substitutes shorter bounds, with tests pinning the production values. Root stderr notice distinguishes outer-timeout from child137. Existing supervisor codes/reasons apply.
Exit-status compatibility (Duckworth0182 B1): the inline builtin-only Node runner exits with its command's own status. Supervisor0 is the only success authority. On87 (inner-command), root may parse a final stderr trailer only to save a display code for ffail text; legacy_run still returns87 even if that trailer says0. A missing/bad trailer gives display87 plus the fixed inner-command reason, never pass. All other supervisor reasons ignore the trailer. Root saves display-only status in a private WORK file so background talk/command substitutions can report original exit numbers without changing their pass condition. F3/F4 use that number only in existing failure text; no old assertion changes.
Trailer grammar: one last, newline-terminated line `MOSAIC_LEGACY_STATUS=<decimal>` with canonical decimal0..255 (0 or nonzero-leading up to3 digits). The runner writes it after command stderr and exits with the actual status. A child/escaped descendant may spoof display diagnostics, but can never change supervisor failure into success. Tests cover an earlier forged0 then actual7, an appended forged0 after a real7, malformed/missing records and statuses137/81.
Root bounds trailer processing to the last65536bytes through a root-validated system tail; oversized diagnostics are explicitly truncated. stdout remains streamed. stderr's retained tail is emitted without only the final valid trailer. On supervisor0 the trailer is ignored as status; on87 it can alter display only. F6/F7/F10 now check supervisor rc before considering stdout, while retaining their original successful output. They capture stderr privately; F4 merges emitted stdout and stripped stderr at its existing capture, so stderr is emitted after buffered capture. Talk keeps its two files. The NODE runner executes only after uid drop. Its existing F9 root-only path check means uid ownership/no group-or-other write, not owner-only execute; activation's executable mode remains required. Tests pin executable-as-user behavior.
Files: scripts/case1-accept.sh (launcher, five call sites, header); scripts/case2-unit.sh (setuid-member header note only); packages/cli/tests/case-sudo-fixture.mjs (fake-mode cases/seams); packages/cli/tests/case1-accept.test.mjs (per-call tests and extraction); docs/plans/DEFERRED.md (bounded closure when acceptance passes). Row276 packet keeps manifest, mutants and test scope. Existing assertions remain.
- [ ] Extend fake-only tests for all5 calls under exec and hop: healthy stdout/stderr and exit status, blocking descendants, PID/SID ownership, exact inner reason, no leftover; stalled supervisor outer reason and explicit fixture cleanup residual; status/trailer invalid refusal. Talk retains300s argv and separate diagnostics, background scan.
- [ ] Implement legacy launcher and five call sites; remove the remaining AS_USER array. Preserve all row253 supervisor bytes and root-only command fences.
- [ ] Add root-side capture/tools counterparts for case1 (row253 N1), header setuid-member inner-cleanup refusal (N2), and exact timeout-vs-child137 tests.
- [ ] Prepare mutants: drop talk supervision; drop outer bound on one diagnostic; bypass individual call, wrong/unchecked SID, trailer0 turns failed supervision into success, missing stream/display-code preservation; case1 tools/capture mutants. Unique target and byte-identical restore checks.
- [ ] Duckworth reads candidate/manifest/mutants. On Sage CLEAR, intended RED/GREEN, each touched test whole, all mutants with passing controls and no timeout counted as kill, ten whole shell suites under recorded3x bounds. Report counts,timing,skips,sweep; stop on unexpected red/survivor/timeout for ruling.
Review focus: instant command exit retains fail-closed inner-session residual532; hostile same-uid setsid-away or killed/stalled supervisor remains row253 R3, never claimed cleanup; a member changing uid yields inner-cleanup; no stdout is treated as authority; no outer-timeout parsed from caller stderr.
+56
View File
@@ -0,0 +1,56 @@
# Row276 run5: GREEN
Candidate4e76bd6fc, base0cbe2e9b3, manifest8f30c19a, grant sage-3023. No result from run1-run4 is carried. Isolated proof20/0,40 mode timings. Whole gate518/0/3. M1-M17 all killed at ERR_ASSERTION, with10 fresh passing controls, no timeout or survivor. Sweep0;9 pre-existing infrastructure excluded.
| File | Pass | Fail | Skip | Wall s |
|---|---:|---:|---:|---:|
|packages/cli/tests/case1-accept.test.mjs|50|0|0|237.717|
|packages/cli/tests/case2-unit.test.mjs|43|0|0|66.260|
|scripts/test-auth.sh|15|0|0|0.916|
|scripts/test-conductor.sh|17|0|0|6.428|
|scripts/test-config.sh|31|0|0|1.918|
|scripts/test-discord.sh|81|0|0|9.389|
|scripts/test-extension-package.sh|18|0|0|2.219|
|scripts/test-foundation.sh|44|0|0|44.611|
|scripts/test-land-work.sh|86|0|0|13.794|
|scripts/test-queue.sh|28|0|1|28.228|
|scripts/test-release.sh|14|0|0|3.121|
|scripts/test-task.sh|91|0|2|15.448|
Whole stage wall522.311s, including controls and mutations. Case1 237.717s, case2 66.260s, shells126.072s. Each Node test uses timeout-k10 900; shell command receipts show the unchanged mos-1275 table. No timeout fired.
| Mutant | Named killer | Base s | Changed s | Outcome |
|---|---|---:|---:|---|
|M1|row276 talk legacy inner timeout|1.868|2.269|assertion kill|
|M2|row276 precheck outer bound|2.369|4.724|assertion kill|
|M3|row276 talk legacy inner timeout|1.868|2.369|assertion kill|
|M4|row276 earlier forged trailer|0.665|0.415|assertion kill|
|M5|row276 legacy streams and display status|2.670|0.665|assertion kill|
|M6|row276 trailer grammar|2.168|0.665|assertion kill|
|M7|row276 trailer grammar|2.168|1.166|assertion kill|
|M8|row276 trailer grammar|2.168|1.918|assertion kill|
|M9|row276 legacy streams and display status|2.670|0.415|assertion kill|
|M10|row276 case1 capture and legacy tools|0.264|0.315|assertion kill|
|M11|row253 C4 acceptance query overflow|0.665|0.415|assertion kill|
|M12|row276 version and PM checks|0.214|0.214|assertion kill|
|M13|row276 version and PM checks|0.214|0.164|assertion kill|
|M14|row276 version and PM checks|0.214|0.214|assertion kill|
|M15|row276 stderr retention is bounded|0.465|0.465|assertion kill|
|M16|row276 vanished pid stat read|0.164|0.164|assertion kill|
|M17|row276 precheck outer bound|2.369|5.827|assertion kill|
M5 dies in streams/status assertion; M16 in vanished-PID empty-stderr assertion; M17 at the unchanged precheck hop<3 assertion (4.543492s). Driver finally restores every changed file byte-identically and compares tracked git status, including both files for M16. Final manifest5 paths match the gated commit.
Named skips, verbatim:
- scripts/test-queue.sh: `skip queue verify and render --check: this checkout (/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196) is not the queue's canonical root (/mnt/storage/src/mosaic-stack)`
- scripts/test-task.sh: `skip live provider cases (row 244: no provider call in the gate)`
- scripts/test-task.sh: `skip live provider cases (row 244: no provider call in the gate)`
N9 passed, no skip:
`ok 43 - inside a session's sandbox a bind below 1024 fails with EACCES, and a bind on a free high port succeeds`
Proof min/max seconds: inner exec2.033094..2.171078, hop2.054551..2.135443; outer exec3.757506..3.960917, hop3.736194..3.910606. Closest edge0.486194s. All baseline cleanup/reason/residual assertions pass. Raw results.json and logs in run5, proof/ and changes/. Summary computed from raw TAP/shell summaries, not guessed.
Slot returned in gander-0161. No live units, ports or host state changed. Publication and claimant review move use Sage3035 gap.
@@ -0,0 +1,132 @@
{
"authority": [
"mos-1275",
"sage-2659"
],
"scope": "Own Gander row196 receipt set documented for row278, plus the complete row278 run3 shell phase. Row253 old C4 results do not carry. Receipts choose timeouts only.",
"consulted_records": [
"ec1e7fad8:agents/gander/work/queue-196/evidence/suite-results-run1.json",
"ec1e7fad8:agents/gander/work/queue-196/evidence/suite-results.json",
"ec1e7fad8:agents/gander/work/queue-196/r2/mutants/results.json",
"ec1e7fad8:agents/gander/work/queue-196/r2/run2/base-results.json",
"ec1e7fad8:agents/gander/work/queue-196/r2/run2/killers/results.json",
"ec1e7fad8:agents/gander/work/queue-196/r3/gate/base-results.json",
"ec1e7fad8:agents/gander/work/queue-196/r3/gate/killers/results.json",
"ec1e7fad8:agents/gander/work/queue-196/r3/gate/sso-results.json",
"ec1e7fad8:agents/gander/work/queue-196/r4/gate/base-results.json",
"ec1e7fad8:agents/gander/work/queue-196/r4/gate/killers/results.json",
"ec1e7fad8:agents/gander/work/queue-196/r4/gate/sso-results.json",
"ec1e7fad8:agents/gander/work/queue-196/r4/gate/whole-results.json",
"ec1e7fad8:agents/gander/work/queue-196/r5/gate/whole-results.json",
"ec1e7fad8:agents/gander/work/queue-196/r5/resume/summary.json",
"ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json",
"ec1e7fad8:agents/gander/work/queue-196/r6/base-results.json",
"ec1e7fad8:agents/gander/work/queue-196/r6/first-attempt/results.json",
"ec1e7fad8:agents/gander/work/queue-196/r6/killers/results.json",
"ec1e7fad8:agents/gander/work/queue-196/r6/summary.json",
"ec1e7fad8:agents/gander/work/queue-196/r6/whole-results.json",
"385a7194c:agents/gander/work/queue-278/run3/whole/results.json"
],
"scripts": {
"scripts/test-auth.sh": {
"recorded_duration_seconds": 1.9081228229999543,
"receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)",
"limit_seconds": 126,
"derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom",
"script_sha256": "dd4720cb0cbecd2fc523a318f2222d21d257c8c5889996a3d69e522ee971a707",
"previous_maximum_seconds": 1.9081228229999543,
"previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r6/whole-results.json",
"row278_run3_seconds": 0.816
},
"scripts/test-conductor.sh": {
"recorded_duration_seconds": 8.057173820000026,
"receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)",
"limit_seconds": 145,
"derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom",
"script_sha256": "da84150467494a4c979759f400854411bd93a7efce981139757bf526d688a23b",
"previous_maximum_seconds": 8.057173820000026,
"previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r6/whole-results.json",
"row278_run3_seconds": 6.078
},
"scripts/test-config.sh": {
"recorded_duration_seconds": 3.1678915339999367,
"receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)",
"limit_seconds": 130,
"derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom",
"script_sha256": "3301c1fabf616bb961d62f6decd0a46dadb0f399b8ba7f3c2ca60023d2b24c78",
"previous_maximum_seconds": 3.1678915339999367,
"previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r6/whole-results.json",
"row278_run3_seconds": 1.868
},
"scripts/test-discord.sh": {
"recorded_duration_seconds": 8.776727847000002,
"receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)",
"limit_seconds": 147,
"derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom",
"script_sha256": "a5dcf783c51a5d5d184a357f91ebf9fa1c4e054f0cb84a3d1d7668f6156e025e",
"previous_maximum_seconds": 8.776727847000002,
"previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json",
"row278_run3_seconds": 7.431
},
"scripts/test-extension-package.sh": {
"recorded_duration_seconds": 3.01285702399991,
"receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)",
"limit_seconds": 130,
"derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom",
"script_sha256": "5d7b687f16fd1a9414b229501177d530ba3af4eadd3cac319b33f38fdba9bf99",
"previous_maximum_seconds": 3.01285702399991,
"previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json",
"row278_run3_seconds": 1.366
},
"scripts/test-foundation.sh": {
"recorded_duration_seconds": 49.367,
"receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)",
"limit_seconds": 269,
"derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom",
"script_sha256": "2e11038e7f784ec4f539eb768f63bab0fab9c9940334388a1fe2d47ab9e2b008",
"previous_maximum_seconds": 39.70872647900006,
"previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json",
"row278_run3_seconds": 39.901
},
"scripts/test-land-work.sh": {
"recorded_duration_seconds": 16.854,
"receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)",
"limit_seconds": 171,
"derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom",
"script_sha256": "c9d1d5c9b006d5c12e5f796a9828361059f8e0410846fc55c070c0148b15cef4",
"previous_maximum_seconds": 12.623263413000037,
"previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json",
"row278_run3_seconds": 11.338
},
"scripts/test-queue.sh": {
"recorded_duration_seconds": 35.155,
"receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)",
"limit_seconds": 226,
"derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom",
"script_sha256": "c270f181d1fa8b6d42ff4131c339beba786a8fd620bb66f8afdcec05e8b10868",
"previous_maximum_seconds": 23.443742031000088,
"previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json",
"row278_run3_seconds": 21.158
},
"scripts/test-release.sh": {
"recorded_duration_seconds": 12.168674453999964,
"receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)",
"limit_seconds": 157,
"derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom",
"script_sha256": "be706dff832257bd4781abeabd19faa4ac16edf9a4af0c96457e33cf3bb6deb3",
"previous_maximum_seconds": 12.168674453999964,
"previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json",
"row278_run3_seconds": 2.67
},
"scripts/test-task.sh": {
"recorded_duration_seconds": 36.783798266,
"receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)",
"limit_seconds": 231,
"derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom",
"script_sha256": "10c4abb70bf9b83e617089b06a5436cc7fa6b866a176458b22128c3a15163f94",
"previous_maximum_seconds": 36.783798266,
"previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json",
"row278_run3_seconds": 13.843
}
}
}
+21
View File
@@ -0,0 +1,21 @@
{
"source": "d7606c8c7b71368efcd7d73b2840c2d53677a6f9",
"base": "0cbe2e9b35e51fe06dedde69c022b46e040f98c0",
"branch": "gander/row276-0cbe",
"manifest": "8f30c19a530789df8b22a77bed24250a5ccd94f9eb0a38534f512d3dd0e82189",
"paths": {
"docs/plans/DEFERRED.md": "9d40dfe1bc91f60cd9999b3224dcea5b44f46f79019678ec98c6987f815a5099",
"packages/cli/tests/case-sudo-fixture.mjs": "eac5c83f43056bdeb5781101307e17d4bc01f03e97e02f4f5e930436d7e43535",
"packages/cli/tests/case1-accept.test.mjs": "1e8af0656707d93dedade923bf60556022dc7121c43761876a5d7e02731c14aa",
"scripts/case1-accept.sh": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2",
"scripts/case2-unit.sh": "f615d09cd0998bd3a109faff9a16a78ac3f414686300fadc282a7773ec08491a"
},
"mutants": 17,
"tests": "Run5 GREEN:93/0 whole,425/0 shells with3named skips,proof20/0,17assertion kills; see RESULTS.md",
"static_checks": [
"git diff --check",
"both supervisor copies byte-identical except authorized delta from prior",
"unique mutant targets"
],
"original_source": "164e166479378caf0702ab8b1eb3871b54219da3"
}
Loaded 100 of 2351 files, more files were not shown because too many files have changed in this diff. Show more