Compare commits

...
Author SHA1 Message Date
Steelbeak a5370b198e Row 287: record first-review documentation corrections 2026-10-24 10:42:08 -05:00
Steelbeak c2338ed588 Row 287: grant library collaborators with declared scopes 2026-10-24 10:37:41 -05:00
jason.woltje 18334d713b agents: register Codex seat Steelbeak to build row 287 (C2-21, #1792) from megavolt/row287's design (mos-1576, mos-1542); doc only 2026-10-24 09:46:14 -05:00
jason.woltje 963303403e queue: revs 3915-3945. Row 285 in-review (Magica 3915-3916), review request (3917-3918), Poe 3919 and Webby 3920 approvals, note and done (3921-3922). Row 286 r5 and r6 rounds (Rockerduck 3923-3925, 3937-3939), requests (3926-3927, 3940-3941), Boyd 3928/3942 and Dewey 3929/3943 approvals, note and done (3944-3945). Case2 brief re-pins for 225, 229, 284, 287-290 (3930-3936) 2026-10-24 09:41:11 -05:00
jason.woltje 72db194a43 docs: row 286 landing record and sage-4112 test-credential length line in the brief template (doc only) 2026-10-24 09:38:04 -05:00
jason.woltje 5d7801dc19 Row 286 r6: shorten two fixture values for secrets guard and record green reruns (sage-4112) 2026-10-24 09:20:22 -05:00
jason.woltje af988f6526 Row 286 r5: record green read-grant fixtures, whole suites and restored semantic mutants 2026-10-24 09:20:22 -05:00
jason.woltje 5999872f5a Row 286 r5: rebase onto row285 and seed chief read-grant fixtures under sage-4100 2026-10-24 09:20:22 -05:00
jason.woltje b0690ae8c0 Row 286 r4: record transplant onto landed row217, hunk comparisons and refreshed untested manifest 2026-10-24 09:20:22 -05:00
jason.woltje 18eca02ae9 Row 286 r3: fix new credential fixtures and record green CLEAR gate with killed mutants 2026-10-24 09:20:22 -05:00
jason.woltje a7aa4a4dab Row 286 r3: record successful canonical queue start and pre-CLEAR push receipt 2026-10-24 09:20:22 -05:00
jason.woltje fda535d97d Row 286 r3: transplant evidence, conflict resolution and static reader drift; untested pending CLEAR 2026-10-24 09:20:22 -05:00
jason.woltje 337ccee2dc Row 286 C2-03b r2: rebase onto 45dca69f6 (sage-3579). The range-diff is all =. Drift check of the paths the tests read is in BUILD.md. Unrun. 2026-10-24 09:20:21 -05:00
jason.woltje d06ada4b8b Row 286 C2-03b: BUILD.md notes for dewey-0869 and sage-2951 (fired-chief path :4308, marker-gated busy test, T9 scratch roles) 2026-10-24 09:20:21 -05:00
jason.woltje 105d26f1d9 Row 286 C2-03b: fold dewey-0869 and sage-2951 (marker-gated busy test, T9 scratch roles with a chief gitea credential, fired-chief path cited) 2026-10-24 09:20:21 -05:00
jason.woltje efd43df9d3 Row 286 C2-03b: cite sage-2947 (T7 real verbs, R1 in this row, 285/286 rebase rule) 2026-10-24 09:20:21 -05:00
jason.woltje f3030813ed Row 286 C2-03b: fold dewey-0864 (T7/T9 through grants.revoke and instance.fire, race fetch takes the sync guard, two-chief code, id -u shim note) 2026-10-24 09:20:21 -05:00
jason.woltje 918bbddfb0 Row 286: library.status shows the credential (webby-0151 R3); fired chief revokes its row as row 281 does; unrun 2026-10-24 09:20:21 -05:00
jason.woltje 17d1123ea1 Row 286 C2-03b: library push, per-seat credentials, the chief's fetch credential, askpass fd check (#1791, sage-2922/2925/2928, dewey-0860); unrun 2026-10-24 09:20:21 -05:00
jason.woltje a5e7785476 Row 286 C2-03b: sage-2928 rulings (sh helper, chief by roles definition, departure noted) 2026-10-24 09:20:21 -05:00
jason.woltje 727cc0aa0c Row 286 C2-03b: fold dewey-0860 (Q1 sh fd/inode check, Q2 chief by roles definition, N1-N3) 2026-10-24 09:20:21 -05:00
jason.woltje 7d0eb8d8d6 Row 286 C2-03b: sage-2925 Q4 ruling (humanCredential takes her login; editor.user is row 283's) 2026-10-24 09:20:21 -05:00
jason.woltje 0cada1be13 Row 286 C2-03b: sage-2922 files-owned extension; Q4 back to Sage (user is the bot fetch identity) 2026-10-24 09:20:21 -05:00
jason.woltje ad6a8d99ea Row 286 C2-03b: build plan and four scope questions (BUILD.md only) 2026-10-24 09:20:21 -05:00
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
1115 changed files with 89810 additions and 236 deletions

No files matched your search

+63
View File
@@ -5475,3 +5475,66 @@ remain; no live state, schema or bus policy change.
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.
- 2026-10-24 (rockerduck, row 286 / #1791, r3 before gate): transplanted Ludwig 45dca69f6..573fa0be0 onto b19ffa04f, preserved newer exports in sole index.mjs conflict; plain-text range-diff, patch IDs and reader/pin drift inventory in agents/rockerduck/work/queue-286/BUILD.md. UNTESTED by sage-4040: no setup or tests until CLEAR.
- 2026-10-24 (rockerduck, row 286 / #1791, r3 after sage-4054 CLEAR): own-worktree installs; library 140/140 and bus 963/963; M1 forced-refspec and M2 missing-inode-compare killed at semantic assertions, restored before final suites; all gate-output fixture searches zero. Four first-run reds only in new credential test; setup corrections and intermediate findings recorded in agents/rockerduck/work/queue-286/BUILD.md. No old test edited during gate; shell/CLI suites remain Sage landing gate.
- 2026-10-24 (rockerduck, row286 / #1791, r4 before gate, sage-4079): all 15 r3 commits transplanted to d0a6a87cd on new rockerduck/row286-r4. Three product overlaps auto-merged with row217 preserved; two append-log conflicts retain both histories. Range-diff and adjacent hunk evidence in agents/rockerduck/work/queue-286/BUILD.md. UNTESTED r4: Git-only until own-branch push, library/bus rerun waits for CLEAR after row285.
- 2026-10-24 (rockerduck, row286 / #1791, r5 before gate, sage-4097/4100): transplanted r4 onto 1f3d0350f; kept row285 library.write routing and chief write-grant refusal plus both append-log histories. Chief fixture refs added; T7/T9 mint setup now pins real refusal then seeds read-only fixture as explicitly ruled, keeping real revoke/fire assertions. Scratch role declaration mutation removed; range-diff/drift evidence recorded. No r5 tests yet; CLEAR starts after own-branch push.
- 2026-10-24 (rockerduck, row286 / #1791 r5 gate, sage-4097/4100): own-worktree installs; touched credential6/6 and sync24/24; whole library151/151 and bus981/981, zero fail/skip/cancel. P1 forced refspec, P2 missing inode compare and B285-M1 chief write-grant guard each killed on ERR_ASSERTION with green before/after controls and exact restoration hashes. All gate-output fixture searches zero. No normal red; source unchanged after pre-gate push045eec61a. Plain text evidence in agents/rockerduck/work/queue-286/BUILD.md and gate-r5; round2 candidate push follows.
- 2026-10-24 (rockerduck, row286 / #1791 r6, sage-4112 / #1825): corrected only two fixture constants to unique19-character values after the landing secrets check refused r5. No waiver/guard/assertion/product change. Added-package-lines secrets grep empty; touched6/6+24/24, library151/151, bus981/981 on fresh shortTMP timeout-k10; both exact new values absent from all four outputs. Mutants not rerun as directed. Plain evidence in agents/rockerduck/work/queue-286/BUILD.md and gate-r6; new manifest/push and round3 follow.
2026-10-24T14:37:02Z | Sage | Row 286 (#1791, C2-03b, Rockerduck on Codex, Boyd and Dewey) LANDED 5d7801dc1. Before: refactor at d55944edb. After: r6 candidate 75f6d56b1's 19 commits cherry-picked onto d55944edb. The one conflict (64f1ff950, 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 6 paths of my doc commit d55944edb. Reviews: round 2 (r5 ec8cb10c0) Boyd c31584 rev 3928, Dewey c31585 rev 3929; round 3 (r6) Boyd c31587 rev 3942, Dewey c31588 rev 3943. Sage posted the requests (c31583, c31586) because Rockerduck has no token. Gate GREEN on r5's tree e9c73ab96 at 14:14:11Z, then the push stopped at push-check STOP secrets. The guard came in today with #1825. Two added fixture constants (SLOT_TOKEN in library-credential.test.mjs, SEAT_TOKEN in sync.test.mjs) were 31 characters and matched its token-assignment pattern. sage-4112: no waiver (mos-1570) and no guard edit; r6 shortened only those two values to 19 characters, with reviewers confirming the delta. Gate GREEN again on 5d7801dc1 at 14:36:42Z with its own npm ci: 17 package suites, 4251 tests, 0 fail, 1 skip, which is the allowed FED R7 entry whose runner passed 1/1. All 12 scripts/test-*.sh rc 0. Neither old nor new fixture values appear in any of the 29 run outputs. Mutants: Rockerduck killed P1, P2 and B285-M1 (gitea-grant X-G1). For Dewey's N1 I also ran B285-M1 against library-credential.test.mjs; T7 and T9 failed (4/6) and passed after the restore. sage-4100 (chief grant seeded as fixture until C2-21) is recorded in the 285 entry. Overlap sweep found no in-review row on the 9 code paths. push-check FF_OK, NO_BINARY, SECRETS_CLEAN, NO_ATTRIBUTION. #1791 closed with c31591. No P19 task names row 286, so there is no Vikunja task to close. Brief template gains a sage-4112 line: test credentials stay under 24 characters. The live stack is not re-pinned.
- 2026-10-24 — steelbeak — #1792 / row 287 C2-21 before: library grants still fork; creative and chief grants refuse. Recovered Megavolt's binding design on 18334d713 and documented current-code delta in agents/steelbeak/work/queue-287/BUILD.md. No tests or implementation yet; Sage holds test clearance, scope delta reported in steelbeak-0001.
- 2026-10-24 — steelbeak — #1792 / row 287 C2-21 after: library grants use admin collaborator PUT, creative write/chief read levels, definition scopes, exact publish-wide reach and kind/level binding; business fence and chief install identity/publish updated; T7/T9 seeds replaced by real minting. Scratch Gitea F-A/F-B pass, F-C owner control negative recorded, F-D normal/force control positive. Verified bus 998, business 283, CLI 989 plus dedicated FED 1 (one expected CLI skip), Docker 2, install 27, all 12 shell gates, M1-M11 killed and restored; token audit hits0 and owned-process/container cleanup clean. Test fixture corrections approved under mos-1590/sage-4139; non-executable land-work launcher rc126 resolved by sage-4141 bash invocation. Evidence and manifest at agents/steelbeak/work/queue-287/; handing off to Boyd, then Dewey, with no live change or landing.
- 2026-10-24 — steelbeak — #1792 / row 287 first-review correction, boyd-0034: frozen candidate c2338ed58 approved, no blocking code findings. Product/test diff-check is clean; the full committed diff has trailing whitespace in preserved raw RED/mutant logs, correcting the earlier unqualified claim. Added verified old-test numstats in BUILD.md as a separate doc-only follow-up under lead137. Queue round1 opened at rev3963; automatic request failed at rev3964 for missing Steelbeak credential, reported to Sage without workaround. No product edits, tests or slot use.
+3
View File
@@ -6,3 +6,6 @@ No launcher in this directory. The seat runs as a T3 thread (thread 88b97f65) an
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 @@
# 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
+124
View File
@@ -0,0 +1,124 @@
# Row 217 (Case 2 C2-06): build notes
Brief: docs/plans/2026-10-20_case2-rows.md, section C2-06, at base 45dca69f6.
Builder: Launchpad until 2026-10-23 19:09Z. Then Mos moved coding to Codex seats (mos-1500, Q245) and
the row went to Beakley on beakley/row217.
## State at handoff
All code in this commit is UNTESTED. No node, no test and no mutant has run on it. No test file is written.
`packages/harness/src/runner.mjs` is not started.
Done, untested:
- `packages/library/src/limits.mjs` (new, pure): `REPLY_LIMITS`, `resolveReplyLimits(read)` gives
`{requireCitation, citationsPerReply, fallback, unreadable}`, `checkReplyLimits(value)` gives a clone or null.
An unreadable business file forces `requireCitation` true. A key falls back to its default when
`replyLimits` is not an object or the key holds an invalid value.
- `packages/library/src/guard.mjs` (new): `GUARD_CODES` in design 5.2's table order, `FIXED_TEXTS`,
`WEB_CITE_DEFINITIONS`, `REASON_MAX` (300), `GuardError`, `parseReply`, `checkReply`, `libraryReader`,
`lastCommits`, `guardReply`.
- `packages/library/src/index.mjs`: exports for both.
- `packages/business/src/business.mjs`: `replyLimits` is a known top key. The validated output doesn't carry it.
- `packages/business/src/organization.mjs`: the M11 fence `replyLimitsFence(old, document, actor)` compares
against `old.human`, refuses the tester and any `<definition>.<instance>` of `old.roles`, and is called for
both `document` and `written`. `setReplyLimits` and `readRaw` are exported.
- `packages/bus/src/broker.mjs`: the guard call, the page store, the check event, `library.limits.set`,
`library.status` gains `replyLimits`, `role.claim` gains `library`, `thread.messages` gains `check` and `last`.
- `packages/bus/src/server.mjs`, `client.mjs`: `BusError.reason` (sage-3599).
- `packages/bus/src/runtime.mjs`: guard deps and the `library.limits.set` dispatch.
- `packages/cli/src/limits.mjs`: `limits replies --file LIMITS`.
Left:
- `packages/harness/src/runner.mjs`: the C2-07 runner work (see "Runner plan" below).
- `packages/cli/README.md`: a line for `limits replies`.
- Every test in the brief and the rulings below, then the mutants.
- The rebases onto rows 283, 216 and 285, with the drift checks below.
- This file's gate results and the manifest.
## Rulings in force
sage-3595:
1. Supporting scope: a stub classify test now. Before in-review, rebase onto row 283's landing
(honker/row283-build bd2c1c4ea when ruled) and add two real-fixture tests: a supporting cite with
`as: "canon"` refuses `playground-cited-as-canon`, and the stored check result names `supporting`.
2. runtime.mjs is approved for the guard wiring and the one `library.limits.set` branch. List its hunks here,
name it in the manifest, and drift-check it after the 216 and 285 rebases.
3. The check result is an `action.allowed` event with `action: "message.checked"`. The events kind CHECK at
`packages/bus/src/migrations/3b.sql:9` has no `message.checked`, so a new kind would be a schema step.
The event and the message INSERT share one transaction: a mutant that splits them must fail.
4. readLibrary at the cited commit stands in for the C2-05a index. On the 216 rebase, compare 216's index
set with readLibrary's for the fixture and record the result here.
5. The retry is for a library business only. Tests: a JSON body between 32,768 characters and 64 KiB gets
the retry; outside a library business nothing changes.
6. Old `role.claim` pins stay as they are.
7. `render.mjs:6` and `render.test.mjs:58` belong to row 225. Leave them.
8. `thread.messages` rows that carry `check` get `last` per path cite: the file's last commit at the served
tip, one git call per distinct path per read. Test with a fixture file committed after the cite.
sage-3599: `BusError` gets an optional `reason`. Only the citation guard's refusals set it. The envelope
carries `reason` only when it is set. It is the guard's own text, never a quote, file text, url or a path
other than the cited one, at most 300 characters. Tests: a guard refusal reaches the runner with code and
reason; a refusal without a reason has an envelope byte-identical to today's, checked against an existing
pin; a mutant that drops the client.mjs pass-through fails.
sage-3602: store `file` per path cite from the same git log call as the trailer. Test with a cited commit
that didn't touch the file, so `file` differs from the cited commit, and `last` equals `file`.
## The check-result contract with row 225 (launchpad-0118, launchpad-0120, morgana-0200, sage-3596)
- Stored on the `message.checked` event: `{citations: [...]}` in body order.
- A path cite: `{scope, agent, file}`. `scope` is the classify scope. `agent` is the cite's file's last
commit's `Mosaic-Agent` trailer at the cited commit, or null. `file` is that commit's 40-hex id, or null.
- A url cite: `{scope: "web", agent: null}`.
- On `thread.messages`, each path cite gains `last`: the file's last commit at the served tip (40-hex or null).
The Console compares `last` with `file`.
- Rows without `check` are unchanged. No `changed` boolean. The webui passes rows through unchanged.
## Hunks outside the brief's file list
- `packages/bus/src/runtime.mjs`: imports `setReplyLimits`; the library deps gain `guard`, `replyLimits`
(organizationWriter `readRaw`, or `{readable: false}` with no organization), `last` and `GuardError`;
the organization dispatch gains `library.limits.set`.
- `packages/bus/src/server.mjs`: a `refusal(e, other)` helper above serve's doc comment builds every
BusError envelope and adds `reason` only when set. The synchronous request path accepts a Promise result
(the guard is async), with a 120 s timeout, and releases `own` when it settles.
- `packages/bus/src/client.mjs`: `new BusError(r.error, reason)` with `reason` a string cut at 300.
## Decisions and their tradeoffs
- The guard runs async outside the SQL transaction, then re-enters request() through `#guardPass`, so
message.send's insert and the check event stay one synchronous transaction.
- The guard runs before message.send's own checks, so a guard code can come before an authority code.
- The check event id is derived from the message id (a UUID-shaped sha256), so `thread.messages` finds it
through the unique index on `events.id`.
- With no organization configured, `replyLimits` reads as unreadable, so it fails closed.
- With more than one library project, the guard uses the first in the business file's order.
- A library business without guard deps refuses guarded sends with `project-not-configured`.
- The page store is per cap: 20 pages of 200 KB, kept only in a library business, dropped at session
delete or disconnect and at run end.
- The CLI `replies` verb reads the revision itself from `limits`.
- Guard reasons never carry a url or a quote (sage-3599).
## Runner plan (not built)
`role.claim`'s reply is discarded at `runner.mjs:462`; keep it and read `library === true`. In a library
business, at the reply site (`runner.mjs:582-587`):
- Fixed texts `(the session gave no answer)` and `(the turn failed)`; the reason stays in the run log.
A fixed text goes with no note, and `unslop.sent()` is not called, so the note waits.
- A body that parses as a JSON object with a string `text` gets `unslop.note()` appended to `text`, is
serialized again and is never clipped. A plain body keeps `clip(body) + unslop.note()`.
- On a refusal whose code is in `GUARD_CODES`, or `request-too-large` from the client, or the broker's
`invalid-request` from `string(a.body, 32768)` for a body over 32,768 characters (ruling 5; the runner
can tell it by the body length it sent), run one new turn in the same
session naming the code and `err.reason`, or the 64 KiB limit. Bracket it with usage like other turns.
- After the retry: a table code sends `(no answer passed the citation check)`, too large sends
`(the answer was too long to send)`. One retry per answer, whatever the cause.
- `runTurn`'s output buffer holds up to 4 * BODY_MAX characters, so a reply over 64 KiB can reach the send.
- Outside a library business nothing changes.
## Mutants planned
- The M11 writer check removed.
- `document.human` compared instead of `old.human`.
- The check event split from the insert transaction.
- The client.mjs reason pass-through dropped.
+323
View File
@@ -0,0 +1,323 @@
# Row 296: FED R7, scratch two-instance acceptance (#1802)
## Start
- Started 2026-10-23 18:53:27Z, on Sage's sage-3583 (mos-1489).
- Base: origin/refactor 45dca69f6 (pinned; local copy used, no fetch: fetch runs the credential node script, which
is held during Darkwing's re-pin window).
- Branch: quackerjack/row296 in worktree quackerjack-fed-r5-row296.
- Brief: docs/plans/2026-10-23_mvp-readiness-rows.md at 45dca69f6, section "Brief: FED R7, scratch two-instance
acceptance" (line 77).
- Constraints from Sage: scratch roots only (mktemp -d under /mnt/storage/scratch/tmp), never ~/.mosaic-dev or
the live bus. No push, claim, queue write, node or test run until CLEAR.
## What the brief asks for (summary)
- One script test under scripts/ with its harness in packages/*/tests/, as row 190's tests are.
- Two configs, two data roots, two Consoles, one fake OP. Consoles start outside agent ancestry in a transient
user unit. They never use the live stack's units, ports or sockets. The script removes its units on exit (trap).
- Test (design section 7 R7 gate): Jason's test identity, granted collaborator on one hub project, signs in,
makes a thread, sends to the granted instance, gets the reply in the thread, is refused on another project and
on board reads, is revoked, is refused again, and the run ends. The factory shows nothing of the hub.
- Mutants: grant project list widened to `*`; revocation claim end skipped.
- Gate: Filbert approves the manifest; the script test and every scripts/test-*.sh green on Sage's gate; no unit,
port or socket of the script outlives the run. R8 (live window) stays row 209.
## Open reads before design
- R4 and R6 candidates (the brief says it builds on their combined candidate). Confirm what they expose: the
hub sign-in, grant and revocation paths, and the Console's board-read refusal.
- Row 190's test harness (several instances on one uid): how it starts units and cleans up.
- Transient user unit support on this host (systemd-run --user), and how the existing tests detect it.
## Status
- 18:53Z: worktree created, brief read. No code yet.
## Handoff 2026-10-23 19:10:09Z (Mos ruling Q245, mos-1503)
Row 296 moves to Lena (Codex seat, thread db27faca-85fb-4ca0-9fc7-78d740d3fa3a, branch lena/row296). Quackerjack
stops here: no builds, no claim, no queue writes. This design is the handoff; Lena continues it.
Base: 45dca69f6. R4 landed as 2efd127ce (ancestor of the base, checked with merge-base --is-ancestor). R6 landed as
d3059c2c3 (row 294). R7 is claimable once Darkwing's window ends (Sage, sage-3592).
What I verified by reading (not by running):
- packages/cli/src/access.mjs:65 reads `system.federation?.peers ?? []` (the R6 seam).
- packages/bus/src/user-cli.mjs exists at base (the user-cli transport).
- Row 190's tests (packages/cli/tests/stack-instances.test.mjs, stack-release.test.mjs T56, stack-release-fixture.mjs)
drive stand-in units and fixtures. They do not start real transient user units. Not a model for R7's Consoles.
- Real transient-unit launch pattern: packages/conversation/src/cohort.mjs (`scopeAvailable()` and `ScopeLauncher`,
systemd-run --user --scope -p Delegate=yes --unit=...; MANAGER_ENV = XDG_RUNTIME_DIR, DBUS_SESSION_BUS_ADDRESS).
- Test-only spawn of systemd-run in packages/conversation/tests is the nearest precedent for start/stop cleanup.
What I did NOT verify (so treat as open): the hub sign-in, grant, revocation and board-read paths in R4/R6 code; the
Console startup flags; whether the fake OP can be a local stand-in; the trap-based unit cleanup.
Design (proposal, not yet checked against code):
1. scripts/test-federation-acceptance.sh: the entry point. Creates a mktemp -d scratch root under
/mnt/storage/scratch/tmp (never ~/.mosaic-dev, never the live bus). trap removes every unit it started and the
scratch root. Refuses to run if a transient unit name collides.
2. Two configs (instance A = hub-side granted seat, instance B = collaborator's home), each with its own
MOSAIC_CONFIG, data root and federation.self; federation.peers names the other.
3. One fake OP: a local stand-in that issues Jason's test identity. Its port and socket are per-run, not the live ones.
4. Two Consoles, each in its own transient user unit (systemd-run --user --unit=mosaic-r7-<run>-<A|B>); outside agent
ancestry; ports picked per run.
5. Test flow (the R7 gate): identity -> grant on one hub project -> sign in -> thread -> send to granted instance ->
reply in thread -> refused on another project -> refused on board reads -> revoke -> refused after revoke -> run
ends. Factory output must show nothing of the hub.
6. Mutants: (a) grant project list widened to `*`, must fail the other-project refusal; (b) revocation claim end
skipped, must fail the refusal-after-revoke check.
Unresolved decisions for Lena (I did not decide these):
- Whether the harness lives in packages/cli/tests (matching row 190) or packages/conversation/tests (matching
cohort.mjs). Brief says packages/*/tests/; pick the one that owns the Console start path.
- Fake OP: in-process HTTP stand-in versus file-backed identity. No preference recorded.
- Port selection: fixed range per run vs OS-assigned. Brief forbids the live ports; it does not pick a range.
R2 and R5 learning:
- R2 (row 203, #1701) landed as a4da4e6df. I built it. Relevant to R7: validateFederation in
scripts/mosaic-config.mjs rejects unknown keys and bad ids, and test-config.sh has an FED block
(expect_fed_refusal). Use federation.self/peers exactly as row 203 validates them.
Mutant runner pattern: one textual edit that must occur exactly once, then a named test must fail; restore from git.
Name filter gotcha: `node --test --test-name-pattern` skips subtests whose parent does not match; include the
parent name (T57 for row 203).
- R5: I did not build R5 in this session and have no first-hand notes on it. Ask Sage for R5's landing sha and notes.
Status: design written; no code, no test runs, no claim, no push of the test files. Next owner: Lena.
## Lena continuation, 2026-10-23
Owner: Lena, thread db27faca-85fb-4ca0-9fc7-78d740d3fa3a. Branch lena/row296.
Base remains 45dca69f6. Quackerjack's handoff c6ab9bdc9 preserved by cherry-pick ad84c1e45.
Issue #1802 exists. Reviewer Filbert. Sage owns queue state, shared test slot and landing.
Status: Untested. All Node, tests and credential-helper fetch/push held for Sage CLEAR (sage-3615).
The earlier canonical `queue next lena` read finished with `nothing` and a rendered-view warning;
no queue state was changed. Lena's owner registration is Sage's action.
### Design decisions sent to Sage (lena-0003)
- Harness under packages/cli/tests, beside row 190's instance proof; shell entry under scripts/.
- Existing HTTPS fakeOidc helper, its generated scratch CA trusted through NODE_EXTRA_CA_CERTS
by each real Console CLI. One fake OP, two client ids; no TLS verification bypass.
- Kernel-assigned loopback ports (0), discovered from each Console's startup log. Public origins
are distinct *.example.test HTTPS names; HTTP requests model the loopback reverse proxy with
exact Host and Origin. This proves the Console boundary, not a deployed HTTPS front end (R8).
- Transient user service units, not scopes: a scope leaves ancestry beneath the caller; the real
user proof walks ancestry. Each Console runs the existing cli.mjs serve --sso --send verb.
- Real startHost broker process and createLauncher. Only the harness adapter is a test stand-in,
as in thread-revoke.test.mjs. A real sandboxed run replies through the broker.
- Scratch-only setup and access grant/revoke use real human CLI transport from a transient service.
No injected principal verifier, direct bindHuman/bindUser, or simulated user transport.
- Every service has a unique per-run prefix and is recorded before launch. Shell EXIT/INT/TERM
traps stop only these services, wait for collection and verify socket and port closure.
- Claim-end assertion reads append-only claim history independently of the launcher's final
shutdown so the claim-end mutant cannot be hidden by endLaunch's cleanup.
### Implementation plan
Goal: an executable scratch proof of federation section 7's R7 gate, without live state.
Architecture: shell lifecycle owner, Node test driver, test-only host fixture, existing real Console CLI.
Tech: Bash, Node ESM/node:test, systemd user transient services, existing fake OP and bwrap adapter.
Spec: docs/plans/2026-10-23_mvp-readiness-rows.md, FED R7, plus preserved handoff above.
Constraints: scratch only under /mnt/storage/scratch/tmp; no live units/ports/sockets/configs or
credential reads; no production behavior/policy changes; no old test edits without Mos via Sage.
Review focus: partial startup cleanup; signals; unit name collision; mismatched hub/factory sessions;
claim end versus process exit. Each must have explicit assertions or a negative cleanup exercise.
- [ ] Write acceptance driver assertions: Jason test sub binds as collaborator (owner is another
fixture identity), one allowed project/instance, thread send and correlated RESULT, private
project creation/read refused, board reads refused, factory has no hub objects, revoke denies
session and re-login, claim history records access-revoked and runner ends.
- [ ] Write shell lifecycle: scratch HOME/TMPDIR, unique unit ledger, bounded command timeout,
traps stop/collect only this run's units, verify recorded sockets and ports no longer listen.
- [ ] Write host fixture using startHost(bootConfig), createLauncher with fakeHarnesses and the
existing thread adapter. Prepare two named configs through bootstrap before fixture edits;
supply only generated test client slots. Setup/grant/revoke through real human transport.
- [ ] On Sage CLEAR run only the new script, fix failures in new files and record exact results.
- [ ] Prepare explicit once-only mutant patches: R5 projects widened to ['*']; R4 #claimEnd call
skipped. On Sage CLEAR prove each gives an assertion failure, restore bytes in finally.
- [ ] Publish manifest (paths, hashes, assertion mapping, old-test numstat), request Filbert review,
push additive commits to lena/row296 only. Sage runs shared suites and gate and lands the row.
Pre-existing test changes: none (numstat: empty).
### Source inspection corrections before first execution
- The real webui chat is channel-gated. Scratch businesses enable only harness pi and channel webui;
the loader fixture re-exports the unchanged webui channel. The adapter replacement is exactly
fakeHarnesses' pi.adapter export; no product file gains a fixture branch.
- startHost creates a real broker child and a real Unix proof socket; it is hosted in the test
driver. The two Console services run the exact same-tree webui CLI, which is required by
verifyPrincipal. Human setup runs the exact same-tree human-cli through humanTransport.
- The earlier in-process host proposal did not need a separate host fixture: startHost exposes
the production launcher API directly, so the only helper file is federation-human.mjs.
- Read-only SQLite inspects claim evidence while the broker remains the sole writer. The test
also checks the registered runner and engine pids/start times are gone after revocation.
- `--kill-after-start` kills the test process after both services have listened; Node teardown
hooks cannot run. The shell trap owns service cleanup independently. This is an expected-red
exercise; acceptance requires its kill marker, nonzero exit and successful cleanup line.
- Main driver environment is a whitelist (PATH, scratch HOME/TMPDIR, systemd manager transport,
R7 run ids). Console/human services use env -i. No host preload or credential env is carried.
- No Node or test has run. Bash syntax and git diff --check passed during preparation.
### Binding design correction: sage-3625, 2026-10-23 19:17:35Z
Sage rejected the transient-unit approach: "no transient systemd user units used to satisfy the
human proof"; such a unit makes the ancestry walk miss the development agent, and creates host
state under mos-1438. This direction replaces the brief/handoff's unit requirement for this build.
No unit was created by the superseded draft, and no Node/test execution occurred.
Current design, replacing the earlier proposals above:
- Consoles are ordinary spawned child processes in their own process groups; no systemd commands,
units, user manager or manager environment are involved.
- Test-only federation-host.mjs follows channel-fixture.mjs's mock.module pattern. It re-exports
real readProcess and replaces verifyHuman's readProcess argument with real process fields plus
ppid=1. This is explicitly a stand-in for Jason's shell, NOT a real ancestry acceptance proof.
Real pid/uid/startTime/nonce/path checks still run; verifyPrincipal still checks the Console's
actual direct parent path for user calls. No product source receives this override.
- Each fixture host runs real startBroker and createLauncher. Its local host API is the existing
thread-revoke.test.mjs pattern, with only the pi adapter replaced via fakeHarnesses.
- Setup/grant/revoke are plain children using real CLI wrappers against that fixture proof seam.
- Shell records each detached group's leader pid and start time, checks both before signalling,
and verifies no live group member, TCP listener or Unix listener remains. Killed-driver mode
bypasses every Node teardown hook and still leaves cleanup to the shell trap.
- Read-only claim evidence and actual runner/engine exit remain independent assertions.
- Gate limitation: this proves the revised scratch integration, not real outside-agent ancestry,
transient unit cleanup, TLS proxy deployment or live federation. R8 remains row 209.
- R5 landing found in git log: ddfb29af7 (#1700).
- Targeted Node/tests remain held. Sage permits the first lena/row296 push in the 19:41Z gap,
with MOSAIC_GITEA_CREDENTIAL_FILE unset. 226 and 283 have earlier slots.
Current files: shell entry; federation-acceptance.test.mjs; fixtures/federation-host.mjs and
fixtures/federation-human.mjs; this BUILD; mutant runner; manifest; append-only logs; preserved
Quackerjack BUILD at ad84c1e45. No pre-existing test modification (numstat empty).
### First candidate, 2026-10-23
Implementation is prepared under sage-3625, not yet executed. Static checks: Bash parser accepts
scripts/test-federation-acceptance.sh; Python ast.parse accepts mutants.py; git diff --check clean.
No test outcome is claimed. The root node_modules links the existing canonical install so the
future targeted run needs no install or network. No webui editor build is involved.
M1 now requires the user project-list leak assertion (`R7 ungranted project must not appear`),
so it proves exposure through the actual Console transport rather than only inspecting grant
configuration. The private-project thread-create refusal and exact grant-list check follow it.
M2 requires `R7 revoke must end the claim as access-revoked` before any host teardown.
Sage opened the push gap early in sage-3644 (19:23:04Z). The first candidate is committed as
Untested, for push only to lena/row296 with MOSAIC_GITEA_CREDENTIAL_FILE unset. Node, acceptance,
negative cleanup exercise and mutants still wait for the test slot. Full suites/gate are Sage's.
### Filbert static review, filbert-296-first-push-static, 19:28:51Z
Review pinned f06a1f78c against 45dca69f6. Filbert verified all nine manifest hashes from Git
objects, no product/pre-existing test changes, no systemd calls, fixture-only ancestry override,
real path/uid/startTime/nonce checks, group ledger identity checks and child-only CA trust.
He ran nothing. The verdict remains pending execution and gate evidence.
- C1 confirmed by inspection: subprocess.run(timeout=280) kills the shell on timeout and can
bypass its trap, while the shell's own deadline plus cleanup can exceed 280 seconds. Removed
the outer Python timeout (the simpler alternative Filbert explicitly allowed). Python now
waits for the shell's bounded run and EXIT/TERM cleanup. Source restoration remains in finally.
- N1 retained limitation: a SIGKILL between spawn and the pid/startTime ledger append can leave
an unrecorded group. The killed-driver exercise begins after both Consoles are recorded and
does not cover that gap. Cleanup claims apply to recorded groups; no universal crash-proof
process creation claim is made.
- N2 addressed before the mutant run: the named readonly claim-history assertion now runs after
revoke and before waiting for the run's end. A skipped #claimEnd therefore cannot first fail
the run-end wait. The final latest-op check still runs after engine/runner exit. If M2 instead
fails an earlier condition, its runner must say NOT KILLED; diagnose the first failure on the
same pinned candidate, retain the intended assertion, and rerun on Sage CLEAR. Never accept a
timeout or change the mutant's expected assertion merely to mark it killed.
- N3 deferred cosmetic fixture detail: wrap() returns fn(value) without await, so async rejection
skips its code mapping. This is not an authorization or cleanup change; the rejection still
propagates, and no verdict relies on that fixture mapping.
- N4: corrected the exact-grant assertion's indentation in the new test.
- N5: prepare() first calls bootstrap --instance, then overwrites that bootstrap-generated
config inside the unique disposable scratch HOME with fixture Console/provider settings.
This is fixture-only setup, not a product/bootstrap overwrite path or a live-config operation.
There remains one selected config per scratch instance, with the same marked data root.
Still Untested. No Node, acceptance, mutant, negative cleanup or CLI suite run. Static validation
only; execution waits for Sage's test window. Follow-up push needs a currently authorized gap.
### Push receipt and N2 ordering proof, 2026-10-23 19:31Z
Sage sage-3659 authorized push before 19:38Z. e855f82e1846f094927c3de69aea1a801253736a
was pushed to origin/lena/row296 with MOSAIC_GITEA_CREDENTIAL_FILE unset. No Node/tests ran.
N2, filbert-296-c1-ack: this path is synchronous after a successful reload. accessCommand awaits
reload at access.mjs:289; reload awaits the access.reload transport at :297. broker.mjs:4645
calls #revokeLost before constructing its reply. #revokeLost (:1025–1034) calls #claimEnd inside
Store.transaction, which executes COMMIT before returning (store.mjs:282–302). server.mjs:160–161
calls broker.request and then writes the response. Therefore the claim record is committed before
the successful CLI call returns; no asynchronous sweep is required for this assertion. A refused
reload can be reported by the CLI with exit 0, but then immediate revocation evidence is absent
and this test must fail; that is not a race the test should hide. No polling change is needed.
T3 package comparison (sage-3659): the four planned runs execute only the new dedicated
federation-acceptance.test.mjs and its fixture host/human children. They do not execute stack-copy,
stack-release or the whole CLI suite. Existing helpers are imported; no old test module is run.
Asked Researcher to confirm against row216. Full CLI suite remains a later Sage gate requirement,
outside the targeted T3 command list. All test resources are unique scratch state.
### R2 rebase and slot start, 2026-10-24, sage-4035/4036/4038
New branch lena/row296-r2, base e0c6142f3a411ed70e32b2c50d01930e0b0641c8.
Original branch remains a1321f8f9; no force push. Rebased tip before evidence: 17e421cf4.
Only conflicts were append-only BUILD-LOG.md and docs/SESSIONS.md: retained all new-base bytes
and appended this row's original suffix. All other row files byte-identical to a1321f8f9.
Range-diff receipt: run-r2/range-diff.txt. Patch IDs: run-r2/patch-ids.txt.
Mapping: ad84c1e45=4a16ebaa4, f06a1f78c→6418b1b12 (only append-log context),
e855f82e1=bbc38067f, a1321f8f9=17e421cf4. Stable patch IDs match for 1/3/4;
commit 2 differs because patch-id includes changed append-log context. No source delta.
The prior local root node_modules symlink was unlinked without following it. Own-worktree root
npm ci --ignore-scripts --no-audit --no-fund: exit 0, 128 packages. Own-worktree webui same
command: exit 0, 2 packages. Both node_modules are real local directories. Canonical dependencies
were never installed, removed or changed. This supersedes the earlier link-based setup note.
Root install had completed before sage-4036 arrived. Exact queue command from worktree refused
linked-worktree policy; reported as lena-0013 and held tests. Sage-4038 authorized queue verbs
only in canonical; no npm/rm there. All further tests run in this worktree under short scratch
TMPDIR, serially: plain script, killed-driver negative exercise, M1, M2, touched new test whole.
Filbert cleared C1 on a1321f8f9 (filbert-296-c1-cleared); rebase preserves those source bytes.
### Scoped acceptance results, 2026-10-24 09:55–09:57Z
Queue start succeeded: lena-296-start rev3888, briefed→in-progress, through the authorized
canonical queue route. Earlier retries refused Sage assignment locks; no lock bypass occurred.
Commands ran serially in this worktree, each with a newly created six-character external TMPDIR
under /mnt/storage/scratch/tmp and timeout -k 10. The script itself additionally creates its own
unique r7.* root and owns child group cleanup. All five external TMPDIRs were empty and removed
afterward (run-r2/tmpdir-cleanup.txt). No product/test source changed to obtain these results.
| Run | Exit | Node pass/fail/skip/cancel | Evidence |
| --- | --- | --- | --- |
| plain script, timeout 600 | 0 | 1/0/0/0 | run-r2/plain-1.log, 3.788 s Node duration |
| --kill-after-start, timeout 600 | 1 expected; negative wrapper 0 | 0/1/0/0 expected SIGKILL | run-r2/killed-1.log, both-Consoles-started marker and cleanup line |
| M1 driver, timeout 600 | 0 (script 1 expected) | 0/1/0/0 expected mutation | run-r2/M1.log, KILLED by R7 ungranted project must not appear |
| M2 driver, timeout 600 | 0 (script 1 expected) | 0/1/0/0 expected mutation | run-r2/M2.log, KILLED by R7 revoke must end the claim as access-revoked |
| new test whole without script context, timeout 60 | 0 | 0/0/1/0 | run-r2/whole-file.log, expected dedicated-script skip |
Every script run printed exactly `R7 cleanup: no child groups, ports or sockets remain; no units
created`. The killed-driver run exercised shell cleanup with no Node teardown hooks. M1 and M2
failed on assertions, not startup failure or timeout; the runner found the named assertion and
cleanup marker. pre-mutants.sha256 checked after each mutation: access.mjs and broker.mjs both
restored byte-for-byte. git diff against e0c6142f3 confirms neither product path changed.
No unexpected first-run red: plain acceptance passed on its first run. Only the deliberate killed
and mutated runs failed. The ordinary-file skip is intentional; the plain script ran its full test
without skips. Module-mocking experimental/deprecation warnings are fixture-only. No old test
was run or changed, so no mos-1272 placement was needed. N3 and N6 remain optional diagnostics;
N1's documented spawn-to-ledger SIGKILL gap remains outside the killed-driver scenario.
Scope per sage-4035: dedicated script, touched new test whole, both mutants and cleanup checks.
No full CLI suite, unrelated package suite, webui build or other scripts/test-*.sh ran in this slot.
Those broader earlier review/gate requirements remain for Sage's integration gate; no full gate
claim is made here. R8/live acceptance, real ancestry proof and deployment remain out of scope.
+73
View File
@@ -0,0 +1,73 @@
# Row 296 / #1802 — R2 scoped acceptance verified; review pending
Base: e0c6142f3a411ed70e32b2c50d01930e0b0641c8. Branch: lena/row296-r2. Reviewer: Filbert. Gate owner: Sage.
Handoff: c6ab9bdc9 preserved as ad84c1e45, rebased as 4a16ebaa4, including
agents/quackerjack/work/queue-296/BUILD.md. Every changed path is in MANIFEST.sha256,
except the checksum file itself (self-hash is excluded). No product file or pre-existing test changed.
Pre-existing test numstat: empty. BUILD-LOG.md and docs/SESSIONS.md are append-only additions.
Binding ruling: sage-3625 replaces the brief's transient-unit start with plain child Consoles and
explicit test stand-ins. **This candidate does not prove genuine outside-agent ancestry.**
It creates no transient systemd unit and makes no systemd CLI call. R8 remains row 209.
## What is real, and what is a stand-in
- Two configs created by bootstrap --instance hub/factory, two marked data roots, real Console
cli.mjs serve --sso --send, real broker runtime and launcher, real path-bound human-cli and
user-cli wrappers, real access loader, CLI writes/reload, grant filters and revocation.
- One existing HTTPS fakeOidc server, two issuer/client identities. Its generated CA is trusted
only through NODE_EXTRA_CA_CERTS in this test's child environment, never any trust store.
- federation-host.mjs replaces verifyHuman's readProcess argument with actual process fields plus
ppid=1, exactly the test pattern Sage named. This stands in for Jason's shell on setup,
grant/revoke and both Consoles' transports. The actual Console parent/path check remains.
There is no product parameter, environment switch or altered verifier default.
- fakeHarnesses replaces only the pi harness adapter() with a scratch shell invoking the existing
thread-adapter.mjs. The existing webui channel is re-exported unchanged. No network model runs.
- Public HTTPS origins are modelled through HTTP loopback requests with matching Host/Origin;
reverse-proxy TLS deployment is outside this scratch proof.
## Acceptance map
All checks live in `FED R7 scratch two-instance acceptance` in
packages/cli/tests/federation-acceptance.test.mjs.
| Requirement | Assertion/evidence |
| --- | --- |
| Isolated instances | different config paths/data roots/ports; scratch HOME/TMPDIR; two named markers from bootstrap; port 0, forbidden live ports 7330–7332 checked |
| Jason is collaborator, not owner | owner melanie; access user jason-test, home factory, fake sub jason-test-sub; hub /api/config user=true |
| One project, one granted instance | actual access grant CLI, projects=[shared], instances=[assistant]; user project list contains shared only |
| Thread and reply | create thread on shared, POST message, correlated RESULT with in_reply_to=sent.id, from_role=assistant, to_role=user, body contains question |
| Other project refused | private project absent from listing; create on private returns 403 access-refused |
| Board reads refused | /api/board, /api/bus/inbox and /api/bus/tasks return 403 owner-only |
| Factory sees no hub objects | Jason sub refused at factory; factory owner sees factory-only project and no threads; hub cookie gets 401 at factory |
| Revoke takes effect | actual access revoke CLI; existing hub session 401 and re-login 403 |
| Claim and process ended | live run before revoke; end log exitCode=0; no registered sessions; engine and runner pid/startTime gone; readonly claim history has revoke/access-revoked before the process-end wait, latest op=revoke afterward |
| Normal cleanup | EXIT trap terminates only recorded pid/startTime-checked groups; checks no live group member, no recorded TCP/Unix listener, no other scratch Unix listener, removes scratch directory/socket files |
| Killed-driver cleanup | --kill-after-start prints both-Consoles-started marker then SIGKILLs test driver; shell performs the same independent cleanup; expected nonzero run with successful cleanup line |
## Verification commands (executed on sage-4035 CLEAR)
- scripts/test-federation-acceptance.sh — must exit 0, one acceptance test passes, cleanup line present.
- scripts/test-federation-acceptance.sh --kill-after-start — must exit nonzero, print the explicit
interruption marker and `R7 cleanup: no child groups, ports or sockets remain; no units created`.
- python3 agents/lena/work/queue-296/mutants.py M1 — once-only R5 grant projects -> ['*']; must fail
`R7 ungranted project must not appear` and verify cleanup, then restore original source bytes. Python relies on the shell's own run deadline and cleanup; no outer killing timeout.
- python3 agents/lena/work/queue-296/mutants.py M2 — once-only R4 claim end omitted; must fail
`R7 revoke must end the claim as access-revoked` before shutdown, verify cleanup and restore bytes.
- Sage integration gate remains separate: every scripts/test-*.sh and full applicable suites per Sage; not run in this scoped slot.
Status: scoped gate passed: plain 1/1 (exit 0), killed-driver expected exit 1 with verified cleanup, M1/M2 drivers exit 0 with named assertion kills and source restoration; normal whole-file invocation exit 0 with one intentional dedicated-script skip. All cancellations 0. Receipts in run-r2/; counts and commands in BUILD.md.
The script never silently skips a missing tool/sandbox/provider: prerequisites fail the acceptance.
Ordinary CLI suites skip the dedicated test until invoked by its owning script.
Static-review follow-up: filbert-296-first-push-static. C1 removes Python's outer timeout so it
cannot SIGKILL the shell before EXIT cleanup. N2 moves the named claim-history assertion before
the process-end wait. N1's spawn-to-ledger SIGKILL gap is retained and documented in BUILD.md;
--kill-after-start exercises the fully recorded groups. N3 remains a cosmetic fixture limitation.
N4 indentation corrected. N5 scratch-bootstrap config overwrite is explicitly fixture-only.
R2 provenance: source identical to the statically cleared a1321f8f9. Rebase mapping/range-diff
and stable patch IDs are in run-r2/. Only append-log conflict context changed. No unexpected
first-run failure, no old test changed/run, and no broader suite or shared gate claimed.
Manifest coverage is the complete changed-path set over e0c6142f3..candidate, including all
text evidence and this description; only MANIFEST.sha256 itself is excluded from its own hash.
@@ -0,0 +1,29 @@
97a7d3518ac0e3f823c631d6616cea3de277040c673acd016f5bb0efd627938f BUILD-LOG.md
5d040043c9ef15a5343ac4bc8382051c67c6bce13f273b7b16071e9e16e42c5d agents/lena/work/queue-296/BUILD.md
1b853af963c754152466ae77a27e2136087192abd8cc912045b6d95c4c094e11 agents/lena/work/queue-296/MANIFEST.md
bd6e9fd9e3f7aa0ee6702401776ef7bd3e39562059a11b87aaaf2a427904381b agents/lena/work/queue-296/mutants.py
9a271f2a916b0b6ee6cecb2426f0b3206ef074578be55d9bc94f6f3fe3ab86aa agents/lena/work/queue-296/run-r2/M1.exit
50ac6f0ea22cc671e4056385fc2feb4d015bfe853a9393a60a6cb38a10ad6cb2 agents/lena/work/queue-296/run-r2/M1.log
5079eaa8fcc6964072f7ba20333ba77607fa25729697182151bb3739f3ab15f8 agents/lena/work/queue-296/run-r2/M1.tmpdir
9a271f2a916b0b6ee6cecb2426f0b3206ef074578be55d9bc94f6f3fe3ab86aa agents/lena/work/queue-296/run-r2/M2.exit
793b40f72e600ca71d6a29d058b2f11b4aaa0388dd80e8e6f8a925f46af589d7 agents/lena/work/queue-296/run-r2/M2.log
01ef19b3acc3ac7f8cf0e69e31b8a0ef5413264109be154987993e0c8ce845d5 agents/lena/work/queue-296/run-r2/M2.tmpdir
4355a46b19d348dc2f57c046f8ef63d4538ebb936000f3c9ee954a27460dd865 agents/lena/work/queue-296/run-r2/killed-1.exit
6333824a3def94fc983f4d9ede08ae3301dd31921fae350cec77e9b7c220c963 agents/lena/work/queue-296/run-r2/killed-1.log
67809d95a8b102392c23ed05e347ad461fc6eee8b66b0a732251be476ca99f08 agents/lena/work/queue-296/run-r2/killed-1.tmpdir
c8a0c8d9d9a2c723aab5cfcb973713903a0914ec46394215533531f17a7eeeaf agents/lena/work/queue-296/run-r2/patch-ids.txt
9a271f2a916b0b6ee6cecb2426f0b3206ef074578be55d9bc94f6f3fe3ab86aa agents/lena/work/queue-296/run-r2/plain-1.exit
ae2d6a16a97907384f992ef847be503eae0124bd378648fd620717450d56f2f7 agents/lena/work/queue-296/run-r2/plain-1.log
254a104ac320b5b8e7ed792b373e5ca3af0febb94d705dc62b54fc6545fe9395 agents/lena/work/queue-296/run-r2/plain-1.tmpdir
97858a98531f635813404f1c2a149f9e3d620444ca4cddb49b1e035cb91fa73d agents/lena/work/queue-296/run-r2/pre-mutants.sha256
f431f734d74169b9c0932dedadf4cb2bac7ecc37e0ee93f1009b90c5b7bf6541 agents/lena/work/queue-296/run-r2/range-diff.txt
36d4dcb2e1a816b5bdde0c1f47510d7e059f86810b75f6e10a5ca91c8341fe4b agents/lena/work/queue-296/run-r2/tmpdir-cleanup.txt
9a271f2a916b0b6ee6cecb2426f0b3206ef074578be55d9bc94f6f3fe3ab86aa agents/lena/work/queue-296/run-r2/whole-file.exit
615834d38c4b90b0dc04529c6fc7f280a6e30e1b81c1658bd2e7d5a55e932e01 agents/lena/work/queue-296/run-r2/whole-file.log
6e9863193aa62750f7ce89f17484973d5d85ef61980782d353c7ad6bd255b130 agents/lena/work/queue-296/run-r2/whole-file.tmpdir
87239327014c49abbe130c17881bb48e13d96545bf9f3e09b6f4aed46e11453b agents/quackerjack/work/queue-296/BUILD.md
04512fb4693bc135131857f204addfcc4968c660a00327c2589f5a107f591a2b docs/SESSIONS.md
89a15e62aa6f951596b764993afeff7e33eeaa3a4f45d31599eba7d27a4000ad packages/cli/tests/federation-acceptance.test.mjs
86b76565f5afe9efdd076ef61cc54e40c447d235f77b95818d0d601ce036effa packages/cli/tests/fixtures/federation-host.mjs
b12a9bad4be083f2439c3363738b9763fa0061228f84d501a385ade48fea90e4 packages/cli/tests/fixtures/federation-human.mjs
4008361f062a2f21b6075c500060196e10a48351fd7d95b25d681f36b4fa801a scripts/test-federation-acceptance.sh
+51
View File
@@ -0,0 +1,51 @@
#!/usr/bin/env python3
"""R7 mutants. Run only on Sage CLEAR in Lena's isolated candidate.
Every replacement must occur once. Product bytes are restored even on timeout
or failure. A killed mutant must contain the named assertion in the script's
output; startup errors and timeout alone are not evidence. The shell owns its
own timeout and EXIT/TERM cleanup. Do not put a killing Python timeout around it.
"""
from pathlib import Path
import subprocess
import sys
repo = Path(__file__).resolve().parents[4]
mutants = {
'M1': (
'packages/cli/src/access.mjs',
'projects: resolveProjects(list(parsed.values["--projects"]), rows),',
'projects: ["*"],',
'R7 ungranted project must not appear',
),
'M2': (
'packages/bus/src/broker.mjs',
"this.#claimEnd({ business: t.business }, h, 'revoke', null, 'access-revoked', by);",
"/* R7 mutant: skip ending the revoked claim */",
'R7 revoke must end the claim as access-revoked',
),
}
if len(sys.argv) != 2 or sys.argv[1] not in mutants:
raise SystemExit('usage: mutants.py M1|M2')
name = sys.argv[1]
file, before, after, assertion = mutants[name]
path = repo / file
original = path.read_bytes()
text = original.decode()
if text.count(before) != 1:
raise SystemExit(f'{name}: anchor count {text.count(before)}, expected 1')
try:
path.write_text(text.replace(before, after))
result = subprocess.run(['scripts/test-federation-acceptance.sh'], cwd=repo,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
text=True)
print(result.stdout, end='')
if result.returncode == 0 or assertion not in result.stdout:
raise SystemExit(f'{name}: NOT KILLED by expected assertion')
if 'R7 cleanup: no child groups, ports or sockets remain; no units created' not in result.stdout:
raise SystemExit(f'{name}: cleanup not verified')
print(f'{name}: KILLED by {assertion}')
finally:
path.write_bytes(original)
if path.read_bytes() != original:
raise SystemExit(f'{name}: restore failed')
@@ -0,0 +1 @@
0
+59
View File
@@ -0,0 +1,59 @@
✖ FED R7 scratch two-instance acceptance (1924.232002ms)
ℹ tests 1
ℹ suites 0
ℹ pass 0
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 2002.66244
✖ failing tests:
test at packages/cli/tests/federation-acceptance.test.mjs:143:1
✖ FED R7 scratch two-instance acceptance (1924.232002ms)
AssertionError [ERR_ASSERTION]: R7 ungranted project must not appear
+ actual - expected
[
'd27c7d26-5ea3-446c-b1ce-f54183e16c8a',
+ 'c1cb5a81-e752-4932-be3c-d849e5a34284'
]
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/lena-row296/packages/cli/tests/federation-acceptance.test.mjs:185:10)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: [ 'd27c7d26-5ea3-446c-b1ce-f54183e16c8a', 'c1cb5a81-e752-4932-be3c-d849e5a34284' ],
expected: [ 'd27c7d26-5ea3-446c-b1ce-f54183e16c8a' ],
operator: 'deepStrictEqual',
diff: 'simple'
}
R7 diagnostic: factory-console.log
Mosaic Console: http://127.0.0.1:43315/
Board: http://127.0.0.1:1
Bus: factory
Sign-in: https://factory.example.test/ (--sso), reads and human writes (--send), grant Approve and Deny
Sign-in provider: test-op issuer https://127.0.0.1:35689/factory/ subjects 1 (ready)
Proxy: proxy proof off
Ctrl-C stops this server.
R7 diagnostic: factory-host.log
(node:889203) ExperimentalWarning: Module mocking is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
(node:889203) DeprecationWarning: mock.module(): options.namedExports is deprecated. Use options.exports instead.
R7 diagnostic: hub-console.log
Mosaic Console: http://127.0.0.1:34081/
Board: http://127.0.0.1:1
Bus: hub
Sign-in: https://hub.example.test/ (--sso), reads and human writes (--send), grant Approve and Deny
Sign-in provider: test-op issuer https://127.0.0.1:35689/hub/ subjects 1 (ready)
Proxy: proxy proof off
Ctrl-C stops this server.
R7 diagnostic: hub-host.log
(node:889107) ExperimentalWarning: Module mocking is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
(node:889107) DeprecationWarning: mock.module(): options.namedExports is deprecated. Use options.exports instead.
R7 cleanup: no child groups, ports or sockets remain; no units created
M1: KILLED by R7 ungranted project must not appear
@@ -0,0 +1 @@
/mnt/storage/scratch/tmp/9Uoj48
@@ -0,0 +1 @@
0
+60
View File
@@ -0,0 +1,60 @@
✖ FED R7 scratch two-instance acceptance (3143.370798ms)
ℹ tests 1
ℹ suites 0
ℹ pass 0
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 3218.651521
✖ failing tests:
test at packages/cli/tests/federation-acceptance.test.mjs:143:1
✖ FED R7 scratch two-instance acceptance (3143.370798ms)
AssertionError [ERR_ASSERTION]: R7 revoke must end the claim as access-revoked
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/lena-row296/packages/cli/tests/federation-acceptance.test.mjs:226:10)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
R7 diagnostic: factory-console.log
Mosaic Console: http://127.0.0.1:40569/
Board: http://127.0.0.1:1
Bus: factory
Sign-in: https://factory.example.test/ (--sso), reads and human writes (--send), grant Approve and Deny
Sign-in provider: test-op issuer https://127.0.0.1:37617/factory/ subjects 1 (ready)
Proxy: proxy proof off
Ctrl-C stops this server.
2026-10-24T09:56:19.857Z sso refused code=subject-unknown provider=test-op iss="https://127.0.0.1:37617/factory/" sub="jason-test-sub"
R7 diagnostic: factory-host.log
(node:892054) ExperimentalWarning: Module mocking is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
(node:892054) DeprecationWarning: mock.module(): options.namedExports is deprecated. Use options.exports instead.
R7 diagnostic: hub-console.log
Mosaic Console: http://127.0.0.1:44529/
Board: http://127.0.0.1:1
Bus: hub
Sign-in: https://hub.example.test/ (--sso), reads and human writes (--send), grant Approve and Deny
Sign-in provider: test-op issuer https://127.0.0.1:37617/hub/ subjects 1 (ready)
Proxy: proxy proof off
Ctrl-C stops this server.
2026-10-24T09:56:19.257Z chat action=createThread user="jason-test" id=58f85ce3-825f-42ea-9b19-e407157147f1
2026-10-24T09:56:19.387Z chat action=send user="jason-test" id=3e803a2f-e10d-4ede-b80e-c7ca3fcc564b
2026-10-24T09:56:19.836Z chat action=createThread user="jason-test" error=access-refused
2026-10-24T09:56:20.395Z sso refused code=user-revoked provider=test-op user="jason-test"
2026-10-24T09:56:20.401Z sso refused code=subject-unknown provider=test-op iss="https://127.0.0.1:37617/hub/" sub="jason-test-sub"
R7 diagnostic: hub-host.log
(node:892013) ExperimentalWarning: Module mocking is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
(node:892013) DeprecationWarning: mock.module(): options.namedExports is deprecated. Use options.exports instead.
usage: {"event":"usage-unknown","business":"hub","run":"r892d587abe73","instance":"assistant","turn":"3e803a2f-e10d-4ede-b80e-c7ca3fcc564b","source":"@none","code":"baseline-unknown"}
mosaic-bus: run r892d587abe73 (assistant) ended: stopped
R7 cleanup: no child groups, ports or sockets remain; no units created
M2: KILLED by R7 revoke must end the claim as access-revoked
@@ -0,0 +1 @@
/mnt/storage/scratch/tmp/wPuOGf
@@ -0,0 +1 @@
1
@@ -0,0 +1,41 @@
R7 interruption: both Consoles started; killing test driver
✖ packages/cli/tests/federation-acceptance.test.mjs (2055.463978ms)
ℹ tests 1
ℹ suites 0
ℹ pass 0
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 2061.099035
✖ failing tests:
test at packages/cli/tests/federation-acceptance.test.mjs:1:1
✖ packages/cli/tests/federation-acceptance.test.mjs (2055.463978ms)
'test failed'
R7 diagnostic: factory-console.log
Mosaic Console: http://127.0.0.1:42937/
Board: http://127.0.0.1:1
Bus: factory
Sign-in: https://factory.example.test/ (--sso), reads and human writes (--send), grant Approve and Deny
Sign-in provider: test-op issuer https://127.0.0.1:40605/factory/ subjects 1 (ready)
Proxy: proxy proof off
Ctrl-C stops this server.
R7 diagnostic: factory-host.log
(node:887305) ExperimentalWarning: Module mocking is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
(node:887305) DeprecationWarning: mock.module(): options.namedExports is deprecated. Use options.exports instead.
R7 diagnostic: hub-console.log
Mosaic Console: http://127.0.0.1:42267/
Board: http://127.0.0.1:1
Bus: hub
Sign-in: https://hub.example.test/ (--sso), reads and human writes (--send), grant Approve and Deny
Sign-in provider: test-op issuer https://127.0.0.1:40605/hub/ subjects 1 (ready)
Proxy: proxy proof off
Ctrl-C stops this server.
R7 diagnostic: hub-host.log
(node:887261) ExperimentalWarning: Module mocking is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
(node:887261) DeprecationWarning: mock.module(): options.namedExports is deprecated. Use options.exports instead.
R7 cleanup: no child groups, ports or sockets remain; no units created
@@ -0,0 +1 @@
/mnt/storage/scratch/tmp/bZhAyq
@@ -0,0 +1,8 @@
old ad84c1e45cf2327b9584c38328db02fb9d5dfc63 af9d89f4c65a791b0aeabe7bf1f19c6709c50bfb
old f06a1f78cf135b0cd749e4602b28f6e63c177c85 da6478f871cd450ff3ee43e14b4f6a1d1a1deb59
old e855f82e1846f094927c3de69aea1a801253736a 6065440666f6fc49254352e259ecbc5b0a4b40c3
old a1321f8f90b41295245859ec92bb5ec4801ede84 d1a7f19fabc3f0c604eda8051312ef1efb50e74e
rebased 4a16ebaa4ac96bfac2a0e3787f4437467a13650b af9d89f4c65a791b0aeabe7bf1f19c6709c50bfb
rebased 6418b1b12382186e82048cf9aa223b851a23d4d0 2d2d8a223bce50d30fc3525da5f1cda9c38254cd
rebased bbc38067f2d6100e58020bc197a84e6251fef83d 6065440666f6fc49254352e259ecbc5b0a4b40c3
rebased 17e421cf4c9a3fd0cf432de0205cc1efff7f6044 d1a7f19fabc3f0c604eda8051312ef1efb50e74e
@@ -0,0 +1 @@
0
@@ -0,0 +1,10 @@
✔ FED R7 scratch two-instance acceptance (3684.148824ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 3787.998681
R7 cleanup: no child groups, ports or sockets remain; no units created
@@ -0,0 +1 @@
/mnt/storage/scratch/tmp/vgwsGf
@@ -0,0 +1,2 @@
c4949a16173d11f9d32d10d3ddd58a181631848b259bef1998820a78f5694808 packages/cli/src/access.mjs
71b32ee4afa322793aad81231441ee7badc3e5aff65ff008c6cc0f7f63b72781 packages/bus/src/broker.mjs
@@ -0,0 +1,31 @@
1: ad84c1e45 = 1: 4a16ebaa4 row 296 handoff: FED R7 design notes to lena/row296 (mos-1503, Q245)
2: f06a1f78c ! 2: 6418b1b12 Untested: row 296 scratch two-instance acceptance (#1802)
@@ Commit message
Untested: row 296 scratch two-instance acceptance (#1802)
## 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 — Lena, row 296 / #1802 FED R7 start
+
@@ agents/lena/work/queue-296/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 — lena (Codex, db27faca): row 296 / #1802 FED R7; recovered Quackerjack design on lena/row296, inspecting acceptance paths; Node/tests held pending Sage CLEAR, no live changes.
## packages/cli/tests/federation-acceptance.test.mjs (new) ##
3: e855f82e1 = 3: bbc38067f Untested: preserve R7 shell cleanup during mutant runs (#1802)
4: a1321f8f9 = 4: 17e421cf4 Untested: record R7 reload ordering and slot boundaries (#1802)
@@ -0,0 +1,5 @@
M1: external TMPDIR removed (empty)
M2: external TMPDIR removed (empty)
killed-1: external TMPDIR removed (empty)
plain-1: external TMPDIR removed (empty)
whole-file: external TMPDIR removed (empty)
@@ -0,0 +1 @@
0
@@ -0,0 +1,9 @@
﹣ FED R7 scratch two-instance acceptance (0.501837ms) # run scripts/test-federation-acceptance.sh
ℹ tests 1
ℹ suites 0
ℹ pass 0
ℹ fail 0
ℹ cancelled 0
ℹ skipped 1
ℹ todo 0
ℹ duration_ms 77.634961
@@ -0,0 +1 @@
/mnt/storage/scratch/tmp/DRs04b
+277
View File
@@ -0,0 +1,277 @@
# Row 286: C2-03b push and per-seat credentials for the library mirror (#1791)
Owner Ludwig. Reviewer Dewey. Gate owner Sage (sage-2909).
Brief: `docs/plans/2026-10-20_case2-rows.md`, "## C2-03b", at 94c33a43c. Design 7.2 and the ruling
after r11 "agents never write story" in `agents/gosalyn/work/case2/DESIGN.md` at b68d79663.
Base: `refactor` at 94c33a43c. The brief cites aca16404c, and lines have moved since:
`GRANT_EVIDENCE` is `broker.mjs:253` now, not `:246`.
Status: code written, local and unrun (18:48Z on). No node until Sage's CLEAR, after row 258's run.
## What the code does today (94c33a43c)
- `packages/library/src/sync.mjs:32` `syncCommand(kind, url, {mirror, branch, user, slot})`. It refuses
any kind but `fetch`. The env passes `MOSAIC_LIBRARY_HOST`, `_USER` and `_SLOT` to `bin/askpass`.
- `bin/askpass` checks `-f` and `! -L` on the slot, then reads it. It doesn't check the uid or the mode.
- `sync.mjs:51` `slotPresent` checks lstat: a regular file, our uid, no group or other bits.
- The slot path is built in `packages/bus/src/runtime.mjs:211-217` (`syncOptions`) as
`<configDir>/secrets/<business>/library-gitea`. The broker only calls `this.#library.sync(context,
{accept})` (`broker.mjs:4630`), and the timer calls `libraryModule.sync` directly (`runtime.mjs:533`).
- The sync state file has a strict key list in `packages/library/src/mirror.mjs:222`.
- `chief-of-staff` is a definition (`STAFF_TO`, `broker.mjs:240`), not a fixed instance name.
- A seat's Gitea user is in `gitea_grants.user` and `gitea_users`. Its token file is
`<storeRoot>/<business>/<agent>/gitea` (`gitea-grant.mjs:379`). `giteaKeys.held(business, agent)`
answers the held case.
## Plan
1. `syncCommand(kind, url, {mirror, branch, user, file, commit})`. `kind` is `fetch` or `push`. Same
`SAFE` prefix, `-c` keys and env for both. A push is
`push --porcelain --no-verify --end-of-options <url> <commit>:refs/heads/<branch>`, with no `+`.
`commit` must be a full sha. The env var stays `MOSAIC_LIBRARY_SLOT` but now names whichever file
answers: a seat file, the chief's file, slot `library-gitea` or slot `library-human`.
2. `push(context, {commit, credential, retried, command})` in `sync.mjs`. git's porcelain line for
the ref decides:
- `!` with `[rejected]` and `(fetch first)` or `(non-fast-forward)` means the tip moved. Fetch once
with the same credential and return `{pushed: false, raced: true, tip}`. With `retried: true`, the
same rejection refuses `stale-base`. C2-02 owns the re-apply.
- Any other failure refuses `library-push-failed`. git's stderr isn't kept.
- A remote that fails C2-04's URL rules refuses `library-remote-invalid` before any git call.
3. `bin/askpass` gets `readSecretFile`'s checks, the same way: no symlink, the bus's uid, mode 0600.
In sh: `test -f && test ! -L && test -O`, plus a mode check through `stat -c %a`. Only the path
reaches that argv. The user check stays an exact match on the one configured user. The check and the
read happen at different times (TOCTOU). The bus owns the directories, so I take that as the
accepted limit (Q1).
4. Credential choice for the fetch, as a pure function `fetchCredential(store, business, keys)` in the
bus. The broker exposes it, and `runtime.mjs` passes its answer to `sync` for the verb and the timer:
- The chief is the one instance whose definition is `chief-of-staff`.
- Evidence: `SELECT 1 FROM events WHERE business=? AND ${GRANT_EVIDENCE} AND
json_extract(body,'$.method')='gitea' AND json_extract(body,'$.agent')=?`, of any action. It
names no project and never reads `gitea_grants`.
- No evidence: slot `library-gitea`, `{kind: 'slot'}`.
- Evidence, a live `gitea_grants` row for the chief and not held: `{kind: 'chief', user, file}`,
with the user from that row. The fallback test never reads the table. This path does, because it
needs the user.
- Evidence and anything else (revoked, fired or held): `library-fetch-no-grant`, before any file is
opened.
- No chief instance (fired): Q2.
5. The sync state gets `credential: {kind, user} | null`. `library.status` shows it.
`library-fetch-no-grant` shows as `lastError.code`. This changes `mirror.mjs`'s key check (Q3).
6. Slot `library-human` is `<configDir>/secrets/<business>/library-human`. `humanCredential(...)`
refuses `library-human-missing` before any git call when the slot is missing or fails the file checks
(lstat: regular file, our uid, 0600). Her Gitea user: Q4.
## Files owned extension (sage-2922)
Added to the brief's list: `packages/bus/src/runtime.mjs` (`syncOptions` at :211-217 and the timer's
call at :533) and `packages/library/src/mirror.mjs` (the state key list at :222). sage-2922 wrote
`packages/library/src/runtime.mjs`, but the file is `packages/bus/src/runtime.mjs`. In mirror.mjs
the row 222 contract holds: keys are added and none renamed. Before in-review I grep `packages/*/tests`
for hash pins and path reads on both files and check them against every in-review manifest.
## Scope questions (for Dewey and Sage before code)
- Q1. The askpass TOCTOU above. Is it accepted as is, or should the helper be a node script that does
O_NOFOLLOW plus fstat? If node, it would read the token in process and print it to git's pipe.
- Q2. Fired chief. The instance and its `gitea_grants` row are gone, so I can't name the agent for the
evidence check. My recommendation fails safe: with no chief instance, the fetch refuses
`library-fetch-no-grant` when any gitea grant event exists in the business, and uses the slot only
when none exists.
- Q3. Files owned names `sync.mjs`, `askpass`, `broker.mjs` and the tests. The choice also needs
`packages/bus/src/runtime.mjs` (`syncOptions` and the timer's call) and
`packages/library/src/mirror.mjs` (the state key list for `credential`). I'd add both to the
manifest, with only those hunks changed.
- Q3: approved, sage-2922. See above.
- Q4: sage-2922 allowed `user` only if design 7.2 or the ruling after r11 makes it her account. Neither
does. `packages/library/README.md:31` at 94c33a43c says "`user` is the bot account name from design
step 3, required for sync", so it is the fetch identity and can't be reused for her save. Back to Sage.
My recommendation: `humanCredential(context, {user})` takes her login as a parameter, so this row adds no
mapping field. The row that adds the save, C2-02 or C2-11a with `editor`, names the field. That
needs a mapping schema change, which is Sage's call.
Ruled sage-2925: accepted. `humanCredential(context, {user})` refuses `library-human-missing` before
any git call when the slot is missing or bad or `user` is missing. This row adds no mapping field.
Row 283 (C2-01d) adds an optional `editor.user`, and row 288 (C2-02) passes it in.
- Q4 (original). Her Gitea user for `library-human`. The entry's `user` (`mapping.mjs:52`) is today the sync
user, the bot's. The design names `editor {name, email}` (C2-11a) but no Gitea login. My
recommendation: the entry's `user` becomes her Gitea login, used only with slot `library-human`. The
fallback fetch keeps that same user too, because the bot slot was set up for it. Otherwise this row
takes the user as a parameter and C2-02 or C2-12b names the field.
## Tests (brief list, mapped)
T1 push lands a fast-forward. T2 a moved tip reports the race. T3 a second race refuses `stale-base`.
T4 a dead remote refuses `library-push-failed`. T5 askpass answers with the named seat's user and file,
and refuses another seat's user, a symlink, 0644 and another uid (with a fallback note if the test can't
chown). T6 the fetch uses the chief's file with a live grant, and the slot only with no chief event.
T7 revoked (through `grants.revoke`), fired (through `instance.fire`) and held each refuse
`library-fetch-no-grant` with a valid slot present, and each asserts the `gitea_grants` row is gone
first. T8 a chief grant on another project ends the fallback. T9 T7's three cases with the slot at 0000.
T10 a missing `library-human` refuses `library-human-missing` and runs no git. T11 a token search of
argv, the mirror config, the run log and the test output. Mutant: a `+` added to the push refspec fails.
## Gate
Dewey approves the manifest. The library and bus suites, plus every `scripts/test-*.sh`, pass on Sage's
gate. The mutant dies. A token search of the run's output finds nothing.
## Early look (dewey-0860), folded
Q1, askpass: sh, with no gap between the check and the read. The helper keeps `test -f` and then:
- opens the slot with `exec 3<"$slot"`;
- stats the open file with `stat -L -c '%d:%i %u %a %s %F' /dev/fd/3`, and the path itself (an lstat)
with `stat -c '%d:%i' -- "$slot"`;
- refuses unless the two dev:inode values match, the type is regular, the uid is `id -u`, the mode is
600 and the size is at most 16384;
- reads the token from fd 3.
A symlink or a swap at either moment changes the inode, and the token comes from the file that was
checked. This matches `readSecretFile` (`gitea-grant.mjs:167-181`).
Residual, the same on both paths: a FIFO swapped in after `test -f` blocks the open. Neither side uses
O_NONBLOCK.
Swap test T5b: the direct helper test puts a `stat` shim on its own PATH. On its first call the shim
renames another file over the slot, then runs the real stat. The helper must exit 1 and print nothing.
Mutant M2 drops the inode compare and must fail T5b.
Q2, the chief: found through `roles` by definition, not through `launch.instances`. A fire only delists
the name (`packages/business/src/instance-settings.mjs:355`), and `roles[name]` stays. Only a delete
removes it (`deletedDocument`, :70).
- Gitea grant evidence for any `roles` entry whose definition is `chief-of-staff` ends the fallback.
That includes a fired chief beside a new listed one.
- A live credential comes only from the listed chief's live, unheld `gitea_grants` row.
- With no `roles` entry of that definition (deleted, or never a chief), any gitea grant event in the
business refuses `library-fetch-no-grant`.
- Cost, for Sage: row 236 lets seat gitea grants exist before C2-21. So a business with no chief
entry and one seat grant loses the slot fallback. That fails safe, but it narrows "an install that
runs before C2-21 still syncs".
- T7's fired case also asserts that `roles[chief]` still exists after `instance.fire`.
N1: the `credential` key is optional in `mirror.mjs`'s exact `keys(...)` check (:221), so a pre-286
state file still reads. The old fixtures have no `credential`: `library-sync.test.mjs:18`,
`library.test.mjs:106` and `mirror.test.mjs:13`. New test T12 reads a pre-286 state file. Row 224
(Della, 23816cf28) also changes `packages/bus/src/runtime.mjs`. Whichever lands second rebases and reruns
bus whole.
N2: `[remote rejected]`, a hook refusal, is `library-push-failed`, not a race. Only `[rejected]` with
`(fetch first)` or `(non-fast-forward)` counts as a race. The evidence query depends on
`body.method` and `body.agent`. gitea `grant.applied` carries both at `broker.mjs:2479` and
`grant.revoked` at :1862 and :2797. The spend event (`operation: 'grant.gitea'`, :1093) carries
neither, so it doesn't match.
N3: `fetchCredential` reads the store, so it is the bus's choice function, not a pure one.
## Rulings sage-2928
- Q1: Dewey's fix, in sh. On dragon-lin `/bin/sh` is bash, and GNU coreutils stat 9.11 gives
`stat -L -c '%d:%i %u %a %s %F' /dev/fd/3` on an open fd. Checked at 18:47Z with a scratch file, not
the repo. The helper runs as git's child in the bus process, not under bwrap. T5b stages the swap with
the PATH stat shim. If a run shows the swap can't be staged reliably, BUILD.md names M2, which drops the
fd compare, and it gets killed.
- Q2: chief by `roles[*].definition === 'chief-of-staff'`. The blanket refusal applies only with no such
entry. Departure from the brief's "an install that runs before C2-21 still syncs", accepted in
sage-2928: it refuses rather than widens, and every install enrolls the chief at initial configuration
(F40, Q226). The refusal's message names the fix: "add the chief of staff, or grant the library
through C2-21".
- N1: as above.
## Build notes (code written; nothing run yet; dewey-0864 folded)
Files changed:
- `packages/library/src/sync.mjs`: `syncCommand` takes `push` with a full-sha `commit`; `push()`;
`humanCredential()`; `sync()` takes `credential`; `HUMAN_SLOT`, `CREDENTIAL_KINDS`. The `slot` opt
and `MOSAIC_LIBRARY_SLOT` keep their names and now name whichever file answers.
- `packages/library/src/index.mjs`: the new exports.
- `packages/library/bin/askpass`: Dewey's fd 3 check.
- `packages/library/src/mirror.mjs`: optional `credential` in the state key check. Nothing renamed.
- `packages/bus/src/broker.mjs`: `LIBRARY_FETCH_FIX` and `libraryFetchCredential(business)`.
- `packages/bus/src/runtime.mjs`: `syncOptions` passes the broker's choice to the verb and the timer.
The timer's held line adds `fix` for `library-fetch-no-grant`.
- `packages/library/README.md`: "Push and credentials (C2-03b)".
- Tests: `packages/library/tests/sync.test.mjs` (appended), `packages/bus/tests/library-credential.test.mjs` (new).
Choices made without a ruling. Each is small and reversible:
- `humanCredential(context, { user, configDir })`: sage-2925 named `{user}`. The slot path needs the
config dir, and the library package doesn't know it, so the caller passes it. That's the same
source runtime's `slotDir` uses.
- `BusError` carries only a code, so the sage-2928 fix text can't ride on the verb's refusal. It
goes in the timer's log line (`fix`) and in the README. The verb answers `library-fetch-no-grant`.
- T7 and T9 run the real verbs (dewey-0864, ruled by sage-2947: no SQL staging; replaces the
staged state in cefebf65b). Until row 285 lands, the test passes its own definitions; once it lands
the real chief definition carries gitea. Whichever of 285 and 286 lands second rebases and reruns
library and bus whole (sage-2947). The chief's grant goes through decision.raise and the human's yes against fake-gitea-api.mjs. The test's own
definitions give chief-of-staff a gitea credential, as gitea-grant.test.mjs gives coder one. The
real roles/chief-of-staff.json has `credentials: []`, so a live chief can't get one before C2-21.
- Revoked: `grants.revoke`, then the row is gone and the fetch refuses.
- Fired: `instance.fire` can't fire the launch.by chief. Only the launch.by role calls it, and it
refuses its own name (`organization-instance-referenced`, broker.mjs `#chiefLifecycle`). So the
test's launch.by is `boss` (definition pm, the chief's authority), and boss fires the one listed
chief-of-staff instance. Step G deletes the row (row 281), `roles.chief` stays, the fetch refuses.
Only launch.by may call instance.fire (`role-not-chief`, broker.mjs:4308 at 94c33a43c) and it
refuses its own name (:4335), so this is the only fired chief the verb allows. Accepted by
sage-2951 as brief owner and read the same way in dewey-0869.
- T9's revoked case runs `grants.revoke` on the runtime's own data root and store, between starts.
T9's runtime gets a scratch roles/ whose chief-of-staff carries `{service: gitea}`, as row 285
ships it (case2-rows.md:1823-1824), so its definitions match the grant's (dewey-0869). After a
rebase onto 285 the copy needs no edit.
- Delisted with the row still there, a `fire.stopped` with no `fire.done`, held, two chiefs and
another project stay unit checks on the choice function with SQL fixtures.
- "Another uid" in T5: the suite can't chown, so a PATH `stat` shim reports uid+1 for the open file.
The real `id -u` compare is covered only through that shim (dewey-0864).
- Two listed chiefs, or none listed, refuse `library-fetch-no-grant` (T8).
- The race fetch inside `push()` takes sync's `running` guard (dewey-0864 R1, in this row per
sage-2947). While a sync of the mirror runs it refuses `library-sync-busy`, fetches nothing, and
the caller writes again. Test: "race fetch: while a sync of the mirror runs". Its sync fetch is a
git alias that touches a marker, then waits for a release file. The push starts after the marker
exists and the release comes after the refusal, so nothing depends on timing (dewey-0869).
- The slot at 0000: T9 covers the revoked case at runtime. Fired and held refuse inside the choice
function, which takes no path and opens no file. `sync` with any `{ refused }` runs no git (library
test, valid slot present).
- First-run reds in the new tests are mine to fix in setup and report afterwards (mos-1272).
- The chief's evidence is any gitea grant event naming the chief, of any action (grant.applied,
grant.revoked and the rest), per the plan. The spend event names no agent, so it doesn't count.
Test map:
- library sync.test.mjs: argv (push), T1, T2+T3, T4 (dead remote, hook, wrong token), refused or
unsafe credential runs no git, T10, fetch credential and state with N1/T12, T5+T5b.
- library sync.test.mjs also: race fetch busy (R1).
- bus library-credential.test.mjs: T6, T7 (real revoke and fire), T7 choice checks, T8, departure,
T9 runtime (real grant, chief file and user via timer and verb; real revoke, slot 0000: no git,
log `fix`, state `credential: null`).
- webby-0151 R3: T9 reads `library.status` for `credential` and `lastError`.
- T11 token search: T1 scans the data root and every file but the seat's; T9 scans the log lines.
The gate's output search uses the fixture tokens `fixture-token-*-made-up-00{42..49}`.
Mutants (each must die on a semantic assertion):
- M1: `+` before the push refspec in `syncCommand`. Expected to fail: the argv test, and T2 (the
forced push lands, so `raced` is never reported and her commit is gone).
- M2: drop `test "$1" = "$path"` from askpass. Expected to fail: T5b (the helper prints the checked
file's token).
## r2 rebase (sage-3579)
Sage ruled that 286 now goes before 258, because 222 is its only after row. Branch ludwig/row286-r2
rebases b9506b352 (base 94c33a43c) onto origin/refactor 45dca69f6. The rebase had no conflicts.
- Range-diff 94c33a43c..b9506b352 against 45dca69f6..r2: all 11 commits are `=`, so no patch
changed.
- Rows 254 (331597709) and 268 (c27207f6e) were already in the old base 94c33a43c. Between the two
bases nothing changed under packages/library.
- Paths the two test files import or read, diffed 94c33a43c..45dca69f6: bus broker.mjs, runtime.mjs
and store.mjs changed. None of the others changed: library/*, bus credentials, gitea-grant,
mapping, mirror, reader, survey, sync, the fake-gitea-api, helpers and host-fixtures modules,
business helpers (rolesCopy, systemFor), project git, seat checkout and fake-gitea, and roles/.
- broker.mjs: the constructor gains `accessStamp` and `compactions`, both defaulting to null, and
my tests pass neither. No base hunk falls in the fire job, the revoke job or the instance.fire
verb. Old :4308/:4335 are now :4852/:4879, with the same text. The new console-cap check refuses
a non-console session only on CONSOLE_VERBS, and the library verbs are not among them. The
request path's access re-read applies only to `s.user` sessions, and my tests open none.
- runtime.mjs: consoleOwners (default []), the access timer, compactions and the session-clear
hooks. The Credentials and giteaStart wiring that T9 uses is unchanged.
- store.mjs: schema 3l to 3n (row 206 thread_shares, row 271 session_ops and message_cancels).
Each test opens a fresh Store, and none pins a schema version or step count.
- Hash pins: no test or script line pairs a 64-hex value with a path I change. The positive
control finds 64-hex pins in, for example, account-migration.test.mjs.
- Row 285 has not landed. roles/chief-of-staff.json at 45dca69f6 still names no gitea credential,
so T9 keeps its scratch roles copy (sage-2947).
- sage-3589 freezes stack-release.sh, webui-service.sh, bus-service.sh, stack-copy.sh and common.sh.
This row changes none of them.
- Still to run, on CLEAR: library and bus whole, every scripts/test-*.sh, M1 and M2, and the token
search, all on r2.
+10
View File
@@ -0,0 +1,10 @@
# Magica
Builder seat, Codex gpt-6.1-sol, started by Sage under Q246 and mos-1576. Takes over row 285 (C2-08b, #1790) from
Scrooge's pushed `scrooge/row285-r2` 53db6b7ca and rebases it onto refactor. Scrooge's rulings and notes in
agents/scrooge/work/queue-285/BUILD.md bind this seat.
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 `magica/*` branches through the repository credential helper (mos-0981), never `refactor`,
`main` or another seat's branch. Poe gives the first Codex review and Webby the Opus 5.5 landing review (mos-1542).
Registered by Sage on 2026-10-24 so the queue can name the seat as row owner (store.mjs isSeatDir).
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,891 @@
0f7caa5b7dc81530cec8ef607f099725085d7819beeed15c9a309a857c1630aa agents/magica/work/queue-285/BUILD.md
04069ad089500536883425c2f75d1c37f83d9010c9ff15ac4c8250a2a67cb0bf agents/magica/work/queue-285/REVIEW.md
8fe015d211223c6115b6e2eeb72890c0c22ea35b4fd49ab1afbf7a8a92b21f7c agents/magica/work/queue-285/b1-base-diff.txt
7ea368e7b92e343e9f59a42e22be0fe63f78b8c4505ae4541038af2ae0bdc211 agents/magica/work/queue-285/b1-base-word-diff.txt
774e7126acb4f5c61f413089cb64ca00dd5b1d4dfa5d0945bff2043b04606c68 agents/magica/work/queue-285/b1-incremental-word-diff.txt
53effd50164c4c3c912488b2c6bc7cdcc579bea532eeb177d02614b4ac1e7544 agents/magica/work/queue-285/final-base-word-diffs.txt
7a531c9e68a3c38ae28dc7ab32ef8c37a9369e21ec6d89a7d0b99bfc737a2cc8 agents/magica/work/queue-285/final-product-diff.txt
7372c74641a0ad990fb025aaf0f18f1882901f5844b948ded10a0e5b97b00653 agents/magica/work/queue-285/fix-r4/citation-green.log
9c9c5f6f3da7f1528e64a060b7fe149d407721e26571de3422210b5daed01bb0 agents/magica/work/queue-285/fix-r4/data-fix-base-word-diffs.txt
962da7800285d6028bad3720786170b280f90ff20f63f94cb0505c07af43c2f8 agents/magica/work/queue-285/fix-r4/harness-green.log
41d38e4bd8f34d6e94c3a28996f9be740f3f4e60faf9c80bf48c9b6fb507f832 agents/magica/work/queue-285/fix-r4/launcher-green.log
e495167a9cb2c22e62ece9c8bbd17e2c81f026346009d10626e0d0ad51e2cd43 agents/magica/work/queue-285/fix-r4/new-tests-red.log
a56a323d0ce0a485a4622013baa33f4cfec1c8f3364eebdbbae50546408b3b6e agents/magica/work/queue-285/fix-r4/product-green.log
fa27ed9aa59296c8f830fdf88683a0cefed54d805a255ef293865d0a55d37c6f agents/magica/work/queue-285/fix-r4/tmpdir.txt
acb10dbbdaecab898f69a455f5bafdedfa9de2ab429dfa91b46cb61444bc1e22 agents/magica/work/queue-285/gate-r4-collect/FINAL-COUNTS.txt
3cbd7a131f72c29fb7995f929fd927320174b0e8f44e9084620971c7136f94f8 agents/magica/work/queue-285/gate-r4-collect/FINAL-REDS.txt
ad3bbb579082673e9aa522c563e034cfe6b4d2e9ca1a8f3698da3c4239805b3c agents/magica/work/queue-285/gate-r4-collect/all-red-files.txt
ab145f36910c8ab0d5b87e6e5f722c1c4e5e3a54ea15321318aaf56dcd4ff919 agents/magica/work/queue-285/gate-r4-collect/allowed-reds.txt
8fa384ee8e7340deb2c54653124347cc548f480a8e459de2cc8dc7733e0a9d88 agents/magica/work/queue-285/gate-r4-collect/bus/access-revoke.test.mjs.log
2e8ccae583cc8aa51eb9e2735059112d3bbc0ffb4567e51f5dc0e56ec7f0f2c5 agents/magica/work/queue-285/gate-r4-collect/bus/account-migration.test.mjs.log
d1eebb9c0c5b9b764df9536fef12e8ae6dc7d540d542a1042a744571893fce2f agents/magica/work/queue-285/gate-r4-collect/bus/address.test.mjs.log
e5276c9b114413b047b096171cbecc2a916c3bfb66e0b710473afd7aff37983f agents/magica/work/queue-285/gate-r4-collect/bus/agents.test.mjs.log
633e516455c7aae5bef51d13d7898d5613500aae1c7982dcaf0e2e55b89baa6c agents/magica/work/queue-285/gate-r4-collect/bus/approval-binding.test.mjs.log
31bbf97c09676378e2cd2831d512159f0ec7d4c749a9c7108f6cecee8b82c933 agents/magica/work/queue-285/gate-r4-collect/bus/broker.test.mjs.log
9880c8b5c154fa75743f080411a665465bcf628004b8366ba36af17d66c4386b agents/magica/work/queue-285/gate-r4-collect/bus/business.test.mjs.log
53f125c048700f0de7397d395a18ae7e08b74ee4e70a6b480942d8d23bfc27e0 agents/magica/work/queue-285/gate-r4-collect/bus/channel-proof.test.mjs.log
1fac1f31aede9faa2e79f255b0b6c89b5eaef01f6f23d06294d4130a0467dbe5 agents/magica/work/queue-285/gate-r4-collect/bus/chief-of-staff.test.mjs.log
6202c575549449212cb99100dba1727975c7ff11c9db9d79813918a25f6de513 agents/magica/work/queue-285/gate-r4-collect/bus/citation-availability.test.mjs.log
70e107320e0166cf53ab9efcac876ed57b6d40eeb2d43854caa2ce3c7b83d762 agents/magica/work/queue-285/gate-r4-collect/bus/citation-guard.test.mjs.log
9626e01de16bba9e4c7d9f124d5a10456bdf24916923021eb36d4a13fa0c24f2 agents/magica/work/queue-285/gate-r4-collect/bus/citation-runtime.test.mjs.log
ce3bfe1e4bc9ee680f3018bae196d1d3200b48ddb3d3201d5f7f96513829a259 agents/magica/work/queue-285/gate-r4-collect/bus/comment-cursors.test.mjs.log
36e6add82d7da0de154d21fa1ab6951b1a48cd42d7465708ce498553e3ec5329 agents/magica/work/queue-285/gate-r4-collect/bus/comment-migration.test.mjs.log
909ceca801a9f04ca99f156773920feb18d38b632901433d35b3e08038c47860 agents/magica/work/queue-285/gate-r4-collect/bus/console-decide.test.mjs.log
08c5d6bdf51a9c7854f96708141f01d0bd3f0d3571a16de131c9fe7f42256803 agents/magica/work/queue-285/gate-r4-collect/bus/creative.test.mjs.log
f9c2621f3ec31a6fcebffc0b206f4b6137572db0a9c6c0787600a5c3b9a5a56d agents/magica/work/queue-285/gate-r4-collect/bus/credential-claim.test.mjs.log
b4cd0bffe87b1f304fe25dbca4d0e1b9da073636d001ccf0a6eafba3b347361d agents/magica/work/queue-285/gate-r4-collect/bus/credential-status.test.mjs.log
1a4d1842b6a7a1a8e43ac56c51e8585e6c6148bf4b20d988acdb68c828366cb6 agents/magica/work/queue-285/gate-r4-collect/bus/credential-store.test.mjs.log
3c91d51794bfbbc158b5474924f4e0bf144632b07278e9a7e7e581c535c51613 agents/magica/work/queue-285/gate-r4-collect/bus/credential-verbs.test.mjs.log
5c8b0cf96dedf10a531e4f7b561be7699f76cb539181d9f267f2bc4afa162c2d agents/magica/work/queue-285/gate-r4-collect/bus/credentials.test.mjs.log
75cc4bb76f3f24db23641e52c0bf536ec5f3bf45d7785781d71e10742181fd67 agents/magica/work/queue-285/gate-r4-collect/bus/csuite-messaging.test.mjs.log
f0ed6f2ff995880be3f023ef56bdc56c765888a029143bf2addaac494181401a agents/magica/work/queue-285/gate-r4-collect/bus/daily-quota-runtime.test.mjs.log
c49f610ff33cddd95542d2b98190febd42f390ab543a1b8ff4072eb28f6b1ece agents/magica/work/queue-285/gate-r4-collect/bus/decision-close.test.mjs.log
14e93bcf5605adaeb1b8c07a09132eb021d997cd89dbb2b432ef1d61cda35d5a agents/magica/work/queue-285/gate-r4-collect/bus/decision-route.test.mjs.log
3fc65890bb8609e42ffae4ddc6fca06911d5896274ec7c566a4efd80646f7e9d agents/magica/work/queue-285/gate-r4-collect/bus/decisions.test.mjs.log
53c8f0e07391cc2a7c0a5b1e98a50a39629557506d9765a05a7442afe2cac307 agents/magica/work/queue-285/gate-r4-collect/bus/end-launch.test.mjs.log
0e148ab4405bb2ef5621afac5ae841e191268e2af98ac8db0fcaa75022a9e609 agents/magica/work/queue-285/gate-r4-collect/bus/fire-revokes-grants.test.mjs.log
baefbf89713fb654a2c7e4996c050a9a8111fcc7a890eb231596f66f0aa45d25 agents/magica/work/queue-285/gate-r4-collect/bus/gitea-grant-docker.test.mjs.log
c71bb26074541ea47bd2bb470a0a2f2b331b64d93ff2a570852ae34023a6d93a agents/magica/work/queue-285/gate-r4-collect/bus/gitea-grant.test.mjs.log
f4ed7cf236ea25408654607c6b6d8b4dd4f13f43461784fb3f189ca1eba11db9 agents/magica/work/queue-285/gate-r4-collect/bus/gitea-migration.test.mjs.log
caa8c827e4d2b52a7748cac2c48715098173dcd9fe2f064d433d0518bdf26ce5 agents/magica/work/queue-285/gate-r4-collect/bus/grant-enroll.test.mjs.log
48f3e5a541c505090576ed81e50f7c4e0b766e4f5420c3350c405cd11117df1c agents/magica/work/queue-285/gate-r4-collect/bus/grant-executor.test.mjs.log
472555ac19aa87e720015a6668398cece90bb3a3eaaf5a4190b1baef7b0f61fa agents/magica/work/queue-285/gate-r4-collect/bus/grant-host.test.mjs.log
6d1cffb7ff723026d0dff55e0a293a5e209f598f675c04c5309cb91a4dd098a8 agents/magica/work/queue-285/gate-r4-collect/bus/grant-migration.test.mjs.log
7bc1531725b891305fffc521ab79db14a4977bcb05c05f0cebae8699899eeb07 agents/magica/work/queue-285/gate-r4-collect/bus/grant-scope-runtime.test.mjs.log
b6996ec19028c81fdcf584b0f76556a97fbfbb4c1681bef4cf08fa3fb3251c6f agents/magica/work/queue-285/gate-r4-collect/bus/grant-scope.test.mjs.log
2980c8c42ef61b2822173d3f721bc5206a128b1356afcfeb9066483afe95ef89 agents/magica/work/queue-285/gate-r4-collect/bus/hard-waits.test.mjs.log
125b72702751fc0433ad4eab85b0086402689b1a8c5306210b01485ab0e08791 agents/magica/work/queue-285/gate-r4-collect/bus/host-run.test.mjs.log
2a93ea86cc9417161c8528329274386fa263d5dc9d76e2381dda09c6b8c98787 agents/magica/work/queue-285/gate-r4-collect/bus/host-tools.test.mjs.log
fce3e1c743f6690d5a10b07eb5cc19159da0acdc60190587b8b53291a2bee8d3 agents/magica/work/queue-285/gate-r4-collect/bus/human.test.mjs.log
e97463f3705aa86d1b8d3bdab797ca9f0af4a249d193d1b4e7aa9c344d6a90a3 agents/magica/work/queue-285/gate-r4-collect/bus/instances-verb.test.mjs.log
103cb1c53148c538540600b223381a22c4a20dcaaf5cc9f8b253e20e3864b66f agents/magica/work/queue-285/gate-r4-collect/bus/interpreter.test.mjs.log
2f0d2627a1f781e8b5496093f255ebaea9a5fa70e9e049a71286f7a3c6ae989f agents/magica/work/queue-285/gate-r4-collect/bus/land.test.mjs.log
69b16fec4978aea5a9a2f5cc7706c38261cb1489e3d2a0a64aff4c2cd57d5faf agents/magica/work/queue-285/gate-r4-collect/bus/launch-notice.test.mjs.log
63fb77e6a24a6cf4e660d88e7a405f973f0f51d59753fe99092f834beb241a09 agents/magica/work/queue-285/gate-r4-collect/bus/launcher-released.test.mjs.log
1b2a4594098cbdc5e6cd9136dc3726333afef93586776b0aaa4ba76568038399 agents/magica/work/queue-285/gate-r4-collect/bus/library-sync.test.mjs.log
4ab3898668c4f72eca47fdffb7ce3540b8b65115fc9bbba23a4e2292dcda857a agents/magica/work/queue-285/gate-r4-collect/bus/library.test.mjs.log
e891028488f5b5bd1e168f5d3fb6d23524d9cd6d1e8f8b02fb8e2c09a66df190 agents/magica/work/queue-285/gate-r4-collect/bus/lifecycle-revoke.test.mjs.log
fe65f6b3e137e12b930945861fbd9f378e7458fbbbac8d41047b7d575a6b11a9 agents/magica/work/queue-285/gate-r4-collect/bus/lifecycle-verbs.test.mjs.log
250d26c11642b043334417627dd113cef88d202dd27d411ebf39d2ae938ca489 agents/magica/work/queue-285/gate-r4-collect/bus/limit-checks.test.mjs.log
e2fcf9b930620c6580e6d49543e4ba46db6851b2b5253d97161efbc654d4eba7 agents/magica/work/queue-285/gate-r4-collect/bus/limit-stop.test.mjs.log
6caaa97b3dbfb0446b36600f05f958ac1c2d69c1f65cb463c13e16ad50e8e3c1 agents/magica/work/queue-285/gate-r4-collect/bus/limits-runtime.test.mjs.log
612000edd51a3aac507eab1b6b824ff52f9f1136e86478c2f9757b990fc8c9a8 agents/magica/work/queue-285/gate-r4-collect/bus/limits.test.mjs.log
53be4dceb6d5ec741d1af2e3e2b3982a2c5ce7288ff5f5060e43e2e9ab9ebf88 agents/magica/work/queue-285/gate-r4-collect/bus/message-citation.test.mjs.log
c33d9ae1847af596ffa2174290ba816a6d917dd37e986b1e1e5e44d20479f207 agents/magica/work/queue-285/gate-r4-collect/bus/message-filter.test.mjs.log
71491e9dfab96f7774c5ab09f11e2f6416a09b3cf9b3279dafc61ea4733819b6 agents/magica/work/queue-285/gate-r4-collect/bus/messages.test.mjs.log
9d6315b85b0aa34ca52eda1d7eb0f0894c3f290e03a3fe3f3f086c1b9e31a772 agents/magica/work/queue-285/gate-r4-collect/bus/messaging.test.mjs.log
b2b6b920a936c15fa4f07509ce04bd6bc9021dc645eb452674ae076882bdfae1 agents/magica/work/queue-285/gate-r4-collect/bus/name-migration.test.mjs.log
5dd20bde0ef52b3ccaf43a2d40a7df4e164b80424dee8e95652d57b9ee12a615 agents/magica/work/queue-285/gate-r4-collect/bus/names.test.mjs.log
cb17f0c8e1a5cf3cc5a2632be0be7f650b2bb8bfd44a15863f554dc6875bef4c agents/magica/work/queue-285/gate-r4-collect/bus/peer-transport.test.mjs.log
d71b96d5470e01f8c581e8ab0a3b2f43f297f8c1470b6cc05c4e889b6c807fdc agents/magica/work/queue-285/gate-r4-collect/bus/peercred.test.mjs.log
2c139f7411f8907a34da17cc542f64857db2453c73e13ff4e21ae6ce8ac3fb74 agents/magica/work/queue-285/gate-r4-collect/bus/plugins-verb.test.mjs.log
62c11085da98c8337a9d7dd9bceb51f509cdd7b90f61932adfc8c3b610a0f9e5 agents/magica/work/queue-285/gate-r4-collect/bus/principal.test.mjs.log
cbda24869262c45d08619e5485076699e126e2cd4eca15d911ba10ecbc656b7a agents/magica/work/queue-285/gate-r4-collect/bus/process.test.mjs.log
663508f9a4c3a9657ccceba5bb61d17041f15059d51d045e0d68cc5371f2ca21 agents/magica/work/queue-285/gate-r4-collect/bus/processing-runtime.test.mjs.log
6cd0d914c8956080a26ec6bee0fea72296be413a14633354296e7e5c05b572de agents/magica/work/queue-285/gate-r4-collect/bus/processing-timeout.test.mjs.log
b92474344d72a8bbe3614fad9b45e1a978348aa3efaadfe0d889ee19b4247bec agents/magica/work/queue-285/gate-r4-collect/bus/processing-web.test.mjs.log
9a749c4003b6636452a04a57997141c0a32c9ea48f0572071a5c4e96b2042d23 agents/magica/work/queue-285/gate-r4-collect/bus/processing.test.mjs.log
8c914a20a33d7c6b59ea7d6fd982ef756b4b88c65402e4db82116e91ac470a65 agents/magica/work/queue-285/gate-r4-collect/bus/project-await.test.mjs.log
fec12c6a6063a3686041c0e2085a184baf3bde806e0cd2efe2f3512c5646133f agents/magica/work/queue-285/gate-r4-collect/bus/project-files.test.mjs.log
2db6ce2d868da66852062696c8a840fa5a676f7b0dd2e648ad9da34db45c97d0 agents/magica/work/queue-285/gate-r4-collect/bus/project-runtime.test.mjs.log
d9b606efd79461d7e41ea5cc3e6b9fe734c7cb179a52100ed41f367c8bb72b15 agents/magica/work/queue-285/gate-r4-collect/bus/publish.test.mjs.log
946f97e12856d40dd8f1b0fb0599865b42149604db3a5107538009ce527d54f6 agents/magica/work/queue-285/gate-r4-collect/bus/reload.test.mjs.log
f334fa9666b4d6ad8355c8df6cc6acfd69fe72a5071be0031e6482f394b5f72a agents/magica/work/queue-285/gate-r4-collect/bus/replies.test.mjs.log
7d00afc9365f0df7bfc4a6ef72fc13a62c69afa2e965cc50fc4cc9d6b0d7e5df agents/magica/work/queue-285/gate-r4-collect/bus/requirements.test.mjs.log
6ca9fff862a4b0b65a5962c46ea443d978aa7a3610c5b375c937bd6554bda874 agents/magica/work/queue-285/gate-r4-collect/bus/review.test.mjs.log
25c11582fa80847a4ecb0861157cd0ae14947ecbf741c2b8cfac6604c5537cfb agents/magica/work/queue-285/gate-r4-collect/bus/revoke-window.test.mjs.log
b5abd0a0dbe383382303ffa50284beb76c736fb2288a2db3de3386e9e79656f0 agents/magica/work/queue-285/gate-r4-collect/bus/rooms.test.mjs.log
b7a2f7855a3a77fdc9e6209d88bd3eeffafb79801adaa63d9f466c7060497095 agents/magica/work/queue-285/gate-r4-collect/bus/routes-verb.test.mjs.log
fd35c2917f7703162d61ccfe93a00d9c61d52b861b3a069c3967641085b42f23 agents/magica/work/queue-285/gate-r4-collect/bus/schema.test.mjs.log
bdddd8aca4911f1f7cffbf3635aaaf2ba8a405bca89a68b5377fb828f0c8b660 agents/magica/work/queue-285/gate-r4-collect/bus/session-clear.test.mjs.log
53116ee09f71522ec154bcdc2a89542a39039e08e9932f79cdbc96698d2f19f2 agents/magica/work/queue-285/gate-r4-collect/bus/session-compactions.test.mjs.log
e2fc0905991cd8e88009776c48e1873dbe1870b100fe6cdedb1b2547b0abf032 agents/magica/work/queue-285/gate-r4-collect/bus/sessions.test.mjs.log
453e9cfb7614a1079ba79eb6e594ffde43ad82228778214c5c3989b8c754c128 agents/magica/work/queue-285/gate-r4-collect/bus/single-use.test.mjs.log
2a08f81797f3b94a8f1355ed66b122e74bb0030779a075690ae0daad11a4f258 agents/magica/work/queue-285/gate-r4-collect/bus/spec-migration.test.mjs.log
9d41b431852372cc359c7eed1b8ac4897a440ebaa2917723351215478497a8b0 agents/magica/work/queue-285/gate-r4-collect/bus/spec-review.test.mjs.log
66967a35ff979979b48c90cf199009ac1b9006078f0096a886115f5bdf351101 agents/magica/work/queue-285/gate-r4-collect/bus/spec-socket.test.mjs.log
f0b464dc3e7cc35fcfcdf0d9425f1ddf5e9892c1b00db6ee90e9352ced95c7eb agents/magica/work/queue-285/gate-r4-collect/bus/spec.test.mjs.log
6df3497357e590cad2c8a8d0527a572acd048c44446d172a0ff85e928c58820b agents/magica/work/queue-285/gate-r4-collect/bus/staff-request.test.mjs.log
7ab5db4e6b8f780bb0000e2e96afc2ee9681a731ed41ec40d0f0a9f6039b2227 agents/magica/work/queue-285/gate-r4-collect/bus/state.test.mjs.log
e7314d325c922e5f5b017c407620dccecb972d77d60136727f10b74f896c4bef agents/magica/work/queue-285/gate-r4-collect/bus/store.test.mjs.log
cb89b8d82a433f2feec54aa77e30cc12c5ee6338dbe33ce21d72d6a92f675111 agents/magica/work/queue-285/gate-r4-collect/bus/task-page.test.mjs.log
743848c9fce9bc10acc37766f51b2c18294d74ce88e1b570e3e51c0b2ed1194b agents/magica/work/queue-285/gate-r4-collect/bus/task-read.test.mjs.log
4dfced1f1f8bfc7e208ca2420156b28d997b2606244f3c51ceba54a3f6dfaa8d agents/magica/work/queue-285/gate-r4-collect/bus/tasks.test.mjs.log
5074aae295a408fd9875045ebd6465a0016984ee1be7b1272072d0f94d01f5a7 agents/magica/work/queue-285/gate-r4-collect/bus/tester-threads.test.mjs.log
b0aae533ba475bb62fea5b5ee1f7df0267eb9fa6dee0a5fe5860bec9d0b2ef80 agents/magica/work/queue-285/gate-r4-collect/bus/tester-writes.test.mjs.log
122397ae2cda28108f36122e6a9940e5183eb0a59f1a130ce50705225fc3126c agents/magica/work/queue-285/gate-r4-collect/bus/tester.test.mjs.log
8b7d43f83d838bedbaf4b02e954db6735bdbd4fd484075320c253f2a361a0952 agents/magica/work/queue-285/gate-r4-collect/bus/thread-claims.test.mjs.log
1c8adc84ffb80546f492817cd0f320f140ddd8aeb992d3932c9a6cac7adcbea1 agents/magica/work/queue-285/gate-r4-collect/bus/thread-migration.test.mjs.log
65725df7873320df83604a8187e02e71759eed77bed824d998bfd78e4e4edb65 agents/magica/work/queue-285/gate-r4-collect/bus/thread-shares.test.mjs.log
d230f21aada0c1f4e8f3e9eb467b500dd86d3725311daef53a53b5885ef363fc agents/magica/work/queue-285/gate-r4-collect/bus/threads.test.mjs.log
1a1365b2973ee37294c2b9235ee18d7bed3149e3c1d651175c0c96020e87db40 agents/magica/work/queue-285/gate-r4-collect/bus/transport.test.mjs.log
b588d0fe2bef2ee67e83b3e8421d336f158373d43f718d168cf06a65311c256c agents/magica/work/queue-285/gate-r4-collect/bus/usage-broker.test.mjs.log
82df952270786ea3a6b04be1564fbb76d6bb456be4b1eef94850cb5544b0ea7f agents/magica/work/queue-285/gate-r4-collect/bus/usage-migration.test.mjs.log
8354f0ff91acb5c92e4817e64c4b198f618f8cbc6b50be997ec79bc2f9c1ff6b agents/magica/work/queue-285/gate-r4-collect/bus/usage-runtime.test.mjs.log
b2c469fa1ed6683a5ff762b7125da284e1956fa55c3b3855cfb66f1f57d74de9 agents/magica/work/queue-285/gate-r4-collect/bus/usage.test.mjs.log
2577b4fbf5504fb14739b337b872cba239baf07f8533ca57c2f1a85063cbe762 agents/magica/work/queue-285/gate-r4-collect/bus/user-principal.test.mjs.log
3e4e7d41763998cc4ca257d73dc6bc6e99f594c362653f12d7c7459232c42de1 agents/magica/work/queue-285/gate-r4-collect/bus/viewer.test.mjs.log
ec558c17bb3d0629718bbd77af1855f4e13308128abc7ee7b1b4f3ff7c5652f9 agents/magica/work/queue-285/gate-r4-collect/bus/web.test.mjs.log
9e89acc41ac56d95628f5ac98bc47d26b26ac942b6c376f75ee28e8a39cf0f77 agents/magica/work/queue-285/gate-r4-collect/bus/workflow-roles.test.mjs.log
4d8d499aa27b7d5c7e37a3a05d28e49683a05da0976cf13af1b066758f02ff87 agents/magica/work/queue-285/gate-r4-collect/business/access-levels.test.mjs.log
320e9beecb926e3a3078556eb4f78e421df377913354babd14ffed361bcb764f agents/magica/work/queue-285/gate-r4-collect/business/access.test.mjs.log
e9892cd8cd2c773d4b99b6fab9bf09821642f4ae31306daaae0f3e80699d3247 agents/magica/work/queue-285/gate-r4-collect/business/agent-identity.test.mjs.log
6ad15b6c153aa0ee3c672c32669d4a76861274105922875beea06c32d45a5ecf agents/magica/work/queue-285/gate-r4-collect/business/assistant.test.mjs.log
74bc1ece3efe91fb11b24f6c7e66c211454b01ad21a5d86168264dbbf1d46944 agents/magica/work/queue-285/gate-r4-collect/business/business.test.mjs.log
35e3ceba1bb5266df8147b341c94efacd797be9b02b7159eff78b2c6e3346c0e agents/magica/work/queue-285/gate-r4-collect/business/case1-business-file.test.mjs.log
c9bcb0cca5bbd2c1aa3d63168d9a274bcf90f7861b542a8c3792253afa453445 agents/magica/work/queue-285/gate-r4-collect/business/case1-project-key.test.mjs.log
10bb1c7e6ab123029cd335f2a53f14cff1a29259b83e9eb374e907927386da40 agents/magica/work/queue-285/gate-r4-collect/business/chief-library-credentials.test.mjs.log
4024582a9f567fab3fb93631661d9c737b2efb7b08b519898d600ff5fa4dba41 agents/magica/work/queue-285/gate-r4-collect/business/chief-of-staff.test.mjs.log
05814d03c8c22bd676063883a9c89d87784d113db4dc254d832593c8f6027442 agents/magica/work/queue-285/gate-r4-collect/business/cli.test.mjs.log
967f2f6bff890fabaaee8a7a26a272909ba34f8f33f82790126aa5d0340f96fd agents/magica/work/queue-285/gate-r4-collect/business/credentials.test.mjs.log
a56b0830f04da2b1196cfff8434c17ec0692674e04db309209c6165d1de6c204 agents/magica/work/queue-285/gate-r4-collect/business/csuite.test.mjs.log
47578c7da20c8a70b0fbd210d3adf42ac92f5c98ec4275cb560220e5dd0cc667 agents/magica/work/queue-285/gate-r4-collect/business/grant-scope.test.mjs.log
ec30af0def5877e1d8863a1edf5470e29cdd359eb84923bb6e360fc9cd4caedf agents/magica/work/queue-285/gate-r4-collect/business/hard-waits.test.mjs.log
640508081b45d272ec018aa019f25e4f8e664748c608f38a6d852842f556c5fa agents/magica/work/queue-285/gate-r4-collect/business/hosts.test.mjs.log
6d4d584aec16f7f2867c5bc6f2244511136278ae67bad81b481e65edb680598a agents/magica/work/queue-285/gate-r4-collect/business/instance-settings.test.mjs.log
03de1d9cb7df27a865c6f4178ba7aef567185b9f6cf95ef0843ab7ba34d494d1 agents/magica/work/queue-285/gate-r4-collect/business/launch-settings.test.mjs.log
1bb90b5f3e00691ced80a704d9e93bb5919ca3347064f4ede8a64ae05abe92a1 agents/magica/work/queue-285/gate-r4-collect/business/library-projects-protected.test.mjs.log
59a50585220f28ab7a18c7f2d51cda8a341daa3b576408a93754547157da1f66 agents/magica/work/queue-285/gate-r4-collect/business/library-seats.test.mjs.log
6ee85180af130d03cc2ddc33bd881509800ab16fc362a436b72dc1d98b38f4cc agents/magica/work/queue-285/gate-r4-collect/business/lifecycle-settings.test.mjs.log
cca68f186ecf86ca21bbea1e6a88c88a718ab3837217e7e06d7ae319a7dca080 agents/magica/work/queue-285/gate-r4-collect/business/optional-tracker.test.mjs.log
c86e707d1bebc6f85d38c8a8880da6d1bf680962b0525bb8139faaee5bd6362f agents/magica/work/queue-285/gate-r4-collect/business/plugin-settings.test.mjs.log
e7fb4dd9710d361085db973ccc97330dcfba1b86bcb6d55e52b564616c080bd2 agents/magica/work/queue-285/gate-r4-collect/business/project-repo.test.mjs.log
d98131db3b9b5cb3bc979b32d3bbf24fee19ca9482e325f7050f54d038d140dc agents/magica/work/queue-285/gate-r4-collect/business/project.test.mjs.log
a4cba850b77200e3296d334a09af1a5a207a2288051912ece24aae2c10f6a336 agents/magica/work/queue-285/gate-r4-collect/business/record-grants.test.mjs.log
7c81d5572512fa280e93057fa041b9742bba2f1c97051877417b74dd3cf70133 agents/magica/work/queue-285/gate-r4-collect/business/reply-limits.test.mjs.log
539c4b5670c98fe51a07206bf9f562a04e0d0901f6e388f776af9ad167c8361a agents/magica/work/queue-285/gate-r4-collect/business/resolve.test.mjs.log
54e0dd6196bdd623cb6cd1844ad549dca66057e9589a456969d377d6540085f6 agents/magica/work/queue-285/gate-r4-collect/business/role.test.mjs.log
0450efbd5b6a8bd9ef705483192bfedb2a08f7ad19eb46090733a1173cde6a24 agents/magica/work/queue-285/gate-r4-collect/business/spec-review-contracts.test.mjs.log
d5e0d0449238302ea3a95319f69c3d37f61cd94f20d40d3efddd18383d9406fd agents/magica/work/queue-285/gate-r4-collect/business/token-limit-settings.test.mjs.log
51d8b6630c129de6a8035e227f8d052d7c54eee3d7fa9f96d6270203ad87fe6e agents/magica/work/queue-285/gate-r4-collect/business/vars.test.mjs.log
dd25c40cf658bf86576e140cf6aadf6bda3696bda9c10b865d8dba3097248d00 agents/magica/work/queue-285/gate-r4-collect/business/workflow-roles.test.mjs.log
b4be27463c5653da49629c821442e4a02ecf8ea74ee967266e8a2de5b9881a8d agents/magica/work/queue-285/gate-r4-collect/cli/access-boot.test.mjs.log
768a88f82948d2d76182aec41494317bf61a7770d032a877a83f6e68d2977e85 agents/magica/work/queue-285/gate-r4-collect/cli/access.test.mjs.log
a268078c5ee7f87f2f400fcfb8c9a8ae23b49ea0cfcd12d24efe1ec653584ce9 agents/magica/work/queue-285/gate-r4-collect/cli/app.test.mjs.log
cc991467a77653bf782d616c280b28e08ddb424b20b9e69b10dbc5f3467a3942 agents/magica/work/queue-285/gate-r4-collect/cli/boot-status.test.mjs.log
528f527ed6105aaf0372cd1cfba922d686ecc726c9d814dc2855d68e3356a63f agents/magica/work/queue-285/gate-r4-collect/cli/case1-accept.test.mjs.log
2184872af36f4d4d556fa5252c5673671e703d38b9e8ea6b68a61067d98c4061 agents/magica/work/queue-285/gate-r4-collect/cli/case1-hostcheck.test.mjs.log
31402532c82a1e31f66ab137cd117b59b8e1166c6708804440b33ef1ba1ead6c agents/magica/work/queue-285/gate-r4-collect/cli/case2-install.test.mjs.log
da8937a055a90db43f1eb771d365de8ff884ef210e91ea1715ad2299ac37ae7d agents/magica/work/queue-285/gate-r4-collect/cli/case2-persona-import.test.mjs.log
28d10077a22416c76dd0fb28d0f53fc083f5db6304e2a850ee1f8d67803a77ba agents/magica/work/queue-285/gate-r4-collect/cli/case2-unit.test.mjs.log
78aebd2ab2a1da7e91e1f5fef1ebdfcd7afb35c610b7267e47780f6044dc0007 agents/magica/work/queue-285/gate-r4-collect/cli/channel-cli.test.mjs.log
0f95569b928113808fe17a1ef454089e1f54a60c2b989ffc6aa3b488af7dbc5f agents/magica/work/queue-285/gate-r4-collect/cli/channel-recovery.test.mjs.log
9e45e456034e6a5be057e6bf12e6ec75285ef5148b094b110d58e764408e782e agents/magica/work/queue-285/gate-r4-collect/cli/cli.test.mjs.log
360bf318d489eb1cc37bcfbf8ac6ac4b20de57d614bf01142b76ae2975e0b791 agents/magica/work/queue-285/gate-r4-collect/cli/compactions-launch.test.mjs.log
24a61025c7d3e21f3cf866a2a14bb15126d5680195f4ca1090db8276f627ac92 agents/magica/work/queue-285/gate-r4-collect/cli/config.test.mjs.log
707bccbbb18e65268f228f61826f941fc70626510a5029afdc61bacbbc3a17c8 agents/magica/work/queue-285/gate-r4-collect/cli/credentials.test.mjs.log
910f78059e8e1decbce7e7e9c49da8448f9a3b6ccd74b3dc6e3a68d415a7c50c agents/magica/work/queue-285/gate-r4-collect/cli/federation-acceptance.test.mjs.log
d6ca83ef205b7ac02468c5bcfa798b6d648e6b7add6f658fa8afdc28fae69783 agents/magica/work/queue-285/gate-r4-collect/cli/follow.test.mjs.log
b0b160f368149b4b097251034326ab0e6b6ad296a43fb56fbf567e493d3998f4 agents/magica/work/queue-285/gate-r4-collect/cli/format.test.mjs.log
5c6e3d102f06cf1b97366c6ee9fed45fecd1ec08ab60e39dbcb546cdf0c3c3ab agents/magica/work/queue-285/gate-r4-collect/cli/gate-lane-auth.test.mjs.log
77b29c852415910b7dd83e60b2c9fe27f884998901fd5a3adad126272b3606c1 agents/magica/work/queue-285/gate-r4-collect/cli/gate-lane-fixtures.test.mjs.log
c91fc678ad0fadacdfc62e35846c16565a9154562c0c9aab76e22a9c83072987 agents/magica/work/queue-285/gate-r4-collect/cli/gate-lane-image.test.mjs.log
21e328979c43384917512acb1b323542eef06540e6bde64b622832f846550860 agents/magica/work/queue-285/gate-r4-collect/cli/gate-lane-state.test.mjs.log
43f4df9710c21137fd4abb55147d2b53c0e1d0e810c5c04728526a62985bc69c agents/magica/work/queue-285/gate-r4-collect/cli/gate-lane.test.mjs.log
10034128e981729899d46c70856d653be4320718617daa5e59855165aa96b113 agents/magica/work/queue-285/gate-r4-collect/cli/git-socket.test.mjs.log
5ad1c86535d914fbce7b2f79cb4a96cf3b20d229e0160ba028913f4da33c55bd agents/magica/work/queue-285/gate-r4-collect/cli/grants-scope.test.mjs.log
363d69e61d5ff516f2669957900872d0275ca98560fe59a46e3e5e61c25e3baf agents/magica/work/queue-285/gate-r4-collect/cli/grants.test.mjs.log
d69177952c1f90a61c6299b304c0c3a780773b136337085be55880522a4cbb6f agents/magica/work/queue-285/gate-r4-collect/cli/host.test.mjs.log
a0a4b0630e0b9388b2e7c7e73f09470833226265c1ca0bf0c2daf7541baea951 agents/magica/work/queue-285/gate-r4-collect/cli/hosts.test.mjs.log
036d5f4c6a6299902beb1083c99fae9b361cf8acd30c2c9c15f93181df4c75b0 agents/magica/work/queue-285/gate-r4-collect/cli/idle-stop-race.test.mjs.log
4e3fddb5e5ef7de7049e88330972f158d1fce415f78b9026c4cd8d094f0c9492 agents/magica/work/queue-285/gate-r4-collect/cli/instances.test.mjs.log
83cf17a9637567e8cb2af8b21291a4a8b7b080a81b25e8b28d96c3a41f3e6ba2 agents/magica/work/queue-285/gate-r4-collect/cli/launch-account.test.mjs.log
d88d6a4829deabca9a3684d05b8e9735b289a58250530d77b309bfb97de8cc7b agents/magica/work/queue-285/gate-r4-collect/cli/launch-limit-checks.test.mjs.log
d2de3f30d7c8828efefde07abdec219ccc866a21b25bc387c1fb6d03ae344cf3 agents/magica/work/queue-285/gate-r4-collect/cli/launch-limits.test.mjs.log
d82afe4c2c5ed778b320e054db060167a81f4ba2dd45fec55c0a0d1bd861b537 agents/magica/work/queue-285/gate-r4-collect/cli/launch-routes.test.mjs.log
aaacba374d85eca642f7c68af3de30c301384010974bc19952116622d8153e47 agents/magica/work/queue-285/gate-r4-collect/cli/launcher.test.mjs.log
52e42ebae861e21ddff31248e92139116dbc0065cf29de2d617491b592566dd4 agents/magica/work/queue-285/gate-r4-collect/cli/lifecycle.test.mjs.log
0fef5a4632857240742d4706dcc69fe8be43ab79ae9ec5f1181b101ce1f7627c agents/magica/work/queue-285/gate-r4-collect/cli/limits-tokens.test.mjs.log
a604a407a7db3bc61f52beb6e1b6502276c239e57b0bee34a5da908362d452eb agents/magica/work/queue-285/gate-r4-collect/cli/limits.test.mjs.log
65a5e1dbdbf8a5520509ae7c38183cc7652d93b6994ac54faf8e161cfe4ab0a3 agents/magica/work/queue-285/gate-r4-collect/cli/mark-read.test.mjs.log
427ba220891cedd53d92caaeb984486d47a142a548c34216e6538102550b68a2 agents/magica/work/queue-285/gate-r4-collect/cli/names.test.mjs.log
7b2c5aee04ba1843f5a78da2f885667d9ac8d6ea1a0d058eaeed703533ec9ce7 agents/magica/work/queue-285/gate-r4-collect/cli/notifier.test.mjs.log
a379554c780ddd856366796553a8d2157969ade446336e6df6cd40e7aaf872d2 agents/magica/work/queue-285/gate-r4-collect/cli/optional-tracker.test.mjs.log
45026d17870fec06e7c7d28d9c79407185d381db867425c6824b9578bc242bad agents/magica/work/queue-285/gate-r4-collect/cli/other-tree.test.mjs.log
3dfbe2910da3ddea011a832fdac4269f09d54bbc355c48c686b82e29a350ca61 agents/magica/work/queue-285/gate-r4-collect/cli/processing-cli.test.mjs.log
51c4a6b7f5ecda868ac65f5a9fc70cceae49cf37f1e41067dafb4ee835dc33a0 agents/magica/work/queue-285/gate-r4-collect/cli/project-name-repo.test.mjs.log
76a8ab69e0192cf4c470e6b9f732e0d1c976215fb911330b001239919fc4c537 agents/magica/work/queue-285/gate-r4-collect/cli/project.test.mjs.log
37f0035612ed5d42f5666bcbcc4c78688cc0c8d89cfaad33bcadf6f077048e94 agents/magica/work/queue-285/gate-r4-collect/cli/publish-socket.test.mjs.log
c0af95393e817444d392da8ae69f42a9084ec48b6d748107e2c6f4b119c6c7db agents/magica/work/queue-285/gate-r4-collect/cli/reply-limits.test.mjs.log
53d4891759dbbc32794b5ba2550dba2e3132c87ae1c719975a70cd4fc28e0253 agents/magica/work/queue-285/gate-r4-collect/cli/revoke-window.test.mjs.log
1793b0b6539a775466b39fddb1d6033b1408975b7cba792ceb53c5f49f5339f8 agents/magica/work/queue-285/gate-r4-collect/cli/session-clear.test.mjs.log
42bd370609f2be03af2b92af3151a95316a05a45b3ab075ea36e3c77629223b2 agents/magica/work/queue-285/gate-r4-collect/cli/session-cli.test.mjs.log
98940f194f73641faf9639f86500a41eff0ff262601be2ad658691ade0b63557 agents/magica/work/queue-285/gate-r4-collect/cli/session-launch.test.mjs.log
850d362199c1be564a06835a74a438aa71377d4496e62d86b3f0c8a22a198d3e agents/magica/work/queue-285/gate-r4-collect/cli/stack-copy.test.mjs.log
786305fccb1cb9d9f2e773d0eeef9304435e8a7c681963a4a2d7eca3c0c66c75 agents/magica/work/queue-285/gate-r4-collect/cli/stack-instances.test.mjs.log
7c817a07aa3f244f768902a5b2f8dcec4af45129f30ee1e3c3ee285fbafa7ef9 agents/magica/work/queue-285/gate-r4-collect/cli/stack-release-external.test.mjs.log
83a2b2ce6c77cf73212b8cedcd4ce508925f9ab8a0e868a946fd3714bc9861dd agents/magica/work/queue-285/gate-r4-collect/cli/stack-release.test.mjs.log
54446e68e53fa8b5d6f5c4849e0e56c236968eb8a770bdeaffcbe1783ea4ac77 agents/magica/work/queue-285/gate-r4-collect/cli/stack-release.test.mjs.retry-1800.log
f44942236a588133d842f5e383f55fc715bc8ab3671a1340b07cdb32a495efad agents/magica/work/queue-285/gate-r4-collect/cli/stack-upgrade.test.mjs.log
d104f4b4d74a4a274199a3a9f8bd238527fd0ff72f4cc6b03cbe4281b0736603 agents/magica/work/queue-285/gate-r4-collect/cli/tester-http.test.mjs.log
9e4a14522f8167c2fac591b4f96684845a6e23d6ae55e20ea44c19e298e2566d agents/magica/work/queue-285/gate-r4-collect/cli/tester-reads.test.mjs.log
1b5ccdbd6de9d6f88daecac4dc8659c9e8a2311a845f73425e3e9c1a1f4ce950 agents/magica/work/queue-285/gate-r4-collect/cli/tester-threads.test.mjs.log
5f535f7468fb0809ffd30cbb0fe20b75152e82af29ecddaf3ae1779cfecb7f62 agents/magica/work/queue-285/gate-r4-collect/cli/tester.test.mjs.log
907852840e76c6b8c81fc4aa833fa6900b6e0d210c0b612c07b5af0d36ed660f agents/magica/work/queue-285/gate-r4-collect/cli/thread-cli.test.mjs.log
7f0a077e6d5d17b0383e8c3c9d04e015a7c25343a18220e51a733d805e945517 agents/magica/work/queue-285/gate-r4-collect/cli/thread-launch.test.mjs.log
a7daf576845ad39e046a82990fb8e42e3c85503e6f530f05cd2e45a2c4a29ce5 agents/magica/work/queue-285/gate-r4-collect/cli/thread-revoke.test.mjs.log
2f5d3d7b5eb6f8bf8e6c5ec0de7d98aa8ffe79fc80a58bbf391845aa4f73b182 agents/magica/work/queue-285/gate-r4-collect/cli/trackers-boot.test.mjs.log
8200087293e60921637ac53df14b5bdaefb4b30008aa7d651741bc046f0e6003 agents/magica/work/queue-285/gate-r4-collect/cli/transport.test.mjs.log
f1012726dc436c14ec4ad72ea41b28ac5a6ad0f3922389d14126a43374542c4c agents/magica/work/queue-285/gate-r4-collect/cli/usage.test.mjs.log
8c75100a9cd8fd241e69e52d90049a20ab4f0ad2b189c0a0f5c6b2a169583666 agents/magica/work/queue-285/gate-r4-collect/cli/verbs.test.mjs.log
4972c0195ce08eb554e3736ac10081126cc0bb19332ef6b7e703de37e839cbec agents/magica/work/queue-285/gate-r4-collect/harness/bundle.test.mjs.log
600df22ea815da657be5fcd53ebaeef5088816c6905a52102ce5137361348abf agents/magica/work/queue-285/gate-r4-collect/harness/citation-runner.test.mjs.log
91444028fa1482db88037dfa8cb739ceffe29df826d498123a2b643585774ff2 agents/magica/work/queue-285/gate-r4-collect/harness/claude-gate.test.mjs.log
7fcf1ee724aaffd9eab682762ac8102c7df1d626fdfb5c2b3e47548697737de2 agents/magica/work/queue-285/gate-r4-collect/harness/claude-session.test.mjs.log
afac0949e828bb08cb1aa984aac2e580e15ab2616998a3f29e4fc277bc3089a2 agents/magica/work/queue-285/gate-r4-collect/harness/creative.test.mjs.log
c84e27a484ce925eeb813f6b631ecc4da0110df979f421dcb8890ced713793a2 agents/magica/work/queue-285/gate-r4-collect/harness/gate.test.mjs.log
876efa4f8a84fb8b2e9daf19f59d27335ddae2b0745a8a317c42a3edb1da35a6 agents/magica/work/queue-285/gate-r4-collect/harness/git-tools.test.mjs.log
72f34110bf46fdb5201e47d53bacad0942223c4dfe2ea915cbd4883435d4b03f agents/magica/work/queue-285/gate-r4-collect/harness/mcp-server.test.mjs.log
c141676f400e03231187ee5356316d0d001de44ba0192ebc9d4cd88826148bcd agents/magica/work/queue-285/gate-r4-collect/harness/pi-session.test.mjs.log
d835218873ae2c8b310f6b892af9ba8a64911b52167a9b25404393fdaa534fb2 agents/magica/work/queue-285/gate-r4-collect/harness/raise-domain.test.mjs.log
8ca027206a44c5ff110e050259ba855797e7b66903e7657af5dc4ff4189af426 agents/magica/work/queue-285/gate-r4-collect/harness/runner.test.mjs.log
e4ca5a9da218acc3bcf49f43f1e332760e21c81cf142f98f0e097f3d2a396327 agents/magica/work/queue-285/gate-r4-collect/harness/skills.test.mjs.log
2b2a2c7ca6b2c350e157e5fb6a8ee53e1c4cc6e3a14f612cec4c1ab476af5db1 agents/magica/work/queue-285/gate-r4-collect/harness/spec-tools.test.mjs.log
95427d61ca4ddaf19a7dce32383b79cb9c58a633bba6216666742ea47d9f061a agents/magica/work/queue-285/gate-r4-collect/harness/tools.test.mjs.log
862418d3d4124871ca5fcaf35e16c318a04e2888da83836751ddfea110efeb06 agents/magica/work/queue-285/gate-r4-collect/npm-root.log
5e2ca9088e90b2c747857ece26227b7eae41e7a49f763609ffe0885a36af2d56 agents/magica/work/queue-285/gate-r4-collect/npm-webui.log
9776d535c680428e0f987a475323847ca908bc6127d029b0a8e15c26e869c7b1 agents/magica/work/queue-285/gate-r4-collect/plugins/channel.test.mjs.log
828a48e2ff1243b4090a56c25e79d649ee935444480bcb77586d516dc5636ff5 agents/magica/work/queue-285/gate-r4-collect/plugins/daily-quota.test.mjs.log
5bc1239dc7fb1108f4736fb1e89666b7e1189a961b365f7d4f1d9125469536ca agents/magica/work/queue-285/gate-r4-collect/plugins/harness-compactions.test.mjs.log
fa038b8712570534664d7c432b677783a116fbf3b831a339f6fef7bdba9e8327 agents/magica/work/queue-285/gate-r4-collect/plugins/harness.test.mjs.log
d40b40a54da7880fe00c391424002bcda59bdd0736509e3eb21a713d6b3f15e4 agents/magica/work/queue-285/gate-r4-collect/plugins/kinds.test.mjs.log
d5dd47b47c0caf779f6a6c613cb0f75505caf637f8783331be6e05b19eff1d4f agents/magica/work/queue-285/gate-r4-collect/plugins/loader.test.mjs.log
14b4585ca060ee626774c0479dbb3396baeca21e35496a1fab16cd86e9b8629f agents/magica/work/queue-285/gate-r4-collect/plugins/searxng.test.mjs.log
eb0a6fa9d0656c931e328a2b2c3912d4148bd57921465e6757244c5c60d19ee2 agents/magica/work/queue-285/gate-r4-collect/plugins/token-limit.test.mjs.log
19af7c28d8b7b924dcad3b87da6de3fb4cc064f01888c135be7c9749258d7907 agents/magica/work/queue-285/gate-r4-collect/plugins/transcript.test.mjs.log
03edcf0e40935352060367941e115651c5b933232316bdc3657c42a9ff071a3b agents/magica/work/queue-285/gate-r4-collect/run-rest.py
a0dff63b1054c79f044fbb5a6358262a896a6dae69859240a916ba92f1807e92 agents/magica/work/queue-285/gate-r4-collect/run-suites.py
6ec98328166bf50e020c586992d70fa4330033bdc5e9e130f23139bf8e3f5f17 agents/magica/work/queue-285/gate-r4-collect/runs.txt
132164715f840d4fa23c4ee9b55ed9269ee5d511e9487f35756556ec5374efc7 agents/magica/work/queue-285/gate-r4-collect/script-runs.txt
f91fc95a173339137f981e24fbf630acfde957e32c3cd71e28304532083c6a77 agents/magica/work/queue-285/gate-r4-collect/scripts/test-auth.sh.log
25579ce07a27584d2b55fe58031f2527b10e32a4e6106c70e909064315cc70b2 agents/magica/work/queue-285/gate-r4-collect/scripts/test-conductor.sh.log
92ea8ce5e66d892fefacc76b87d140bcfb8c5a51dc77bdf4a47a6213ac5d2898 agents/magica/work/queue-285/gate-r4-collect/scripts/test-config.sh.log
9b482b7a3f0672c872923c06e71d5a88ff085a08170905a6cabe1d2b6fc283b6 agents/magica/work/queue-285/gate-r4-collect/scripts/test-discord.sh.log
41f517ff790f198088269aa15674bc45c70b8726230c30e4b87453003576ce7e agents/magica/work/queue-285/gate-r4-collect/scripts/test-extension-package.sh.log
74a26505e01fe1077318d2b8ed7271a4448dc155924955ae905365ac68652af5 agents/magica/work/queue-285/gate-r4-collect/scripts/test-federation-acceptance.sh.log
83dfaa21c4e4ad941088efab3f69e87ebd2f6bd3cc72ede938e21dc06da8a34f agents/magica/work/queue-285/gate-r4-collect/scripts/test-foundation.sh.log
3e2f8024027592e77790db2bbe039803060915ebf37c7b67f04071a7e83d20dc agents/magica/work/queue-285/gate-r4-collect/scripts/test-land-work.sh.log
5d9a170308927264d212e3dd00e87463a21d55811cf9b4cb51dce74d6a10fea5 agents/magica/work/queue-285/gate-r4-collect/scripts/test-push-check.sh.log
e95247a7751aa13b204ef92deaf4d51e3ece71671296c045a50efac53088f99e agents/magica/work/queue-285/gate-r4-collect/scripts/test-queue.sh.log
9f9dd11e2631a24ad55aaf7becc61965c592b00da08a4e72b98e0384d3a13ec7 agents/magica/work/queue-285/gate-r4-collect/scripts/test-release.sh.log
a065947f07d70a4721b423da597968630bc8ec1659db14681af42bb3f974077d agents/magica/work/queue-285/gate-r4-collect/scripts/test-task.sh.log
dddc2cfa2a4b9654ca12379fcc40c36163dbd5dad8ce330de8aa53fc50fbc10c agents/magica/work/queue-285/gate-r4-collect/stack-release-retry.txt
5a598a778fb3923f4f880713065a48a5bd9eb68bbcaa1b95726be13eb307657a agents/magica/work/queue-285/gate-r4-collect/tmpdir.txt
4c49e5314e4f2f1fc17f35dd8c69fb564056369c6a98d30abc4ac0b92d7797b2 agents/magica/work/queue-285/gate-r4-collect/webui/agents-browser.test.mjs.log
4e7ff30470ade9149aacb11f38897ea5bfe7a128ff450b9cf0d2a8273aa75cff agents/magica/work/queue-285/gate-r4-collect/webui/agents.test.mjs.log
bbf23042513467815079d91eb2debec7cbbd05a73d7b52807ac56efefdb0145a agents/magica/work/queue-285/gate-r4-collect/webui/assistant.test.mjs.log
a174f230f76bc762e7227c14bb8455930628068304258e11bcc1bbbb646b5925 agents/magica/work/queue-285/gate-r4-collect/webui/board-held.test.mjs.log
9b776f1ba1294697647a793b1f29f24468fdde3abda6a10ceefa57cf33ff233d agents/magica/work/queue-285/gate-r4-collect/webui/browser-edge.test.mjs.log
e5aec8e2d4ea3ab650bbee5924cf2b12ada7e786e3b4abc186c375352f3c0af7 agents/magica/work/queue-285/gate-r4-collect/webui/browser.test.mjs.log
14877988b1e7bdfe0fd1ef32773a51a5fd0661fe10d3fa6fc3fd9482ee84ddbc agents/magica/work/queue-285/gate-r4-collect/webui/bus-browser.test.mjs.log
b3427c15ec89a2b8f6a6502e5b410120163e3260f962146e424cd9b43d56c109 agents/magica/work/queue-285/gate-r4-collect/webui/bus.test.mjs.log
5ac2d8a442d2ab10797e6bec1e8670cf23d6eab27bd8f4ce07c6ae4a6c7bb765 agents/magica/work/queue-285/gate-r4-collect/webui/channel-chat.test.mjs.log
beb26c0da4fe44b1eabff789769f16d8c391a77de19bcf38bee648318bf112c2 agents/magica/work/queue-285/gate-r4-collect/webui/chat-browser.test.mjs.log
bf31d466870a43b167ac87f80b95a4aec1885235db5323d8e1b5c2b2d594ddf2 agents/magica/work/queue-285/gate-r4-collect/webui/chat-instances.test.mjs.log
deb2909ebb17cebd7dfff0718be92045c07183e40243747c9b76bee2f2b0f1c2 agents/magica/work/queue-285/gate-r4-collect/webui/chat-sessions-access.test.mjs.log
7fe605ae35d0ebac58bc778709db8e4357003274d2e989e64b6ecb1eb915ba10 agents/magica/work/queue-285/gate-r4-collect/webui/chat.test.mjs.log
60fffdabfb3fbc296896e8a9c5f9fd43ec1416d402b30ae63f325b7893129b21 agents/magica/work/queue-285/gate-r4-collect/webui/conversation.test.mjs.log
8e7cc112e62ab79e7592c536c7f2761634f43e87b6d4dc157cd667138829e15d agents/magica/work/queue-285/gate-r4-collect/webui/decide-browser.test.mjs.log
bf6a2adfd07fa1db2f81c90696d975fa272527dc764dd6b5ad3b14c68fa47167 agents/magica/work/queue-285/gate-r4-collect/webui/decide-sso.test.mjs.log
3082cb0c69c2b4f12ce78f282a946c15a010638d3b8057710f275847ac59ee69 agents/magica/work/queue-285/gate-r4-collect/webui/decision-http.test.mjs.log
27ee7ebe4ff342a0e6015d3b0e4e7f3f1b6f84548657a1097bd673b58bd0d509 agents/magica/work/queue-285/gate-r4-collect/webui/discord.test.mjs.log
d088c64c7da3bbf308dae6cd1e0771290b9eec01421097cec5d274042ff4818d agents/magica/work/queue-285/gate-r4-collect/webui/docs-browser.test.mjs.log
616de36be38f08d81b43f7c6614a73793533a15785f21d8161597ec55f110a81 agents/magica/work/queue-285/gate-r4-collect/webui/editor-browser.test.mjs.log
b4db8a01d5bc5f95a2df8e6d0a60515f7caa13b3134ac18d579f89066e56ab44 agents/magica/work/queue-285/gate-r4-collect/webui/editor-provenance.test.mjs.log
31c1e95d6d063d3fc32b5a1fae7b0ec8de50f931b19e9f2a5d28450a086f9fdd agents/magica/work/queue-285/gate-r4-collect/webui/editor.test.mjs.log
f7b8d686e6c982520ece1356901665eb3321623d6accac61fe45318feb98a46c agents/magica/work/queue-285/gate-r4-collect/webui/granted-user.test.mjs.log
a609775cfc639b76587d3fc638f663621fa6aa27609fcd08b3970d4590d24efc agents/magica/work/queue-285/gate-r4-collect/webui/history-return-flow.test.mjs.log
965d42a45be659b01280b2fb9c0b369106463fa062fe2a3243492a5aa77834fb agents/magica/work/queue-285/gate-r4-collect/webui/instances-browser.test.mjs.log
26874568a0dc303d3cea58e3afb0253f96761d4106839a80e3f7954b8c13309a agents/magica/work/queue-285/gate-r4-collect/webui/instances.test.mjs.log
f894e396adaf78f4bc4cc9a329a6776d19d0ac3789a3ee34101deae65b9caf00 agents/magica/work/queue-285/gate-r4-collect/webui/library-cli.test.mjs.log
61d36b0ba239d8a4121d76516f27e3b71bda542b5b84ee1b042bbb0873a3a0b6 agents/magica/work/queue-285/gate-r4-collect/webui/library-status.test.mjs.log
c0d99011fea775a9dd9665a32d3f52e8726f7a44076e69fccd53d84ecf9ec904 agents/magica/work/queue-285/gate-r4-collect/webui/limits-browser.test.mjs.log
ee3db4235dfe7278601af17d3fb55ab4adb96e436d263a1b29b9fbf8a88600ec agents/magica/work/queue-285/gate-r4-collect/webui/limits-route.test.mjs.log
c6b5980721c3b930928bab3d19e2a8074056f2fa1c7710e8161d7f0915903461 agents/magica/work/queue-285/gate-r4-collect/webui/markdown-preview.test.mjs.log
49761952beb7c40bcbbab64ab7bce2c1eb3e2a9a774b50c12688cc0829032fe0 agents/magica/work/queue-285/gate-r4-collect/webui/messages.test.mjs.log
1b4b045e253ea8c77743dd89aa9bc806ba4f1092532ef0717a33bc979d006d76 agents/magica/work/queue-285/gate-r4-collect/webui/pinned-copy.test.mjs.log
5ad5a4c21d3be42e9b0c9697d6656656c4e4d13df491ef9e28ddcadaf94134b9 agents/magica/work/queue-285/gate-r4-collect/webui/preview.test.mjs.log
82bed5d9abd8dc6ae54350075389fae21c7c3313e7d152f85be43bdf6380de43 agents/magica/work/queue-285/gate-r4-collect/webui/processing-browser.test.mjs.log
75d0aef6d38f943af4af6e6ed5fdf60d9eebaada47fc81f69828586dc8a2bd27 agents/magica/work/queue-285/gate-r4-collect/webui/processing-ui.test.mjs.log
baa715b9fd51a48b15ff4ce91bf61e4f87ef754617466cba82f748265f13d98b agents/magica/work/queue-285/gate-r4-collect/webui/processing.test.mjs.log
4a0fd7e6c8fbb1c4a60adf830b99f63669a1bb90603ee5cc201a53f98a59e114 agents/magica/work/queue-285/gate-r4-collect/webui/project-file.test.mjs.log
e9dada59fbd135a6000144675862faf7b040fdaf98a97a8435c42a6fcab4b24b agents/magica/work/queue-285/gate-r4-collect/webui/project-name-repo.test.mjs.log
df9cb152d852c4af46fcceeefafebe5c1ca2e2a13bbb800477c391c82d7529e3 agents/magica/work/queue-285/gate-r4-collect/webui/proof-cli.test.mjs.log
9f7b01827f1bf99754eeb6f97e88aaae1108e8585dc121a7729b1d337d17bdb9 agents/magica/work/queue-285/gate-r4-collect/webui/proof.test.mjs.log
e2cac643cab088a3da791343795993d7554bc542eab40c6a703e052f67f6f4fe agents/magica/work/queue-285/gate-r4-collect/webui/reads.test.mjs.log
35699bba6ff2bd11c438dd64dc9842aca0c87f6ec85fd6c8b467189fbf64032f agents/magica/work/queue-285/gate-r4-collect/webui/relaunch.test.mjs.log
a8e4f84ee47a4b428429db5423054abc094e25d326c0c2a814d37a25984ebcb3 agents/magica/work/queue-285/gate-r4-collect/webui/return-flow.test.mjs.log
dc79b156133650004447acaf385e55c22edf64c49944415c746e24f7c67d7e06 agents/magica/work/queue-285/gate-r4-collect/webui/routes-browser.test.mjs.log
cc2d12dc65fef1f6ca30c959915291ddebaa722593aba9af7e30959f9dce4e99 agents/magica/work/queue-285/gate-r4-collect/webui/routes.test.mjs.log
75f160bad77baa83c762ebba8826dc04d21fab38330d1bcdca5c055c17093753 agents/magica/work/queue-285/gate-r4-collect/webui/send-browser.test.mjs.log
17da130008549c5addf878256fa6ed5a098e96653eedf347f40f5a875a407f5a agents/magica/work/queue-285/gate-r4-collect/webui/send.test.mjs.log
227a040ea58ba0b1e8dd51c11d217cc82e3fbb064b28664d5975bccd0e3046aa agents/magica/work/queue-285/gate-r4-collect/webui/serve.test.mjs.log
348cb5c96e5363b3183ef498883638a833aae1f239a2e5a511f520e84c2f282c agents/magica/work/queue-285/gate-r4-collect/webui/service.test.mjs.log
226951cbd84f7d79bed678f24bc1051c5bb12ffe6ef15fd117331b6b5766a0ba agents/magica/work/queue-285/gate-r4-collect/webui/settings-form.test.mjs.log
5dacec779edfdb3de375d2e048f31b8f40943a4ad14ab37c903835b74c61138a agents/magica/work/queue-285/gate-r4-collect/webui/settings-write.test.mjs.log
93f1939404e20c10f30f14ab055fcd5cf8e94812c221c43e4fff8210db7f44f0 agents/magica/work/queue-285/gate-r4-collect/webui/shell.test.mjs.log
7c226c910677f516cb31fea957e1c08867054446c670b0e76598c148f417bae9 agents/magica/work/queue-285/gate-r4-collect/webui/sso-browser.test.mjs.log
460681e99510eacdd5457359da53ef713c514e37eb9e7e4bd081b5c54d1c2439 agents/magica/work/queue-285/gate-r4-collect/webui/sso.test.mjs.log
9b804cedbbf78bc3ce7d31c6e29b3d7db144d0727ccb91a0d35b11f006e5e84a agents/magica/work/queue-285/gate-r4-collect/webui/tester-browser.test.mjs.log
7327575ec1845331201b4fe1d2a29db409785c3da5c9ee496ae848b9a37119fd agents/magica/work/queue-285/gate-r4-collect/webui/tester-cli.test.mjs.log
35053f6d5634051f82bf53d913e6b9bec6e54c79bda7c3b2de04db21ecd14e2d agents/magica/work/queue-285/gate-r4-collect/webui/tester-listener.test.mjs.log
536e46d9f2f375d34a82c421d2722a9c5fdf32736c792c91b3f182d30f410472 agents/magica/work/queue-285/gate-r4-collect/webui/tester-socket.test.mjs.log
9ced49dc7cfc4fd5859752e602996e9d007ecc9faecad87db5d7ffed7388abd1 agents/magica/work/queue-285/gate-r4-collect/webui/thread-claims-browser.test.mjs.log
6e734711048f441c440ef2812fbf4c35401f9381ff325da5109b89208d0aaaaf agents/magica/work/queue-285/gate-r4-collect/webui/thread-claims.test.mjs.log
22c4cb305abf2c349490f5f613ba43060f9cc537ff37c5e17438454389930dfb agents/magica/work/queue-285/gate-r4-collect/webui/thread-sharing.test.mjs.log
399fcd57f19c70329f36195e3657a86701929b9d7b02151e8c78c76e6913bfd8 agents/magica/work/queue-285/gate-r4-collect/webui/usage-browser.test.mjs.log
d5687942fd8a1f3d7cf7b7b7de6ac61b6d4c41b059d7a99628dc4fdcf67aba6c agents/magica/work/queue-285/gate-r4-collect/webui/usage.test.mjs.log
fc62af04182d9b08e3fc3d66b985cae35f84f38ab70655833e856292601b6cbc agents/magica/work/queue-285/gate-r4-collect/webui/user-option-swap.test.mjs.log
1083df786265d2f12d81eda55bc6093e6c33e0cf6dc99347dee363f232c6e27e agents/magica/work/queue-285/gate-r4-collect/webui/views.test.mjs.log
f32fac302f88456e432d7a7ef8d501bf4f828c898e9d08bd2661f4a082fce200 agents/magica/work/queue-285/gate-r4-final/FINAL-COUNTS.txt
7fbcc5422aaa64a9b4dccbb326d5575df71ac7916a7c9162afb5aa715e0f2c3f agents/magica/work/queue-285/gate-r4-final/bus/access-revoke.test.mjs.log
01f8025de7d2f250e2d5f155ddd0d8a774e378763d94c17ec07d522a1519b20c agents/magica/work/queue-285/gate-r4-final/bus/account-migration.test.mjs.log
584387359aca990ff756646b8d4a36ff401ff0249d451421ae3b04c4941109b9 agents/magica/work/queue-285/gate-r4-final/bus/address.test.mjs.log
125f0a6e7ec07b065224336cc84a84f99149f730d0ade10dc71ebf5e4b9811e8 agents/magica/work/queue-285/gate-r4-final/bus/agents.test.mjs.log
77c2f80f6b4e43f29c85dc68790dfd86f5db0e2d818494e83710b8c38970e9d0 agents/magica/work/queue-285/gate-r4-final/bus/approval-binding.test.mjs.log
f6b71a3bdab941998178f08fead850fac6f45fa556a12db399c77d061872b672 agents/magica/work/queue-285/gate-r4-final/bus/broker.test.mjs.log
e2377c7ca0aee4ad898849eb776cd8eb589526a8fb8d60d4acb71d1711b2b9bd agents/magica/work/queue-285/gate-r4-final/bus/business.test.mjs.log
630eb8ba4fafb0ab5f95b5ef623eb3b011f48f8782922e440fd2d7eee708e744 agents/magica/work/queue-285/gate-r4-final/bus/channel-proof.test.mjs.log
c50bc107c908b285f179e9b143f4e80eaf9cc0724d18779dde9fdabf7d9170fc agents/magica/work/queue-285/gate-r4-final/bus/chief-of-staff.test.mjs.log
314a2b8b8c91acb53aecc2b3274ae6e5690fc0f07721a96525154ec3978c5038 agents/magica/work/queue-285/gate-r4-final/bus/citation-availability.test.mjs.log
3686290550fbbc7dcd020a0a1f73a8c9f6426df767875ca9c62994d19505b651 agents/magica/work/queue-285/gate-r4-final/bus/citation-guard.test.mjs.log
54b874193dd4c3cc6b36f1978385668a43c0b5a0fa58e0dd71f768bd61caf1bc agents/magica/work/queue-285/gate-r4-final/bus/citation-runtime.test.mjs.log
be0d8470222d9116b7ceaa598a75988067d32d73f9dfbc7fcd0d896c5bb4e5b9 agents/magica/work/queue-285/gate-r4-final/bus/comment-cursors.test.mjs.log
88e13b72f7ad0afcfd8eb28788793e745a93ee2aa67cdc9dcf951c1f763ec0c4 agents/magica/work/queue-285/gate-r4-final/bus/comment-migration.test.mjs.log
7f2683ee6004219a0f03d6238933ef030223b9c3e15375bd25ae60f3a8cef26f agents/magica/work/queue-285/gate-r4-final/bus/console-decide.test.mjs.log
8a94840b084b52a483174c39fbc0246b4f5eab010aaf05982c9cfea1fdd9f9b2 agents/magica/work/queue-285/gate-r4-final/bus/creative.test.mjs.log
cca2741622e11e59f4d5a1bad5f070511c775033b0c53052bf647e6e6d5249c0 agents/magica/work/queue-285/gate-r4-final/bus/credential-claim.test.mjs.log
81128c7cd52b059b4ac872b5c88c089f58e3b464dcdd19ab5a2178a1afb9f9fe agents/magica/work/queue-285/gate-r4-final/bus/credential-status.test.mjs.log
3a2530a7cf3a45ddf7e6bc8ca1da86b51c278b98974e00ce85fb51542629ef7a agents/magica/work/queue-285/gate-r4-final/bus/credential-store.test.mjs.log
f35239fd716b12762f3f64307044a032d283ee0d4e06105daa52d6b8ce39e6c2 agents/magica/work/queue-285/gate-r4-final/bus/credential-verbs.test.mjs.log
36faea62cf044657e98634f951fc7d84992a446a48bc38cd6ee3b663eb2c3d52 agents/magica/work/queue-285/gate-r4-final/bus/credentials.test.mjs.log
42362c6166dbde9724a13357487dcf1025c0418ff2bd3dbb678a732996dee5a7 agents/magica/work/queue-285/gate-r4-final/bus/csuite-messaging.test.mjs.log
515676f310e5f8de8ee59058699e181744f84341bd895d538e3312c685c2300b agents/magica/work/queue-285/gate-r4-final/bus/daily-quota-runtime.test.mjs.log
e546d55804b8cdc1e2ff20f913e6bddb97f65cdae8ec797f24f1660903987f28 agents/magica/work/queue-285/gate-r4-final/bus/decision-close.test.mjs.log
c143c362feb567a0ff797cc626fc532fa4a701affb2dc50818200fa003754faf agents/magica/work/queue-285/gate-r4-final/bus/decision-route.test.mjs.log
1e1506bcbc5fe95ed56e8b43a03f8cf8ab02b64692e822b562dd6a547b9e9ea4 agents/magica/work/queue-285/gate-r4-final/bus/decisions.test.mjs.log
8d983bbcbbf2997be9525dc301d2e8a24e7bd133c602ca5ca754fcf0091c13f3 agents/magica/work/queue-285/gate-r4-final/bus/end-launch.test.mjs.log
013b3f904af7741da91ba3e0550fc60c5387fd96161ffedd4026360be566a59a agents/magica/work/queue-285/gate-r4-final/bus/fire-revokes-grants.test.mjs.log
87639d51c1d1e22694c59b7b603da9d1b23baf17c3e6c80c0018c857d045179e agents/magica/work/queue-285/gate-r4-final/bus/gitea-grant-docker.test.mjs.log
650fa961ebd3e2fff69c17e31938a74d75456e2c86f32eb74e61ceada0214275 agents/magica/work/queue-285/gate-r4-final/bus/gitea-grant.test.mjs.log
e202c6298a6e8e3a3512e88fc586a4aaf58e0767ffbb0d8e9a1dd960d34e6d4f agents/magica/work/queue-285/gate-r4-final/bus/gitea-migration.test.mjs.log
181712d61bcf28343fcf585ae641d9d48f56310c6c5bffd7746bc8b723cbc345 agents/magica/work/queue-285/gate-r4-final/bus/grant-enroll.test.mjs.log
344c2e1d1f952c012ca41a628d6cc341721d972314d65ec5a8df689ab412a4f6 agents/magica/work/queue-285/gate-r4-final/bus/grant-executor.test.mjs.log
1e2c011030faf1c6e323f5003b119c4d3661ec9b6ffcb808094581bbece143eb agents/magica/work/queue-285/gate-r4-final/bus/grant-host.test.mjs.log
169e7a59162ad4d1aa2ee9b04498ee836d85445b3141f2d79f18d387cf36f01b agents/magica/work/queue-285/gate-r4-final/bus/grant-migration.test.mjs.log
e8d8f220f3e5c06c9b91e7edf4b8b19da1e4f83345bbd85b7c2b7d3654535536 agents/magica/work/queue-285/gate-r4-final/bus/grant-scope-runtime.test.mjs.log
f6193c9e7c494cffe8014acef75239f7dafff9ee1054d9da31934d0177e76a8e agents/magica/work/queue-285/gate-r4-final/bus/grant-scope.test.mjs.log
d4c00e6926997768456d5e2c604532fd064b8b96c8d30d56a2126e8f803af155 agents/magica/work/queue-285/gate-r4-final/bus/hard-waits.test.mjs.log
56947c66c5c473f7fff875351a99c4dec7b0c53b40ed6e5d6279927772c1ed4b agents/magica/work/queue-285/gate-r4-final/bus/host-run.test.mjs.log
89b48f344e528d4791e2140169a5c17238a88cf18645d5627e128ef4b173f462 agents/magica/work/queue-285/gate-r4-final/bus/host-tools.test.mjs.log
d289774a4ca2adcbd63a02b236ae76f6c5a6f0c1a5232f8b6ceff0cf38f27e5b agents/magica/work/queue-285/gate-r4-final/bus/human.test.mjs.log
737b5cec7eba5222f16b308337e1e9953f327c8280e29d777000ba580132a2f6 agents/magica/work/queue-285/gate-r4-final/bus/instances-verb.test.mjs.log
1fdc8f57dd08839c9bdff0c3c27a9e8e36842ab4c58c96462ab009c4df1e96d5 agents/magica/work/queue-285/gate-r4-final/bus/interpreter.test.mjs.log
1eaa31ed5052535a5feeb66b556d936610ea6fe064e65f6f7d768829e7264371 agents/magica/work/queue-285/gate-r4-final/bus/land.test.mjs.log
b026fcc130fd66b05b3f106357341255f47710afdbae6e9571670550c3518233 agents/magica/work/queue-285/gate-r4-final/bus/launch-notice.test.mjs.log
07321f4ad9ac2194631e8079d9a2fca242214c763eb80d8240ffe496c362d321 agents/magica/work/queue-285/gate-r4-final/bus/launcher-released.test.mjs.log
e44056de0a30569e825bfcd57df53a6bef58763081758947cda95381895d8e3b agents/magica/work/queue-285/gate-r4-final/bus/library-sync.test.mjs.log
e5f2a7baf52805260d438f55718c52579a5d618472a10992491a98e68d014a53 agents/magica/work/queue-285/gate-r4-final/bus/library.test.mjs.log
a57ea3daf5391b344189595d0362f1818111a0218f6d9f22bb00dcf88b2e02b5 agents/magica/work/queue-285/gate-r4-final/bus/lifecycle-revoke.test.mjs.log
ce6ff398a8aea0587ea68d9e086323bd02b994de20bbadc9ea9e6834fbc34ab0 agents/magica/work/queue-285/gate-r4-final/bus/lifecycle-verbs.test.mjs.log
815d8c1052164a335dafbc4f96f94b13c59ee504622f9cf69a2800789e3ef06a agents/magica/work/queue-285/gate-r4-final/bus/limit-checks.test.mjs.log
979d2f47c5cfd877dfa5fccf6c96b442c4a89f2e7830d95e4d4d93f2b36452ba agents/magica/work/queue-285/gate-r4-final/bus/limit-stop.test.mjs.log
6e0989fc89827966c92ad8d365ca9b952aa2c47967f406c7e39a0a5f00d71a19 agents/magica/work/queue-285/gate-r4-final/bus/limits-runtime.test.mjs.log
215b5e69a7bfc72dfa8baabc62952d314fe46e3bbab512274606e06c5a3313fe agents/magica/work/queue-285/gate-r4-final/bus/limits.test.mjs.log
e60646acf02cae57656f4299bc3192030a245178726dace3542fdc2ae6dccdfe agents/magica/work/queue-285/gate-r4-final/bus/message-citation.test.mjs.log
ae2ee45d07254563db32e2d0329dec9c460670126d0d30def4cf13494be10c9a agents/magica/work/queue-285/gate-r4-final/bus/message-filter.test.mjs.log
daa88633e6a83e5970a65ac840608ea6b56192cf504927cd20108f5ce1e23288 agents/magica/work/queue-285/gate-r4-final/bus/messages.test.mjs.log
fc4c4bb883f95c23a69abf03485f706e9162dd419506d825f8a8bb9250ef509b agents/magica/work/queue-285/gate-r4-final/bus/messaging.test.mjs.log
fcbd138fc241687e2c4925e4822310f56eaffd471d42ab96c29f56f63feb7436 agents/magica/work/queue-285/gate-r4-final/bus/name-migration.test.mjs.log
b12c8f432a7b0ff9500527925a5d87fa9e77be5702247f0f0fbf462b7dd623cc agents/magica/work/queue-285/gate-r4-final/bus/names.test.mjs.log
3fa78959c9150dd7f42658c45eefaaec6ddc9d155875f8dd992cff63cd923dd8 agents/magica/work/queue-285/gate-r4-final/bus/peer-transport.test.mjs.log
5054dac723654a3fa478946a6fe5ab04e51e53e6c0421917b4a50412987b5fe3 agents/magica/work/queue-285/gate-r4-final/bus/peercred.test.mjs.log
ac5476b1714f9084041b35c65c1edfdcd142530f4688b8a87489df1cecb2eebd agents/magica/work/queue-285/gate-r4-final/bus/plugins-verb.test.mjs.log
5e5cc59a8a94d8750a3669edab6e25f89487c5ad34836870e977f545cde7396c agents/magica/work/queue-285/gate-r4-final/bus/principal.test.mjs.log
fe5a472dbe08b3cd445aedbf1661c627eeb62c9192c2ac9c2247285c74881023 agents/magica/work/queue-285/gate-r4-final/bus/process.test.mjs.log
98149745574b72a66123848681bd7e08b22a934ab2787571bfd8110ac23a13f3 agents/magica/work/queue-285/gate-r4-final/bus/processing-runtime.test.mjs.log
1aa94b85956045c985a2cbaa0442c1c010582b312fe4bc866faf48a599053dd9 agents/magica/work/queue-285/gate-r4-final/bus/processing-timeout.test.mjs.log
b39772e500ea33ebd57b48c21137c60d04fb79fa6e6c528a9279aada4fcec2bf agents/magica/work/queue-285/gate-r4-final/bus/processing-web.test.mjs.log
4a976a7c0dc3af6acda71c10f61c781269f65b3b8db1a7d52f4a0fa03a4925a9 agents/magica/work/queue-285/gate-r4-final/bus/processing.test.mjs.log
3aa912af2f96507f007781c2674da0c15dd8b97f5b038afe75cad7aea698d02f agents/magica/work/queue-285/gate-r4-final/bus/project-await.test.mjs.log
0728ebd155b5802d4dc8ddcc72b18a18a422f42ef4cef29e84fb128f2c409bd6 agents/magica/work/queue-285/gate-r4-final/bus/project-files.test.mjs.log
c4c954e3b77be4e762b7e8b183503b191057a657c9e6b1c95390d32a16a6cd89 agents/magica/work/queue-285/gate-r4-final/bus/project-runtime.test.mjs.log
d75203d37d67299709b87d2bb4545cfe812d67899c64f3117c4d727164ee8971 agents/magica/work/queue-285/gate-r4-final/bus/publish.test.mjs.log
75fc7e625af4e73d359b6f1cb37ffcd995bd57c556e91fce6d1541d55b38b5e2 agents/magica/work/queue-285/gate-r4-final/bus/reload.test.mjs.log
b6248c4aec83b1e10b135110772f9ff57793dc9487ca452fdd8725a6669d8789 agents/magica/work/queue-285/gate-r4-final/bus/replies.test.mjs.log
d238b8e30451bb7a1f6483d98053856179b5dd9d46a512b47dcf5ada97365296 agents/magica/work/queue-285/gate-r4-final/bus/requirements.test.mjs.log
0b0796b72dd4cc17ee74b8150d5359ee6b5c3bad940d45228863fefb6ad00012 agents/magica/work/queue-285/gate-r4-final/bus/review.test.mjs.log
c4e2a5abdf3267315809dae8a895f37330e2532bfee285f7ec9167d0e10b9f0e agents/magica/work/queue-285/gate-r4-final/bus/revoke-window.test.mjs.log
a53589c9b00fd25c5c815080bc595342a1bdec11c9b253a418fb252c0f8a1cc3 agents/magica/work/queue-285/gate-r4-final/bus/rooms.test.mjs.log
f6b431f479981c441cce096cccba0122ec1a3426f6111f1f7f626686c165bc6b agents/magica/work/queue-285/gate-r4-final/bus/routes-verb.test.mjs.log
7a4923f38ad902441ae6aea9cb576b7147dd70383d098d51336e6a14d8e86505 agents/magica/work/queue-285/gate-r4-final/bus/schema.test.mjs.log
00b4938f9857909d8d1b2a09319d7789a3122e78b536a9ecea59dc0c186ad36c agents/magica/work/queue-285/gate-r4-final/bus/session-clear.test.mjs.log
276bf89a346166d545ce198bc348481a5ce142318929061b630e8ec220876323 agents/magica/work/queue-285/gate-r4-final/bus/session-compactions.test.mjs.log
47f135c2d70ef45642cb23c24ba3c0b3895fc17942d88fe3a8df6ccb7f5ea1d0 agents/magica/work/queue-285/gate-r4-final/bus/sessions.test.mjs.log
55de3ac12488dce5d94534a65aa6cc5772f24203e568ba673629cd70e65320ce agents/magica/work/queue-285/gate-r4-final/bus/single-use.test.mjs.log
0be7abd2fe17ce70d44441d99d24d3cb4cf6c333c8f13c1db6629b891ad081de agents/magica/work/queue-285/gate-r4-final/bus/spec-migration.test.mjs.log
4cc4eec2ad4c90ff3a4e43cd9179e6fb74aeac8e2325a8672d066863dbeae4af agents/magica/work/queue-285/gate-r4-final/bus/spec-review.test.mjs.log
92309088487d79eb7650fa9478ccbac120772693a8b470b4deeae1cd1d524859 agents/magica/work/queue-285/gate-r4-final/bus/spec-socket.test.mjs.log
bc4e8e1ef8e47ec8afe23028cae658e3c977b49ca9a7e2fa4722dc44b08504c3 agents/magica/work/queue-285/gate-r4-final/bus/spec.test.mjs.log
daef5df36cc1163103a974eb6f031ef14dd6c35cb7f226954ec5ae7135769fb5 agents/magica/work/queue-285/gate-r4-final/bus/staff-request.test.mjs.log
37a19f9ce74424df735214c2f2e0b8dfe7aaf0ba0de12c54ce036443332d9c74 agents/magica/work/queue-285/gate-r4-final/bus/state.test.mjs.log
22efe49c8472a0808718fe06cf675ddf40c44f1c595f08df790d9cecc79351b4 agents/magica/work/queue-285/gate-r4-final/bus/store.test.mjs.log
9fd207dee8f33025cbcf7240eb1a7290a5415c699c746f4e5e5aae70cf03aa63 agents/magica/work/queue-285/gate-r4-final/bus/task-page.test.mjs.log
f820bd4cc7de4988811e4c2182ee3e98929f53d497723cd5a8d57ffb7ca80ef9 agents/magica/work/queue-285/gate-r4-final/bus/task-read.test.mjs.log
60895dc650cf104f7e993abd9959fbb040cf1e2bbf0f22918928d853d949acf1 agents/magica/work/queue-285/gate-r4-final/bus/tasks.test.mjs.log
3d8b2b8b79f2311728ddbc5258c243aa155d4ccfe968464cce36a619aafe823a agents/magica/work/queue-285/gate-r4-final/bus/tester-threads.test.mjs.log
f74d086924e32c5790d75dd781dda9949aea719591ba7e5c6dd2991621c53abe agents/magica/work/queue-285/gate-r4-final/bus/tester-writes.test.mjs.log
5b205cd32bbb7030f6c1c2714ba9d96c6dcc8ef63f90b2a1fb717df02cf40b69 agents/magica/work/queue-285/gate-r4-final/bus/tester.test.mjs.log
eab0913fca4df72aa7be69ec16151aa7d14b46da1c29eb814b25b819f10af57d agents/magica/work/queue-285/gate-r4-final/bus/thread-claims.test.mjs.log
96756dcb51a27b330ebe3c17f971ae4927d350b4d38a49a7992a43563cb09354 agents/magica/work/queue-285/gate-r4-final/bus/thread-migration.test.mjs.log
bee7685800c9c0b7bcb8ce114289ee041dc3d54bb54f2825c03effefa25e967c agents/magica/work/queue-285/gate-r4-final/bus/thread-shares.test.mjs.log
205e6881f1c57f5db0df0cd6602d6565fc3230b4191cd18fab2c51f01c58edf2 agents/magica/work/queue-285/gate-r4-final/bus/threads.test.mjs.log
ff12ac0ec50afe85988068d076e20ce4b567a009db1612e351853865d893a06e agents/magica/work/queue-285/gate-r4-final/bus/transport.test.mjs.log
17677a3dbea58ce66d09ecd070341c57361932b5bc3a7c7a1c6c74c4c13bf261 agents/magica/work/queue-285/gate-r4-final/bus/usage-broker.test.mjs.log
b72847be6b71ca57e1d740975709fba42ae8c8484727e70758db2b22f0df5331 agents/magica/work/queue-285/gate-r4-final/bus/usage-migration.test.mjs.log
e4da4611615f4ad14961db09ea2b8bc11cb3ea26421cab1532e43f9be324b635 agents/magica/work/queue-285/gate-r4-final/bus/usage-runtime.test.mjs.log
93e51bad9d0af852ba075e1ab1060315a8689d8e86abf817a31c5008896d9be1 agents/magica/work/queue-285/gate-r4-final/bus/usage.test.mjs.log
29722547541fed38d5d7e5ba8fed04af0c1fdfa8225987a45b82130288b0fc3d agents/magica/work/queue-285/gate-r4-final/bus/user-principal.test.mjs.log
71c75ee41d3d1c20ba7d6dc5ff116eeb41d015697a88940229f54ffa43554422 agents/magica/work/queue-285/gate-r4-final/bus/viewer.test.mjs.log
69248dd13bec6172e0131c6abb1d7b7200d987a48547fa9a32ceac94aa3d7708 agents/magica/work/queue-285/gate-r4-final/bus/web.test.mjs.log
35f9300554aa492fef841c3802556e1ac588fd2c0f54f6d03d68f27cb0c2717f agents/magica/work/queue-285/gate-r4-final/bus/workflow-roles.test.mjs.log
620869895c15a8020c5a4f02a155104652ed773787122a60e521ff06053b1aaa agents/magica/work/queue-285/gate-r4-final/business/access-levels.test.mjs.log
df5fe5da6101c683ba23da2b3c4f41df699255d8a05b04cbb31c98c9e033312d agents/magica/work/queue-285/gate-r4-final/business/access.test.mjs.log
e6581e65adaf8722e835671ea70c897528247445271c277a4d3564b42b95b3c2 agents/magica/work/queue-285/gate-r4-final/business/agent-identity.test.mjs.log
196ab38b12b821bb4fd527a7f289aee256bddfc9e2d14182d4910bed7019711c agents/magica/work/queue-285/gate-r4-final/business/assistant.test.mjs.log
c58232ff3e724a3bc3e270c301365c2f821517ac558764888a5e7eb0e03b6433 agents/magica/work/queue-285/gate-r4-final/business/business.test.mjs.log
4e522ebf2ff972aa1420458d2970172f879fc4e40e53ffb6a07b5164fcee59ff agents/magica/work/queue-285/gate-r4-final/business/case1-business-file.test.mjs.log
6c0fb5d7e0afb9f9353822d5b1e0b54d1bc6ef7f7a1a5ffbf2baf6c77dba0bf8 agents/magica/work/queue-285/gate-r4-final/business/case1-project-key.test.mjs.log
1c8ef8fdc13bf398b08958c27344f3041f8ca4d9359985851f3f00cdaf5bdac3 agents/magica/work/queue-285/gate-r4-final/business/chief-library-credentials.test.mjs.log
fecfeeb2d9fca0a483bd7f6028e54180b6dc980885c4135a8614b48855564b8a agents/magica/work/queue-285/gate-r4-final/business/chief-of-staff.test.mjs.log
052585f42b3f15e9598e06d39c86d70312df73907b17ae897972f88cbdfdd055 agents/magica/work/queue-285/gate-r4-final/business/cli.test.mjs.log
9917bafb6253ea7c69d4e877c3b44dfb41cce4d9e66e3f437885e42ab2d50afc agents/magica/work/queue-285/gate-r4-final/business/credentials.test.mjs.log
1d469db92293c9f9d614b3541de3aedc579475f6d9e63104b0d5cf6eafd142d2 agents/magica/work/queue-285/gate-r4-final/business/csuite.test.mjs.log
58317d46f309281a36345add11ab12e537d814a18ca5715d65248f33d9d921a8 agents/magica/work/queue-285/gate-r4-final/business/grant-scope.test.mjs.log
cf68073b5a586873194365b66a848d010ff2ba754de3d50ce25a470da2e34e8e agents/magica/work/queue-285/gate-r4-final/business/hard-waits.test.mjs.log
d4d8adc8a9ffeadd59ead0983f7741382dcc77afd553c847cc063956b54dee11 agents/magica/work/queue-285/gate-r4-final/business/hosts.test.mjs.log
53585e4c45ac886836d4ca443b767aabf9196dfd25e844add1e2a537755551d8 agents/magica/work/queue-285/gate-r4-final/business/instance-credential-transitions.test.mjs.log
13c489103256b59ead37c55d642a1ce096c572d3b8a885e65e29836cdd3c2586 agents/magica/work/queue-285/gate-r4-final/business/instance-settings.test.mjs.log
28043c37949a5c2dd556626aa79dd597fcf2a67c0c1789d28ea68e7227904752 agents/magica/work/queue-285/gate-r4-final/business/launch-settings.test.mjs.log
6ecac0bb273d4cacc938f71e4a6dc7faef601a6c40bb150691884a523567c103 agents/magica/work/queue-285/gate-r4-final/business/library-projects-protected.test.mjs.log
50bea34d902b5183112be0db1129c29ee57badb2a2845e50e1f6798d9724b60d agents/magica/work/queue-285/gate-r4-final/business/library-seats.test.mjs.log
36e92ba28b6801ec5078eb0cacd2966e5f4c7d0a755c3aa7f8a4a3c8bce3c1fc agents/magica/work/queue-285/gate-r4-final/business/lifecycle-settings.test.mjs.log
dc291ea0a20cc32ed43e06013ffdef621842fc1a130bda21a4d4523b82efdf85 agents/magica/work/queue-285/gate-r4-final/business/optional-tracker.test.mjs.log
447ea0dde99631f0e1c12491ec4e0e12bc152e7837e4618349dd94a5f22e92ce agents/magica/work/queue-285/gate-r4-final/business/plugin-settings.test.mjs.log
e98cdf2762716a9728315b4d8b5be06d565dc30744bf33f3a044bb35b4493565 agents/magica/work/queue-285/gate-r4-final/business/project-repo.test.mjs.log
db67d6c2aed447238a7f58a614079e01d0100700ea60b7580960bff94e194b04 agents/magica/work/queue-285/gate-r4-final/business/project.test.mjs.log
ebde91ab0bf3f4fcaa8cd54eec89d7f012269cafaf568934581b2dd85f5ac5f8 agents/magica/work/queue-285/gate-r4-final/business/record-grants.test.mjs.log
54052ad43db71f392092a824e6bc6af3fe56a9438437774dca06fdff80ca4222 agents/magica/work/queue-285/gate-r4-final/business/reply-limits.test.mjs.log
23c53f92a618f295b7ddf54d5260e8ab3423388a4e8699862d1aa8d5a980cbd1 agents/magica/work/queue-285/gate-r4-final/business/resolve.test.mjs.log
68a935ad2c287f749784aa9073cc32ec382b3e6c452cf12f8a9cb3f46f015dc3 agents/magica/work/queue-285/gate-r4-final/business/role.test.mjs.log
f740f5e590ddf6cdf3be4f8025d4880fb519f25dbaf96429fb5da6642cbf4c6a agents/magica/work/queue-285/gate-r4-final/business/spec-review-contracts.test.mjs.log
48ada3c3ab56530759610cbe96e70c362a6759058870af082a2f6c5798e9bbd0 agents/magica/work/queue-285/gate-r4-final/business/token-limit-settings.test.mjs.log
ef80f01ebf5bfc13fc98736787ac59b047ae9494a80f48ed68e53ee81fa1693c agents/magica/work/queue-285/gate-r4-final/business/vars.test.mjs.log
c54d2ea2d3a7546d2922955473421f972d96780c9310ad5b8114c223ce11f07e agents/magica/work/queue-285/gate-r4-final/business/workflow-roles.test.mjs.log
becb033f43710491064a94892fd653c6ab1e2c342cb2c0bf36199882924962fe agents/magica/work/queue-285/gate-r4-final/cli/access-boot.test.mjs.log
a8f44861b55b198217b98b87093f5c2757223da36864738f5ad1464751322237 agents/magica/work/queue-285/gate-r4-final/cli/access.test.mjs.log
dc51f9fd3c944ead18254dff3e0f5e5ba9ab91a314325c8d6027da78c225fda1 agents/magica/work/queue-285/gate-r4-final/cli/app.test.mjs.log
ba0ddc56926939ee6f6e73a421ed3674dcf8eada5535a4a207c762e2d9eb51b8 agents/magica/work/queue-285/gate-r4-final/cli/boot-status.test.mjs.log
431adc0251bf7b2d0e852b5cfbbfbe66f9b85666437ddc18255b88a60202e2bc agents/magica/work/queue-285/gate-r4-final/cli/case1-accept.test.mjs.log
3b59d8fa33afd0ba18fea055107a266f3517415df9f61f02ce9d286bbbef1558 agents/magica/work/queue-285/gate-r4-final/cli/case1-hostcheck.test.mjs.log
fa0b53fe612d2d6d8b338e090bf4fcacf324d00c791d50d6aa9cd1c1bf437e5c agents/magica/work/queue-285/gate-r4-final/cli/case2-install.test.mjs.log
af0f8d0a0621bd3eb825ba4da34f0fa77787f42c0bf7e6e2ae825b94b83cc305 agents/magica/work/queue-285/gate-r4-final/cli/case2-persona-import.test.mjs.log
a6fad64b7bad67b02329553d255e8039fec49110658c67ab87b6299915bb7a65 agents/magica/work/queue-285/gate-r4-final/cli/case2-unit.test.mjs.log
3a641d364b0c71a1374a9c2a766d22da92ab25b38bc82574e5a2e10539327a15 agents/magica/work/queue-285/gate-r4-final/cli/channel-cli.test.mjs.log
a5b80b75089a31667e980099402ccea965c171f1d9d6fe0b76c34c7618a0742c agents/magica/work/queue-285/gate-r4-final/cli/channel-recovery.test.mjs.log
1fe6caf07bc134ccb9c19d190cfa3ff968b7bfa91a4f18a30b4aa79c4af7ec28 agents/magica/work/queue-285/gate-r4-final/cli/cli.test.mjs.log
48b94802ff06a8285840e2d6b436a792b68d8f481dadd438c0db4c2dadccca7e agents/magica/work/queue-285/gate-r4-final/cli/compactions-launch.test.mjs.log
51cb308333c4c5d514bd55e5c0409561eadad81b80d936c18e8abf0ea1e87ee9 agents/magica/work/queue-285/gate-r4-final/cli/config.test.mjs.log
8c817f2a7e098a65d22aaa79e92e643a3607b1c549564f4158856c2abe5bdd2d agents/magica/work/queue-285/gate-r4-final/cli/credentials.test.mjs.log
9935dc95cea7702d5ac6f47b8936b97b78aebd1650bcd4eccad0bcf2f223c19a agents/magica/work/queue-285/gate-r4-final/cli/federation-acceptance.test.mjs.log
8709c0f22e863e70306f98f9ba86a06dbbbc6afb2a4ba5198d4e493dcfb50fdf agents/magica/work/queue-285/gate-r4-final/cli/follow.test.mjs.log
8a4b4c132a57400e77929c2147649297941b7c0547a9c5ebb9e8fd2923398a21 agents/magica/work/queue-285/gate-r4-final/cli/format.test.mjs.log
87c4affc28b430d58906c209455d1d19ad299906375a9216e42a712b042494a4 agents/magica/work/queue-285/gate-r4-final/cli/gate-lane-auth.test.mjs.log
1b0f174aa9cbd164d7c82261ed6f9fbb55befb93b9ef835d79fb738f6f5fcb50 agents/magica/work/queue-285/gate-r4-final/cli/gate-lane-fixtures.test.mjs.log
b507a2491d42f2747eafce9f190160f48652a5439efb5f75c57af300f6d424c2 agents/magica/work/queue-285/gate-r4-final/cli/gate-lane-image.test.mjs.log
dff17f05c0fbcaeceadc3e96a2bc1d4902cf36accdab678ecaa523cc4aaf76ca agents/magica/work/queue-285/gate-r4-final/cli/gate-lane-state.test.mjs.log
910e8b82d08af42f67f83410e86933faa5c6de1a2be7d216990d2c6de9675011 agents/magica/work/queue-285/gate-r4-final/cli/gate-lane.test.mjs.log
7b99dccf6adcd676467916c2e0f0578dba9ba820f44c60d1d52210bbb3d5a76f agents/magica/work/queue-285/gate-r4-final/cli/git-socket.test.mjs.log
f4a218937d6d9bc6f047369813998a3f4086e4136632f20d3040b165e5fb23a1 agents/magica/work/queue-285/gate-r4-final/cli/grants-scope.test.mjs.log
68fda47a06a071a7485bcbcd89781a562949e87e5a10c3633d4f942b184a42ff agents/magica/work/queue-285/gate-r4-final/cli/grants.test.mjs.log
83399a560afeafe70432a8c82eeccb4d6a59be9ef640f695331eb8ad083ac9aa agents/magica/work/queue-285/gate-r4-final/cli/host.test.mjs.log
acf58453986d413a32b56232d897808073670cec3b71429f821b50462987ac54 agents/magica/work/queue-285/gate-r4-final/cli/hosts.test.mjs.log
5a9f986ccf344157ab7ab15b93455dc27f221930b83ae6ca3e0feb6a67e33555 agents/magica/work/queue-285/gate-r4-final/cli/idle-stop-race.test.mjs.log
419dd29b40b7c66241b24de42d4376fa34d8f3ad108005a76c8aca3dd48573ce agents/magica/work/queue-285/gate-r4-final/cli/instances.test.mjs.log
e807633b3729eb1afad74b19d20f3636fea696c88451707ce7f83fcdc6e812f6 agents/magica/work/queue-285/gate-r4-final/cli/launch-account.test.mjs.log
39cbdf7c125da38588c99844f24db509e4efe6735689d25cc5f519ee7edfb10c agents/magica/work/queue-285/gate-r4-final/cli/launch-limit-checks.test.mjs.log
7d4e10896e0e2c5a15b49bcf9b29fbdfbda3ffbc990b3341bc427a2cef74a7ff agents/magica/work/queue-285/gate-r4-final/cli/launch-limits.test.mjs.log
806e6c2e07046de60c4c14f09b1cf552e3f7b68e62eed4645bc0687b5333aa45 agents/magica/work/queue-285/gate-r4-final/cli/launch-routes.test.mjs.log
f26be989d4aa677fe2785e32b6eef963da2d03653d09609a7e6e6dfe2d30ce37 agents/magica/work/queue-285/gate-r4-final/cli/launcher.test.mjs.log
70de08df057a73660ec03a82be637288e715857386b3e82ab5181bf0808c2d1f agents/magica/work/queue-285/gate-r4-final/cli/lifecycle.test.mjs.log
e1c5ac71b09f8fcc89702257290fbbdaa1f511d417bad8cc3e865bf8426c4173 agents/magica/work/queue-285/gate-r4-final/cli/limits-tokens.test.mjs.log
7b89142839389e453ec5950a8e853db2ce861e01a8317fa4d348b32d49e049bc agents/magica/work/queue-285/gate-r4-final/cli/limits.test.mjs.log
87449e4403c6df92693fc24c700cd3dc8b9a15308d655bdf90cb8276cd426147 agents/magica/work/queue-285/gate-r4-final/cli/mark-read.test.mjs.log
ee42e596fe833d8ceaa429ca4c7f66c4f3a735befe4340fcfd961a4f4cf9113b agents/magica/work/queue-285/gate-r4-final/cli/names.test.mjs.log
19394c29f2efcc0811a0bb3f0664da04c350c1941241f79b3670cf50ca23ff7c agents/magica/work/queue-285/gate-r4-final/cli/notifier.test.mjs.log
26c65196b3fd9124dd87cc4fb74477dcddccd416c3fc60b1f3c191e3115dbb54 agents/magica/work/queue-285/gate-r4-final/cli/optional-tracker.test.mjs.log
d9a54281386e2e4b0adba8a74c06125726092743be7bb3f37d476f88c026170e agents/magica/work/queue-285/gate-r4-final/cli/other-tree.test.mjs.log
2dc5770feac41a86274226b047d3da8634d36f9417335aff149135297f7b83d8 agents/magica/work/queue-285/gate-r4-final/cli/processing-cli.test.mjs.log
519c363c76d8cb9c98bb1a6fbb1ca6edf7d7c1ce6c2640d3ec52489c5d573a15 agents/magica/work/queue-285/gate-r4-final/cli/project-name-repo.test.mjs.log
6a88d3f9ddbb9dee0a65cbebc5295e4296e415496aa8ae27f095cf239bcffbb5 agents/magica/work/queue-285/gate-r4-final/cli/project.test.mjs.log
cc4a46df4c3c24f1eea3e0aeab63263aec72dd94d0b87f81bd7bdd5e7c27ecf8 agents/magica/work/queue-285/gate-r4-final/cli/publish-socket.test.mjs.log
0d94b050bd04cd3e88053b771d882075ba373f14f321502c5d214d59e9bb7fb7 agents/magica/work/queue-285/gate-r4-final/cli/reply-limits.test.mjs.log
83a9cfa63d47a61092a76a832e2053b2343187105701aa96d38b9ce919a43565 agents/magica/work/queue-285/gate-r4-final/cli/revoke-window.test.mjs.log
4b59c7ff132d30a757df6fe84cab072b98cc92fbab156841ec148e05631ff41c agents/magica/work/queue-285/gate-r4-final/cli/session-clear.test.mjs.log
75e9f5113a2c04c2008f5f289d51fd234b18683c66a1407381fd0d56253a1aa2 agents/magica/work/queue-285/gate-r4-final/cli/session-cli.test.mjs.log
820ba254e7d78a6f67123694bbf05fb5e5442339e981ef9fa13c95b83a31e761 agents/magica/work/queue-285/gate-r4-final/cli/session-launch.test.mjs.log
d794a7b383bab3c5793558788f3ed45a9e3d39bf12de1dbe956b218f63566f22 agents/magica/work/queue-285/gate-r4-final/cli/stack-copy.test.mjs.log
69ff6bd9eac3e060cfb345f4f98aecca33210d3a1cf51818e9e09743c9593603 agents/magica/work/queue-285/gate-r4-final/cli/stack-instances.test.mjs.log
ac7344e4dbc442a7209a040eea64f0961c0a916a0ed7a0383779799ae45541e5 agents/magica/work/queue-285/gate-r4-final/cli/stack-release-external.test.mjs.log
1225f15558443da6e92667aca271d53aaea7a68a92dc7b3a5f662eba756ea276 agents/magica/work/queue-285/gate-r4-final/cli/stack-release.test.mjs.log
b18c0cde266ec753e8a7335761a40e11b6ec0afa348729a253c0b55600ce886d agents/magica/work/queue-285/gate-r4-final/cli/stack-upgrade.test.mjs.log
6c6add4badd13339057babb32f4ae31659fe4bfb876459a660694899700e671b agents/magica/work/queue-285/gate-r4-final/cli/tester-http.test.mjs.log
b7f43878bdd8e2d1b8075ba16232d3c05dedad546e0182491d27df3fb19ca652 agents/magica/work/queue-285/gate-r4-final/cli/tester-reads.test.mjs.log
441db39af976143186c138bd6fc9bcf9b453206639e99810577016010998e713 agents/magica/work/queue-285/gate-r4-final/cli/tester-threads.test.mjs.log
3fcb791161838cb7bac2b044f994c658c46cded236a6be86b5636a3b7e813abe agents/magica/work/queue-285/gate-r4-final/cli/tester.test.mjs.log
eba3c12680d187ffb4d7419c88bcbb84b60b6245d48dbb22425b0085b11180c7 agents/magica/work/queue-285/gate-r4-final/cli/thread-cli.test.mjs.log
ae372ffda85e2c3b3b32d4d5547ff3321f0123a358daab2fc4e03c6b4ef134e3 agents/magica/work/queue-285/gate-r4-final/cli/thread-launch.test.mjs.log
3f57a6a8e64244f4bd6f58fd4ef6800b1d39bd3c942fbe24b9a6144cadcb9ad1 agents/magica/work/queue-285/gate-r4-final/cli/thread-revoke.test.mjs.log
122239cad3f48737102c3a7980eafc9e6aef6aa33670c0ec54fe0838d006f13f agents/magica/work/queue-285/gate-r4-final/cli/trackers-boot.test.mjs.log
c786a1c2e8aac59bc9e3d47986f4490ea70397ac72d2c9d92e2647da84079900 agents/magica/work/queue-285/gate-r4-final/cli/transport.test.mjs.log
79e04b0aad591a3c5146d7593a5a080473b34748b3b99713aad01f35f7e9e477 agents/magica/work/queue-285/gate-r4-final/cli/usage.test.mjs.log
431c95ddbe51185e8565b56384ff35f229939c96cf67aaf05203c1c4c76434b4 agents/magica/work/queue-285/gate-r4-final/cli/verbs.test.mjs.log
1099866589d1ec26e1da1587dd3bc661d6af83b4b8027d8b56bb80cdd325edbc agents/magica/work/queue-285/gate-r4-final/harness/bundle.test.mjs.log
efaa20698497cc91ccbf586b1fc8e0090cc67258c2cb8652638f0d91acb636bd agents/magica/work/queue-285/gate-r4-final/harness/citation-runner.test.mjs.log
bf6e527228f0a7b9acd8499a50dd02bea11e4e563690cb377a38e7ef6526b42d agents/magica/work/queue-285/gate-r4-final/harness/claude-gate.test.mjs.log
bc07e35fb042ca1039d18fd5421c6bdcd69a29761bb39869d037e8071181a29f agents/magica/work/queue-285/gate-r4-final/harness/claude-session.test.mjs.log
9526c194bf46c3917785664728355f18f493040ad3dc120d0d84539e03188ef1 agents/magica/work/queue-285/gate-r4-final/harness/creative.test.mjs.log
ba133f48d2e7425769db81de2532c1d5496d68968dba97c75444769b81426fbf agents/magica/work/queue-285/gate-r4-final/harness/gate.test.mjs.log
c8a85d1f441f5b0d9d04126803d69e76187cfece3ab057203da82c59043da6e5 agents/magica/work/queue-285/gate-r4-final/harness/git-tools.test.mjs.log
8aa26d6e32a23e199be1255427edd0d1e66119add034348a56b80c983d4c72e9 agents/magica/work/queue-285/gate-r4-final/harness/mcp-server.test.mjs.log
9f94d44e5ea4b2571de7b741b05693ef55138420a3247933aa92741612faa601 agents/magica/work/queue-285/gate-r4-final/harness/pi-session.test.mjs.log
aa917f9598ed6ff1823e8fad12ca3a363b725f061d7127da84c35b359b9e1ee3 agents/magica/work/queue-285/gate-r4-final/harness/raise-domain.test.mjs.log
5956d58f54a569aeedaaf3281a122c77fab8524b41a07e8f4592b23c7d66bcbd agents/magica/work/queue-285/gate-r4-final/harness/runner.test.mjs.log
61a88a974a76ff283fb57d7d3ed97f96fe6a522330e21dfa808daa41ed1f9e3e agents/magica/work/queue-285/gate-r4-final/harness/skills.test.mjs.log
60b4a3090e0ef98c0d85ee0e9ce7c47ffe9a952d1b4d1ba11ce1ca4a082616ac agents/magica/work/queue-285/gate-r4-final/harness/spec-tools.test.mjs.log
1b4c3faa2035994bae0921726cea3c0a78ba92a541803bc018def8166a5f590a agents/magica/work/queue-285/gate-r4-final/harness/tools.test.mjs.log
8f964a7f391cc35a4308ed3286487f93c2a08c5388b3e5e89e59d65698d896ce agents/magica/work/queue-285/gate-r4-final/mutant-summary.log
2cdbd45225f70cc9814535a0609f22f945d089ab243cbf9ba1925b9c5e775ac4 agents/magica/work/queue-285/gate-r4-final/mutants/M1.log
c06365b143f58f59023fe12e48d1baa1f264bc8bfa5d7944244c72e55d9eb749 agents/magica/work/queue-285/gate-r4-final/mutants/M1.patch
5f5358727a146e1f7ffadd8fbf3996b62055f07a7b892dbb5c85e46d3e8bb5ab agents/magica/work/queue-285/gate-r4-final/mutants/M1.txt
6cd98e55d3af97b29fb4f0c1f480d023a6a3d22afe33033659cdff4fb81a5ed9 agents/magica/work/queue-285/gate-r4-final/mutants/M10-case1.log
ac8fa83440c050a33448563fa62c8141b4186a99b98804a8fcb4bd82f2d4c0b1 agents/magica/work/queue-285/gate-r4-final/mutants/M10-case1.patch
219c39c3f32c50c267c5ebb91c53eb1d604bee1cac2c1dcef7d795eaf72dd5e7 agents/magica/work/queue-285/gate-r4-final/mutants/M10-case1.txt
df30700c70733958068673649caf9ba1bd48886b3d27408e0b4cbcb66958fb16 agents/magica/work/queue-285/gate-r4-final/mutants/M10-new.log
ac8fa83440c050a33448563fa62c8141b4186a99b98804a8fcb4bd82f2d4c0b1 agents/magica/work/queue-285/gate-r4-final/mutants/M10-new.patch
8c82896f11c9a65670cb4d74e3ff4c0dcd08707d8ad12f70c78b55bd15986271 agents/magica/work/queue-285/gate-r4-final/mutants/M10-new.txt
9dfb8cc7f364b43154ec605c04e6087b44cc1eaa80f3b5e6830120bdad08038f agents/magica/work/queue-285/gate-r4-final/mutants/M11.log
e45b815fcfb78ed9626240fe05bcb5f5f4ddaf6ed49c30c7194682d915e45fb3 agents/magica/work/queue-285/gate-r4-final/mutants/M11.patch
c5c94d557c3de0174a4f349ce439ecb71f33af192f6964c1a46da2d8fc8d4ac3 agents/magica/work/queue-285/gate-r4-final/mutants/M11.txt
013a7cb8fd31d4a83a08bf166f0a9fb70d871597aad0074f9ffcea01ec9447fa agents/magica/work/queue-285/gate-r4-final/mutants/M12.log
0817365531b4c4128e4d99517714010a941df2e3ab018536c6769f4b7e116353 agents/magica/work/queue-285/gate-r4-final/mutants/M12.patch
8c0ffeee418bbd0d5a065304cab7f0674c375391d36ed292f3970f3f839a735d agents/magica/work/queue-285/gate-r4-final/mutants/M12.txt
c29e10e0ef6b3c59ded6ce2982f2cf6452fed5f9b859943cf8053da8fb108ec7 agents/magica/work/queue-285/gate-r4-final/mutants/M13.log
a9426d7e2460b3a7af1b77065b9ad1694f4dab600584f6a959b707af8f6d7eee agents/magica/work/queue-285/gate-r4-final/mutants/M13.patch
03ba5e226632fa4d70d6a3146f6c3155e44b8d593f15e666241930c9571b4803 agents/magica/work/queue-285/gate-r4-final/mutants/M13.txt
7de7822666e9c683b52cbace96eb2534d38b9871648c9f043bccab97b6d902c9 agents/magica/work/queue-285/gate-r4-final/mutants/M14.log
bbee0309658083e837aed9ac867ebd836971ef18a5c98ed4d0930edfd3335161 agents/magica/work/queue-285/gate-r4-final/mutants/M14.patch
27bd665683c1406683ac2f3cbcdf21b000f33d86152fcc66a346aacf284ce336 agents/magica/work/queue-285/gate-r4-final/mutants/M14.txt
f3dc1ae22e8fa23e25945917750ddf44e3b8ef4fad8859860f97f3b41cf6dcb8 agents/magica/work/queue-285/gate-r4-final/mutants/M15.log
811e583605b42ab01f4cffe61ba16dcc9c40947d3ad3839e8ea084a7158e784d agents/magica/work/queue-285/gate-r4-final/mutants/M15.patch
ca02d178a90f9c500b448bc5568d68b272dcdcfe36c92958f2e43a5914a2ec78 agents/magica/work/queue-285/gate-r4-final/mutants/M15.txt
91647571511bb1a6b956778d92ae15a4f6ec6001d9a2a7da9303688875ee3fcb agents/magica/work/queue-285/gate-r4-final/mutants/M2.log
80804bf2a86cf53d134619c3e28f5112ee43aea967d26404dff0434565ae9388 agents/magica/work/queue-285/gate-r4-final/mutants/M2.patch
0d521a2330b052424b3949022186abfa306cbece589713e83ee30ad3b1dfe9e9 agents/magica/work/queue-285/gate-r4-final/mutants/M2.txt
811084a55d331889242df9ad420f5214a6c8c62a867cf76c38ee8d0496174b22 agents/magica/work/queue-285/gate-r4-final/mutants/M3.log
7fbcab49e31e9cdf07e3147f1d8c99bacbb71d772459641b969bd6e7ead97d0f agents/magica/work/queue-285/gate-r4-final/mutants/M3.patch
4eef66484ca9e169aa56eb20a1127008b4d272e046a408601ee6a55dd7f0047f agents/magica/work/queue-285/gate-r4-final/mutants/M3.txt
2daa2af23e370444f1b2ca5df5ad4dcfdddc7e7cc6360d9f531c13927073010b agents/magica/work/queue-285/gate-r4-final/mutants/M4.log
3030c1bc2499936ee327f3bddb529327c9524f814ef3ad5c85e8fb1e4ac40fcf agents/magica/work/queue-285/gate-r4-final/mutants/M4.patch
727c31bca2ee65e8fe80ed7e1341446edbd77d1230f5bc74117736f36a167b15 agents/magica/work/queue-285/gate-r4-final/mutants/M4.txt
d657773844006bb8b8204ec5efc51f9f555b9ec69c3f92acd5930604862a0cd0 agents/magica/work/queue-285/gate-r4-final/mutants/M5.log
265062ec48fc6554cc7691f2518177d636e4311f09230407f472933e4e0f9a6a agents/magica/work/queue-285/gate-r4-final/mutants/M5.patch
dabd9ffc237449869c9ea27cd76cd6e868c2c256f44e162f0a51a465a9e6aaeb agents/magica/work/queue-285/gate-r4-final/mutants/M5.txt
830fde5eaff59ffac6df477998bedeb70b0f9c853c26e038995aaac1028d95e5 agents/magica/work/queue-285/gate-r4-final/mutants/M6.log
e6f618d7ccee08aef6301cab28136b57f208be78915624b90b1bc6461974c9e9 agents/magica/work/queue-285/gate-r4-final/mutants/M6.patch
cd6241193d1ecbb249380de7a0d0c78f2b35ee41e38b228110a82d52506d623a agents/magica/work/queue-285/gate-r4-final/mutants/M6.txt
43a43a458e3d0d2d938d9bc46aaea21e6f03ef423e82b7fa6f122c0f740df421 agents/magica/work/queue-285/gate-r4-final/mutants/M9.log
e4ee228f2cca5129b176dcc469c8f5f12e015be0638b6c551691fe42382ef9ba agents/magica/work/queue-285/gate-r4-final/mutants/M9.patch
84275b1154923e3a974c058559e4e70f8454dbcd10bf9af444e66bb311aeca16 agents/magica/work/queue-285/gate-r4-final/mutants/M9.txt
8dc64b303566c560d4ceff68c2102cfd7f2d629520d51a3a4d7225c40b727f8b agents/magica/work/queue-285/gate-r4-final/npm-root.log
5e2ca9088e90b2c747857ece26227b7eae41e7a49f763609ffe0885a36af2d56 agents/magica/work/queue-285/gate-r4-final/npm-webui.log
6066086769f37f6093587cf5be3699ad5e1076038070afd582309051cca4f16a agents/magica/work/queue-285/gate-r4-final/plugins/channel.test.mjs.log
76e8f0f18076d40e74af077bcee9fa34fd5045b662dd4bbb23a05bf33cbb73e6 agents/magica/work/queue-285/gate-r4-final/plugins/daily-quota.test.mjs.log
56b49f6d2d39fba29692f5eab51d63c8d192887d5b096435d765cf4e52f07b38 agents/magica/work/queue-285/gate-r4-final/plugins/harness-compactions.test.mjs.log
883ccad3e0f28d2483f0eb6392777d46029b94fed5f992cfd605b0648d81bcce agents/magica/work/queue-285/gate-r4-final/plugins/harness.test.mjs.log
29d9184238c1e5a95646338a2cdd29609ffb0861a3e03444146cff5334ad7469 agents/magica/work/queue-285/gate-r4-final/plugins/kinds.test.mjs.log
56fcdbc046af0d1dba7dcfd36024d051049b14dc3bba55c52fa194777c081e51 agents/magica/work/queue-285/gate-r4-final/plugins/loader.test.mjs.log
80723fd1e129fe1a795b7a60e8a521a24d8d8aeca8f9dd2b1afeef988102276e agents/magica/work/queue-285/gate-r4-final/plugins/searxng.test.mjs.log
5eba932624dd7285047194909277d5cb3e487e1f9de565ae08a9083bc29f515f agents/magica/work/queue-285/gate-r4-final/plugins/token-limit.test.mjs.log
805a3591b89140435dfb4eb9d7490c01a8b1e2b3a99fe393e89287ce8fe94d26 agents/magica/work/queue-285/gate-r4-final/plugins/transcript.test.mjs.log
3610c16d6d26faa497b24cba4fbd535cff8e2864656afceee294ce3bfe0761cd agents/magica/work/queue-285/gate-r4-final/restored-controls.log
b308a8a3d4ea7ce594a03fd3c677ea967ad874730de3cdfb469d2054c98c400f agents/magica/work/queue-285/gate-r4-final/run-mutants.py
86e0e865eeeac93b8aa04a07f631419d4269a60e959b2f398b032f80a4a09ab2 agents/magica/work/queue-285/gate-r4-final/run-suites.py
40b1f951561ef851e45d014e19726db2a195f6c90b127c7ca2069ecc8c575aa4 agents/magica/work/queue-285/gate-r4-final/runs.txt
f91fc95a173339137f981e24fbf630acfde957e32c3cd71e28304532083c6a77 agents/magica/work/queue-285/gate-r4-final/scripts/test-auth.sh.log
25579ce07a27584d2b55fe58031f2527b10e32a4e6106c70e909064315cc70b2 agents/magica/work/queue-285/gate-r4-final/scripts/test-conductor.sh.log
92ea8ce5e66d892fefacc76b87d140bcfb8c5a51dc77bdf4a47a6213ac5d2898 agents/magica/work/queue-285/gate-r4-final/scripts/test-config.sh.log
9b482b7a3f0672c872923c06e71d5a88ff085a08170905a6cabe1d2b6fc283b6 agents/magica/work/queue-285/gate-r4-final/scripts/test-discord.sh.log
f4c406d220e1901993bca216afe7ceef8f20e44532f70cd91de3f2dea26299ec agents/magica/work/queue-285/gate-r4-final/scripts/test-extension-package.sh.log
81e87833fece95a18e47a956b4373a36a34efffe3a0a5d84d0b5dba3b933cad2 agents/magica/work/queue-285/gate-r4-final/scripts/test-federation-acceptance.sh.log
83dfaa21c4e4ad941088efab3f69e87ebd2f6bd3cc72ede938e21dc06da8a34f agents/magica/work/queue-285/gate-r4-final/scripts/test-foundation.sh.log
3e2f8024027592e77790db2bbe039803060915ebf37c7b67f04071a7e83d20dc agents/magica/work/queue-285/gate-r4-final/scripts/test-land-work.sh.log
5d9a170308927264d212e3dd00e87463a21d55811cf9b4cb51dce74d6a10fea5 agents/magica/work/queue-285/gate-r4-final/scripts/test-push-check.sh.log
e95247a7751aa13b204ef92deaf4d51e3ece71671296c045a50efac53088f99e agents/magica/work/queue-285/gate-r4-final/scripts/test-queue.sh.log
9f9dd11e2631a24ad55aaf7becc61965c592b00da08a4e72b98e0384d3a13ec7 agents/magica/work/queue-285/gate-r4-final/scripts/test-release.sh.log
a065947f07d70a4721b423da597968630bc8ec1659db14681af42bb3f974077d agents/magica/work/queue-285/gate-r4-final/scripts/test-task.sh.log
88832cfec4a9f6bb445c59e1f8e6ceb477ca14fa113571502ac9ed3850f5f660 agents/magica/work/queue-285/gate-r4-final/tmpdir.txt
32f1ff0e42fffb8bd3fc0c73bd8c365bde1a890bcdcae57eacecbe1fa08b026b agents/magica/work/queue-285/gate-r4-final/webui/agents-browser.test.mjs.log
64e08067a2f8e963f54aef52f6167ac6b643eeec4028780a4d609a6e8bae1ead agents/magica/work/queue-285/gate-r4-final/webui/agents.test.mjs.log
464cb5cfbf5efa755e2d1a8d573db2cfb5a9dfcf8191ee76afa835e183f4d3fa agents/magica/work/queue-285/gate-r4-final/webui/assistant.test.mjs.log
5fbe842e87878c37c382ae453db6b85ea98569a505b47db119f493c05b68ab47 agents/magica/work/queue-285/gate-r4-final/webui/board-held.test.mjs.log
c7aa6a0cbf4a33f33686b423a37ba9afe6f0508172f40f93600d0b1d357cfc83 agents/magica/work/queue-285/gate-r4-final/webui/browser-edge.test.mjs.log
0c0d311724c660f31a69ddc885da0517a83129d9efa1011bbb50deaab02735e6 agents/magica/work/queue-285/gate-r4-final/webui/browser.test.mjs.log
19672eaffd1fa885c26d68798e121e2a4c53bd21f4a767bd22b3002c50cd59fb agents/magica/work/queue-285/gate-r4-final/webui/bus-browser.test.mjs.log
89bee508ee6dffbe2e3e6b507aaa75f0a5975d2a08b335da53b13d7ab8622e35 agents/magica/work/queue-285/gate-r4-final/webui/bus.test.mjs.log
5353c3541f3e073d70afe40833c63f479ee45beee48a3fa7f275025d50e4de7f agents/magica/work/queue-285/gate-r4-final/webui/channel-chat.test.mjs.log
238296c7924f3b9cf7a718f7ee40f7f378cdc69e042adf9cf2f155b42f762ece agents/magica/work/queue-285/gate-r4-final/webui/chat-browser.test.mjs.log
228ea77f10ef503b3bf95c24dc7425616553172276d548d2d94f29c4088e7c73 agents/magica/work/queue-285/gate-r4-final/webui/chat-instances.test.mjs.log
fd3d6672ca1c99e10d98305022079455f47d057e827305da0cf1275373383fc8 agents/magica/work/queue-285/gate-r4-final/webui/chat-sessions-access.test.mjs.log
1aec67de65971400ee06f8bbcd9101ee771608ad83e08fb33113f32921be5c8e agents/magica/work/queue-285/gate-r4-final/webui/chat.test.mjs.log
a7ceea5464e18e88525b28c7eb50163ba4c80dcd87ddbff843c1ecfbc659b408 agents/magica/work/queue-285/gate-r4-final/webui/conversation.test.mjs.log
01b3b972d2d301b945fbe63ca2e42507a6104be127edfaf367a2b83b98fd133a agents/magica/work/queue-285/gate-r4-final/webui/decide-browser.test.mjs.log
444d866c54d18094a7cd31be5473f3c92b9633ee4454a14ba474f5125a2a42e2 agents/magica/work/queue-285/gate-r4-final/webui/decide-sso.test.mjs.log
792e0573e8ed80e8ce651614502b4c8228eb94c64167258b71c4ec54e4915902 agents/magica/work/queue-285/gate-r4-final/webui/decision-http.test.mjs.log
f99fc0415116f7b0826e0785e97cffa3f2639e0ad98584cf8e599f2b805fe3eb agents/magica/work/queue-285/gate-r4-final/webui/discord.test.mjs.log
c82fc4cf34d71418900d0b8d35338dc8d57a22ddcb419faac37f8043f0029027 agents/magica/work/queue-285/gate-r4-final/webui/docs-browser.test.mjs.log
5a633d2a0507300888b9995d59ccb0147593632d9071d3856d6508ec139cb789 agents/magica/work/queue-285/gate-r4-final/webui/editor-browser.test.mjs.log
3cb0c04cfde5426bd303d2354bfe5126ea97a362abec1006c6f23551e00038fe agents/magica/work/queue-285/gate-r4-final/webui/editor-provenance.test.mjs.log
521ebe746943dc0109b68931c2627571416160dce1230e0245de4d8aac209d98 agents/magica/work/queue-285/gate-r4-final/webui/editor.test.mjs.log
1fdefc5dbe76d2bce7acacc599e5f7ee4100223ab4e7eedd755e6fef97244ac8 agents/magica/work/queue-285/gate-r4-final/webui/granted-user.test.mjs.log
b760f5c5ba25f0eaab9501a9d8debc542f699c7c4010e0e14a9108958cdc04a8 agents/magica/work/queue-285/gate-r4-final/webui/history-return-flow.test.mjs.log
1956a9a853510ebb09213e3d4d55c40daee0ca34fdcba94f5dfa5404a2eb6227 agents/magica/work/queue-285/gate-r4-final/webui/instances-browser.test.mjs.log
5b2f512d0f4bf5e17adcee745c23d1021dd7c4869789299d4ab52fa6c9ed8298 agents/magica/work/queue-285/gate-r4-final/webui/instances.test.mjs.log
55e3694e3b59f4320f37d53aaedb66b2e938dc07e6808ac0988106c399647bbf agents/magica/work/queue-285/gate-r4-final/webui/library-cli.test.mjs.log
cc94f4ed5249f82a6232cf954e2dae7becd2ddc31a26d1c295f7f5e6590ffd5c agents/magica/work/queue-285/gate-r4-final/webui/library-status.test.mjs.log
caa933e4d7939d3caa7de1e0f80614de9f7be92647375e397b54fb4bbcad6fdb agents/magica/work/queue-285/gate-r4-final/webui/limits-browser.test.mjs.log
a896f5c083e56928b99af933e572b55487b8c7d4f9a2028135bcc2098376f3d6 agents/magica/work/queue-285/gate-r4-final/webui/limits-route.test.mjs.log
78cc45f8fc5023e6582f9ac9aa22cfaa9bcb6d76fc86d0f0bbf0df438c60c652 agents/magica/work/queue-285/gate-r4-final/webui/markdown-preview.test.mjs.log
576ccf1c467937853bd0b666af20957b7d5424c07cefbf49e3e3b4d9e4b696ce agents/magica/work/queue-285/gate-r4-final/webui/messages.test.mjs.log
662f18ee5e668b603a7699ccd53a3de92ed6f195e7cc620277e80b97e8bbfe36 agents/magica/work/queue-285/gate-r4-final/webui/pinned-copy.test.mjs.log
722ff7f74f394a3acf7735fe6703fe7b2f8dca9d8ce3969f3a3061d3c66d36ba agents/magica/work/queue-285/gate-r4-final/webui/preview.test.mjs.log
de9952d211f777cc66aab61eff74ed6dcf7c6a5b4090813a32bd61165a398dab agents/magica/work/queue-285/gate-r4-final/webui/processing-browser.test.mjs.log
0b8d64eb89a1f732cea19a81ae69feb2d8e50b77e42271000c5b268f798933aa agents/magica/work/queue-285/gate-r4-final/webui/processing-ui.test.mjs.log
a260f098c5fa7ca1b1557889742a70fc085237dc26623e9552114d3dcbd57c27 agents/magica/work/queue-285/gate-r4-final/webui/processing.test.mjs.log
26d05e87bebdaf044c97f50bd9367182664fa9249ea4b2174b212941d497f08c agents/magica/work/queue-285/gate-r4-final/webui/project-file.test.mjs.log
e328e56f0e5463cd6548abab7561697a5f2ed15ccb101aa062d8de5344da8174 agents/magica/work/queue-285/gate-r4-final/webui/project-name-repo.test.mjs.log
fbcc7c0a98cda711ae1600cb076990f8ba1f60e47aaa5001e8a417eadf1bc3d7 agents/magica/work/queue-285/gate-r4-final/webui/proof-cli.test.mjs.log
45935f8c68faf691de7e127fa45bb4e777068031ec0c3327e8d3b67e50087f6d agents/magica/work/queue-285/gate-r4-final/webui/proof.test.mjs.log
6155351033101ad33922a213720290a1d00eb1edeb63963fd6a7840b0e2b1c1f agents/magica/work/queue-285/gate-r4-final/webui/reads.test.mjs.log
f5accc684809da649359a26acf7a9cb555874b46ddf7c6df921365764b08b6e8 agents/magica/work/queue-285/gate-r4-final/webui/relaunch.test.mjs.log
7b3c389e64cfc5cabad106ffa328944c4ebfaf3b92982512a60f7032f8146a23 agents/magica/work/queue-285/gate-r4-final/webui/return-flow.test.mjs.log
4cb0df5263ff01160eceb3491dbc911ca99221db6fb7fab1b6276fd04eac2a83 agents/magica/work/queue-285/gate-r4-final/webui/routes-browser.test.mjs.log
67470a61a57567bee2d12cdf75ed8a33d4ae39b407a67e2c79909f9ef4561220 agents/magica/work/queue-285/gate-r4-final/webui/routes.test.mjs.log
ef6bcdc1c45be394ebfb93313339a001ff99b2be16f3d2408e454031cb3a4529 agents/magica/work/queue-285/gate-r4-final/webui/send-browser.test.mjs.log
1d638b9c08aea844a62f112ab791097286574d0f249dfd4157d363483d92efa6 agents/magica/work/queue-285/gate-r4-final/webui/send.test.mjs.log
c2f493dc4905153a63df26e4fd76cde7ac139ef7e39370743b55bd5f1ccf4ab1 agents/magica/work/queue-285/gate-r4-final/webui/serve.test.mjs.log
61b5164cb80c00d9ff71b80ef01f96c291bfb1740e168cdea32ca63f4b218548 agents/magica/work/queue-285/gate-r4-final/webui/service.test.mjs.log
099cedbcaf1c4f6cb3a0024aedb184236d2a00c2af7c55b5d67be0d0bf1afd1e agents/magica/work/queue-285/gate-r4-final/webui/settings-form.test.mjs.log
181b7fc3a479d0abd7c3114a4695faf11e5145e523decd644ea6215265ff06d0 agents/magica/work/queue-285/gate-r4-final/webui/settings-write.test.mjs.log
340079e82aeb2d9d0ee0ff6463f0ae47d4ed707c5e9d9a2e592cd4327e8ea439 agents/magica/work/queue-285/gate-r4-final/webui/shell.test.mjs.log
53b064bc3b3c017970e0c16a3a1da66266cbfed1f792489fafb7e95af1655f77 agents/magica/work/queue-285/gate-r4-final/webui/sso-browser.test.mjs.log
146d1bf3b80b263125051882ea6ebeb3247c8f4fab8bb473179242b79af123e4 agents/magica/work/queue-285/gate-r4-final/webui/sso.test.mjs.log
1ce10b90a902b8cf84dd77a59c2875ba6b94c4a34729937f76e51ad8b44345b1 agents/magica/work/queue-285/gate-r4-final/webui/tester-browser.test.mjs.log
594a5bf5a631c354e59e3744669511fc7a2e693cdd28b186bba1658fa67eaf79 agents/magica/work/queue-285/gate-r4-final/webui/tester-cli.test.mjs.log
33fb281013c2ac16882786c903248593e0ffd487877d652c68875061fc33a347 agents/magica/work/queue-285/gate-r4-final/webui/tester-listener.test.mjs.log
526db1ce167e0f82e612a2d78be459d4cf5316a9b7079720ab55244ebb533bb1 agents/magica/work/queue-285/gate-r4-final/webui/tester-socket.test.mjs.log
f55b3f91f0c6dca56ea7074cb2554d6faa3f7e06d9c119f0bcc9d05c92afa4df agents/magica/work/queue-285/gate-r4-final/webui/thread-claims-browser.test.mjs.log
1bcdb62e5eb3bb51c1b27ecb7fe93ee58b74c67a054e758dc2da296e93085806 agents/magica/work/queue-285/gate-r4-final/webui/thread-claims.test.mjs.log
624f64c743c4aca0a4db544471feb9b314fa3a49f8afc1749ea2dd025f58109b agents/magica/work/queue-285/gate-r4-final/webui/thread-sharing.test.mjs.log
59c15497d79daca89e120425581bc8ea54d5986c15013e9cd314fca89148d95b agents/magica/work/queue-285/gate-r4-final/webui/usage-browser.test.mjs.log
c2780f148ebda3b352150a67c3730ab0baa1a0ffdfb73ea639d705772fceaef1 agents/magica/work/queue-285/gate-r4-final/webui/usage.test.mjs.log
3291a2f883c5aeefabf115a44d07c052e126bbb9499b2b41960f4a6cb8510f26 agents/magica/work/queue-285/gate-r4-final/webui/user-option-swap.test.mjs.log
3d85724ae7651b9ff539d8e3c25a7cfc60eaf2e5a56582b682e87f4668f16da2 agents/magica/work/queue-285/gate-r4-final/webui/views.test.mjs.log
2301247e29329c02a608b881b572c254c2cd514ed98bc8a04c2a329c92c4520a agents/magica/work/queue-285/gate-r4/bus/access-revoke.test.mjs.log
4a43dcba0cdf84153d46825f480e80eb863288a55797b29bd4629d59dd99d788 agents/magica/work/queue-285/gate-r4/bus/account-migration.test.mjs.log
ce44bf644471d547cd0fc180eeeb7c9310ca78151c29f6193c2229eee10c23f1 agents/magica/work/queue-285/gate-r4/bus/address.test.mjs.log
344c03cfe33d7bdb79c8019ad9fb3d23eb31a80547ed056a9d026d19f7722162 agents/magica/work/queue-285/gate-r4/bus/agents.test.mjs.log
2288290e04514e4a5540d462f4bac1ac1c1d0b9db3c54c143272412d946b5d9d agents/magica/work/queue-285/gate-r4/bus/approval-binding.test.mjs.log
0ead07d6718b82669664a68a6d7883e2037c1f8bcf139ab6e183e329f9b117a0 agents/magica/work/queue-285/gate-r4/bus/broker.test.mjs.log
f322dc4850567874dfce72d67cfeac8aff2e7bff9360ceb44bc8206e90655fd6 agents/magica/work/queue-285/gate-r4/bus/business.test.mjs.log
b32faa27170cd78866e46b304aaa3731fc7d5749bb4039a7e27f6fcd61d58458 agents/magica/work/queue-285/gate-r4/bus/channel-proof.test.mjs.log
66d815a014fe20899473c779c62e528d906184186a8309c4f4f63028cc5a6af0 agents/magica/work/queue-285/gate-r4/bus/chief-of-staff.test.mjs.log
eb80cef4643b1706d28b871aed6a225c1e787dd5064d2a64555b0e0896d63749 agents/magica/work/queue-285/gate-r4/bus/citation-availability.test.mjs.log
fc58f27e45575018e4eeccd07dc40222ce02cf044490df338c1e778e3eec0c66 agents/magica/work/queue-285/gate-r4/bus/citation-guard.test.mjs.log
6837c51f688711726a2da3fa6f22eab56ef0146e5cbd47ebe00a27c0c51d748a agents/magica/work/queue-285/gate-r4/bus/citation-runtime.test.mjs.log
862418d3d4124871ca5fcaf35e16c318a04e2888da83836751ddfea110efeb06 agents/magica/work/queue-285/gate-r4/npm-root.log
d6c57ef19d0a160284ba6cc6b577b3e7ad36521987379584e499812c1fbbd200 agents/magica/work/queue-285/gate-r4/npm-webui.log
8b817148218c3f0bd9c76c19ea9e2faee106f09e3f1ddf1f9aec8a4941132cfe agents/magica/work/queue-285/gate-r4/run-mutants.py
002764b7dec7523299cd104956c3a967b2020c789562ced6db88d7a36714c5af agents/magica/work/queue-285/gate-r4/run-suites.py
c8859b8cb4f817417cfbb48cfb4a89071e66c8bca76cc85b8e91e952094e2580 agents/magica/work/queue-285/gate-r4/runs.txt
136f9094d1d2b7930d00a210646075d378c9fc453620345cc9553fd92b87a6e7 agents/magica/work/queue-285/gate-r4/tmpdir.txt
165ac8c20da4b9be0329cdb0d9b3e7c6af53446d50f9e1f6f64cf8c96f4eef68 agents/magica/work/queue-285/gate/bus/access-revoke.test.mjs.log
a436e7ca6e054568a7a63e46fd773b17538f391dfe9df946ad689eab41cb841e agents/magica/work/queue-285/gate/bus/account-migration.test.mjs.log
75767c08f131d0c25e21c1305a80a78e039856aff8f10f606e5b08974ee69c41 agents/magica/work/queue-285/gate/bus/address.test.mjs.log
e2373d3d32af47283add42ea6c9251a215fd9786f07ccb7c1045634c59ce06c6 agents/magica/work/queue-285/gate/bus/agents.test.mjs.log
03bbd4a0be1f4f833873d83667d788b431948d670992e3e4499d150f1267527b agents/magica/work/queue-285/gate/bus/approval-binding.test.mjs.log
c7be2d9a24f04c3804aee9576f5e116e4a3e0677c67177a520554fea4922849d agents/magica/work/queue-285/gate/bus/broker.test.mjs.log
3351cad8e07f8d5250b8bb0c2f1b37717c51760f20b52f81b33c0153bcb13c21 agents/magica/work/queue-285/gate/bus/business.test.mjs.log
40cb6683cdfa251bf28732bc435da2099338199b7825ac9b2d22427ac39f8a98 agents/magica/work/queue-285/gate/bus/channel-proof.test.mjs.log
23347dfe0c38e100848e8b8d0ce6e834afb02dd1cb261c667305d8275f6567a4 agents/magica/work/queue-285/gate/bus/chief-of-staff.test.mjs.log
db1d36645416814000c674b5b19a18ea3c8300241e87b3b8eabd16dccf271da4 agents/magica/work/queue-285/gate/bus/comment-cursors.test.mjs.log
0ba4bfbd04a536c85e0acc89cba86d58d695bb43567a87b30948e91aa5ec8966 agents/magica/work/queue-285/gate/bus/comment-migration.test.mjs.log
82d3a17772d9189b37e4bac2cadf32284c80a7e9207325bc473ba52efb73cf63 agents/magica/work/queue-285/gate/bus/console-decide.test.mjs.log
8b9bd28443d6aff77514175541997e780ef7e7d1179055bc2adaccaaa54eae22 agents/magica/work/queue-285/gate/bus/creative.test.mjs.log
5aacc8eed52059ddfe4ac4eb0ee9dca81ac9e47e688d0e381b74ba68ca808fba agents/magica/work/queue-285/gate/bus/credential-claim.test.mjs.log
04309d1a801ba0f915b60d7d0653edf6241342b46bc7ceb5c83b6c67325cf639 agents/magica/work/queue-285/gate/bus/credential-status.test.mjs.log
5567d28417bd12913c101408978b95b777cc2ad2a0e6fb92c2e84d2192bf8f52 agents/magica/work/queue-285/gate/bus/credential-store.test.mjs.log
7f5ca995869e71e57385913a490c3cb7c90134f745fb771a6a81d948b879f685 agents/magica/work/queue-285/gate/bus/credential-verbs.test.mjs.log
399d43e4c4c51892d95538ef3d0d09a70d20842dbf65710f5e4fb1590675e733 agents/magica/work/queue-285/gate/bus/credentials.test.mjs.log
684e1f6eaaa0f187eae523378f76307cda73a57b4012d4deadfa0aaddc812cfd agents/magica/work/queue-285/gate/bus/csuite-messaging.test.mjs.log
8ff7b07491ee4a6072cc9dbb4991c41e6369fc386538ab7225a418e8fdfdf6ab agents/magica/work/queue-285/gate/bus/daily-quota-runtime.test.mjs.log
c987d0b0e2c5dff3e015cbc7813a2a87c48cd6d707e36e605f423f97e5d8054d agents/magica/work/queue-285/gate/bus/decision-close.test.mjs.log
e321bb6e0628d79f4028150ab5ea65c327abf7f450915ffdaa80ba285c13c958 agents/magica/work/queue-285/gate/bus/decision-route.test.mjs.log
0a51741dde7a835f0ab70e951da6d9890f934bec9ae05eaf18f416c41b922026 agents/magica/work/queue-285/gate/bus/decisions.test.mjs.log
53851504776f91dbb95ffffb7c7479e471ef2e8d7e52a5871d59f2c64276b5b2 agents/magica/work/queue-285/gate/bus/end-launch.test.mjs.log
6d3fa43627daeff987bea6cc8961c7d13ea13835c6b0b1510141640232c5d4ad agents/magica/work/queue-285/gate/bus/fire-revokes-grants.test.mjs.log
62c79ab8d953f4fa9ede64fd7a1b269bd4fbbe0f7d7106881564316fc0b36133 agents/magica/work/queue-285/gate/bus/gitea-grant-docker.test.mjs.log
374bc9ef18a5d933595a0ca581b8e3a5d13c77af32714d501e45bbd9a2b60ab2 agents/magica/work/queue-285/gate/bus/gitea-grant.test.mjs.log
65441bf33ed60d11010baecafe6aa717471e5d9294adf4715b6d96d62d1685ca agents/magica/work/queue-285/gate/bus/gitea-migration.test.mjs.log
10cbfdc931ba04bdee002e1f8d8a09066fe5bc93077fedbe28a790ee10b1e1d8 agents/magica/work/queue-285/gate/bus/grant-enroll.test.mjs.log
109ada8149d171908d9386ebe3bae256f08b655b144f5b81067a95b9a2583927 agents/magica/work/queue-285/gate/bus/grant-executor.test.mjs.log
2caadd7e81c411654458d4b36f7952d8a2c960eb596da478db970f5740a1a4ae agents/magica/work/queue-285/gate/bus/grant-host.test.mjs.log
0da06c51f5d099f52551a325dc086f1f11c4a5b7391257394b591f099c6fc7ce agents/magica/work/queue-285/gate/bus/grant-migration.test.mjs.log
c97a307d8ac1a4a3db14ed348aea3cbb4fe198b34b54bcce46aaabdc8a4d6a95 agents/magica/work/queue-285/gate/bus/grant-scope-runtime.test.mjs.log
5066e51566443813fe6f0fe4516d5295532a9f807f4a34e5e5a1afb9a5ec5b47 agents/magica/work/queue-285/gate/bus/grant-scope.test.mjs.log
947a27ef64b666032932b1833ab53fa7bc993eb3345000669696fc24589cf1eb agents/magica/work/queue-285/gate/bus/hard-waits.test.mjs.log
02657421abea0327f6781c50a8c1513ce6664b15e08ff75f72a94d441d083744 agents/magica/work/queue-285/gate/bus/host-run.test.mjs.log
1d950acf9c32213a2b6f841fe2d42c9a2b6ff4e66bd0abbb3429603ef4403d99 agents/magica/work/queue-285/gate/bus/host-tools.test.mjs.log
5903235cc1763f13af0d777960a67a6ffea168488019a5c6aeb4c01872220e7d agents/magica/work/queue-285/gate/bus/human.test.mjs.log
3230e31a897004c250ca99a3f1a4a1cf94b646137104ac8dc0343fa3d16c02c0 agents/magica/work/queue-285/gate/bus/instances-verb.test.mjs.log
70e23d6f009a589f4e78762228a7d7540efd7a8ce562c8ea4ead40f6c6418546 agents/magica/work/queue-285/gate/bus/interpreter.test.mjs.log
eb9b5778296bf89bbab64fc55556e984d32cc568b3e5194e6238dbefb631677a agents/magica/work/queue-285/gate/bus/land.test.mjs.log
21d336357d7fca1e006ea05645f73d1669620932204faab0be572858e695c566 agents/magica/work/queue-285/gate/bus/launch-notice.test.mjs.log
fd59e17bbafb07d815900b2f211ab51a14db9dbdba02433afec4886a0854f644 agents/magica/work/queue-285/gate/bus/launcher-released.test.mjs.log
054f68f34f628e4ee7fb197c8d836a8e66a9dcecfa1c8cc38b1d13fd6bfd5c2d agents/magica/work/queue-285/gate/bus/library-sync.test.mjs.log
a7a2a4a808f1687b8beebf658a9f9d76a737a73fb3ec71a97a5018e0c2964e93 agents/magica/work/queue-285/gate/bus/library.test.mjs.log
f189b4f29edad63cae4907fe3418aefb79d68910067a3ab2a08976588346663e agents/magica/work/queue-285/gate/bus/lifecycle-revoke.test.mjs.log
a4a7824fd964f9379a3227ebfe34a07b321c5413250e1309153f24adee2bf9b1 agents/magica/work/queue-285/gate/bus/lifecycle-verbs.test.mjs.log
e425f66a75d86741101e6ba70394399d73bdd22e916a1e68c72da1f2ed543fce agents/magica/work/queue-285/gate/bus/limit-checks.test.mjs.log
3a9675b63d8b1c2ccf2984a876eb08b87ae468dc4972674793a0f606de13551b agents/magica/work/queue-285/gate/bus/limit-stop.test.mjs.log
d63cb10293343d694a43954cc8c432818b025df7ff8f51db49bf867dc0ca3315 agents/magica/work/queue-285/gate/bus/limits-runtime.test.mjs.log
07a1544ec279b78b47f4657650501282607ad850d2eaeeeae3295a279d9fc7e9 agents/magica/work/queue-285/gate/bus/limits.test.mjs.log
2765b2e390dcac152a35074f1ddaf72276420ca720fe43d42050b5c6aa433888 agents/magica/work/queue-285/gate/bus/message-citation.test.mjs.log
e40fd5ff47d3d32fc11d9126bc1e108f5dbc0aff412a4bd14ec582eebe60751f agents/magica/work/queue-285/gate/bus/message-filter.test.mjs.log
400b09c158043b38be5d99c107382d37d97fda0a3dfe22e995ceaeb7cb522f6a agents/magica/work/queue-285/gate/bus/messages.test.mjs.log
6670bf47c54d00616506d6290554dc63f8c6b4502d247a29c52c7c5c0e4b6247 agents/magica/work/queue-285/gate/bus/messaging.test.mjs.log
1e023f038447df07f7d4ca2bb03577b76c58b5f282809d611f33580640d3a1f1 agents/magica/work/queue-285/gate/bus/name-migration.test.mjs.log
6c5a360b4a470ea749718cd68b58bbf417d41d841ae08a26c32cb634ac8aad41 agents/magica/work/queue-285/gate/bus/names.test.mjs.log
094f3462a2c6a79ffa2faf24b37b239aa05196c5996ca6dc9da6ee644bf03f08 agents/magica/work/queue-285/gate/bus/peer-transport.test.mjs.log
5e7b1b06498d9199e7e05b7d39f55b2fd57657c93f8e4b3862b0918063b7fd9a agents/magica/work/queue-285/gate/bus/peercred.test.mjs.log
937d26c22ce9a068e3a38ecea0189d8a2debfb88dc28c3c5f83d6dc0147839fc agents/magica/work/queue-285/gate/bus/plugins-verb.test.mjs.log
1b8a4989d11d7fd6c6164a01a34eca66f695fbe9d3eb06773bf0e548c7e4e48b agents/magica/work/queue-285/gate/bus/principal.test.mjs.log
099b5e4b8c26c889531d7d3afefbbae79b7ae87507c6d161294a6c6ba8e04cfb agents/magica/work/queue-285/gate/bus/process.test.mjs.log
eb7c22be7730a85f4f1cac7b1737df39b165e66fd9d8ba66930f15925c712238 agents/magica/work/queue-285/gate/bus/processing-runtime.test.mjs.log
93ba31f03d968b87f814c2e7009ec276978d7e6ef61dc089704aaf65ebdd2545 agents/magica/work/queue-285/gate/bus/processing-timeout.test.mjs.log
10759e851164ab0ddb89e71d53b3c3ac7b2fc303dd3c7ff73facd8a891872623 agents/magica/work/queue-285/gate/bus/processing-web.test.mjs.log
e269b422237101df3cfab8b7a2de7aa34aa72deab6c61407682b9ba7603a8dfd agents/magica/work/queue-285/gate/bus/processing.test.mjs.log
02fcb70eacbf9de218e9e374f15bf5754dc6f252f44d59251b215fcc38e76bbb agents/magica/work/queue-285/gate/bus/project-await.test.mjs.log
5fc4a03a3f81b0e9e00a26feb41a6850b9d22f03eb1e87ea08c369a294458075 agents/magica/work/queue-285/gate/bus/project-files.test.mjs.log
c2c70614e4e506f90d4fc6fecd2fcf1d9f8bc6b3baf665bd42c0bee7b521716d agents/magica/work/queue-285/gate/bus/project-runtime.test.mjs.log
9ccc38a678edaeb50e78dd32ff1a63483c1a09c95416dc6a5ccddf8395033744 agents/magica/work/queue-285/gate/bus/publish.test.mjs.log
26eed9482a90f8d590970450cc60fc2e0645affce783e3b5e6cc572d2cc35511 agents/magica/work/queue-285/gate/bus/reload.test.mjs.log
8d1f47d9a6a0d0e399591812fd1d6074185c98f99c8e4445650607e099ce8644 agents/magica/work/queue-285/gate/bus/replies.test.mjs.log
fc7dd97ba577e0c8c349728ed007b5c1bc380d39bc037513ba03b1b94cfd8143 agents/magica/work/queue-285/gate/bus/requirements.test.mjs.log
6aba909a93806dbf597948361491675f51bbeabfb2da8f96b09188107f6cba22 agents/magica/work/queue-285/gate/bus/review.test.mjs.log
f9ebaeb0cd19803b9820bafafe22b0d11fb92140be0e2cae48e2a822f65b86ff agents/magica/work/queue-285/gate/bus/revoke-window.test.mjs.log
d1857b0811c788381ce70700a635565f04e159f4c691ba2ec500670ec0e67bd8 agents/magica/work/queue-285/gate/bus/rooms.test.mjs.log
f7912e8d5e62ed5c762611c2d6994cd5b14ade2c613a03a981b6147da6db8c3b agents/magica/work/queue-285/gate/bus/routes-verb.test.mjs.log
19db352329ef1bb3961589426cd98b738d766737583ab8a959a399298d4a3e56 agents/magica/work/queue-285/gate/bus/schema.test.mjs.log
067e1d55602bbbd8441b01fbf98af30a0c2a4c2f735795f686b3004cc7c569cb agents/magica/work/queue-285/gate/bus/session-clear.test.mjs.log
ee0645812caa720a6c6dadb87a507c9b6450e53d64f129a934c9715a59ca7e31 agents/magica/work/queue-285/gate/bus/session-compactions.test.mjs.log
a0f4063b62e33829964d01c4701f6fa53a1a4e04db130556995fdeff57c5b98c agents/magica/work/queue-285/gate/bus/sessions.test.mjs.log
d7cec28d86382f4257e5a5fa43830f057e2816916e5e3a889f2c49143a76e05c agents/magica/work/queue-285/gate/bus/single-use.test.mjs.log
952b00b4b8be9e9b040859e3b1bf1a998d42ff60994ae56acbea3b9dce7aa109 agents/magica/work/queue-285/gate/bus/spec-migration.test.mjs.log
4ecb30123315957c85c0cf57a3f9a37458516c7272053f422e776acd4538b6c3 agents/magica/work/queue-285/gate/bus/spec-review.test.mjs.log
fd6ef3a781f6a6877ca983bf6aab2575b318484ce02332d73906726d94bd25a9 agents/magica/work/queue-285/gate/bus/spec-socket.test.mjs.log
99bfda4b5a4a51ee2510b9063443ce595ec2c0fb6b9468a53779cca841aca137 agents/magica/work/queue-285/gate/bus/spec.test.mjs.log
a46ff7b32c3828c5ca155c764baf010484b20ddddddce01313d9c80a7268f52b agents/magica/work/queue-285/gate/bus/staff-request.test.mjs.log
62235e85812e9043c30f354b7f2845b9556e00f41730140e3427ee2e00962213 agents/magica/work/queue-285/gate/bus/state.test.mjs.log
070c1062cff973022ea79efbe5fc60871e5e4b18f0313d7e1c824c959744353e agents/magica/work/queue-285/gate/bus/store.test.mjs.log
31b0bd06d46b362caf29df339bc327cbcadd19c9be5a844528505dab4faa2890 agents/magica/work/queue-285/gate/bus/task-page.test.mjs.log
e46273799cf36af56b2e18e276a8823e7236a35e32f5dca7e2a569c891860485 agents/magica/work/queue-285/gate/bus/task-read.test.mjs.log
123f9f597326ab4f1f7b7bff25a4d642235ed601213ba68fa7c381e1333cc331 agents/magica/work/queue-285/gate/bus/tasks.test.mjs.log
f92b53ae3c01de3abea42f271dcc5c301c8435b929da95d4b70d434a3b61cc97 agents/magica/work/queue-285/gate/bus/tester-threads.test.mjs.log
c82fd429354c28acd70c88484c415c1cdd55442ed26f55539ff298179f417b69 agents/magica/work/queue-285/gate/bus/tester-writes.test.mjs.log
6c1258f59be227961d53a31b709da31d9602557d240b859aa7a385cb9c8ba103 agents/magica/work/queue-285/gate/bus/tester.test.mjs.log
1d9eac085ace72c24be5a5b7b2c623faba046f8d3355c43acdce40a11f25b6fe agents/magica/work/queue-285/gate/bus/thread-claims.test.mjs.log
c2ac5ac38d0191328a6af9a464de7c6d929a63036a8082d148361ada35bd2fdb agents/magica/work/queue-285/gate/bus/thread-migration.test.mjs.log
b0830e1c8443571f0c53a58cd754758db0034ee794ca3dab99b2985c25ef68d8 agents/magica/work/queue-285/gate/bus/thread-shares.test.mjs.log
c58fa57661b4177265853846b57a0c47451428921401ab3eca5b1577f9c29f72 agents/magica/work/queue-285/gate/bus/threads.test.mjs.log
3cb75a70732b8ed97f1721c12f3a944a2584907c5b3630556e4b1928075d7b50 agents/magica/work/queue-285/gate/bus/transport.test.mjs.log
1f8396749c5352b3e731df8476c69edf4a0096a74a8901572b0806026a3f843e agents/magica/work/queue-285/gate/bus/usage-broker.test.mjs.log
fd9657c6e3f60607ca105e886b4a63827f599473b0bfbfe73f4385b8b3846284 agents/magica/work/queue-285/gate/bus/usage-migration.test.mjs.log
d3725b7e60f6f8e20613025ef776cf8dc8d02f7be307f662c648595ab65f234b agents/magica/work/queue-285/gate/bus/usage-runtime.test.mjs.log
884e803280118072211f38f9719e146a2b691e00dde95398955e86604a47725b agents/magica/work/queue-285/gate/bus/usage.test.mjs.log
c2daf35d42fb8065fff27135f0107d50a2bbe7e7123d084d5168a7a3afd77fef agents/magica/work/queue-285/gate/bus/user-principal.test.mjs.log
7df90f279bf33f7f0afb46498e7dbe2a6e0f7638068cfb2d43ebdebf8c559f0a agents/magica/work/queue-285/gate/bus/viewer.test.mjs.log
a4cd50f2f91fcb29ecfa9282e8ff8b904c4f0f39a3bcf25ab2bcf48a1edd08a9 agents/magica/work/queue-285/gate/bus/web.test.mjs.log
12b98a74ef4f5b66753a9f5394a14c912df0763d3def383a8fd505d8254f41ba agents/magica/work/queue-285/gate/bus/workflow-roles.test.mjs.log
3175b43dcbb4af1a804e31398dc9c44950e74d928eb6b9b903be7f1bc6a71f15 agents/magica/work/queue-285/gate/business/access-levels.test.mjs.log
7a18722118a8f810387fb748de3ccab936654511a8f65912d65af2a64be27723 agents/magica/work/queue-285/gate/business/access.test.mjs.log
b0b6cc83e1551c9090b9098751a180b6a7fa366d475b2eee5c8ab1dc29202067 agents/magica/work/queue-285/gate/business/agent-identity.test.mjs.log
cdf62e328974ebb3af77cee2470c82e1658fc666d73457c48a1462e548a407d5 agents/magica/work/queue-285/gate/business/assistant.test.mjs.log
b1d758b7003285c5962a1e51195cea7fe5e0074764a81fdeef1c90980ef6cb30 agents/magica/work/queue-285/gate/business/business.test.mjs.log
e06ace69f48d9efb8b94db93ae30d87a995b47383f7a587c356c7e94c9cd0279 agents/magica/work/queue-285/gate/business/case1-business-file.test.mjs.log
8dc64b303566c560d4ceff68c2102cfd7f2d629520d51a3a4d7225c40b727f8b agents/magica/work/queue-285/gate/npm-root.log
d37ae47c1ad8ea6189f8eb044879a6a870ac25e4dde31b1dbcec1627afc063d7 agents/magica/work/queue-285/gate/npm-webui-r2.log
7dcee599b2fa3d318aa251a45a3bb6534875614a7a5162037b537dab2fb40ab5 agents/magica/work/queue-285/gate/npm-webui.log
b59cea53f5f27343cc482951b5ba84e0572e97affa305a8488cb24f07a5b036b agents/magica/work/queue-285/gate/run-mutants.py
68434cb6454d426dd30859933fbcc5f4f47645b4c3e242505361607f5b367f57 agents/magica/work/queue-285/gate/runs.txt
2a9f8f15f0c0f54f6b03b790767aacae868367fad0a48c8281b25ba48573c2e5 agents/magica/work/queue-285/gate/tmpdir.txt
08b1950154484173715a761684864a92c0b83ff77d5f87b4d603d1e01a67e979 agents/magica/work/queue-285/hex-pins.txt
4d7feff6cd3d9e6f3b90cce5ea199f7b6eb6c24d2908f6f3fdc72536b0670cb5 agents/magica/work/queue-285/r4-range-diff.txt
9f2585f97b57aa4c14be990a72eeaf0fa5da877660a3e66f878e5e6c611176aa agents/magica/work/queue-285/readers.txt
6a199bbd12fd4ee3183397ffa69a69da6d46e09492346584829d34740530cb6b agents/magica/work/queue-285/role-readers.txt
91babb2a30a47167abef606a2b78fa25e4d285f40e35be8cb33212771ebdd27c agents/scrooge/work/queue-285/BUILD.md
96d3a49f9154448520b74dc4acefbc78fc8d3b1f3038119fd909e3f318484f03 packages/bus/src/broker.mjs
1f61878d74a77f3245bb29e56b600220daf224e73c2829aed74b317057628f6e packages/bus/tests/citation-runtime.test.mjs
6f123ecfe86be3eca025c271239ba79a96d0db16a663adb3aaf7dae971dd1e7f packages/bus/tests/creative.test.mjs
9af7b4678f17d975218a9aee5f4c6a0fe256dcf0f2e508d5121b0feda9b4f110 packages/bus/tests/gitea-grant.test.mjs
9ab6f3bdcba52cc50cbd5efd587579303fe91041a18e5f360a2db30e29c7d011 packages/bus/tests/reload.test.mjs
8e13676d0cf5d661b3049ec022a44c0665f91808aef1e373a6bf73728cba0feb packages/business/README.md
3f13c07e9c51b1d328565f40f8001bc4475821d1985611164e99d2b08da97dc8 packages/business/src/business.mjs
f9d2d88b3ba53acd5ac51014f57db83ded428bd072a4ab68a9c2f87418030edd packages/business/src/instance-settings.mjs
b10af84d7422da4d0e8c0a4fea1064eebbc2fac6a838a1b3939b554e22dedfc9 packages/business/src/role.mjs
de1f04628e400084a46e77fd7e03c7a039f0f80c9e07bb486c9c012f187aa3eb packages/business/src/vocabulary.mjs
212309b5dc1ace2b653fa3c5489a48590bed1467f0f66a231dc88b20ed1f2fb9 packages/business/tests/agent-identity.test.mjs
5b643c6af967578c8bef563a24554e207078f265621ba0c08dd63d9afe9abe62 packages/business/tests/business.test.mjs
8310b8eef4da2fa88d92a35ae1ff62e36ec699700ba246b900bd468d13c4937c packages/business/tests/chief-library-credentials.test.mjs
066befd2210dcfe5e3f395f0e7832e19a68c4673a6ef474106e2801b92cb75a6 packages/business/tests/chief-of-staff.test.mjs
6c96c5e053fa7f43d18c1a65e8b99db00af84995b29ca941524ff3bca71aceeb packages/business/tests/cli.test.mjs
ef811fb3495e9d60b09bda46e4192bed37a4eb5ff03be8bc3b075d9e40c55125 packages/business/tests/hard-waits.test.mjs
b645c946e50add7a9114a5a5096e19ccb03064ca66a7ec8948ded07a3f2d23d5 packages/business/tests/instance-credential-transitions.test.mjs
0746c639a4149f5b1731f4392791d626d8b339bbb2647807c9c1a572bb30858f packages/business/tests/instance-settings.test.mjs
786ba2fd66779700b874230c4533c85d16e1b0a4e61e2d286163e6b5882974f6 packages/business/tests/launch-settings.test.mjs
a574d95326d716da34063f2cabfe9537bc3298671743d1472bbc2bf5f2039fbd packages/business/tests/library-projects-protected.test.mjs
27119cb07adeaf39a455ff8b4e4d011ed566eb1259e8ea58332db4033733988f packages/business/tests/library-seats.test.mjs
0bd9bce351df3e0275661952dcc26a381a606e4b24ec57f4aa72e11a6edbaee7 packages/business/tests/lifecycle-settings.test.mjs
adcd605a0524df6b3aa98d934746376669f2caa11aeaeb3809753e07f1a57678 packages/business/tests/resolve.test.mjs
569c52a78a35b9dbf2eea88d84f4416f13cd0d7faddd999eb3d283510408de11 packages/business/tests/role.test.mjs
ff515ce6e43411c6549a0e073776131fc97d6eed0fcaab09f315f2eb129926f9 packages/cli/tests/case2-install.test.mjs
8d4370f0015e5d9c316358e2d849f9484894eb5408f25e4c7387d971d2f0eca3 packages/cli/tests/launcher.test.mjs
c2fcfac8b85c8ac5ab7ea42e09c061a110fe3b5933d9a0dd30bec5e2654723f3 packages/cli/tests/thread-launch.test.mjs
c2f7da3595999aca7665d4feba0774d042bb30cc794befc43fa4e73a9a4c4856 packages/cli/tests/trackers-boot.test.mjs
178d777f7981f374029326d35795b7f5a30466fd0f8bf88ab45998f3886b1b44 packages/control-board/tests/creative-hidden.test.mjs
49e5a394b3e4f07e9a57823f2ccaadc9a831fa9e99e65d6cf74dbeae5fb922a5 packages/discord/tests/library-seat.test.mjs
cc351c842e1261ef179da051e0ebc2f8abe9132f4ca81f4cbdbd3612e47d1914 packages/harness/tests/creative.test.mjs
c781c4108824db7f17cc4b514e3b0d446120dc1ad7c05e5bf5a72edcac70d054 roles/chief-of-staff.json
db16c358820e199910eabe06f885a53a4bde2502aeafa5444c12d9b29c74880c roles/chief-of-staff.md
962f1e8ca9d56d7ad7dd4f82a57b97b834bacdc72c3fe774f9a9afccf7dd72e9 roles/companion.json
cad0360c16db9b2659370e6363937a27d61e9f6c4fae711a2dfc5b89aadead81 roles/companion.md
031807451adfe5e4643da2ff59fab0a041fce519f4cb84d749ec6f10edff8f36 roles/continuity.json
75522c66ccd242971b4b00786112ef37b41c972af5b0d98c011697169fba7db2 roles/continuity.md
1dfc6629dc70dd8020483456db140751010e81a44fbd49308580f0c6356c2471 roles/fact-checker.json
2d01f771831d52a1d9ddde8c1183601051782efd39899605949761fdd5e07291 roles/fact-checker.md
2c69c26460574948584eae487e944b7240cfa37a0a0f3ddeaabd682815ebf6ed roles/ideas.json
bb403867a2ba33ea271d2d576165c6131e43446f2d5deb4eb86389398cb0592d roles/ideas.md
3a55947b867241dd42b78588276f6f901d374b519f3964ba0acc4b782513224c roles/proofreader.json
054f6f888064eca4c6b7b1c0180bd2ad968b10429f045db7aaa92453cbddd1ab roles/proofreader.md
38d36d8cca7f4f7141af5469f0a17dd2a44a5ec26ef113ad9a01c9b013968501 roles/research.json
2a66291a7a8d21b9f587c6226d408667a775b2846bc9950606e73b210f4ac0d1 roles/research.md
+45
View File
@@ -0,0 +1,45 @@
# Row 285 / #1790 r4 review packet
Candidate: the pushed magica/row285-r4 tip accompanying the manifest.
Base: d0a6a87cd (landed 296 + 217). Initial r4 receipt: 0f6cdc861.
Owner: Magica. First reviewer: Poe. Landing reviewer: Webby. Sage posts requests.
The build grants the six creative definitions library.write and the declared Gitea
service, gives the chief a read-only Gitea declaration, and requires its instance
reference exactly when the business declares a library. The current write-scoped
grant path still refuses the chief. No live business file is changed.
Binding scope is the C2-08b brief, Scrooge's retained BUILD, and mos-1580 through
mos-1586 as quoted in BUILD.md. N1 (creative-only library.write role validation)
remains a follow-up. No grant executor or write verbs join this row.
Review the entire original role/contract/vocabulary patch and the new instance
settings logic. The latter is limited to actual instance credential references,
duplicate-first hiring, and the creative-only equal-service exception:
- Derive creative status from reviewed withinRole library.write, not role names.
- Preserve all non-creative definition fences and base accepted values.
- Validate the full proposed creative change before its credential guard.
- Permit retention only between creative definitions with identical DECLARED
service sets. Host stays in that set even though it has no file reference.
- Retain credential objects byte-for-byte; call no credential creation or mint.
- List creative definitions only for the existing Gitea store add path; another
service retains the base accepted value.
Check every old assertion, especially instance-settings 68/131/189/211/290/306/311
and lifecycle 191. Those two files must be byte-identical to the initial r4 tip.
Check the B1 token-only insertions against e0c6142f3 and the final data fixes
against d0a6a87cd. The only non-credential fixture change is the explicitly ruled
tracker credentials?.vikunja guard; its put() role set remains pm/cto/coder/reviewer.
Read the new instance-credential-transitions tests. Its auxiliary creative-host
case must validate as an ordinary business before the declared-service fence
refuses it, so M13 is evidence for the equal-set guard itself. M15 must preserve
the old validator-first BusinessError. M11/M12 cover the two earlier guard reds.
M10 must independently fail the new no-library positive and unchanged Case1 test.
Manifest hashes, final whole-suite/script counts, mutant receipts, blob restoration
and controls are recorded in BUILD.md and gate-r4-final. Earlier r3/r4 failed logs
are historical evidence and are not green acceptance claims. The completed release
file has an 1800-second bound because its unchanged collection run takes about
600 seconds; the original 300-second interruption is retained, never overwritten.
@@ -0,0 +1,365 @@
diff --git a/packages/bus/tests/reload.test.mjs b/packages/bus/tests/reload.test.mjs
index 091b37b26..342d578d0 100644
--- a/packages/bus/tests/reload.test.mjs
+++ b/packages/bus/tests/reload.test.mjs
@@ -194,7 +194,7 @@ test('T14 a file whose project root differs from the boot copy is not reloaded,
});
test('T14 a file whose library mapping differs from the boot copy is not reloaded, because the mirror is ensured at start', async (t) => {
- const f = await setup(t, doc => { doc.projects.books = mappingEntry(); });
+ const f = await setup(t, doc => { doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } }; doc.projects.books = mappingEntry(); });
const doc = JSON.parse(readFileSync(f.file, 'utf8'));
doc.projects.books.branch = 'other';
writeFileSync(f.file, JSON.stringify(doc, null, 2) + '\n', { mode: 0o600 });
@@ -202,7 +202,7 @@ test('T14 a file whose library mapping differs from the boot copy is not reloade
assert.equal(added.restart, true);
assert.equal(f.reloads.length, 0);
// The same library entry reloads.
- const g = await setup(t, doc => { doc.projects.books = mappingEntry(); });
+ const g = await setup(t, doc => { doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } }; doc.projects.books = mappingEntry(); });
assert.equal(g.ask('instances.set', { revision: g.revision(), instance: 'sec-1', op: 'add', definition: 'security-reviewer' }).restart, false);
assert.equal(g.reloads.length, 1);
});
diff --git a/packages/business/tests/business.test.mjs b/packages/business/tests/business.test.mjs
index 9d4eda831..f78789250 100644
--- a/packages/business/tests/business.test.mjs
+++ b/packages/business/tests/business.test.mjs
@@ -6,6 +6,7 @@ import { join } from "node:path";
import { pathToFileURL } from "node:url";
import { BusinessError, businessFilePath, configDir, loadBusiness, validateBusinessDocument } from "../src/index.mjs";
import { THREAD_IDLE_SECONDS } from "../src/business.mjs";
+import { CREATIVE_DEFINITIONS } from "../src/vocabulary.mjs";
import { launchDoc, businessDoc, REPO, REPO_ROLES, rolesCopy, tmp, writeJson } from "./helpers.mjs";
test('C2-04: library mappings load without roots, remain frozen, and retain mapping refusals', async t => {
@@ -14,6 +15,7 @@ test('C2-04: library mappings load without roots, remain frozen, and retain mapp
const root = tmp(); t.after(() => rmSync(root, { recursive: true, force: true }));
const doc = businessDoc(root), file = join(root, 'businesses/acme.json');
doc.projects = { books: mappingEntry(), ...doc.projects };
+ doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
const loaded = validateBusinessDocument(doc, file, { rolesDir: REPO_ROLES });
const { checkMapping } = await import('../../library/src/mapping.mjs');
assert.deepEqual(loaded.projects.books, checkMapping(mappingEntry()));
@@ -41,6 +43,7 @@ test('C2-04: an otherwise valid publish grant cannot name a library repo', async
const root = tmp(); t.after(() => rmSync(root, { recursive: true, force: true }));
const doc = businessDoc(root);
doc.projects.books = { ...mappingEntry(), remote: 'https://git.example/writer/books' };
+ doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.roles.coder.identity = { name: 'Coder', email: '[email protected]', gitea: { url: 'https://git.example', user: 'acme-coder' } };
doc.roles.coder.publish = ['books'];
refuses(() => validateBusinessDocument(doc, join(root, 'businesses/acme.json'), { rolesDir: REPO_ROLES }), /publish.*library/);
@@ -273,28 +276,58 @@ test("the shipped example refuses as written and validates once filled in", () =
assert.equal(id, 15);
});
+// Row 285 (C2-08b, #1790, mos-1330): a creative definition declares gitea, so its instance names
+// the reference. The store form needs no token file, and the bus reads a missing one as no token.
+const CREATIVE_GITEA = Object.freeze({ gitea: Object.freeze({ store: true, rotateBy: "2099-01-01" }) });
+
// Row 213 (C2-08, #1714), deviation D1: the persona vars sit on a creative instance only, and
// both or neither. The var checks themselves are vars.mjs's.
test("persona vars: agent layer, creative definition only, both or neither", () => {
const sha = "a".repeat(64);
const persona = { "persona.name": "Bean", "persona.sha256": sha };
- const business = check((d) => { d.roles.bean = { definition: "companion", vars: { ...persona } }; });
+ const business = check((d) => { d.roles.bean = { definition: "companion", credentials: CREATIVE_GITEA, vars: { ...persona } }; });
assert.deepEqual({ ...business.roles.bean.vars }, persona);
- assert.doesNotThrow(() => check((d) => { d.roles.bean = { definition: "ideas" }; }));
+ assert.doesNotThrow(() => check((d) => { d.roles.bean = { definition: "ideas", credentials: CREATIVE_GITEA }; }));
refuses(() => check((d) => { d.vars["persona.name"] = "Bean"; }), /persona\.name can't be set at the business layer/);
refuses(() => check((d) => { d.roles.pm.vars = { ...d.roles.pm.vars, ...persona }; }),
/roles\.pm\.vars: persona vars need a creative definition \(pm isn't one\)/);
refuses(() => check((d) => { d.roles.chief.vars = { ...persona }; }), /chief-of-staff isn't one/);
for (const key of Object.keys(persona)) {
- refuses(() => check((d) => { d.roles.bean = { definition: "research", vars: { [key]: persona[key] } }; }),
+ refuses(() => check((d) => { d.roles.bean = { definition: "research", credentials: CREATIVE_GITEA, vars: { [key]: persona[key] } }; }),
/roles\.bean\.vars: persona\.name and persona\.sha256 are set together or not at all/);
}
for (const [key, value] of [["persona.name", "x".repeat(41)], ["persona.name", "Be\nan"], ["persona.name", "Be\u0007an"], ["persona.name", "Be\u2028an"], ["persona.name", "Be\u2029an"], ["persona.name", 7],
["persona.sha256", "A".repeat(64)], ["persona.sha256", sha.slice(1)], ["persona.sha256", `${sha}0`]]) {
- refuses(() => check((d) => { d.roles.bean = { definition: "companion", vars: { ...persona, [key]: value } }; }), new RegExp(`variable ${key.replace(".", "\\.")}`), 2);
+ refuses(() => check((d) => { d.roles.bean = { definition: "companion", credentials: CREATIVE_GITEA, vars: { ...persona, [key]: value } }; }), new RegExp(`variable ${key.replace(".", "\\.")}`), 2);
+ }
+});
+
+// Row 285 (C2-08b, #1790, mos-1330): the chief and each creative definition declare gitea, so an
+// instance without the reference refuses. Amendment 1 (mos-1580, sage-4060): the chief
+// requires its reference only in a library business; creative definitions always require it.
+test("row 285: a chief or creative instance without credentials.gitea refuses at load", async () => {
+ const { mappingEntry } = await import("../../library/tests/helpers.mjs");
+ refuses(() => check((d) => { d.projects.books = mappingEntry(); delete d.roles.chief.credentials; }),
+ /chief-library-gitea-required: .*roles\.chief\.credentials/);
+ for (const definition of CREATIVE_DEFINITIONS) {
+ refuses(() => check((d) => { d.roles.bean = { definition }; }),
+ /roles\.bean\.credentials must reference exactly the services its role definition needs \(gitea; got none\)/);
+ assert.doesNotThrow(() => check((d) => { d.roles.bean = { definition, credentials: CREATIVE_GITEA }; }), definition);
}
});
+// Row 285 (C2-08b, brief): a creative instance may carry identity and publish, under the rules at
+// business.mjs:155-166, which the grant path reads. The grant itself still refuses it (#giteaRole).
+test("row 285: a creative instance with identity and publish loads", () => {
+ const identity = { name: "Bean", email: "[email protected]", gitea: { url: "https://git.example", user: "acme-bean" } };
+ const business = check((d) => {
+ d.projects.stack.remote = "https://git.example/acme/stack";
+ d.roles.bean = { definition: "companion", credentials: CREATIVE_GITEA, identity, publish: ["stack"] };
+ });
+ assert.deepEqual({ ...business.roles.bean.identity, gitea: { ...business.roles.bean.identity.gitea } }, identity);
+ assert.deepEqual([...business.roles.bean.publish], ["stack"]);
+});
+
// Row 194 (#1692, D2.5, T17): the per-agent forbid and the retired list.
test("row 194 keep, noHire and retired validate, and a file without them loads as before", () => {
const plain = check();
diff --git a/packages/business/tests/cli.test.mjs b/packages/business/tests/cli.test.mjs
index 3aa1d52ee..beb367f8c 100644
--- a/packages/business/tests/cli.test.mjs
+++ b/packages/business/tests/cli.test.mjs
@@ -11,7 +11,7 @@ const CLI = join(REPO, "packages", "business", "src", "cli.mjs");
test('C2-04: business validate and resolve skip a library before code projects and credential checks', async t => {
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
const { rmSync } = await import('node:fs');
- const s = setup(doc => { doc.projects = { books: mappingEntry(), ...doc.projects }; });
+ const s = setup(doc => { doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } }; doc.projects = { books: mappingEntry(), ...doc.projects }; });
t.after(() => rmSync(s.root, { recursive: true, force: true }));
writeJson(projectFilePath(s.doc.projects.stack.root), { projectVersion: 1, id: 'stack', vars: { 'tracker.project': 3 } });
const checked = run(s, 'validate', 'acme');
diff --git a/packages/business/tests/instance-settings.test.mjs b/packages/business/tests/instance-settings.test.mjs
index e85366562..54c22e0e0 100644
--- a/packages/business/tests/instance-settings.test.mjs
+++ b/packages/business/tests/instance-settings.test.mjs
@@ -9,7 +9,7 @@ import { mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync }
import { join } from "node:path";
import { instanceSettings } from "../src/instance-settings.mjs";
import { projectFilePath } from "../src/project.mjs";
-import { businessDoc, REPO, rolesCopy, systemConfig, systemFor, tmp, writeJson } from "./helpers.mjs";
+import { businessDoc, FAR_DATE, REPO, rolesCopy, systemConfig, systemFor, tmp, writeJson } from "./helpers.mjs";
const CLI = join(REPO, "packages", "business", "src", "cli.mjs");
const roots = [];
@@ -22,7 +22,7 @@ const LEVELS = { pi: ["off", "minimal", "low", "medium", "high", "xhigh", "max"]
test('C2-04: instance settings skip a library while checking a later code project', async () => {
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
- const f = fixture(doc => { doc.projects = { books: mappingEntry(), ...doc.projects }; });
+ const f = fixture(doc => { doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } }; doc.projects = { books: mappingEntry(), ...doc.projects }; });
writeJson(projectFilePath(f.doc.projects.stack.root), { projectVersion: 1, id: 'stack', vars: { 'tracker.project': 3 } });
const before = f.settings.read('acme');
f.settings.set('acme', { revision: before.revision, instance: 'gate-215', op: 'add', definition: 'merge-gate' }, 'jason');
@@ -286,7 +286,8 @@ test("row 213 a creative instance is the human's: add, vars and definition chang
writeFileSync(join(f.root, "config", "personas", "acme", "bean.md"), text, { mode: 0o600 });
const persona = { "persona.name": "Bean", "persona.sha256": createHash("sha256").update(text).digest("hex") };
const view = f.settings.read("acme");
- assert.deepEqual(view.definitions.companion, { services: [], accepted: true });
+ // Row 285 (mos-1332 item 4): the companion definition declares gitea.
+ assert.deepEqual(view.definitions.companion, { services: ["gitea"], accepted: true });
const add = { instance: "bean", op: "add", definition: "companion", vars: persona };
for (const actor of ["chief-of-staff.chief", "tester"]) {
assert.throws(() => f.settings.set("acme", { revision: view.revision, ...add }, actor), e => e.code === "organization-creative-human-only", actor);
@@ -331,8 +332,8 @@ test("row 213 a creative instance is the human's: add, vars and definition chang
// every actor, the human included. The listing's endProtected is that same check for its reader.
test("row 256 T1-T3, T5 the human deletes a creative instance, no other actor does, and the assistant stays", () => {
const f = fixture(doc => {
- doc.roles.bean = { definition: "companion" };
- doc.roles.muse = { definition: "ideas" };
+ doc.roles.bean = { definition: "companion", credentials: { gitea: { store: true, rotateBy: FAR_DATE } } };
+ doc.roles.muse = { definition: "ideas", credentials: { gitea: { store: true, rotateBy: FAR_DATE } } };
doc.roles.assistant = { definition: "assistant", holder: "mos" };
});
const del = (instance, actor) => () => f.settings.set("acme", { revision: f.settings.read("acme").revision, instance, op: "delete" }, actor);
@@ -377,7 +378,7 @@ test("row 256 T1-T3, T5 the human deletes a creative instance, no other actor do
// instance can't be kept, launch.by or an arbiter, so the check it reaches is the last-listed one.
test("row 256 T4 the human's delete of the only listed instance, a creative one, is the last-listed refusal", () => {
const f = fixture(doc => {
- doc.roles.bean = { definition: "companion" };
+ doc.roles.bean = { definition: "companion", credentials: { gitea: { store: true, rotateBy: FAR_DATE } } };
doc.launch.instances = ["bean"];
});
const bytes = readFileSync(f.file, "utf8");
diff --git a/packages/business/tests/library-projects-protected.test.mjs b/packages/business/tests/library-projects-protected.test.mjs
index 51672bd7b..d4d09d94f 100644
--- a/packages/business/tests/library-projects-protected.test.mjs
+++ b/packages/business/tests/library-projects-protected.test.mjs
@@ -14,6 +14,7 @@ function fixture(t) {
books.universes.hybrid = { kind: 'hybrid', name: 'An invented crossover',
sources: ['harbor', 'second'], books: ['Hybrid Book'], playground: [], constraints: [], notes: 'Fixture only' };
doc.projects = { books, ...doc.projects };
+ doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
const dir = join(root, 'config'), file = writeJson(join(dir, 'businesses/acme.json'), doc);
const writer = organizationWriter({ dir, rolesDir: rolesCopy(root) });
// Give both snapshots an existing ordinary committed receipt to preserve.
diff --git a/packages/business/tests/library-seats.test.mjs b/packages/business/tests/library-seats.test.mjs
index 3cd0f86cf..da76fdbc7 100644
--- a/packages/business/tests/library-seats.test.mjs
+++ b/packages/business/tests/library-seats.test.mjs
@@ -27,7 +27,9 @@ test("M7/M8: library seats come from library businesses, creative seats from the
const { root, dir } = fixture(t);
const doc = businessDoc(root, "acme");
doc.projects = { books: mappingEntry(), ...doc.projects };
+ doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.roles.bean = { definition: "companion" };
+ doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
writeJson(join(dir, "businesses", "acme.json"), doc);
const found = sets(dir);
assert.deepEqual([...found.librarySeats].sort(), ["bean", "chief", "coder", "cto", "pm", "reviewer"]);
@@ -39,6 +41,7 @@ test("M8: a business with no library project puts no seat in either set", (t) =>
const { root, dir } = fixture(t);
const doc = businessDoc(root, "other");
doc.roles.bean = { definition: "companion" };
+ doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
writeJson(join(dir, "businesses", "other.json"), doc);
const found = sets(dir);
assert.equal(found.librarySeats.size, 0);
diff --git a/packages/business/tests/resolve.test.mjs b/packages/business/tests/resolve.test.mjs
index b1e50f349..2fa106053 100644
--- a/packages/business/tests/resolve.test.mjs
+++ b/packages/business/tests/resolve.test.mjs
@@ -31,7 +31,7 @@ const resolve = (s, instance) => resolveInstance({ system: s.system, business: s
test('C2-04: a library first in projects does not hide a later project layer', async t => {
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
const { rmSync } = await import('node:fs');
- const s = setup(doc => { doc.projects = { books: mappingEntry(), ...doc.projects }; }, { vars: { 'tracker.project': 7 } });
+ const s = setup(doc => { doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } }; doc.projects = { books: mappingEntry(), ...doc.projects }; }, { vars: { 'tracker.project': 7 } });
t.after(() => rmSync(s.root, { recursive: true, force: true }));
const result = resolve(s, 'coder');
assert.equal(result.project, 'stack');
diff --git a/packages/cli/tests/case2-install.test.mjs b/packages/cli/tests/case2-install.test.mjs
index cc1142510..51b606bda 100644
--- a/packages/cli/tests/case2-install.test.mjs
+++ b/packages/cli/tests/case2-install.test.mjs
@@ -51,8 +51,11 @@ function world(t, { profile = "library" } = {}) {
for (const r of Object.values(doc.roles)) r.vars = { ...r.vars, harness: "pi" };
if (profile === "library") {
doc.projects.books = { ...mappingEntry(), user: "writer" };
+ doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.roles.bean = { definition: "companion", vars: { harness: "pi" } };
+ doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.roles.chet = { definition: "companion", vars: { harness: "pi" } };
+ doc.roles.chet.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
} else doc.vars["bus.tester"] = true;
const input = writeJson(join(root, "input", "acme.json"), doc);
const staging = join(root, "staging");
@@ -212,6 +215,7 @@ test("the factory install refuses a library project and bus.tester off, before a
const x = world(t, { profile: "factory" });
const doc = JSON.parse(readFileSync(x.input, "utf8"));
doc.projects.books = { ...mappingEntry(), user: "writer" };
+ doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
writeJson(x.input, doc);
refused(install(x, { profile: "factory" }), /profile-library-business/);
delete doc.projects.books;
diff --git a/packages/cli/tests/launcher.test.mjs b/packages/cli/tests/launcher.test.mjs
index baabd843e..eeca18eb0 100644
--- a/packages/cli/tests/launcher.test.mjs
+++ b/packages/cli/tests/launcher.test.mjs
@@ -1,4 +1,4 @@
-import { launchDoc } from "../../business/tests/helpers.mjs";
+import { FAR_DATE, launchDoc } from "../../business/tests/helpers.mjs";
// The S6 launcher inside a real bus host: real broker child, real runners
// in the bwrap sandbox, the fake adapter from packages/harness standing in for the
// harness. The chief of staff launches a coder through its `launch` tool (row 119: the
@@ -32,7 +32,7 @@ const skip = sandboxProblem() ?? false;
test('C2-04: launcher workspace clones code but never the library', { skip, timeout: 30000 }, async t => {
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
- const f = await setup(t, doc => { doc.projects = { books: mappingEntry(), ...doc.projects }; return doc; });
+ const f = await setup(t, doc => { doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } }; doc.projects = { books: mappingEntry(), ...doc.projects }; return doc; });
await f.launcher.launchPm();
const workspace = workspaceDir(f.f.dataRoot, 'acme', 'chief');
assert.equal(existsSync(join(workspace, 'stack', '.git')), true);
@@ -766,7 +766,7 @@ test("row 64 a role skill that isn't enabled refuses skill-not-enabled, and one
test("row 213 a creative instance's persona is read from <configDir>/personas: off its digest the launch fails with the mismatch as its reason", { timeout: 30000 }, async (t) => {
const text = "Warm. PERSONA-MARKER-d2\n";
const given = prepare(t, (doc) => {
- doc.roles.bean = { definition: "companion", vars: { harness: "pi", model: "claude-sonnet-5-5", thinking: "high", "persona.name": "Bean", "persona.sha256": createHash("sha256").update(text).digest("hex") } };
+ doc.roles.bean = { definition: "companion", credentials: { gitea: { store: true, rotateBy: FAR_DATE } }, vars: { harness: "pi", model: "claude-sonnet-5-5", thinking: "high", "persona.name": "Bean", "persona.sha256": createHash("sha256").update(text).digest("hex") } };
doc.launch.instances.push("bean");
return doc;
});
diff --git a/packages/cli/tests/thread-launch.test.mjs b/packages/cli/tests/thread-launch.test.mjs
index fa3adb866..3e313e49d 100644
--- a/packages/cli/tests/thread-launch.test.mjs
+++ b/packages/cli/tests/thread-launch.test.mjs
@@ -400,6 +400,7 @@ test("REQ-THREAD-1 REQ-LAUNCH-1 the chief can't launch the assistant outside a t
test('C2-09a: fromSession refuses a creative instance outside a thread without a sandbox', { timeout: 30000 }, async t => {
const prepared = prepare(t, { edit: doc => {
doc.roles.bean = { ...doc.roles.assistant, definition: 'companion' };
+ doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.launch.instances.push('bean');
return doc;
} });
@@ -465,7 +466,9 @@ test('C2-09a: creative thread messages start distinct runs and keep each instanc
const vars = { ...doc.roles.assistant.vars };
delete doc.roles.assistant;
doc.roles.bean = { definition: 'companion', vars: { ...vars } };
+ doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.roles.chet = { definition: 'continuity', vars: { ...vars } };
+ doc.roles.chet.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.launch.instances = ['coder', 'bean', 'chet'];
return doc;
} });
@@ -501,6 +504,7 @@ test('C2-09a: creative thread messages start distinct runs and keep each instanc
test('C2-09a: terminating one creative thread does not signal an unselected peer of the same instance', { skip, timeout: 90000 }, async t => {
const prepared = prepare(t, { sonnet: 2, idle: 60, edit: doc => {
doc.roles.bean = { ...doc.roles.assistant, definition: 'companion' };
+ doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
delete doc.roles.assistant;
doc.launch.instances = ['coder', 'bean'];
return doc;
diff --git a/packages/cli/tests/trackers-boot.test.mjs b/packages/cli/tests/trackers-boot.test.mjs
index 8d1a407c6..e7f50c947 100644
--- a/packages/cli/tests/trackers-boot.test.mjs
+++ b/packages/cli/tests/trackers-boot.test.mjs
@@ -14,7 +14,7 @@ import { fixture, tmp } from "./helpers.mjs";
test('C2-04: a library-only business with tracker.baseUrl boots without a project tracker', async t => {
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
- const f = fixture(tmp(t), 'acme', doc => { doc.projects = { books: mappingEntry() }; return doc; });
+ const f = fixture(tmp(t), 'acme', doc => { doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } }; doc.projects = { books: mappingEntry() }; return doc; });
const warnings = [];
const boot = bootConfig({ system: loadSystem({ env: f.env }), businessId: 'acme', env: f.env, warn: text => warnings.push(text) });
assert.equal(boot.trackers, undefined);
@@ -40,6 +40,7 @@ test("bootConfig trackers reach the S3 adapter in the real broker child, which g
const f = fixture(root, "acme", (doc) => {
doc.projects = { books: mappingEntry(), ...doc.projects };
+ doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.vars["tracker.baseUrl"] = srv.url;
doc.tracker.sync.botId = bots.sync;
// The chief of staff (row 119) has no tracker bot.
@@ -51,7 +52,7 @@ test("bootConfig trackers reach the S3 adapter in the real broker child, which g
chmodSync(file, 0o600);
};
put(f.doc.tracker.sync.credentials.vikunja.file, fake.token(bots.sync, SCOPES.sync));
- for (const r of Object.keys(f.doc.roles)) if (f.doc.roles[r].credentials) put(f.doc.roles[r].credentials.vikunja.file, fake.token(bots[r], r === "pm" ? SCOPES.pm : SCOPES.worker));
+ for (const r of Object.keys(f.doc.roles)) if (f.doc.roles[r].credentials?.vikunja) put(f.doc.roles[r].credentials.vikunja.file, fake.token(bots[r], r === "pm" ? SCOPES.pm : SCOPES.worker));
writeJson(join(root, "project", ".mosaic", "project.json"), { projectVersion: 1, id: "stack", vars: { "tracker.project": project } });
mkdirSync(f.dataRoot, { recursive: true, mode: 0o700 });
diff --git a/packages/control-board/tests/creative-hidden.test.mjs b/packages/control-board/tests/creative-hidden.test.mjs
index c2abd348e..12e16866e 100644
--- a/packages/control-board/tests/creative-hidden.test.mjs
+++ b/packages/control-board/tests/creative-hidden.test.mjs
@@ -20,7 +20,9 @@ function fixture(t) {
const dir = join(root, "config");
const doc = businessDoc(root, "acme");
doc.projects = { books: mappingEntry(), ...doc.projects };
+ doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.roles.bean = { definition: "companion" };
+ doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
writeJson(join(dir, "businesses", "acme.json"), doc);
const threadDir = join(root, "data", "threads", "acme", "t1", "session");
mkdirSync(threadDir, { recursive: true });
diff --git a/packages/discord/tests/library-seat.test.mjs b/packages/discord/tests/library-seat.test.mjs
index 315f69698..a7ac869e5 100644
--- a/packages/discord/tests/library-seat.test.mjs
+++ b/packages/discord/tests/library-seat.test.mjs
@@ -31,7 +31,9 @@ function setup(overrides = {}) {
function business(s, { library, role = "sage", definition = "companion" }) {
const doc = businessDoc(s.root, "acme");
if (library) doc.projects = { books: mappingEntry(), ...doc.projects };
+ if (library) doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.roles[role] = { definition };
+ doc.roles[role].credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
writeJson(join(s.root, "businesses", "acme.json"), doc);
}
@@ -0,0 +1,698 @@
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/bus/tests/reload.test.mjs
diff --git a/packages/bus/tests/reload.test.mjs b/packages/bus/tests/reload.test.mjs
index 091b37b26..342d578d0 100644
--- a/packages/bus/tests/reload.test.mjs
+++ b/packages/bus/tests/reload.test.mjs
@@ -194,7 +194,7 @@ test('T14 a file whose project root differs from the boot copy is not reloaded,
});
~
~
test('T14 a file whose library mapping differs from the boot copy is not reloaded, because the mirror is ensured at start', async (t) => {
~
const f = await setup(t, doc => {
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.projects.books = mappingEntry(); });
~
const doc = JSON.parse(readFileSync(f.file, 'utf8'));
~
doc.projects.books.branch = 'other';
~
writeFileSync(f.file, JSON.stringify(doc, null, 2) + '\n', { mode: 0o600 });
~
@@ -202,7 +202,7 @@ test('T14 a file whose library mapping differs from the boot copy is not reloade
assert.equal(added.restart, true);
~
assert.equal(f.reloads.length, 0);
~
// The same library entry reloads.
~
const g = await setup(t, doc => {
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.projects.books = mappingEntry(); });
~
assert.equal(g.ask('instances.set', { revision: g.revision(), instance: 'sec-1', op: 'add', definition: 'security-reviewer' }).restart, false);
~
assert.equal(g.reloads.length, 1);
~
});
~
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/business/tests/business.test.mjs
diff --git a/packages/business/tests/business.test.mjs b/packages/business/tests/business.test.mjs
index 9d4eda831..f78789250 100644
--- a/packages/business/tests/business.test.mjs
+++ b/packages/business/tests/business.test.mjs
@@ -6,6 +6,7 @@ import { join } from "node:path";
import { pathToFileURL } from "node:url";
~
import { BusinessError, businessFilePath, configDir, loadBusiness, validateBusinessDocument } from "../src/index.mjs";
~
import { THREAD_IDLE_SECONDS } from "../src/business.mjs";
~
+import { CREATIVE_DEFINITIONS } from "../src/vocabulary.mjs";
~
import { launchDoc, businessDoc, REPO, REPO_ROLES, rolesCopy, tmp, writeJson } from "./helpers.mjs";
~
~
test('C2-04: library mappings load without roots, remain frozen, and retain mapping refusals', async t => {
~
@@ -14,6 +15,7 @@ test('C2-04: library mappings load without roots, remain frozen, and retain mapp
const root = tmp(); t.after(() => rmSync(root, { recursive: true, force: true }));
~
const doc = businessDoc(root), file = join(root, 'businesses/acme.json');
~
doc.projects = { books: mappingEntry(), ...doc.projects };
~
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
const loaded = validateBusinessDocument(doc, file, { rolesDir: REPO_ROLES });
~
const { checkMapping } = await import('../../library/src/mapping.mjs');
~
assert.deepEqual(loaded.projects.books, checkMapping(mappingEntry()));
~
@@ -41,6 +43,7 @@ test('C2-04: an otherwise valid publish grant cannot name a library repo', async
const root = tmp(); t.after(() => rmSync(root, { recursive: true, force: true }));
~
const doc = businessDoc(root);
~
doc.projects.books = { ...mappingEntry(), remote: 'https://git.example/writer/books' };
~
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.roles.coder.identity = { name: 'Coder', email: '[email protected]', gitea: { url: 'https://git.example', user: 'acme-coder' } };
~
doc.roles.coder.publish = ['books'];
~
refuses(() => validateBusinessDocument(doc, join(root, 'businesses/acme.json'), { rolesDir: REPO_ROLES }), /publish.*library/);
~
@@ -273,28 +276,58 @@ test("the shipped example refuses as written and validates once filled in", () =
assert.equal(id, 15);
~
});
~
~
+// Row 285 (C2-08b, #1790, mos-1330): a creative definition declares gitea, so its instance names
~
+// the reference. The store form needs no token file, and the bus reads a missing one as no token.
~
+const CREATIVE_GITEA = Object.freeze({ gitea: Object.freeze({ store: true, rotateBy: "2099-01-01" }) });
~
~
// Row 213 (C2-08, #1714), deviation D1: the persona vars sit on a creative instance only, and
~
// both or neither. The var checks themselves are vars.mjs's.
~
test("persona vars: agent layer, creative definition only, both or neither", () => {
~
const sha = "a".repeat(64);
~
const persona = { "persona.name": "Bean", "persona.sha256": sha };
~
const business = check((d) => { d.roles.bean = { definition: "companion",
+credentials: CREATIVE_GITEA,
vars: { ...persona } }; });
~
assert.deepEqual({ ...business.roles.bean.vars }, persona);
~
assert.doesNotThrow(() => check((d) => { d.roles.bean = { definition:
-"ideas"
+"ideas", credentials: CREATIVE_GITEA
}; }));
~
refuses(() => check((d) => { d.vars["persona.name"] = "Bean"; }), /persona\.name can't be set at the business layer/);
~
refuses(() => check((d) => { d.roles.pm.vars = { ...d.roles.pm.vars, ...persona }; }),
~
/roles\.pm\.vars: persona vars need a creative definition \(pm isn't one\)/);
~
refuses(() => check((d) => { d.roles.chief.vars = { ...persona }; }), /chief-of-staff isn't one/);
~
for (const key of Object.keys(persona)) {
~
refuses(() => check((d) => { d.roles.bean = { definition: "research",
+credentials: CREATIVE_GITEA,
vars: { [key]: persona[key] } }; }),
~
/roles\.bean\.vars: persona\.name and persona\.sha256 are set together or not at all/);
~
}
~
for (const [key, value] of [["persona.name", "x".repeat(41)], ["persona.name", "Be\nan"], ["persona.name", "Be\u0007an"], ["persona.name", "Be\u2028an"], ["persona.name", "Be\u2029an"], ["persona.name", 7],
~
["persona.sha256", "A".repeat(64)], ["persona.sha256", sha.slice(1)], ["persona.sha256", `${sha}0`]]) {
~
refuses(() => check((d) => { d.roles.bean = { definition: "companion",
+credentials: CREATIVE_GITEA,
vars: { ...persona, [key]: value } }; }), new RegExp(`variable ${key.replace(".", "\\.")}`), 2);
~
+}
~
+});
~
~
+// Row 285 (C2-08b, #1790, mos-1330): the chief and each creative definition declare gitea, so an
~
+// instance without the reference refuses. Amendment 1 (mos-1580, sage-4060): the chief
~
+// requires its reference only in a library business; creative definitions always require it.
~
+test("row 285: a chief or creative instance without credentials.gitea refuses at load", async () => {
~
+ const { mappingEntry } = await import("../../library/tests/helpers.mjs");
~
+ refuses(() => check((d) => { d.projects.books = mappingEntry(); delete d.roles.chief.credentials; }),
~
+ /chief-library-gitea-required: .*roles\.chief\.credentials/);
~
+ for (const definition of CREATIVE_DEFINITIONS) {
~
+ refuses(() => check((d) => { d.roles.bean = { definition }; }),
~
+ /roles\.bean\.credentials must reference exactly the services its role definition needs \(gitea; got none\)/);
~
+ assert.doesNotThrow(() => check((d) => { d.roles.bean = { definition, credentials: CREATIVE_GITEA }; }), definition);
~
}
~
});
~
~
+// Row 285 (C2-08b, brief): a creative instance may carry identity and publish, under the rules at
~
+// business.mjs:155-166, which the grant path reads. The grant itself still refuses it (#giteaRole).
~
+test("row 285: a creative instance with identity and publish loads", () => {
~
+ const identity = { name: "Bean", email: "[email protected]", gitea: { url: "https://git.example", user: "acme-bean" } };
~
+ const business = check((d) => {
~
+ d.projects.stack.remote = "https://git.example/acme/stack";
~
+ d.roles.bean = { definition: "companion", credentials: CREATIVE_GITEA, identity, publish: ["stack"] };
~
+ });
~
+ assert.deepEqual({ ...business.roles.bean.identity, gitea: { ...business.roles.bean.identity.gitea } }, identity);
~
+ assert.deepEqual([...business.roles.bean.publish], ["stack"]);
~
+});
~
~
// Row 194 (#1692, D2.5, T17): the per-agent forbid and the retired list.
~
test("row 194 keep, noHire and retired validate, and a file without them loads as before", () => {
~
const plain = check();
~
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/business/tests/cli.test.mjs
diff --git a/packages/business/tests/cli.test.mjs b/packages/business/tests/cli.test.mjs
index 3aa1d52ee..beb367f8c 100644
--- a/packages/business/tests/cli.test.mjs
+++ b/packages/business/tests/cli.test.mjs
@@ -11,7 +11,7 @@ const CLI = join(REPO, "packages", "business", "src", "cli.mjs");
test('C2-04: business validate and resolve skip a library before code projects and credential checks', async t => {
~
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
~
const { rmSync } = await import('node:fs');
~
const s = setup(doc => {
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.projects = { books: mappingEntry(), ...doc.projects }; });
~
t.after(() => rmSync(s.root, { recursive: true, force: true }));
~
writeJson(projectFilePath(s.doc.projects.stack.root), { projectVersion: 1, id: 'stack', vars: { 'tracker.project': 3 } });
~
const checked = run(s, 'validate', 'acme');
~
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/business/tests/instance-settings.test.mjs
diff --git a/packages/business/tests/instance-settings.test.mjs b/packages/business/tests/instance-settings.test.mjs
index e85366562..54c22e0e0 100644
--- a/packages/business/tests/instance-settings.test.mjs
+++ b/packages/business/tests/instance-settings.test.mjs
@@ -9,7 +9,7 @@ import { mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync }
import { join } from "node:path";
~
import { instanceSettings } from "../src/instance-settings.mjs";
~
import { projectFilePath } from "../src/project.mjs";
~
import { businessDoc,
+FAR_DATE,
REPO, rolesCopy, systemConfig, systemFor, tmp, writeJson } from "./helpers.mjs";
~
~
const CLI = join(REPO, "packages", "business", "src", "cli.mjs");
~
const roots = [];
~
@@ -22,7 +22,7 @@ const LEVELS = { pi: ["off", "minimal", "low", "medium", "high", "xhigh", "max"]
~
test('C2-04: instance settings skip a library while checking a later code project', async () => {
~
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
~
const f = fixture(doc => {
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.projects = { books: mappingEntry(), ...doc.projects }; });
~
writeJson(projectFilePath(f.doc.projects.stack.root), { projectVersion: 1, id: 'stack', vars: { 'tracker.project': 3 } });
~
const before = f.settings.read('acme');
~
f.settings.set('acme', { revision: before.revision, instance: 'gate-215', op: 'add', definition: 'merge-gate' }, 'jason');
~
@@ -286,7 +286,8 @@ test("row 213 a creative instance is the human's: add, vars and definition chang
writeFileSync(join(f.root, "config", "personas", "acme", "bean.md"), text, { mode: 0o600 });
~
const persona = { "persona.name": "Bean", "persona.sha256": createHash("sha256").update(text).digest("hex") };
~
const view = f.settings.read("acme");
~
+// Row 285 (mos-1332 item 4): the companion definition declares gitea.
~
assert.deepEqual(view.definitions.companion, { services:
-[],
+["gitea"],
accepted: true });
~
const add = { instance: "bean", op: "add", definition: "companion", vars: persona };
~
for (const actor of ["chief-of-staff.chief", "tester"]) {
~
assert.throws(() => f.settings.set("acme", { revision: view.revision, ...add }, actor), e => e.code === "organization-creative-human-only", actor);
~
@@ -331,8 +332,8 @@ test("row 213 a creative instance is the human's: add, vars and definition chang
// every actor, the human included. The listing's endProtected is that same check for its reader.
~
test("row 256 T1-T3, T5 the human deletes a creative instance, no other actor does, and the assistant stays", () => {
~
const f = fixture(doc => {
~
doc.roles.bean = { definition:
-"companion"
+"companion", credentials: { gitea: { store: true, rotateBy: FAR_DATE } }
};
~
doc.roles.muse = { definition:
-"ideas"
+"ideas", credentials: { gitea: { store: true, rotateBy: FAR_DATE } }
};
~
doc.roles.assistant = { definition: "assistant", holder: "mos" };
~
});
~
const del = (instance, actor) => () => f.settings.set("acme", { revision: f.settings.read("acme").revision, instance, op: "delete" }, actor);
~
@@ -377,7 +378,7 @@ test("row 256 T1-T3, T5 the human deletes a creative instance, no other actor do
// instance can't be kept, launch.by or an arbiter, so the check it reaches is the last-listed one.
~
test("row 256 T4 the human's delete of the only listed instance, a creative one, is the last-listed refusal", () => {
~
const f = fixture(doc => {
~
doc.roles.bean = { definition:
-"companion"
+"companion", credentials: { gitea: { store: true, rotateBy: FAR_DATE } }
};
~
doc.launch.instances = ["bean"];
~
});
~
const bytes = readFileSync(f.file, "utf8");
~
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/business/tests/library-projects-protected.test.mjs
diff --git a/packages/business/tests/library-projects-protected.test.mjs b/packages/business/tests/library-projects-protected.test.mjs
index 51672bd7b..d4d09d94f 100644
--- a/packages/business/tests/library-projects-protected.test.mjs
+++ b/packages/business/tests/library-projects-protected.test.mjs
@@ -14,6 +14,7 @@ function fixture(t) {
books.universes.hybrid = { kind: 'hybrid', name: 'An invented crossover',
~
sources: ['harbor', 'second'], books: ['Hybrid Book'], playground: [], constraints: [], notes: 'Fixture only' };
~
doc.projects = { books, ...doc.projects };
~
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
const dir = join(root, 'config'), file = writeJson(join(dir, 'businesses/acme.json'), doc);
~
const writer = organizationWriter({ dir, rolesDir: rolesCopy(root) });
~
// Give both snapshots an existing ordinary committed receipt to preserve.
~
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/business/tests/library-seats.test.mjs
diff --git a/packages/business/tests/library-seats.test.mjs b/packages/business/tests/library-seats.test.mjs
index 3cd0f86cf..da76fdbc7 100644
--- a/packages/business/tests/library-seats.test.mjs
+++ b/packages/business/tests/library-seats.test.mjs
@@ -27,7 +27,9 @@ test("M7/M8: library seats come from library businesses, creative seats from the
const { root, dir } = fixture(t);
~
const doc = businessDoc(root, "acme");
~
doc.projects = { books: mappingEntry(), ...doc.projects };
~
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.roles.bean = { definition: "companion" };
~
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
writeJson(join(dir, "businesses", "acme.json"), doc);
~
const found = sets(dir);
~
assert.deepEqual([...found.librarySeats].sort(), ["bean", "chief", "coder", "cto", "pm", "reviewer"]);
~
@@ -39,6 +41,7 @@ test("M8: a business with no library project puts no seat in either set", (t) =>
const { root, dir } = fixture(t);
~
const doc = businessDoc(root, "other");
~
doc.roles.bean = { definition: "companion" };
~
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
writeJson(join(dir, "businesses", "other.json"), doc);
~
const found = sets(dir);
~
assert.equal(found.librarySeats.size, 0);
~
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/business/tests/resolve.test.mjs
diff --git a/packages/business/tests/resolve.test.mjs b/packages/business/tests/resolve.test.mjs
index b1e50f349..2fa106053 100644
--- a/packages/business/tests/resolve.test.mjs
+++ b/packages/business/tests/resolve.test.mjs
@@ -31,7 +31,7 @@ const resolve = (s, instance) => resolveInstance({ system: s.system, business: s
test('C2-04: a library first in projects does not hide a later project layer', async t => {
~
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
~
const { rmSync } = await import('node:fs');
~
const s = setup(doc => {
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.projects = { books: mappingEntry(), ...doc.projects }; }, { vars: { 'tracker.project': 7 } });
~
t.after(() => rmSync(s.root, { recursive: true, force: true }));
~
const result = resolve(s, 'coder');
~
assert.equal(result.project, 'stack');
~
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/cli/tests/case2-install.test.mjs
diff --git a/packages/cli/tests/case2-install.test.mjs b/packages/cli/tests/case2-install.test.mjs
index cc1142510..51b606bda 100644
--- a/packages/cli/tests/case2-install.test.mjs
+++ b/packages/cli/tests/case2-install.test.mjs
@@ -51,8 +51,11 @@ function world(t, { profile = "library" } = {}) {
for (const r of Object.values(doc.roles)) r.vars = { ...r.vars, harness: "pi" };
~
if (profile === "library") {
~
doc.projects.books = { ...mappingEntry(), user: "writer" };
~
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.roles.bean = { definition: "companion", vars: { harness: "pi" } };
~
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.roles.chet = { definition: "companion", vars: { harness: "pi" } };
~
+doc.roles.chet.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
} else doc.vars["bus.tester"] = true;
~
const input = writeJson(join(root, "input", "acme.json"), doc);
~
const staging = join(root, "staging");
~
@@ -212,6 +215,7 @@ test("the factory install refuses a library project and bus.tester off, before a
const x = world(t, { profile: "factory" });
~
const doc = JSON.parse(readFileSync(x.input, "utf8"));
~
doc.projects.books = { ...mappingEntry(), user: "writer" };
~
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
writeJson(x.input, doc);
~
refused(install(x, { profile: "factory" }), /profile-library-business/);
~
delete doc.projects.books;
~
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/cli/tests/launcher.test.mjs
diff --git a/packages/cli/tests/launcher.test.mjs b/packages/cli/tests/launcher.test.mjs
index baabd843e..eeca18eb0 100644
--- a/packages/cli/tests/launcher.test.mjs
+++ b/packages/cli/tests/launcher.test.mjs
@@ -1,4 +1,4 @@
import {
+FAR_DATE,
launchDoc } from "../../business/tests/helpers.mjs";
~
// The S6 launcher inside a real bus host: real broker child, real runners
~
// in the bwrap sandbox, the fake adapter from packages/harness standing in for the
~
// harness. The chief of staff launches a coder through its `launch` tool (row 119: the
~
@@ -32,7 +32,7 @@ const skip = sandboxProblem() ?? false;
~
test('C2-04: launcher workspace clones code but never the library', { skip, timeout: 30000 }, async t => {
~
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
~
const f = await setup(t, doc => {
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.projects = { books: mappingEntry(), ...doc.projects }; return doc; });
~
await f.launcher.launchPm();
~
const workspace = workspaceDir(f.f.dataRoot, 'acme', 'chief');
~
assert.equal(existsSync(join(workspace, 'stack', '.git')), true);
~
@@ -766,7 +766,7 @@ test("row 64 a role skill that isn't enabled refuses skill-not-enabled, and one
test("row 213 a creative instance's persona is read from <configDir>/personas: off its digest the launch fails with the mismatch as its reason", { timeout: 30000 }, async (t) => {
~
const text = "Warm. PERSONA-MARKER-d2\n";
~
const given = prepare(t, (doc) => {
~
doc.roles.bean = { definition: "companion",
+credentials: { gitea: { store: true, rotateBy: FAR_DATE } },
vars: { harness: "pi", model: "claude-sonnet-5-5", thinking: "high", "persona.name": "Bean", "persona.sha256": createHash("sha256").update(text).digest("hex") } };
~
doc.launch.instances.push("bean");
~
return doc;
~
});
~
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/cli/tests/thread-launch.test.mjs
diff --git a/packages/cli/tests/thread-launch.test.mjs b/packages/cli/tests/thread-launch.test.mjs
index fa3adb866..3e313e49d 100644
--- a/packages/cli/tests/thread-launch.test.mjs
+++ b/packages/cli/tests/thread-launch.test.mjs
@@ -400,6 +400,7 @@ test("REQ-THREAD-1 REQ-LAUNCH-1 the chief can't launch the assistant outside a t
test('C2-09a: fromSession refuses a creative instance outside a thread without a sandbox', { timeout: 30000 }, async t => {
~
const prepared = prepare(t, { edit: doc => {
~
doc.roles.bean = { ...doc.roles.assistant, definition: 'companion' };
~
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.launch.instances.push('bean');
~
return doc;
~
} });
~
@@ -465,7 +466,9 @@ test('C2-09a: creative thread messages start distinct runs and keep each instanc
const vars = { ...doc.roles.assistant.vars };
~
delete doc.roles.assistant;
~
doc.roles.bean = { definition: 'companion', vars: { ...vars } };
~
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.roles.chet = { definition: 'continuity', vars: { ...vars } };
~
+doc.roles.chet.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.launch.instances = ['coder', 'bean', 'chet'];
~
return doc;
~
} });
~
@@ -501,6 +504,7 @@ test('C2-09a: creative thread messages start distinct runs and keep each instanc
test('C2-09a: terminating one creative thread does not signal an unselected peer of the same instance', { skip, timeout: 90000 }, async t => {
~
const prepared = prepare(t, { sonnet: 2, idle: 60, edit: doc => {
~
doc.roles.bean = { ...doc.roles.assistant, definition: 'companion' };
~
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
delete doc.roles.assistant;
~
doc.launch.instances = ['coder', 'bean'];
~
return doc;
~
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/cli/tests/trackers-boot.test.mjs
diff --git a/packages/cli/tests/trackers-boot.test.mjs b/packages/cli/tests/trackers-boot.test.mjs
index 8d1a407c6..e7f50c947 100644
--- a/packages/cli/tests/trackers-boot.test.mjs
+++ b/packages/cli/tests/trackers-boot.test.mjs
@@ -14,7 +14,7 @@ import { fixture, tmp } from "./helpers.mjs";
~
test('C2-04: a library-only business with tracker.baseUrl boots without a project tracker', async t => {
~
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
~
const f = fixture(tmp(t), 'acme', doc => {
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.projects = { books: mappingEntry() }; return doc; });
~
const warnings = [];
~
const boot = bootConfig({ system: loadSystem({ env: f.env }), businessId: 'acme', env: f.env, warn: text => warnings.push(text) });
~
assert.equal(boot.trackers, undefined);
~
@@ -40,6 +40,7 @@ test("bootConfig trackers reach the S3 adapter in the real broker child, which g
~
const f = fixture(root, "acme", (doc) => {
~
doc.projects = { books: mappingEntry(), ...doc.projects };
~
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.vars["tracker.baseUrl"] = srv.url;
~
doc.tracker.sync.botId = bots.sync;
~
// The chief of staff (row 119) has no tracker bot.
~
@@ -51,7 +52,7 @@ test("bootConfig trackers reach the S3 adapter in the real broker child, which g
chmodSync(file, 0o600);
~
};
~
put(f.doc.tracker.sync.credentials.vikunja.file, fake.token(bots.sync, SCOPES.sync));
~
for (const r of Object.keys(f.doc.roles)) if
-(f.doc.roles[r].credentials)
+(f.doc.roles[r].credentials?.vikunja)
put(f.doc.roles[r].credentials.vikunja.file, fake.token(bots[r], r === "pm" ? SCOPES.pm : SCOPES.worker));
~
writeJson(join(root, "project", ".mosaic", "project.json"), { projectVersion: 1, id: "stack", vars: { "tracker.project": project } });
~
~
mkdirSync(f.dataRoot, { recursive: true, mode: 0o700 });
~
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/control-board/tests/creative-hidden.test.mjs
diff --git a/packages/control-board/tests/creative-hidden.test.mjs b/packages/control-board/tests/creative-hidden.test.mjs
index c2abd348e..12e16866e 100644
--- a/packages/control-board/tests/creative-hidden.test.mjs
+++ b/packages/control-board/tests/creative-hidden.test.mjs
@@ -20,7 +20,9 @@ function fixture(t) {
const dir = join(root, "config");
~
const doc = businessDoc(root, "acme");
~
doc.projects = { books: mappingEntry(), ...doc.projects };
~
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.roles.bean = { definition: "companion" };
~
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
writeJson(join(dir, "businesses", "acme.json"), doc);
~
const threadDir = join(root, "data", "threads", "acme", "t1", "session");
~
mkdirSync(threadDir, { recursive: true });
~
Command: git diff --no-color --word-diff=porcelain e0c6142f3 -- packages/discord/tests/library-seat.test.mjs
diff --git a/packages/discord/tests/library-seat.test.mjs b/packages/discord/tests/library-seat.test.mjs
index 315f69698..a7ac869e5 100644
--- a/packages/discord/tests/library-seat.test.mjs
+++ b/packages/discord/tests/library-seat.test.mjs
@@ -31,7 +31,9 @@ function setup(overrides = {}) {
function business(s, { library, role = "sage", definition = "companion" }) {
~
const doc = businessDoc(s.root, "acme");
~
if (library) doc.projects = { books: mappingEntry(), ...doc.projects };
~
+if (library) doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.roles[role] = { definition };
~
+doc.roles[role].credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
writeJson(join(s.root, "businesses", "acme.json"), doc);
~
}
~
~
@@ -0,0 +1,440 @@
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/bus/tests/reload.test.mjs
diff --git a/packages/bus/tests/reload.test.mjs b/packages/bus/tests/reload.test.mjs
index 091b37b26..342d578d0 100644
--- a/packages/bus/tests/reload.test.mjs
+++ b/packages/bus/tests/reload.test.mjs
@@ -194,7 +194,7 @@ test('T14 a file whose project root differs from the boot copy is not reloaded,
});
~
~
test('T14 a file whose library mapping differs from the boot copy is not reloaded, because the mirror is ensured at start', async (t) => {
~
const f = await setup(t, doc => {
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.projects.books = mappingEntry(); });
~
const doc = JSON.parse(readFileSync(f.file, 'utf8'));
~
doc.projects.books.branch = 'other';
~
writeFileSync(f.file, JSON.stringify(doc, null, 2) + '\n', { mode: 0o600 });
~
@@ -202,7 +202,7 @@ test('T14 a file whose library mapping differs from the boot copy is not reloade
assert.equal(added.restart, true);
~
assert.equal(f.reloads.length, 0);
~
// The same library entry reloads.
~
const g = await setup(t, doc => {
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.projects.books = mappingEntry(); });
~
assert.equal(g.ask('instances.set', { revision: g.revision(), instance: 'sec-1', op: 'add', definition: 'security-reviewer' }).restart, false);
~
assert.equal(g.reloads.length, 1);
~
});
~
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/business/tests/business.test.mjs
diff --git a/packages/business/tests/business.test.mjs b/packages/business/tests/business.test.mjs
index b79576af8..f78789250 100644
--- a/packages/business/tests/business.test.mjs
+++ b/packages/business/tests/business.test.mjs
@@ -15,6 +15,7 @@ test('C2-04: library mappings load without roots, remain frozen, and retain mapp
const root = tmp(); t.after(() => rmSync(root, { recursive: true, force: true }));
~
const doc = businessDoc(root), file = join(root, 'businesses/acme.json');
~
doc.projects = { books: mappingEntry(), ...doc.projects };
~
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
const loaded = validateBusinessDocument(doc, file, { rolesDir: REPO_ROLES });
~
const { checkMapping } = await import('../../library/src/mapping.mjs');
~
assert.deepEqual(loaded.projects.books, checkMapping(mappingEntry()));
~
@@ -42,6 +43,7 @@ test('C2-04: an otherwise valid publish grant cannot name a library repo', async
const root = tmp(); t.after(() => rmSync(root, { recursive: true, force: true }));
~
const doc = businessDoc(root);
~
doc.projects.books = { ...mappingEntry(), remote: 'https://git.example/writer/books' };
~
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.roles.coder.identity = { name: 'Coder', email: '[email protected]', gitea: { url: 'https://git.example', user: 'acme-coder' } };
~
doc.roles.coder.publish = ['books'];
~
refuses(() => validateBusinessDocument(doc, join(root, 'businesses/acme.json'), { rolesDir: REPO_ROLES }), /publish.*library/);
~
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/business/tests/cli.test.mjs
diff --git a/packages/business/tests/cli.test.mjs b/packages/business/tests/cli.test.mjs
index 3aa1d52ee..beb367f8c 100644
--- a/packages/business/tests/cli.test.mjs
+++ b/packages/business/tests/cli.test.mjs
@@ -11,7 +11,7 @@ const CLI = join(REPO, "packages", "business", "src", "cli.mjs");
test('C2-04: business validate and resolve skip a library before code projects and credential checks', async t => {
~
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
~
const { rmSync } = await import('node:fs');
~
const s = setup(doc => {
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.projects = { books: mappingEntry(), ...doc.projects }; });
~
t.after(() => rmSync(s.root, { recursive: true, force: true }));
~
writeJson(projectFilePath(s.doc.projects.stack.root), { projectVersion: 1, id: 'stack', vars: { 'tracker.project': 3 } });
~
const checked = run(s, 'validate', 'acme');
~
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/business/tests/instance-settings.test.mjs
diff --git a/packages/business/tests/instance-settings.test.mjs b/packages/business/tests/instance-settings.test.mjs
index 4b4860633..54c22e0e0 100644
--- a/packages/business/tests/instance-settings.test.mjs
+++ b/packages/business/tests/instance-settings.test.mjs
@@ -22,7 +22,7 @@ const LEVELS = { pi: ["off", "minimal", "low", "medium", "high", "xhigh", "max"]
~
test('C2-04: instance settings skip a library while checking a later code project', async () => {
~
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
~
const f = fixture(doc => {
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.projects = { books: mappingEntry(), ...doc.projects }; });
~
writeJson(projectFilePath(f.doc.projects.stack.root), { projectVersion: 1, id: 'stack', vars: { 'tracker.project': 3 } });
~
const before = f.settings.read('acme');
~
f.settings.set('acme', { revision: before.revision, instance: 'gate-215', op: 'add', definition: 'merge-gate' }, 'jason');
~
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/business/tests/library-projects-protected.test.mjs
diff --git a/packages/business/tests/library-projects-protected.test.mjs b/packages/business/tests/library-projects-protected.test.mjs
index 51672bd7b..d4d09d94f 100644
--- a/packages/business/tests/library-projects-protected.test.mjs
+++ b/packages/business/tests/library-projects-protected.test.mjs
@@ -14,6 +14,7 @@ function fixture(t) {
books.universes.hybrid = { kind: 'hybrid', name: 'An invented crossover',
~
sources: ['harbor', 'second'], books: ['Hybrid Book'], playground: [], constraints: [], notes: 'Fixture only' };
~
doc.projects = { books, ...doc.projects };
~
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
const dir = join(root, 'config'), file = writeJson(join(dir, 'businesses/acme.json'), doc);
~
const writer = organizationWriter({ dir, rolesDir: rolesCopy(root) });
~
// Give both snapshots an existing ordinary committed receipt to preserve.
~
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/business/tests/library-seats.test.mjs
diff --git a/packages/business/tests/library-seats.test.mjs b/packages/business/tests/library-seats.test.mjs
index 3cd0f86cf..da76fdbc7 100644
--- a/packages/business/tests/library-seats.test.mjs
+++ b/packages/business/tests/library-seats.test.mjs
@@ -27,7 +27,9 @@ test("M7/M8: library seats come from library businesses, creative seats from the
const { root, dir } = fixture(t);
~
const doc = businessDoc(root, "acme");
~
doc.projects = { books: mappingEntry(), ...doc.projects };
~
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.roles.bean = { definition: "companion" };
~
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
writeJson(join(dir, "businesses", "acme.json"), doc);
~
const found = sets(dir);
~
assert.deepEqual([...found.librarySeats].sort(), ["bean", "chief", "coder", "cto", "pm", "reviewer"]);
~
@@ -39,6 +41,7 @@ test("M8: a business with no library project puts no seat in either set", (t) =>
const { root, dir } = fixture(t);
~
const doc = businessDoc(root, "other");
~
doc.roles.bean = { definition: "companion" };
~
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
writeJson(join(dir, "businesses", "other.json"), doc);
~
const found = sets(dir);
~
assert.equal(found.librarySeats.size, 0);
~
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/business/tests/resolve.test.mjs
diff --git a/packages/business/tests/resolve.test.mjs b/packages/business/tests/resolve.test.mjs
index b1e50f349..2fa106053 100644
--- a/packages/business/tests/resolve.test.mjs
+++ b/packages/business/tests/resolve.test.mjs
@@ -31,7 +31,7 @@ const resolve = (s, instance) => resolveInstance({ system: s.system, business: s
test('C2-04: a library first in projects does not hide a later project layer', async t => {
~
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
~
const { rmSync } = await import('node:fs');
~
const s = setup(doc => {
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.projects = { books: mappingEntry(), ...doc.projects }; }, { vars: { 'tracker.project': 7 } });
~
t.after(() => rmSync(s.root, { recursive: true, force: true }));
~
const result = resolve(s, 'coder');
~
assert.equal(result.project, 'stack');
~
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/cli/tests/case2-install.test.mjs
diff --git a/packages/cli/tests/case2-install.test.mjs b/packages/cli/tests/case2-install.test.mjs
index cc1142510..51b606bda 100644
--- a/packages/cli/tests/case2-install.test.mjs
+++ b/packages/cli/tests/case2-install.test.mjs
@@ -51,8 +51,11 @@ function world(t, { profile = "library" } = {}) {
for (const r of Object.values(doc.roles)) r.vars = { ...r.vars, harness: "pi" };
~
if (profile === "library") {
~
doc.projects.books = { ...mappingEntry(), user: "writer" };
~
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.roles.bean = { definition: "companion", vars: { harness: "pi" } };
~
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.roles.chet = { definition: "companion", vars: { harness: "pi" } };
~
+doc.roles.chet.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
} else doc.vars["bus.tester"] = true;
~
const input = writeJson(join(root, "input", "acme.json"), doc);
~
const staging = join(root, "staging");
~
@@ -212,6 +215,7 @@ test("the factory install refuses a library project and bus.tester off, before a
const x = world(t, { profile: "factory" });
~
const doc = JSON.parse(readFileSync(x.input, "utf8"));
~
doc.projects.books = { ...mappingEntry(), user: "writer" };
~
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
writeJson(x.input, doc);
~
refused(install(x, { profile: "factory" }), /profile-library-business/);
~
delete doc.projects.books;
~
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/cli/tests/launcher.test.mjs
diff --git a/packages/cli/tests/launcher.test.mjs b/packages/cli/tests/launcher.test.mjs
index 9e7518ee5..eeca18eb0 100644
--- a/packages/cli/tests/launcher.test.mjs
+++ b/packages/cli/tests/launcher.test.mjs
@@ -32,7 +32,7 @@ const skip = sandboxProblem() ?? false;
~
test('C2-04: launcher workspace clones code but never the library', { skip, timeout: 30000 }, async t => {
~
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
~
const f = await setup(t, doc => {
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.projects = { books: mappingEntry(), ...doc.projects }; return doc; });
~
await f.launcher.launchPm();
~
const workspace = workspaceDir(f.f.dataRoot, 'acme', 'chief');
~
assert.equal(existsSync(join(workspace, 'stack', '.git')), true);
~
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/cli/tests/thread-launch.test.mjs
diff --git a/packages/cli/tests/thread-launch.test.mjs b/packages/cli/tests/thread-launch.test.mjs
index fa3adb866..3e313e49d 100644
--- a/packages/cli/tests/thread-launch.test.mjs
+++ b/packages/cli/tests/thread-launch.test.mjs
@@ -400,6 +400,7 @@ test("REQ-THREAD-1 REQ-LAUNCH-1 the chief can't launch the assistant outside a t
test('C2-09a: fromSession refuses a creative instance outside a thread without a sandbox', { timeout: 30000 }, async t => {
~
const prepared = prepare(t, { edit: doc => {
~
doc.roles.bean = { ...doc.roles.assistant, definition: 'companion' };
~
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.launch.instances.push('bean');
~
return doc;
~
} });
~
@@ -465,7 +466,9 @@ test('C2-09a: creative thread messages start distinct runs and keep each instanc
const vars = { ...doc.roles.assistant.vars };
~
delete doc.roles.assistant;
~
doc.roles.bean = { definition: 'companion', vars: { ...vars } };
~
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.roles.chet = { definition: 'continuity', vars: { ...vars } };
~
+doc.roles.chet.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.launch.instances = ['coder', 'bean', 'chet'];
~
return doc;
~
} });
~
@@ -501,6 +504,7 @@ test('C2-09a: creative thread messages start distinct runs and keep each instanc
test('C2-09a: terminating one creative thread does not signal an unselected peer of the same instance', { skip, timeout: 90000 }, async t => {
~
const prepared = prepare(t, { sonnet: 2, idle: 60, edit: doc => {
~
doc.roles.bean = { ...doc.roles.assistant, definition: 'companion' };
~
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
delete doc.roles.assistant;
~
doc.launch.instances = ['coder', 'bean'];
~
return doc;
~
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/cli/tests/trackers-boot.test.mjs
diff --git a/packages/cli/tests/trackers-boot.test.mjs b/packages/cli/tests/trackers-boot.test.mjs
index 8d1a407c6..e7f50c947 100644
--- a/packages/cli/tests/trackers-boot.test.mjs
+++ b/packages/cli/tests/trackers-boot.test.mjs
@@ -14,7 +14,7 @@ import { fixture, tmp } from "./helpers.mjs";
~
test('C2-04: a library-only business with tracker.baseUrl boots without a project tracker', async t => {
~
const { mappingEntry } = await import('../../library/tests/helpers.mjs');
~
const f = fixture(tmp(t), 'acme', doc => {
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
doc.projects = { books: mappingEntry() }; return doc; });
~
const warnings = [];
~
const boot = bootConfig({ system: loadSystem({ env: f.env }), businessId: 'acme', env: f.env, warn: text => warnings.push(text) });
~
assert.equal(boot.trackers, undefined);
~
@@ -40,6 +40,7 @@ test("bootConfig trackers reach the S3 adapter in the real broker child, which g
~
const f = fixture(root, "acme", (doc) => {
~
doc.projects = { books: mappingEntry(), ...doc.projects };
~
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.vars["tracker.baseUrl"] = srv.url;
~
doc.tracker.sync.botId = bots.sync;
~
// The chief of staff (row 119) has no tracker bot.
~
@@ -51,7 +52,7 @@ test("bootConfig trackers reach the S3 adapter in the real broker child, which g
chmodSync(file, 0o600);
~
};
~
put(f.doc.tracker.sync.credentials.vikunja.file, fake.token(bots.sync, SCOPES.sync));
~
for (const r of Object.keys(f.doc.roles)) if
-(f.doc.roles[r].credentials)
+(f.doc.roles[r].credentials?.vikunja)
put(f.doc.roles[r].credentials.vikunja.file, fake.token(bots[r], r === "pm" ? SCOPES.pm : SCOPES.worker));
~
writeJson(join(root, "project", ".mosaic", "project.json"), { projectVersion: 1, id: "stack", vars: { "tracker.project": project } });
~
~
mkdirSync(f.dataRoot, { recursive: true, mode: 0o700 });
~
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/control-board/tests/creative-hidden.test.mjs
diff --git a/packages/control-board/tests/creative-hidden.test.mjs b/packages/control-board/tests/creative-hidden.test.mjs
index c2abd348e..12e16866e 100644
--- a/packages/control-board/tests/creative-hidden.test.mjs
+++ b/packages/control-board/tests/creative-hidden.test.mjs
@@ -20,7 +20,9 @@ function fixture(t) {
const dir = join(root, "config");
~
const doc = businessDoc(root, "acme");
~
doc.projects = { books: mappingEntry(), ...doc.projects };
~
+doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.roles.bean = { definition: "companion" };
~
+doc.roles.bean.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
writeJson(join(dir, "businesses", "acme.json"), doc);
~
const threadDir = join(root, "data", "threads", "acme", "t1", "session");
~
mkdirSync(threadDir, { recursive: true });
~
Command: git diff --word-diff=porcelain c53ea7d12 -- packages/discord/tests/library-seat.test.mjs
diff --git a/packages/discord/tests/library-seat.test.mjs b/packages/discord/tests/library-seat.test.mjs
index 315f69698..a7ac869e5 100644
--- a/packages/discord/tests/library-seat.test.mjs
+++ b/packages/discord/tests/library-seat.test.mjs
@@ -31,7 +31,9 @@ function setup(overrides = {}) {
function business(s, { library, role = "sage", definition = "companion" }) {
~
const doc = businessDoc(s.root, "acme");
~
if (library) doc.projects = { books: mappingEntry(), ...doc.projects };
~
+if (library) doc.roles.chief.credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
doc.roles[role] = { definition };
~
+doc.roles[role].credentials = { gitea: { ...doc.roles.coder.credentials.gitea } };
~
writeJson(join(s.root, "businesses", "acme.json"), doc);
~
}
~
~
Loaded 100 of 1115 files, more files were not shown because too many files have changed in this diff. Show more