Compare commits

..
Author SHA1 Message Date
jason.woltje 09a847edaa queue: cite real postlanding reviews and retain tracking-only open rows (Mos1915) 2026-10-26 13:05:08 -05:00
jason.woltje 30644a3dd5 docs: preserve real postlanding reviews and human factory policy scope 2026-10-26 13:02:39 -05:00
jason.woltje 0e1dd0a95b docs: record landed model join, scoped gates and tracking boundary 2026-10-26 12:36:12 -05:00
jason.woltje 52ba14c5f1 docs: record model join gate phases and documented acceptance entrypoint 2026-10-26 12:32:08 -05:00
jason.woltje 49c162c99e test: publish frozen model join map and fail-closed gate evidence 2026-10-26 12:31:38 -05:00
jason.woltje 362893d043 feat: integrate reviewed proxy page and managed model keys
Source-candidate: poe d9a564e6d20f5f0fd75ce45b12cbbf8bb4c9d568\nSource-candidate: magica38ba5762b06716db1dee00d0afec162656488f5c\nValidated321whole-file phase plus whole bus1349/model-proxy100/webui490; final gate tooling checks pending, not landed.
2026-10-26 12:04:21 -05:00
jason.woltje acd2f4abfa queue: record row288 landed after quiet fullgate4 (Mos1864) 2026-10-26 11:10:57 -05:00
jason.woltje 63ec2544c2 Merge verified row288 and deterministic timing repairs after full gate4 GREEN 2026-10-26 11:03:22 -05:00
jason.woltje 1cb0d45df0 docs: preserve append-only development receipts before landing window 2026-10-26 11:03:02 -05:00
jason.woltje 8f7ef593d9 docs: record quiet full gate4 GREEN for row288 and timing repairs 2026-10-26 11:02:33 -05:00
jason.woltje 2d3458695a test: reap owned copy children on external gate termination 2026-10-26 10:44:35 -05:00
jason.woltje 6efc4a6921 fix: make timing regressions depend on explicit probe and child outcomes 2026-10-26 10:40:04 -05:00
jason.woltje 193774d755 Record row 288 whole-file gate and six killed mutants 2026-10-25 00:08:19 -05:00
jason.woltje 5d1734dd01 Give row 288 creative tool fixture its required Gitea reference 2026-10-25 00:08:19 -05:00
jason.woltje c10f17cfeb Correct row 288 broker grant and bare mirror fixtures 2026-10-25 00:08:19 -05:00
jason.woltje acc0f8acb0 Fix bare library deletion with a private index-info input file 2026-10-25 00:08:19 -05:00
jason.woltje 64a40e712d Untested: record row 288 landed-base transplant and import run list 2026-10-25 00:08:19 -05:00
jason.woltje 90a0d690da Untested: row 288 contract and import-list preflight (sage-4282) 2026-10-25 00:08:19 -05:00
jason.woltje 2656f32f77 Untested: record row 288 fresh candidate on landed row 283 (#1793) 2026-10-25 00:08:19 -05:00
jason.woltje c5ccabc9fb Untested: record row 283 follow-up dependency receipts (#1793) 2026-10-25 00:08:19 -05:00
jason.woltje d8bd081b20 Untested: clarify existing blob requirement in library delete tool (#1793) 2026-10-25 00:08:19 -05:00
jason.woltje af7287a533 Untested: record row 288 T7 verification and landing boundaries (#1793) 2026-10-25 00:08:19 -05:00
jason.woltje 4176f3a506 Untested: add library write tools and served blob integration (#1793) 2026-10-25 00:08:19 -05:00
jason.woltje 1db5167795 Untested: migrate creative tool snapshots to eight or ten names (mos-1523) 2026-10-25 00:08:19 -05:00
jason.woltje c3e4ee4138 Untested: record notice-store failure publication behavior (#1793) 2026-10-25 00:08:18 -05:00
jason.woltje 56e9844528 Untested: retain library notice after push when publication fails (#1793) 2026-10-25 00:08:18 -05:00
jason.woltje bbc062ae86 Untested: use editor login and cover row 288 early review gaps (#1793) 2026-10-25 00:08:18 -05:00
jason.woltje dc2a49a744 Untested: protect library publication state and add broker bare-repo coverage (#1793) 2026-10-25 00:08:18 -05:00
jason.woltje c0bf87b789 Untested: row 288 library writes, notices, revert and human saves (#1793) 2026-10-25 00:08:18 -05:00
jason.woltje e1d8756b51 docs: PRD 1.18 brief, REQ-INST-2 prints the providers entry (mos-1671, sage-4418) 2026-10-25 00:02:21 -05:00
jason.woltje 83ec67dd36 docs: row 255 (de3e23dde, #1760) landed, doc-only. BUILD-LOG and SESSIONS lines. 2026-10-24 23:57:58 -05:00
jason.woltje de3e23dde9 launchpad: row 255 design, M1 conditions from mos-1666 item 3 in section 1 and P1 2026-10-24 23:57:39 -05:00
jason.woltje 446c9b8381 launchpad: row 255 design, R2 marked rejected per sage-4401 (R1 chosen, M2 dropped) 2026-10-24 23:57:39 -05:00
jason.woltje f78a45653d launchpad: row 255 design, bundled Pocket ID for users with no OIDC provider (Q203, #1760, sage-4363) 2026-10-24 23:57:39 -05:00
jason.woltje 775bbe2368 docs: rows 214 (3a8e4abad, #1715) and 193 (35f34ad27, #1691) landed. BUILD-LOG and SESSIONS lines. 2026-10-24 23:36:47 -05:00
jason.woltje 35f34ad27a morgana: row 193 design r5 (sage-1373 item 1, mos-1023 item 2): one user sentence names decisions, inbox entries, claims, tasks and project files; governance pin checks each 2026-10-24 23:35:53 -05:00
jason.woltje 624507c74b morgana: row 193 design r4 (duckworth-0011): project files row and records in the user sentence (B3), message.receive and message.read on the messages row, gated raise settled by FED r4.5 with no guard (N5) 2026-10-24 23:35:53 -05:00
jason.woltje 77a790f43b morgana: row 193 design r3 (duckworth-0008, sage-1368): messages private, run governance owner-visible with a read table and pin test (B1), message filter moves to 193b1 (B2), N1-N4 2026-10-24 23:35:53 -05:00
jason.woltje bfd2f43b10 morgana: row 193 design r2: trail and replies hide other users' unshared thread messages (sage-1354), 193b split into b1 and b2, coverage from FED r4.1 covers (gizmoduck-0018) 2026-10-24 23:35:53 -05:00
jason.woltje cb86e186dc morgana: row 193 design for #1691: owner, collaborator and viewer roles on access.json grants, thread_shares table (deviation agreed sage-1338), principal from row 196's verifier 2026-10-24 23:35:53 -05:00
jason.woltje ce8bb4d8b0 queue: revs 4073-4095. Briefs and starts: 331/334 briefed (4073-4075), starts magica 331 (4076), poe 330 (4077), rockerduck 334 (4079), bubba 288 (4080), morgana 267 (4087), launchpad 255 (4092); briefs 267 (4085), 255 (4086). Row 193: morgana in-review 4078, Sage abandon 4081, request 4082, resolve to c31674 4084, Duckworth approve c31676 4088 (posted and recorded by Sage, no Duckworth credential). Row 214: herb in-review 4083, Sage abandon 4089, request c31678 4090-4091, Filbert approve c31679 4093 (Filbert's). Row 214 landed 3a8e4abad: note 4094, done 4095. 2026-10-24 23:34:28 -05:00
Herb 3a8e4abadb docs: record granted wikilink measurement and test evidence 2026-10-24 22:50:44 -05:00
Herb c68a29fed8 build: regenerate editor bundle for inert wikilinks 2026-10-24 22:50:44 -05:00
Herb 92e82469f2 fix: share HTML escaping for invalid wikilink atoms 2026-10-24 22:50:34 -05:00
Herb 8feda29eb4 feat: carry unrun wikilink node and tests onto current refactor 2026-10-24 22:50:34 -05:00
Herb bbec5e97f1 docs: require editor rebuild and clarify baseline evidence for 214 2026-10-24 22:50:34 -05:00
Herb ec213e0336 docs: design row 214 measurement and inert editor wikilinks 2026-10-24 22:50:34 -05:00
jason.woltje 78b69e1e68 docs: Vikunja 633 (P7 proxy startup refreshes) and 634 (row 284 N1) per mos-1647. DEFERRED entries, BUILD-LOG line, filing receipt. 2026-10-24 19:18:35 -05:00
jason.woltje 48b89db33b docs: row 284 landed ce0b6ed41 (#1789). BUILD-LOG and SESSIONS lines, DEFERRED Webby N1 (library read path). 2026-10-24 19:15:48 -05:00
jason.woltje 7c8dc20335 queue: revs 4065-4072. Row 284 round 2: Della reopen 4065, in-review 4066, request outcome 4067 (Della's); Sage request posted c31653 (4068-4069); Webby approve c31654 (4070, Webby's). Row 284 landed ce0b6ed41: note 4071, done 4072. 2026-10-24 19:15:41 -05:00
jason.woltje ce0b6ed411 row284: record row329 landed-base rebase pending CLEAR 2026-10-24 18:40:35 -05:00
jason.woltje 97cb9a7630 row284: record import-list passes and nine killed mutants 2026-10-24 18:40:23 -05:00
jason.woltje e908f7ffee row284: record stale queue brief pin and exact import example 2026-10-24 18:40:23 -05:00
jason.woltje 92df71a982 row284: record landed-base rebase and import-derived run plan 2026-10-24 18:40:23 -05:00
jason.woltje 0abec5d2e8 row284: cover absent supporting prefix directly (unrun) 2026-10-24 18:40:23 -05:00
jason.woltje 20996ecd66 row284: supporting lookup scope and served blob IDs (unrun) 2026-10-24 18:40:22 -05:00
jason.woltje 78b932feb6 row284: migrate playground get tests under mos-1330 (unrun) 2026-10-24 18:40:22 -05:00
299 changed files with 80394 additions and 2730 deletions

No files matched your search

+228 -6
View File
@@ -5583,14 +5583,236 @@ claim. Receipts and limitations in agents/lena/work/queue-296/BUILD.md and run-r
2026-10-24 — Magica row329 R2 (#1827): B1 ASCII-only management key fix verified with complete-tree refusals and positive auth control; package66/66,30bus readers261/261,49CLI readers726/726,config55/55, no required skip/failure. N1 corrects R1 bus total to1019; N3 stale-lock guidance and N4 34-code inventory corrected. Two over-selected file runs are recorded separately, with no F7 inference; cause unknown/Vikunja625. Old502 test/helper files byte-identical, slot returned to Sage. Evidence agents/magica/work/queue-329/BUILD.md.
2026-10-24T23:37:46Z | Sage | Row 329 (#1827, P1 pinned model proxy, Magica) LANDED 61ebf2c34, pushed 23:31:27Z 10-24. Before: refactor at 669cdf42c. After: Magica's 4 commits (94cde633e, c65fb34ee, d1f6f2b19, 61ebf2c34) cherry-picked onto 669cdf42c, diff vs the gated tree limited to drift paths, range-diff in scratch. Gate: one unchanged full landing gate in /mnt/storage/scratch/sage-r329l/wt (gate.sh 8b4978887 c8a9bcf94), started 23:08:12Z at load 14.35, GATE GREEN 23:29:14Z at load 8.67, no rerun, no test or timeout edit (mos-1634). Host note: two Codex workers cleaned T3 worktrees from about 23:14Z (mos-1639, Vikunja 632). Approvals: Dewey r2 c31643 rev 4047, Boyd r2 c31642 rev 4048. #1827 comment 31650, closed. Vikunja 237 comment 1109 (stays open for P2-P7); C4 P10 red filed as Vikunja 631. Queue: note rev 4063, done rev 4064, committed b24d917ec. DEFERRED: N2 and R2-N1 bound to row 331, N1 bound to P7. Overlap: row 284 (packages/bus/src/broker.mjs) and row 157 (scripts/mosaic-config.mjs) rebase onto 61ebf2c34 before their gates.
## 2026-10-24 — row332 P3 proxy harness configuration: investigation/test placement
2026-10-25T00:15:48Z | Sage | Row 284 (#1789, C2-05c library.get scope, Della) LANDED ce0b6ed41, pushed 00:09:52Z 10-25. Before: refactor at 9e2689dff (row 329 landing docs). After: fast-forward to Della's 7 rebased commits 78b932feb..ce0b6ed41; 8 paths, manifest-r4 de505cfd matches the landed tree. Gate: one unchanged full landing gate in /mnt/storage/scratch/sage-r284l/wt (the 329 gate.sh with D and the compose project renamed), started 23:51:19Z at load 1.62, GATE GREEN 00:09:04Z at load 5.20, no rerun, no test or timeout edit. Counts: bus 1020/0, business 283/0, cli 999 pass 1 allowed skip (FED R7), harness 177/0, library 156/0, seat 218/0, webui 458/0, every scripts/test-*.sh rc 0; queue 34 and task 87/93 skips are the standing ones. Della's whole-file runs on ce0b6ed41: library-lookups 12/0, library-tools 5/0, query 34/0. Approval: Webby round 2 delta c31654 rev 4070 (round 1 rev 4062). Overlap sweep: rows 13, 157, 309, gyro/row310 and fethry/row332-p1 clean. #1789 comment 31655, closed. No Vikunja task for the row. Queue: note rev 4071, done rev 4072, committed 7c8dc2033. DEFERRED: Webby N1 (whole-tree listing per get) bound to the next library read-path row; N2 needs nothing; N3 is this gate.
2026-10-25T00:18:35Z | Sage | Follow-up tasks for mos-1647 item 3 (Q109): Vikunja 633 (P7 cutover, CLIProxyAPI 8.0.42 startup Grok-npm and antigravity version refreshes, from row 332 isolated runs) and 634 (row 284 Webby N1, library get lists the whole tree). DEFERRED gains the 633 entry and the 634 number for row 284 N1. Filing script and receipt in agents/sage/work/vikunja-setup/.
2026-10-24T22:15:07Z | Herb | row 214 #1715 C2-11a focused evidence | Before: wikilinks are ordinary editor text; raw/sig retention keeps no-edit bytes, but the model has no inert node. After: inert inline wikilink atom preserves spelling through neighbouring edits; invalid attrs share HTML/entity escaping. On herb/row214-r2 base487500a16, grant sage-4286 lane B: baseline10/10 roundTrips equal (outcome A); baseline structural0/1 expected red; four whole editor files40/0, both mutants killed0/1 and restored1/0, whole webui69 files455/0 in174.189s with MOSAIC_REQUIRE_EDITOR_BUILD=1, nice19, no skips/cancellations. A mistaken preliminary7-file subset28/0 is logged and excluded from gate evidence. CSS byte-identical, final process sweep0, scratch TMPDIR removed. Filbert candidate review and every scripts/test-*.sh gate remain pending; no click, target resolution or library save change.
2026-10-25T04:36:47Z | Sage | Row 214 (#1715, C2-11a editor wikilink node, Herb) LANDED 3a8e4abad, pushed 04:27Z 10-25. Before: refactor at 78b69e1e6. After: Herb's six commits cherry-picked onto 78b69e1e6 and fast-forwarded. Gate GREEN 04:10:34Z: 18 package suites rc 0 (webui 471/471, cli 999 plus the allowed FED R7 skip), every scripts/test-*.sh rc 0, queue package via test-queue.sh 156. Design skips: queue 34 (not the canonical root), task 87/93 (row 244). Filbert APPROVE c31679 rev 4093. Range-diff equal except commit 5's BUILD-LOG context; 40/41 paths same blob, BUILD-LOG additions only. #1715 closed c31680. Queue note 4094, done 4095, committed ce8bb4d8b.
2026-10-25T04:36:47Z | Sage | Row 193 (#1691, threads user roles design, Morgana) LANDED 35f34ad27, doc-only: five design commits cherry-picked onto ce8bb4d8b, adding only agents/morgana/work/queue-193/DESIGN.md (verify-commit ok, 1 path). Duckworth APPROVE c31676 rev 4088 (posted and recorded by Sage; Duckworth has no Gitea credential). No test reads queue-193. Build rows from the design: 204/#1702, 205/#1703 (landed), 275/#1780, 206/#1704, 207/#1705, 208/#1706.
2026-10-25T04:58:30Z | Sage | Row 255 (#1760, Vikunja 458, bundled Pocket ID design for Q203, Launchpad) LANDED de3e23dde, doc-only: Launchpad's three design commits e29d8ec90, 9f60021a0 and c8f2bc723 cherry-picked onto 775bbe236 (range-diff equal), adding only agents/launchpad/work/queue-255/DESIGN.md. No test reads queue-255. Webby APPROVE round 1 c31689 rev 4103 (posted by Sage; Webby has no Gitea token). Mos rulings in mos-1666: M1 approved with conditions (rollback removes components before the pointer goes back and the STATE check confirms the key is absent; the loader stays strict inside the key; four test-config.sh cases), R1 chosen, M2 dropped. Sage gate check against Q203, O6, REQ-WEB-2 and REQ-INST-1: consistent. One PRD text gap goes to Mos: REQ-INST-2 says the stack writes the providers entry, and R1 prints it for the user to paste. Webby N1 and N2 bind P4; N3-N8 carry into the P1-P6 build rows, all post-v1.
Fethry at c8a9bcf94, per Sage sage-4292 and mos-1616 pi-route amendment. Before: every managed session receives instance-wide provider credentials; harnesses have no transient per-session proxy context; pi preflight checks only its binary. Intended after: proxy-mode isolation, Claude proxy env, pi private run-local route config using environment references only, credential preflight, and business proxy account settings. Design/test plan: agents/fethry/work/queue-332/BUILD.md. Initial tests placed before production changes. No tests run: Sage CLEAR is required and has not arrived. No success/acceptance claim, live change, or dependency landing. Existing proxy issue number requested from Sage; not yet received.
2026-10-25T07:46Z | Sage 1ef1e4f8 | Row288 quiet-host handoff (#645), late phase registration | Before: unchanged diag2 refused exit9 after07:00:05-07:30:18Z with neither base/head processing file started; no fullGREEN/run4 evidence. Faceless READY07:37:14Z and final A02 drain acknowledged. Bounded host observation07:38:31-07:43:31Z produced11 half-minute load/CPU-pressure/process-name samples at /mnt/storage/scratch/sage-r288l/quiet-20261025T073714Z/samples.jsonl. Magica331 r4 occupied the preceding slot until07:41:00Z; after its end, sampled load1 remained8.03/7.97/10.02/9.40/9.22;07:43:36Z follow-up8.97 and no gate visible. After: no288 test or run4 started, unchanged load1<4 precondition unmet. Explicit RELEASE delivered to faceless master sage-4466 and Mos sage-4467;645 c1172 read back, done=true with original title/description preserved. This closes only the bounded handoff/measured-inability/release task; row288 diagnostic and fullGREEN acceptance remain unmet. No thresholds, test deadlines, scheduling settings or running jobs changed. Earlier interrupted/refusal logs preserved separately.
2026-10-25T07:46Z | Sage 1ef1e4f8 | P2/P4 prerequisite state | Magica331 r4 on0965fe1ea under sage-4459 stopped at full-list file69 project-runtime.test.mjs: exact Broker import closure lacks new common.mjs import. Probe30/30,68 full-list files green; aggregate707/706pass/1fail/0skip/cancel;193 remaining files, config and mutants/controls unrun. Receipts8d88a6029; rawlog ee430ce92543c4027b4aa78f343c703fd00bb55433e6ed40d54b61668a5914d4 read. Static trace confirms real sandbox defect: common.mjs and top-level-read PIN absent from RUNNER_FILES, as is new first-output.mjs. Magica holds read-only; proposed pure validation module/two readonly code binds/exact guard revision sent to Mos for scope ruling sage-4468, Q246 independent review still required. Poe prepared e7438743f regression manifest8/8 verified and git show --check clean; product patch unapplied at review. Next test-first404 block CLEAR sage-4469: intended two-caseRED before narrow exactGET404 normalization, then both new whole files+8focused/acceptance/named mutants/controls, stop on unexpected outcome. Global landing gate remains afterP2. No composite green, landing or push performed by Sage.
## 2026-10-24 — row332 crash stop, documentation-only checkpoint
2026-10-25T08:03Z | Sage 1ef1e4f8 | Row331 r5 narrow review and full-builder verification phase | Before: r4 deterministic import-closure RED retained; r5 focused sixteen whole files181/181 passed, zero skips/cancel, real sandbox/session controls verified with raw16hashes. Fresh independent Claude Opus5.5/high Q246 round1 APPROVE8d88a6029..4948ece0e; no blocker/high/medium. Purity-regex/no-new-test-pre-fix-RED and confined-startup-only limits retained; verdict agents/sage/work/r331-r5-review/round1.json. Full P2/global/landing not approved. Now: accepted fresh import-derived269 list on unchanged reviewed code4948ece0e, packet2ff10ffac: old262 preserved+validation+six sandbox-dependent collateral files. Graph17sources/zero parsefailures, all11packetartifacthashes verified3993f7d3; listfd724dd9 equals graphbed8a700 tests. Runnerdiff changes only comment/artifact filenames/list/count. CLEARsage-4477 wholeprobe->269wholefiles->same test-config->four original mutants/restored controls, same deadlines/flags/scheduling, stop first unexpected outcome/no retries.646 remainsopen. Result pending, not a composite green or landing claim. Mos informed sage-4478.
Fethry stopped under Mos mos-1630/Jason's T3 crash instruction. No production implementation, tests, probes, mutants or acceptance runs occurred; Sage CLEAR never arrived. Explicit route metadata per sage-4293 is recorded in agents/fethry/work/queue-332/BUILD.md; full state and resumption boundaries are in HANDOFF.md there. Safe crash checkpoint commits documentation/historical plain-text import manifest only; four unrun tests and the import-audit script remain uncommitted. No long jobs restarted, protected branch changes, merges, live changes or further thread messages.
2026-10-25T08:23Z | Sage 1ef1e4f8 | Row331 r5 full builder verification result | After CLEAR4477, builderblock finishedrc0 at08:19:20Z on2ff10ffac/code4948ece0e, receipt/docd62c69c86; package source unchanged. Independently verified279step logSHA/bytes and exact269inventory, final11artifact/280rawlog(including driver) manifestf1b6ee9b, receiptf95b14d7. Whole2692427tests/2426pass/0fail/1skip/0cancel; probe30+config55 gives2512tests/2511pass/0fail/1skip. FEDR7 scratch acceptance skip explicitly UNVERIFIED until scripts/test-federation-acceptance.sh at its authorized/global stage. Four mutants killed by named behavior; restoredwholecontrols30/30 each and sourcead5b37f3 restored byte-for-byte. Real sandbox11/session13 passed, no confined skips. Childnice19all279, driver16two recorded host-renice observations; no timeout/retry/control edit. Slot returned; no automatic nextgate. FullP2 Boyd first review/credential landing review/Sage global gate and row288 remain outstanding; narrowr5ClaudeAPPROVE is not fullP2/landing approval.646 staysopen. Supplied verifiedBoydID and full-scope handoff requirements sage-4479, Mos informed sage-4480; builder's already-invoked canonical queue move pending, no duplicate mutation.
2026-10-24 — Fethry row332 P3 UNRUN implementation checkpoint: optional proxy route per sage-4325 (default Anthropic), transient preflight/bundle/spawn context and serialization split, pi private model file/provider credential requirement. Existing initial RED evidence precedes source changes; only specifically authorized old fixtures updated. GPT wire API value PENDING until separate offline CLEAR/evidence; P2 seam remains injected context, no real proxy/auth access. Not GREEN, not accepted or landed. Details agents/fethry/work/queue-332/BUILD.md.
2026-10-25T08:25:08+00:00 | Sage 1ef1e4f8 | Correction to08:23Z row331 verification entry | The final manifest/check-and-track helper stopped on KeyError bytes before its Vikunja post, because r5-full-driver.log is hash-only; shell continuation appended the08:23 entry prematurely. Earlier independent279step logSHA/bytes/count checks were already complete. Corrected final checker now verifies all11artifacts+280rawlogs: allSHA match, byte counts match wherever supplied; only driver log lacks bytes metadata. Restored sourcead5b37f3 matches allfour mutant events.646 comment1178 posted and read back OPEN now. No product/test or run result changed. Boyd0047 confirms fullP2read-only review underway on d62c69c86/base78b69e1e6, writerC included. Initial queuein-review move refused missing --candidate rc2 without mutation; one corrected candidate-bearing operation remains pending, no duplicate operation.
2026-10-24 — Fethry row332 P3 checkpoint ef0939e35: required explicit route restored per sage-4293/4328; openai-responses chosen by Sage sage-4331 as reasoning-based tie-break, not evidence-decided (both offline shapes passed). Rehashed pinned8.0.42 single active-tool isolated GLM turn confirms thinking/tool_stream survive to stand-in;bundle7/7,proxy-harness5/5,no skips. Real Codex auth proof remains row209 phaseA step7. P2 landing/rebase,mutants,reviews and full gate still pending; no landing claim. Plain evidence/limitations in agents/fethry/work/queue-332/BUILD.md.
2026-10-25T08:33:18+00:00 | Sage 1ef1e4f8 | Row331 first full review CHANGES and request fallback | Boyd0049 fullP2review CHANGES onehighB1: runtime modelRuns empty afterrestart until bind, no-launch neverbinds oldpersistedsessions, sweep treats emptyasnoruns and removesretiringkey beforefuturegrace/confirmedstop. Magica andSage source-onlytrace confirm; writerC no otherblocker. No newtest/fixrun. BoundedB1preparation4483 underoriginalP2acceptance: authoritativeidentitycheckedpersistedrunview before retirement, retainfailclosed onunknown/discovery/stop failure, preserve no-launch/no newstopauthority; staticruntime/restartregressions/proposal first, no productfixuntilintendedRED/futureCLEAR. Requestfallback: ownGETuserjarvisverified, canonicalreviewrequest newop4481 completedrev4121/4122 posted31700, readbackauthor/issue/candidate/markersverified. FullBoydverdict relayed verbatim31701 with explicitBoydindependentreviewer/SageJarvisrelay attribution onBoydexplicitrequest, readbackverified; Boydasked4485 torecordCHANGESasboyd againstd62c69c86. Original4119/4120missingMagicacredentialfailurepreserved, no rowmove repeated/sharedorBoydcredentialused. Queuecurrentround1posted; verdictrecordpending.646global/P2gatesstillopen; no landingor288claim.
2026-10-25T08:50:48+00:00 | Sage 1ef1e4f8 | B1/647 intendedRED verified, bounded runtime/focusedGREEN phase | Before: correctednewtestca0e83337 onunchangedproduct4948ece0e ran EXACTONEwholemodel-restart under4490:12tests/2pass/10fail/0skipcancel, all10expected old-key-remotely-installed assertions, bothboundnonrunnerstop/confirmeddeadcontrolspass. No fixture/control/cleanup/observer/timeouterror. Raw13f41a18/19069bytes/names/counts and5producthashes independentlychecked; receipte99d225a/resultmanifeste69b1ac9 match, evidence-only41e909bcc. Now:4491 authorizes b1-proposal six-step minimalruntime.mjs-only implementation/privatehoststricthelpers andfocused8wholefiles(newrestartfirst). Seedauthoritativecheckedpersistedviewbeforetimer, mergeboot/fresh/bound, unknown/discovery/identity/stopfailure retains; no-launch/no discovery-derivedstopauthority preserved. Samepublicschema/refusal/IPC/mount/config/writer/grace/stop/timer/oldassertion/deadlines; ifruntime-onlyinsufficientstopforruling. Focused stopfirstunexpected/noretries, noautomaticfullgate/landing.647c1180readbackOPEN; freshnewcandidate/fullreview/Q246/global/FEDR7/288acceptance outstanding. Mos4492informed.
2026-10-25T09:01:42+00:00 | Sage 1ef1e4f8 | B1/647 boundaryRED verified, exact two-file/focusedGREEN resume | Boundary4495ONEnewwholefile produced2tests/0pass/2fail/0skipcancel; bothintendedMissingexpectedrejection(prePUT/prelocaldelete), no fixture/cleanup/timeoutfailure. Raw911d2a59/1994bytes/exactnames/counts/5unchangedproducthashes checked; receipt7fa8e123/resultmanifest8c49df81 match; evidenceonlyc90dcc4b1, original12RED41e909bcc retained/notrerun. Conditional4493/Mos1702prerequisite met. RESUME4496minimalruntimecheckedpersistedboot+fresh+trustedboundview plus EXACTprivateModelKeysconfirm-at-two-boundaries delta only; preserve no-launch/no newstopauthority/strictidentity/unknownretain/confirmedexit; no publiccontract/mount/writer/refusal/timer/grace/assertion/deadline change. Focused9newrestart12thenboundary2thenexisting7wholefiles, sameflags/nice/privatecfg, stopfirstunexpected/noretry; no automaticfull/mutants/landing. Newcandidate/freshfullP2/Q246/global/FEDR7/288acceptance remains. Mos4497informed.
2026-10-25T09:11:09+00:00 | Sage 1ef1e4f8 | B1/647 focused result and fullbuilder phase | Code81cbdea37 changes only runtimeprivateinventory and exactapprovedModelKeysconfirmdelta; bothpreviousREDphasespreserved. Focused4496ninewholefiles131/131,0fail/skipcancel, nine rawSHA/bytes and receipt6c2ff448/resultmanifest78c1b8fa8artifacts+10rawlogs(incldriver) verified. Candidatecontent704a2469all111Gitblobs/pathinventory checked; testedsourceunchangedinevidencepacket e5a4ade07. Realconfinedstartup/sessioncontrols pass; sleepfixture doesnotproveauthorizedrealrunnerSIGTERM, limitretained. Freshfull271list=old269+exactrestart/boundary2, graph17sources0parsefailures/all271match4e01c2e8, listd6b403f0, all10fullpacketartifacts007a2adf match. Runnerdiffonlycomment/artifactnames/listcount. CLEAR4498probe->271wholefiles->sameconfig1800->4namedmutants180000+restoredcontrols, sameflags/priority/privatecfg, stopfirstunexpected/noretry/no extrarun. Resultpending; FEDR7unverified/freshfullP2round2/Q246/global/landing/row288 remain.647c1183readbackOPEN; Mos4499informed.
2026-10-25T09:35:26+00:00 | Sage 1ef1e4f8 | B1/647 newfullbuilder result and reviewROUND2 | Builder4498rc0/code81cbdea37/checkoute5a4ade07, evidenceonlyd817e5840/sourceunchanged. Independentlychecked281stepSHA/bytes/exact271list;whole2441tests2440pass0fail1FEDR7skip, probe30/config55->2526subtotal2525pass0fail1skip. All4namedmutants killed andrestored30controls/sourcebf96f941, all281driver/child19atstarts; no retry/timeout. Result20347f8a all11artifacts+282rawlogs(incldriver)verified;FEDR7UNVERIFIED/global/realrunnerSIGTERMlimitsretained. NewfullP2Boydround2request4501 includesoriginalB1/response/currentwholeP2/evidence/limits; notnarrowreview. Sequentialownerqueuetransitions4500pending. Queuecandidate standard33pathSHAmanifestfb0a7b68 pinsallchangedsource/test/script/publicdocs+DEFERRED; onlyappend-onlylogs/agents evidence excludedfromqueuepinbutretainedin111content/fullresultmanifests. Scopechoice+tradeoffstoredround2-source-scope.json: permittracking/evidenceevolution withoutweakeningsourcepin. Formalround2request/verdictrecordsawaitreceipts; freshfullClaude/Dewey/global/FEDR7/288stillrequired.647open/Mos4502informed.
2026-10-25T09:41:59+00:00 | Sage 1ef1e4f8 | Full P2 round 2 source approval and security review | Boyd0053 independently APPROVE whole P2 base78b69e1e6..d817e5840/source81cbdea37, B1 closed, no actionable findings; this is not landing approval or a recorded queue verdict yet. His 111-source-blob/11-committed-artifact checks and coverage limits remain attributed. Fresh full P2 Claude Opus5.5/high Q246 review dispatched as a NEW delegate_task, clientRequestId sage-4503-r331-full-r2-q246; prior narrow r5 approval is not reused. Dispatch metadata saved full-round2-dispatch.json. Review is read-only committed Git, no tests/proxy/live data or external writes. Queue owner moves succeeded4124/4125, round2 opened;4126 request failed due unset Magica credential, preserved in6a645188d. Sage GET user again verified jarvis; one canonical existing-round2 fallback request sage-4504-row331-round2-review is RUNNING(exec3218), not yet claimed posted. No duplicate operation; candidate fb0a7b68 unchanged.647 open; fresh review, recorded approvals, global/FEDR7/landing/row288 acceptance remain.
2026-10-25T10:03:36+00:00 | Sage 1ef1e4f8 | Full P2 round 2 corrected CHANGES / bounded preparation | Canonical fallback4504 completed4127/4128, request31702 read back jarvis/issue1829/round2/frozen33path fb0a7b68. No pending Sage queue operation. Initial independent Boyd APPROVE0053 relayed31703; fresh full Claude Q2464503 REQUEST_CHANGES saved full-round2-verdict.json and relayed31704, full range78..d817/source81. Original B1 closed but M1 terminal evidence lost on later PID reuse and M2 proxy admission suppressing historical recovery end/release are confirmed. Boyd0054 independently adjudicated CHANGES, superseding his assessment31703 without rewriting history; exact attributed correction31705 posted/read back. Boyd4515 instructed formal-pin verification then one CHANGES record as actorboyd; no round2 verdict record claimed yet. Prior narrow r5 approval and all builder receipts remain scoped; 271-file green cannot prove untested M1/M2.
Static source trace confirms known inventory loses terminal observations and exact old Broker launch matching precedes cleanup only after runtime admission; claims persist. Magica4513 authorised TEST-ONLY preparation, no product/Node/test/proxy/mutant/queue/newround launch: M1 sticky per-exact-identity strict confirmed-exit proof, separate outer/runner, stale registry protection, initial corrupt ticks/key still HOLD; no blanket mismatch=>exit or authority expansion. M2 persisted launch/claim restart matrix and negatives, exact Broker-owned cleanup proposal before any contract change; no usable cap/modelRuns/rotation-stop authority from cleanup. Marker direct-confined test may be drafted without mount expansion. L1 isolation and L3b orphan-key rehire confirmed; precise scope/repair proposals with Mos4514. L2 missing-boot hold documented tradeoff and L3a race remains fail closed. First-output clock currently starts at session launch before any model turn; Mos4511 owner-intent ruling pending, no timing/protocol edit. Source81/candidatefb0 frozen, global/FEDR7/row288/Dewey landing remain unfulfilled; no source approval or landing.
2026-10-25T10:06:00+00:00 | Sage 1ef1e4f8 | Mos1703 consolidated P2 intent/scope | Clock intent settled by Mos technical D17 reading, not a new Jason quote: one existing120s first-output budget starts at FIRST actual adapter/model turn; idle before it unarmed, no per-turn reset/extension. Task650 requires exact brief amendment/method/caller/marker delta + idle/silent/output/direct-confined cases before any product/run CLEAR. M1 task648 strict per-identity independently monotonic outer/runner confirmed-exit proof under existing absent/reaped rules only; no first mismatch or prior-live mismatch inference, no stop authority. M2 task649 Broker-owned exact immutable UNENDED cleanup, no capability/modelRuns/rotation-stop binding/new launch; exact unapplied contract/caller/negative controls must return to Mos. L1/L3b task651 static proposal/test-only prep authorised: independent instance work followed by original first error, unchanged1s/refusal; post-registration state/confirmed membership vs removed orphan/fresh issuance rules, no stale-key restoration. L2 documented hold accepted, L3a race explicit fail-closed follow-up.
Sage4517 delivered full bounded ruling to existing Magica thread; M1/M2 packets should return independently of clock/lows. Parent independently GET-read tasks647-651 OPEN/project19/owner Sage title; receipt mos1703-task-readback.json. Updated review ledger and saved exact relay. No source edits, Node/tests/proxy/sandbox/mutants/queue round/global/landing/row288 CLEAR. Boyd's ONE CHANGES record0002 remains pending per0055; no duplicate or inferred success.
2026-10-25T10:06:40+00:00 | Sage 1ef1e4f8 | P2 R2 formal CHANGES receipt | Boyd0056 definitive original command exit0; parent independently read canonical row331 round2 receipt opboyd-331-verdict-0002/rev4129/reviewerboyd/CHANGES/comment31705/frozenfb0a7b68 and exact manifest text/digest. Sole round2 verdict receipt is CHANGES; prior APPROVE31703 was never recorded. No pending Sage/Boyd queue operation; do not repeat. Saved round2-boyd-canonical-verdict-result.json and updated ledger. Mos1703/Magica4517 static-only prep648-651 remains unchanged, no product/test/newround/global/landing/row288 grant.
2026-10-25T10:19:11+00:00 | Sage 1ef1e4f8 | M1/M2 static packet review and M1 intended RED CLEAR | Inspectedbc6942412/test-onlynewmodel-terminal-proof7/model-historical-cleanup17/sharedfixture and exact UNAPPLIEDruntime/Broker+IPC proposals. Bothpreparedmanifests3666f737/b818438d each6artifacthash/bytes+9producthashes independently verified against source81; packages diffONLY3newtest/helperfiles. M1 independentownchildrenexit/reap, originalsweepcompletion observer, exactformerownPID syntheticproc only/restorednamedbuiltins+signalguard; firstcorruptticks/keyhold controls unchanged, no actualPIDreuseclaim. M2 actualStoreclose/reopen/persistedclaim/Launcher recovery, no fixturecleanupimplementation; oldfailures behavioral notundefinedfuturemethod.
CLEARsage4520 EXACTONEwholemodel-terminal-proof file pre-fix onsource81/testpacketbc6942412; expected2RED/5GREEN only, notobserved. Samewholeflags/nice19/measuredprioritiesload/privateconfig/cleanup/no retry/no productfix/M2/extra check/newround. Stop/reportwholefile; slot pending. M2 has NO execution CLEAR yet. SentMos4521 exactM1diffSHAa9189c01 andM2diffSHA92f3b899: new trusted recoverLaunch LAUNCH_OPS/Broker-ownedproof/sharedendSession/caller replaces bind+endRun, no cap/runs/modelRuns; real contract needs ruling beforeimplementation. Mos1703 required exactunapplied proposals now supplied; no global/landing/288 claim.
2026-10-25T10:21:52+00:00 | Sage 1ef1e4f8 | M1 intended RED verified / M2 intended RED CLEAR | M1sage4520 onbc6942412/source81 whole7exact5pass/2intendedfail, no skip/cancel/timeout/observercleanupfailure. Parent independently verified raw7562b5b6/7232bytes/all7names+assertions/counts; failedlatergenerationretirement andinitialcorruptkeyalreadyexitedretention, all5refusal/livecounterpart controls pass. Ownchildren exits/reaps precede syntheticproc; NOTactualOSreuse. FinalnoSignalscounterassertion inexpectedfirstfail wasnotreached; guard/interceptionrestoration remaincode/cleanup evidence, nooverstatement. Evidence-onlypacketpending; reportreceiptcc1726d6. Parent CURRENTcheckout9producthashes==81 +all6M2artifacthashbytesverified.
Mos1704 ACCEPTSexactM1a9189c01 +M2trustedcontract92f3b899 CONDITIONAL onbothintendedRED andboundedfocusedpacketinspectionbeforeapply. Sage4522 CLEAREDONLYONEwholeM2model-historical-cleanup file onunchanged81/pinnedtests; expected17/9pass/8failnotobserved, samewholeflags/nice/privatecfg/measurements, stopafterfile/no retry/productfix/extra/queue. Requestedstaticfocusedinventory/candidateplan plusNEWtest-only actualtrustedprocessIPC dispatchcoverage; existing17inprocessstandin isnotIPCproof. NoIPCtestexecutionorimplementationyet. Mosconcreteresult4523delivered. Old647REDs/narrowr5review/fullreceipts preservedatactualscope; no clock/lows/global/FEDR7/288/landing CLEAR.
2026-10-25T10:23:52+00:00 | Sage 1ef1e4f8 | Both M1/M2 intended REDs verified; implementation held at focused prerequisite | M2wholeRED4522 source81/testbc6942412 exact17tests9pass8intendedfail0skipcancel, no timeout/fixture/control/cleanupfailure. Independently rawf5f7a22e/15148bytes+all17names/outcomes/8namedassertions match preparedmap; CURRENT9productpaths byteidentical81. EarlierM1exact7/5pass/2intendedfail rawverified with signalcounter-notreached and synthetic-onlyreuse limits retained. Parent independentchecks saved separately; builderreceipt M2reported5aff9915, committedreceipt-manifestverificationpending.
Bothrawprerequisitesnowverified, notimplementationCLEAR: inspectstaticfocusedwholefileinventory/controls/newcandidateprovenance andactualtrustedprocessIPCcoveragepacket first (existing17inprocessonly). Magica0066preparingstaticpacket, no productfix. Mos4524 concrete result / Magica4525 verified nextprerequisite delivered. Tasks648/649 comments posted/readbackOPEN [{"task": 648, "commentId": 1190, "readBack": true, "done": false, "bodySHA256": "173c05ddd38776b94c2d29b3e3d6a21877f47de071059593e27fb0661fe78c8a"}, {"task": 649, "commentId": 1191, "readBack": true, "done": false, "bodySHA256": "2944d5578dafc77d47e6ab9e2b3d851a3216ac271f3cc64811f2bf34b3b7f33e"}]. Exact2diffconditionalMos1704 scope stays; clock/lows separate, no additionalexecution/newround/global/FEDR7/288/landing authority.
2026-10-25T10:32:33+00:00 | Sage 1ef1e4f8 | ActualIPC/focused prerequisite inspected | Magica0067 separateM1/M2 evidencec3eb95242 andstaticIPCpacket05d6a3336. Parent verifiedbothREDresultmanifests a5d5c48c/14059b83: each9committedartifacts+2raw/driver hashes, byteswherepresent/beforeafterequal. No earlierreceiptverificationpending. ActualIPCpreparedmanifestc5373f1d all11artifacts+9unchangedproducthashes/currentfilesverified. New9cases realstartHostfork->processboot->runtime/Broker, requiredreaderboot, ownedhost-firstcleanup, persistedSQLiteclaim/endhistory, directops+actualLauncher; no mockeddispatch. Existingordinaryfreshadmission/no-launchcontrolspreserved, newrefusalsmustleavechannelusableafterfix. OldunknownIPCpathcancloseownhostasintendedRED, notclaimednewchannelproof.
AcceptedboundedFOCUSED20wholefiles exactb5448102 +staticdependency/forkjustification: threeM1/M2/IPCregressions, originalrestart/boundary/modelkeys/stop/proxy, Broker/routes/import/sessions/threadclaims/end/process, seatrealconfinedsession/sandbox, CLIhost/launcher/sessionlaunch. Currentcandidateprovenanceplanretainold81/fb/R2CHANGES; correctedproductcommitAFTERapplicablefocusedGREEN, contenthashcanfreezeuntestedworktreefirst.
CLEARsage4527 EXACTONEwholemodel-historical-ipc.test pre-fixsource81/05d6a3336test expected9/2pass/7intendedREDnotobserved. Samewholeflags/nice19/measuredpriorities/load/privatecfg, actualforksnooverclaimedmeasurement; stop/reportwholefile/no retry/fix/otherfile/mutant/queue. ImplementationNOresumeuntilintendedIPCREDverified; exactMos1704two-diffscopeonlyafternewCLEAR. Mos4528informed. No clock/lows/global/FEDR7/288/landing grant.
2026-10-25T10:36:24+00:00 | Sage 1ef1e4f8 | All intended REDs verified / EXACT M1+M2 focused resume | ActualIPCRED4527 on05d6a3336/source81 exact9tests/2pass/7intendedfail0skipcancel, nofixture/harness/cleanup/timeoutfailure. Parent raw6ba10393/13478bytes/all9names/outcomes+assertionschecked andCURRENT9producthashes81. Separateevidence07292713b/resultmanifest16f058a1 all9committedartifacts+2raw/driver hashes/byteswhereprovided checked, machine testedCheckout05d6a3336 andbeforeafterequal. Human-summary e05typo remainshistorical, machinepin correct. Limits: onlyfirstdirectopcapturedinvalid-host-request; otherpredicateinnercodesnotcaptured andpostrefusalchannelassertionsnotreached. Nestedforkpriorityinheritednotindividuallymeasured; no pre-rootlockinventoryassertion.
AllMos1704conditionsnowmet: bothoriginalM1/M2intendedREDs+actualIPCREDverified, acceptedfocused20exactlistb5448102/dependency/realforkpacket/newcandidateplan inspectedbeforeapply. RESUME/CLEARsage4529 EXACTcombinedM1a9189c01 +M292f3b899, ONLYfourproductfiles broker/runtime/process/launcher. Freezeappliedsource/testcontent/runner/listbeforeexecution andcompareagainstexactcombineddiffs. Run20serialWHOLEfiles orderfrozen, sameflags/nice19/actualmeasurements/privatecfg; STOPfirstunexpected/no retries/fixtureassertiondeadlineedits/otherrepairs. IPCGREENmustreachpreciserefusal/channelguards/no cap/no proxyPUT/modelStallbinding; M1mustreachnoSignalscounterafterretirement. Confinement unavailable=UNVERIFIEDnotgreen. CommitproductONLYafterapplicablefocusedGREEN, thenmapcontenttocandidate. Readonlypinnedparsergraph/list/fullpacketpreparationafterGREENallowed; full/mutants/acceptance/newround remainSEPARATECLEAR. No clock/lows/global/FEDR7/288/landingauthority. Mos4530concretestate delivered;647-651open.
2026-10-25T10:45:39+00:00 | Sage 1ef1e4f8 | M1/M2 focused GREEN independently verified / final gate sequencing | Magica0071SLOTBACK4529: all20wholefiles254/254pass, zero fail/skip/cancel/timeout. Parent resultmanifest5596c74f all7artifacts+20rawSHA/bytes andcounts verified, frozen29files38c7a9e6/source26e3aef0 unchanged; separately appliedbothacceptedpatches to81 inownedtempscratch andbytecomparedall4products. ProductcommittedAFTERGREEN5868d77f18abeb01d2822cb475df48ce1336ae58, packet860582c27. All180content63642ecf blobs+37fullsourcebehavioura1cec8b5 entries independently checked; frozen29testedfilesmapexactlycodecommit, no oldtests/ModelKeys or packet-tip packages/scripts/DEFERREDdelta. IPC9 now reachesexactrefusal/channel-survival/no-cap/no-proxyPUT/modelStallrefusal/claimrelease/fresh/no-launchassertions; M1reachesnoSignalscounter; actualsandbox11/session13 passnonskip. RealOSreuse/realrunnerrotationSIGTERM/nestedforkprioritymeasurement/independentpre-rootlockinventory NOTclaimed. Manual0070header time correction10:39:41Z retained; rawmeasuredtimestamps unchanged.
Fullpacket98e601a9 all13artifacts/list274/graph17 verified: prior271retained+EXACT3newtests, no othercollaterals/omissions; fullrunnerdiff onlycomment/evidencenames/listcount. UNEXECUTED/no fullCLEAR. Sage4531 toMagica immediateALREADYauthorisedSTATIC650clock/651lowcontracts+testprep; finalwholebuilder+freshfullP2/Q246reviews sequencedafterremainingknownsourcecontractssettle tovalidatefinalsource, no scope/gatewaiver orcompositegreen. Mos4532concreteresult/orderinformed; anyacceptanceorderingconflictreturnedbeforeextraexecution. No650/651productedit/run/newqueue/global/FEDR7/288/landinggrant. Tasks648/649updated/readbackOPEN [{"task": 648, "commentId": 1192, "done": false, "readBack": true}, {"task": 649, "commentId": 1193, "done": false, "readBack": true}];647-651remainopen.
2026-10-25T10:52:07+00:00 | Sage 1ef1e4f8 | Static651 L1/L3b inspection before RED | Magica0073 prepared0ec63de70: independent each6artifacthash/bytes+9unchanged5868producthashes match L1manifest3b73bbcb/L3bbe635be2. NoNode/run/productchange. L1exactdf4ee0f4 per-instance try/catch serialsweep/firstErrororiginal/rethrowafterothers/valuefreeoutcomes meetsdirection, sentMos4535forcontractruling. New4tests expected3RED1GREENnotobserved. L3b46e68bc6 postregisterhold+freshsentinelledmembershipbeforecachedreturn/freshkeyGETPUTGET ifmissing preservesold.retiring, new6unitexpected5RED1GREENnotobserved. Concretebranch discrepancy: explicitrotate appendsoldcurrentevenifconfirmedabsent while reportclaimsnoinventedretiring; recommended appendonlyrotate&&present, exactstate/rule returnedMos4535beforecode.
Sage4534 STATIC corrections only: fixture valueFree losesclosedorremovedmodelkeys, requireimmutablehistoryscanningallfixturessecretvalues withoutprinting; attemptallownedcleanup. Requireexactstate/table/preservationcontrols andseparateactualruntimeorganizationhireorphan+failure/revokingmembershipcontrols, notcontrollercontinuationoverclaim. L1mayreturnindependentlyofL3b/650. NORED/CLEAR/productimplementationgranted; clock650staticcontinues. Task651comment1194posted/readbackOPEN. Finalfull274/reviewsremainunexecuteduntilstablecandidate; no gatewaiver/compositegreen/global/landing/288.
2026-10-25T10:57:41+00:00 | Sage 1ef1e4f8 | Mos1705 exact low-branch ruling and L1r3 intended RED verified | Mos1705relayed4537: L1removeunconditionalcomplete receipts, keeprefused-only/existinglifecycle receipts/1s+firsterror; addnoopreceiptcontrol. L3bpreserveold.retiring ALLbranches, appendcurrentONLYrotate&&confirmedpresent, noabsentcurrententry; initial/postregisterhold/freshserializedGET/sentinel/GETPUTGET/privatepersistbeforepublication unchanged. Fulltable/no-record/revoking+actualruntimehirecontrolsbeforeRED, noimplementationgrant.
Magica0074helperr2history/canary/guardedcleanupinspected; correctedL1r3 745875432exactdiff93e4de1e andmanifestd2a62d03 all6artifact/9CURRENTproductbytes5868verified. CLEAR4538 ONLYonewholemodel-sweep-isolation file unchanged5868/pinnedr3 expected5/2pass/3RED. SLOTBACK0076 actualexactexpected, zero skip/cancel/fixture/cleanup/timeout. Parent resultmanifest89adad47 all8artifacts+raw416ec873/3514bytes/allnames/assertions/counts/beforeafter+CURRENT9productsverified. Exactoriginalfirsterroridentityassertion passedbefore laterfailure visitation; bothnormalretirement/historycanary and3no-op/no-churncontrolsGREEN. Ownedroots0/nolivechildfixtures reported. Evidencecommitpending; no productfix oradditionalrun. Mos4540/Magica4541verifiedstatusdelivered. Task651c1196readbackOPEN.
No L1implementationresume: boundedfocusedplanneeded; L3bcompletebranch/runtimepacket+650clock stillSTATIC on5868. RejectedPUTpayloadcapturehistoryrequestedAFTERL1slotback/newpins (currenthelper503beforebody missesattemptedfreshvalue), oldexecutedr3anchorpreserved. Final274/fullreviewpacketstaysunexecuteduntilstablefinalscope; Mos1705acceptssequencing, no gatewaiver/compositegreen/global/FEDR7/288/landing.
2026-10-25T11:03:27+00:00 | Sage 1ef1e4f8 | Clock650 static protocol inspection / no run | Magica0077 clockpacket994ead40a b26004a3 independently8artifacthash/bytes+5unchanged5868productpins verified. ExactUNAPPLIED0875b66f+D17amendment3ea62438 returnedMos4543 beforeimplementation/RED: adapterchildspawn armingboundary, newexportinexistingmountedfirst-output, ownrunDiratomic0600temp/linknoreplace, bounded64byteNOFOLLOW/NONBLOCKread, absentunarmedvsnewmalformed/future/unreadableimmediatestallpolicy, internallegacydefaultfalse/managedtrue. SharedclockoriginLinuxINFERENCEfromprimaryNodeHrtimeBigInt->uv_hrtime->preciseCLOCK_MONOTONIC pluslocalsandboxuser/pid/ipcnamespacesnot-time; actualbwrapboundsuntested. Upstreamsource/doclinks savedclock650-static-inspection.json; no localNode execution.
Foundstaticnewreaderdefect: .toString(ascii) strips highbitsperofficialNodeBufferdocs, so proposedexactASCIIvalidationnottrue. Mos4545/Magica4546 sentstrictUTF8+ASCIIregexorrawbytecheckrevision/highbitnegatives; original0875byteshistoricalnotacceptedfinal. Magica4544 additionalSTATICnegatives symlink/FIFO/nonblocking/size/mode/shape/zero/future/lateembeddeddeadline andproducer-spawn-callbackfailurecleanuptrace; no broaderhandler/sourceeditwithoutcontractruling. Current3newfiles9casesexpected5RED4GREEN NOTobserved; no clockRED orproductCLEAR. Task650c1197posted/readbackOPEN. L1evidence2a2b0136b committed8artifactsnowverified; originalL1REDrawalreadyverified. L3bfulltable/runtimepacketstatic. Noactivegate/queue, product5868 unchanged; finalfull274/reviewsunexecuted/no gatewaiver/global/FEDR7/288/landing.
2026-10-25T11:07:40+00:00 | Sage 1ef1e4f8 | Mos1706/1707 clock boundaries relayed, exact revised bytes pending | Sage4548 relayed1706: successfuladapter/bin/shspawn acceptedboundary; embeddedonce120deadline/firstoutputcancel/readNOFOLLOWNONBLOCKregular0600currentuid<=64positive-nonfuture acceptedLinuxinferenceonlypendingrealconfinedtest. Invalid/future/unreadable=>singleexistingtrustedstop/valuefreereceiptaccepted; ENOENTunarmed. Internallegacywatcherdefaultfalse acceptedONLYmanagedlaunchertrue/no userconfig. StrictrejectANYbyte>127 beforedecode+exactASCIIshape, highbitprefix/digit/newline+extra/trailingcontrols required; original0875NOTacceptedbytes. Producerfailure mustbecaughtwithinlifecycle, ownedgroupboundedTERM/KILL+reap, controlledcleanup/exit/nolaterturnfirststamp/fixeddiagnostic. TempownershiponsuccessfulexclusiveOPEN, guardwrite/close/unlink/collisionpreexistingneverremoved. Revisedexactdelta beforeclockRED/productCLEAR.
Sage4549 relayed1707: preserveNONPROXYbehavior, no unconditionalnewhardlink/timestampdependency, no session.json/publicconfig/envschema; smallest internaloptin within4files, host-ownedrunDirmarkerproposalallowedbutexactbytespending, addnonproxycontrol. Parent read-onlycallertrace runTurnlanding540/message581/retry630, top-levelawait/eventcallbacknocatch; mainnormalserver/toolcleanup androle.release onlyEXIT.stopped; hostexitendRunreleasesclaim/records/unregisters/lockcleanup. Senttrace/no genericcatchclaim/clearescalationtimerafterchildclose/reap. No parentorchildproduct/testexecutiongrant.
OriginalL1RED4538/evidence2a2b0136bverified; L3bowner-resolvedstate/runtimepacketstatic; currentproduct5868 unchanged/focused254, full274unexecuted/finalfullfreshreviewsafterstablecontracts. No gatewaiver/global/FEDR7/row288/landing authority.
2026-10-25T11:21:49+00:00 | Sage 1ef1e4f8 | L3b exact scope, fixture diagnosis/correction, both intended REDs verified | Inspected311f49d51 L3br3 manifest3305ad47 all10artifacts+9CURRENT5868products; full14controller/3actualruntimehire/sharedhistoryrejectedPUTbefore503/guardedruntimecleanup. Exact43c14 #issue only matches1705resolvedtable. Mos1708 conditionalexactcontractaccepted, EXISTINGmodelOrganization failedhirecleanupaccepted unchanged: existedfalsebeforeorphanregister canrevoke/deleteconfirmedunpublishedorphan onfailure; controllerfileimmutabilityonly, runtimeexactmembership/no stale restoration/nousablecredential, NOTnoHTTP/immutableorphanfile/atomicrollback. No wrapperedit.
InitialCLEAR4551ONEcontroller endedUNEXPECTED14/4pass/10fail:7intendedassertions+SETUPcredential-format2/13/14. Parent verifiedraw8b61b9d8/11487bytes andCredentialsinstant exacttoISOString validation; newfixturetimestampslacked.000Z. Stopped/noauto-retry.4552authorisedONLY3canonicalnewfixtureliterals(controller2/runtime1), noassertion/deadline/helper/productweakening. Unexpectedevidence6f12b6df7/resulta6c1a31b8artifacts+rawverified/preservedseparate. a27f07e20 r4manifest814d2849 all11artifacts+9CURRENTproductsverified, bytecomparison EXACT3timestampchanges vs311only2testfiles; originaltestblobspreserved.
NewCLEAR4555ONEcorrectedcontroller actual14/6pass/8intendedfail1,2,3,4,5,7,8,10;controls6,9,11,12,13,14GREEN, no setup/cleanup/timeouts/skips. Parent verifiedresultf3d609e98artifacts+raw364f864f/8743bytes/allnames/assertions/current9products. SeparateCLEAR4557ONEruntimehirefile actual3/0pass/3intendedfail, parent verified6cf6235e8artifacts+rawe36fb211/2855bytes/names/assertions/products5868. Realinprocessruntime/Broker/SQLite/organization/fakeHTTP NOTprocessIPC. Evidencecommitpending; no productfix oradditionalrun. Mos4553/4556/4558/4560resultsrelayed; Magica4559nextfocused/candidatepacketbeforeapply. L1r3+L3bexactproposalsstillUNAPPLIED.
Source-onlycross-scopehypothesis4554: knownliveoldcurrent ->confirmedremoteabsence->newgenerationdropsoldcurrentmetadata ->M1keyassociationcanholdbeforeterminalproofevenafterOSexit. Mos1709 created652/openproject19ownerSage, explicitlyUNVERIFIEDconservativeavailabilityinteraction NOTconfirmedregression/blocker orpermanentacceptedlimit. STATICregression/proposalonly relayedMagica4557; exact5868+accepted43c14combinedcontext/ensure-rotate/separateouter-runnerOSexitvsterminalproof/laterretirement/staleRegistry-norun-corruptkeynegatives/map/minimalfuturewholefile scope withnextfocused/implementationpacket. NOextraexecution/fix/keyguardweakening/oldkeyretiringre-add/remoterestore/knownerasure/stopauthority. Finalfullreviews MUSTreceivependinginteraction+eventualexplicitdisposition. Currentruntimetestpathnotblockedby652prep.
Tasks651/652updated/readbackOPEN [{"task": 651, "commentId": 1200, "done": false, "readBack": true, "title": "Full P2 low findings: record L1-L3 dispositions and bounded follow-ups (owner Sage)"}, {"task": 652, "commentId": 1201, "done": false, "readBack": true, "title": "Investigate M1/L3b lost key association and later retirement availability (owner Sage)"}]. Currentproduct5868/focused254 unchanged; noactivegate/queue. AwaitexactL1r3+L3bfocusedinventory/candidateplan+652proposal and650revisedprotocol/strictbyte/fatalcleanup/nonproxyoptintests; finalfull274remainsunexecuted, no gatewaiver/compositegreen/global/FEDR7/288/landing.
2026-10-25T11:24:51+00:00 | Sage 1ef1e4f8 | Bounded low-focused packet and652 static proposal inspected beforeapply | Magica0083 packet13d6782dd manifest4ded0ff6 independently33artifacthash/bytes+CURRENT9products5868verified. ALL3 intendedREDresultmanifests recursively8committedartifacts+raw EACH verified, L3b pendingcommitverificationresolved; unexpected4551remainsseparate. Exactfocused23 list7f07e95e=3newL1/controller/runtime first +old20unchangedorder/noomission. Parentindependentownedtempscratch apply EXACT93e4de1e+43c14 to5868 ModelKeys gives815b92c8e0b7b6eca8495ea745c0ec7cfdc91296a44d9b0a62b94ed9b5bc9e1d, no worktreeapplication. Freezeactualcandidate/base/list/runnerbeforetest/commitafterGREEN planinspected; productModelKeysonly/no wrapper/reconcile/runtime/clock change.
Read652STATICproposalb993ae6e andcontext713110d6: no testauthored/executed/fixselected. Old5868ensurefailsknownL3bsetupprecondition/rotateappendstheoldcurrent; combinedacceptedbranchdropsabsentold thenhypothesizedincompleteproofassociationhold afterobservableOSexit. Proposedfuture1runtimefile ensure/rotate×staleRegistry/[]+terminal/no-run/corrupt/ticks/partial/changedidentitycontrols, no guardweakening/erasure/re-add/authority. RemainsUNVERIFIED/notblockerorpermanentacceptedlimit.
Mos4562 EXACTimplementationprogression+652scopeRULINGrequested: recommendonlyaccepted2lowdiffapply+inspected23focusedGREEN thenMEASURED652followupbeforefinalreview, firstauthoriseSTATIConefiletestpreptheninspect/separateboundeddiagnosticCLEARonfrozencombinedcandidate; noadditionalfix/limitbeforeevidence. Magica4563verifiedpacket/stateinformed NOapply/focused/652testauthoringgrantyet; existing650staticworkcontinues. Noactivegate/queue/productchanges;5868current/focused254,full274UNEXECUTED, freshfullreviews/global/FEDR7/288/landingstillunfulfilled.
2026-10-25T11:29:08+00:00 | Sage 1ef1e4f8 | Mos1710 exact low implementation resume, staged before actual run | MosauthorisesONLY93e4de1e+43c14 appliedto5868, soleModelKeys productblob815b92c8; exact23wholelist7f07e95e. D2requiresSAGEinspectactualdriver/list/config/baseHEAD/uncommittedcandidateblobs/soleproductdelta/all23tests/sharedinputs/9baselineproductsBEFORErunning. Relayed4564apply+freezeactualpacketNOWbutNOtestexecutionuntilparentinspectsandissuesactualrunCLEAR. Samewholeflags/nice/privatecfg/stopfirstunexpected/no retry/testhelperassertiondeadlineedit/extras; productcommitafterapplicableGREEN/mapfrozenblobs, receipt-tipsdistinct. No wrapper/reconcile/runtime/clock/guard/timer/refusal/authoritychange.
MosD4choosesMEASURED652followupbeforefinalfull-reviewacceptance. ONLYAFTERfocusedGREEN newcandidate frozen: staticauthorship/preparation1futuremodel-key-loss-interaction runtimefile/neededapprovedtesthelper underb993/context713/ownprocesses/realHTTP/originalsweeps/matrixnegatives andexplicitOSexitvsproof; NOexecution/prodseam/fix/guardweakening/implicitpermanentlimit/blockerclaim. CompletepacketthenSEPARATEdiagnosticCLEAR. FullfinalP2/Q246briefspreserveunresolvedinteraction+eventualdisposition.650staticindependent, finalfull/Q246/global/FEDR7/288/landingremain. Currentlaneidle/noqueueop; pendingactualappliedfreezeinspection.
2026-10-25T11:35:16+00:00 | Sage 1ef1e4f8 | Actual low pre-run packet inspected / RUN CLEAR4565 | Magica0084 soleModelKeys exact815b92c8 appliedUNCOMMITTED; receipt-only46c00e741, basebeforeapply13d6782dd. Parent verifiedmanifestd142c7ba10artifacts+CURRENT36frozeninputs0ebc27f9+41SCOPEDsourcepins643c5f72(all23tests/sharedhelpers/9criticalproducts/driver/list), 9baseline5868products (8unchanged+soleModelKeysdelta). Independentlyagainappliedaccepted93e4de1e+43c14inownedtempscratch andbytecomparedactualModelKeys. No stagedproduct. Actualdriverfe65fe8e/config301d4865/list7f07e95e/baseHEADinspected. Independent6503testdraftsdirtyOUTSIDE23scope; no clockproductchange, 41scopedmanifestnotclaimedallunrelateddrafts. BoundedNodeprocessscan no competingtest/gate.
ActualRUN CLEARsage4565 delivered EXACT23serialWHOLEfiles, receiptactualclear+frozenCandidateSha2560ebc27f9; sameabsolute--test--test-reporter=tap/defaultoutertimeout0/perfiledeadlines/nice19measureddriverchild+load/privateHOMEconfigTMPDIR. STOPfirstunexpected/no retry/frozenhelperassertiondeadlineedit/extra/full/mutant/config/acceptance. ProductcommitONLYafterGREEN/map36/41testedcontent BEFORE652helperauthorship; don'tstageindependentclockdrafts. AfterGREENonlyMos1710STATIC652onefuturetest/helper, no diagnosticexecution/seam/fix. Mos4566concretestateinformed;651c1204readbackOPEN. ResultPENDING/laneRESERVED,no passingclaim. Finalfull/Q246/global/FEDR7/288/landing remain separate.
2026-10-25T11:39:57+00:00 | Sage 1ef1e4f8 | Lowfocused GREEN independently verified /652static preparation resumes | Magica0085SLOTBACKsage4565 exact23whole276/276zero fail/skip/cancel/timeout/cleanup. Parentresultmanifestfe6652a8 all8COMMITTEDartifacts+23rawhash/bytes/perfilecounts/priorities verified; actualreceiptCLEAR4565/frozenCandidate0ebc27f9 matches. All36frozeninputs+41SCOPEDsourcepins643c5f72 mapexactlypostGREENproductcommit6d3edea61f0d46654771a51b505cd21473617679. packages/scripts deltafrom46receiptONLYModelKeys815b92c8 acceptedcombined, no clockdraftsstaged. Perfilecounts5,14,3,7,17,9,12,2,30,7,14,16,4,3,7,6,3,8,13,11,43,34,8. Driver/testchild19all23; nestedforkinherited/notallmeasured. ActualIPC9/sandbox11/session13nonskip;650directmarker/timestampUNEXECUTED. SleepnotrealrotationSIGTERM/PIDreuse/independentpre-removallockinventory limitsretain.
Mos1710D4conditionalnowmet: Sage4568resumedONLYSTATIC652onefuture runtimefile/neededtesthelper preparation onFROZEN6d withproposalb993/context713, ownprocesses/realHTTP/originalsweeps/OSexitvsacquiredproof/matrixnegatives. NOdiagnosticexecution/prodseam/fix/guardweakening/oldcurrentreadd/remoterestore/stopauthority/permanentlimit/blockerclaim. Separateinspectablepacket/map thenfutureCLEAR/disposition; fullP2/Q246briefmustcarryunresolved652. Mos4569concreteresultinformed. Existing650revisedexactprotocol/negative/failure/nonproxy packetreadyindependenthandoffpending, no clockproduct/REDgrant. Slotfree/noqueuepending. Full274historicalunexecuted/finalgraphandgatefreshreviews/global/FEDR7/288/landingremainunfulfilled.
2026-10-25T11:48:57+00:00 | Sage 1ef1e4f8 | Revised650 exactprotocol/tests inspected / no RED | Magica0086 packet9507e2ee4 manifest4284d712 all21artifacthash/bytes+5CURRENTclockproducts identicaltestedlow6d verified. Parenttemporaryapply exactUNAPPLIED755290c5ef575a3e68d714bf42fffbb5ffe21e00fd34766cf0cfbebaad4afc71 to6d yields4proposedclockproducts (noModelKeysdelta): first-output6263d358/runnerd4bfea03/model-stall0bdc91dc/launcherd2527440. D17/brief amendmentabd21fcb. Strictbytes>127BEFOREASCII/canonicalpositivefullcontent/64/NONBLOCK-NOFOLLOW-fstat-uid/FDclose/onceembeddeddeadline inspected. ProducerexclusiveOPENowns immediately; independentwrite/link/close/unlinkfixederror/collisionnoownership. Proxy-onlyhostenablefile/runnerprivatecachedexistsafterJSON/no publicschema; managedwatchtrue/internallegacyfalse. Controlledspawnerrorcatch withinPromise, TERM+tracked5sKILL, waitclose/reap+cleartimers, fixedprivateresult, all3callersafterusageendterminate, exit2/server-socket+role.release/hostend path inspected.
Readall5newtestfiles/fakechildprobe+actualunconfinedpubfailurepreload: narrowownedfspath/fd/groupinterception/restorenamedbuiltins, actualBroker/libraryguard/currentchildprocess, notconfinedfault orTERMresistantproof. Readerinvalidcount/single-stop/FDcleanup/FIFOownedchildbounded; oldexpectedfailuresassertionsnotnewtimerpolicy. Wrongowner/unreadable-valid0600 UNVERIFIEDexplicit. Actualbwrapstdout/nonproxy/timestampbounds UNEXECUTED. RemainingNEWunexecutedsource-grepmanagedcaller test mirrorsimplementation; Sage4570requestedmovetoexplicitcoordinatorinspectionnotes (callerinspected), preserveALL5actualclockbehaviorcases; likelyrefresh36total31RED5GREEN instead37/32/5. No oldtests/assertionschanged/no clockrun; exactprotocol755unchangedbytest-scopecorrection. SentMos4571 exactproduct+doccontractforfinalruling, currenthash755NOTapplied/REDauthorized. Task650c1205readbackOPEN.652staticonefileprepindependent/currentlow6d276verified. Noactivegate/queue/full/global/FEDR7/288/landinggrant.
2026-10-25T11:53:25+00:00 | Sage 1ef1e4f8 | Clockr3 testscope verified /Mos1711 exactcontractacceptedconditional | Magica0087 1ac21d36c r3manifest54a7ecfb all21artifacthash/bytes+5CURRENTclockproducts==testedlow6dverified. Parentbytecomparison950..1ac ONLYnewunexecutedsource-grep testcase removed, ALL5actualbehaviorcases unchanged/otherpackage-scriptfilesunchanged; map36total31expectedRED5GREEN NOTobserved. Independentlowmapping852a8da71 artifactl1-l3b-tested-commit-map.json9a5bf68f checkedall36Gitblobids/hashbytesat6d(41scopedsourcepreviouslyindependentlyverified); maprecordedbefore652authorship.
Mos1711 conditionallyACCEPTSEXACTUNAPPLIED755290c5fourclockproductdelta+abd21fcbtwo plan-docamendments, readsallsource/tests/diffs/appliedonlytempscratch. Boundaryoptin/strictmetadata/ownedcleanup/nonproxy/limitsunchanged. NOclockproductapply/focusedgrant. SequentialONEWHOLEperREDclear allowedONLYafterSageinspectsrevisednotes/test/helper/maps/pins+currentclockproducts/lowmapping. One remainingnotes-onlycorrection: JSdollaranchor withoutmultilinematchesinputend (not optionalfinalnewline); keepfullmatch-lengthguard/trailingnegativeunchanged. Relayed4573 staticnotesrepinbeforefirstRED. ParentcheckedTC39primaryCompileAssertionURLread(noNodeexecution), linkretained. ActualconfinedcasesMUSTnonskip/unavailableSTOPprogression; no aggregate/unconfinedsubstitute, no in-flightedits/retries. Wrongowner/unreadable0600/TERMresistance/unconfinedfaultlimits retained.
Noactivegate/queue;clock755UNAPPLIED;lowtested6d276current. Awaitnotes-correctedclockmanifest thensequentialRED firstfileCLEAR;652staticdiagnosticpacketindependent/noexecutionfix. Finalfull/Q246/global/FEDR7/288/landingunfulfilled.
2026-10-25T11:59:06.171733+00:00 — Sage — row331 clock650: inspected r4 eac71305 pins, corrected notes and unchanged low6d products; issued ONE-file intended RED sage-4574 (5 expected:3pass/2fail); no clock product application. 652 static packet received, no execution.
2026-10-25T12:02:48.839223+00:00 — Sage — row331 clock650 firstthree separate intended REDs verified: clock5/3/2, reader19/1/18, producer7/0/7. Producer failure stops before ownership/fault checks; no proof claim. Nineproducts/frozeninputs match low6d. Issued4580 ONLY actual confined file2cases expected1controlpass/1missingmarkerRED; skip/unavailable stops. Task650c1207 read back. 652static packet sentMos4576 awaiting exact diagnostic ruling, no execution. No clock application/full/global/landing. Next4581.
2026-10-25T12:08:14.044541+00:00 | Sage4584-4585 | ALL5clockREDindependentlyverified36/5pass31intendedfail, allnamedassertions/frozeninputs/nineproducts==low6d,0skip/cancel/timeout/cleanup. Parent aggregate clock650-all-five-red-audit.json, individualauditchecks persisted. Finalraw9837707f/2961/result441954f5. No clockproductapply, actualclockfocused/contentpacketpending.652exactdiagnosticMos1712conditionalactualdriverinspectionpending/noexecution. Next4586.
2026-10-25T12:21:07.402725+00:00 | Sage4592-4594 | #652ONE4590 diagnostic13/9safetyCONTROLpass/4final-livenessFAIL. All4ensure/rotate×stale/[] reached finalretirementassert aftervalidsetup/postphaseoriginalsweeps/realHTTPkeyloss/freshrepair/independentOSreaps. Parent10resultartifacts+rawc147036b39395/0c88bc5a/ninebeforeafter==6d/source42currentverified;0skip/cancel/timeout/cleanup,19/19,ownroots0. SentMos4592 explicitdispositionrequired, recommendboundedSTATICrepairproposal notpermanentlimit; NO652fixselected/sourceedit. Clock755UNAPPLIED/all5REDverified/focusedstaticpacketpending. Actualunused4588/hold4589/sole4590machinecontextpreserved; humancontextsentence typoexplicitinsummary. Next4595.
2026-10-25T12:25:05.918909+00:00 | Sage4595-4596 | Clock650focusedpacket8046314af/4058a60a independentlyverified26artifacts+5REDpins/currentbytes.15wholelist0bd38b5d, reasons/driverread; OWNtempscratch exact755+abd applies current6dbase andmatchesall6virtualSHA/bytes/Gitblobs, realproduct/docsUNAPPLIED. SentMos4595 exactapplication/focusedruling request:ONLY4products+2docs; actualpre-runfreeze+SageCLEARbefore15run, commitonlyGREEN. Broadercollateral FINALgraph;noneof15usesnew652helper; markerproductioncallerSOURCEonly; wrongowner/unreadable/currentLinuxbounds/unconfinednotTERMresistance limitsretained. #652measured13/9controls/4finallivenessfails awaitsMos4592EXPLICITdisposition beforeANYfix/permanentlimit. Allcurrentsource6d/ModelKeys815unchanged; no activegate/queue. Magica4596auditACKdelivered, no additionalrun/editCLEAR. Next4597.
2026-10-25T12:26:15.846556+00:00 | Mos1713 disposition #652 CONFIRMEDAVAILABILITYDEFECT measured6d, remediationREQUIREDbeforefinalP2acceptance; no permanenthold/restartresolution/notauthoritygain. Parent4597relayedSTATICruntime/privateinventoryproposal ONLY: perexactidentity positivekeyassoc+strictbothprocessvalidation beforemonotonicprovenance; afterloss allowonlystrictabsence/reaped/samestartzombie, LIVE/unknown/mismatch/readerrorhold. Preserveinitialguards/boot/stopauthority/L3btable/allpubliccontracts, noabsentkeyreadd/restore/knownerasure. ReturnEXACTunapplieddiff/statetable/existing13mapping/newnegativecontrols/boundedfocusedplan beforeANYnewexecution/sourceedit. Clock8044058separateunderMosinspection. Next4598. Singlequeue-next2503pendingnoduplicate.
2026-10-25T12:29:22.883268+00:00 | Mos1714 /Sage4600 | AuthorizeONLYclock755fourproducts+abd2docs, sixpaths; virtualc0732a15independentlymatchedbyMos+Sage. Relayed4600APPLICATIONONLY toMagica, accepted15wholelist0bd38b5d but NOtestuntilparentactualpre-run sixblob/sharedinput/driver/config/list/9baselineinspection and separateCLEAR. CommitonlyfocusedGREEN/mapbeforelateredits; exclude652drafts from650commit/frozeninputs. ModelKeys815/runtime652unchanged;652STATIC1713only/confirmeddefectmustfixbeforeacceptance. No full/newreviews/queue/global/FEDR7/288/landing. Next4601; singlequeue-next72430pendingnoduplicate.
2026-10-25T12:40:15.546966+00:00 | Sage4603-4604 | FINALclockactualpacket3f52ce9b1/c747a85a ALL10artifacts verified,current6candidateSHA/bytes/Gitblobs approvedvirtual. Finalfrozen7281d6416+1184sharedinputhash/Gitblobs allrechecked,15tests included/652helperexcluded,9baselinemappings/currentonly6pathsdelta. Prior9053objectnotavailable so no independentonly10diffclaim, allFINALpinsverified. Driver46c/configd31areadunchanged. Narrowboundedreal--test/devgate scan EMPTY. ActualrunCLEAR4603issued ONLY15/list0bd38b5d (189reference expectedallGREEN), firstunexpectedskip/cancel/timeout/unavailableSTOP, no edits/retries. Realbwraptimestamp/mode/once/temp/noproxy/outputandownership/FD/exit2/release/signalassertionsmustreach; limitsretained. Sourceuncommitted755+abd;ModelKeys815/runtime652unchanged;652STATIC1713only. CommitonlyapplicableGREEN/mapfrozenbeforelateredit. Mos4604stateackdelivered. Next4605.
2026-10-25T12:47:13.660608+00:00 | Sage4605-4609 | FOCUSED4603STOPafter2files:clock5/5GREEN,reader19/18pass1unexpectedFIFO nice16!=19. 24total23pass1fail0skip/cancel/timeout;driver/testchild19. Rawfirstf51bc7071120,reader8a5d1b9e4393 audited. FIFO childrc0/nonblocktimeoutfalse/stop1BEFOREnicepassed;FD/receiptAFTERniceNOTreached. Source6+frozen1184unchanged/currentverified, ownclock/readerroots0. Remaining13filesNOTRUN/no189GREEN/noproductcommit/retry. ToldMagica4605preserveexactevidence, Mos4606boundary. ParentUNAPPLIEDstaticfixtureproposal4607 SHA58d08778 changesONLYprobe importsetPriority andsetPriority(0,19)beforewatcher; finalgetPrioritymeasurement/strict19assert unchanged. Oldhelperd711c0b8->a937f504917bytesOWNtempscratchchecked. Cause16UNPROVEN/nohostreniceclaim;laterdriftstillfails. AwaitMosexactfixture/rerunrulingandMagicaresultmanifest. Magica4608coordinationdeliveredNOactualedit. #652STATIC1713outsidefrozen scope/confirmeddefectunresolved. Next4610.
2026-10-25T12:51:40.585221+00:00 | Mos1715 /Sage4610-4611 | Exactfixture58d08778 acceptedCONDITIONALold4603fullaudit. Parentnowverified66c734f2 ALL10artifacts+2rawf51bc707/8a5d1b9e, all1184+sixpostSHA/bytes/Gitblobs/nineproductmappings==pre;24/23pass1nestednice16failure,0skip/cancel/timeout,ownroots0/hooks0100. Savedparentmanifest/full-audit. Relayed4610APPLICATIONONLY afterworkerreceiptpreserve: helperd711->a937f504917bytes onlysetPriority(0,19)beforewatcher,FINALmeasurement/strict19assertuntouched. No actualexecution yet; NEWV2actualfreeze/currentbaseHEAD/15list/driverconfig/newhelperpinrequiredthenparentreinspect+separateCLEAR SAME15FROMSTART, no readercomposite/oldRED rerun. Keepoldrecordsimmutable,source6clockbytes+ModelKeys815/runtimec5unchanged,sevenpathsremainuncommitteduntilfull15GREEN/map. #652STATIC1713outsidefrozenonly. Cause16UNPROVEN/laterdriftstillfails/nohostpolicyinvestigation. Mos4611conditionauditACKdelivered. Next4612. Queue-next27074singlependingnoduplicate.
2026-10-25T12:57:37.417489+00:00 | Sage4612-4614 | V2actual6a9c79de3/c15260d0 ALL10artifacts+frozende50de49(1184+six)CURRENT SHA/bytes/Gitblobs verified. Old/newinventoryDIRECTcomparison ONLYhelperd711->a937semanticrow+oldgate->v2metadata row;allsixvirtual/controlrowsunchanged. Driveronlycomment/evidencenames/configlimitsunchanged;old66/10artifacts2rawpreserved,exact7uncommittedsource/doc/helperpaths,ninebaselinemappingsverified. Boundednarrowgate/testscanEMPTY,issuedACTUAL4612 SAME15wholeFROMSTART only(189reference),no composite/readeronly/oldRED/full. Commit/mapONLYfull15GREEN;652STATICoutsidefrozen/no product652change. Mos4613stateACKdelivered. Next4615.
2026-10-25T13:05:38.430394+00:00 | Sage4615-4618 | V2focused4612STOPafter3files31/30pass1exclusivecollisionFAIL,0skip/cancel/timeout/cleanup. Clock5/5;reader19/19nowreachedFIFOrealnice19/FD0/receipt;producer7/6pass1 atpreexistingcollisionexistsfalse. Fixeddiag+unlinkCalls0beforeexistpassed;closeCalls0afternotreached/NOdeletionattribution. Parent141e94b8 ALL10artifacts+3raw/post1184+sixcurrentSHA/bytes/Gitblobsverified,roots0,remaining12filesUNRUN,noproductcommit/retry. Rawproducer9d5b6662/2477. ParentEXACTUNAPPLIEDtest-onlyproposal a5484cf9 toMos4616: first-turn.test.mjs d184->d2aacf294639bytes, savedoriginalopenwx/create+writeNUMERICfd+closefinally collision preseed; addcollisionCreatedflag/assert,ALLexisting7/assertions/countersunchanged,NOproduction/timingdelta. OWNtempscratchapplychecked. StaticNode26.8.1matchinginstalledHEADER fs.js2795-2846/getOptionsutils311-330 supportsreentrantpathnamewrite missingencoding; NOactualruntimecalltrace/Nodeversionexecution claim. URLs inproposalJSON. ToldMagica4617holdnoapply/rerunawaitMosruling,preserveV2receipttip. #652STATIC1713outsidefrozen/unresolvedconfirmeddefect. Next4619. queue-next27074resolvedrow7ledger;current331scopecontinues/no pendingqueue/gate.
2026-10-25T13:08:57.501876+00:00 | Mos1716 /Sage4619 | ExactUNAPPLIEDcollisionfixturea5484cf9ACCEPTED afterV2postpreserve/audit alreadycomplete141e94b8. Relayed4619APPLICATIONONLYtestfirst-turn d184->d2aacf294639bytes, savedoriginalexclusiveopen/numericFDwrite/closefinally+setupflag/assert, ALL7cases/existingassertions/counters/fixeddiagretained. Preserveold4612/4603records,staticNodeinferenceNOTexecutedtrace/version/deletionproof. NeedNEWactualV3fullfreeze DIRECTV2 ONLYnewsemanticrowfirstturntest;FIFOhelpera937+sixvirtualsource/docs+ninebaselinesunchanged,15wholeFROMSTART afterparentreinspect/separateCLEAR. No currenttestclear/gate/productcommit;8candidatepathsUNCOMMITTED. #652STATIC1713outsidefrozen/confirmeddefectstillmustfixbeforefinalP2acceptance. Next4620. Singlequeue-next6948pendingnoduplicate.
2026-10-25T13:13:36.331743+00:00 | Sage4620-4622 | V3actual2b4c099b0/f2400b62 ALL11artifacts+7ce729b2ALL1184shared/sixcandidateSHAbytesGitblobsverified. DIRECTV2ONLYfirstturntestd184->d2aacf29semanticrow+V2gate->V3metadata, FIFOa937/sixvirtualproductdocs/ninebaselinesunchanged;driveronlycomment+3evidencenames/configlimitsidentical. Exact8uncommittedpaths/botholdunexpectedrecordsintact/narrowgate-testscanEMPTY. IssuedACTUAL4620 ONE SAME15FROMSTART only189reference,firstunexpectedSTOP/no edits/retries/composite/oldRED/full. AllcollisionCreated/existence/unlink/close/producerFD/actualbwrapLinuxmarker/controlledexitassertionsmustreach;commit/mapONLYcompleteapplicableGREEN beforelateredits/exclude652drafts. ModelKeys815/runtimec5unchanged/652STATIC1713confirmedblocker. Mos4621stateACKdelivered. Next4623. queue-next6948resolvedrow7ledger;active331scope/no pendingqueue.
2026-10-25T13:21:40.454724+00:00 | Sage4623-4625 CLOCK650SCOPEDGREEN | Actual4620 V3whole15FROMSTART189/189/0fail/skip/cancel/timeout. Parentf92b3f16 ALL10artifacts+15rawSHA/bytes/TAPcountsverified15driver/testchild19/finalcomplete. All1190frozenrows(1184shared+6candidate)CURRENT+GitcommittedSHA256/bytes/blob/tree/multiset mapd86735387f to PRODUCTee375c1fba562a0def63743e6515fd0a33f42387 independentlyverified; commitAFTERrun/exact8acceptedpackage-planpaths/no652draft. Receipttip4d4fad7e3sourceidentical. RealbwrapLinuxmarker timestamp/mode/once/temp/noproxyoutput, collisioncreated/existence/unlink0/close0, FIFOreal19/FD0/receipt, actualUNCONFINEDlanding/message/retryexit2/release/ownTERM/nolaterturnallreachedGREEN. Limitswrongowner/unreadable600/confinedfault/forcedTERMresistance/productioncallerE2E/realrotation/nestedpriorityretained. CleanupHONESTnewclockrootsclear/hooksdone, oldprivatecontrolfixture dirs12launcher+2sessionlaunch+15modelproxyretained/inventoried;NOextra cleanup/processlockcensusclaim. Parentclock650-v3-green-independent-check.json. Mos4623resultdelivered;Magica4624prioritizealready-authorized1713STATIC652packet currentbaseee375/4d4. #652CONFIRMEDblocker stillUNRESOLVED/runtimec5andModelKeys815UNCHANGED;original4590diagnostic6dcontextpreserved. NOnew652product/test/Nodecheck/graph/full/freshreview/queue/global/FEDR7/288/landingCLEAR. Task650remainsOPEN despitefocusedGREEN. Noactivegate/queue. Next4626.
2026-10-25T13:42:54.530646+00:00 | Sage4626-4630 #652STATICreview | Initial039/d1bb10artifacts+9ee375products+25testpins/old23tail/a957old13/47behelperverified;tempscratchfb runtimec34497a154200/blob956ffe7e. FoundnewcounterambiguityBEFOREexecution: refresh->readSessions->seat/session401startTimeOf(runnerPID) incrementsanyprocread. Directed4626ONLYNEW2casesRegistry[]afterinitialview+lose BEFOREfault, preserveALL7assertions/old13/helper/fb. StaticfindingNOTobservedtestresult; oldR1UNEXECUTEDpreserved. R2packet50cb32959/44ac69a5ALL14artifacts+9products+25pins/actualfrozenbc3397edALL1190CURRENTsha/bytes/Gitblobsverified. Newtestc1b24468, DIRECTdiffONLYwriteSessions[]setup;driver/configreadwhole/privatecfg/nice/original1s+5s budgets. ExpectedONEnew7/5controlsPASS2exactstrictrecheckRED NOTobserved. SourcefbUNCHANGEDUNAPPLIED/runtimec5+ModelKeys815+clockee375unchanged. SentMos4628 exactcontract+ONEnew7REDrequest beforeANYexecution/application;focusedfuture25=new7+old13+EXACTold23. Needexplicitnullrecordbranch/coldbootlimitruling: priorvalidatedMapcanstrictdeadcheckifrecordnull,controllerSKIPsno-recordunchanged;initialcoldunassociatedholds/noallgenerationclaim. Validatedacqassociated&&atleastoneLIVE AFTERfullsame-instance success;fullydeadusesM1bits. Magica4629holdactualbytes/noextraactions. No activegate/newqueue;next4631.
2026-10-25T13:53:05.506689+00:00 | Mos1717 /Sage4631-4633 | EXACTfb7203contractACCEPTEDconditional NOapplication. ExplicitnullmodelRecord=associationloss forEXACTpriorvalidatedidentity->sameSTRICTbothterminalproofallowed,NONEWprovenance;controller no-recordSKIPunchanged/null-specificcoverageUNVERIFIED. Coldunassociatedbootfailclosed/warmrepairONLY/noallgenerationclaim. ParentFINALcurrent50cb/44ac14artifacts+9unchangedee375products+25pins/bc3397ed1190SHAbytesGitblobsverified;runtimec5/ModelKeys815/fbUNAPPLIED;narrowtestdevgatescanEMPTY. IssuedACTUAL4631ONLYwholeNEWmodel-key-provenance7 pre-fixRED expected5safetyPASS2namedread/ticksREDatstrict-recheckassertion,NOexpectation-evidenceconfusion. Samewhole/privatecfg/19priority/original1s5s/owncleanup,firstunexpectedSTOP/noretryedits/extraold13. Mos4632stateACKdelivered. ReturnverifiedRED+separatelyinspectableactualSTATICfocused25driver/list/config/content+virtualruntimec344candidate BEFOREimplementation/focusedauthority. Clock189/mapd867stable; nofull/graph/mutants/review/queue/global/FEDR7/288/landing. Next4634. Singlequeue-next3939pendingnoduplicate.
2026-10-25T14:17:38.642944+00:00 | Mos1718 /Sage4636-4638 | Prerequisitec1af7/5safetyPASS2exactRED/10artifactsrawf495/1190postpinsverified.033focusedvirtual9artifacts+9products+25pins/1210rowsverified/currentc5separatevirtualc344. Relayed4636APPLICATIONONLYfb runtime1path;actualc34454200/blob956. NEWactualc6c7a5aa0/38720db6 ALL10artifacts+89e32674ALL1212CURRENTpins verified. DIRECTvirtual1210 ONLYruntimec5->c344+2actualmetadata rows,all25tests/helperold13/ninebaselinesunchanged;scratchbytecompare fb=actual. Soleuncommittedproductruntime,configcontrolsidentical/driveronlymetadatanames,033+c1af/4590/clockmappreserved. BoundednarrowtestdevgatescanEMPTY;issuedACTUAL4637ONEwhole25FROMSTARTnew7->old13->exact23/296REFERENCEonly,firstunexpectedSTOP/no edits/retries. Mos4638stateACKdelivered. Commit/mapONLYcompleteGREEN beforelateredits;AFTERGREEN+map ONLYreadonlyfreshgraph/list/fullpacketprep,no full/mutants/review/queue/global/FEDR7/288/landing. NullcoverageUNVERIFIED/coldunassocfailclosed/warmonly/noallgeneration/realrotation. Laststatus22filesfinished/host23running, noaggregateclaimyet. Queue-next3939resolvedrow7ledger/no pendingqueue. Next4639.
- 2026-10-25T14:54:30.601485+00:00 | Sage row331 final builder BEFORE | Verified c210/b445 current16 artifacts,456 committed candidate paths,51 behavior pins,671 selected/graph files and1212 focused pins; lane clear. Mos1719 authorized one builder, actual sage-4643 running on8e54. Standing FED R7 skip remains unverified; no broader acceptance/landing.
- 2026-10-25T15:06:56.091482+00:00 | Sage row331 final builder AFTER/STOP | Probe+163 whole files:1639 tests,1637 pass,1 fail,1 authorized FED R7 skip; no aggregate acceptance.164 raw logs independently verified, remaining121 files/config/mutants/controls unrun. Source8e54 unchanged,ModelKeys815/runtimec344 restored. Separate one-step driver16/child19 recorded without cause attribution. Exact fixture forwarding proposal3aa973dc remains unapplied pending ruling; no assertion/deadline change.
- 2026-10-25T15:23:00.032777+00:00 | Sage row331 fixture AFTER | Exact dispatch forwarding correction passed whole session-clear5/5 with measured19/19, no skip/cancel/timeout. Result42932d7a/raw0b7d1497 and1216 frozen rows independently verified against2da21e13;map1e11f6d4 committed87ee30b1d before later prep. Original stopped builder637 retained; no composite acceptance. Read-only refreshed full packet and unapplied priority proposal await separate ruling.
- 2026-10-25T15:34:29.723336+00:00 | Sage row331 R2 full BEFORE | Verified actual6dc9cf3a/b1013592 all1622 inputs,13 artifacts,nine products,52 behavior and671 graph inputs againstcode2da; exact3e4/5982 priority-guard driver. Cleared one probe/284/config/four-original-mutant-control block from START underMos1721/sage-4657. Old637 stop and priority16 preserved; only namedFEDR7skip permitted unverified. No source/review/landing changes.
- 2026-10-25T15:50:10.065429+00:00 | Sage row331 R2 full AFTER/STOP | Probe+174 files:1756 tests,1754 pass,1 old thread-revoke failure,1 permitted unverifiedFEDR7skip.175 raw logs audited,all19/19,no cancel/timeout/signal.110 files/config/mutants/controls unrun. All1622 frozen inputs and52 behavior/671 graph code pins unchanged;runtimec344/ModelKeys815. Test host mirror lacksrecoverLaunch before runtime; exact fixture proposal being prepared without execution. No composite acceptance.
- 2026-10-25T16:05:33.469862+00:00 | Sage row331 thread fixture AFTER | Exact runtime dispatch forwarder passed thread-revoke3/3,measured19/19,nonskip/no cancel/timeout. Result86975ce3/rawc9a5d06a and1625 frozen/current/committed rows verified;sole fixture commitfffbe05af,map1d867353 committede906cfc8a before later prep. End/claimrelease/no-newlaunch checks reached. Prior stopped full runs retained; no composite acceptance. Read-only full packet refresh pending separate ruling.
- 2026-10-25T16:24:45.965804+00:00 | Sage row331 R3 full BEFORE | Verified f99b10ec/be9bc6e0 all1628 current inputs,13 artifacts,nine products,53 behavior/671 graph againstcodefffbe;exact2965 driver. OldR2driver and all stopped/scoped evidence preserved. Cleared one probe/284/config/four-original-mutant-control block FROMSTART underMos1723/sage-4671. Only namedFEDR7skip allowed unverified;no source/review/landing authority.
- 2026-10-25T16:54:21.093174+00:00 | Sage row331 R3 full AFTER/scoped VERIFIED | Result63d440bf/evidencee5b4a8d1, all14 committed artifacts+294 raw SHA/bytes/TAP/order checked. Whole2842552tests2551pass0fail1 authorizedFEDR7skip(unverified),separateprobe30/config55/4wholecontrols120 pass.4ORIGINALnamed mutants killed1/1/1/3 assertionfailures,all6ERR_ASSERTION,815 restored each/end. ALL294 real19/19,0cancel/timeout/newskip;all1628frozen/53behavior/671graph/nineproducts unchanged.13 private-control scratch retention inventories preserved,no census. FullP2/reviews/global/FEDscript/row288/landing remain open; next review brief is DRAFT only pending ruling.
- 2026-10-25T17:21:57.367080+00:00 | Sage row331 formal review BEFORE | Correctedbrief17972714 preservesoriginal0418. Existing53-sourcebb/codefff/evidencee5b/result63d frozen. Formalround3request31706 posted ownJarvis and independently read back with correctissue1829/author/markers/entiremanifest. IndependentBoydCodex+ONEfreshClaudeQ246(high) started afterprovenance verification; no tests/sourceedits/queueverdict/landing authority.
- 2026-10-25T17:52:23.336296+00:00 | Sage row331 source review AFTER/CHANGES | Both independent reviews identifymissinglauncherbinding blocker. Boydqualifiedlows/consentpreserved,ownJarvisattributedrelay31707 readbackverified;actualBoydcanonicalCHANGESrecord4135 independentlychecked. Existingbuildergreen remains scoped,fullP2unaccepted. ConditionalMos1725 nowauthorizesSTATIC653-656packetpreparation only,653/654first;no sourceapply/test/full/newreview/landing authority.
- 2026-10-25T18:24:29.738793+00:00 | Sage row331 #653 test-first AFTER / #654 coverage BEFORE | Mos1726 one-file sage-4701 reproduced exactly two managed proxy launch failures after successful preflight; three nonproxy/refusal/no-launch controls passed. Result76feb41a, rawc3bc72a3/4035 and all1633 frozen/current/committed inputs independently checked; no source application, post-target proxy binding/watcher checks unreached. Mos1727 actual packet39be7914/freeze445dc825 independently verified with lane returned/clear; issued sage-4703 for one current pending-organization coverage file expecting four passes, outcome pending. Productfff/old53bb and prior reviews/evidence retained; no acceptance/landing claim.
- 2026-10-25T18:31:16.393237+00:00 | Sage row331 #654 coverage AFTER | One whole current-source file passed4/4, zero skip/cancel/timeout; resultb60936e7/rawb5e83990/1293 and all1633 frozen/current/committed rows independently verified. Mapcc651951 to64e0a982 publishedb442 after GREEN and before later edits; sourcefff/nine products/53 manifest unchanged. Covers exercised pending organization-busy branch only, not generation ownership. Separate #653 import-only/focused15 virtual packet20af76b3 inspected and sent for scoped ruling, no product application/run or final acceptance.
- 2026-10-25T18:34:30.320932+00:00 | Sage row331 #653 repair BEFORE | Mos1728 authorizes exact launcher named fs import binding only and matching focused15 driver preparation. Parent rechecked unchanged old53/nine products atb442 and sent4708 exact application/preparation instruction. New applied freeze and independent current-input/lane inspection are required before a distinct test CLEAR; no test run or fixed-behavior claim yet. #655/#656 remain unresolved, historical review/RED/GREEN/maps preserved.
- 2026-10-25T18:39:00.750135+00:00 | Sage row331 #653 focused BEFORE | Applied launcher equals exact approved import-only373d; current driver equalscfd. Before any execution parent caught an omitted consumed-list path in input inventory; metadata-only superseding packet8e6dd390/freeze97e24ceb preserves prior1636 and adds that existing list row. All1637 current inputs/10 artifacts/15 tests/nine products and historical654 map independently verified, no competing Node test/gate; issued actual focused15 CLEAR sage-4712 underMos1728. Outcome pending, no fixed/acceptance claim or additional source authority.
- 2026-10-25T18:57:50.207677+00:00 | Sage row331 #653 focused AFTER / #655-656 static contracts | Verified complete15-file173/173 nonskip, all15 raw logs and1637 tested/current/committed rows mapped93ae todf75 afterGREEN, map firstpublished9ced before38b static preparation. Actual managed-launch5 reaches pre-spawn enable/trustedbinding/idle and first-turn clock/real stall stop/output controls. Product change only missing import. #655 original serialization-only proposal030 rejected byMos1729 for duplicate credential effects; exact shared-validation revision and isolated tests authorized STATIC only. #656 partial-state/durable-intent disposition remains open; no recovery implementation/test or full-P2 acceptance/landing granted.
- 2026-10-25T19:01:13.027004+00:00 | Sage row331 #656 design BEFORE | Mos1730 selects static narrow matching-temp/durable-revocation-intent proposal and isolated test preparation; broader only-temp/differing-generation states get separate nonlaunchable-intent design only. Relayed4720 strict all-key remote/run/file proof, intent-before-temp-removal/retry and truthful atomicity requirements; no product application or execution. #655 shared-validation revision remains independent static work. Testeddf75 source preserved, full acceptance/closure pending.
- 2026-10-25T19:04:29.712397+00:00 | Sage row331 #656 static boundary | Verified4547-byte atomicity note1f2b7864/sourcepins. Existing descriptor/stat checks plus pathname unlink provide no inode-conditional final syscall against arbitrary external sameUID replacement. Returned concrete concurrency-contract choice toMos4722 before recovery code/test authorship; no workaround/experiment applied. #655 static revision and broader656 design remain independent, testeddf75 source unchanged.
- 2026-10-25T19:08:56.725413+00:00 | Sage row331 #656 qualified static design RESUME | Mos1731 accepts cooperating-writer/private-store concurrency for proposal/test authorship, explicitly excludes arbitrary external sameUID replacement after final verification from guarantee. Relayed4724 strict synchronous revalidation/tmp-first intent ordering and complete cooperating-callsite trace requirement; any current ordering bypass returns before proposal acceptance. No atomic compare-unlink claim, product application or runtime test grant. #655 and broader656 design remain separate, source testeddf75 unchanged.
- 2026-10-25T19:25:50.472210+00:00 | Sage row331 #655 revised static review RETURN | Verified c7/ce7 nine artifacts, current product/source/test pins,1637 prior mapped inputs, and scratch-only three-file ef299 proposal. Before execution identified expected-map first-failure mismatch in cases14-16, cleanup launch-log scan omission, and need to carry original captured revision into locked publication rather than fresh revision substitution. Returned4726/4727 for static corrections/contract ruling; no source applied, Node/test/proxy run or acceptance granted. #656 static work remains separate.
2026-10-25T20:03:48.870029+00:00 — Sage row331/#655 correction: previous static A/C objection missed OptionC injected-writer R0 override; withdrew after full source trace/Mos1733. No publication API expansion. Preserved4733 unexpected whole-file fixture errors and all evidence; exact NEWhelper variable correction106 only, audited superseding01ac/1647 inputs and cleared ONE whole rerun sage-4742 underMos1736. No product application. #656 narrow static model-final-order work separate; #657 broader recovery-intent DESIGNONLY ownerSage perMos1737, no executable/path creation authority. FormalR3CHANGES/tasks647-657 remain open.
2026-10-25T20:27:02.650878+00:00 — Sage row331 #655 bounded verification: independently audited intended pre-fix e219 (exact9targetsRED+9controlsPASS), exactef299 applied underMos1738, focused sage-4750 COMPLETE22files300/300PASS0skip/cancel/timeout, all22real19/19. Exact3products committedafterGREEN27f68; all1652testedrows mapped88a92/firstpublication67394 beforelateredits. Separate unexpected068/priorformalnegative retained, not compositefull. #657 DESIGNONLY proposals3ce07/108780 with manifests c13/a6b returnedMos; prospective before-PUT ownership design, no privatepaths/code/tests/experiments. #656narrowstatic remains independent/open, no full/newreviews/queue/global/FED288/landing/closure.
2026-10-25T22:02:57.713692+00:00 — Sage row331 STATIC656/657/658 and first656 measurement: audited complete narrow14678/fd503 virtuals/all1657 inputs, acceptedtestfirstMos1749; exactactual1665/driverae284 inspected and sole4778runtimewhole cleared. Verifiedca07/raw5bca37584:39=32exacttargetRED+7controlsPASS,0skip/cancel/timeout/signal,real19/19,allpostpinsunchanged/source27f68/oldfixtureUNAPPLIED. Nextcompletionfile REQUESTEDonly4781; no automaticrun/application. #657A/source+newtests ONLY ownedunapplieddiffs/unparsed/unexecuted, selectedSELF/eventgrace and helper-onlyproposal static; #658generationconfig-last design returned, Mos1750selectsexplicitprovision-new coexistence STATICnextscope, oldbootstrap/T-I1unchanged. All acceptance/closure gates remain open.
2026-10-25T22:34:26.180461+00:00 — Sage row331 #656 three separate intended-RED phases verified: ca07 runtime39=32R7G,44c2 completion21=19R2G,cb13 remove21=16R5G; all exact first targets/raw/postpins/currentGit, strictreal19,0skip/cancel/timeout/signal. Scopedcontrols only/posttargets unreached, no compositeGREEN. Independently audited STATICfocused33 packet4799129b/1688 current vs3virtual changes; Mos1757 permits ONLY exactfd503+7a1dapplication/204cdrivercreation and NEWactualfreeze preparation, relay4798; actualrunCLEAR pendingindependentinspection. #657 selectedprivateclockproposal f579 under1756 +fixturecompatibilitystatic scope; allowned657diffs unparsed/unapplied/unexecuted, needintegrationrefresh after656. #658 explicitprovision-new coexistence staticwork remainsopen, oldbootstrap/T-I1unchanged. No full/review/queue/global/FED288/landing/closure.
2026-10-25T23:33:24.741369+00:00 — Sage row331 #656 AFTER / #657/#658 static continuation: independently audited actual1694/driver204c packet then sole sage4799 focused33 FROMSTART. All511PASS/33raw203652B/zero skipcancel timeout signal/33real19pairs; new81formerposttargets reached in frozen source. Exact3paths committed AFTERGREEN38ba5762, all1694+16pins mapped69ce57a5 firstpublication30dcef before later receipt4a02. Mos1759 independently accepted APPLICABLEfocused only;656OPEN. Audited read-only interim ed8b/581378:65behavior/788changedblobs/677graphpins, recorded18roots0parsefailures/294selection recomputed from recordededges; allold284+6new+4businesscollateral, grant-scope/lifecycle-settings UNRUN current. NO fullgate/run/re-pin. #657A refreshed to38ba/031383e6 ownedUNAPPLIEDdiff only, incompleteB/legacyhold/case15 retained. Static positive revocation seed/caller packet4999 returned4807 with actualtrustedgeneration/ownedruntimeoriginalsweep queue/failedGETintent design, not executed; Mos1776 selected only extraFIFOawait1e998e74, inventory superseded preservingoriginal4999. Positivehelper/A-B/case7 exactguards stillunaccepted; #658 explicitprovision-new sourceproposal not yet authored. All647–658OPEN/no newfull/config/mutants/review/queue/global/FED288/landing/closure.
2026-10-25T23:41:11.932432+00:00 — Sage row331 #657 STATIC next packet: sent4808 runtime-clockcontrols manifest38c1a325/4808, NEWisolated helper/testdiff6a09c2b2/14524 and9UNOBSERVEDcases; native/default,6invalidvalues-beforeStore, actualruntimeisolation andsamewarm ORIGINALdue/strictidentity/terminal path. OnlyownedDIFFS/data, no actualsource/testinstallation, parser/Node/FS/proxy/test. All1694 mapped current SHAbytesblobs rechecked unchanged against38ba/map69ce. Seedpacket superseding87633310 marksMos1776 FIFOcallerSELECTED, original4999 preserved. Positivehelper/A-B/case7exactguards remainunaccepted; fullBGC/allcooperatingcallers/warmoldfixture and658sourceproposal remain work, no gate/full/review/queue/global/landing/closure. Nextstableoperation4809.
2026-10-25T23:44:53.880497+00:00 — Sage4809 #657 unaccepted-draft correction: source-read found A031383 second descriptor fstat omittedbigint:true while all other identity fields usedBigInt, so stable validfile wouldrefuse strict equality. No runtime reproduction. PreservedALLoldartifacts and4808manifest references; separate r4 combinedf1b5a13a/35866 newmoduled2d783f4/18928 manifestb2baf075/1573 changesONLYsecondfstatoption. ReturnedMos4809; current38ba/1694inputs untouched/noactualsource/helper/testinstallation/parser/Node/FS/proxy experiment. BGC/warmfixtures/658 remainstaticunfinished; no gate/acceptance/closure. Nextoperation4810.
2026-10-26T04:17:47.724968+00:00 — Sage STATIC continuation AFTER owner heartbeat1822: scope recovered without queue/Node invocation because explicit current no-queue/no-runtime ruling supersedes routine cadence. Preserved38ba code and all1694 mapped rows+16 packet pins, rehashed current SHAbytes/Gitblobs. Sent4810–4819 owned-only contract/clock/canonical/publisher/reader/GC/outcome boundaries; Mos1824/1826/1830/1833/1837/1841/1842/1843/1844 selected bounded STATIC directions only. Reader-r3 0edf corrects unresolved helper references, childc365 beforeStore/reconcile fences, host3ba beforeleftover/Registry/root writes, common240d internalreadonlyguard,7 new controls ad69 unobserved; exactRAM dependency reconstruction, packet396f. GCf196 finalnativeintentcheck only, actualreentrantproof invalidation stillunfinished. Actual captured-R0 failed-unpublished-hire enum selected1842, extra publication-outcome boundary17c sources rename/fsync/log/lockrelease/settingsread;1844 writer-ownedtoken nativephases now proposed d767+12 unobserved tests6df2 and separately inspectable prosehold c0d7; actualB consumer/restartpositiveproof stillunimplemented/unselected. Single trackerposts6571293/1294/1296 and6581292/1295 all definitive exactbody/author13/readbackOPEN; an initial read-only comments response-shape mismatch preceded any write and was corrected via items pagination, no duplicatepost. No source/helper/test install, parser/Node/process/test/FS/proxy experiment, full/config/mutants/newreview/queue/global/FED288/landing/repin/taskclosure. Oldmaps/partials immutable; nextoperation4821 after substantive4820 handoff.
2026-10-26T04:47:04.289784+00:00 — Sage4821–4822 STATIC continuation: Mos1845 inspected utilities only; authoritative phase successor77c866 rejects created AFTERpublish unless actualprivateflow proves invocation never occurred.14 new unobserved writer requirements77a2 preserveold12 and demonstrate ignored/misrouted option ambiguity. Scopedpositivepublication question6dd/5bd selected1846 ONLYforfutureownedUNAPPLIED13-field witness, noactualconstructor/reader/GC installation. Tracked6571297/1298 exactbody/author13/OPEN readbacks. Additional required origin/decision coupling returned4325025a/7920 manifeste97a8c60/3251 BEFOREbytes: immutable PER-OWNER bounded64 registration because actualmodel-keys.test47/49/121/161/167 repeatsModelKeys SAMECredentials; no blanketone-managerrestriction/oldtestedit. Proposedopaque actualrequest→nativegenerationticket BEFOREPUT +monotonicpublicationhold onretainedhostcontext, notJSON/ephemeralhelperproof. Independent658 visiblepartialpointer guardf788/3947 centralizedselectedreadonlyrootclassification BEFORENEWexistingpointervalidate shortcut;2newcontrols8afa/1706 UNOBSERVED, controlledpendingnotactualcrashproof, packet41fe. Freshall1694+16SHAbytesGitblobTREE checkedcode38ba,source/indexcandidateunchanged. No source/helper installation/parser/Node/FS/process/proxy/test/gate/full/review/queue/global/FED288/landing/closure. Nextoperation4823 after4822substantivehandoff; actualBcallbacks/factory/joint656epochs/intentlastGC/warm/658fullinterruption/hosttransport remainauthoringwork.
2026-10-26T07:26:33.036846+00:00 — Sage4823–4824 STATIC continuation BEFORE/AFTER: candidate38ba and1694+16 pins remain exactGit/current, source tracked diff empty; no candidate edits/runs.1847 selected per-owner C-native brand/request-to-ticket-beforePUT/monotonic retained-host latch now has actual owned source bodies, actual adapter/ModelKeys intended-writer phase consumer and13-field positive publication writer/reader. Nine exact joint-r2 diffs text-reconstructed but explicitly INCOMPLETE/not installation-ready: actual B factory/native confirmation/typed656 proof-name-epoch join/full GC remain unwired; old511/REDs unaffected. Independent1848 native identity supplement fb22/e28be adds original pointer/root/pending dev/ino/nlink guards, and six new nativeEIO controls b359/8157 remain unobserved, not crash/concurrency/transport proof; later faults/types/oldcopy matrix open.1849 cold recovered-final-absence model-only proof scope recorded6571302, not native656 finished/absence authority and not implemented yet. Warm intent-only progress f425 plus context one-use/reconcile-null and closed-C guards897f/cf24 authored as corrected unaccepted overrides; no observed fix. Exact next interruption window after metadata cleanup before orgDELETE requires new external negative-handoff DESIGN decision b41e3113 before any path/schema/code. Tracker6571299/1302,6581300/1303 definitive entirebody author13 OPEN. No source/helper/test installation, moduleparse/Node/FS/process/proxy/test experiment, new gate/full/config/mutants/review/queue/global/FED288/landing/repin/closure. All647–658 remain OPEN; scoped source/evidence historical maps preserved.
2026-10-26T09:36:48.905968+00:00 — Sage4825–4826 STATIC continuation BEFORE/AFTER: code38ba and1694+16 exactcurrent/Git rehashed09:31, old511 scoped/history unchanged.1854 negative-only design d073/14916 fields+state/callers returnedb583, no marker implementation. Found current4actual656retry/reboot positives vsoriginal-request-only/freshHOLD conflict and returned3e500 before weakening/assertion changes;1855 selected one DESIGN comparison. NewR2comparison3c837/18999 proposes SMALL metadata-only registration+terminal chain, actual publisher/writer sealing and source-present native authorization; supersededunpublished1a2c had over-assumed originalphysicalsource mustsurviveuntilpub, correctedpreservingprovenance. No largearchive recommended/newpath/schema/outcometag/clear branch chosen. Independent actual native controller confirmation now source-authored from actual remove/confirmGET/401/fullview and moduleprivate registry; bothModelKeys.prepare callers pass token; Credentials CONSUMES snapshot/record/epoch beforeTMP andfirstfinal, readonlyactualfinished check neverabsenceauthority, runtime stop-map invalidation, existinglifecycleCrev guard mapping. Exact3diffsa84a/da9d/0d46 textreconstructed; higherBfactory/classifier/typednames/GC stillUNWIRED; nativeFIFO/bookkeeping mustnotbeclaimedreachedafterearlierprovenancehold.1854/55 tracked6571307/1308 definitiveactualauthor13/readbackOPEN. No source/helper/test installation, parser/Node/FS/process/proxy/test/gate/full/review/queue/global/FED288/landing/repin/closure. Nextstableoperation4827; currentformats/sealing/succession stillawaitseparateselectionbeforebytes; independentB/658remainopen.
2026-10-26T10:09:33.266521+00:00 — Sage4827 STATIC Mos1856 before/after: preserved current38ba/1694+16/511 and ALL original artifacts. One exact nested schema table now proposes final/tmp/intent native fingerprints and complete independently validated origin/publication digests, explicit decimal native stat encoding and organization/controller observation domains. No durable constructor/reader/path authored pending selection. Bound arithmetic largest variants2383/1118 bytes below8192, not protocol object creation. Writer seal and actual one-use raw publisher source proposals68da375f/4d480f5a direct38ba text-reconstructed ONLY, virtual7f96/9acc; sealed token refuses beforelock, same actual wrapper pending request/close ordering, created-after-invoke UNKNOWN, thenable hold, capturedR0/case15/hook semantics retained. These are publication-only utilities: native all-operation ledger/terminal producer/factory/typed656/GC/result-lease consumer NOT complete. Concrete actual valid-to-revoking C.issue unlink(model.tmp) occurs before future original revoking snapshot/intent ID; no future identity/exemption invented. Contract returns chain/postcleanup distinct result-lease/retirement directions,20 UNOBSERVED reached-boundary requirements. Packet5fa13344/9572 sentMos4827; OPEN657 comment1309 single201 exactbody/author13/readback. Source candidate remains unchanged; no installation/parse/Node/FS/process/proxy/test/gate/full/review/queue/global/FED288/landing/closure. Next4828; existing B/658 independent work remains authorized.
2026-10-26T10:32:05.431575+00:00 — Sage4828 Mos1857 STATIC before/after: current38ba/511 and1694+16 rehashed10:30 exactSHAbytesGitblobTREE; no product/helper/test delta. Corrected literal schema4f50793d removes nonexistent valid field and records1857 selection, leaves exact original formats/history preserved. Newowned UNAPPLIED DATA-only source readera3299bba/16029 virtuale2d3/15682 plus10DATAunit dcb466cb/6083 only inside diffs. Canonical exact type/domains/count-before-allocation/bounded nofollow readonly whole-chain/native reread code, no mkdir/write/unlink or ready/terminal constructors; actual factory/workledger/constructor/retirement still UNWRITTEN. Undelivered067/99ff/22dsource drafts preserved; strict hash/UUID string guard correction source-only no measuredfault.20oldcontrols unchanged plus14native/8reader reached requirements UNOBSERVED; absent module import not intendedRED. Separate ordinaryVALID->REVOKING DESIGNcomparison40165044/14819 identifies TMPunlink then finalreplacement before current strict intent; staging-only insufficient. R1 terminal-only proposal3bb corrected BEFOREdelivery because controller-only has no composite root/validterminal. CandidateA asks originalVALID Bintent +small actual transition witness/newnullableCurrentSources member selection, NO newtransition field/path/code authored/selected. Native write/receipt crash and allotherholds honest, no permanentordinaryvalid limitation. Packetb71063fd/11952 sentMos4828; OPEN657comment1310 single201 author13 entirebody/readback. No JSparse/Node/FS/process/proxy/test/runtimeexperiment/application/gate/full/review/queue/global/FED288/landing/closure. Next4829; nativeBfactory/GC/worklifetime/658independent remain.
2026-10-26T10:59:39.269094+00:00 — Sage4829 STATIC1858 literalrefinement BEFORE/AFTER: schema31c29/13030 exact17witness fields, order4f65/30567, consumers3fb9/8102,26unobservednative controls825b/5691; current38ba/1694+16/511 preserved. Proposedintent/attemptv2 requiredsixmember makesoldfive/v1 incompatibilityexplicit, no nullalias/migration; Wv1 progress/historicaloldVALID/nativecurrentREVOKING distinct. Budget131072/128MiB completepathentriesinclalias bytes beforealloc, witness8192, staticarithmetic3601notserializerproof. ReferenceW->I yieldsW-beforeIonlynativefullproof/noconsumer thenIlast/pub-before-origin/joinedrootlast; no missingfinal/cold/native656prooffromfingerprints. No transitioncode authoredunder1858; OPEN6571311 single201/exactbody/author13/readback; sentMos4829packet80b8/10016. Mos1859 nowselectsschemaversion/caps/nativeproducer/order for ownedUNAPPLIED sourceonly. Continuing4830actualsource, no sourceinstall/parse/Node/FS/process/proxy/test/gate/full/review/queue/global/FED288/landing/closure.
2026-10-26T12:21:16.986782+00:00 — Sage4830-4831 STATIC1859 BEFORE/AFTER: exact17W/v2I+attempt/six/sharedcaps/nativeproducer/WbeforeIselected, products38ba/511/1694+16 unchangedSHAbytesGitblobTREE11:25and12:14. Source-only fourutilitypartsfde9/14077: budget9ccb/r4 resourcecounternoauthority, attempt2/W1decoderreaderb044 typedlimitsintent262144/origin131072/pubW8192; ten+eightDATA tests9908/6f4UNOBSERVED. Sharedbudgetpercompleteactualtypedphase note3e25 forbidshelperreset/unknownwork; actualnativeCbinding/allfamilyrouting unimplemented. Continuednative2sourceadd152/10133 C5bae/MKee609: actualprivatequeue scopes/contextbinding3sites denyqueued/oldB borrowingA, sameR0/owner/privatefailed-newhireseal, oneusenativeclockdecisionbodyrevalidatesafterclock. CSourcePrepMaphasNOregistrationproducer/privatecapturehasNOcallsite, no positiveplaceholder/nativeCwriter/W/terminalproof; fullfactory/ledger/GC stillunwritten. CombinedemitterE2BIGprocesscreationfailedbeforeanyfilewrite, splitperfiletextemissioncompleted; sourceiterationspreservedunexecuted. Oneconcretenewcallerboundary10f6/8010: current38ba adapteronlypendingR0; uninstalledoutcomedraftinjectsA intoallinstanceSettingswriters, sealedA couldrefuselegitimateunrelatedhumanwrites; lease-running/firstwriteheuristicunsafeunderreentrancy. Recommendopaque intendedcommitbinding sixTHINTERNALruntime arg/privateopts/nativeWbinding, target/actor/args identity, preserveunrelatedR0+writerhooks;NOadapterdeltauntilscope. Alreadynolistedfiretransactionnull/noWriter remainsseparateunresolvedno-writeauthority. OPEN6571312/1313 single201/exactbody/author13/readback; sentMos4830/4831substantive. No sourcehelperinstall/JSparse/Node/FS/process/proxy/test/full/gate/review/queue/global/FED288/landing/closure. Next4832; actualCfactory/progress/metadata-key401/GC/result/658independentremain.
2026-10-26T13:14:58.870767+00:00 — Sage4832 STATIC1860 before/after (registered after authoring): baseline38ba/511/map69ce unchanged, all1694+16 SHA/bytes/Gitblob/tree remeasured13:10:37Z and source diffempty. Newowned four direct38ba diff proposals77e8 manifest17854,22artifacts+6dependencies/14sourcepins: Wcc9f virtualfd45/29585; MKr28350 virtual1ed2/50383; runtime5752 virtualb500/57247; businessdffc virtual4df2/31648. Sixth INTERNAL opaque binding passes onlymanagedhire/fire/DELETE, actualmethodchecks before native ticket, native consumptiononce/correlationNOTauthority, unrelatedB originalpendingR0/noglobalAoutcome and lockfence. Rejectwrong/replay beforeAoutcome mutation, createdafterinvoke/ignored UNKNOWN, preserve originalerrors during independentclose/release, case15 remainsbeforepublisher. InitialR1 preserved; source-only R2 prevents accessor/proxy SET falling through to unprepared lifecycle path, no product/test/assertion/helper/deadline change.34controls1aff2 UNOBSERVED requirements only. Native Cprep producer/rewrite/W/workledger/factory/metadata401/joint656/progress/GC/result remain incomplete, cannotinstall utilitygraph. ActualdelistedpresentmodelFIREtransactionnull/noWriter separate question13fd/2297 returnedbefore no-write enum/result/clear/restart bytes; no permanentavailabilitywaiver. OPEN6571314 single201/ENTIREbodyexactauthor13/readback. Substantive T3 handoff4832 delivered Mos. No sourceinstall/applicationparse/Node/FS/process/proxy/test/full/gate/review/queue/global/FED288/landing/closure. Next4833 independentnativeB/658 static remains authorized.
2026-10-26T13:23:26.975486+00:00 — Sage4833 STATIC1861 BEFORE: bounded DESIGNONLY for actual already-delisted/model-present FIRE branch; preserve38ba/1694+16/511 and all4832partial source. Trace original read/fireChecks/revoke/read, actual completeRevoke/C onefinalunlink and original runtime nonmodel/residual cleanup. Propose native branch+current local result association, oneuse closed-work consumer, distinguish writer CREATED/UNKNOWN/no terminal/rename fact; return any1854/56/59 clearing extension before bytes. No source/helper install/parse/Node/FS/process/proxy/test/gate/review/queue/landing authority.
2026-10-26T13:38:59.424908+00:00 — Sage4833 STATIC1861 AFTER: finalR2design f49c/18934 +actualidentity/worktable34e5/10353+caller3c98/6268+30unobservedrequirements1227/14749; manifestddd3/14867 pins9owned+8deps/16Gitcurrent38ba sources. Exact actual settings conditional404/revoke405/readreturn406 (R1line403commentnav corrected/preserved). Proposed nativefactory/branch enter-return/resultsidecar onlyactualmethod, actualCtypedlowerfinish/servicebookkeeping/residualprogress+closedbinding/lease/ALLcapablework/latestepoch/every401/freshWHOLEruns/storage/latches before intendedoneuseconsumer. Rawpublisher remainsSYNC; outerexistingasyncdrainoutsidewriterlock; management/local unknownnotterminalizedbyexception. Cresult factory/workledger/nativeW/metadata401/GC stillunwritten; no positiveplaceholder/localcompletionfromcallback/read/transactionnull. Proposed checked-snapshotR0 afteroriginaladaptercheck and finalR0afterread/reload/drain explicitlyNEWnonlockingpredicates, no ABA/globalimmutability; unrelatedB originalR0/noAtoken untouched. NativewriterCREATEDafterinvoke remainsUNKNOWN/no rename/nonattempt/dummywrite; cold1849/native656/result/no-record distinct. ONEscopequestion b09f/4384: separate SAMEHOST exactnoWriteFIRE eligibleexternalretirement replacesonlywriterresultconjunct1854/56/59, allothers/rootLAST retained. No suchrule/enum/clear/restartcode selected, no positiveDELETE/freshmissingfinal/latchreset/permanenthealthyholdwaiver. NativeC/source/W/ledger/B/GC/658independentcontinue. Full1694+16hashbytesblobTREE38ba13:36, prior4832all28artifact+14sourcesunchanged, scoped511/case15/fouroldretryrebootcontrols preserved. OPEN6571315 single201 ENTIREbody/author13/readback and MosT3substantivereturn4833 delivered. No source/helper installation/JSparse/Node/FS/process/proxy/test/full/gate/review/queue/global/FED288/landing/closure. Next4834.
2026-10-26T13:41:46.493164+00:00 — Sage4834 STATIC1862 BEFORE: prepare owned UNAPPLIED actual settings branch/factory/forwarding and adapter/predicate/closedbinding/local-result consumer source bodies; typed C native completion/closed-work/B/GC dependencies remain mandatory, not callback labels. Preserve38ba/1694+16/511/current old source/4832+4833 packets. No installation/parse/Node/process/FS/proxy/test/gate/review/queue/landing.
2026-10-26T14:12:46.483842+00:00 — Sage4834 STATIC1862 AFTER: selectednoWritebranch+samehostconsumer direction source-drafted5direct38ba diffs/virtual pins8485manifest21601,26owned+8deps/16sources. Wb0b6->31b1/31931; MKr2df0b->6d08/58361; runtime4dea->f7f9/57882; business647d->5310/35054; Cr2948b->dc0c/61666. Native actualfactory config/adapter attachbeforeoperations; onlyactualfireconditional nativeentry, originalrevoke/read return +exactnativeprivateforward; fifthINTERNALrevoke scope. Writer unusedbinding/firebranch separatefromcheckedcommit/outcome, originalR0/noAtoken forunrelatedB. Selectednew snapshotR0 afteroriginaladapter guard and finalR0 afterclosedwork/proofawaits areNONLOCKING; finalproxyconflictavoidsfalsekeptreceipt. NativeC capture actualconfirmation/snapshot/context BEFOREactualunlink/confirmed deletion; finished nativeflag ONLYafterownunlink/bookkeeping; private finished/currentcontext verifier; readonly completedroute no secondfinish. C native declaredservice method/residual observations, unknowninflightnotguessedsettled. Outer native source guards close-first/drain/readonlyprepare/ONEconsumption and nativebeforeafterinspector; ignored/substitutedmethodsuccessnotauthority. R1parts preserved. CRITICALhighernativeB/work/chainauthorityWeakMap ZEROregistrations, no publicsetter; native source/workledger/metadata401/WHOLEruns/storage/holds/latestprogress/typedGC/rootLAST factory UNWRITTEN, higherpositiveconstructorunreachable; no utilityinstallation/healthyavailabilityclaim. NativeCstrictlowercannotrebasedthroughtypedGCbyguess; genuineempty/coldassembledcompatibilitystillopen.30oldrequirements+3newguardsd7ccUNOBSERVED. Concrete currentclientpromise lacksnativeownedreq/res terminalticket; question006ac/6236 asksboundednativebeforeeffectworkgate+readonlyinspector internaloptions/no reverseimport/newendpoint/publicfield/stopauthority, UNKNOWNtransportnotremotehalt. No sixthclientdiffauthored. Full1694+16/past4832/4833 artifacts+sourcerehashed14:04 SHAbytesblobTREE38ba, source diffempty/scoped511/map69ce/names/assertions/deadlines/case15preserved. OPEN6571316 single201 ENTIREbody/author13/readback; substantiveMos4834delivered. No source/helperinstall/JSparse/Node/FS/process/proxy/test/full/gate/review/queue/global/FED288/landing/closure. Next4835independentnativeB/658 authorized; clientcouplingneedsselectionbeforebytes.
2026-10-26T14:19:05.310945+00:00 — Sage4835 STATIC1863 BEFORE: selected actual ManagementClient native workgate/readonly observation plus actual ModelKeys-beforeHTTP ledger; preserve ungated semantics/receipts/timing. Pin Node26.8.1 official docs/source and static localheader inference, no node process. Capacity128, no payload per-unusedgate duplication/no releaseforget-livework, preserve expected401disposal versus UNKNOWNerror. No install/parse/Node/FS/process/proxy/test/gate/review/queue/landing.
2026-10-26 Sage mos1864 course correction BEFORE:657/658 parked OPEN backlog at4835 static packet; no design applied. Source fixes641/642/643, assertions retained, independent Codex review, quiet-host full gate4 then authorized green/reviewed landing. Existing unrelated work preserved.
## 2026-10-23 — Row 288 C2-02 build starts (Bubba, #1793)
Before: agents can read the library; supporting-path and push-credential dependencies are separate unlanded heads. After intended: per-seat supporting writes/deletes with exact notices, human revert and one commit per Console save. Work is on bubba/row288, chained on original 283/285/286 commits; 284 tool base still pending. Plan and acceptance evidence: agents/bubba/work/queue-288/BUILD.md. Untested; no Node/test/build/gate run before Sage CLEAR. Landing waits for every dependency's own gate.
2026-10-25 | Bubba | Row288 #1793 gate after landed284 | Candidate2848d832e:289 whole files rc0 (2604 pass,1 covered FED skip),12 scripts rc0,6 mutants killed/restored controls rc0. Own bare-delete and fixture reds fixed with driver restarts; no pre288 red. Per-run hashes/rc in agents/bubba/work/queue-288/gate-r6-results.tsv. Slot returned Sage bubba-0034; manifest review/landing pending.
2026-10-26 Sage BEFORE Mos1864 source timing repair: isolate193774 row288; distinguish interpreter probe timeout, deterministic owned-socket idle-clock test, async copy child completion, retain assertions; one independent Codex review then quiet fullgate4.657/658 are backlog, not landing blockers.
2026-10-26 Sage SOURCE CHECKS Mos1864:641 injected ETIMEDOUT regression RED thenGREEN; keep1000ms fail-closed probe bound, distinct interpreter-probe-timeout.642 real-socket manual idle clock/readiness preserves assertions, ordinary-timeout mutationRED/restored.643 async owned child-close signal/readiness, all156 original assertions retained; combined39/39 zero anomaly; bus package1035/1035 zero skip. Independent Codex thread mcp:9245555c-5430-42f9-8afc-f77a70fc09ee pending; fullgate4/landing pending. No657/658 applied.
2026-10-26 Sage Codex review/fix Mos1864: independent thread mcp:9245555c-5430-42f9-8afc-f77a70fc09ee found one introduced P2 (detached copy descendants escape external timeout TERM). Fixed via fixture-only active-pool signal handling/native child close; actual regression RED→GREEN. Final affected40/40 zero skip/cancel/fail; all original assertions retained, productionserver unchanged. One review, no extra design gate; fullgate4 now pending quiet-host launch.
2026-10-26 Sage Mos1864/1881 model join AFTER verification: reviewed330/331 product362893d043ff96fdd35f18e326cce683db031471/treea7f7fcd7fc2cc4ba06efad78627f5f04929a0740 has321whole-file native PASS plus actual FEDR7 1/1; originalR2 orchestratorrc1 counter defect preserved separately. Whole bus1349/model-proxy100/webui490 PASS on unchanged product. Final PIN8.0.42, config55, all4P4+4P2 exact named mutant kills and whole restored controls PASS. Counter independent Codex review found2P2, reproduced7RED then23/23fixtures GREEN; failclosed unknown/missing summary and either-format failures. Commit/tree recorded before/end same; all1968 current+committed inputs mapped49c162c99 before later artifacts. Source join fix isolates runner-safe vocabulary from host ProxyPage imports; exact graph expectations retained. Original setup/timeouts/cleanup failures preserved; no657/658 installed/backlog remains. Documented Poe acceptance alias is byte-identical tested helper, not separately executed. Authorized landing next; source frozen.
2026-10-26 Sage LANDING Mos1864/1881: origin/refactor52ba14c5f now contains product362893 plus map/evidence49c162c99 and documented acceptance alias. Canonicalrefactor fast-forwarded by CAS with only136 exact accepted paths restored; unrelated8Rocko staged deletions and all untracked preserved, source/index clean for packages/scripts. Product1968hashes still match before/end freeze. Full source641–643/row288 previously63ec/acd; now330/331 landed same authorized window with applicable gates complete. Actual queue331 done refused rc2: round3 no recorded Boyd/Dewey approval;330 remains Poe in-progress with no formal round. No review impersonation/bypass; metadata closure is separate hard-rule wait. Tasks655/656 comments1336/1337 exact wholebody/author13 GET-verified, remainOPEN;657/658backlog unchanged. Ops660 runner update1334 independently GET-verified; no heavy gate active/no VM selected. No further source or gate work needed for this landing.
2026-10-26T17:51:50Z Dewey POST-LANDING REVIEW Mos1909/Mos1915 (retrospective review-phase receipt, not a build): BEFORE code already landed under1864 at52ba14c5f/product362893d04; historical round3 CHANGES and missing approvals preserved. AFTER independent source/original-task/evidence review saved agents/dewey/work/queue-331/postlanding-mos1909/REVIEW.md; sha256 ab7edcb484a32093e9cb541032def275665f1572aa97bb118d2742f1f29fa97c. Scoped APPROVE;646-648/652-655 FIXCONFIRMED,656 PARTIAL against broader original wording with matching-revoking-tmp/single-final-completion repair confirmed. All1968map inputs match current+committed product;339existing raw log hashes verified; relevant owner execution outcomes inspected with FED skip/dedicated native1/1 and original R2rc1 distinctions preserved. New findings none;657/658 remain backlog. FILE ONLY: no actual verdict comment, queue approval, task closure, source/helper/test changes, Node experiments or new gate.
2026-10-26T17:56:44Z Filbert POST-LANDING REVIEW Mos1909/1915 #1828 row330 (retrospective review receipt): BEFORE product362893d04 already landed underMos1864 at52ba14c5f; canonicalround1 request4137/4138 failed pre-send, no comment/approval. AFTER independent static source/brief/evidence review APPROVE for landed originalP4 repairs/current-generation P2join; saved agents/filbert/work/queue-330/postlanding-mos1909/REVIEW.md sha256 0f93bc883f1db2d2e136323040eaff2ad79aa184fa5ab140c94a0ae906f70ffe. All1968committed mapped blobs/bytes/SHA256 match product/candidate/cited0e1dd0a95; current1966match plus2queue-tracking differences; all43 evidence hashes match. OriginalR2rc1 preserved separately from supplied321whole+FEDR7/native1 and completed package/PIN/config/eightmutant+restore phases. NEW-330-01 retiring-key Console metadata gap is task-ready separate follow-up only, no reopening/newgate. No test/helper/source edit or run, live/secret access, formalpost/queue mutation, commit/push/closure;657/658 BACKLOG unchanged.
2026-10-26 | Sage | mos1884/#662 scope after330/331landing | ReadQ222/Q261/Q263 and659/660/662; posted bounded human-only factory settings/triage/defaulttwo-roundmandate/trackedno-exemptionflake scope with10acceptance criteria, task662comment1338 exactwholebody/author13GETverified. No implementation/review/gate launched.660c1335notready(review/merge, noVM); gatefacts1329/1334 retained; target integration/fullrunner confirmation follows readiness, no localfallback. Landedproduct/evidence unchanged;657/658backlog.
2026-10-26 | Sage | Mos1909/1915/1917 real postlanding reviews | Boyd/Dewey/Filbert/Gladstone real authored candidate52ba verdictfiles independently byte/hash-verified, allAPPROVE scoped; Dewey656broaderPARTIAL retained. Formal330R1/331R4 requests failedpre-send/no comments or approvals; no borrowed/copied/mintedkeys. LegacyhelperGETname jason.woltje is NOT ownJarvis, ownslotabsent; rows tracking-open/#436, files cited via normalqueue. NewFilbertNEW-330-01 filedtask665 exactreadback, notlandingreopen/gate. Repair646-648/652-656 remainOPEN untilactualcomments;1917 conditionalbacklog routing retained. #662scope1338posted;660PR405REVISE/notready. Product1968inputs unchanged; no source/helper/test/gate edits/runs; peerjournal prefixes preserved.
+501
View File
@@ -0,0 +1,501 @@
# Row 288 (#1793): C2-02 agent writes, notices, revert and Console saves
Owner: Bubba, Codex gpt-6.1-sol, thread 3d6672b5-5544-4b95-9e09-e79574f1aa14.
Reviewer: Webby. Gate and landing: Sage. Append-only build record.
## 2026-10-23 start and implementation plan
Base 45dca69f6 on bubba/row288. Direct mandate mos-1499 (Q245), confirmed sage-3613.
The canonical `scripts/mosaic queue next bubba` returned `nothing`; Sage owns the owner transition.
The initial worktree invocation refused linked-worktree use; retried in canonical checkout.
Spec: docs/plans/2026-10-20_case2-rows.md, C2-02; agents/gosalyn/work/case2/DESIGN.md ruling after r11.
Handoffs: Honker queue-283 BUILD.md Q4 (missing/non-100644 delete refuses); Morgana
queue-225 BUILD.md A2 at 66f7becf2 (strict revert arguments/result), confirmed by Fethry fethry-0005.
`project` is the business.projects key, never a chat UUID.
Dependencies merged with their commits intact, no amend or force-push:
- 283 origin/honker/row283-build 88ec5e8e4 (new E4 head to follow).
- 285 origin/scrooge/row285-r2 53db6b7ca.
- 286 origin/ludwig/row286-r2 573fa0be0.
- 284: no named remote branch yet. Tool changes come last.
All merge commits are marked Untested. Nothing has run under Node. Sage's latest instruction
sage-3613 reserves **all Node and test runs** for CLEAR; this supersedes the initial targeted-test
permission. Build untested now as instructed, then run RED/GREEN checks/mutants on CLEAR.
Architecture: one host-only plumbing writer under the existing library lock; broker authorizes and
selects credentials, then inserts the fixed notice directly. Human save/revert use editor +
library-human independently of seat lifecycle. No worktree, deferred push, role expansion or UI.
### Tasks and acceptance
- [ ] Plumbing: new library/src/write.mjs, mirror state publication and package exports; new
library/tests/write.test.mjs. One-parent write/delete, byte-exact content, seat identity/trailer,
stale-base, nonregular/missing deletes, retry once on an unrelated remote change, push failure
without local ref movement, human editor and revert reachability/single-path checks.
- [ ] Broker + runtime: library.doc.write/delete, library.file.save, library.revert; strict keys,
creative + library.write + live unheld project grant; direct exact notice; human-only save/revert.
New bus/tests/library-write.test.mjs covers authorization, unchanged refs, A2 contract and socket.
- [ ] Transport: only human library.file.save joins the existing large-save exception. New tests
prove >64 KiB save accepted, agent writes retain 64 KiB bound, malformed/oversize saves refuse.
- [ ] Tools after 284: library_doc_write/delete in harness tools; exact eight/ten-name snapshots
in a new harness test; cli dispatch wiring.
- [ ] Verify on CLEAR: new tests, library/bus/harness suites and all scripts/test-*.sh on Sage's
assigned slot. Mutants remove supporting guard and force push; both must fail. Fixture-token
search over captured output. No gate, landing or queue move claimed before Sage's acceptance.
Pre-flight interfaces: broker consumes library writer {project,path,commit}; revert adds reverted;
writer consumes C2-03b push {pushed} or {raced,tip} and supportingPath(mapping,universe,path,tree).
State publication must add optional lastPush while preserving old state readability. Refusals must
restore fetched remote-tracking refs as well as preserve served. Runtime must bind credential file
references itself; no file, identity, message or credential is supplied by the agent.
Necessary file-scope additions: packages/bus/src/runtime.mjs (actual adapter injection),
packages/library/src/index.mjs (exports), and CLI's existing console adapter if saves require it.
Reported to Sage in bubba-0002. Existing tests will not be edited without Mos's OK via Sage.
Review focus: remote tip races, nonregular entries and folded paths, unsafe human credential before
git, revert after revoked/fired writer, and large-request exception never extending agent writes.
### Existing-test changes
None authored by Bubba yet. Dependency test changes remain their owners' original commits.
## 2026-10-23 first static build (not a gate result)
283 E4 merged intact at 76d651dba. Honker next reports e67c27b32 (test environment only), to merge
before push. Della reports row 284 has not been built/pushed; row224's 23816cf28 is not a 284 head.
No speculative 284 pin. Typed tools and served-blob lookup integration remain pending 284.
Implemented (unrun): bare plumbing writer, one-parent commit and fixed trailer, exact-content blobs,
base comparison, supporting path guard and delete regular-blob check, one remote-race retry,
ref restoration on refusal, immediate served publication/lastPush; human save and reachable one-path
business-trailer revert; broker grants/identity/notice path; runtime adapter wiring; large-save socket
exception. New tests: library/tests/write.test.mjs and bus/tests/library-write.test.mjs. No old test edits.
### Approved scope additions, sage-3628
Every hunk outside the brief's owned list:
- `packages/bus/src/runtime.mjs`: `humanWriteOptions` checks editor before choosing the human slot;
three library adapter entries bind dataRoot, command and the host-only seat store reference. These
are needed to make actual bus calls reach the new writer without accepting agent-supplied files.
- `packages/library/src/index.mjs`: export writeLibraryDoc/saveLibraryFile/revertLibraryCommit so
runtime's existing library module adapter can call them.
- `packages/library/src/sync.mjs`: shared write guard with opaque token compared by identity;
push's race fetch recognizes only that owner and does not clear its guard; ordinary sync and a
forged token still refuse library-sync-busy. Narrow publishLibraryWrite validates ids, reads the
locked state, rebuilds the index via readLibrary, moves served/tracking and writes lastPush. The
raw writeState remains private and is not exported through index.mjs.
Ludwig ludwig-0064 reviewed the intended interface and requested the opaque token (implemented),
narrow publication (implemented), whole library + bus library-credential checks and a token mutant
(planned). His 573fa0be0 remains current and unrun. 288's additions are separate commits, not folded
into 286. Tracking restores only if the whole write refuses, not between the first race and retry.
Known tradeoff, accepted by Sage sage-3628 for MVP: the brief holds the flock through network Git;
readers can hit the existing 5-second library-sync-busy while it runs. Structural supportingPath
preflight is pure and precedes Git; served/fetched listTree checks repeat it with the real tree before
any remote write. A tree-dependent check necessarily reads the tree first (Honker honker-0184 item2).
### Mutants for CLEAR
- Remove the `pathOf` calls for agent operations: the M12 broker/bare-ref tests must fail on a
story/unsupported path while checking remote, tracking and served refs.
- Prefix the push refspec in syncCommand with `+`: write.test moved-target race must fail, because
its command seam preserves production syncCommand's refspec (only remote URL/protocol are fixture).
- Replace `writers.get(mirror) === writeToken` with `true`: write.test forged-token case must fail.
No Node, test, build or mutant has run. `git diff --check` is clean. Counts are not claimed.
### Console dispatch integration
The existing cli delegates its transport wiring to console-bus.mjs, so the save dispatch needs that
file too: one null `librarySave` option and one `--send` assignment to library.file.save. cli.mjs
threads that option into startServer; row C2-11b owns the actual route/page that consumes it. New
webui/tests/library-write-options.test.mjs covers --send and the user transport boundary. 225 owns
libraryRevert dispatch; 288 adds only librarySave to avoid overlapping that ownership. Additional
scope reported to Sage and Fethry. No changes to an existing test.
## 2026-10-23 second static pass and dependency review
First push: c867cada9 on origin/bubba/row288, reported bubba-0005 to Sage/Webby/Mos and
bubba-0006 to Fethry/Ludwig. No PR created and no review/gate requested as complete.
Ludwig ludwig-0065 checked the exact sync diff against 286 without running anything. Token identity,
ordinary-sync exclusion, 286 R1 preservation, guard key and end-of-write tracking restoration fit.
F1: state publication could fail after served moved, leaving old state/new served. Root cause is
publication order without rollback, compared against sync's existing rollback. Added an unrun
filesystem rename-failure regression, then changed the narrow helper: on failure it validates the
state under the same lock, CAS-restoring served if state has not published the new commit. If rename
succeeded but directory fsync failed and the state validates against new served, it keeps that pair.
All failure cases answer outcome-unknown; tracking remains the commit already pushed remotely.
Verification is pending CLEAR, so this is a proposed fix, not a tested resolution.
Added the actual broker-to-bare tests for each M12 path refusal (both agent verbs), unchanged remote
and all mirror refs, exact write/delete notices, and human revert after fixture grant removal/hold.
The bare fixture moved to new library/tests/write-fixture.mjs so broker tests reuse real plumbing.
Added the raw socket proof-nested-save-name case to pin the parsed-verb large-request check.
Missing editor/slot tests now make the mirror metadata invalid first: reaching Git would change the
refusal, so the tests check the pre-Git gate rather than merely count remote commands.
Additional required doc hunk: packages/library/README.md appends the four verb contracts,
lastPush shape, exact notice, lock tradeoff and publication failure behavior. No existing test from
the dependency/base has changed. All new/modified tests in this pass were authored by this row.
`git diff --check` remains clean. No Node/tests/build/mutants run; 284 and CLEAR remain pending.
## 2026-10-23 early review follow-up (Webby E1-E6; Ludwig F2)
Sage sage-3652 approves console-bus.mjs wiring (null option + --send dispatch), confirms editor.user
as the sole human login source and reserves CLEAR for T3/T4 after T2. Ordinary sync()'s separate
post-rename fsync gap stays out of 288 per that ruling; no change to sync()'s existing rollback.
Honker 283 head 46bad7ea3 merged intact: mapping editor.user is optional, and if present uses the
existing plain Gitea-user pattern. The omission at mapping level is valid; human writes refuse it.
- Ludwig F2 / Webby E6: confirmed the previous runtime used the fetch bot's mapping.user wrongly.
Runtime now passes mapping.editor.user to humanCredential, never mapping.user. Missing user gives
library-human-missing before Git. New real-runtime cases pin both save and revert with a separate
fetch-bot login, positive pushes under her-gitea-login, and no command for an absent editor login.
The broker's credential.agent is s.role, not args: added an exact assertion and strict-key refusal
cases for caller-supplied agent and credential.
- E1: replaced the business-id RegExp interpolation with a literal startsWith(business.id + '/')
check and ID_PATTERN on only the instance suffix. New acme.co vs acme-co trailer test.
- E2: new broker→bare case holds the seat in the fetch command. beforePush must refuse
library-write-no-grant with all local refs and the remote unchanged and no notice. New mutant:
remove `options.beforePush?.();` in write.mjs; the E2 test must fail.
- E3: new broker cases for expired rotate_by, fire.stopped without fire.done, missing role.publish
project, grant/identity Gitea-user mismatch, and missing identity name/email, for both agent verbs.
- E4: the exceptional publication failure currently returns outcome-unknown before the broker has
a successful result to put in a notice, so a remote agent commit can exist without a Console
notice. There is no durable notice outbox/retry in this row. The trailer commit remains human
revertible by id after sync; this is an explicit known failure-mode gap for the manifest, not
a claim that every failed publication emits a notice. A new real-push test breaks state decoding
after push admission, pins outcome-unknown, old served and no notice. It also found a local error
propagation gap: errors before publishLibraryWrite's internal try now normalize to outcome-unknown
in the writer once push has succeeded, so the caller is never told an ordinary refused-write code.
- E5: 284 still has no build. Tools/8-or-10 snapshot and served-blob integration remain pending.
librarySave is intentionally only an adapter option until C2-11b supplies its route/page.
All tests above are newly authored by row288 and remain unrun; no changes to baseline/dependency
tests. RED/GREEN and mutants await CLEAR. Proposed fixes are not claimed verified. The new host-only
library write module imports the existing pure ID_PATTERN to match the broker's accepted instance ids.
## 2026-10-23 mos-1520 ruling: post-push notice is required
Correction to the E4 interpretation above: Mos rejected the known-gap treatment. The requirement
stays: a pushed agent commit has the exact notice even if local publication then fails. This is not
an outbox or retry. The writer now calls the broker's trusted synchronous onPushed callback as soon
as push returns pushed:true, before publication. The callback records the exact library-write notice
and action.allowed in the normal Console-store transaction. Publication failure still answers
outcome-unknown. The notice's Revert can refuse library-revert-not-agent until sync makes that commit
reachable from served; README now says that explicitly and removes the rejected gap description.
The row's own real-push corruption test now pins the exact notice body with the pushed id, old
served and outcome-unknown; after restoring readable state it pins Revert's refusal before sync and
success after sync. The successful-write adapter fixture calls onPushed too, matching runtime's
writer contract. No existing baseline/dependency test changed (mos-1520 explicitly authorizes this
row's test correction without mos-1272).
Residual Console-store failure: if notice insertion/routing/its event transaction fails, the broker
calls a separate host log sink with {event:library-notice-store-failed,code:outcome-unknown,business,
instance,op,commit}. It logs no args, path content, credential, raw SQL or exception output. Runtime's
new library.log adapter writes this metadata to stderr. The caller gets outcome-unknown even if
recording action.refused in that same broken store fails. A new real-push test uses temporary SQLite
abort triggers on notice insertion and refusal evidence, checks remote advanced/served unchanged,
no message, the exact external log and outcome-unknown. It does not claim a notice can be stored in
a failed Console store. If the host log sink itself also fails, no durable log can be promised; the
caller still receives outcome-unknown. The runtime log hunk is the required residual-failure wiring.
Mutant added: move `options.onPushed?.({ project: context.project, path: change.path, commit });`
from before `await publishLibraryWrite(...)` to immediately after that await inside the same try.
Successful operations keep their notice, but the outcome-unknown publication path drops it. The
C2-02 E4 real-push corruption test must fail on its exact notice assertion. Run on CLEAR and restore.
No Node/tests/build/mutants run. Static git diff --check clean. Della's first284 head0ed4fbab9 is
explicitly incomplete and not a finished dependency; waiting for her complete-head pin before tools.
Webby webby-0253 (static, cef503cb9) closes E4 per mos-1520; no tests ran. N1: a failed notice insert throws from onPushed before publication, so served stays at the prior commit until sync; the store-failure test pins this safe direction. Only E5 (284 tools/snapshot integration) remains open in this early review.
## 2026-10-23 complete284 merge and final tool integration (unrun)
Della della-0037 supplied complete untested head47db04eba85ac3ceb7e81385603f97bb6f8c1a38,
replacing the incomplete head. Merged intact as c0ca3894c. Its22423816cf28 and2164f3fbc25a
lineage is retained. Three conflicts were in overlapping production wiring only:
- broker.mjs: keep Della's LIBRARY_LOOKUPS object and #requestLibraryLookup byte-for-byte, and
keep288 writer/notice methods; LIBRARY_VERBS contains both sets and request dispatch calls lookup.
- runtime.mjs: keep lookup adapter plus288's metadata log and write adapters.
- library/index.mjs: keep index/query exports,286's push/humanCredential exports and288's writer exports.
No dependency test body was changed in the merge. These are overlapping consumer integrations,
not rewrites of dependency commits. Every prerequisite still needs its own gate (mos-1351).
Added library_doc_write/library_doc_delete after the five lookups, only for a creative definition
with a within-role library.write grant and library enabled. Closed schemas carry exactly
{universe,path,base,content} and {universe,path,base}; base is string-or-null with 40-lowercase-hex
pattern. No project, business, author, credential, commit or message. tools.action is library.write.
New harness/tests/library-write-tools.test.mjs pins per-role eight/ten names, both schema invariants,
no repo/commit/business/accept, exact required/verb/action, nullable base, and missing library/grant
or noncreative exclusion. This satisfies sage-3678 and mos-1523's replacement coverage condition.
Publication's narrow helper now calls indexFor for the new served commit instead of only readLibrary,
so the284 lookup index is rebuilt before publication. New broker integration uses library.get's
served blob as write/delete base, independently checks served:path, reads the new text/blob immediately,
preserves default-canon null, then sees null after delete. No change to284's query behavior.
### Authorized baseline-test migration, own commit (mos-1523 via sage-3677)
File: packages/harness/tests/library-tools.test.mjs. Numstat: +4/-4, exactly.
The noncreative LOOKUPS assertion at :33 is unchanged. Every existing lookup schema assertion stays.
The four old/new lines are:
```diff
- ? ['web_search', 'web_fetch'] : []), ...LOOKUPS];
+ ? ['web_search', 'web_fetch'] : []), ...LOOKUPS, 'library_doc_write', 'library_doc_delete'];
-test('M3: per-role snapshots contain six names, or eight with the C2-08 web grant', t => {
+test('M3: per-role snapshots contain eight names, or ten with the C2-08 web grant', t => {
- for (const [i, tool] of tools.filter(t => t.name.startsWith('library_')).entries()) {
+ for (const [i, tool] of tools.filter(t => LOOKUPS.includes(t.name)).entries()) {
- assert.deepEqual(tools.map(t => t.name), ['send_message', ...LOOKUPS]);
+ assert.deepEqual(tools.map(t => t.name), ['send_message', ...LOOKUPS, 'library_doc_write', 'library_doc_delete']);
```
Additional schema mutant (mos-1523): add `commit: str("caller commit")` to writeBase in tools.mjs,
thereby adding it to either/both write schemas. The new-file schema test must fail both its exact
property set and forbidden-property assertions. Run on CLEAR and restore. No further assertion
change in library-tools.test.mjs is authorized or made.
All code/tests/mutants remain unrun. No Node, build or syntax check before Sage's named CLEAR.
Static diff --check is clean. Scope additions stay listed above, now including indexFor import and
call in the previously approved narrow publication helper. E5 implementation is present; review and
acceptance are pending evidence, not claimed complete.
## 2026-10-23 testing and landing boundary (sage-3682)
Latest complete dependency2845d587a552 (test/docs only over47db04eba) merged intact as f8f79ea2f.
Own tool implementation cd2f50dae and separate mos-1523 migration29455c0c5 are pushed; Webby reads
E5 and Dewey checks the migration. Static manifest-r1 covered21 own paths at f8f79ea2f.
Sage reserves first focused runs/RED-GREEN/mutants for T7, provisionally about22:25Z, unless he
explicitly frees an earlier lane. No Node before his CLEAR. This is a schedule, not CLEAR. Full
library/bus/harness and shell gates still need their own authorized slot; no gate result is claimed.
Before the gate, incorporate landed refactor after283/224/284 land while preserving every
prerequisite. Under the standing add-commits/no-force-push rule, update this published branch by merge
rather than rewriting its pushed history. 288 lands last in the chain; no landing is authorized here.
## 2026-10-23 E5 static closure and N2 wording
Dewey dewey-0948: the mos-1523 migration at29455c0c5 is static CLEAN, exactly+4/-4, with the
noncreative assertion unchanged and new-file schema coverage meeting every condition. Webby
webby-0263: E5 closed on29455c0c5/cd2f50dae (f8f79ea2f;98ca25ab1 only BUILD.md), nothing blocking.
Both ran nothing; Webby did not read the scratch manifest, so no manifest verification is implied.
Webby N2: delete inherited the write base description "or null to create". Delete now overrides only
that description: "The existing file's blob from library_get; a missing file cannot be deleted".
The reviewed nullable-base schema/required keys/verbs remain unchanged. The row's new schema test
pins create wording only on write and existing-file wording without create on delete. No further
assertion change in the baseline library-tools.test.mjs. No Node/tests run; still await Sage CLEAR.
## 2026-10-23 dependency283 follow-up (honker-0195)
Merged origin/honker/row283-build b2a1f4092 intact, fast-forward lineage from46bad7ea3. It changes
supporting.test's helper and Honker's BUILD receipts only; no production source changed. Honker
reports library98/98, business231/231 and14/14 mutants killed on that dependency head. Those are
his dependency receipts, not verification of288's combined branch. No288 Node/tests run; Sage's
CLEAR is still required. The dependency's own gate/landing remains Sage's responsibility.
## 2026-10-23 new candidate after283 landing (sage-3727, honker-0200)
Created bubba/row288-r2 from the preserved published bubba/row2887c53adf10, then rebased with
--rebase-merges --no-update-refs onto93694c5185d0a7f989d2fe78fb620e44599b744e. This supersedes
the earlier merge-only refresh plan for this candidate: Sage explicitly requested a fresh branch,
not a force-push. Both local and remote bubba/row288 remain7c53adf10, unchanged.
Git skipped12 duplicate283 commits already replayed upstream. Range-diff of
45dca69f6..bubba/row288 against93694c518..bubba/row288-r2 (before this receipt) has35 equal
commits,12 dropped,0 modified,0 added. Full output: scratch/bubba-row288/rebase-r2-range-diff.txt
under /mnt/storage. The other prerequisite commits retain their patches; row216/224 identities are
unchanged where Git could retain them. This is not new verification of any prerequisite.
Replayed merges had the same launcher-footer and broker/runtime/index conflicts as before. Reused
the exact previously reviewed combined file bytes, keeping both launcher test bodies and all lookup
and writer paths. Static comparison before this receipt: all21 own manifest paths byte-identical
to7c53adf10; all16 other changed paths exactly match93694c518 upstream. These include newly landed
226 and coordination/docs changes already on that base, not new288 edits. No baseline assertion or
production change was introduced by conflict resolution.
Sage's base93694c518 is an ancestor of the candidate; old283 b2a1f4092 is not. Static diff --check
clean. No Node, test, syntax, build, mutant or gate run. Named CLEAR/T7 still pending;288 lands last.
## 2026-10-24 static preflight before landed284 base (sage-4282)
No Node, npm, test, syntax, mutant, queue command or gate ran. Still on bubba/row288-r2,
b44152ac6 plus this static follow-up; await Sage's landed284 base before a fresh candidate branch.
Do not treat the earlier T7 estimate as CLEAR. Webby remains reviewer.
### Updated C2-02 brief and contract names (webby-0282 N1)
Read C2-02 on origin/refactor 95d4991d20a4ef291c824d37c886eaeaa9be7062; current brief blob 85e6fe2ecfc53ed615b7b61aade88ae0cbb222ef
(the new ruling is identified by Sage as5e8a720b). Statically checked both the candidate and current
refactor versions of all six creative contracts: roles/companion.md, research.md, ideas.md,
proofreader.md, fact-checker.md and continuity.md. Every one names library_doc_write and
library_doc_delete, exactly the two add() names in candidate harness/src/tools.mjs. No role contract
change is needed or made. Exact-name evidence is tool-contract-audit.json in the scratch dir below.
### mos-1584 fixture audit
The new row288 harness tests reach businessDoc through resolvedFor, but their callbacks add only a
creative role; they add no library business project. library:true is the typedTools option, not a
businessDoc project. The broker/runtime/bare-library tests build minimal business objects directly,
not businessDoc. The migrated baseline harness test likewise adds no library business project.
There is therefore no new row288 businessDoc-with-library fixture requiring a chief-reference edit.
The current and future landed-base imported fixtures must be rechecked after the pending rebase;
any validating businessDoc fixture that adds a library project must retain/provide chief gitea.
Shortened only two row288-authored fixture credential values: write-fixture.mjs uses fx288-write,
and the runtime test's two slots use fx288-human. Both are11 characters, below24. This corrects the
25-character runtime value and avoids an edge at the older23-character write value. No assertion
changed, no baseline test edit and no credential file was read. No live credential action occurred.
### mos-1612 whole-file run-list preparation (not run authorization)
Static lexer traversed real import/re-export/require and new-URL module-entry edges, skipping
comments/quoted fixture code; reverse closures carry a chain witness for every selected test.
Used the union of this older candidate and the current refactor source snapshots so newer importers
are visible without prematurely rebasing. It selected270 whole test files. Required whole library,
bus and harness suites add17 distinct files, making a proposed union of287 (not a narrow grep list):
bus115, business2, cli58, harness16, library13, plugins1, processing-control1, seat5, tasks9, webui67.
The brief also names all12 scripts/test-*.sh runners. No file/runner was executed.
packages/cli/tests/case1-accept.test.mjs is explicitly excluded under mos-1592/1612. The11
nonliteral-import files have a manual expression audit; all already occur in the import-selected
whole-file set. Generated programs and runtime plugin discovery are recorded static limitations,
not asserted fully resolved by the lexer. Whole suites and the named script runners retain their
brief-required coverage. Regenerate after landed284 rebase; report exact final sha/list before CLEAR.
Each approved gate later needs own root/webui npm ci, required editor build, short scratch TMPDIR,
whole files and gate skip receipts under the then-current rules. These are plans, not past evidence.
Artifacts: /mnt/storage/scratch/bubba-row288/static-2026-10-24/
- import-run-list.py SHA256 ec18031c87bf6f96b3e794e2e56747bc5e1fe37580de7ce9444c60cd5f18ddc0
- whole-files.txt SHA256 b2d6c11349268c347e51a64fe6bf9e7c4d560238a8fc5b5e10f600f1e6e8a39e
- import-witnesses.json SHA256 01702657d34c4f2c0635f38741d0a5b57cfdda63d5e96897f188d03971afd5d9
- dynamic-import-audit.txt SHA256 42b8721fde783c618e1347f2609ad6e4ae3144f563272f0bbbeb45c34f751018
- brief-required-whole-files.txt SHA256 254828414cd9b1b0a785df5c23b7f2b9ea7564d1f85e648899801e46194d135f
- proposed-whole-files.txt SHA256 bee666dce2c3f2d0bafe7e963fb443ad356b6ae8719ac3cb8ee413a329578035
- brief-script-runners.txt SHA256 02cd25af486c163189977106e055575145bffba688c7836e2a508f5ec91e76d4
- tool-contract-audit.json SHA256 bf07865d796b8b0aed85d84c015430ea03468c5331bcaae9eb80efafe1a182be
- fixture-audit.json SHA256 436a69a6b8548d8426390e867ed4b0f83693a3116d825c26c6f8a3e788f477d6
## 2026-10-25 landed-base transplant (sage-4338), UNTESTED
Named base: 78b69e1e68b2b8a9dc4c02564381a0792c0c7549, including landed284 ce0b6ed41.
New branch bubba/row288-r3-landed; published r2 e7c31a90d is untouched.
The initial --rebase-merges replay tried to reapply already-landed285 and conflicted;
aborted without resolving those conflicts. Transplanted only the twelve Bubba nonmerge
commits, in order, onto the named base using cherry-pick. No dependency commits replayed.
Conflict resolutions (no test conflicts, no assertion changes):
- BUILD-LOG.md and docs/SESSIONS.md: preserve the entire upstream side, append Bubba entries.
- broker.mjs: retain landed LIBRARY_LOOKUPS and lookup dispatch, add writer verbs/methods;
retain the complete landed library.status replyLimits branch after writer/save/revert dispatch.
- server.mjs: retain landed refusal envelope including reason, combine project/library save detection.
- library/index.mjs: retain every landed export, append the writer exports.
- webui cli.mjs and console-bus.mjs: preserve landed libraryRevert and add librarySave alongside it.
- runtime.mjs (notice follow-up): retain landed lookup adapter, add metadata-only log sink.
All other changes merged automatically. No business role/vocabulary file or dependency packet changed.
Baseline test migration remains packages/harness/tests/library-tools.test.mjs +4/-4 (mos-1523).
Only additional own-test edit removes a trailing blank EOF line in write-fixture.mjs.
Line-reference recheck: the sole explicit source-line citation in this append-only packet,
noncreative LOOKUPS :33, is still exactly line33 of library-tools.test.mjs and unchanged.
Historical fired-chief path4308 described an older broker; current fire.stopped/fire.done are
broker.mjs5126/5147 (firing detection863-865). Those historical receipts remain historical.
Old head/brief identifiers and T7 times above are historical, not the present base or CLEAR.
Final import-list audit uses candidate + exact named-base import graphs, eleven changed source
modules as roots, and all touched tests; no text grep selects a test. 272 whole files selected,
plus17 brief-required library/bus/harness files =289 files. Package counts: bus116, business2,
cli59, harness16, library13, plugins1, processing-control1, seat5, tasks9, webui67.
All12 current scripts/test-*.sh runners retained. case1-accept.test.mjs excluded explicitly.
The eleven nonliteral import expression sites were rechecked; whole parent tests already selected.
Generated programs/runtime plugin discovery remain documented static limitations.
Artifacts and chain witnesses: /mnt/storage/scratch/bubba-row288/static-r3/.
No Node, npm, test, syntax check, build, mutant or gate run. Pending Sage CLEAR.
## 2026-10-25 first CLEAR and delete-path RED/GREEN (sage-4396/4398)
Own root npm ci rc0; own webui npm ci rc0; editor build rc0. Fresh TMPDIR from mktemp
under /mnt/storage/scratch/tmp. All Node whole-file runs nice19, timeout600 kill-after10.
Initial own write.test.mjs rc1,10 pass/2 fail: delete and revert-to-absent hit library-git.
Isolated bare Git confirms update-index --force-remove rc128 (requires worktree), while
--index-info rc0. First replacement and two delimiter-investigation reruns still rc1,
10/2: runGit's stdin argument names an input FILE, not input text. No pre-existing test
ran or was edited. Final correction writes a private NUL-delimited removal record in the
already-cleaned staging dir and supplies that file to update-index -z --index-info.
Whole write.test.mjs now rc0,12/12,0 skipped/cancelled. Source-only fix in owned write.mjs.
Logs remain /mnt/storage/scratch/bubba-row288/gate-r3/ (write-fixed through write-fixed4).
Sage4398 authorizes this fix and requires committed new candidate + driver restart from
first whole file. Focused green is not the complete gate; remaining acceptance pending.
## 2026-10-25 new broker-fixture RED/GREEN, driver restart pending
Candidate7932c979a driver first library file rc0,12/12; second own bus library-write rc1,
0/14 (fixture FK and undefined dataRoot). Own fixture lacked gitea_users parent; insert
with valid16-hex nonce, consistent with landed credential tests. First attempted fixture
nonce was invalid and INSERT OR IGNORE hid it; corrected nonce, no product/schema changes.
Every bare.dataRoot reference was undefined: use bare.context.dataRoot. After these fixes,
whole file rc1,13/14, last assertion assumed lines were strings; query returns [line,text].
Corrected this row's new assertion to exact [1,'new served text']; whole file rc0,14/14,
0 skipped/cancelled. Intermediate logs bus-fixture-fixed{,2,3} under gate-r4 retained.
Only owned new bus/tests/library-write.test.mjs changes (+14/-12); no pre288 test changed
or failed. Commit this fixture correction, then restart all289 whole files from the start.
## 2026-10-25 creative typed-tool fixture RED/GREEN
Candidate4fb11e74a restart: library write12/12 rc0; bus write14/14 rc0; own harness
library-write-tools rc1,0/3 before assertions: new creative role fixture omitted the
Gitea credential reference required by landed285. Added the same fixture reference copy
as landed library-tools.test.mjs (no credential file read); no assertion changes. Whole
own harness file now3/3 rc0. Only new owned test+BUILD changed. No pre288 test failed.
Commit and restart driver from first whole file again; gate still not claimed green.
## 2026-10-25 completed candidate gate (sage-4396), SLOT RETURNED
Tested candidate2848d832e (three additive fix commits after requested8a47c462a).
Driver restarted from first whole file after EACH fix. Positive gate-r6: all289 whole
files rc0,2604 pass/0 fail/0 cancelled/1 deliberate FED R7 skip. Full required suites:
library168/168 (13 files), bus1035/1035 (116), harness180/180 (16). Other selected:
business25/25, cli619 pass/1 skip, plugins8/8, processing-control7/7, seat69/69,
tasks95/95, webui398/398. Case1 acceptance excluded. Final import graph regenerated on
2848d832e in static-r6: whole-files.txt byte-identical to static-r3 selection.
All12 scripts rc0: test-auth,conductor,config,discord,extension-package,
federation-acceptance,foundation,land-work,push-check,queue,release,task.
FED R7 dedicated runner covers ordinary-suite skip. Queue wrapper28/0 and node156/156;
canonical-root verify/render check deliberately skipped in this linked worktree.
Root/webui own npm ci and editor build rc0 before runs. All tests nice19, sequential,
whole-file timeout600/kill-after10; scripts timeout1800/kill-after10. Fresh mktemp TMPDIR
/mnt/storage/scratch/tmp/ for each restarted driver; no /tmp test root.
Six mutants killed (each rc1), restored positive whole files each rc0:
- M1 supporting checks removed: broker M12 refusal assertion.
- M2 forced push refspec: unrelated-blob retry/new-parent and guard assertions.
- M3 forged owner token: missing expected rejection in exact-token test.
- M4 beforePush grant recheck removed: held-during-fetch expected rejection.
- M5 notice after publication: E4 exact notice and failed-store assertions.
- M6 caller commit in schema: exact property-set schema assertion.
Source SHA256 restored after every mutant; git status clean afterward.
Captured logs across all four run attempts scanned for both fixture credentials:0 hits.
No pre288 test failed; no pre288 assertion changed beyond approved mos-1523 +4/-4.
Per-run rc and log hashes: gate-r6-results.tsv; counts: gate-r6-summary.json in this
packet. Full logs, mutant diffs, drivers and JSONL receipts under
/mnt/storage/scratch/bubba-row288/gate-r6/. Earlier RED/intermediate logs retained in r3-r5.
Slot-returned report sent to Sage as bubba-0034; no further tests after slot return.
Review notes to carry into request (webby-0296): N1 baseline library-tools.test.mjs73
still says tool names unchanged while the pin gains writer names; retained to honor the
narrow +4/-4 permission. N2 librarySave is dispatch plumbing only; C2-11b owns the route
that consumes it. N3 sync comment omission is cosmetic and unchanged from reviewed r2.
Commit-count correction: r3 initial head8a47c462a had13 commits, twelve transplants plus
receipt (BUILD +36, SESSIONS +2, fixture EOF -1). Current tested head adds three fix commits.
Formal manifest review/gate acceptance and landing remain Sage/Webby stages, not claimed.
@@ -0,0 +1,308 @@
kind name rc restored_rc log_sha256
whole-file packages/library/tests/write.test.mjs 0 e0f6a09b70316beebbf33966b35bfd05b4a12b587744dadc9239bd28de1b976c
whole-file packages/bus/tests/library-write.test.mjs 0 e0e9e609b20ea0564a7611046026cbdfd007832e0eb13507798e958d8d106ef0
whole-file packages/harness/tests/library-write-tools.test.mjs 0 c8a3a493d1d2abce785e94fdda5b1732e8d4a5e6eb19767af1b7e8b5e560cf3b
whole-file packages/webui/tests/library-write-options.test.mjs 0 2491eb6a01a0b4b2127bcb6a87a5dc778d079b7d1ea445509a1dffc49dea9051
whole-file packages/bus/tests/access-revoke.test.mjs 0 a1b317bb687e8c369440f5481b4ef309615afb5a5922fa306980d2024019e544
whole-file packages/bus/tests/account-migration.test.mjs 0 e697b58a1bb9b37c609b441fe786e557c7f0279e7a31eea791483ce4567db318
whole-file packages/bus/tests/address.test.mjs 0 977f755d29a8e75578d0bef48ec40b7045736014b2e53e15a03cdb6dd39696d8
whole-file packages/bus/tests/agents.test.mjs 0 3e8116bad1ab5594e627ba3e9f5403414885959935bcd9e6f75f1af4c625d4b0
whole-file packages/bus/tests/approval-binding.test.mjs 0 d2fbee516b57857f3a6562427d2a08bd7fdb772aacabd33ebd9d2990f01ec7fa
whole-file packages/bus/tests/broker.test.mjs 0 400e7f0616bc7432d8cb2a9efbae3c84d5b44ef59ce7f8fbebd4c802e2a9f44e
whole-file packages/bus/tests/business.test.mjs 0 f42502884a158ed1d190b37b3884e19d44547ececf068f91765b8ad15faffba3
whole-file packages/bus/tests/channel-proof.test.mjs 0 3984a7e2da2a60e60d0309f719a45a3ef04bca767bac34e00a760e19e941d732
whole-file packages/bus/tests/chief-of-staff.test.mjs 0 8dd57acf0101d4c92ada92f4c33f68061d4e2cb430179a8ab99a0b7fc9a19997
whole-file packages/bus/tests/citation-availability.test.mjs 0 d34d84d44b5949024ce6b32708c68e10b00a84600bb03598bf9538b358750455
whole-file packages/bus/tests/citation-guard.test.mjs 0 acab66e65fd41f1fbfd9524f80456553fc033d8bfc18a9bec7a813bd0d4552d8
whole-file packages/bus/tests/citation-runtime.test.mjs 0 ce33310d333c7a0af7451c3a3b610f5178961b80b6b63a839909b67657fd161e
whole-file packages/bus/tests/comment-cursors.test.mjs 0 cd4de90a070faf2bdb776a96a6ba43aa4854f6f5f1b2b7459740bd7bdc0ffb7e
whole-file packages/bus/tests/comment-migration.test.mjs 0 773659855873805b5bd950101d950945213658fde42d8012211e742ba9ddcc09
whole-file packages/bus/tests/console-decide.test.mjs 0 275fc0a24a03f2f27210a65e2bd21ce615ec9b6b400c4e4177ddb97a9e8e85be
whole-file packages/bus/tests/creative.test.mjs 0 eb950d5680ff7e4e09a9c11b1c169d4a740011ea72bb75921d35571ef5373df2
whole-file packages/bus/tests/credential-claim.test.mjs 0 b2d40e4d2a353f4154af4974d5779f7b20c652a8110da3183f95959ae2540941
whole-file packages/bus/tests/credential-status.test.mjs 0 ed367e3d123c9629b7d3d22f6fa60f48c74e71b36982c54ad2b3e8419f515431
whole-file packages/bus/tests/credential-store.test.mjs 0 0fd528ba27757393973cba5b21da573bc681659416962bf7d3a3dff3018414af
whole-file packages/bus/tests/credential-verbs.test.mjs 0 154b123af420abf08c6ab8b7bc6439052e7ab65c772abb0caac5e9b9cd3608e9
whole-file packages/bus/tests/credentials.test.mjs 0 6474b45c076f474a6881d0dddd0cd3b4cd385d52ac4c55ef1a9f8c10e0028277
whole-file packages/bus/tests/csuite-messaging.test.mjs 0 c0229df65240be8ad014d83def48dbd64a952b701f46e40ff01efdebb5644d6a
whole-file packages/bus/tests/daily-quota-runtime.test.mjs 0 62d686aa1852088af569cd3b921194db6873311f2ba04e55b15a93900b1615cd
whole-file packages/bus/tests/decision-close.test.mjs 0 9599744860a4e6e330ce50b8e93c478546edce5545a9171bed068743a266ae5c
whole-file packages/bus/tests/decision-route.test.mjs 0 2b2a9570dab83b1d454f56c1311cb41103a14bcff49e207cbb4ac5d4c73d6f0f
whole-file packages/bus/tests/decisions.test.mjs 0 a753df7d939155adf13c7177926728b2760cf61770117dd1655f29fe2c88a26f
whole-file packages/bus/tests/end-launch.test.mjs 0 ff7a27c35e35be424cbefa799e219ffc073c494214642b4ce56ceed6b359335e
whole-file packages/bus/tests/fire-revokes-grants.test.mjs 0 8e6bee9421480af8a1326d65903f258d5ea0a79df6188bf18301f32a5260547e
whole-file packages/bus/tests/gitea-grant-docker.test.mjs 0 8b639ee86d1a7d2ef267e1d36264f4ce1b5beed2c8ce084c39c0de1d699ca8a0
whole-file packages/bus/tests/gitea-grant.test.mjs 0 8fa39b3e58cfac4ec97f02ff876fde1a40a1894c826306c0b77d45c73586f753
whole-file packages/bus/tests/gitea-migration.test.mjs 0 689fb43a38718f5f5d00ffb3b6d998d5d454854d5e77a936b56d7c4192ee12e9
whole-file packages/bus/tests/grant-enroll.test.mjs 0 a8be59931d37a5c787c2087d29d766d6b701bbe34f8343134148292cd29d345c
whole-file packages/bus/tests/grant-executor.test.mjs 0 0a7f5be29b28140c9f8e7f67c6a897eb455677fba4459952a83982f2b23c87e0
whole-file packages/bus/tests/grant-host.test.mjs 0 54c4ed722116914221e9320fd41723e32aad59284e98d8e177130b0f4c4fe6c4
whole-file packages/bus/tests/grant-migration.test.mjs 0 7cfaa3f24d1dc070d7bdb8de76b08fabcdb6877d3367c59f7601e08f683d658b
whole-file packages/bus/tests/grant-scope-runtime.test.mjs 0 f8bccf5324f1e10282dfb4f4fd0f63c76c8e9481ae6cc0845a1d9028e3d9633e
whole-file packages/bus/tests/grant-scope.test.mjs 0 e30a8ced066ad214a6f70dd4a39c75bacf296032a3201e4605fa3c8df23e0159
whole-file packages/bus/tests/hard-waits.test.mjs 0 78d92a14781286d3ca11989786a8698a2b796ad1db78769fd5b3c7653ad7639e
whole-file packages/bus/tests/host-run.test.mjs 0 51d231611940444d2c2a37fbb7b14267c705c1b5e453b02367d0a6def214dc93
whole-file packages/bus/tests/host-tools.test.mjs 0 3bc5b5413661edd2026bca1721055ec7dce8d115918cc10c8f334e527176d23b
whole-file packages/bus/tests/human.test.mjs 0 5c8f3fd402ae4e130029b3203ed41b3cb45b8781417d31dec1f47ebddd516349
whole-file packages/bus/tests/instances-verb.test.mjs 0 940ca3884930f539272a2c39ca7e1c7fa3e51b3a4ea6fdcfb21719c652152257
whole-file packages/bus/tests/interpreter.test.mjs 0 d0c6190a428005b7750b59e665968657b242b322af05ca7bdd4cd7e815b7f4ab
whole-file packages/bus/tests/land.test.mjs 0 e9ecd1d8011ab6789fc3254bb069e76631b68b20ad65ae844ee12e0dc3b97cb0
whole-file packages/bus/tests/launch-notice.test.mjs 0 750a54d4c40559c7fb5414071bace8056d6bfa71dfdbec4de12c94c90299c3c5
whole-file packages/bus/tests/launcher-released.test.mjs 0 4d59486ca3077a4b2f51141ab79df635feb6b7bca2d6c0cfe5839a6a93715de6
whole-file packages/bus/tests/library-credential.test.mjs 0 db7e2dc4afe23f74c49795e4dcd3d28414435519029a837641cbb35bd3f4fcef
whole-file packages/bus/tests/library-lookups.test.mjs 0 fa18b5d4c829ec35ebbf519c4346a2ac38cff7538d58ea663acbbdd7930a6015
whole-file packages/bus/tests/library-sync.test.mjs 0 ee0ab1ad2549d3e6ae6d8123fa99d697d9be6c629e09131da82f0ab6d58a60e2
whole-file packages/bus/tests/library.test.mjs 0 62b663034a5de8d6d1abfaf3f94327d7aae435e3350874b424eefdb28bca1bd1
whole-file packages/bus/tests/lifecycle-revoke.test.mjs 0 c0810c743b5108773b6cfbc2d108fa09ea274c437433355277ce2b1295fbf692
whole-file packages/bus/tests/lifecycle-verbs.test.mjs 0 926bcfb20ab58a4ecbe85b4f8feb915f72adcdc6d6aee84f814187d0ac998efd
whole-file packages/bus/tests/limit-checks.test.mjs 0 919d745dc570172716b1e06d0ea1e8f16ae7b05dbadba77fe92dbbcc8eb4cba7
whole-file packages/bus/tests/limit-stop.test.mjs 0 2fc1ebee4e4d4862a100ed9ba97ace1e6d3fb3c608abea63b1ff634a04d5649a
whole-file packages/bus/tests/limits-runtime.test.mjs 0 5845176b73f98a499d92096ce0d22a3987ada664a529bdbb26230c2d00b9e65c
whole-file packages/bus/tests/limits.test.mjs 0 333f6757d9d00eda74e7d4641af660c9a0ce3d978e6a8550139d3a461c1d5866
whole-file packages/bus/tests/message-citation.test.mjs 0 38422c1d6faf076c750c3fccb7e927e38fe955cc28778511acccf5704df5b191
whole-file packages/bus/tests/message-filter.test.mjs 0 2ba52728df27756ac19ba65fe0705e7cf7a2a786a3b4df77a4eb4eec8072604c
whole-file packages/bus/tests/messages.test.mjs 0 b87de4ab04682d59a2faa7b3fc64751247454e628e9c1ebd4c07b1df2acbf11c
whole-file packages/bus/tests/messaging.test.mjs 0 831b48a9de594e17e8fc47f16ab8c2d722e8d57068a7d39deeaf4c0fa8d136bb
whole-file packages/bus/tests/model-proxy.test.mjs 0 99c5128733ae5bb16489171513c158ec1e34dfce1d07c60f6bccb0f84ab7afb9
whole-file packages/bus/tests/name-migration.test.mjs 0 bb8f92a17f6a022c7ec63161cccc0bb49a26c2a591fc369375cbebfa93a277a2
whole-file packages/bus/tests/names.test.mjs 0 0fcf60cc8c7dee3e85548c759f03e1792de92b59131bb9fe4282a3b07859366c
whole-file packages/bus/tests/peer-transport.test.mjs 0 3cb547003e50695ec2a25c950819b304f15203302281c00758a12c9b89b60f40
whole-file packages/bus/tests/peercred.test.mjs 0 e75c700a68ba0c1013c8f36178d6554f0321dc331b2198fd5ffc1a684df76c3e
whole-file packages/bus/tests/plugins-verb.test.mjs 0 359fef350befd1d743bcca89a96ebd0757346fd7c0622ba364039ba827620d26
whole-file packages/bus/tests/principal.test.mjs 0 732724e6bb2bb953e7dbbbae5c23cc0a1c33a7b7b202f5cb8b46be9363bcb392
whole-file packages/bus/tests/process.test.mjs 0 9c5883ea2ca858131317fa9be66d2a51a5d86dbe03c515b0544f4db56b2456a1
whole-file packages/bus/tests/processing-runtime.test.mjs 0 bb6b94ac654d069abd6e484031893e649e239d933c135b226d1cb2fbd5a94ca9
whole-file packages/bus/tests/processing-timeout.test.mjs 0 323036aa7f32f7aa324f61595531a29f3d5ef0ae2c24aec029842f2783d6be76
whole-file packages/bus/tests/processing-web.test.mjs 0 dbd1543498fbc8d0625990436ae668b3a382eedeecd098b929c13d2bb61939ff
whole-file packages/bus/tests/processing.test.mjs 0 529ec93e767444970ff03acb1ba719b45033daac239256c9cbd587c39f926a71
whole-file packages/bus/tests/project-await.test.mjs 0 e948d721ef06ce95f909880942f7e7ebd73b2f42563e1faedacc7b403b8ebedf
whole-file packages/bus/tests/project-files.test.mjs 0 3691b04705c17d4ef7218bc15771560aca5586c00ba0fd3fdf2a80f63d8dc659
whole-file packages/bus/tests/project-runtime.test.mjs 0 9d8d6cedeb2044f19e548dda0e32cae1e997b75a6d89072f7367b6e0ce17a44f
whole-file packages/bus/tests/publish.test.mjs 0 87f7a382580432646ca89d1228377719cb177bfdbb4f74ad617f6a70dbfb4b33
whole-file packages/bus/tests/reload.test.mjs 0 25aa45aca6ba24d72e9e5ad66dfc8c049375c8df121dd748dde09af52f16f853
whole-file packages/bus/tests/replies.test.mjs 0 0f05dc2194896540a1488310107e31b7e779cc02c381c201d0c95f69ab39fc51
whole-file packages/bus/tests/requirements.test.mjs 0 29569dc30659dbecf359117cc9a59ff37927c60f5514b8ceb8d3796c2c3e53d1
whole-file packages/bus/tests/review.test.mjs 0 a8daea8602be9429a8044ad636a438c18eee8ec77b6fa272dce606116d01de8c
whole-file packages/bus/tests/revoke-window.test.mjs 0 1435c543c9367204f4ae6d25c2cb97145e762cb18e78ea90a15eb1672a220353
whole-file packages/bus/tests/room-check.test.mjs 0 bbe5ac7abfb7e1b30f6fc8f9a247cd28aca82a8783753434339b790dd9857e1c
whole-file packages/bus/tests/rooms.test.mjs 0 506fad116ab1d9bb2520fe691adc91ca26e64faa96ced35c193cb11da4e07ccb
whole-file packages/bus/tests/routes-verb.test.mjs 0 c09fef3cb022bf7713cde4e1c512feefe67090eff05451fda9f55272140c916e
whole-file packages/bus/tests/schema.test.mjs 0 2a1a668dc408aaebe6f604ec5c3b8858211edc52930e1a552173cecedf806d72
whole-file packages/bus/tests/session-clear.test.mjs 0 1fce03f1d2a41f5ba294e9d406980a1d3251bc9a5dd4a02897413d6be3d9681c
whole-file packages/bus/tests/session-compactions.test.mjs 0 745510273a9eaaf61de4c6453c5dcc70e4a6020c0bcec69673621eefa593dab7
whole-file packages/bus/tests/sessions.test.mjs 0 d6c0337e0981ecb9aae2e912c27145bbd831e196828b2d59029666ceae5f605c
whole-file packages/bus/tests/single-use.test.mjs 0 6f5cf7d47716ce94eccb069f9b7e5625c3587737921231649fc74e8bfd3aad3c
whole-file packages/bus/tests/spec-migration.test.mjs 0 ede4ca62a772261bc868f4dfcb4861c9c3670110ba2afd39cc44183398c2eafd
whole-file packages/bus/tests/spec-review.test.mjs 0 951aa2a54cfe4bf0960dd3d2180874cb8183ff9b0aee7b7251b05df11385e1a5
whole-file packages/bus/tests/spec-socket.test.mjs 0 65735a2557e19b3d63a3ce7198c80fb5059f1974acd0708a89f192857b43b095
whole-file packages/bus/tests/spec.test.mjs 0 488ab443b41b06b6ae4434f5b2ee8904169aa08ab3527f3ae4c3f438e54f9909
whole-file packages/bus/tests/staff-request.test.mjs 0 edeb4ceffae3af33e330e1fac5d74c4fb1861d52ec5ac5005689791ab74da555
whole-file packages/bus/tests/state.test.mjs 0 3b5f916c494563fc7c18f89450e0cecbbdad8e24680b373e897253b9ea6064fe
whole-file packages/bus/tests/store.test.mjs 0 39d0a4033b89eff9b29ea6dcf6e56696a1d20a41e0e14b4bc8efbfae7962ecf4
whole-file packages/bus/tests/task-page.test.mjs 0 6446cfc1a43cb4206b4130f316251d3d9a820f929a6efc59dc74e7cbe1fbd258
whole-file packages/bus/tests/task-read.test.mjs 0 37134ced43ad5ada4291ad5e3474dcf7063892443b06d54a7456cd4cddb9cf2f
whole-file packages/bus/tests/tasks.test.mjs 0 9d91ee510a7447545c2cf93ae6779544a05e01bb70346e595b91a4800fa42d7b
whole-file packages/bus/tests/tester-threads.test.mjs 0 ff843610e02f20c5e1ab19de27b131ae7cbc3fd87b16d85e68336b5e914ffd77
whole-file packages/bus/tests/tester-writes.test.mjs 0 517c41e666d2c59b7ffb6ddb22898ef58b816bb26eaa47e1ce7508087b607df5
whole-file packages/bus/tests/tester.test.mjs 0 19eff6ddb3aca05ad5c006ac15e7860311f56941055850e86b8075cd39eff0d1
whole-file packages/bus/tests/thread-claims.test.mjs 0 ee146e984bb3ae82ad60f90c83035053ff2966ffea91015b6c3c4f93b7e019bd
whole-file packages/bus/tests/thread-migration.test.mjs 0 1dc2ae4e920d40a6fc2b1033f43ac0a2f766bfb86f07a596a983b9c1bccf87d5
whole-file packages/bus/tests/thread-shares.test.mjs 0 3f99a82e9e4a43fa788ebb231c5e712969809fa83b6ca66f04b8cad13f411235
whole-file packages/bus/tests/threads.test.mjs 0 2e5ba2be69a34c71f41a819c7a5e8615fcd085f847f9aa6d16095b9c8d742552
whole-file packages/bus/tests/transport.test.mjs 0 c9d28b9acfc0c2213838df0d960506156ef6fffec24a0cee7336324f105fac0e
whole-file packages/bus/tests/usage-broker.test.mjs 0 26fc080c6ffcb7c64cca39a07f302b59c21d1425ca3c90120eb3d3bb751c49da
whole-file packages/bus/tests/usage-migration.test.mjs 0 cfc65c4233aedb325293170e782ccb83fcfdd85cc4afed1e913e91785fa4b7cf
whole-file packages/bus/tests/usage-runtime.test.mjs 0 faa5fce30cbd7002137acfca3cde68b49b74321fb27b8a190736b35601430866
whole-file packages/bus/tests/usage.test.mjs 0 d36d21e0b3f5c9621b50e8b71ff6d8daa341f5954f3612b7cc93cb6c734215c0
whole-file packages/bus/tests/user-principal.test.mjs 0 1b56d881de2975ec4e3bc27fa15bc495ae0600709457da579337f0c9c98651e5
whole-file packages/bus/tests/viewer.test.mjs 0 942ba4fd96c3bb4c527eb129e69ddb5cb7660915e8458cfee47661d268db0e24
whole-file packages/bus/tests/web.test.mjs 0 048e3ef2840934f95d7e00de6502b19342215cfe5d00d1b8ada7c1bc6e87cfa1
whole-file packages/bus/tests/workflow-roles.test.mjs 0 1bed1351ec3c50ddce65f9b8108f93a5c4061ef5cf36f3d09706d85b13e085ed
whole-file packages/business/tests/case1-business-file.test.mjs 0 4481abbce73eae119fbedc5edf65120fa494931913aac6f0273b04263c251cc9
whole-file packages/business/tests/launch-settings.test.mjs 0 540f5170ddc7e79a8abd9584c4586eade3ecc1f7544489060db99552c75e4685
whole-file packages/cli/tests/access-boot.test.mjs 0 e41e1f1949d3568f8845234d573282c18a185578389d6947140cf540d7f99dc8
whole-file packages/cli/tests/access.test.mjs 0 9e2a813092ad4b60cd89443424eb4142f217265e52ff7b769b7f16d247d5a367
whole-file packages/cli/tests/app.test.mjs 0 5f5244ba0061dc4ffd1565c4abd3168d7cb2e6398625b69c841a54544b9a35a7
whole-file packages/cli/tests/boot-status.test.mjs 0 ca090577e20ea46315cb377668e309571380e2323c867a8b90d0537022e681b7
whole-file packages/cli/tests/case1-hostcheck.test.mjs 0 403e1127da5637904e8fe1c1eed5a7865c5bd5ee1c5d0fe684837a7370c41de4
whole-file packages/cli/tests/case2-install.test.mjs 0 df8edefe13297ced929d09f01eec5c7ecf38c355d9871368cb19f2f392ae057a
whole-file packages/cli/tests/case2-persona-import.test.mjs 0 5dc7a93c03567ec0e85e43bcafe07109881c30b2e83b4c4eab4631a155daece0
whole-file packages/cli/tests/case2-unit.test.mjs 0 39b349dfd3125e74b780ce28e9ec24465a6a8c2bb9e431c819864f4eff1fdb77
whole-file packages/cli/tests/channel-cli.test.mjs 0 9fd9c30aa604f77b7a069912cb987293af36f2f138cce850f8d26946f5ce42cd
whole-file packages/cli/tests/channel-recovery.test.mjs 0 52c6bd980cd54ef22b9e6c78260a1e389e8177526340129ac64fbafa7f2e01ab
whole-file packages/cli/tests/cli.test.mjs 0 59327fd89e3fb8f927210df6a2c62afe4522e59f59129b1967be2a238c498f26
whole-file packages/cli/tests/compactions-launch.test.mjs 0 c9006b3039a6616be1816f5ce85bf68ba4fb54dadf10447e52fc92f7ed57bbe5
whole-file packages/cli/tests/config.test.mjs 0 35e39fb0551e23f5738d0c30d66bd233f2290040885c511e526f0f0468b31cad
whole-file packages/cli/tests/credentials.test.mjs 0 2b55cde2318a034ec4152e712863ac54f07f1b4db752c6282507d7f621bde67d
whole-file packages/cli/tests/federation-acceptance.test.mjs 0 cca971a93a5dfd20e603b45cc2158b58ea0638e8bb7a33e6e0c5e12178ffa3df
whole-file packages/cli/tests/follow.test.mjs 0 26a3ad0dbc124aff48a5f4908e3d8b78cb871e5560c0e389de457f58aea2dfe3
whole-file packages/cli/tests/git-socket.test.mjs 0 10c21c34a79ebd5f89f6ed9182a492e9f42f0512a68f758c0566a763a84abeb9
whole-file packages/cli/tests/grants-scope.test.mjs 0 37967ca8e82a89a0e88ed872fa562b5c094282cc759853b6dc31c292204bef3c
whole-file packages/cli/tests/grants.test.mjs 0 687af745932625ea1d439a8139c760f14b4a327bf9b15c5b5b1cdbc7ea6be09f
whole-file packages/cli/tests/host.test.mjs 0 50010e97e44392f28006bbd4127146b8aa1712ff4a016ca10864923701213dce
whole-file packages/cli/tests/hosts.test.mjs 0 d5d507c3968c45b2aa25067d6bbb1eedd69785c0aa1bb51177c63b6ad64fcb53
whole-file packages/cli/tests/idle-stop-race.test.mjs 0 8e6171855003b0f40921863430dc89cf20f8bbf14a9ce3c115f90486f08232b5
whole-file packages/cli/tests/instances.test.mjs 0 c6b4d59443baa4af029af76a846a8093669a7593490f21408a2c40ad027acccf
whole-file packages/cli/tests/launch-account.test.mjs 0 6cb63446fc8dbb6217e6d925caabb37a28bcf1ea5c27cf8d515d67c7842553b8
whole-file packages/cli/tests/launch-limit-checks.test.mjs 0 fae971d715a90d1dbbeb3c054932a02d253e0a0d036d3b0db4e0c9edcd5ad7ef
whole-file packages/cli/tests/launch-limits.test.mjs 0 d3f4b2c57e776bf6bbcafba6dbd9c4728918b0d81fc606dcd7d2dffefdad4001
whole-file packages/cli/tests/launch-routes.test.mjs 0 e2bec020f96238079908c03537366c64800de0913a83f3a2877606d0266548d6
whole-file packages/cli/tests/launcher.test.mjs 0 beafda99d34a532f3a1d6f96565b7a780e03924939b6c30b01a8169cceaa792a
whole-file packages/cli/tests/lifecycle.test.mjs 0 014a2cea6d3f2a9f21f7fc16dc68b34740b03726612851047b877f8c1194ebe0
whole-file packages/cli/tests/limits-tokens.test.mjs 0 6fdf9e6946dfb579cde42ec500d8cb8473a9d8318f43caecee7561a5e40fdec1
whole-file packages/cli/tests/limits.test.mjs 0 bc2f13959d087ccaf6977c4cf1294e6fcee21f968677ab169580ce79643add18
whole-file packages/cli/tests/mark-read.test.mjs 0 64864c54ab910488d55136b88f351771489cf744ba1c21e5c479121694dd88ab
whole-file packages/cli/tests/model-proxy.test.mjs 0 119a5d02870a4062992efba7f44ee9dfe69ecf8a7076f121aa24a8c7edf24cf0
whole-file packages/cli/tests/names.test.mjs 0 c2160aeb0c68855f59b5d97dc3b6101b7800028df708f5f42430ae5854eb23e2
whole-file packages/cli/tests/notifier.test.mjs 0 18e62f48de18cc4d57916a556adeb3befb13921d5d7b036ef5a7f2bfa460cdc1
whole-file packages/cli/tests/optional-tracker.test.mjs 0 e5adddfee06b2f1cbd2ec50caf84b5acbc58d4ff4ec4c1bc539a4535a3991827
whole-file packages/cli/tests/other-tree.test.mjs 0 2dae57af2b8d508f2792ce37191aebf0cd28ad75f7621d4ab9f8d6daa60b748f
whole-file packages/cli/tests/processing-cli.test.mjs 0 44b2854ba03810cdda3ccf0c6de883f953089d532bfcdc8f4bdd3faffac80fe9
whole-file packages/cli/tests/project-name-repo.test.mjs 0 0468b9ecde6189d1398eef2e7e8043e870aa867a8a9d22b20b2ded26dc1543b5
whole-file packages/cli/tests/project.test.mjs 0 79e648106151ca220d9535b16c416dfdcffffaed41e3c211e4325c151f0775f7
whole-file packages/cli/tests/publish-socket.test.mjs 0 59a02b1fcc284407b06d0d2df8e6e1e5323059daa2e47c690f30a718d1e7c682
whole-file packages/cli/tests/reply-limits.test.mjs 0 554a353d61891c3cbe8da01062025dcb0756ba4f4e7ab3fb8d7b56ceccf64437
whole-file packages/cli/tests/revoke-window.test.mjs 0 743fdb0135e507dea5b968265907e5ac9228284b130feb0057d91e70ad561c02
whole-file packages/cli/tests/session-clear.test.mjs 0 5abbd894dee9cfcb3464a40e5045f9062402d5ffe567972113715cc9e24c6ce3
whole-file packages/cli/tests/session-cli.test.mjs 0 c469aed70c1ae408e176189f23a849f3acf0bfc7dc3ba1132c101a931359a462
whole-file packages/cli/tests/session-launch.test.mjs 0 cde78f9dcee9afa243692fb0493697104425b61589bd7be6c4cbdb0f4bfbd5e5
whole-file packages/cli/tests/stack-copy.test.mjs 0 3b92b3772c060378cd2ec0c1bf7fe6662721721a11d99d83c9debe3e3aa929c2
whole-file packages/cli/tests/stack-instances.test.mjs 0 2839e390f564a6e58cd514ce4061ec0b741ed07b4e2b755a337439737601d97e
whole-file packages/cli/tests/tester-http.test.mjs 0 bd9c598c84dd0be3b9873176c63e418ccc004265153be68e0cbe51c40b1ff91f
whole-file packages/cli/tests/tester-reads.test.mjs 0 50a71ffd9093c4d51d8ad07bc9edbbd76306922f290d28194d656cd78f8528c5
whole-file packages/cli/tests/tester-threads.test.mjs 0 cd3dd0020472c269d61934ddb32d77f6dc297090d63e819288f4038fe9edf096
whole-file packages/cli/tests/tester.test.mjs 0 437498258b4ea5c2f2bfa8fe66114106ac10944911bd40bca944f2078b34e45f
whole-file packages/cli/tests/thread-cli.test.mjs 0 c29897119f279434bec0248c12beb5ce97f6214b8b0bec995061000f047b1600
whole-file packages/cli/tests/thread-launch.test.mjs 0 459ef35e2b4f9cb87151577f252282a716ddbd4985f26e9e26c01b08af13a7f2
whole-file packages/cli/tests/thread-revoke.test.mjs 0 b8a72080a9624ce4bbc1b23b8903be1b74a8a6ced35b0b60f503d92a22d1028c
whole-file packages/cli/tests/trackers-boot.test.mjs 0 f83d72dac4eec7369d62b495745e1fdeeb4ff1ba2e1efb376c9b583da1765a1d
whole-file packages/cli/tests/transport.test.mjs 0 e0ae6c26b5669d4b955deffe941a3c4314be12297e72d6c099de750170688d9c
whole-file packages/cli/tests/usage.test.mjs 0 639ebccda23e0e094d62cb0e7e5c80c403b74b284ac5189fb0d92e63387c92f8
whole-file packages/cli/tests/verbs.test.mjs 0 43eefd242a987efe42d145d7863372a2b0a397031baec12ecd4c9e0644daff12
whole-file packages/harness/tests/bundle.test.mjs 0 75fd5a9a6fa0b46078952ce216348e39ce481f6fc00b89f85da9ff729d5ba100
whole-file packages/harness/tests/citation-runner.test.mjs 0 933021f114882a6c58f4071446a07d49ebc9f99c062ffe1fedc1f13b799db389
whole-file packages/harness/tests/claude-gate.test.mjs 0 f66053597c8209c5175810e33d8b878ad74eb314f4057f5b4b0b1ac625272329
whole-file packages/harness/tests/claude-session.test.mjs 0 9c4d8ffc00efd0da75d143bca1cd33f30f3e762e20086270d941170e80c962ed
whole-file packages/harness/tests/creative.test.mjs 0 3433184ced3427613d645807f0757896baf52d214c3dd6a4a12c3951bbdc50ce
whole-file packages/harness/tests/gate.test.mjs 0 991670779d9cf6f733d0060c6f1a59d122ab8e99f7e0a5f7183c9e974f1b1aaf
whole-file packages/harness/tests/git-tools.test.mjs 0 2837565ec16cd8c4d032311675a1468bc4bc756ee0696d0e57ea35ffd56eea44
whole-file packages/harness/tests/library-tools.test.mjs 0 05a8a5d8e8c4e7b3435d4a9b3f6292816356a99f7156ded2ef7873e1c84f8de7
whole-file packages/harness/tests/mcp-server.test.mjs 0 6ce4c6c39b8a1ed70fbeaca410781a62d69a6412333e03640296048b799a09b9
whole-file packages/harness/tests/pi-session.test.mjs 0 570376f798b43e82bbc1972f1d50d3915e94a8e4ca00e50076ab390df9830d7d
whole-file packages/harness/tests/raise-domain.test.mjs 0 aa6be675614d9324c3ddc01ef40347b235adbccfe6cd73081096ae9e9742d754
whole-file packages/harness/tests/runner.test.mjs 0 d3f8c752897e359e10a8e9d507c10ef3760a5ae37999f6f143cb222c42568437
whole-file packages/harness/tests/skills.test.mjs 0 2f34800387f4d7f8b8d5f6758cd197f77d11034011bf7f4f79f4d74c582e3f0f
whole-file packages/harness/tests/spec-tools.test.mjs 0 29cd1f7094266963a995f636d9575337246a9868d42a48f02231a99251261f47
whole-file packages/harness/tests/tools.test.mjs 0 f27638f1fa38fd2d15a352f6c21f7980688d48d580f5a59dab1520fd7c30b30c
whole-file packages/library/tests/guard.test.mjs 0 6529c2b48c252eeaf9c19487507a03cf46d952e7ffb3a41e640a54590e312df0
whole-file packages/library/tests/index-build.test.mjs 0 4747cb8c842cdc424db727cb3b0e36a6d35f4e9c5c31c1a3bf61314897c2cf6d
whole-file packages/library/tests/links.test.mjs 0 9b89f9275f19035c5f079b6920b248466048626c634153eba2fec165f9f6388f
whole-file packages/library/tests/mapping.test.mjs 0 9110b98f955dd71588357858b913194ccf9e04dca9aa7c4559600cbe9b9e8e71
whole-file packages/library/tests/mirror.test.mjs 0 cc2326da9796dbbbf5b3faa121180a7f00c43816a232a96faece7b58570f1227
whole-file packages/library/tests/query.test.mjs 0 f1209bc132a63cba9a7312cbed7e3098126e05c792356648f1d9ec497a11aa82
whole-file packages/library/tests/reader.test.mjs 0 3e17f34697ae65524cf7908dcc9ca1b24025bbc92989b2ba05f6e75c0f839c3b
whole-file packages/library/tests/render.test.mjs 0 5e68091a309a07e5502b9cc500c7cdfabaa9e246bb77b0c04a0dd86bb9bfcde1
whole-file packages/library/tests/scope.test.mjs 0 f55dec854adcd311d614b66959c5655cb3419d7ae7b06fe1f648b43cdecef32e
whole-file packages/library/tests/supporting.test.mjs 0 2f50bbe9c942360a5becf5bb984ed5aedb12628d4578ea85c6e433ad0ad73130
whole-file packages/library/tests/survey.test.mjs 0 72108eb8a07b990b93ca62c5fa4b55f1f89f3254ca1cf59d3de8ad194dcc3a0d
whole-file packages/library/tests/sync.test.mjs 0 a68c69492149b6e9dc7dbf24fc434ebfd3243b2db2c7654b00107b997e99ead0
whole-file packages/plugins/tests/harness-compactions.test.mjs 0 9eb9f67c06ae17b33198fbcdb443a0c73ca9cc0cd157cae2359a0647d2db3658
whole-file packages/processing-control/tests/task.test.mjs 0 8db6adda6b5d5f7437e9e4cdf961134493409d7227fde02c0b0a76aeb21186f0
whole-file packages/seat/tests/compactions-budget.test.mjs 0 1849994f45bfcccfb4ce18915887c740947a98041aa7bd66590ae7a62fa7078e
whole-file packages/seat/tests/compactions-ledger.test.mjs 0 af689c631c9d62dee11f4400112fd10df82567c1f49d9f0d423b9d19d6f860d7
whole-file packages/seat/tests/compactions.test.mjs 0 cf5e74e1211560ca47a2c13e8002635097f486e2ca06698795bc38263d889f3c
whole-file packages/seat/tests/sandbox.test.mjs 0 c09d89b8e1b22db25578f62cd4a1d3b9f441d652178fb675800efb31de33a577
whole-file packages/seat/tests/session.test.mjs 0 82171646932cddfc68f0e90ca3355f9595d32c5d228c1fdb855c06cb1d9c2feb
whole-file packages/tasks/tests/adapter.test.mjs 0 8843067c21942ae6165a7feaced2382fd9d02d0c62bd30772191393cb5d962b8
whole-file packages/tasks/tests/comment-restart.test.mjs 0 25aa6e953cf19ed3ae368581035b9d883ed924b41d593240e2b4ab5ba39f2982
whole-file packages/tasks/tests/fields.test.mjs 0 e4eafd6b17a46262dddc548263da993bc3a672adca1cadcc698b6d8374f11e2d
whole-file packages/tasks/tests/processing.test.mjs 0 0b89866cc076c43c37534dba926d492d8d334d08a6886325e3d4ac6ddbc88897
whole-file packages/tasks/tests/shapes.test.mjs 0 0b8cc660a07e048d007993d726ae5b8e1f343cb571c18ee0284c3ba0c4b41602
whole-file packages/tasks/tests/startup.test.mjs 0 5b44d779ab4ec86922dd35ce7c78096de02c0a0f2363cc6c2a5ee07816efc2ad
whole-file packages/tasks/tests/sync.test.mjs 0 513ce9f6e64a3fa0179f8cc9b27db671267a43cdc44ab93f38d21982dd2b9631
whole-file packages/tasks/tests/tree.test.mjs 0 d3c8f91f59150259b3226e9306c98efbaf2aa17b5b74cb9b376a103620f8aefe
whole-file packages/tasks/tests/verbs.test.mjs 0 47b075d01ef38a5d0228902a6f9bcfec0b78b1a958cd071e8114139af73bca53
whole-file packages/webui/tests/agents-browser.test.mjs 0 d3ae822399f58d2c4dfd90e054811a60663a66f9d3fbe69a76aa4ce7dc7260d0
whole-file packages/webui/tests/agents.test.mjs 0 be18c8fed41173900617d3b646fac1ce14c07c208e7f24d6567f61f55c5c4dc2
whole-file packages/webui/tests/assistant.test.mjs 0 056e4c2a37b7b395741ed1ba33546031a6e4ca53db843bd877b93bed764e02ad
whole-file packages/webui/tests/board-held.test.mjs 0 01a24d222092ad46c24ea94f684a018b787dfc8d26a0f7d7fda5d9df7192e695
whole-file packages/webui/tests/browser-edge.test.mjs 0 4d10b4fcefbc64cdf12bbfbd9b47f74810b3219f70624c35490cb23d66d3c4a1
whole-file packages/webui/tests/browser.test.mjs 0 d8c31b7cc16d93961d65959fa9653eaba906f81da3a34e19b3da7cc922f840c3
whole-file packages/webui/tests/bus-browser.test.mjs 0 ab1538aaabfdb02c336da61675a0d1d7f367483bc500a380e7f0ece050ab8609
whole-file packages/webui/tests/bus.test.mjs 0 fd7acdf189fef230af80c32c4c972d9bfb1564069d7c4ed649c3a49bb6636e1e
whole-file packages/webui/tests/channel-chat.test.mjs 0 678b8e3c9152662487fee1c52c8abcae95029b0672d5bbe26a824bbdb4a7ee0b
whole-file packages/webui/tests/chat-browser.test.mjs 0 ec29dd03ac7950dfa90e31f72ae74e2112718f1c02ce4dce8055194a328b5f5b
whole-file packages/webui/tests/chat-instances.test.mjs 0 72c88b1eb11397bcff524af72cfe826a276b97b58e33465c6e3334e2746e7783
whole-file packages/webui/tests/chat-replies-browser.test.mjs 0 bea9b1f9333bc913b2f01c29a792ea4b2fdbed3ebc64b42548e06f0bd75c9fc5
whole-file packages/webui/tests/chat-sessions-access.test.mjs 0 f2de41c7d1f6e246a8a13dc33e8662932964facc5b93d8f85ed5fca760c87fd8
whole-file packages/webui/tests/chat.test.mjs 0 4c6564d3565b01d68f7d16937aafddbef2ec3e04744fa9d1544ac0500a386ff7
whole-file packages/webui/tests/conversation.test.mjs 0 1c3f8811256ad82d7771a06878c3e70dc3d6f2beab82366b837780a7873ff6f1
whole-file packages/webui/tests/decide-browser.test.mjs 0 c53e1b962df99686f9739e258b2b86fe6325544ab02509833f9b1176f1303845
whole-file packages/webui/tests/decide-sso.test.mjs 0 f96f8085015a96e11aca2d94bfb9e75318c0c0dfa9659049ec7b7e31ad7bc6de
whole-file packages/webui/tests/decision-http.test.mjs 0 c89b7af200edb82f9986479199f359cf6a06c870f1bcf22b538cdf3b167f1258
whole-file packages/webui/tests/discord.test.mjs 0 1c3e6d64a370adbc6c7cb24391989e9c00d97330d393943402ff5c6a99c5f9fc
whole-file packages/webui/tests/docs-browser.test.mjs 0 f39d989ccdc561175643583b27bc19ee76fa25dec5947baa206b0c38b41c1e2a
whole-file packages/webui/tests/editor-browser.test.mjs 0 c807f81d596b3a2e3d2ea55e560f29e181a0354ce48676c6760844855acb0dd3
whole-file packages/webui/tests/editor.test.mjs 0 6953a85fe791e9087d14c3bf5075de2c4a651e1a502937da3226065c529ffd2b
whole-file packages/webui/tests/granted-user.test.mjs 0 ae3baaa0d2a1ed1ad3e9625a46a8071222dfdef4c2a70ae3ba5bf159b85dec0b
whole-file packages/webui/tests/history-return-flow.test.mjs 0 8f9ceeb41a64ec2849383a78f4997f7383c86a01eb6cf1d16747c2eb6c7448d4
whole-file packages/webui/tests/instances-browser.test.mjs 0 33b9cd4be552f89809e75f72c54f73dbe6459a5c53401a79a4d887e5a658c442
whole-file packages/webui/tests/instances.test.mjs 0 904abfc06358c99b0f646c3e728027cd7bba2b27c98c767c7da95016e531277c
whole-file packages/webui/tests/library-cli.test.mjs 0 dda07bd1b0d65058723c4d5e50f94fefb1ee103c33c8f61c13841cfedfd53f41
whole-file packages/webui/tests/library-routes.test.mjs 0 5cd1f4c6ea99cce38ce59eee085ab31f9aa8bba39cebbaf52b355c4d8fec3098
whole-file packages/webui/tests/library-status.test.mjs 0 0b4fb5a07a3d35fb2237401b460ddd3832a2f6fa357f6fbb06b8463251b77faa
whole-file packages/webui/tests/limits-browser.test.mjs 0 1a55050c92be5b93e447878feafe59e017b205d114413e6de000faf784df1dad
whole-file packages/webui/tests/limits-route.test.mjs 0 b74fe734b0ccbdde716bb52bc15791f80a0b251514a6b01d6ba59164b9639123
whole-file packages/webui/tests/messages.test.mjs 0 19bce52278091c8d37ca48c1f6f72bc400cd9a9b3038ae9f31e35444fdab05b8
whole-file packages/webui/tests/pinned-copy.test.mjs 0 a8c99249fda05c5be773c8d2231e2dd1a3f3b7d10a40a7ec3e6ca6c6cfb4c85a
whole-file packages/webui/tests/preview.test.mjs 0 7f7fbb11dd5915b3351b5086ec9b0f0bed6837a32a2e5902b707fcb54f1bf1c3
whole-file packages/webui/tests/processing-browser.test.mjs 0 ed5970f1e2b1fa393c80db5e5551523e77ad0ee107dfa686a76c5d923b7e2d8f
whole-file packages/webui/tests/processing.test.mjs 0 ac7a3a0ff51bb15c04e228186d771dd75ef515e09156cd080a8bea881e7cdd8d
whole-file packages/webui/tests/project-file.test.mjs 0 8bf04994dec5c6d6670bbae055802759588c27b04010582732cbbf32c2921487
whole-file packages/webui/tests/project-name-repo.test.mjs 0 ca773d7109f132bd099c43003a8269edfa96b2ba3a9e01e3694fa6bd12b9143e
whole-file packages/webui/tests/proof-cli.test.mjs 0 5095f1ec66a3fc153467baef2291073e27aba17fdc2757e0a3cf2a03057a6547
whole-file packages/webui/tests/proof.test.mjs 0 cdb948d261f52232c6e31e25baaf234bd0af3b6d90360a41a6142d2f34a8a797
whole-file packages/webui/tests/reads.test.mjs 0 ef69c9c1dc9a55d526a704297aa4e2802cdca8f0e1fd70ff79efad2114a071a6
whole-file packages/webui/tests/relaunch.test.mjs 0 e9f075560291cb446dabcaeb86c8800b5ea4ca0396c6a999ddbff88b245cefd1
whole-file packages/webui/tests/return-flow.test.mjs 0 bf809ee139c15e9b6b8fe7f6e0f2ce00d0860aa460f145242fc732eafe8da8de
whole-file packages/webui/tests/room-browser.test.mjs 0 23286bf46f341220f9e89cc1d229f46a579edb2eae5d688fc768f99ee343c858
whole-file packages/webui/tests/room-http.test.mjs 0 a921e1991386cb5e184475cf47a012b3020b575968268e9f3c0b396e244a1819
whole-file packages/webui/tests/routes-browser.test.mjs 0 df1283a6e1c5970b404b314b6b76dbf412e5318d76f296ec00164c932166b020
whole-file packages/webui/tests/routes.test.mjs 0 055aa274fa66910a4ff1518fea49fbbbbbc5360dc16e825a460538f312a0781d
whole-file packages/webui/tests/send-browser.test.mjs 0 da1547383522dbfd74a571b5d7625a310ae88f8adddff0c2bd33cb59df3ac137
whole-file packages/webui/tests/send.test.mjs 0 f273e78388935b5fbc18a974f50cb85789436d51c47a4d8dccaf4af4742c2392
whole-file packages/webui/tests/serve.test.mjs 0 1971344643d9cf6b4440d95c9ede42093235883ffab04fc4b614c1b7e7078f22
whole-file packages/webui/tests/settings-form.test.mjs 0 80bd949d1666f2fe1f4caa051e2c34e742bab0e4adbe5584bd534d9bad8bef53
whole-file packages/webui/tests/settings-write.test.mjs 0 7090474fff40910edb93c032feef248adc40ad21666d09c3610cf10279164f99
whole-file packages/webui/tests/shell.test.mjs 0 844287f7797201473f1fb8d97ff2355ff3ff505006723678db78f26d3e5c2a40
whole-file packages/webui/tests/sso-browser.test.mjs 0 1f70c36ce7d054ad435e52d63083c8fe19cd71e70c723518de5e58b69a426a0a
whole-file packages/webui/tests/sso.test.mjs 0 6d7b3061bdc6e22744634ddc5612ff781e5c952a120a346c29eead66a3736438
whole-file packages/webui/tests/tester-browser.test.mjs 0 425c54a84e5bf04ca91d8dc57ee83c14aff14a38159243f10f1c9114dd563967
whole-file packages/webui/tests/tester-cli.test.mjs 0 5eb7296792f16f24d4486f39101007114b3db81c6ab53ab969e925caaffaa7d9
whole-file packages/webui/tests/tester-listener.test.mjs 0 43927869c50a0e223d121e2dea2d10346a053a39fc8157c9fc4813b7c3b17e1f
whole-file packages/webui/tests/tester-socket.test.mjs 0 c05962be7f87084404c53e4f7ed2caffff3d69e98e69a3c9f3c53b150cc804e5
whole-file packages/webui/tests/thread-claims-browser.test.mjs 0 cbb2aeca0de2c64dd4c8d063d3e45140738d8f4064d38effeaec245ed7181b42
whole-file packages/webui/tests/thread-claims.test.mjs 0 164a6c927abd819218be6386e123b234dd9955b122bace699e0a12201797791c
whole-file packages/webui/tests/thread-sharing.test.mjs 0 ad64ab207702483aed6f16d13393e5f3c5a1ab0a0c2dcdf32717e8148a45078c
whole-file packages/webui/tests/usage-browser.test.mjs 0 14be967dcae157cbb0a7b9ea4e0bc67337941d91a11d789baeb3d3c8353ac0e9
whole-file packages/webui/tests/usage.test.mjs 0 4e20eee53c3eb79dc2930ca054977d06da88dba45b706a96ed94abaea6ec3e93
whole-file packages/webui/tests/user-option-swap.test.mjs 0 bd43c257ae31cad2ca6c7a0b3ee49c6e323737d236fb7ff2a2105fd5e59b9767
whole-file packages/webui/tests/views.test.mjs 0 4226ea02d33b9de8f2eaf9f93b0a551cbd9e6100560a8811eed90aa8de76974c
script scripts/test-auth.sh 0 03999aab66446a4192ea9855f5cc1bd406080d0dfa5250b45b30e118556a0d5a
script scripts/test-conductor.sh 0 79b7a689ed96792d42edd1d14796e0293e84e2e339b49476e457ad89e1c4a186
script scripts/test-config.sh 0 2c3c87fb193e82fa17428933eb69cb2b34a589e8338f7a94aaa8256729fdf08f
script scripts/test-discord.sh 0 5c6918b4415e8eabc5df31ac5ad696ec2afdfe3d498d69eae64f228a3807eddb
script scripts/test-extension-package.sh 0 1f672a73e507cc57a204f7d3806ddcb211a0a8fb3ffccefc12bbc41e299f65ac
script scripts/test-federation-acceptance.sh 0 febb0148bc1316bba3189aacf34d7c78f5f5db5d97a35aa4528dfadbec8bfbd0
script scripts/test-foundation.sh 0 3de063333ce60ef1ca1986ecdd8ac30187a2316b7ca8e3ae4b4e6c8bd435caee
script scripts/test-land-work.sh 0 ec90beab6246420982f872a4f45a7173e7a06f4aa263630d6ec4a4865176cde0
script scripts/test-push-check.sh 0 0304c110dc5cf269fd8a4bea9759e5d48895a51c9d411814ce39ca924073da79
script scripts/test-queue.sh 0 f678da9550eb6daa5268465b3a07beefd661e506ed38b8e11bf0a1b4a68cc781
script scripts/test-release.sh 0 ad0f2a6b271275003783d3ffab5520f167ea79e26683710ce92a71600037360c
script scripts/test-task.sh 0 ad511e52af4bc0a843eabbb3efcedd88c89468ccee43be9022e23880d7901f16
mutant M1-supporting 1 0 10581fdab579db4d63322eee3369a1a740266e00a7dcbaa95e7651a7e0447ab8
mutant M2-force-push 1 0 b137e8362ae3e26a090a82e8c41c3e87beeaac43183cdd6db67aba55d5e372c9
mutant M3-forged-token 1 0 bda603c18b7b2bf468a21e139f0cff0c15c22e19c9d41cf8c50f9c3ae0bd128d
mutant M4-grant-before-push 1 0 a642ef8e57a98c1488bb787da241292e6ed5446ca4117940fb0ddb9800c6a105
mutant M5-notice-after-publication 1 0 5645138c2cef5d1999948744783ff3904a78e9cefd7421674386a2d0c5fdc45a
mutant M6-commit-schema 1 0 7201f53cb976b2db1994c4e25f7f6e8b58eea323c060dbddbfa0372464adb686
1 kind name rc restored_rc log_sha256
2 whole-file packages/library/tests/write.test.mjs 0 e0f6a09b70316beebbf33966b35bfd05b4a12b587744dadc9239bd28de1b976c
3 whole-file packages/bus/tests/library-write.test.mjs 0 e0e9e609b20ea0564a7611046026cbdfd007832e0eb13507798e958d8d106ef0
4 whole-file packages/harness/tests/library-write-tools.test.mjs 0 c8a3a493d1d2abce785e94fdda5b1732e8d4a5e6eb19767af1b7e8b5e560cf3b
5 whole-file packages/webui/tests/library-write-options.test.mjs 0 2491eb6a01a0b4b2127bcb6a87a5dc778d079b7d1ea445509a1dffc49dea9051
6 whole-file packages/bus/tests/access-revoke.test.mjs 0 a1b317bb687e8c369440f5481b4ef309615afb5a5922fa306980d2024019e544
7 whole-file packages/bus/tests/account-migration.test.mjs 0 e697b58a1bb9b37c609b441fe786e557c7f0279e7a31eea791483ce4567db318
8 whole-file packages/bus/tests/address.test.mjs 0 977f755d29a8e75578d0bef48ec40b7045736014b2e53e15a03cdb6dd39696d8
9 whole-file packages/bus/tests/agents.test.mjs 0 3e8116bad1ab5594e627ba3e9f5403414885959935bcd9e6f75f1af4c625d4b0
10 whole-file packages/bus/tests/approval-binding.test.mjs 0 d2fbee516b57857f3a6562427d2a08bd7fdb772aacabd33ebd9d2990f01ec7fa
11 whole-file packages/bus/tests/broker.test.mjs 0 400e7f0616bc7432d8cb2a9efbae3c84d5b44ef59ce7f8fbebd4c802e2a9f44e
12 whole-file packages/bus/tests/business.test.mjs 0 f42502884a158ed1d190b37b3884e19d44547ececf068f91765b8ad15faffba3
13 whole-file packages/bus/tests/channel-proof.test.mjs 0 3984a7e2da2a60e60d0309f719a45a3ef04bca767bac34e00a760e19e941d732
14 whole-file packages/bus/tests/chief-of-staff.test.mjs 0 8dd57acf0101d4c92ada92f4c33f68061d4e2cb430179a8ab99a0b7fc9a19997
15 whole-file packages/bus/tests/citation-availability.test.mjs 0 d34d84d44b5949024ce6b32708c68e10b00a84600bb03598bf9538b358750455
16 whole-file packages/bus/tests/citation-guard.test.mjs 0 acab66e65fd41f1fbfd9524f80456553fc033d8bfc18a9bec7a813bd0d4552d8
17 whole-file packages/bus/tests/citation-runtime.test.mjs 0 ce33310d333c7a0af7451c3a3b610f5178961b80b6b63a839909b67657fd161e
18 whole-file packages/bus/tests/comment-cursors.test.mjs 0 cd4de90a070faf2bdb776a96a6ba43aa4854f6f5f1b2b7459740bd7bdc0ffb7e
19 whole-file packages/bus/tests/comment-migration.test.mjs 0 773659855873805b5bd950101d950945213658fde42d8012211e742ba9ddcc09
20 whole-file packages/bus/tests/console-decide.test.mjs 0 275fc0a24a03f2f27210a65e2bd21ce615ec9b6b400c4e4177ddb97a9e8e85be
21 whole-file packages/bus/tests/creative.test.mjs 0 eb950d5680ff7e4e09a9c11b1c169d4a740011ea72bb75921d35571ef5373df2
22 whole-file packages/bus/tests/credential-claim.test.mjs 0 b2d40e4d2a353f4154af4974d5779f7b20c652a8110da3183f95959ae2540941
23 whole-file packages/bus/tests/credential-status.test.mjs 0 ed367e3d123c9629b7d3d22f6fa60f48c74e71b36982c54ad2b3e8419f515431
24 whole-file packages/bus/tests/credential-store.test.mjs 0 0fd528ba27757393973cba5b21da573bc681659416962bf7d3a3dff3018414af
25 whole-file packages/bus/tests/credential-verbs.test.mjs 0 154b123af420abf08c6ab8b7bc6439052e7ab65c772abb0caac5e9b9cd3608e9
26 whole-file packages/bus/tests/credentials.test.mjs 0 6474b45c076f474a6881d0dddd0cd3b4cd385d52ac4c55ef1a9f8c10e0028277
27 whole-file packages/bus/tests/csuite-messaging.test.mjs 0 c0229df65240be8ad014d83def48dbd64a952b701f46e40ff01efdebb5644d6a
28 whole-file packages/bus/tests/daily-quota-runtime.test.mjs 0 62d686aa1852088af569cd3b921194db6873311f2ba04e55b15a93900b1615cd
29 whole-file packages/bus/tests/decision-close.test.mjs 0 9599744860a4e6e330ce50b8e93c478546edce5545a9171bed068743a266ae5c
30 whole-file packages/bus/tests/decision-route.test.mjs 0 2b2a9570dab83b1d454f56c1311cb41103a14bcff49e207cbb4ac5d4c73d6f0f
31 whole-file packages/bus/tests/decisions.test.mjs 0 a753df7d939155adf13c7177926728b2760cf61770117dd1655f29fe2c88a26f
32 whole-file packages/bus/tests/end-launch.test.mjs 0 ff7a27c35e35be424cbefa799e219ffc073c494214642b4ce56ceed6b359335e
33 whole-file packages/bus/tests/fire-revokes-grants.test.mjs 0 8e6bee9421480af8a1326d65903f258d5ea0a79df6188bf18301f32a5260547e
34 whole-file packages/bus/tests/gitea-grant-docker.test.mjs 0 8b639ee86d1a7d2ef267e1d36264f4ce1b5beed2c8ce084c39c0de1d699ca8a0
35 whole-file packages/bus/tests/gitea-grant.test.mjs 0 8fa39b3e58cfac4ec97f02ff876fde1a40a1894c826306c0b77d45c73586f753
36 whole-file packages/bus/tests/gitea-migration.test.mjs 0 689fb43a38718f5f5d00ffb3b6d998d5d454854d5e77a936b56d7c4192ee12e9
37 whole-file packages/bus/tests/grant-enroll.test.mjs 0 a8be59931d37a5c787c2087d29d766d6b701bbe34f8343134148292cd29d345c
38 whole-file packages/bus/tests/grant-executor.test.mjs 0 0a7f5be29b28140c9f8e7f67c6a897eb455677fba4459952a83982f2b23c87e0
39 whole-file packages/bus/tests/grant-host.test.mjs 0 54c4ed722116914221e9320fd41723e32aad59284e98d8e177130b0f4c4fe6c4
40 whole-file packages/bus/tests/grant-migration.test.mjs 0 7cfaa3f24d1dc070d7bdb8de76b08fabcdb6877d3367c59f7601e08f683d658b
41 whole-file packages/bus/tests/grant-scope-runtime.test.mjs 0 f8bccf5324f1e10282dfb4f4fd0f63c76c8e9481ae6cc0845a1d9028e3d9633e
42 whole-file packages/bus/tests/grant-scope.test.mjs 0 e30a8ced066ad214a6f70dd4a39c75bacf296032a3201e4605fa3c8df23e0159
43 whole-file packages/bus/tests/hard-waits.test.mjs 0 78d92a14781286d3ca11989786a8698a2b796ad1db78769fd5b3c7653ad7639e
44 whole-file packages/bus/tests/host-run.test.mjs 0 51d231611940444d2c2a37fbb7b14267c705c1b5e453b02367d0a6def214dc93
45 whole-file packages/bus/tests/host-tools.test.mjs 0 3bc5b5413661edd2026bca1721055ec7dce8d115918cc10c8f334e527176d23b
46 whole-file packages/bus/tests/human.test.mjs 0 5c8f3fd402ae4e130029b3203ed41b3cb45b8781417d31dec1f47ebddd516349
47 whole-file packages/bus/tests/instances-verb.test.mjs 0 940ca3884930f539272a2c39ca7e1c7fa3e51b3a4ea6fdcfb21719c652152257
48 whole-file packages/bus/tests/interpreter.test.mjs 0 d0c6190a428005b7750b59e665968657b242b322af05ca7bdd4cd7e815b7f4ab
49 whole-file packages/bus/tests/land.test.mjs 0 e9ecd1d8011ab6789fc3254bb069e76631b68b20ad65ae844ee12e0dc3b97cb0
50 whole-file packages/bus/tests/launch-notice.test.mjs 0 750a54d4c40559c7fb5414071bace8056d6bfa71dfdbec4de12c94c90299c3c5
51 whole-file packages/bus/tests/launcher-released.test.mjs 0 4d59486ca3077a4b2f51141ab79df635feb6b7bca2d6c0cfe5839a6a93715de6
52 whole-file packages/bus/tests/library-credential.test.mjs 0 db7e2dc4afe23f74c49795e4dcd3d28414435519029a837641cbb35bd3f4fcef
53 whole-file packages/bus/tests/library-lookups.test.mjs 0 fa18b5d4c829ec35ebbf519c4346a2ac38cff7538d58ea663acbbdd7930a6015
54 whole-file packages/bus/tests/library-sync.test.mjs 0 ee0ab1ad2549d3e6ae6d8123fa99d697d9be6c629e09131da82f0ab6d58a60e2
55 whole-file packages/bus/tests/library.test.mjs 0 62b663034a5de8d6d1abfaf3f94327d7aae435e3350874b424eefdb28bca1bd1
56 whole-file packages/bus/tests/lifecycle-revoke.test.mjs 0 c0810c743b5108773b6cfbc2d108fa09ea274c437433355277ce2b1295fbf692
57 whole-file packages/bus/tests/lifecycle-verbs.test.mjs 0 926bcfb20ab58a4ecbe85b4f8feb915f72adcdc6d6aee84f814187d0ac998efd
58 whole-file packages/bus/tests/limit-checks.test.mjs 0 919d745dc570172716b1e06d0ea1e8f16ae7b05dbadba77fe92dbbcc8eb4cba7
59 whole-file packages/bus/tests/limit-stop.test.mjs 0 2fc1ebee4e4d4862a100ed9ba97ace1e6d3fb3c608abea63b1ff634a04d5649a
60 whole-file packages/bus/tests/limits-runtime.test.mjs 0 5845176b73f98a499d92096ce0d22a3987ada664a529bdbb26230c2d00b9e65c
61 whole-file packages/bus/tests/limits.test.mjs 0 333f6757d9d00eda74e7d4641af660c9a0ce3d978e6a8550139d3a461c1d5866
62 whole-file packages/bus/tests/message-citation.test.mjs 0 38422c1d6faf076c750c3fccb7e927e38fe955cc28778511acccf5704df5b191
63 whole-file packages/bus/tests/message-filter.test.mjs 0 2ba52728df27756ac19ba65fe0705e7cf7a2a786a3b4df77a4eb4eec8072604c
64 whole-file packages/bus/tests/messages.test.mjs 0 b87de4ab04682d59a2faa7b3fc64751247454e628e9c1ebd4c07b1df2acbf11c
65 whole-file packages/bus/tests/messaging.test.mjs 0 831b48a9de594e17e8fc47f16ab8c2d722e8d57068a7d39deeaf4c0fa8d136bb
66 whole-file packages/bus/tests/model-proxy.test.mjs 0 99c5128733ae5bb16489171513c158ec1e34dfce1d07c60f6bccb0f84ab7afb9
67 whole-file packages/bus/tests/name-migration.test.mjs 0 bb8f92a17f6a022c7ec63161cccc0bb49a26c2a591fc369375cbebfa93a277a2
68 whole-file packages/bus/tests/names.test.mjs 0 0fcf60cc8c7dee3e85548c759f03e1792de92b59131bb9fe4282a3b07859366c
69 whole-file packages/bus/tests/peer-transport.test.mjs 0 3cb547003e50695ec2a25c950819b304f15203302281c00758a12c9b89b60f40
70 whole-file packages/bus/tests/peercred.test.mjs 0 e75c700a68ba0c1013c8f36178d6554f0321dc331b2198fd5ffc1a684df76c3e
71 whole-file packages/bus/tests/plugins-verb.test.mjs 0 359fef350befd1d743bcca89a96ebd0757346fd7c0622ba364039ba827620d26
72 whole-file packages/bus/tests/principal.test.mjs 0 732724e6bb2bb953e7dbbbae5c23cc0a1c33a7b7b202f5cb8b46be9363bcb392
73 whole-file packages/bus/tests/process.test.mjs 0 9c5883ea2ca858131317fa9be66d2a51a5d86dbe03c515b0544f4db56b2456a1
74 whole-file packages/bus/tests/processing-runtime.test.mjs 0 bb6b94ac654d069abd6e484031893e649e239d933c135b226d1cb2fbd5a94ca9
75 whole-file packages/bus/tests/processing-timeout.test.mjs 0 323036aa7f32f7aa324f61595531a29f3d5ef0ae2c24aec029842f2783d6be76
76 whole-file packages/bus/tests/processing-web.test.mjs 0 dbd1543498fbc8d0625990436ae668b3a382eedeecd098b929c13d2bb61939ff
77 whole-file packages/bus/tests/processing.test.mjs 0 529ec93e767444970ff03acb1ba719b45033daac239256c9cbd587c39f926a71
78 whole-file packages/bus/tests/project-await.test.mjs 0 e948d721ef06ce95f909880942f7e7ebd73b2f42563e1faedacc7b403b8ebedf
79 whole-file packages/bus/tests/project-files.test.mjs 0 3691b04705c17d4ef7218bc15771560aca5586c00ba0fd3fdf2a80f63d8dc659
80 whole-file packages/bus/tests/project-runtime.test.mjs 0 9d8d6cedeb2044f19e548dda0e32cae1e997b75a6d89072f7367b6e0ce17a44f
81 whole-file packages/bus/tests/publish.test.mjs 0 87f7a382580432646ca89d1228377719cb177bfdbb4f74ad617f6a70dbfb4b33
82 whole-file packages/bus/tests/reload.test.mjs 0 25aa45aca6ba24d72e9e5ad66dfc8c049375c8df121dd748dde09af52f16f853
83 whole-file packages/bus/tests/replies.test.mjs 0 0f05dc2194896540a1488310107e31b7e779cc02c381c201d0c95f69ab39fc51
84 whole-file packages/bus/tests/requirements.test.mjs 0 29569dc30659dbecf359117cc9a59ff37927c60f5514b8ceb8d3796c2c3e53d1
85 whole-file packages/bus/tests/review.test.mjs 0 a8daea8602be9429a8044ad636a438c18eee8ec77b6fa272dce606116d01de8c
86 whole-file packages/bus/tests/revoke-window.test.mjs 0 1435c543c9367204f4ae6d25c2cb97145e762cb18e78ea90a15eb1672a220353
87 whole-file packages/bus/tests/room-check.test.mjs 0 bbe5ac7abfb7e1b30f6fc8f9a247cd28aca82a8783753434339b790dd9857e1c
88 whole-file packages/bus/tests/rooms.test.mjs 0 506fad116ab1d9bb2520fe691adc91ca26e64faa96ced35c193cb11da4e07ccb
89 whole-file packages/bus/tests/routes-verb.test.mjs 0 c09fef3cb022bf7713cde4e1c512feefe67090eff05451fda9f55272140c916e
90 whole-file packages/bus/tests/schema.test.mjs 0 2a1a668dc408aaebe6f604ec5c3b8858211edc52930e1a552173cecedf806d72
91 whole-file packages/bus/tests/session-clear.test.mjs 0 1fce03f1d2a41f5ba294e9d406980a1d3251bc9a5dd4a02897413d6be3d9681c
92 whole-file packages/bus/tests/session-compactions.test.mjs 0 745510273a9eaaf61de4c6453c5dcc70e4a6020c0bcec69673621eefa593dab7
93 whole-file packages/bus/tests/sessions.test.mjs 0 d6c0337e0981ecb9aae2e912c27145bbd831e196828b2d59029666ceae5f605c
94 whole-file packages/bus/tests/single-use.test.mjs 0 6f5cf7d47716ce94eccb069f9b7e5625c3587737921231649fc74e8bfd3aad3c
95 whole-file packages/bus/tests/spec-migration.test.mjs 0 ede4ca62a772261bc868f4dfcb4861c9c3670110ba2afd39cc44183398c2eafd
96 whole-file packages/bus/tests/spec-review.test.mjs 0 951aa2a54cfe4bf0960dd3d2180874cb8183ff9b0aee7b7251b05df11385e1a5
97 whole-file packages/bus/tests/spec-socket.test.mjs 0 65735a2557e19b3d63a3ce7198c80fb5059f1974acd0708a89f192857b43b095
98 whole-file packages/bus/tests/spec.test.mjs 0 488ab443b41b06b6ae4434f5b2ee8904169aa08ab3527f3ae4c3f438e54f9909
99 whole-file packages/bus/tests/staff-request.test.mjs 0 edeb4ceffae3af33e330e1fac5d74c4fb1861d52ec5ac5005689791ab74da555
100 whole-file packages/bus/tests/state.test.mjs 0 3b5f916c494563fc7c18f89450e0cecbbdad8e24680b373e897253b9ea6064fe
101 whole-file packages/bus/tests/store.test.mjs 0 39d0a4033b89eff9b29ea6dcf6e56696a1d20a41e0e14b4bc8efbfae7962ecf4
102 whole-file packages/bus/tests/task-page.test.mjs 0 6446cfc1a43cb4206b4130f316251d3d9a820f929a6efc59dc74e7cbe1fbd258
103 whole-file packages/bus/tests/task-read.test.mjs 0 37134ced43ad5ada4291ad5e3474dcf7063892443b06d54a7456cd4cddb9cf2f
104 whole-file packages/bus/tests/tasks.test.mjs 0 9d91ee510a7447545c2cf93ae6779544a05e01bb70346e595b91a4800fa42d7b
105 whole-file packages/bus/tests/tester-threads.test.mjs 0 ff843610e02f20c5e1ab19de27b131ae7cbc3fd87b16d85e68336b5e914ffd77
106 whole-file packages/bus/tests/tester-writes.test.mjs 0 517c41e666d2c59b7ffb6ddb22898ef58b816bb26eaa47e1ce7508087b607df5
107 whole-file packages/bus/tests/tester.test.mjs 0 19eff6ddb3aca05ad5c006ac15e7860311f56941055850e86b8075cd39eff0d1
108 whole-file packages/bus/tests/thread-claims.test.mjs 0 ee146e984bb3ae82ad60f90c83035053ff2966ffea91015b6c3c4f93b7e019bd
109 whole-file packages/bus/tests/thread-migration.test.mjs 0 1dc2ae4e920d40a6fc2b1033f43ac0a2f766bfb86f07a596a983b9c1bccf87d5
110 whole-file packages/bus/tests/thread-shares.test.mjs 0 3f99a82e9e4a43fa788ebb231c5e712969809fa83b6ca66f04b8cad13f411235
111 whole-file packages/bus/tests/threads.test.mjs 0 2e5ba2be69a34c71f41a819c7a5e8615fcd085f847f9aa6d16095b9c8d742552
112 whole-file packages/bus/tests/transport.test.mjs 0 c9d28b9acfc0c2213838df0d960506156ef6fffec24a0cee7336324f105fac0e
113 whole-file packages/bus/tests/usage-broker.test.mjs 0 26fc080c6ffcb7c64cca39a07f302b59c21d1425ca3c90120eb3d3bb751c49da
114 whole-file packages/bus/tests/usage-migration.test.mjs 0 cfc65c4233aedb325293170e782ccb83fcfdd85cc4afed1e913e91785fa4b7cf
115 whole-file packages/bus/tests/usage-runtime.test.mjs 0 faa5fce30cbd7002137acfca3cde68b49b74321fb27b8a190736b35601430866
116 whole-file packages/bus/tests/usage.test.mjs 0 d36d21e0b3f5c9621b50e8b71ff6d8daa341f5954f3612b7cc93cb6c734215c0
117 whole-file packages/bus/tests/user-principal.test.mjs 0 1b56d881de2975ec4e3bc27fa15bc495ae0600709457da579337f0c9c98651e5
118 whole-file packages/bus/tests/viewer.test.mjs 0 942ba4fd96c3bb4c527eb129e69ddb5cb7660915e8458cfee47661d268db0e24
119 whole-file packages/bus/tests/web.test.mjs 0 048e3ef2840934f95d7e00de6502b19342215cfe5d00d1b8ada7c1bc6e87cfa1
120 whole-file packages/bus/tests/workflow-roles.test.mjs 0 1bed1351ec3c50ddce65f9b8108f93a5c4061ef5cf36f3d09706d85b13e085ed
121 whole-file packages/business/tests/case1-business-file.test.mjs 0 4481abbce73eae119fbedc5edf65120fa494931913aac6f0273b04263c251cc9
122 whole-file packages/business/tests/launch-settings.test.mjs 0 540f5170ddc7e79a8abd9584c4586eade3ecc1f7544489060db99552c75e4685
123 whole-file packages/cli/tests/access-boot.test.mjs 0 e41e1f1949d3568f8845234d573282c18a185578389d6947140cf540d7f99dc8
124 whole-file packages/cli/tests/access.test.mjs 0 9e2a813092ad4b60cd89443424eb4142f217265e52ff7b769b7f16d247d5a367
125 whole-file packages/cli/tests/app.test.mjs 0 5f5244ba0061dc4ffd1565c4abd3168d7cb2e6398625b69c841a54544b9a35a7
126 whole-file packages/cli/tests/boot-status.test.mjs 0 ca090577e20ea46315cb377668e309571380e2323c867a8b90d0537022e681b7
127 whole-file packages/cli/tests/case1-hostcheck.test.mjs 0 403e1127da5637904e8fe1c1eed5a7865c5bd5ee1c5d0fe684837a7370c41de4
128 whole-file packages/cli/tests/case2-install.test.mjs 0 df8edefe13297ced929d09f01eec5c7ecf38c355d9871368cb19f2f392ae057a
129 whole-file packages/cli/tests/case2-persona-import.test.mjs 0 5dc7a93c03567ec0e85e43bcafe07109881c30b2e83b4c4eab4631a155daece0
130 whole-file packages/cli/tests/case2-unit.test.mjs 0 39b349dfd3125e74b780ce28e9ec24465a6a8c2bb9e431c819864f4eff1fdb77
131 whole-file packages/cli/tests/channel-cli.test.mjs 0 9fd9c30aa604f77b7a069912cb987293af36f2f138cce850f8d26946f5ce42cd
132 whole-file packages/cli/tests/channel-recovery.test.mjs 0 52c6bd980cd54ef22b9e6c78260a1e389e8177526340129ac64fbafa7f2e01ab
133 whole-file packages/cli/tests/cli.test.mjs 0 59327fd89e3fb8f927210df6a2c62afe4522e59f59129b1967be2a238c498f26
134 whole-file packages/cli/tests/compactions-launch.test.mjs 0 c9006b3039a6616be1816f5ce85bf68ba4fb54dadf10447e52fc92f7ed57bbe5
135 whole-file packages/cli/tests/config.test.mjs 0 35e39fb0551e23f5738d0c30d66bd233f2290040885c511e526f0f0468b31cad
136 whole-file packages/cli/tests/credentials.test.mjs 0 2b55cde2318a034ec4152e712863ac54f07f1b4db752c6282507d7f621bde67d
137 whole-file packages/cli/tests/federation-acceptance.test.mjs 0 cca971a93a5dfd20e603b45cc2158b58ea0638e8bb7a33e6e0c5e12178ffa3df
138 whole-file packages/cli/tests/follow.test.mjs 0 26a3ad0dbc124aff48a5f4908e3d8b78cb871e5560c0e389de457f58aea2dfe3
139 whole-file packages/cli/tests/git-socket.test.mjs 0 10c21c34a79ebd5f89f6ed9182a492e9f42f0512a68f758c0566a763a84abeb9
140 whole-file packages/cli/tests/grants-scope.test.mjs 0 37967ca8e82a89a0e88ed872fa562b5c094282cc759853b6dc31c292204bef3c
141 whole-file packages/cli/tests/grants.test.mjs 0 687af745932625ea1d439a8139c760f14b4a327bf9b15c5b5b1cdbc7ea6be09f
142 whole-file packages/cli/tests/host.test.mjs 0 50010e97e44392f28006bbd4127146b8aa1712ff4a016ca10864923701213dce
143 whole-file packages/cli/tests/hosts.test.mjs 0 d5d507c3968c45b2aa25067d6bbb1eedd69785c0aa1bb51177c63b6ad64fcb53
144 whole-file packages/cli/tests/idle-stop-race.test.mjs 0 8e6171855003b0f40921863430dc89cf20f8bbf14a9ce3c115f90486f08232b5
145 whole-file packages/cli/tests/instances.test.mjs 0 c6b4d59443baa4af029af76a846a8093669a7593490f21408a2c40ad027acccf
146 whole-file packages/cli/tests/launch-account.test.mjs 0 6cb63446fc8dbb6217e6d925caabb37a28bcf1ea5c27cf8d515d67c7842553b8
147 whole-file packages/cli/tests/launch-limit-checks.test.mjs 0 fae971d715a90d1dbbeb3c054932a02d253e0a0d036d3b0db4e0c9edcd5ad7ef
148 whole-file packages/cli/tests/launch-limits.test.mjs 0 d3f4b2c57e776bf6bbcafba6dbd9c4728918b0d81fc606dcd7d2dffefdad4001
149 whole-file packages/cli/tests/launch-routes.test.mjs 0 e2bec020f96238079908c03537366c64800de0913a83f3a2877606d0266548d6
150 whole-file packages/cli/tests/launcher.test.mjs 0 beafda99d34a532f3a1d6f96565b7a780e03924939b6c30b01a8169cceaa792a
151 whole-file packages/cli/tests/lifecycle.test.mjs 0 014a2cea6d3f2a9f21f7fc16dc68b34740b03726612851047b877f8c1194ebe0
152 whole-file packages/cli/tests/limits-tokens.test.mjs 0 6fdf9e6946dfb579cde42ec500d8cb8473a9d8318f43caecee7561a5e40fdec1
153 whole-file packages/cli/tests/limits.test.mjs 0 bc2f13959d087ccaf6977c4cf1294e6fcee21f968677ab169580ce79643add18
154 whole-file packages/cli/tests/mark-read.test.mjs 0 64864c54ab910488d55136b88f351771489cf744ba1c21e5c479121694dd88ab
155 whole-file packages/cli/tests/model-proxy.test.mjs 0 119a5d02870a4062992efba7f44ee9dfe69ecf8a7076f121aa24a8c7edf24cf0
156 whole-file packages/cli/tests/names.test.mjs 0 c2160aeb0c68855f59b5d97dc3b6101b7800028df708f5f42430ae5854eb23e2
157 whole-file packages/cli/tests/notifier.test.mjs 0 18e62f48de18cc4d57916a556adeb3befb13921d5d7b036ef5a7f2bfa460cdc1
158 whole-file packages/cli/tests/optional-tracker.test.mjs 0 e5adddfee06b2f1cbd2ec50caf84b5acbc58d4ff4ec4c1bc539a4535a3991827
159 whole-file packages/cli/tests/other-tree.test.mjs 0 2dae57af2b8d508f2792ce37191aebf0cd28ad75f7621d4ab9f8d6daa60b748f
160 whole-file packages/cli/tests/processing-cli.test.mjs 0 44b2854ba03810cdda3ccf0c6de883f953089d532bfcdc8f4bdd3faffac80fe9
161 whole-file packages/cli/tests/project-name-repo.test.mjs 0 0468b9ecde6189d1398eef2e7e8043e870aa867a8a9d22b20b2ded26dc1543b5
162 whole-file packages/cli/tests/project.test.mjs 0 79e648106151ca220d9535b16c416dfdcffffaed41e3c211e4325c151f0775f7
163 whole-file packages/cli/tests/publish-socket.test.mjs 0 59a02b1fcc284407b06d0d2df8e6e1e5323059daa2e47c690f30a718d1e7c682
164 whole-file packages/cli/tests/reply-limits.test.mjs 0 554a353d61891c3cbe8da01062025dcb0756ba4f4e7ab3fb8d7b56ceccf64437
165 whole-file packages/cli/tests/revoke-window.test.mjs 0 743fdb0135e507dea5b968265907e5ac9228284b130feb0057d91e70ad561c02
166 whole-file packages/cli/tests/session-clear.test.mjs 0 5abbd894dee9cfcb3464a40e5045f9062402d5ffe567972113715cc9e24c6ce3
167 whole-file packages/cli/tests/session-cli.test.mjs 0 c469aed70c1ae408e176189f23a849f3acf0bfc7dc3ba1132c101a931359a462
168 whole-file packages/cli/tests/session-launch.test.mjs 0 cde78f9dcee9afa243692fb0493697104425b61589bd7be6c4cbdb0f4bfbd5e5
169 whole-file packages/cli/tests/stack-copy.test.mjs 0 3b92b3772c060378cd2ec0c1bf7fe6662721721a11d99d83c9debe3e3aa929c2
170 whole-file packages/cli/tests/stack-instances.test.mjs 0 2839e390f564a6e58cd514ce4061ec0b741ed07b4e2b755a337439737601d97e
171 whole-file packages/cli/tests/tester-http.test.mjs 0 bd9c598c84dd0be3b9873176c63e418ccc004265153be68e0cbe51c40b1ff91f
172 whole-file packages/cli/tests/tester-reads.test.mjs 0 50a71ffd9093c4d51d8ad07bc9edbbd76306922f290d28194d656cd78f8528c5
173 whole-file packages/cli/tests/tester-threads.test.mjs 0 cd3dd0020472c269d61934ddb32d77f6dc297090d63e819288f4038fe9edf096
174 whole-file packages/cli/tests/tester.test.mjs 0 437498258b4ea5c2f2bfa8fe66114106ac10944911bd40bca944f2078b34e45f
175 whole-file packages/cli/tests/thread-cli.test.mjs 0 c29897119f279434bec0248c12beb5ce97f6214b8b0bec995061000f047b1600
176 whole-file packages/cli/tests/thread-launch.test.mjs 0 459ef35e2b4f9cb87151577f252282a716ddbd4985f26e9e26c01b08af13a7f2
177 whole-file packages/cli/tests/thread-revoke.test.mjs 0 b8a72080a9624ce4bbc1b23b8903be1b74a8a6ced35b0b60f503d92a22d1028c
178 whole-file packages/cli/tests/trackers-boot.test.mjs 0 f83d72dac4eec7369d62b495745e1fdeeb4ff1ba2e1efb376c9b583da1765a1d
179 whole-file packages/cli/tests/transport.test.mjs 0 e0ae6c26b5669d4b955deffe941a3c4314be12297e72d6c099de750170688d9c
180 whole-file packages/cli/tests/usage.test.mjs 0 639ebccda23e0e094d62cb0e7e5c80c403b74b284ac5189fb0d92e63387c92f8
181 whole-file packages/cli/tests/verbs.test.mjs 0 43eefd242a987efe42d145d7863372a2b0a397031baec12ecd4c9e0644daff12
182 whole-file packages/harness/tests/bundle.test.mjs 0 75fd5a9a6fa0b46078952ce216348e39ce481f6fc00b89f85da9ff729d5ba100
183 whole-file packages/harness/tests/citation-runner.test.mjs 0 933021f114882a6c58f4071446a07d49ebc9f99c062ffe1fedc1f13b799db389
184 whole-file packages/harness/tests/claude-gate.test.mjs 0 f66053597c8209c5175810e33d8b878ad74eb314f4057f5b4b0b1ac625272329
185 whole-file packages/harness/tests/claude-session.test.mjs 0 9c4d8ffc00efd0da75d143bca1cd33f30f3e762e20086270d941170e80c962ed
186 whole-file packages/harness/tests/creative.test.mjs 0 3433184ced3427613d645807f0757896baf52d214c3dd6a4a12c3951bbdc50ce
187 whole-file packages/harness/tests/gate.test.mjs 0 991670779d9cf6f733d0060c6f1a59d122ab8e99f7e0a5f7183c9e974f1b1aaf
188 whole-file packages/harness/tests/git-tools.test.mjs 0 2837565ec16cd8c4d032311675a1468bc4bc756ee0696d0e57ea35ffd56eea44
189 whole-file packages/harness/tests/library-tools.test.mjs 0 05a8a5d8e8c4e7b3435d4a9b3f6292816356a99f7156ded2ef7873e1c84f8de7
190 whole-file packages/harness/tests/mcp-server.test.mjs 0 6ce4c6c39b8a1ed70fbeaca410781a62d69a6412333e03640296048b799a09b9
191 whole-file packages/harness/tests/pi-session.test.mjs 0 570376f798b43e82bbc1972f1d50d3915e94a8e4ca00e50076ab390df9830d7d
192 whole-file packages/harness/tests/raise-domain.test.mjs 0 aa6be675614d9324c3ddc01ef40347b235adbccfe6cd73081096ae9e9742d754
193 whole-file packages/harness/tests/runner.test.mjs 0 d3f8c752897e359e10a8e9d507c10ef3760a5ae37999f6f143cb222c42568437
194 whole-file packages/harness/tests/skills.test.mjs 0 2f34800387f4d7f8b8d5f6758cd197f77d11034011bf7f4f79f4d74c582e3f0f
195 whole-file packages/harness/tests/spec-tools.test.mjs 0 29cd1f7094266963a995f636d9575337246a9868d42a48f02231a99251261f47
196 whole-file packages/harness/tests/tools.test.mjs 0 f27638f1fa38fd2d15a352f6c21f7980688d48d580f5a59dab1520fd7c30b30c
197 whole-file packages/library/tests/guard.test.mjs 0 6529c2b48c252eeaf9c19487507a03cf46d952e7ffb3a41e640a54590e312df0
198 whole-file packages/library/tests/index-build.test.mjs 0 4747cb8c842cdc424db727cb3b0e36a6d35f4e9c5c31c1a3bf61314897c2cf6d
199 whole-file packages/library/tests/links.test.mjs 0 9b89f9275f19035c5f079b6920b248466048626c634153eba2fec165f9f6388f
200 whole-file packages/library/tests/mapping.test.mjs 0 9110b98f955dd71588357858b913194ccf9e04dca9aa7c4559600cbe9b9e8e71
201 whole-file packages/library/tests/mirror.test.mjs 0 cc2326da9796dbbbf5b3faa121180a7f00c43816a232a96faece7b58570f1227
202 whole-file packages/library/tests/query.test.mjs 0 f1209bc132a63cba9a7312cbed7e3098126e05c792356648f1d9ec497a11aa82
203 whole-file packages/library/tests/reader.test.mjs 0 3e17f34697ae65524cf7908dcc9ca1b24025bbc92989b2ba05f6e75c0f839c3b
204 whole-file packages/library/tests/render.test.mjs 0 5e68091a309a07e5502b9cc500c7cdfabaa9e246bb77b0c04a0dd86bb9bfcde1
205 whole-file packages/library/tests/scope.test.mjs 0 f55dec854adcd311d614b66959c5655cb3419d7ae7b06fe1f648b43cdecef32e
206 whole-file packages/library/tests/supporting.test.mjs 0 2f50bbe9c942360a5becf5bb984ed5aedb12628d4578ea85c6e433ad0ad73130
207 whole-file packages/library/tests/survey.test.mjs 0 72108eb8a07b990b93ca62c5fa4b55f1f89f3254ca1cf59d3de8ad194dcc3a0d
208 whole-file packages/library/tests/sync.test.mjs 0 a68c69492149b6e9dc7dbf24fc434ebfd3243b2db2c7654b00107b997e99ead0
209 whole-file packages/plugins/tests/harness-compactions.test.mjs 0 9eb9f67c06ae17b33198fbcdb443a0c73ca9cc0cd157cae2359a0647d2db3658
210 whole-file packages/processing-control/tests/task.test.mjs 0 8db6adda6b5d5f7437e9e4cdf961134493409d7227fde02c0b0a76aeb21186f0
211 whole-file packages/seat/tests/compactions-budget.test.mjs 0 1849994f45bfcccfb4ce18915887c740947a98041aa7bd66590ae7a62fa7078e
212 whole-file packages/seat/tests/compactions-ledger.test.mjs 0 af689c631c9d62dee11f4400112fd10df82567c1f49d9f0d423b9d19d6f860d7
213 whole-file packages/seat/tests/compactions.test.mjs 0 cf5e74e1211560ca47a2c13e8002635097f486e2ca06698795bc38263d889f3c
214 whole-file packages/seat/tests/sandbox.test.mjs 0 c09d89b8e1b22db25578f62cd4a1d3b9f441d652178fb675800efb31de33a577
215 whole-file packages/seat/tests/session.test.mjs 0 82171646932cddfc68f0e90ca3355f9595d32c5d228c1fdb855c06cb1d9c2feb
216 whole-file packages/tasks/tests/adapter.test.mjs 0 8843067c21942ae6165a7feaced2382fd9d02d0c62bd30772191393cb5d962b8
217 whole-file packages/tasks/tests/comment-restart.test.mjs 0 25aa6e953cf19ed3ae368581035b9d883ed924b41d593240e2b4ab5ba39f2982
218 whole-file packages/tasks/tests/fields.test.mjs 0 e4eafd6b17a46262dddc548263da993bc3a672adca1cadcc698b6d8374f11e2d
219 whole-file packages/tasks/tests/processing.test.mjs 0 0b89866cc076c43c37534dba926d492d8d334d08a6886325e3d4ac6ddbc88897
220 whole-file packages/tasks/tests/shapes.test.mjs 0 0b8cc660a07e048d007993d726ae5b8e1f343cb571c18ee0284c3ba0c4b41602
221 whole-file packages/tasks/tests/startup.test.mjs 0 5b44d779ab4ec86922dd35ce7c78096de02c0a0f2363cc6c2a5ee07816efc2ad
222 whole-file packages/tasks/tests/sync.test.mjs 0 513ce9f6e64a3fa0179f8cc9b27db671267a43cdc44ab93f38d21982dd2b9631
223 whole-file packages/tasks/tests/tree.test.mjs 0 d3c8f91f59150259b3226e9306c98efbaf2aa17b5b74cb9b376a103620f8aefe
224 whole-file packages/tasks/tests/verbs.test.mjs 0 47b075d01ef38a5d0228902a6f9bcfec0b78b1a958cd071e8114139af73bca53
225 whole-file packages/webui/tests/agents-browser.test.mjs 0 d3ae822399f58d2c4dfd90e054811a60663a66f9d3fbe69a76aa4ce7dc7260d0
226 whole-file packages/webui/tests/agents.test.mjs 0 be18c8fed41173900617d3b646fac1ce14c07c208e7f24d6567f61f55c5c4dc2
227 whole-file packages/webui/tests/assistant.test.mjs 0 056e4c2a37b7b395741ed1ba33546031a6e4ca53db843bd877b93bed764e02ad
228 whole-file packages/webui/tests/board-held.test.mjs 0 01a24d222092ad46c24ea94f684a018b787dfc8d26a0f7d7fda5d9df7192e695
229 whole-file packages/webui/tests/browser-edge.test.mjs 0 4d10b4fcefbc64cdf12bbfbd9b47f74810b3219f70624c35490cb23d66d3c4a1
230 whole-file packages/webui/tests/browser.test.mjs 0 d8c31b7cc16d93961d65959fa9653eaba906f81da3a34e19b3da7cc922f840c3
231 whole-file packages/webui/tests/bus-browser.test.mjs 0 ab1538aaabfdb02c336da61675a0d1d7f367483bc500a380e7f0ece050ab8609
232 whole-file packages/webui/tests/bus.test.mjs 0 fd7acdf189fef230af80c32c4c972d9bfb1564069d7c4ed649c3a49bb6636e1e
233 whole-file packages/webui/tests/channel-chat.test.mjs 0 678b8e3c9152662487fee1c52c8abcae95029b0672d5bbe26a824bbdb4a7ee0b
234 whole-file packages/webui/tests/chat-browser.test.mjs 0 ec29dd03ac7950dfa90e31f72ae74e2112718f1c02ce4dce8055194a328b5f5b
235 whole-file packages/webui/tests/chat-instances.test.mjs 0 72c88b1eb11397bcff524af72cfe826a276b97b58e33465c6e3334e2746e7783
236 whole-file packages/webui/tests/chat-replies-browser.test.mjs 0 bea9b1f9333bc913b2f01c29a792ea4b2fdbed3ebc64b42548e06f0bd75c9fc5
237 whole-file packages/webui/tests/chat-sessions-access.test.mjs 0 f2de41c7d1f6e246a8a13dc33e8662932964facc5b93d8f85ed5fca760c87fd8
238 whole-file packages/webui/tests/chat.test.mjs 0 4c6564d3565b01d68f7d16937aafddbef2ec3e04744fa9d1544ac0500a386ff7
239 whole-file packages/webui/tests/conversation.test.mjs 0 1c3f8811256ad82d7771a06878c3e70dc3d6f2beab82366b837780a7873ff6f1
240 whole-file packages/webui/tests/decide-browser.test.mjs 0 c53e1b962df99686f9739e258b2b86fe6325544ab02509833f9b1176f1303845
241 whole-file packages/webui/tests/decide-sso.test.mjs 0 f96f8085015a96e11aca2d94bfb9e75318c0c0dfa9659049ec7b7e31ad7bc6de
242 whole-file packages/webui/tests/decision-http.test.mjs 0 c89b7af200edb82f9986479199f359cf6a06c870f1bcf22b538cdf3b167f1258
243 whole-file packages/webui/tests/discord.test.mjs 0 1c3e6d64a370adbc6c7cb24391989e9c00d97330d393943402ff5c6a99c5f9fc
244 whole-file packages/webui/tests/docs-browser.test.mjs 0 f39d989ccdc561175643583b27bc19ee76fa25dec5947baa206b0c38b41c1e2a
245 whole-file packages/webui/tests/editor-browser.test.mjs 0 c807f81d596b3a2e3d2ea55e560f29e181a0354ce48676c6760844855acb0dd3
246 whole-file packages/webui/tests/editor.test.mjs 0 6953a85fe791e9087d14c3bf5075de2c4a651e1a502937da3226065c529ffd2b
247 whole-file packages/webui/tests/granted-user.test.mjs 0 ae3baaa0d2a1ed1ad3e9625a46a8071222dfdef4c2a70ae3ba5bf159b85dec0b
248 whole-file packages/webui/tests/history-return-flow.test.mjs 0 8f9ceeb41a64ec2849383a78f4997f7383c86a01eb6cf1d16747c2eb6c7448d4
249 whole-file packages/webui/tests/instances-browser.test.mjs 0 33b9cd4be552f89809e75f72c54f73dbe6459a5c53401a79a4d887e5a658c442
250 whole-file packages/webui/tests/instances.test.mjs 0 904abfc06358c99b0f646c3e728027cd7bba2b27c98c767c7da95016e531277c
251 whole-file packages/webui/tests/library-cli.test.mjs 0 dda07bd1b0d65058723c4d5e50f94fefb1ee103c33c8f61c13841cfedfd53f41
252 whole-file packages/webui/tests/library-routes.test.mjs 0 5cd1f4c6ea99cce38ce59eee085ab31f9aa8bba39cebbaf52b355c4d8fec3098
253 whole-file packages/webui/tests/library-status.test.mjs 0 0b4fb5a07a3d35fb2237401b460ddd3832a2f6fa357f6fbb06b8463251b77faa
254 whole-file packages/webui/tests/limits-browser.test.mjs 0 1a55050c92be5b93e447878feafe59e017b205d114413e6de000faf784df1dad
255 whole-file packages/webui/tests/limits-route.test.mjs 0 b74fe734b0ccbdde716bb52bc15791f80a0b251514a6b01d6ba59164b9639123
256 whole-file packages/webui/tests/messages.test.mjs 0 19bce52278091c8d37ca48c1f6f72bc400cd9a9b3038ae9f31e35444fdab05b8
257 whole-file packages/webui/tests/pinned-copy.test.mjs 0 a8c99249fda05c5be773c8d2231e2dd1a3f3b7d10a40a7ec3e6ca6c6cfb4c85a
258 whole-file packages/webui/tests/preview.test.mjs 0 7f7fbb11dd5915b3351b5086ec9b0f0bed6837a32a2e5902b707fcb54f1bf1c3
259 whole-file packages/webui/tests/processing-browser.test.mjs 0 ed5970f1e2b1fa393c80db5e5551523e77ad0ee107dfa686a76c5d923b7e2d8f
260 whole-file packages/webui/tests/processing.test.mjs 0 ac7a3a0ff51bb15c04e228186d771dd75ef515e09156cd080a8bea881e7cdd8d
261 whole-file packages/webui/tests/project-file.test.mjs 0 8bf04994dec5c6d6670bbae055802759588c27b04010582732cbbf32c2921487
262 whole-file packages/webui/tests/project-name-repo.test.mjs 0 ca773d7109f132bd099c43003a8269edfa96b2ba3a9e01e3694fa6bd12b9143e
263 whole-file packages/webui/tests/proof-cli.test.mjs 0 5095f1ec66a3fc153467baef2291073e27aba17fdc2757e0a3cf2a03057a6547
264 whole-file packages/webui/tests/proof.test.mjs 0 cdb948d261f52232c6e31e25baaf234bd0af3b6d90360a41a6142d2f34a8a797
265 whole-file packages/webui/tests/reads.test.mjs 0 ef69c9c1dc9a55d526a704297aa4e2802cdca8f0e1fd70ff79efad2114a071a6
266 whole-file packages/webui/tests/relaunch.test.mjs 0 e9f075560291cb446dabcaeb86c8800b5ea4ca0396c6a999ddbff88b245cefd1
267 whole-file packages/webui/tests/return-flow.test.mjs 0 bf809ee139c15e9b6b8fe7f6e0f2ce00d0860aa460f145242fc732eafe8da8de
268 whole-file packages/webui/tests/room-browser.test.mjs 0 23286bf46f341220f9e89cc1d229f46a579edb2eae5d688fc768f99ee343c858
269 whole-file packages/webui/tests/room-http.test.mjs 0 a921e1991386cb5e184475cf47a012b3020b575968268e9f3c0b396e244a1819
270 whole-file packages/webui/tests/routes-browser.test.mjs 0 df1283a6e1c5970b404b314b6b76dbf412e5318d76f296ec00164c932166b020
271 whole-file packages/webui/tests/routes.test.mjs 0 055aa274fa66910a4ff1518fea49fbbbbbc5360dc16e825a460538f312a0781d
272 whole-file packages/webui/tests/send-browser.test.mjs 0 da1547383522dbfd74a571b5d7625a310ae88f8adddff0c2bd33cb59df3ac137
273 whole-file packages/webui/tests/send.test.mjs 0 f273e78388935b5fbc18a974f50cb85789436d51c47a4d8dccaf4af4742c2392
274 whole-file packages/webui/tests/serve.test.mjs 0 1971344643d9cf6b4440d95c9ede42093235883ffab04fc4b614c1b7e7078f22
275 whole-file packages/webui/tests/settings-form.test.mjs 0 80bd949d1666f2fe1f4caa051e2c34e742bab0e4adbe5584bd534d9bad8bef53
276 whole-file packages/webui/tests/settings-write.test.mjs 0 7090474fff40910edb93c032feef248adc40ad21666d09c3610cf10279164f99
277 whole-file packages/webui/tests/shell.test.mjs 0 844287f7797201473f1fb8d97ff2355ff3ff505006723678db78f26d3e5c2a40
278 whole-file packages/webui/tests/sso-browser.test.mjs 0 1f70c36ce7d054ad435e52d63083c8fe19cd71e70c723518de5e58b69a426a0a
279 whole-file packages/webui/tests/sso.test.mjs 0 6d7b3061bdc6e22744634ddc5612ff781e5c952a120a346c29eead66a3736438
280 whole-file packages/webui/tests/tester-browser.test.mjs 0 425c54a84e5bf04ca91d8dc57ee83c14aff14a38159243f10f1c9114dd563967
281 whole-file packages/webui/tests/tester-cli.test.mjs 0 5eb7296792f16f24d4486f39101007114b3db81c6ab53ab969e925caaffaa7d9
282 whole-file packages/webui/tests/tester-listener.test.mjs 0 43927869c50a0e223d121e2dea2d10346a053a39fc8157c9fc4813b7c3b17e1f
283 whole-file packages/webui/tests/tester-socket.test.mjs 0 c05962be7f87084404c53e4f7ed2caffff3d69e98e69a3c9f3c53b150cc804e5
284 whole-file packages/webui/tests/thread-claims-browser.test.mjs 0 cbb2aeca0de2c64dd4c8d063d3e45140738d8f4064d38effeaec245ed7181b42
285 whole-file packages/webui/tests/thread-claims.test.mjs 0 164a6c927abd819218be6386e123b234dd9955b122bace699e0a12201797791c
286 whole-file packages/webui/tests/thread-sharing.test.mjs 0 ad64ab207702483aed6f16d13393e5f3c5a1ab0a0c2dcdf32717e8148a45078c
287 whole-file packages/webui/tests/usage-browser.test.mjs 0 14be967dcae157cbb0a7b9ea4e0bc67337941d91a11d789baeb3d3c8353ac0e9
288 whole-file packages/webui/tests/usage.test.mjs 0 4e20eee53c3eb79dc2930ca054977d06da88dba45b706a96ed94abaea6ec3e93
289 whole-file packages/webui/tests/user-option-swap.test.mjs 0 bd43c257ae31cad2ca6c7a0b3ee49c6e323737d236fb7ff2a2105fd5e59b9767
290 whole-file packages/webui/tests/views.test.mjs 0 4226ea02d33b9de8f2eaf9f93b0a551cbd9e6100560a8811eed90aa8de76974c
291 script scripts/test-auth.sh 0 03999aab66446a4192ea9855f5cc1bd406080d0dfa5250b45b30e118556a0d5a
292 script scripts/test-conductor.sh 0 79b7a689ed96792d42edd1d14796e0293e84e2e339b49476e457ad89e1c4a186
293 script scripts/test-config.sh 0 2c3c87fb193e82fa17428933eb69cb2b34a589e8338f7a94aaa8256729fdf08f
294 script scripts/test-discord.sh 0 5c6918b4415e8eabc5df31ac5ad696ec2afdfe3d498d69eae64f228a3807eddb
295 script scripts/test-extension-package.sh 0 1f672a73e507cc57a204f7d3806ddcb211a0a8fb3ffccefc12bbc41e299f65ac
296 script scripts/test-federation-acceptance.sh 0 febb0148bc1316bba3189aacf34d7c78f5f5db5d97a35aa4528dfadbec8bfbd0
297 script scripts/test-foundation.sh 0 3de063333ce60ef1ca1986ecdd8ac30187a2316b7ca8e3ae4b4e6c8bd435caee
298 script scripts/test-land-work.sh 0 ec90beab6246420982f872a4f45a7173e7a06f4aa263630d6ec4a4865176cde0
299 script scripts/test-push-check.sh 0 0304c110dc5cf269fd8a4bea9759e5d48895a51c9d411814ce39ca924073da79
300 script scripts/test-queue.sh 0 f678da9550eb6daa5268465b3a07beefd661e506ed38b8e11bf0a1b4a68cc781
301 script scripts/test-release.sh 0 ad0f2a6b271275003783d3ffab5520f167ea79e26683710ce92a71600037360c
302 script scripts/test-task.sh 0 ad511e52af4bc0a843eabbb3efcedd88c89468ccee43be9022e23880d7901f16
303 mutant M1-supporting 1 0 10581fdab579db4d63322eee3369a1a740266e00a7dcbaa95e7651a7e0447ab8
304 mutant M2-force-push 1 0 b137e8362ae3e26a090a82e8c41c3e87beeaac43183cdd6db67aba55d5e372c9
305 mutant M3-forged-token 1 0 bda603c18b7b2bf468a21e139f0cff0c15c22e19c9d41cf8c50f9c3ae0bd128d
306 mutant M4-grant-before-push 1 0 a642ef8e57a98c1488bb787da241292e6ed5446ca4117940fb0ddb9800c6a105
307 mutant M5-notice-after-publication 1 0 5645138c2cef5d1999948744783ff3904a78e9cefd7421674386a2d0c5fdc45a
308 mutant M6-commit-schema 1 0 7201f53cb976b2db1994c4e25f7f6e8b58eea323c060dbddbfa0372464adb686
@@ -0,0 +1,102 @@
{
"total": {
"tests": 2605,
"pass": 2604,
"fail": 0,
"cancelled": 0,
"skipped": 1,
"todo": 0
},
"packages": {
"library": {
"files": 13,
"tests": 168,
"pass": 168,
"fail": 0,
"cancelled": 0,
"skipped": 0,
"todo": 0
},
"bus": {
"files": 116,
"tests": 1035,
"pass": 1035,
"fail": 0,
"cancelled": 0,
"skipped": 0,
"todo": 0
},
"harness": {
"files": 16,
"tests": 180,
"pass": 180,
"fail": 0,
"cancelled": 0,
"skipped": 0,
"todo": 0
},
"webui": {
"files": 67,
"tests": 398,
"pass": 398,
"fail": 0,
"cancelled": 0,
"skipped": 0,
"todo": 0
},
"business": {
"files": 2,
"tests": 25,
"pass": 25,
"fail": 0,
"cancelled": 0,
"skipped": 0,
"todo": 0
},
"cli": {
"files": 59,
"tests": 620,
"pass": 619,
"fail": 0,
"cancelled": 0,
"skipped": 1,
"todo": 0
},
"plugins": {
"files": 1,
"tests": 8,
"pass": 8,
"fail": 0,
"cancelled": 0,
"skipped": 0,
"todo": 0
},
"processing-control": {
"files": 1,
"tests": 7,
"pass": 7,
"fail": 0,
"cancelled": 0,
"skipped": 0,
"todo": 0
},
"seat": {
"files": 5,
"tests": 69,
"pass": 69,
"fail": 0,
"cancelled": 0,
"skipped": 0,
"todo": 0
},
"tasks": {
"files": 9,
"tests": 95,
"pass": 95,
"fail": 0,
"cancelled": 0,
"skipped": 0,
"todo": 0
}
}
}
+934
View File
@@ -0,0 +1,934 @@
# Row284 C2-05c — supporting scope and served-tree blob (#1789)
Owner Della; reviewer Dewey; gate Sage. Build start sage-3658/3660 (10-23).
Branch della/row284. Original prerequisite base Honker28346bad7ea3;
merge fc05bcbc3 carries22423816cf28 and2164f3fbc25a intact. Only conflict was
CLI thread-launch's added footer tests: retained both full test bodies and
assertions. No prerequisite code copied. Every prerequisite needs its own
review/mutants/landing under mos1351; rebase after283 lands.
## Execution status
UNTESTED. No Node, node--check, test or mutant run before Sage CLEAR. First
own commit is the authorized old-test migration; the implementation follows.
Sage authorizes an immediate untested push. No queue write or shared-log edit.
224 stays first;284 is critical to Bubba288. T4 for224 is not a CLEAR yet.
## Binding readings
Brief C2-05c at94c33a43c:1737-1789, Q226, sage2918 and mos1330 item3.
get defaults canon; explicit playground/supporting opt-in; mismatch null.
Sort full outgoing/incoming lists supporting, playground, canon before paging,
keep cross-scope links and universe filter. Manuscript stays canon/playground.
No all/array scope, write tool, guard, mapping or creative-name-count change.
## mos-1330 old-test migration (separate commit)
All paths below are packages/library/tests/query.test.mjs. Baseline file at
fc05bcbc3 matches216's file. Source assertions retained; negative calls receive
explicit scope too, so universe isolation cannot pass on default-scope denial.
Call/assertion 348 -> 348:
```js
// OLD
const rin = await get(s, { universe: 'idea', path: 'Drafts/New World/Characters/Rin.md' });
// NEW
const rin = await get(s, { universe: 'idea', path: 'Drafts/New World/Characters/Rin.md', scope: 'playground' });
```
Call/assertion 350 -> 350:
```js
// OLD
assert.equal(await get(s, { universe: 'harbor', path: 'Drafts/New World/Characters/Rin.md' }), null);
// NEW
assert.equal(await get(s, { universe: 'harbor', path: 'Drafts/New World/Characters/Rin.md', scope: 'playground' }), null);
```
Call/assertion 366 -> 366:
```js
// OLD
assert.equal(await get(src(ref, mapping(WITH_BLEND)), { universe: 'blend', path }), null);
// NEW
assert.equal(await get(src(ref, mapping(WITH_BLEND)), { universe: 'blend', path, scope: 'playground' }), null);
```
Call/assertion 367 -> 367:
```js
// OLD
const own = await get(src(ref), { universe: 'harbor', path });
// NEW
const own = await get(src(ref), { universe: 'harbor', path, scope: 'playground' });
```
Assertion 349 retained, OLD == NEW:
```js
assert.equal(rin.scope, 'playground');
```
Assertion 368 retained, OLD == NEW:
```js
assert.equal(own.scope, 'playground');
```
The null assertions at350 and366 are the complete OLD/NEW expressions above:
expectation remains null. Added one separate no-scope playground-get -> null
behavior test. It is unrun and expected to expose old get behavior until the
new scope implementation lands. This migration is authorized by mos1330 under
mos1272; no check removed or weakened. Dewey checks this list in manifest review.
## 283 surface and blob choice
Inspected actual46bad7ea3: optional editor.user is present. reader's parsed
file records and index entries still discard tree oid. In owned query.mjs use
the existing bounded listTree(repo, servedCommit) to obtain exact path oid,
not HEAD and not a user-supplied revision expression. No reader/index edit.
Tradeoff: one additional bounded tree listing per get; latency unmeasured.
Recheck after rebasing to283's actual landing.
## Intended owned paths
query.mjs; broker.mjs lookup branch; tools.mjs lookup schemas/descriptions;
library query.test.mjs/query-fixture.mjs; bus library-lookups.test.mjs;
harness library-tools.test.mjs; this BUILD.md. Other files are prerequisites.
## Gate
Dewey manifest approval, whole library/bus/harness suites and every
scripts/test-*.sh on Sage gate. Before review grep all package tests for enum
pins and canon/playground pairs. Keep shared logs out; send receipts to Sage.
No test or mutant evidence claimed. Manifest/digest follows complete code.
## Implementation head (UNTESTED, sage-3658)
- query scope accepts supporting for find/search/get. get defaults canon,
mismatch null. Manuscript passes a separate two-value scope allowlist.
- get returns blob from listTree(source.repo,index.commit) after scope/universe
filtering. The same index.commit supplies the text; source HEAD is irrelevant.
- Full outgoing and incoming link lists are stably sorted by supporting,
playground,canon before combining/paging. All visible cross-scope links stay;
universe/hybrid visibility still applies. Scope metadata isn't added to links.
- Broker only adds optional scope to library.get's strict fields. No new verbs.
- Typed scope expands find/search/get only; manuscript retains its own two-value
enum. Names/M3 counts remain the row224 six/eight, no write tools added.
- New tests: book/universe/draft supporting find/search/get; defaults/mismatch;
absent supporting prefix; source HEAD advances but each scope's blob equals
served:path; 300 outgoing plus300 incoming links ordered across bounded pages,
retaining cross-scope links and dropping other-universe links; hybrid source
stays canon-only; no all/array scope; manuscript rejects supporting; broker
scope/blob forwarding; typed enums and unchanged names. All unrun.
## Additional old assertion pin (brief Gate)
harness/tests/library-tools.test.mjs:49 at23816cf28 (line49, unchanged in this head):
OLD find scope enum ['canon','playground']; NEW ['canon','playground','supporting'].
This is the exact scope-enum pin the brief directs updating. Existing six/eight
name snapshots and TYPES equality assertion are unchanged. The new manuscript
pin intentionally remains ['canon','playground']. No other two-scope test pin
was found by rg over packages/*/tests at this build's prerequisite merge.
## Proposed mutation evidence (reviewer confirms final set)
All unrun. Require assertion failures with whole-file runs and pristine restore:
M1 remove supporting from query SCOPES -> supporting lookup cases.
M2 drop get's requested-scope comparison -> default/mismatch null cases.
M3 use source HEAD for blob lookup -> served-tree/advanced-HEAD equality case.
M4 remove link rank sort -> multi-page outgoing/incoming expected order.
M5 restrict links to requested scope -> cross-scope link counts/order case.
M6 drop sees() from visible/link filtering -> second-universe/hybrid cases.
M7 allow supporting in manuscript validator -> manuscript refusal case.
M8 omit get scope from broker fields -> real broker supporting get case.
M9 widen typed manuscript enum -> typed-scope separation case.
## Inspection and pending gate
No production imports change in broker/tools, so no new sandbox closure file
or mount. query.mjs is host library code and adds existing reader.listTree;
no new package/export/copy-path file. rg found the one old find scope pin plus
the intentional new manuscript two-scope pin. Whole library/bus/harness and
shell gates remain required. CLI integration/merge context is prerequisite224/
219, not this row's source delta; any changed gate expectation goes to Sage.
Node checks, tests, mutants and elapsed-time evidence remain absent pending
CLEAR. The first test-migration commit and this implementation are distinct.
Sage sweep receipt: Della row284 builds on28346bad7ea3 plus intact224 merge;
mos1330 old-test migration separate, supporting scope/blob implementation and
fixtures authored, completely UNTESTED. No shared-log/queue write or live action.
## Current assertion anchors after implementation imports
The separate migration commit0ed4fbab9 retains its complete OLD/NEW text
above. Adding only the fs/path imports in the implementation shifts anchors:
query.test.mjs:130: `const blendCh2 = await get(src(ref, mapping(WITH_BLEND)), { universe: 'blend', path: 'Book One/Chapters/Chapter 02.md' });`
query.test.mjs:350: `const rin = await get(s, { universe: 'idea', path: 'Drafts/New World/Characters/Rin.md', scope: 'playground' });`
query.test.mjs:351: `assert.equal(rin.scope, 'playground');`
query.test.mjs:352: `assert.equal(await get(s, { universe: 'harbor', path: 'Drafts/New World/Characters/Rin.md', scope: 'playground' }), null);`
query.test.mjs:368: `assert.equal(await get(src(ref, mapping(WITH_BLEND)), { universe: 'blend', path, scope: 'playground' }), null);`
query.test.mjs:369: `const own = await get(src(ref), { universe: 'harbor', path, scope: 'playground' });`
query.test.mjs:370: `assert.equal(own.scope, 'playground');`
No result/null assertion changed; scope arguments carry the explicit opt-in.
## Dewey dewey-0941 static review — round2
Static scope fc05bcbc3..47db04eba CLEAN; not a final verdict or test evidence.
M1-M9 accepted as the final set. Optional M10 not added to this gate.
N2 taken: keep the existing canon-path supporting-scope mismatch assertion,
and ADD get(Book One/Support/Notes/Helper.md,scope:supporting) -> null under
the default mapping with no supporting prefix. The supporting-positive test
already returns this same path under withSupporting, so the added probe
pins the missing-prefix case directly. No assertion removed or weakened;
mos1330's separate migration commit and its retained assertions unchanged.
N1 proposed DEFERRED/follow-up for Sage: retain each tree oid in reader/index
entries so get can return blob without cat-file/whole ls-tree -r -l per page.
Current get's result is pinned correctly, but per-page cost grows with the
library. No performance measurement yet. This optimization needs reader/index
ownership and separate acceptance/performance evidence; do not silently expand
284's manifest or change its served-snapshot contract for it.
No Node, tests, mutants or syntax checks run in this round; hold still applies.
## sage-4281 — rebase onto landed 224/283, 2026-10-24
New worktree /mnt/storage/scratch/della-row284-r2, branch della/row284-r2,
base refactor 95d4991d20a4ef291c824d37c886eaeaa9be7062. Cherry-picked only
284-owned 0ed4fbab9, 47db04eba, 5d587a552. Range-diff: all three equal, no
conflicts. The separate mos-1330 migration remains its own commit. No 216,
224 or 283 prerequisite commits copied. Old della/row284 remains unchanged.
mos-1584 fixture check: new tests add no businessDoc() with a library. The
harness role() uses landed 224's gitea reference for bean; the library-enabled
CLI chief fixture fix is also upstream. New broker test uses the direct
Broker fixture (no businessDoc/bootConfig), not a new validated organization.
No new made-up credential values are introduced in this row; existing short
fixture references are reused, so no new credential reaches 24 characters.
No credential values were inspected or printed. No fixture edit necessary.
No Node, npm, syntax check, service, test, mutant or install run in this worktree.
No canonical node_modules link. Dependency installation remains a separately
cleared local npm ci if needed; tests wait for Sage CLEAR. For future runs use
shell mktemp -d /mnt/storage/scratch/tmp/XXXXXX and per-child absolute nice 19.
Shared logs unchanged; Sage owns landing receipts.
## Import-derived whole-file run plan (mos-1612)
Walked relative static import/re-export edges and literal dynamic imports
transitively, from each packages/*/tests/**/*.test.mjs to changed query.mjs,
broker.mjs, tools.mjs or query-fixture.mjs. This follows source import edges,
not textual mentions. Example CLI/thread-launch -> Broker; CLI/helpers ->
Broker; webui/serve -> webui/bus -> Broker; harness/bundle -> tools.
Evidence generator and per-test import chains are in
/mnt/storage/scratch/della-row284-r2-evidence/import-run-list.py and .json.
The import-derived set has 260 files; union with the brief's whole library,
bus and harness suites adds files that use subprocesses/source reads instead
of direct imports. Excluded case1-accept.test.mjs by sage-4281. Any dynamic
nonliteral loading or external shell gate is not claimed covered by import
tracing; mandatory package suites and Sage's full script gate remain required.
First focused whole files: library/query.test.mjs; bus/library-lookups.test.mjs;
harness/library-tools.test.mjs. Then the full import-derived/mandatory union
below, each file whole (duplicates need not repeat without a change). This
is a proposed run list for Sage's CLEAR, not authorization to run now.
M1-M9 retain Dewey's agreed specification above; no mutant executed.
Whole-file union:
```text
packages/bus/tests/access-revoke.test.mjs
packages/bus/tests/account-migration.test.mjs
packages/bus/tests/address.test.mjs
packages/bus/tests/agents.test.mjs
packages/bus/tests/approval-binding.test.mjs
packages/bus/tests/broker.test.mjs
packages/bus/tests/business.test.mjs
packages/bus/tests/channel-proof.test.mjs
packages/bus/tests/chief-of-staff.test.mjs
packages/bus/tests/citation-availability.test.mjs
packages/bus/tests/citation-guard.test.mjs
packages/bus/tests/citation-runtime.test.mjs
packages/bus/tests/comment-cursors.test.mjs
packages/bus/tests/comment-migration.test.mjs
packages/bus/tests/console-decide.test.mjs
packages/bus/tests/creative.test.mjs
packages/bus/tests/credential-claim.test.mjs
packages/bus/tests/credential-status.test.mjs
packages/bus/tests/credential-store.test.mjs
packages/bus/tests/credential-verbs.test.mjs
packages/bus/tests/credentials.test.mjs
packages/bus/tests/csuite-messaging.test.mjs
packages/bus/tests/daily-quota-runtime.test.mjs
packages/bus/tests/decision-close.test.mjs
packages/bus/tests/decision-route.test.mjs
packages/bus/tests/decisions.test.mjs
packages/bus/tests/end-launch.test.mjs
packages/bus/tests/fire-revokes-grants.test.mjs
packages/bus/tests/gitea-grant-docker.test.mjs
packages/bus/tests/gitea-grant.test.mjs
packages/bus/tests/gitea-migration.test.mjs
packages/bus/tests/grant-enroll.test.mjs
packages/bus/tests/grant-executor.test.mjs
packages/bus/tests/grant-host.test.mjs
packages/bus/tests/grant-migration.test.mjs
packages/bus/tests/grant-scope-runtime.test.mjs
packages/bus/tests/grant-scope.test.mjs
packages/bus/tests/hard-waits.test.mjs
packages/bus/tests/host-run.test.mjs
packages/bus/tests/host-tools.test.mjs
packages/bus/tests/human.test.mjs
packages/bus/tests/instances-verb.test.mjs
packages/bus/tests/interpreter.test.mjs
packages/bus/tests/land.test.mjs
packages/bus/tests/launch-notice.test.mjs
packages/bus/tests/launcher-released.test.mjs
packages/bus/tests/library-credential.test.mjs
packages/bus/tests/library-lookups.test.mjs
packages/bus/tests/library-sync.test.mjs
packages/bus/tests/library.test.mjs
packages/bus/tests/lifecycle-revoke.test.mjs
packages/bus/tests/lifecycle-verbs.test.mjs
packages/bus/tests/limit-checks.test.mjs
packages/bus/tests/limit-stop.test.mjs
packages/bus/tests/limits-runtime.test.mjs
packages/bus/tests/limits.test.mjs
packages/bus/tests/message-citation.test.mjs
packages/bus/tests/message-filter.test.mjs
packages/bus/tests/messages.test.mjs
packages/bus/tests/messaging.test.mjs
packages/bus/tests/name-migration.test.mjs
packages/bus/tests/names.test.mjs
packages/bus/tests/peer-transport.test.mjs
packages/bus/tests/peercred.test.mjs
packages/bus/tests/plugins-verb.test.mjs
packages/bus/tests/principal.test.mjs
packages/bus/tests/process.test.mjs
packages/bus/tests/processing-runtime.test.mjs
packages/bus/tests/processing-timeout.test.mjs
packages/bus/tests/processing-web.test.mjs
packages/bus/tests/processing.test.mjs
packages/bus/tests/project-await.test.mjs
packages/bus/tests/project-files.test.mjs
packages/bus/tests/project-runtime.test.mjs
packages/bus/tests/publish.test.mjs
packages/bus/tests/reload.test.mjs
packages/bus/tests/replies.test.mjs
packages/bus/tests/requirements.test.mjs
packages/bus/tests/review.test.mjs
packages/bus/tests/revoke-window.test.mjs
packages/bus/tests/room-check.test.mjs
packages/bus/tests/rooms.test.mjs
packages/bus/tests/routes-verb.test.mjs
packages/bus/tests/schema.test.mjs
packages/bus/tests/session-clear.test.mjs
packages/bus/tests/session-compactions.test.mjs
packages/bus/tests/sessions.test.mjs
packages/bus/tests/single-use.test.mjs
packages/bus/tests/spec-migration.test.mjs
packages/bus/tests/spec-review.test.mjs
packages/bus/tests/spec-socket.test.mjs
packages/bus/tests/spec.test.mjs
packages/bus/tests/staff-request.test.mjs
packages/bus/tests/state.test.mjs
packages/bus/tests/store.test.mjs
packages/bus/tests/task-page.test.mjs
packages/bus/tests/task-read.test.mjs
packages/bus/tests/tasks.test.mjs
packages/bus/tests/tester-threads.test.mjs
packages/bus/tests/tester-writes.test.mjs
packages/bus/tests/tester.test.mjs
packages/bus/tests/thread-claims.test.mjs
packages/bus/tests/thread-migration.test.mjs
packages/bus/tests/thread-shares.test.mjs
packages/bus/tests/threads.test.mjs
packages/bus/tests/transport.test.mjs
packages/bus/tests/usage-broker.test.mjs
packages/bus/tests/usage-migration.test.mjs
packages/bus/tests/usage-runtime.test.mjs
packages/bus/tests/usage.test.mjs
packages/bus/tests/user-principal.test.mjs
packages/bus/tests/viewer.test.mjs
packages/bus/tests/web.test.mjs
packages/bus/tests/workflow-roles.test.mjs
packages/business/tests/case1-business-file.test.mjs
packages/business/tests/launch-settings.test.mjs
packages/cli/tests/access-boot.test.mjs
packages/cli/tests/access.test.mjs
packages/cli/tests/app.test.mjs
packages/cli/tests/boot-status.test.mjs
packages/cli/tests/case1-hostcheck.test.mjs
packages/cli/tests/case2-install.test.mjs
packages/cli/tests/case2-persona-import.test.mjs
packages/cli/tests/case2-unit.test.mjs
packages/cli/tests/channel-cli.test.mjs
packages/cli/tests/channel-recovery.test.mjs
packages/cli/tests/cli.test.mjs
packages/cli/tests/compactions-launch.test.mjs
packages/cli/tests/config.test.mjs
packages/cli/tests/credentials.test.mjs
packages/cli/tests/federation-acceptance.test.mjs
packages/cli/tests/follow.test.mjs
packages/cli/tests/git-socket.test.mjs
packages/cli/tests/grants-scope.test.mjs
packages/cli/tests/grants.test.mjs
packages/cli/tests/host.test.mjs
packages/cli/tests/hosts.test.mjs
packages/cli/tests/idle-stop-race.test.mjs
packages/cli/tests/instances.test.mjs
packages/cli/tests/launch-account.test.mjs
packages/cli/tests/launch-limit-checks.test.mjs
packages/cli/tests/launch-limits.test.mjs
packages/cli/tests/launch-routes.test.mjs
packages/cli/tests/launcher.test.mjs
packages/cli/tests/lifecycle.test.mjs
packages/cli/tests/limits-tokens.test.mjs
packages/cli/tests/limits.test.mjs
packages/cli/tests/mark-read.test.mjs
packages/cli/tests/names.test.mjs
packages/cli/tests/notifier.test.mjs
packages/cli/tests/optional-tracker.test.mjs
packages/cli/tests/other-tree.test.mjs
packages/cli/tests/processing-cli.test.mjs
packages/cli/tests/project-name-repo.test.mjs
packages/cli/tests/project.test.mjs
packages/cli/tests/publish-socket.test.mjs
packages/cli/tests/reply-limits.test.mjs
packages/cli/tests/revoke-window.test.mjs
packages/cli/tests/session-clear.test.mjs
packages/cli/tests/session-cli.test.mjs
packages/cli/tests/session-launch.test.mjs
packages/cli/tests/stack-copy.test.mjs
packages/cli/tests/stack-instances.test.mjs
packages/cli/tests/tester-http.test.mjs
packages/cli/tests/tester-reads.test.mjs
packages/cli/tests/tester-threads.test.mjs
packages/cli/tests/tester.test.mjs
packages/cli/tests/thread-cli.test.mjs
packages/cli/tests/thread-launch.test.mjs
packages/cli/tests/thread-revoke.test.mjs
packages/cli/tests/trackers-boot.test.mjs
packages/cli/tests/transport.test.mjs
packages/cli/tests/usage.test.mjs
packages/cli/tests/verbs.test.mjs
packages/harness/tests/bundle.test.mjs
packages/harness/tests/citation-runner.test.mjs
packages/harness/tests/claude-gate.test.mjs
packages/harness/tests/claude-session.test.mjs
packages/harness/tests/creative.test.mjs
packages/harness/tests/gate.test.mjs
packages/harness/tests/git-tools.test.mjs
packages/harness/tests/library-tools.test.mjs
packages/harness/tests/mcp-server.test.mjs
packages/harness/tests/pi-session.test.mjs
packages/harness/tests/raise-domain.test.mjs
packages/harness/tests/runner.test.mjs
packages/harness/tests/skills.test.mjs
packages/harness/tests/spec-tools.test.mjs
packages/harness/tests/tools.test.mjs
packages/library/tests/guard.test.mjs
packages/library/tests/index-build.test.mjs
packages/library/tests/links.test.mjs
packages/library/tests/mapping.test.mjs
packages/library/tests/mirror.test.mjs
packages/library/tests/query.test.mjs
packages/library/tests/reader.test.mjs
packages/library/tests/render.test.mjs
packages/library/tests/scope.test.mjs
packages/library/tests/supporting.test.mjs
packages/library/tests/survey.test.mjs
packages/library/tests/sync.test.mjs
packages/processing-control/tests/task.test.mjs
packages/seat/tests/sandbox.test.mjs
packages/seat/tests/session.test.mjs
packages/tasks/tests/adapter.test.mjs
packages/tasks/tests/comment-restart.test.mjs
packages/tasks/tests/fields.test.mjs
packages/tasks/tests/processing.test.mjs
packages/tasks/tests/shapes.test.mjs
packages/tasks/tests/startup.test.mjs
packages/tasks/tests/sync.test.mjs
packages/tasks/tests/tree.test.mjs
packages/tasks/tests/verbs.test.mjs
packages/webui/tests/agents-browser.test.mjs
packages/webui/tests/agents.test.mjs
packages/webui/tests/assistant.test.mjs
packages/webui/tests/board-held.test.mjs
packages/webui/tests/browser-edge.test.mjs
packages/webui/tests/browser.test.mjs
packages/webui/tests/bus-browser.test.mjs
packages/webui/tests/bus.test.mjs
packages/webui/tests/channel-chat.test.mjs
packages/webui/tests/chat-browser.test.mjs
packages/webui/tests/chat-instances.test.mjs
packages/webui/tests/chat-replies-browser.test.mjs
packages/webui/tests/chat-sessions-access.test.mjs
packages/webui/tests/chat.test.mjs
packages/webui/tests/conversation.test.mjs
packages/webui/tests/decide-browser.test.mjs
packages/webui/tests/decide-sso.test.mjs
packages/webui/tests/decision-http.test.mjs
packages/webui/tests/discord.test.mjs
packages/webui/tests/docs-browser.test.mjs
packages/webui/tests/editor-browser.test.mjs
packages/webui/tests/editor.test.mjs
packages/webui/tests/granted-user.test.mjs
packages/webui/tests/history-return-flow.test.mjs
packages/webui/tests/instances-browser.test.mjs
packages/webui/tests/instances.test.mjs
packages/webui/tests/library-cli.test.mjs
packages/webui/tests/library-routes.test.mjs
packages/webui/tests/library-status.test.mjs
packages/webui/tests/limits-browser.test.mjs
packages/webui/tests/limits-route.test.mjs
packages/webui/tests/messages.test.mjs
packages/webui/tests/pinned-copy.test.mjs
packages/webui/tests/preview.test.mjs
packages/webui/tests/processing-browser.test.mjs
packages/webui/tests/processing.test.mjs
packages/webui/tests/project-file.test.mjs
packages/webui/tests/project-name-repo.test.mjs
packages/webui/tests/proof-cli.test.mjs
packages/webui/tests/proof.test.mjs
packages/webui/tests/reads.test.mjs
packages/webui/tests/relaunch.test.mjs
packages/webui/tests/return-flow.test.mjs
packages/webui/tests/room-browser.test.mjs
packages/webui/tests/room-http.test.mjs
packages/webui/tests/routes-browser.test.mjs
packages/webui/tests/routes.test.mjs
packages/webui/tests/send-browser.test.mjs
packages/webui/tests/send.test.mjs
packages/webui/tests/serve.test.mjs
packages/webui/tests/settings-form.test.mjs
packages/webui/tests/settings-write.test.mjs
packages/webui/tests/shell.test.mjs
packages/webui/tests/sso-browser.test.mjs
packages/webui/tests/sso.test.mjs
packages/webui/tests/tester-browser.test.mjs
packages/webui/tests/tester-cli.test.mjs
packages/webui/tests/tester-listener.test.mjs
packages/webui/tests/tester-socket.test.mjs
packages/webui/tests/thread-claims-browser.test.mjs
packages/webui/tests/thread-claims.test.mjs
packages/webui/tests/thread-sharing.test.mjs
packages/webui/tests/usage-browser.test.mjs
packages/webui/tests/usage.test.mjs
packages/webui/tests/user-option-swap.test.mjs
packages/webui/tests/views.test.mjs
```
Queue next on 2026-10-24 names row284 but reports the whole brief differs
from its queue pin and asks the lead to re-pin. Sage-4281 names 5e8a720b and
says the section is unchanged; awaiting lead resolution of the queue pin
before the start move. No queue policy refusal is bypassed.
## sage-4289 lane B — completed verification, 2026-10-24
Current reviewer is Webby under mos-1614 / sage-4284, replacing Dewey.
Dewey's earlier static readings and agreed M1-M9 remain historical evidence.
Row284 claimed in-progress rev4038, op della-284-start-1 after lead re-pin.
Candidate tested: 2f1a6bd93e5fc602c46ee5f770d19adecde5fc11. No code,
fixture or assertion change during verification. Local npm ci used the exact
lockfile, ignore-scripts/no-audit/no-fund, rc0,128 packages; no canonical
node_modules link. Installer receipt and log are in the evidence directory.
Run list sent in full to Sage before starting (della-0058); source is the
import walk documented above, union mandatory package suites,279 whole files.
Three targeted files first, then M1-M9 with byte-exact restore after each,
then remaining276 whole files. Already-passed unchanged targeted files are
not repeated. Every Node invocation used fresh shell gXXX TMPDIR,29 bytes,
absolute nice19 set in the child before exec, timeout -k10 (900-second cap,
shortened automatically near23:45Z hardstop). All timeout nice observations
were19. Normal run total1067.962s; mutant total19.485s. Completed22:34Z.
| Package | Whole files | Pass | Fail | Skip |
| --- | ---: | ---: | ---: | ---: |
| bus | 114 | 1012 | 0 | 0 |
| business | 2 | 25 | 0 | 0 |
| cli | 58 | 610 | 0 | 1 |
| harness | 15 | 177 | 0 | 0 |
| library | 12 | 156 | 0 | 0 |
| processing-control | 1 | 7 | 0 | 0 |
| seat | 2 | 23 | 0 | 0 |
| tasks | 9 | 95 | 0 | 0 |
| webui | 66 | 396 | 0 | 0 |
Totals:279 whole files,2501 passed,0 failed,1 skipped,0 cancelled.
Sole skip: packages/cli/tests/federation-acceptance.test.mjs,
FED R7 scratch two-instance acceptance, directs running
scripts/test-federation-acceptance.sh. That acceptance was not exercised;
Sage's full shell landing gate is separate. case1-accept.test.mjs excluded
as ordered. No unlisted run or extra mutant. Targeted counts: query34/34,
broker12/12,typed tools5/5,zero skips.
M1-M9 all killed with exit1, no syntax/setup failures. M1 and M8 are expected
behavior errors when a required capability is removed; the others fail
assertions/refusal checks. Killing named tests are recorded below. Each
restored original bytes in finally; git diff --stat and status --porcelain
empty after every mutant and again after all normal runs, before receipts.
No extra post-restore test rerun.
| Mutant | Killing behavior oracle | Restored |
| --- | --- | --- |
| M1 | supporting find/search/get | byte-exact, clean |
| M2 | get without scope returns null | byte-exact, clean |
| M3 | each get blob equals its served tree object | byte-exact, clean |
| M4 | full outgoing and incoming links stay in scope order | byte-exact, clean |
| M5 | full outgoing and incoming links stay in scope order | byte-exact, clean |
| M6 | full outgoing and incoming links stay in scope order | byte-exact, clean |
| M7 | manuscript still refuses supporting | byte-exact, clean |
| M8 | broker forwards supporting scope | byte-exact, clean |
| M9 | scope schemas expand only find/search/get | byte-exact, clean |
Post-run sweep: current OS user's executable names node/nodejs/chromium/
chrome, matching cwd or argv paths under this worktree or any run TMPDIR.
Checked289 unique roots;0 matching live processes. No signals sent, no
other seat's process inspected beyond process identity/path matching.
No full argv, environment or credential values printed. Slot returned to
Sage in della-0059 at22:34Z. No further tests.
Evidence: /mnt/storage/scratch/della-row284-r2-evidence/run-4289 contains
install receipt, exact commands, stdout/stderr per whole-file run, mutant
edits/restores, summaries and hashed logs. The following plain-text ledger
freezes commands and results; raw logs remain available for reviewer checks.
Each normal test path below was run whole; hashes are SHA256 of raw logs.
```text
{"label":"target-query","command":["timeout","-k","10","900","node","--test","packages/library/tests/query.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gUgw","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":2.889,"mutant":false,"tests":34,"pass":34,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"dc2575e2c597b099c94b7cf254b0cb4d009a0ddb14c0cbd572f93e5ad15f8f72"}
{"label":"target-broker","command":["timeout","-k","10","900","node","--test","packages/bus/tests/library-lookups.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gDd2","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.431,"mutant":false,"tests":12,"pass":12,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"6729e92f2241a2c2d0b725cb9c6ed4fe4d8b50352fd179cf30f905182eac9160"}
{"label":"target-tools","command":["timeout","-k","10","900","node","--test","packages/harness/tests/library-tools.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gmPG","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.169,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"532de351eef39478011d7f84b3b506711c3bafc71676716f623fa29573fc4dec"}
{"label":"M1","command":["timeout","-k","10","900","node","--test","packages/library/tests/query.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gIGt","start_nice":19,"observed_timeout_nice":19,"exit":1,"seconds":2.683,"mutant":true,"tests":34,"pass":30,"fail":4,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"ec36434e918ee16c7639ec0ec4259be66e0381e2684bac7c6ee5755756bded78"}
{"label":"M2","command":["timeout","-k","10","900","node","--test","packages/library/tests/query.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/geid","start_nice":19,"observed_timeout_nice":19,"exit":1,"seconds":2.587,"mutant":true,"tests":34,"pass":31,"fail":3,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"e08eadfd606fc685faed21edb06b1d7d00fd11e7942051fddc0b48b83c6bef90"}
{"label":"M3","command":["timeout","-k","10","900","node","--test","packages/library/tests/query.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gs4j","start_nice":19,"observed_timeout_nice":19,"exit":1,"seconds":2.538,"mutant":true,"tests":34,"pass":33,"fail":1,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"8abb79847deb7a05940c7b48d5407dde6baaf394fef31334f6ac266d65b3c02f"}
{"label":"M4","command":["timeout","-k","10","900","node","--test","packages/library/tests/query.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gvmZ","start_nice":19,"observed_timeout_nice":19,"exit":1,"seconds":2.674,"mutant":true,"tests":34,"pass":33,"fail":1,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"8b8386b876fb85e12335be27216dc5c6a8d5c311c03db0bf49ffbe0639a8693c"}
{"label":"M5","command":["timeout","-k","10","900","node","--test","packages/library/tests/query.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gG6o","start_nice":19,"observed_timeout_nice":19,"exit":1,"seconds":2.633,"mutant":true,"tests":34,"pass":32,"fail":2,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"08ff976a29e42f593dce3262e596e75c43da2ae2e3dfe48945989fe98c3061cf"}
{"label":"M6","command":["timeout","-k","10","900","node","--test","packages/library/tests/query.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gWpu","start_nice":19,"observed_timeout_nice":19,"exit":1,"seconds":2.347,"mutant":true,"tests":34,"pass":23,"fail":11,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"4cd149d0f74e402d2294c2d9ef05aac440ec4c3dc379acad7b9624b7402528bb"}
{"label":"M7","command":["timeout","-k","10","900","node","--test","packages/library/tests/query.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g65B","start_nice":19,"observed_timeout_nice":19,"exit":1,"seconds":2.403,"mutant":true,"tests":34,"pass":33,"fail":1,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"541100f0937dd2e592ed9bee7c48f27ae4e13634d3c0dcf53fc3e8b2f632a000"}
{"label":"M8","command":["timeout","-k","10","900","node","--test","packages/bus/tests/library-lookups.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gtX5","start_nice":19,"observed_timeout_nice":19,"exit":1,"seconds":1.421,"mutant":true,"tests":12,"pass":11,"fail":1,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"2adc93e5aaa663621caa9fd762faded3a975f62de918d7c46a1b5b0469001955"}
{"label":"M9","command":["timeout","-k","10","900","node","--test","packages/harness/tests/library-tools.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gMtM","start_nice":19,"observed_timeout_nice":19,"exit":1,"seconds":0.199,"mutant":true,"tests":5,"pass":4,"fail":1,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"da8c8c2094732b36526dc803e567d4bce18ff964bf70ff406e1981bb7dd313de"}
{"label":"import-001","command":["timeout","-k","10","900","node","--test","packages/bus/tests/access-revoke.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gGcs","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.728,"mutant":false,"tests":10,"pass":10,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"ee78177b9385025df0b0ce154e9f92f3d84a01920da94eb2b95df7aee533721a"}
{"label":"import-002","command":["timeout","-k","10","900","node","--test","packages/bus/tests/account-migration.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/giJX","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.456,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"04456ac702b53d59e127eb7ae2d9828b79acbbcc99c8845cc226e88e4569ffb2"}
{"label":"import-003","command":["timeout","-k","10","900","node","--test","packages/bus/tests/address.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gLUL","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.102,"mutant":false,"tests":15,"pass":15,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"c4ff31db588ac88b6492416d3850b123492e29dbd7c6b2aa283dd736e6caa8cc"}
{"label":"import-004","command":["timeout","-k","10","900","node","--test","packages/bus/tests/agents.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gDuh","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.493,"mutant":false,"tests":11,"pass":11,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"424001894b865c63405976f7facc9a9c93c2ac018b6c97f17ebf87001d071d52"}
{"label":"import-005","command":["timeout","-k","10","900","node","--test","packages/bus/tests/approval-binding.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gsfL","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.305,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"f8029477d12d0acbd774ec6fa82d9af47ae93c575e0ada16c31130248280431d"}
{"label":"import-006","command":["timeout","-k","10","900","node","--test","packages/bus/tests/broker.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gwdO","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.532,"mutant":false,"tests":16,"pass":16,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"b02528f749bc8367149451f2118cf612f7d46ee6269ad05d9a894d6ef893b727"}
{"label":"import-007","command":["timeout","-k","10","900","node","--test","packages/bus/tests/business.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gX5H","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.102,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"3246c77a5431fda5ee0ef798b9850ee8bf05297c7afa272fc88d148582dc14d8"}
{"label":"import-008","command":["timeout","-k","10","900","node","--test","packages/bus/tests/channel-proof.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g0t2","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.644,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"d3dc7af8bd80c5cd391a42468cec38fa2cdf4d7bb8d758e84094a255cf2e8626"}
{"label":"import-009","command":["timeout","-k","10","900","node","--test","packages/bus/tests/chief-of-staff.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gAXk","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":2.744,"mutant":false,"tests":42,"pass":42,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"6e355388daee3b3cfe0251abd3f1f1fc56744e26354b8489d8113e4cb4033847"}
{"label":"import-010","command":["timeout","-k","10","900","node","--test","packages/bus/tests/citation-availability.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gNQV","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":5.391,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"fe32f9423c7317c53d0946d6422fb4ea58bcbb0795730b80cba7b5daae47b8ef"}
{"label":"import-011","command":["timeout","-k","10","900","node","--test","packages/bus/tests/citation-guard.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gilj","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.258,"mutant":false,"tests":13,"pass":13,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"1f6c35c535a407a121ec4ee9bb4e9acdc12b5e16e3f8ccf75bcb94a66511b820"}
{"label":"import-012","command":["timeout","-k","10","900","node","--test","packages/bus/tests/citation-runtime.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gjTW","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.331,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"9cb0ab5a64b667f563c827239c242ee77475acb8744e515d8472d839d7190e2e"}
{"label":"import-013","command":["timeout","-k","10","900","node","--test","packages/bus/tests/comment-cursors.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gQvO","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.162,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"898a7bcc0f68f8a54748a9da6c75b702738b07230a48ff4f939206b1c2dccfdf"}
{"label":"import-014","command":["timeout","-k","10","900","node","--test","packages/bus/tests/comment-migration.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g4nL","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.609,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"ade667dca625e36750417b46f3156be89ec5d40fff78511722c3fa671f3bcd25"}
{"label":"import-015","command":["timeout","-k","10","900","node","--test","packages/bus/tests/console-decide.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/girM","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.893,"mutant":false,"tests":12,"pass":12,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"11a0ac7147f0164542442a9fc6e9224e5d36305cd3e999fc03733e289dfc8f4e"}
{"label":"import-016","command":["timeout","-k","10","900","node","--test","packages/bus/tests/creative.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gXAL","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.447,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"13b107465c7ddecb4fba573b58d4ff42f8807221d1956325b2a0e54eec4581d2"}
{"label":"import-017","command":["timeout","-k","10","900","node","--test","packages/bus/tests/credential-claim.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g8Cy","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.157,"mutant":false,"tests":8,"pass":8,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"a66956b56367cb240de84571fc79e4297bf4bf49c06ce92ac3dd9c5d155b26a5"}
{"label":"import-018","command":["timeout","-k","10","900","node","--test","packages/bus/tests/credential-status.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gEDT","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.401,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"8812b6b0962c7b15e437a9c9b5741d502ab81001d9e17c9b5b14729db8f6033d"}
{"label":"import-019","command":["timeout","-k","10","900","node","--test","packages/bus/tests/credential-store.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gPQx","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.158,"mutant":false,"tests":12,"pass":12,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"2ead3ac9725024e493121f7aaa8e7cf71a35616ffd57c901d3f425ac50b4a8b7"}
{"label":"import-020","command":["timeout","-k","10","900","node","--test","packages/bus/tests/credential-verbs.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g1Wz","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.328,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"bf447a8e6566816992f48a92e6821441ec1acd86960251aeee4b03b6e4b6dee3"}
{"label":"import-021","command":["timeout","-k","10","900","node","--test","packages/bus/tests/credentials.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/grcF","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.105,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"f3f807e470c8ec40f6c1aea188308a1ca183c8f0e98a0eaea996c96577ab471a"}
{"label":"import-022","command":["timeout","-k","10","900","node","--test","packages/bus/tests/csuite-messaging.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gFHk","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.779,"mutant":false,"tests":16,"pass":16,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"1034823ca51c040db2f0bb18416c67761580ed55df0e60636883bc217878afd5"}
{"label":"import-023","command":["timeout","-k","10","900","node","--test","packages/bus/tests/daily-quota-runtime.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gl0H","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.401,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"95472c3d6b012d38f3db4c790fdd48b710535beee03274c0ea44a2cbd97ed095"}
{"label":"import-024","command":["timeout","-k","10","900","node","--test","packages/bus/tests/decision-close.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g2Iz","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.34,"mutant":false,"tests":8,"pass":8,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"5c855717b19f203797db5b4f2789dd8f8df7d49cbdfee62ae0ffa220e4ed1a4a"}
{"label":"import-025","command":["timeout","-k","10","900","node","--test","packages/bus/tests/decision-route.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gDI5","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.286,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"485577231e6e797c256db8a832d98aca4bf856e47459e0c30a1940598c60b8aa"}
{"label":"import-026","command":["timeout","-k","10","900","node","--test","packages/bus/tests/decisions.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/geqP","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.474,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"aa887a5b2b30390fab4906cbd2f6ffa4ec37cc9e794478b18e7cd47eb354063b"}
{"label":"import-027","command":["timeout","-k","10","900","node","--test","packages/bus/tests/end-launch.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g5u4","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.414,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"e3aced744c09beda07405cba691c54a8c8dca973b7718285f67612cbfdad4ac1"}
{"label":"import-028","command":["timeout","-k","10","900","node","--test","packages/bus/tests/fire-revokes-grants.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gD7b","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":4.034,"mutant":false,"tests":24,"pass":24,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"0e79b5a7c00f0701c84b76f3e9fd73f1bac2c9343594039df1e8a667e42d6ea4"}
{"label":"import-029","command":["timeout","-k","10","900","node","--test","packages/bus/tests/gitea-grant-docker.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gcCX","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":25.371,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"5720e4fc3d58350dc4192c7ceb5dff76aba9bf1aff1ac917e016e7295380b325"}
{"label":"import-030","command":["timeout","-k","10","900","node","--test","packages/bus/tests/gitea-grant.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gIPd","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":12.386,"mutant":false,"tests":66,"pass":66,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"142962fbea6f3602701e4bcc5e0248cb06b98a2fad8bfafb92143a593e535ee6"}
{"label":"import-031","command":["timeout","-k","10","900","node","--test","packages/bus/tests/gitea-migration.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gPFr","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.443,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"2a3d38fa696805a193460d33bfec2461778463b7087e368b738700c583ad23c3"}
{"label":"import-032","command":["timeout","-k","10","900","node","--test","packages/bus/tests/grant-enroll.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gAeL","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.838,"mutant":false,"tests":24,"pass":24,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"fc5d1d86af5c0689eb5a92d94ee1dc7a0143299523fc010d4a119c34b30ff768"}
{"label":"import-033","command":["timeout","-k","10","900","node","--test","packages/bus/tests/grant-executor.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gEJ1","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":22.682,"mutant":false,"tests":42,"pass":42,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"97a66205b109952a7704ff9d5d63efbb0277922a0bf1510a677284f9ccbc9831"}
{"label":"import-034","command":["timeout","-k","10","900","node","--test","packages/bus/tests/grant-host.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gYeV","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.433,"mutant":false,"tests":10,"pass":10,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"0ab7ed5613f9c353c5e6f786ceffc6112c4f851debb799cf60ff73ae2f2bf65d"}
{"label":"import-035","command":["timeout","-k","10","900","node","--test","packages/bus/tests/grant-migration.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gcHz","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.495,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"690a9c67e3426b8f6dc94c34f1b34ae5e502c0f8fb9ce67c5beab7cf5122557e"}
{"label":"import-036","command":["timeout","-k","10","900","node","--test","packages/bus/tests/grant-scope-runtime.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gVjH","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.228,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"c013731042ef37735fe6648ec299831b127d3ddb351c613d95efd4bc610d6ff2"}
{"label":"import-037","command":["timeout","-k","10","900","node","--test","packages/bus/tests/grant-scope.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gwvw","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.35,"mutant":false,"tests":14,"pass":14,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"1b48fba6570d0dcef4666725bde8b8c8f95e75eb8abb517d15b226a6ae5b0ea4"}
{"label":"import-038","command":["timeout","-k","10","900","node","--test","packages/bus/tests/hard-waits.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gM7r","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.464,"mutant":false,"tests":13,"pass":13,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"41d7bdf1b5276a7205b6b3e61ff4ac2f7982d60f5f190c3475e75c1ff4cebefd"}
{"label":"import-039","command":["timeout","-k","10","900","node","--test","packages/bus/tests/host-run.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gfCB","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":15.268,"mutant":false,"tests":26,"pass":26,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"7f5c5ab5e5f654c1826e84369739616606de89763879d96ffaa9cc196db05d72"}
{"label":"import-040","command":["timeout","-k","10","900","node","--test","packages/bus/tests/host-tools.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gbtM","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":4.726,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"dfd0a799f300925eb291c8047adc0f9359bf05927f0b1c129c6b420fcf0bfcc0"}
{"label":"import-041","command":["timeout","-k","10","900","node","--test","packages/bus/tests/human.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gnLK","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.102,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"09791081c562afc5c9fa6da5b6df4e37935797147fc6d4c3f4cd8be2dd3d56ae"}
{"label":"import-042","command":["timeout","-k","10","900","node","--test","packages/bus/tests/instances-verb.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g46h","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.305,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"d41d14dd33492e34f21452550fed8d0ca0d3b1847cca0fb86c53ad13f8cb4fb7"}
{"label":"import-043","command":["timeout","-k","10","900","node","--test","packages/bus/tests/interpreter.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gTjS","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.178,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"c3be5eace9c994767d451fcd0d99ddfff2a647a8f7e74f21306c95ac503c229c"}
{"label":"import-044","command":["timeout","-k","10","900","node","--test","packages/bus/tests/land.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gOEa","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.156,"mutant":false,"tests":18,"pass":18,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"b59e6b60f597b4b1d02d4ced63344dbcb820946148a11a4ddd8e29ac422ef0f8"}
{"label":"import-045","command":["timeout","-k","10","900","node","--test","packages/bus/tests/launch-notice.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gv3V","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.543,"mutant":false,"tests":8,"pass":8,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"4979af0184d2b8fe0cfc7048da37828e2f58a8bb433b589399be4d8a7798371d"}
{"label":"import-046","command":["timeout","-k","10","900","node","--test","packages/bus/tests/launcher-released.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gEQl","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.365,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"9e4890aeaa7e21398fb140c469c606cb8a5cec2b564826232ade66f171fed937"}
{"label":"import-047","command":["timeout","-k","10","900","node","--test","packages/bus/tests/library-credential.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gJlk","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":3.11,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"ca7c89d815a3bc281b406089a04dbaf94d04927c0b6b0ae840cae34cd8e858f5"}
{"label":"import-049","command":["timeout","-k","10","900","node","--test","packages/bus/tests/library-sync.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/geyX","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":7.525,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"835bea6e1730fb67ab7d7ef02701ace657b0b3a839d300713ca16d0a32713828"}
{"label":"import-050","command":["timeout","-k","10","900","node","--test","packages/bus/tests/library.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gejb","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.736,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"70633e1f2e5662e511239ada1bb47e1dc197b79e2c9ecf005308b270f713a41c"}
{"label":"import-051","command":["timeout","-k","10","900","node","--test","packages/bus/tests/lifecycle-revoke.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gA7g","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.815,"mutant":false,"tests":8,"pass":8,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"190fd253cefb4d669245531043a93225d37ae66ba694635a3e8bffd86c9e4264"}
{"label":"import-052","command":["timeout","-k","10","900","node","--test","packages/bus/tests/lifecycle-verbs.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gYLp","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.62,"mutant":false,"tests":13,"pass":13,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"071bed270aff7f251d954b557e090230ee6e224535938b85b93e8f885d3fb944"}
{"label":"import-053","command":["timeout","-k","10","900","node","--test","packages/bus/tests/limit-checks.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gt3p","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.347,"mutant":false,"tests":16,"pass":16,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"cb634a9e2819a161ec128a250586e4086591696309f00c9e6a62d7c54c6b9382"}
{"label":"import-054","command":["timeout","-k","10","900","node","--test","packages/bus/tests/limit-stop.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g1Vs","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.362,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"93504cdb3c5a9e5295bd72b8224ec69c43bbd344529a97538376c5a09e47328e"}
{"label":"import-055","command":["timeout","-k","10","900","node","--test","packages/bus/tests/limits-runtime.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/giXl","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.454,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"a18ac489d4eaa62e0bdb40444d70722379b0f4dc172f28e71f8600307ce7c3b6"}
{"label":"import-056","command":["timeout","-k","10","900","node","--test","packages/bus/tests/limits.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gZog","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.424,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"072dfdd9f45f609d52910d3619d4253bd05b54ec36e1a8599db17e17b472e99a"}
{"label":"import-057","command":["timeout","-k","10","900","node","--test","packages/bus/tests/message-citation.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gCEq","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.244,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"d53489b437b4adc8ac10bc52d0f1e6557b6fd187786008a6ad13a264207be034"}
{"label":"import-058","command":["timeout","-k","10","900","node","--test","packages/bus/tests/message-filter.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gsfe","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.58,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"6038a839d1b12b29d8cdbc0ea341ae22197e19444be5743ca327cb188cd1af59"}
{"label":"import-059","command":["timeout","-k","10","900","node","--test","packages/bus/tests/messages.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gkz2","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.501,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"e507905469453069f469a1366bd4cbd446c6b7e2e8ba5234c3d0bee83d1172ba"}
{"label":"import-060","command":["timeout","-k","10","900","node","--test","packages/bus/tests/messaging.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gPZR","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.502,"mutant":false,"tests":13,"pass":13,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"434390031617151891ecb63a788da353c0d43051a4ea60db2e5727b149c9de4e"}
{"label":"import-061","command":["timeout","-k","10","900","node","--test","packages/bus/tests/name-migration.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gsLH","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.192,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"1979f0b1dd32162d42acace08a4b4306249e1096f5bbadb47038681af6b375d5"}
{"label":"import-062","command":["timeout","-k","10","900","node","--test","packages/bus/tests/names.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/grPm","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.313,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"1d35ce65a08ec74388a7a65af8bfb7a87d341fab5795360fd553e65aa10d4999"}
{"label":"import-063","command":["timeout","-k","10","900","node","--test","packages/bus/tests/peer-transport.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g2ja","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.194,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"579cce4a4581e991e6cad80666cd40bfb10d1346699f1233a44dab5d17ee1583"}
{"label":"import-064","command":["timeout","-k","10","900","node","--test","packages/bus/tests/peercred.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g35b","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.499,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"c6d9c4a534f8aab5c73e6920346674eb243a19439eaaa09436ff4c2bc9b68fd7"}
{"label":"import-065","command":["timeout","-k","10","900","node","--test","packages/bus/tests/plugins-verb.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gGrj","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.331,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"4677c69292a7fe1961239e40ecd5848b1e9355e6d9326f1c935dd077605cc36b"}
{"label":"import-066","command":["timeout","-k","10","900","node","--test","packages/bus/tests/principal.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g5U9","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.102,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"efac2a82f133ae63ba26543832b6704df573f345c7699b48b928d4329467f03e"}
{"label":"import-067","command":["timeout","-k","10","900","node","--test","packages/bus/tests/process.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/go8U","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.448,"mutant":false,"tests":8,"pass":8,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"e26c9f5eb045dd7f651f453875fc1daac5dafa5f2060a69c3edcf37c79433e24"}
{"label":"import-068","command":["timeout","-k","10","900","node","--test","packages/bus/tests/processing-runtime.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gmrO","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.392,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"624f60b78329dbf8db5b5ce17e9f218148f7e417a46bcace45666b10193ea4c4"}
{"label":"import-069","command":["timeout","-k","10","900","node","--test","packages/bus/tests/processing-timeout.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gt14","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.263,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"30a4c425941c5732bb0afa09ff8cf2229f11ec6031c7cd3ae26932cf55dc2552"}
{"label":"import-070","command":["timeout","-k","10","900","node","--test","packages/bus/tests/processing-web.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gWj9","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.126,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"dbe9bc036efc99fc38b2dea8824cb7a64fc39e49fcd3a1ef07c60298b0d8e69f"}
{"label":"import-071","command":["timeout","-k","10","900","node","--test","packages/bus/tests/processing.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gP4m","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.381,"mutant":false,"tests":14,"pass":14,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"d2204029f1dbc5836a759b43d421f2790ca32b97a1cc1fc6cb3f098fa4d7ab5d"}
{"label":"import-072","command":["timeout","-k","10","900","node","--test","packages/bus/tests/project-await.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/grrE","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.177,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"55cb0e215ff4f1e3265322c3336b3861d37fc3ba3cac53a31aa3dcc9ee0cab46"}
{"label":"import-073","command":["timeout","-k","10","900","node","--test","packages/bus/tests/project-files.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gZZ4","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.894,"mutant":false,"tests":8,"pass":8,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"b3395652052ccd06de8df2a1ce1aaac185dab50e854fb712a33aef8319d17fdc"}
{"label":"import-074","command":["timeout","-k","10","900","node","--test","packages/bus/tests/project-runtime.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gYyK","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.404,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"b139c3c9cea5fc9bd86ac64f33c4af23f568bee13f9271fef40a07d76ed51cf2"}
{"label":"import-075","command":["timeout","-k","10","900","node","--test","packages/bus/tests/publish.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gUl2","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.831,"mutant":false,"tests":13,"pass":13,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"0adf717babd8ac6229a115e1c796071fd68c1524f140d4596c9f1ee8c528b69f"}
{"label":"import-076","command":["timeout","-k","10","900","node","--test","packages/bus/tests/reload.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gZPr","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.003,"mutant":false,"tests":10,"pass":10,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"2ce6a9bd3ea3eeccf1689e1b6335b72bba2d440ae27feeec3dc727567fa140ff"}
{"label":"import-077","command":["timeout","-k","10","900","node","--test","packages/bus/tests/replies.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gbjz","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.374,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"6db5c1588c83f2df4be469f06857569df7f4cfc47c18b15a8f9e741d4d739c4f"}
{"label":"import-078","command":["timeout","-k","10","900","node","--test","packages/bus/tests/requirements.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g1jX","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.192,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"32b876110fc8a35246f6ab16343dae9ea6da42ef556a99e1e5356e077474a96f"}
{"label":"import-079","command":["timeout","-k","10","900","node","--test","packages/bus/tests/review.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gVJz","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.427,"mutant":false,"tests":8,"pass":8,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"333b7d84cf72b95ba2cdb1d3824bcb8043623c5f0810c68ed22738210977c297"}
{"label":"import-080","command":["timeout","-k","10","900","node","--test","packages/bus/tests/revoke-window.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gRZs","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.305,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"7e759b3330537c0c566b55b2c405adc6f5f48c3b229c4450d938aaec3280fc09"}
{"label":"import-081","command":["timeout","-k","10","900","node","--test","packages/bus/tests/room-check.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gzW9","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.225,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"300f1ea96ccfa38c9405ef163e531cfeec3c7eb8f46986f077669ca95b8f72f3"}
{"label":"import-082","command":["timeout","-k","10","900","node","--test","packages/bus/tests/rooms.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gEx0","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.033,"mutant":false,"tests":18,"pass":18,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"fbcac36a4495da1def5dd650d8aea5758bf25d3e7473148a2b8961bb97b57239"}
{"label":"import-083","command":["timeout","-k","10","900","node","--test","packages/bus/tests/routes-verb.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g0LO","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.292,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"4fef276b76a79518faa03b81d119962ab8880af3010fa33ead93f393dca89f02"}
{"label":"import-084","command":["timeout","-k","10","900","node","--test","packages/bus/tests/schema.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gZFQ","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.169,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"e71271414564fa851dbf25a155b44dcf481770c7f3d4dafe5ce44a09c49526b1"}
{"label":"import-085","command":["timeout","-k","10","900","node","--test","packages/bus/tests/session-clear.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gfrg","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.773,"mutant":false,"tests":19,"pass":19,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"c8097880d5e9a396fb907bc1f35f342821971b545fea7f1e4ddcb2b9f2fb322a"}
{"label":"import-086","command":["timeout","-k","10","900","node","--test","packages/bus/tests/session-compactions.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gfRL","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.179,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"0a2f0ef4d7f6588e2aaeb5a5d8e200650ae573c4468640130140eb83430261b3"}
{"label":"import-087","command":["timeout","-k","10","900","node","--test","packages/bus/tests/sessions.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gaNb","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.654,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"11f26dc0d082b49ce7839d22aca75067dcc2f978d6c319da3d2800adcc0a9ffc"}
{"label":"import-088","command":["timeout","-k","10","900","node","--test","packages/bus/tests/single-use.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gSe3","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.416,"mutant":false,"tests":12,"pass":12,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"7a0e2e7a4a6ab79b85462ad1a39955c5402dab8a9236534c857cef88d08ecc87"}
{"label":"import-089","command":["timeout","-k","10","900","node","--test","packages/bus/tests/spec-migration.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gPmw","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.215,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"b9831356a0d65a037796a66764dcf7dcc267d8512e70087b364cbe390a8c85dc"}
{"label":"import-090","command":["timeout","-k","10","900","node","--test","packages/bus/tests/spec-review.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gqKv","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":2.034,"mutant":false,"tests":12,"pass":12,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"8a70a550b2b056c35f2e85bdd4a155bf7d02332d89596aeed40e16bec765221c"}
{"label":"import-091","command":["timeout","-k","10","900","node","--test","packages/bus/tests/spec-socket.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gY6G","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.787,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"d58670526310fa5106ab9b3d724d817910283b76cfa8bd79278b0428e42b73c3"}
{"label":"import-092","command":["timeout","-k","10","900","node","--test","packages/bus/tests/spec.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gnTM","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.538,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"d04ac45ad25906322cbbd50b703c316c4eeefad1d40f901eeaf2c34224fc5958"}
{"label":"import-093","command":["timeout","-k","10","900","node","--test","packages/bus/tests/staff-request.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g07B","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.544,"mutant":false,"tests":10,"pass":10,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"e0e379d2e0871ecbbae9a5e92ee7217342dc31cf69c80373aeef72f78ea27fd9"}
{"label":"import-094","command":["timeout","-k","10","900","node","--test","packages/bus/tests/state.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gx6m","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.289,"mutant":false,"tests":8,"pass":8,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"63ac32064c6220c89204a8c34f13ce45ebb76f65a6e10e4173608740e1b54887"}
{"label":"import-095","command":["timeout","-k","10","900","node","--test","packages/bus/tests/store.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g5mj","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.286,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"329377b361787f86ffb5bda9210559d3d073e8ed9cfacc43e341156de63af707"}
{"label":"import-096","command":["timeout","-k","10","900","node","--test","packages/bus/tests/task-page.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gErK","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.203,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"0e48322586d18073df7d9efbc0700b7f9e2e45a7a61eb32ffa13ab9d9695de54"}
{"label":"import-097","command":["timeout","-k","10","900","node","--test","packages/bus/tests/task-read.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g7B0","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.237,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"3aa73723d9410d5c6851352f6b3d9c0f671f9b008b8a2355021488f2a071c22b"}
{"label":"import-098","command":["timeout","-k","10","900","node","--test","packages/bus/tests/tasks.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gqcQ","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.037,"mutant":false,"tests":9,"pass":9,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"60e43ca791f0ee0e5a91c0a112ad0d971f38d28e18d6feb7a2d33132aec934fe"}
{"label":"import-099","command":["timeout","-k","10","900","node","--test","packages/bus/tests/tester-threads.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gbPX","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.486,"mutant":false,"tests":15,"pass":15,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"101fcf483990278f3a997ed1cff44b6191b1766147083ddf21341a4480eb602b"}
{"label":"import-100","command":["timeout","-k","10","900","node","--test","packages/bus/tests/tester-writes.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gMT4","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.609,"mutant":false,"tests":8,"pass":8,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"d5618314574cf7e64ac877e29787712f5fd68903228e6e1001c37cdd9b54a9e4"}
{"label":"import-101","command":["timeout","-k","10","900","node","--test","packages/bus/tests/tester.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gl5m","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":2.337,"mutant":false,"tests":14,"pass":14,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"c44885e9d43e6ed5969af2f87ecc17fe00e1f1895435d86f5ddbe399c945642e"}
{"label":"import-102","command":["timeout","-k","10","900","node","--test","packages/bus/tests/thread-claims.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gmfF","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.354,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"bd053d20e52d1859ea6ed13f316e7ed27dac3ba3a8f1be5b3b7adef2fa15e356"}
{"label":"import-103","command":["timeout","-k","10","900","node","--test","packages/bus/tests/thread-migration.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gUt3","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.513,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"ee94081c476ab12b1c1b73eb2efb6138c22deee6dda92aa015fd2b2cc4cc405e"}
{"label":"import-104","command":["timeout","-k","10","900","node","--test","packages/bus/tests/thread-shares.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g6KY","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.966,"mutant":false,"tests":16,"pass":16,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"e2c37691510cc5acfecfcd6d5be612b701fa72a06c544c265b027a381eb577ae"}
{"label":"import-105","command":["timeout","-k","10","900","node","--test","packages/bus/tests/threads.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gqdT","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.848,"mutant":false,"tests":20,"pass":20,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"0e25845dfd5e6c68c206ef19b6ab74b5e00d01cf2ce6cd8843b7f0abe4229d60"}
{"label":"import-106","command":["timeout","-k","10","900","node","--test","packages/bus/tests/transport.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gG0Z","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.355,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"177ad5f143bb47dc7d65ef89785b19170ed7f5a25d1dd78079c73367b7d34bb5"}
{"label":"import-107","command":["timeout","-k","10","900","node","--test","packages/bus/tests/usage-broker.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gYVM","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.179,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"91d3b9ff3e854f2afb6d635a0994a4b2d1af482804067c2e6f78930babf25378"}
{"label":"import-108","command":["timeout","-k","10","900","node","--test","packages/bus/tests/usage-migration.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gJIX","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.232,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"35dae9048409bf16982b1554b0d3bf53de51293c012b428cfa95e3876c353d1b"}
{"label":"import-109","command":["timeout","-k","10","900","node","--test","packages/bus/tests/usage-runtime.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gzcI","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.3,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"1b260c414d98caf272852cc1c6a0928a79f84b05baad356f954fabb8befed9f4"}
{"label":"import-110","command":["timeout","-k","10","900","node","--test","packages/bus/tests/usage.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g9hD","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.341,"mutant":false,"tests":15,"pass":15,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"4b7a7719685b54f0bafcd0d6ca0eff8da3c35e8c438b69fb63826120c444646d"}
{"label":"import-111","command":["timeout","-k","10","900","node","--test","packages/bus/tests/user-principal.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gCyo","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.843,"mutant":false,"tests":24,"pass":24,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"7e5d8e391b6d683905f7654276e74e56cd2e0bb3019d8882fb51f5e96e8bb4e2"}
{"label":"import-112","command":["timeout","-k","10","900","node","--test","packages/bus/tests/viewer.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gckq","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.495,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"0088c69c83ad21b0c09c5b74986f7d1b5609f6155d40d6230cb755914506b209"}
{"label":"import-113","command":["timeout","-k","10","900","node","--test","packages/bus/tests/web.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gr8J","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.209,"mutant":false,"tests":19,"pass":19,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"81db5367857555ba39abf0d45a2b4837a60c796109af4039b43f3dceaaf9a3e4"}
{"label":"import-114","command":["timeout","-k","10","900","node","--test","packages/bus/tests/workflow-roles.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gObE","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.265,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"4a3d911233067a9623aacbe0f856296e7c80d616d1099a30a9ce253506791bb2"}
{"label":"import-115","command":["timeout","-k","10","900","node","--test","packages/business/tests/case1-business-file.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gKGR","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.839,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"2dd7e08774e88449fc90beffa7a1097772a4b04906e62548cd34b31f1cf541b3"}
{"label":"import-116","command":["timeout","-k","10","900","node","--test","packages/business/tests/launch-settings.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gaiJ","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.451,"mutant":false,"tests":18,"pass":18,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"849eeebfaaf47c96f22db45752fb5f00143663fb4ed0aa2d22d74f8af9ea3905"}
{"label":"import-117","command":["timeout","-k","10","900","node","--test","packages/cli/tests/access-boot.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gU7B","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.64,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"1698f3f93b14d11b330e559f19a580edae78b4182042df0e7da1cc9d4cbb53be"}
{"label":"import-118","command":["timeout","-k","10","900","node","--test","packages/cli/tests/access.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gHaW","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":7.364,"mutant":false,"tests":34,"pass":34,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"e42f5491e4db8370ad6f6c2f09a8008c9559ecd572f0985f766f0ca11b1d7b60"}
{"label":"import-119","command":["timeout","-k","10","900","node","--test","packages/cli/tests/app.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gmHw","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":16.086,"mutant":false,"tests":30,"pass":30,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"d65043a7cf3a1d67b99bb47de8efa029c44b90b9fcc0cc7cb8d8ed54403bba81"}
{"label":"import-120","command":["timeout","-k","10","900","node","--test","packages/cli/tests/boot-status.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gYv3","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.916,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"f6753a454d658737099bb6da76219aeb3c6e92bce76b78c53f2d9dae29f5d777"}
{"label":"import-121","command":["timeout","-k","10","900","node","--test","packages/cli/tests/case1-hostcheck.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gvaK","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":3.735,"mutant":false,"tests":19,"pass":19,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"aeb1e23bf951d5859d7adb54fe8f3c6464ba4bf368e9316dce8e5142e097565c"}
{"label":"import-122","command":["timeout","-k","10","900","node","--test","packages/cli/tests/case2-install.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gLWb","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":11.37,"mutant":false,"tests":27,"pass":27,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"06166332e80fd57cd9ae5e5ef2f167260adb413cd6c799b9c1834255cbf3ed63"}
{"label":"import-123","command":["timeout","-k","10","900","node","--test","packages/cli/tests/case2-persona-import.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g955","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":3.606,"mutant":false,"tests":14,"pass":14,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"6005b321161cba438dc94ee6f58a05a05919e099da0d5b43b16b0438214b128e"}
{"label":"import-124","command":["timeout","-k","10","900","node","--test","packages/cli/tests/case2-unit.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gPC5","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":104.569,"mutant":false,"tests":47,"pass":47,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"b9c64e1eea4e389dfc10b9e1ddf88e47d903c7abb1f175b0f73b0a6adf5e8a3b"}
{"label":"import-125","command":["timeout","-k","10","900","node","--test","packages/cli/tests/channel-cli.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gCxf","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.604,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"69ae3003d282a5f998613498ca1a696b684a9e4c03f5b006409d1fb15402c3c6"}
{"label":"import-126","command":["timeout","-k","10","900","node","--test","packages/cli/tests/channel-recovery.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gy7b","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":7.039,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"0df2d0dce24f2c7e9e70c1db3da115d848ee778a3b77c30f50db5fa5b70b15a8"}
{"label":"import-127","command":["timeout","-k","10","900","node","--test","packages/cli/tests/cli.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g4YA","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.986,"mutant":false,"tests":12,"pass":12,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"9e9f75b810bdce44a7e288a0f03572a824642a0e615c3912113d8882fba57f20"}
{"label":"import-128","command":["timeout","-k","10","900","node","--test","packages/cli/tests/compactions-launch.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gH0o","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":18.141,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"7ab789f5de01f4d9fb2c2933fc906d657bb3c867ebb7e8545b4ae8b2f07e348b"}
{"label":"import-129","command":["timeout","-k","10","900","node","--test","packages/cli/tests/config.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gvdv","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.989,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"46976c51d867431031baeb7dfb03518e111f88327f99f24fafa727c987037710"}
{"label":"import-130","command":["timeout","-k","10","900","node","--test","packages/cli/tests/credentials.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gW4m","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.558,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"1633748b05e927193646fd8eaeb9cc64092553734a972a33ac9b26baee4390e1"}
{"label":"import-131","command":["timeout","-k","10","900","node","--test","packages/cli/tests/federation-acceptance.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gEeW","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.281,"mutant":false,"tests":1,"pass":0,"fail":0,"cancelled":0,"skipped":1,"todo":0,"log_sha256":"76dec3f040a21cad59757b69487247ebb3b6a8b27b015f0615585b3be477942a"}
{"label":"import-132","command":["timeout","-k","10","900","node","--test","packages/cli/tests/follow.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gxPz","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.084,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"db3463b8998634a487878c02c81b31eb196077dc45ac102de56f6f06a7bd26ee"}
{"label":"import-133","command":["timeout","-k","10","900","node","--test","packages/cli/tests/git-socket.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gcHM","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":27.936,"mutant":false,"tests":24,"pass":24,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"c1a6247751b05dcaad81d9a42e93c923200f2971ef17622924d00a07c8292735"}
{"label":"import-134","command":["timeout","-k","10","900","node","--test","packages/cli/tests/grants-scope.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gRr9","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.298,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"2f9222ce2ac41443cb24c69bffea46fd96c53af469670f642dcc2319d162ffc5"}
{"label":"import-135","command":["timeout","-k","10","900","node","--test","packages/cli/tests/grants.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gbr2","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.418,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"018fba785221ec997b369739f1fa39ff927f7144b6276f071338a64ba331e555"}
{"label":"import-136","command":["timeout","-k","10","900","node","--test","packages/cli/tests/host.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gIQc","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":20.522,"mutant":false,"tests":43,"pass":43,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"98d2bb8ac91e143fd16fb02b29d877b2df4397a1d8857687707d0bfebb3459be"}
{"label":"import-137","command":["timeout","-k","10","900","node","--test","packages/cli/tests/hosts.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gB9t","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.5,"mutant":false,"tests":8,"pass":8,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"376d8a698c39bc25b9e43ee63f762718ab2d2d2dbfab36da61971e3982f98353"}
{"label":"import-138","command":["timeout","-k","10","900","node","--test","packages/cli/tests/idle-stop-race.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gt4N","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":2.246,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"4ee49db59177a6cedcc98642ad2b4215e1489c8720e3ab27c88a1d3513b4384f"}
{"label":"import-139","command":["timeout","-k","10","900","node","--test","packages/cli/tests/instances.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/ga2n","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":4.158,"mutant":false,"tests":15,"pass":15,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"125780e39af442913bf056f71a57b663c954d8eb5a96fb245db8063237ccb1e1"}
{"label":"import-140","command":["timeout","-k","10","900","node","--test","packages/cli/tests/launch-account.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gEgp","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.427,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"1a2de9540358023f6acb51ab8cdfe0f56e21331cca06ecef672fe7e9b1e0b43a"}
{"label":"import-141","command":["timeout","-k","10","900","node","--test","packages/cli/tests/launch-limit-checks.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gxqf","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.398,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"027fb83eb3ef68f01fde4e1a272faf569516372f194e3e8404973756f9ffb974"}
{"label":"import-142","command":["timeout","-k","10","900","node","--test","packages/cli/tests/launch-limits.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g5N5","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.255,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"a3c26a3f092d8e7dd96fe1addfcd77b89d726d027e9f988340a1442823644c3c"}
{"label":"import-143","command":["timeout","-k","10","900","node","--test","packages/cli/tests/launch-routes.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gMhQ","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.514,"mutant":false,"tests":9,"pass":9,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"ba0335e2efd7de694b51ca89b427ffb06b652f6d9757df1997f9c1c7703ac74a"}
{"label":"import-144","command":["timeout","-k","10","900","node","--test","packages/cli/tests/launcher.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gqhv","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":45.769,"mutant":false,"tests":34,"pass":34,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"5e5374884901f29432961198070f3ede2f87fcc41a818423c3cb90c919dfd7d0"}
{"label":"import-145","command":["timeout","-k","10","900","node","--test","packages/cli/tests/lifecycle.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g76b","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":16.885,"mutant":false,"tests":24,"pass":24,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"37c3dcc1555bc527fe0f853c1a08bae993bd541143c3b6f7edc360c0c3c26d8d"}
{"label":"import-146","command":["timeout","-k","10","900","node","--test","packages/cli/tests/limits-tokens.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g7dV","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.224,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"6dae4cd3607f44b07df6a5e6764276a2ef152b892f050340d6defd14a83b731e"}
{"label":"import-147","command":["timeout","-k","10","900","node","--test","packages/cli/tests/limits.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gLVw","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.442,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"efe051216bb6347423f556f8951c6b6c4adf9c266d8fde6fedfbebb3e678c17f"}
{"label":"import-148","command":["timeout","-k","10","900","node","--test","packages/cli/tests/mark-read.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gVQ4","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.266,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"b90e024010c9a6fbded17306d01b78b2f5748167f9dd4fee20bc5775ef72de81"}
{"label":"import-149","command":["timeout","-k","10","900","node","--test","packages/cli/tests/names.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gJL7","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.297,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"b8d4005cb4e0f1acbe89bc6427b952459b2b876f54c1ed031a558789b535e87e"}
{"label":"import-150","command":["timeout","-k","10","900","node","--test","packages/cli/tests/notifier.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gSos","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.033,"mutant":false,"tests":27,"pass":27,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"c7156a9c99f99c3b51da2c73b728349f348dac6a0b0530bda96212a848014f7c"}
{"label":"import-151","command":["timeout","-k","10","900","node","--test","packages/cli/tests/optional-tracker.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/ggn7","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.413,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"d09457d3034c683bc98639f04d83d5348815571d46d5c30cbe055aed5ceef3a7"}
{"label":"import-152","command":["timeout","-k","10","900","node","--test","packages/cli/tests/other-tree.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gclm","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.3,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"aa7be88cd823a44c8743159006f1d9b61072ebaa04935339d4a875d0997f903e"}
{"label":"import-153","command":["timeout","-k","10","900","node","--test","packages/cli/tests/processing-cli.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gvyI","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.367,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"55d67187192edfd5c929713af6a8f40025259429f36a444eb886fd26013a3135"}
{"label":"import-154","command":["timeout","-k","10","900","node","--test","packages/cli/tests/project-name-repo.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g3qR","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.431,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"9e8364d68d732dbcb9e518ff8dc1cb957d0d254c0a3821711df20e34f6427f07"}
{"label":"import-155","command":["timeout","-k","10","900","node","--test","packages/cli/tests/project.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gJK9","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.908,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"7014e206c70053c2eaeb89fa59b38781802e65d2982fee3855772dd9721285a6"}
{"label":"import-156","command":["timeout","-k","10","900","node","--test","packages/cli/tests/publish-socket.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gQ5m","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":11.807,"mutant":false,"tests":9,"pass":9,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"e20a380f9e0e0070d2598bd3ae85679f70f59c92e6f8cf1c7c840a0975c253b7"}
{"label":"import-157","command":["timeout","-k","10","900","node","--test","packages/cli/tests/reply-limits.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gR4L","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.167,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"9339298bbd5ebfb0e033d2b992c69f62c168e124e741bfc0de500c35b8ffc092"}
{"label":"import-158","command":["timeout","-k","10","900","node","--test","packages/cli/tests/revoke-window.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gHpa","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.868,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"774c1211e7dadeab526d34d50b143c1141ee9f85e3799b644734eeb78c8e9b6f"}
{"label":"import-159","command":["timeout","-k","10","900","node","--test","packages/cli/tests/session-clear.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gd9q","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":13.609,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"a47caf45da848c1bf1a8456eb89c213df981229dc0765362573ec82e6701b11c"}
{"label":"import-160","command":["timeout","-k","10","900","node","--test","packages/cli/tests/session-cli.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gXLB","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.323,"mutant":false,"tests":14,"pass":14,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"3d260701a0c4afd1d21effb5ca1db6cdb47803281bde2536853926f56a236955"}
{"label":"import-161","command":["timeout","-k","10","900","node","--test","packages/cli/tests/session-launch.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gPoX","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":12.34,"mutant":false,"tests":8,"pass":8,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"9d077d5e2956b1f40de6abba79ebed6504cc61a3821754526a032231e8697271"}
{"label":"import-162","command":["timeout","-k","10","900","node","--test","packages/cli/tests/stack-copy.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gb3j","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":32.255,"mutant":false,"tests":18,"pass":18,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"a31fda44310b53fcbfbfb5ca037db8bf9209a0235ed951a911358c61c5f4d13b"}
{"label":"import-163","command":["timeout","-k","10","900","node","--test","packages/cli/tests/stack-instances.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gVU0","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":5.223,"mutant":false,"tests":24,"pass":24,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"baf388164839b10a5ea8c3e019d6b5095d7951657ee638784701848b69a160cd"}
{"label":"import-164","command":["timeout","-k","10","900","node","--test","packages/cli/tests/tester-http.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/geku","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.28,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"d06f4abf2476d898d85533318fee23bdfe3fdc6012c40e809ae4f21e1d6e74bb"}
{"label":"import-165","command":["timeout","-k","10","900","node","--test","packages/cli/tests/tester-reads.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g7PM","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":5.141,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"2f293f7b23b679733870b5d5d2f666570b56fa1335d5b94590046447433225c8"}
{"label":"import-166","command":["timeout","-k","10","900","node","--test","packages/cli/tests/tester-threads.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gAdD","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":12.373,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"6505ae90432cfcf6c2b74ed4c22ebe6ee1b26055b41f3fdada4e40c54e1124f9"}
{"label":"import-167","command":["timeout","-k","10","900","node","--test","packages/cli/tests/tester.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gx0E","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.628,"mutant":false,"tests":11,"pass":11,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"abadf2326205ea5ba1e617fd174018995de824d1552f308815e2bc9c3f71e4bc"}
{"label":"import-168","command":["timeout","-k","10","900","node","--test","packages/cli/tests/thread-cli.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gbFa","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":5.076,"mutant":false,"tests":11,"pass":11,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"fc7f5fadded9b52bcebcf80af32a54bfcb85c2a58608e261d839e8c91d473ce4"}
{"label":"import-169","command":["timeout","-k","10","900","node","--test","packages/cli/tests/thread-launch.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gQNn","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":36.824,"mutant":false,"tests":15,"pass":15,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"f4052bf907e300dae2a7d44f3e8b370849e879abf1de9f84e0c74138f41f2640"}
{"label":"import-170","command":["timeout","-k","10","900","node","--test","packages/cli/tests/thread-revoke.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gNtT","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.273,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"2f66b678922916e9856a6ade3a4524c420d981f39548a6687df77cb95c660d40"}
{"label":"import-171","command":["timeout","-k","10","900","node","--test","packages/cli/tests/trackers-boot.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/giDk","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.097,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"dbb78cab0545fe2d18089c4510092562aa5bc16cdc3f1f95784719d8e2dda241"}
{"label":"import-172","command":["timeout","-k","10","900","node","--test","packages/cli/tests/transport.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g6h3","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":2.447,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"7b7a41c111670e869d5156d3714a33c7a4e7a675893cff4767c505b658ac0dc8"}
{"label":"import-173","command":["timeout","-k","10","900","node","--test","packages/cli/tests/usage.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gERb","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.44,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"d39ae2e64f3e78a0d4bd7fc8d4c6f8f087ac80f0ba47d5dbd199d627d826e86f"}
{"label":"import-174","command":["timeout","-k","10","900","node","--test","packages/cli/tests/verbs.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gaL4","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":3.562,"mutant":false,"tests":9,"pass":9,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"6eafbcea30d6c03a2f8dd925ca6b801fb7f2a8475f3b70715ad8a5060f47f0f0"}
{"label":"import-175","command":["timeout","-k","10","900","node","--test","packages/harness/tests/bundle.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g8v2","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.276,"mutant":false,"tests":22,"pass":22,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"232cba86e5cf956c07e7ac3bce916899fd288db2ef252bf33041c54fa29f6e1b"}
{"label":"import-176","command":["timeout","-k","10","900","node","--test","packages/harness/tests/citation-runner.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g6h4","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":6.327,"mutant":false,"tests":21,"pass":21,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"ef0a3e5f582524e0f03a3a39b518356af2d180cefcaa64439c828dbfc9ab0555"}
{"label":"import-177","command":["timeout","-k","10","900","node","--test","packages/harness/tests/claude-gate.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gmnt","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.62,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"2b7867d549382bd5943f9f828f7132743abd724b9d6a26f7e7647e5deac1086c"}
{"label":"import-178","command":["timeout","-k","10","900","node","--test","packages/harness/tests/claude-session.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gWex","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":8.983,"mutant":false,"tests":10,"pass":10,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"e97d2c71fb63346d736d85b37e1bae38708041a7e09b15cc5d64f44d5f87e592"}
{"label":"import-179","command":["timeout","-k","10","900","node","--test","packages/harness/tests/creative.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g7fD","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.349,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"0a08749c464113ccbc5207cc63ad3cb33ccd7d7af3ebdcb614106f14a38fa8af"}
{"label":"import-180","command":["timeout","-k","10","900","node","--test","packages/harness/tests/gate.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gLqE","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.177,"mutant":false,"tests":12,"pass":12,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"8d3cf0837ecb7d8c5be2a02c67fbe1fb1fbf0a7d75b8e79029a6a3530870353f"}
{"label":"import-181","command":["timeout","-k","10","900","node","--test","packages/harness/tests/git-tools.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gcPM","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":2.824,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"170299b738f35a5cbce8336dbf37ddd340045c9f12b0d86716dc9764ce692656"}
{"label":"import-183","command":["timeout","-k","10","900","node","--test","packages/harness/tests/mcp-server.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gruQ","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.352,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"fcbb8ff07441b7458fad73e8f0d2e8c81a37a184244403c46f0db51bcb579d6c"}
{"label":"import-184","command":["timeout","-k","10","900","node","--test","packages/harness/tests/pi-session.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gQR8","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":7.664,"mutant":false,"tests":10,"pass":10,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"21ef864f6c0608e398001beed596c711eaa16df9830be6e9948d23adaf7ae19b"}
{"label":"import-185","command":["timeout","-k","10","900","node","--test","packages/harness/tests/raise-domain.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gkno","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.289,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"258b03d95708255aaf9c53af130e80349d3fb7a15c412f5e99a552d38d273cf4"}
{"label":"import-186","command":["timeout","-k","10","900","node","--test","packages/harness/tests/runner.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gHpN","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":14.264,"mutant":false,"tests":40,"pass":40,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"6b2ed91f2cc0af529b15da7dd1ca38fc4f9024b8838f1ae948bb9fb61f52b1d4"}
{"label":"import-187","command":["timeout","-k","10","900","node","--test","packages/harness/tests/skills.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/ge6l","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.322,"mutant":false,"tests":10,"pass":10,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"a5eb44bb14feab35f8afff44467dd1ab4b6ccd95f0c20e99bd8165e02ab11e94"}
{"label":"import-188","command":["timeout","-k","10","900","node","--test","packages/harness/tests/spec-tools.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gqeF","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.392,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"25bef2391ffce43b2ad8c6159fb801bf371064b48998f5212b45043b78a65ab4"}
{"label":"import-189","command":["timeout","-k","10","900","node","--test","packages/harness/tests/tools.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gh6I","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.254,"mutant":false,"tests":23,"pass":23,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"032cd4df77581f65cc3d1e3487b542cc2568e40461f34cf345c9e3ccf224d2c0"}
{"label":"import-190","command":["timeout","-k","10","900","node","--test","packages/library/tests/guard.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gX5T","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.7,"mutant":false,"tests":11,"pass":11,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"c5c5e1daabdcbc4830da5472dc584f3095874effa6ed00a5d752ef5a792f433a"}
{"label":"import-191","command":["timeout","-k","10","900","node","--test","packages/library/tests/index-build.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gDCo","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":4.794,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"6122712a2a10cd4fc7ad0f29e7581dc27e6d1e5daddb92dc3b9831ccd26c06b5"}
{"label":"import-192","command":["timeout","-k","10","900","node","--test","packages/library/tests/links.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gNyj","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.128,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"933818b92437600be0591b784675887f9240915167a6218d9bd5546737c0de1d"}
{"label":"import-193","command":["timeout","-k","10","900","node","--test","packages/library/tests/mapping.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gBnG","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.16,"mutant":false,"tests":16,"pass":16,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"b97b350865814827ad8998f9a24ea1f65749b882dd10531eb79052268769f9d0"}
{"label":"import-194","command":["timeout","-k","10","900","node","--test","packages/library/tests/mirror.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gfP9","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":6.763,"mutant":false,"tests":16,"pass":16,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"ba91652dd7daa182d771e5f8d093769fa009494d0f4080fd697a423b8c8aff4c"}
{"label":"import-196","command":["timeout","-k","10","900","node","--test","packages/library/tests/reader.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gvmz","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.028,"mutant":false,"tests":14,"pass":14,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"5b335d4472ccc9aead596840a67909ccf96270c7ccf88e4ad2141eb5953de74c"}
{"label":"import-197","command":["timeout","-k","10","900","node","--test","packages/library/tests/render.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gfUA","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.211,"mutant":false,"tests":9,"pass":9,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"f95a831fa8ef95d90f50861d7ebf05fdedc4d3d68d1ea3dec1e17e9392befab9"}
{"label":"import-198","command":["timeout","-k","10","900","node","--test","packages/library/tests/scope.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gxAY","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.368,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"3935e31b852d0be272395f8d2af9816e8b8ee3bf75a088be39559e413d58fd1e"}
{"label":"import-199","command":["timeout","-k","10","900","node","--test","packages/library/tests/supporting.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gT0U","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.25,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"cfd46a3aaa0167b3adda75bb69095f6328de4cfd43bdb26ae4952e6867c6bf81"}
{"label":"import-200","command":["timeout","-k","10","900","node","--test","packages/library/tests/survey.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gQVP","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.764,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"a20f9ea4cd570def995d73d389f0610621f0198499e60c8f27ada2e952b22bb8"}
{"label":"import-201","command":["timeout","-k","10","900","node","--test","packages/library/tests/sync.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gGSr","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":6.838,"mutant":false,"tests":24,"pass":24,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"683e7b2ec581c2d72a6a3edc68913a7092a49c3ac5c15fe9dfa3062fc3d59fe9"}
{"label":"import-202","command":["timeout","-k","10","900","node","--test","packages/processing-control/tests/task.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gAOM","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.776,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"a9c5e79fa8bddcd222359c6b5fb5634ad170ad56babfe3971f22d8f1fbcaceb9"}
{"label":"import-203","command":["timeout","-k","10","900","node","--test","packages/seat/tests/sandbox.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gcfc","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":7.076,"mutant":false,"tests":10,"pass":10,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"9d9e237b00482d14c1173fcdf2ba0770d87c2e77e0a2d7f8b3631531d1fa5da2"}
{"label":"import-204","command":["timeout","-k","10","900","node","--test","packages/seat/tests/session.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gpBq","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.478,"mutant":false,"tests":13,"pass":13,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"2ffb0ee5961f4611d6afde99fd99270dee783b7abde51c9038ee2087dc426c22"}
{"label":"import-205","command":["timeout","-k","10","900","node","--test","packages/tasks/tests/adapter.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/guN4","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.512,"mutant":false,"tests":8,"pass":8,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"b0441401e2ab0e9593e6d55cca661366e7ee8b51850ac934bfca23de45d2a35a"}
{"label":"import-206","command":["timeout","-k","10","900","node","--test","packages/tasks/tests/comment-restart.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gyAw","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.45,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"599ad621c9d89dc1f200ad0e87eb1573e5ae7bfcc6ff9cddb9048855a9f8613f"}
{"label":"import-207","command":["timeout","-k","10","900","node","--test","packages/tasks/tests/fields.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gOij","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.617,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"2d83b920f5f716537a69555f6bead6b99be1b3c64751305ec8de1a71cadeb56f"}
{"label":"import-208","command":["timeout","-k","10","900","node","--test","packages/tasks/tests/processing.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g72u","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.32,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"5d740844a654055345b9e7c69ed4d2a247cd932ad2a5a6fcf329c7801cbd0ad7"}
{"label":"import-209","command":["timeout","-k","10","900","node","--test","packages/tasks/tests/shapes.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gJAm","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.518,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"3811bcc866161d152d9460cb8bfef2faa9cd3e533de96f1b3f014403dd7fb51e"}
{"label":"import-210","command":["timeout","-k","10","900","node","--test","packages/tasks/tests/startup.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gGTN","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.541,"mutant":false,"tests":9,"pass":9,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"b2c08b276e60a676346a7a7a96423939fc50fece24e84f7d31a141414ae9c65e"}
{"label":"import-211","command":["timeout","-k","10","900","node","--test","packages/tasks/tests/sync.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gccq","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.994,"mutant":false,"tests":11,"pass":11,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"7521b57b037d5dfd35e4e7f8b3e0f772e6f09e9a7f218eaa55a95b40798fb3cb"}
{"label":"import-212","command":["timeout","-k","10","900","node","--test","packages/tasks/tests/tree.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gKai","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.129,"mutant":false,"tests":19,"pass":19,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"035eba7993242c2797c236e2c7f5d41f9248d872984cbfd785bb596bd323721f"}
{"label":"import-213","command":["timeout","-k","10","900","node","--test","packages/tasks/tests/verbs.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gcgn","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.767,"mutant":false,"tests":31,"pass":31,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"27cd7e0bb4607ec39ededdc89e4afcb363698eee6dd31ddd5d5a6b2cbabd847b"}
{"label":"import-214","command":["timeout","-k","10","900","node","--test","packages/webui/tests/agents-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gtNR","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":17.433,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"e2c213130dbf80c125011ba8d45c016bfb347ebe1d21f1c64d1756e0db82d6f9"}
{"label":"import-215","command":["timeout","-k","10","900","node","--test","packages/webui/tests/agents.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gQRO","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.233,"mutant":false,"tests":9,"pass":9,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"c94baa2f42b463dee93e00cf1f3b1e60b287f109debf3a5a5133a8363b992d3a"}
{"label":"import-216","command":["timeout","-k","10","900","node","--test","packages/webui/tests/assistant.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gCyc","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.233,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"1a32bdca8137c6aff24e9eee5c19dcadfef1e3a5f0aab5a45c600cf39c29e56e"}
{"label":"import-217","command":["timeout","-k","10","900","node","--test","packages/webui/tests/board-held.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gPDU","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":10.78,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"fb532481a6401e7097d1b7fd8c858885988e37529779c7e989885dd0de21f7e9"}
{"label":"import-218","command":["timeout","-k","10","900","node","--test","packages/webui/tests/browser-edge.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gw0B","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.748,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"f23507b59a89ff056564e71cda5e73b275ebc4de3130956b9cf69615af5aebe0"}
{"label":"import-219","command":["timeout","-k","10","900","node","--test","packages/webui/tests/browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gZfS","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":2.398,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"08f605ea6cfe1ec7b0f9d1a951a359e2e0106892dc56567152ed569548bff757"}
{"label":"import-220","command":["timeout","-k","10","900","node","--test","packages/webui/tests/bus-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gjO2","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":3.795,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"c03e5eaab52ea76d3b5ac1ccfbae6c25a2fab9f592aa45cd29bc6e22f3f45c3f"}
{"label":"import-221","command":["timeout","-k","10","900","node","--test","packages/webui/tests/bus.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g766","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":4.937,"mutant":false,"tests":10,"pass":10,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"703208aaab3751971784b6266b335c54f41048735650e92f40b6e8bd37ea9a6a"}
{"label":"import-222","command":["timeout","-k","10","900","node","--test","packages/webui/tests/channel-chat.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gyou","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.526,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"9dd425b57cb427c25265f7e1b4266cc9d9d09892d2de5ddf4c916635b66515c1"}
{"label":"import-223","command":["timeout","-k","10","900","node","--test","packages/webui/tests/chat-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g5ri","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":40.593,"mutant":false,"tests":19,"pass":19,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"4a751781c8e1b9c4e1bbe9e1767d5d897c3cbb09ac4db39ea25d13c276e947cd"}
{"label":"import-224","command":["timeout","-k","10","900","node","--test","packages/webui/tests/chat-instances.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gypj","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.248,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"c43f61b93bbf092d23c0bfe9c6e85b76e4ded17b18d973c4a37832764df71f72"}
{"label":"import-225","command":["timeout","-k","10","900","node","--test","packages/webui/tests/chat-replies-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gDNY","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":8.751,"mutant":false,"tests":11,"pass":11,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"f919fe31839c0bc40d4860c4f4412480a1016267c00b292fead32b36098031d5"}
{"label":"import-226","command":["timeout","-k","10","900","node","--test","packages/webui/tests/chat-sessions-access.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g9LK","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":4.741,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"a4c4116cfd2a752d7efd2897430a9b2b052b6acf868c1ca8ce26b81ba9585812"}
{"label":"import-227","command":["timeout","-k","10","900","node","--test","packages/webui/tests/chat.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/go2w","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.849,"mutant":false,"tests":30,"pass":30,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"77d6c675d0a4534e84f4b2ce4eddf2135908dc5014469e74b87b6fdd3f63c130"}
{"label":"import-228","command":["timeout","-k","10","900","node","--test","packages/webui/tests/conversation.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/ga85","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":4.852,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"35d962e50a5a143e4dd8b816414c3044096d8907e807f50ca72eef81df9531ee"}
{"label":"import-229","command":["timeout","-k","10","900","node","--test","packages/webui/tests/decide-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gd1n","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":12.017,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"559586deeaa79f7f28185318bf29e7ea28b4536c60bddbfdcdd337850104820a"}
{"label":"import-230","command":["timeout","-k","10","900","node","--test","packages/webui/tests/decide-sso.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gTYk","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.998,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"f277b7937f563610c111f75d55917ba1a6474b0cbf7edcc417f66ca1db9e77a8"}
{"label":"import-231","command":["timeout","-k","10","900","node","--test","packages/webui/tests/decision-http.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gesP","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.149,"mutant":false,"tests":9,"pass":9,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"1ae4314867f3da3d96bb8bd99bb9e4bb120610e4b4f76f266a4394d2c4cdac3d"}
{"label":"import-232","command":["timeout","-k","10","900","node","--test","packages/webui/tests/discord.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gROh","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.126,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"d1da3a8a99ae68e4e2c704b993c9f4fac1502f60dc21502abadad75584e212f1"}
{"label":"import-233","command":["timeout","-k","10","900","node","--test","packages/webui/tests/docs-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gZtM","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.892,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"b126c48278cbe8276b5a1459b14cf00d1047ec686a80a82dfe509169e4d8aa7c"}
{"label":"import-234","command":["timeout","-k","10","900","node","--test","packages/webui/tests/editor-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gJnO","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":23.444,"mutant":false,"tests":16,"pass":16,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"1053f032713f4a82d05003347cb02c6db54f6c554d3d549608615e3dcc835c83"}
{"label":"import-235","command":["timeout","-k","10","900","node","--test","packages/webui/tests/editor.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gLje","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":6.017,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"a1b78738684b0e0049cc5731f55b67cc21d83c0bd117a20ee094efcefbc926b9"}
{"label":"import-236","command":["timeout","-k","10","900","node","--test","packages/webui/tests/granted-user.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gH8T","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":6.001,"mutant":false,"tests":19,"pass":19,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"7e778058c0b4dfc5a44b1c95d146e3628f1401f18e5ca68d0eb5a2af2357fe16"}
{"label":"import-237","command":["timeout","-k","10","900","node","--test","packages/webui/tests/history-return-flow.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gOZs","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":56.725,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"1e74c166baa23c019edac72a0ce2735e7804112369ef6f6d12b4b30e0ed1a7a1"}
{"label":"import-238","command":["timeout","-k","10","900","node","--test","packages/webui/tests/instances-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/goix","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":3.608,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"20da30c92fc5b9149e84cd2547aceac366f5509e8efbeb346b700d6f8cacc18b"}
{"label":"import-239","command":["timeout","-k","10","900","node","--test","packages/webui/tests/instances.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gr2y","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.265,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"0b0782580df886f98f4428ad6f94d33fa2d37d89c58d12c152964b26786d48fe"}
{"label":"import-240","command":["timeout","-k","10","900","node","--test","packages/webui/tests/library-cli.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gGV8","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.868,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"1e3617d918b4d7474e1acf9b5ad32732305aa86f8ad3044d488aac21f551cb4e"}
{"label":"import-241","command":["timeout","-k","10","900","node","--test","packages/webui/tests/library-routes.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gWxL","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.532,"mutant":false,"tests":13,"pass":13,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"d9729aef19f819e8190e6fdc9dbb1d7c4061f2311598f3785678cc81fbaea30e"}
{"label":"import-242","command":["timeout","-k","10","900","node","--test","packages/webui/tests/library-status.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gurC","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.265,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"99e68ba123769f5df8b60d9d12546d113f9f1f18f27b26a82738f4ac670fc18f"}
{"label":"import-243","command":["timeout","-k","10","900","node","--test","packages/webui/tests/limits-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gq0e","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":4.598,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"4d3b961b33557106779e969bdfb9aa959e01462a521d5368d9e7e560a4bab19b"}
{"label":"import-244","command":["timeout","-k","10","900","node","--test","packages/webui/tests/limits-route.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gK8P","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.561,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"2283f78868a29c6ebf37b0aaabc2fdfd84d0a381b3fd046d27902adf2710bfae"}
{"label":"import-245","command":["timeout","-k","10","900","node","--test","packages/webui/tests/messages.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gaaW","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":6.474,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"c2e137bf0cc8d12832a07cdb1f70f95dd3cc8ce34a500e6b0479f9d94bf4b300"}
{"label":"import-246","command":["timeout","-k","10","900","node","--test","packages/webui/tests/pinned-copy.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gG1M","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":7.925,"mutant":false,"tests":10,"pass":10,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"ebeca41fa26f042b9e877ddc3315254a60f98b947fb3eb9ccf098c4d455117b4"}
{"label":"import-247","command":["timeout","-k","10","900","node","--test","packages/webui/tests/preview.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gHU1","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.186,"mutant":false,"tests":11,"pass":11,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"4f0064f793bb36dbdf294fe77d67530afc0aea22f01b847aa1d00c3844469119"}
{"label":"import-248","command":["timeout","-k","10","900","node","--test","packages/webui/tests/processing-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gkgO","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":8.863,"mutant":false,"tests":9,"pass":9,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"816a885bb9c45578982d7e43326cb77215e8cb29f557aa06e0efc39a26297e05"}
{"label":"import-249","command":["timeout","-k","10","900","node","--test","packages/webui/tests/processing.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gMEO","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.36,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"d0d8b5325152e1919b5838bfd1b83c4551b52d69c60f07d0921eb95af6391222"}
{"label":"import-250","command":["timeout","-k","10","900","node","--test","packages/webui/tests/project-file.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g0K1","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.316,"mutant":false,"tests":10,"pass":10,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"52754ce30568e4d818370c3558342ab23d1292a67f692c1ded6a4d4b4121a029"}
{"label":"import-251","command":["timeout","-k","10","900","node","--test","packages/webui/tests/project-name-repo.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gRNU","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.132,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"324df0e70027674e99303723c75b02402d6ae43aefc73192e6c723644952fe98"}
{"label":"import-252","command":["timeout","-k","10","900","node","--test","packages/webui/tests/proof-cli.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gUya","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":2.557,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"9d0379c0dac670ea3b54331afee0d9da9c4c76a9c62315bd7cdf33458708b9b1"}
{"label":"import-253","command":["timeout","-k","10","900","node","--test","packages/webui/tests/proof.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gw3P","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.23,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"4b564ec494d8631518bd5e0a9dafce3492cc3655e90a82f12bc994fb0f48f017"}
{"label":"import-254","command":["timeout","-k","10","900","node","--test","packages/webui/tests/reads.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gDRG","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":2.251,"mutant":false,"tests":11,"pass":11,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"acd0a107da0270ad86ea4e75d1af8089f2541e1aa1c1613c10c35f47fcc38dea"}
{"label":"import-255","command":["timeout","-k","10","900","node","--test","packages/webui/tests/relaunch.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gDNA","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.062,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"b717bc82d68a804092878b6f68c73d970519d5dde6d9170a5cc3f417cd108c66"}
{"label":"import-256","command":["timeout","-k","10","900","node","--test","packages/webui/tests/return-flow.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/go3N","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":21.066,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"61fa95c4b8c802668f2b144954e8785c1a5d6e5f8d511646c61ae51abfcf899c"}
{"label":"import-257","command":["timeout","-k","10","900","node","--test","packages/webui/tests/room-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/geyH","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":8.015,"mutant":false,"tests":9,"pass":9,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"65cd71916ae9b8b6a8d47a0175d5cca96ed6c3d93d65ea334338cc651c3529e7"}
{"label":"import-258","command":["timeout","-k","10","900","node","--test","packages/webui/tests/room-http.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gfgT","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.284,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"32d8f63c7cbf6a67265e3ebb08eeda185061a94d2674c9e79da3e5ec9348ffaa"}
{"label":"import-259","command":["timeout","-k","10","900","node","--test","packages/webui/tests/routes-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gqwx","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":2.226,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"915d721ef9ebb84e963f021957955ce02a7603a048fde2ba61bd7f87e70137ae"}
{"label":"import-260","command":["timeout","-k","10","900","node","--test","packages/webui/tests/routes.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gULI","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.499,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"f5cb0cbb1428122e4a826ebf11a304123af5e33696dc7c3c6e9a40105a7f59b5"}
{"label":"import-261","command":["timeout","-k","10","900","node","--test","packages/webui/tests/send-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gV7T","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":14.209,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"b76ab6c25710827dc2e6c7231b3aa82259cce1a88174a33f83a45c251ff4e8cf"}
{"label":"import-262","command":["timeout","-k","10","900","node","--test","packages/webui/tests/send.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gbPv","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.077,"mutant":false,"tests":13,"pass":13,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"51a759891344d96c63d9d554c0b0a0cb541acca3d3d139170805723a90f83201"}
{"label":"import-263","command":["timeout","-k","10","900","node","--test","packages/webui/tests/serve.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g9AU","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.835,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"38c0c60b3b161bcd2cc3642f551fafd755e7ff57aa3a1f9cfc4329f0333ade9d"}
{"label":"import-264","command":["timeout","-k","10","900","node","--test","packages/webui/tests/settings-form.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gp5I","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":5.17,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"305e2081fd87ffad6bae81ef0ea0a7732f9208a0fcd6ea73c8604de13af86210"}
{"label":"import-265","command":["timeout","-k","10","900","node","--test","packages/webui/tests/settings-write.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gQmT","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.2,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"604a5dfa84401b569a004ca35182684d0aefda4da8a34c833953c15d8047c238"}
{"label":"import-266","command":["timeout","-k","10","900","node","--test","packages/webui/tests/shell.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/goIy","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":8.597,"mutant":false,"tests":5,"pass":5,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"aa8226cc8ad92136f875f3a976de37dfc1b0ab30a3c24f2861c34fcd6355d002"}
{"label":"import-267","command":["timeout","-k","10","900","node","--test","packages/webui/tests/sso-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gxVE","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":8.875,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"37b3e8ed9a38b6a66600fee9386b5a414d6179a8630349c6f695075c1fb29806"}
{"label":"import-268","command":["timeout","-k","10","900","node","--test","packages/webui/tests/sso.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gsiS","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":8.274,"mutant":false,"tests":28,"pass":28,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"2f286ac4644f8789c2ede5261362f4c57bcf02b84671e9b6c2f5c2994368bfbe"}
{"label":"import-269","command":["timeout","-k","10","900","node","--test","packages/webui/tests/tester-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g7am","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":4.164,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"92727a4aee749943dc100d1b843f848ef75bbeeda29d693217882c71368c4d42"}
{"label":"import-270","command":["timeout","-k","10","900","node","--test","packages/webui/tests/tester-cli.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gz1T","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":11.668,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"1c952ee8767467b1d1d4306e566b9b0f863d68215d30ae8ed3ab46d75ef46e8a"}
{"label":"import-271","command":["timeout","-k","10","900","node","--test","packages/webui/tests/tester-listener.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g99a","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":2.294,"mutant":false,"tests":11,"pass":11,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"b07648c44f522c5fa789c03634f248f63e8d312e9b93b7edd90d7951145d5419"}
{"label":"import-272","command":["timeout","-k","10","900","node","--test","packages/webui/tests/tester-socket.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gbnC","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.19,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"61704160b72bcd47d1e4166371e3ff65b148b7ef02b785f9427ef133d5ecdfb6"}
{"label":"import-273","command":["timeout","-k","10","900","node","--test","packages/webui/tests/thread-claims-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gGv0","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":5.008,"mutant":false,"tests":6,"pass":6,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"9d3d03d3fc2a108a5e1da2c8e153db2a21bc1e08b207698e9c8eb242dff9905a"}
{"label":"import-274","command":["timeout","-k","10","900","node","--test","packages/webui/tests/thread-claims.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g09J","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.423,"mutant":false,"tests":4,"pass":4,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"2b031497a6d9d4b18d215d28bc04de28fe26a800c5a7d54af8052aab35eee3be"}
{"label":"import-275","command":["timeout","-k","10","900","node","--test","packages/webui/tests/thread-sharing.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gmhU","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":3.736,"mutant":false,"tests":7,"pass":7,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"9f7b307edc31c95fac9ce71f39ea02466a40a6d80c70d9db91f433a07e19adb7"}
{"label":"import-276","command":["timeout","-k","10","900","node","--test","packages/webui/tests/usage-browser.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/g1rW","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":1.032,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"819697b7c5cb3918c007b9fe57dd3f101c79afb9b5656905e5e1e1b0bc82de9f"}
{"label":"import-277","command":["timeout","-k","10","900","node","--test","packages/webui/tests/usage.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gHnS","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.238,"mutant":false,"tests":2,"pass":2,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"555da950dacca5dc85db7172b50aaef5e50e726c6e30bb66c770c0c38d58ab76"}
{"label":"import-278","command":["timeout","-k","10","900","node","--test","packages/webui/tests/user-option-swap.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gx24","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":0.38,"mutant":false,"tests":1,"pass":1,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"20bcc3985f5808a2d7f8daa02c5438fbac81c5163c117fde07bea3f46e8fa5b3"}
{"label":"import-279","command":["timeout","-k","10","900","node","--test","packages/webui/tests/views.test.mjs"],"TMPDIR":"/mnt/storage/scratch/tmp/gHJv","start_nice":19,"observed_timeout_nice":19,"exit":0,"seconds":5.483,"mutant":false,"tests":3,"pass":3,"fail":0,"cancelled":0,"skipped":0,"todo":0,"log_sha256":"dd69767c233e8eaeeb85ddaaf274380bbb6df73ec6cc7aaaadc6336053e4ddd8"}
```
Exact mutant edits (temporary only, all restored):
```text
{"mutant":"M1","edits":[["const SCOPES = Object.freeze(['canon', 'playground', 'supporting']);","const SCOPES = Object.freeze(['canon', 'playground']);"]],"path":"packages/library/src/query.mjs","oracle":"supporting find/search/get","killed":true,"restored_clean":true}
{"mutant":"M2","edits":[["file.scope !== requestedScope || ",""]],"path":"packages/library/src/query.mjs","oracle":"get without scope returns null","killed":true,"restored_clean":true}
{"mutant":"M3","edits":[["import { listTree } from './reader.mjs';","import { listTree, headCommit } from './reader.mjs';"],["listTree(source.repo, index.commit)","listTree(source.repo, await headCommit(source.repo))"]],"path":"packages/library/src/query.mjs","oracle":"each get blob equals its served tree object","killed":true,"restored_clean":true}
{"mutant":"M4","edits":[["}).sort((a, b) => SCOPE_RANK[index.files.get(a.path).scope] - SCOPE_RANK[index.files.get(b.path).scope]);","});"]],"path":"packages/library/src/query.mjs","oracle":"full outgoing and incoming links stay in scope order","killed":true,"restored_clean":true}
{"mutant":"M5","edits":[["return other !== undefined && sees(index.mapping, universe, other);","return other !== undefined && other.scope === requestedScope && sees(index.mapping, universe, other);"]],"path":"packages/library/src/query.mjs","oracle":"full outgoing and incoming links stay in scope order","killed":true,"restored_clean":true}
{"mutant":"M6","edits":[["file.scope === scope && sees(index.mapping, universe, file)","file.scope === scope"],["other !== undefined && sees(index.mapping, universe, other)","other !== undefined"]],"path":"packages/library/src/query.mjs","oracle":"full outgoing and incoming links stay in scope order","killed":true,"restored_clean":true}
{"mutant":"M7","edits":[["scopeArg(scope, MANUSCRIPT_SCOPES)","scopeArg(scope, SCOPES)"]],"path":"packages/library/src/query.mjs","oracle":"manuscript still refuses supporting","killed":true,"restored_clean":true}
{"mutant":"M8","edits":[["'library.get': { method: 'get', fields: ['universe', 'path', 'scope', 'from', 'links_from']","'library.get': { method: 'get', fields: ['universe', 'path', 'from', 'links_from']"]],"path":"packages/bus/src/broker.mjs","oracle":"broker forwards supporting scope","killed":true,"restored_clean":true}
{"mutant":"M9","edits":[["const manuscriptScope = str(\"canon by default; playground is opt-in\", { enum: [\"canon\", \"playground\"] });","const manuscriptScope = str(\"canon by default; playground is opt-in\", { enum: [\"canon\", \"playground\", \"supporting\"] });"]],"path":"packages/harness/src/tools.mjs","oracle":"scope schemas expand only find/search/get","killed":true,"restored_clean":true}
```
Sweep summary:
```text
{
"root_count": 289,
"matches": []
}
```
## sage-4310 — row329 landed-base rebase, 2026-10-24
Branch della/row284-r4 rebased the six commits in 95d4991d2..315e9c84f
onto origin/refactor 9e2689dffb24c9881724b67db982bc87d527157f. Old branch
della/row284-r2 and its crash handoff remain unchanged. No conflict hunks
occurred: Git replayed all six commits automatically; range-diff marks all
six patches equal. Thus no manual conflict resolution was required.
Inspected broker.mjs against the new base: the sole row284 delta adds scope
to library.get fields. Row329 proxy verbs and all other base broker code
are retained unchanged. No optimization or review-note behavior change added.
The new eight-path seal is stored outside Git in
/mnt/storage/scratch/della-row284-r2-evidence/manifest-r4.txt with sibling
manifest-r4.blobs.txt and range-diff-r4.txt. Base, final candidate tip and
manifest digest are in seal-r4.txt beside them (avoids a self-referential
BUILD hash). Prior test/mutant results above apply to the prior base only;
no test, mutant, Node, syntax check, dependency install or queue command
was run for this rebase. Explicit sage-4310 authorizes this untested push.
Worker runs and Sage landing gate wait for CLEAR after Webby delta review.
-299
View File
@@ -1,299 +0,0 @@
# Row 332 — P3 harness config from the model proxy
## Assignment and boundaries
2026-10-24: Fethry, thread 65673bd9-3bfa-412b-85d5-9b364187d8b6, branch fethry/row332, baseline c8a9bcf94. Sage assignment sage-4292; accepted brief plus full pi-routes amendment c8a9bcf94 (mos-1616). Gladstone first review, Dewey landing review; landing waits for P1/329 and P2/331, rebase on both and Sage's gate. No tests before Sage's CLEAR. No live proxy, host credential directories, real proxy data, management key, cutover, policy edits, or Codex harness changes.
Queue next in canonical checkout returned `nothing` during assignment. Starting row with op fethry-332-start met Sage's queue update lock; retry through the queue only. Root npm ci --ignore-scripts --no-audit --no-fund completed in this worktree (128 packages); no canonical node_modules use.
## Design note (line numbers at c8a9bcf94)
- packages/seat/src/session.mjs:242-247 defines ENV_ALLOW; keep it unchanged. sessionEnv:256-262 gains optional proxy context and drops CLAUDE_CODE_OAUTH_TOKEN, every passed ANTHROPIC_* variable, OPENAI_API_KEY, OPENROUTER_API_KEY and ZAI_API_KEY before adding harness env. Non-proxy results retain current behavior exactly.
- packages/plugins/harness/claude-code/index.mjs:56-67 preflight accepts the session proxy credential; env:119-126 sets ANTHROPIC_BASE_URL and ANTHROPIC_AUTH_TOKEN from that context.
- packages/plugins/harness/pi/index.mjs:33-36 preflight requires its own provider credential or proxy key, never a Claude OAuth token. env:63-70 sets only the session's proxy key as ANTHROPIC_API_KEY and selects the generated provider. Fresh run-local home/.pi/agent/models.json is private (0600; parent directories 0700). Every apiKey is the literal reference $ANTHROPIC_API_KEY; recursively forbid values beginning with !. Nothing stores the key in models.json or a manifest.
- packages/harness/src/bundle.mjs:313 buildBundle accepts transient proxy context; :379 harness.env call needs it plus run location and launch.models. Context must never be added to session metadata, source digests, or manifest. The run-local file regenerates on each launch.
- packages/cli/src/launcher.mjs:391,400 preflight, :412 account checks, :529 bundle creation and :592 child env must agree on the same session credential. Coordinate its acquisition with P2; build/test now against the specified { baseUrl, key } stand-in, not a management client or a key-store implementation.
Exact business setting keys remain launch.models.<selection>.provider, launch.models.<selection>.model, launch.account.name and launch.account.credential (launch.mjs:12-24,81-89). Provider already accepts proxy. Proposed account credential sentinel is the literal proxy (add alongside existing uppercase environment-set syntax), with launch.account.name a human-readable id such as proxy. No new fields. Existing provider anthropic selects the Anthropic route, zai selects GLM, and proxy selects the stack-owned GPT route; send this interpretation to Sage before implementation because the brief doesn't specify route encoding for provider proxy.
## Build-time API choice and pinned binary
P1's committed magica/row329 has CLIProxyAPI 8.0.42 in packages/model-proxy/PIN. Use that commit's fetchPinned({dataRoot:<fresh temporary root>}) implementation, copied from Git objects to this seat's temp tooling directory with its relative dependencies and PIN, until P1 lands. Never inspect another seat's worktree/scratch. It fetches only pinned GitHub release assets and checks archive, executable and panel hashes. No production instance config is needed and nothing under a real dataRoot/proxy is read.
After CLEAR, try actual pinned pi requests with both openai-responses and openai-completions through that binary under unshare -rn, against stand-in upstreams with made-up credentials under 24 characters. Record version, API path, safe request fields, response status and turn result. Choose one shape once from those results and hard-code it; no runtime fallback. Real Codex OAuth cannot be simulated as a real authenticated turn: first real Codex turn remains row209 phase A step7. Distinguish the offline compatibility evidence from that deferred real-auth proof.
The separate offline GLM acceptance script (outside scripts/test-*.sh) uses pinned pi and proxy, checks the upstream sees the model id from /v1/models, and records whether thinkingFormat/zaiToolStream-derived fields survive translation. All configs/auth placeholders belong to its fresh temp root.
## Implementation and test sequence
1. Add tests first for env isolation, Claude proxy env and preflight, pi credential refusal and each generated route/file invariant, and business account acceptance. Do not run until CLEAR; first new-test red is reported afterward, old-test red or second red is reported before changing anything.
2. Implement harness/bundle/env handling against P2's transient interface. Add launcher boundary integration once its exact P2 acquisition seam is agreed. Keep secrets out of session.json and bundle manifests.
3. With CLEAR, run the offline API-shape probe and GLM turn, then whole touched test files. Before each whole-file run report the list derived by parsing imports and traversing local dependencies; include harness plug-in dynamic loading explicitly. packages/cli/tests/case1-accept.test.mjs remains excluded without Mos approval.
4. Kill named mutants; restore production source and verify. Record exact output and nice. Use a fresh shell mktemp -d /mnt/storage/scratch/tmp/XXXXXX TMPDIR for each run, absolute nice 19, and timeout -k 10 for each scripts/test-*.sh. No hidden skips; Sage owns the package/script landing gate.
5. After dependency landings, rebase, complete review and gate stages, update queue only through its CLI, and append session/build receipts. Push only fethry/* when ready for authorized review; no force-push or attribution trailers.
Planned tests:
- Each forbidden environment variable is absent in proxy mode; all existing allowed env is identical without a proxy; two launches receive distinct own keys and no other agent's key.
- Claude env has exactly the supplied proxy base URL/auth token; proxy credential satisfies preflight without host upstream credentials.
- pi refuses no-session-credential for no key or Claude OAuth alone, accepts an own provider key and a proxy key.
- models.json covers Anthropic anthropic-messages at root URL, GLM openai-completions at /v1, and a stack-owned GPT provider at /v1 with the chosen API; routes use configured model ids.
- Every apiKey is $ANTHROPIC_API_KEY; no key value occurs in file; recursively no value starts with !; mode 0600 and private parents; next launch uses changed port/models/key reference with no stale content.
- Business accepts provider proxy and account credential proxy while preserving existing valid and invalid account behavior.
- Launcher/bundle integration keeps context transient and passes only the launch's own key.
- Every new refusal code gets a separate test.
- Offline GLM pinned-pi turn and z.ai compat observation; both GPT API-shape requests recorded with limitations.
Named gate mutants:
1. Proxy mode still passes CLAUDE_CODE_OAUTH_TOKEN (original brief).
2. models.json receives the key value instead of $ANTHROPIC_API_KEY (amendment).
No tests have run. API-shape choice is pending evidence, not claimed.
## Progress 22:27Z
Placed initial RED tests (not executed): packages/seat/tests/proxy-session-env.test.mjs and packages/plugins/tests/proxy-harness.test.mjs. These exercise real sessionEnv and loader-loaded harness exports. Production source remains untouched pending the first authorized RED run. Removed no assertions and ran no tests. Correct baseline bundle harness.env line is 376 (not 379 in the initial design note).
Sage reporting attempts fethry-0001 (including same-key retry) and fethry-0002 all returned `T3 GET /api/orchestration/threads/<sage> timed out after 30s`. Delivery is unconfirmed. Queue move retry also met a Sage queue update lock (sage-333-reviewers-1024a); no bypass.
Additional test-first placement: packages/business/tests/proxy-launch.test.mjs covers existing proxy model acceptance, proposed proxy account credential literal, preserved environment account forms, and rejection of mixed/literal credential strings. Pending Sage's route/account interpretation and CLEAR; no production edits or tests run.
## Import audit and queue status
The non-evaluating import audit uses Node vm.SourceTextModule.dependencySpecifiers, not a text-path grep, plus explicit computed-import edges from the plug-in loader to both harness modules. Source: import-run-list.mjs; output: IMPORT-RUN-LIST.txt (211 entries, including the explicitly EXCLUDED case1-accept file). This is a candidate impact list for the planned source changes, not an executed test list. Before a whole-file run, report the actual authorized subset to Sage. Parsing executes no repository modules and runs no tests. The first audit invocation had a path-depth setup error (ENOENT); corrected the audit's own repository root and regenerated successfully.
At 22:28:19Z the canonical start operation returned `queue: only the owner (sage) may start row 332`. Per assignment, wait at least two minutes before repeating this same op. No queue state was edited manually.
## Design correction after D9 re-read
The initial route-encoding proposal (provider proxy for GPT only) is not sufficient: design D9 explicitly defines provider proxy as any model through the instance proxy. Do not implement the earlier proposal. Two viable encodings need resolving before route-dependent tests/production: exact model-id lookup in pinned pi's provider catalogs (no new business fields, but refuses proxy-only aliases/unknown models), or explicit route metadata in launch.models (additive schema, needs Sage to confirm it is within the approved brief). Recommend exact catalog membership if all intended configured model ids are in pinned pi; otherwise ask Sage to define/approve an explicit route field. Never guess by model prefix or silently choose a wire API. Independent env/preflight tests already placed remain valid.
Reporting recovered: fethry-0004 was accepted by t3_send_message at approximately 22:29:51Z. It delivered the D9 route correction, route-encoding/P2-seam question, import-manifest location and no-tests status to Sage. Earlier failed-message deliveries remain unconfirmed.
22:32:18Z: The start retry issued at 22:30:40Z (over two minutes after first owner refusal) also exited 2: `queue: only the owner (sage) may start row 332`. This is an ownership boundary; row was not started and no code/test execution proceeds through it. Sage's assignment must take effect before the same op can succeed. The full design report fethry-0005 again timed out; fethry-0004 is the confirmed delivered report. git diff --check passed; no test, probe, commit or push has run.
## Route ruling accepted — sage-4293, 22:37Z
Sage settled explicit metadata, superseding both initial encoding proposals and the catalog proposal. Exact new setting: launch.models.<selection>.route; permitted values anthropic, glm, codex, required only when provider is proxy. Nonproxy entries still allow provider/model only. Missing route refuses proxy-route-missing; present unknown/nonstring route refuses proxy-route-unknown. Both get independent code assertions; each valid value gets a test using a proxy-only model id absent from any catalog. The GPT route's generated pi provider will be mosaic-proxy-codex, never openai-codex. Its wire API remains a build-time choice after the pinned-binary probe. P2 passes only {baseUrl,key}; no route belongs to that seam.
A key persistence hazard found during source inspection: launcher.mjs:571 writes bundle.env as session.harnessEnv. Adding the key to harness.env must not retain this behavior for credentials. P3 will keep generated key env transient for spawnSession and omit those credential values from serialized harnessEnv. runner.mjs:390 already inherits the spawn environment before applying nonsecret harnessEnv. Test the on-disk session/bundle boundary, not only models.json.
The old launch-settings.test.mjs already uses provider proxy fixtures without route. Update those fixtures to explicit anthropic routes before any full-file run; preserve their existing authorization assertions. This is the new approved validation shape, not permission to loosen tests. No tests have run and no production edits exist.
Additional test-first placement after route ruling: packages/harness/tests/proxy-bundle.test.mjs exercises real buildBundle with explicit provider proxy entries and proxy-only model ids, three generated providers, run-local file mode, environment references, recursive no-! values, no key in bundle files/manifest, fresh model/port/key on next launch. The exact GPT API assertion must be added from the authorized pinned-binary probe before this test file's first run; it deliberately makes no unverified wire-shape claim now. No skip is introduced.
Canonical queue show returned owner sage and after=331 at 22:40Z; it also warned `view unknown` for the rendered table. No repair or queue bypass attempted; wait for Sage's announced batch. Queue metadata identifies shared proxy Gitea issue #1830.
## STOPPED — mos-1630, 2026-10-24T22:48Z
Jason's relayed crash instruction supersedes active work: no long-job restart, commit/push safe documentation only, handoff in this worktree, no other thread messages, then stop. See HANDOFF.md for complete state, next steps, uncommitted tests/audit script, and reruns needed. No tests or probes ever ran; no production implementation exists. Latest design is explicit launch.models route metadata per sage-4293; earlier catalog/GPT-only proposals are superseded. The original 211-entry import manifest predates the fourth new test file and is historical, not run authorization. Full inline resends still hit T3 timeouts. Crash commit will exclude every unrun test and the audit script.
## Resumed — sage-4298, 2026-10-24T23:12Z
Resume authorized; crash-stop state above is historical. Sage accepts route spellings, refusal codes, mosaic-proxy-codex and launch.account.credential=proxy. Added third named mutant: **proxy key serialized into session.json**. Added an unrun real-launcher integration test in packages/cli/tests/launcher.test.mjs: a stand-in `{baseUrl,key}` enters via proposed createLauncher proxy option; real harness generation, session writer and runner must pass the key transiently while disk session/bundle files omit it. Adapter alone is fake. This catches restoring harnessEnv:bundle.env without credential separation. Existing test assertions are unchanged.
Regenerated IMPORT-RUN-LIST.txt with the non-evaluating import audit (static module dependencies plus explicit computed harness-loader edges). It now includes proxy-bundle.test.mjs; case1-accept remains explicitly EXCLUDED (mos-1612). Full manifest, touched tests and all three named mutants delivered inline to Sage using t3_code t3_thread_send, clientRequestId fethry-row332-resume-report-001, delivery steered. No unresolved route question remains. GPT API selection awaits CLEAR and pinned-binary evidence. Production implementation remains held for required first RED; tests/probes/fetches remain held for CLEAR. git diff --check clean.
Canonical queue next fethry started without timeout; no start retry until Sage confirms after-none write. Initial local-worktree queue invocation refused because queue requires canonical checkout; rerouted to canonical as required, no state bypass.
## Queue start retry — sage-4301, 2026-10-24T23:15Z
Sage reports after=none at rev4057. Retried canonical `scripts/mosaic queue move 332 in-progress --op fethry-332-start --by fethry` without a timeout. Awaiting its result; no duplicate command or manual queue edit. Lane B remains held and all tests/probes/fetches remain forbidden until CLEAR. Static review of test fixtures confirms launcher test uses the existing real-harness fake-adapter setup; initial RED remains unrun.
Start result: `ok fethry-332-start rev 4059 row 332 briefed→in-progress` (exit0). No tests/probes/fetches run.
## P1 rebase and pre-run reader stop — sage-4312/4313
Rebased onto 9e2689dff; current documentation checkpoint efe3e4697. Saved/restored all uncommitted notes/tests with named stash (retained for recovery). BUILD-LOG.md and SESSIONS.md append conflicts preserve both upstream and row332 entries. No production edits or force-push. git diff --check clean.
CLEAR received in sage-4313, conditional on pre-step reader check. STOP condition found before any test/probe/fetch: packages/cli/tests/launcher.test.mjs imports ./helpers.mjs, whose line10 imports BusError/Broker from ../../bus/src/broker.mjs (P1-changed path). The P3 test also starts the real broker through startHost. Report delivered to Sage as fethry-resume-0003, clientRequestId fethry-row332-p1-reader-stop. Await specific reader-chain authorization. No runs, counts or mutant outcomes exist. Mutant execution requires implementation reaching GREEN first; baseline RED will not be claimed as mutant evidence.
## First execution — sage-4316/4319, lane B, 2026-10-24
Reader chain authorized by sage-4316. Every run below used fresh shell `mktemp -d /mnt/storage/scratch/tmp/gXXX`, absolute nice19 (recorded), timeout -k10 (180s new files/300s whole launcher). No probes/fetches/mutants or case1-accept run. Logs are plain text in red/ beside this note.
| File | UTC start/end | pass/fail/skip | Classification |
| --- | --- | --- | --- |
| business proxy-launch | 23:41:37/23:41:37 | 2/4/0 | Expected missing route validation/account support |
| harness proxy-bundle | 23:41:42/23:41:42 | 0/5/0 | Fixture ERROR: assignment to frozen resolved.vars, not feature RED |
| plugins proxy-harness | 23:41:44/23:41:44 | 0/5/0 | Fixture ERROR: missing createLoader options, not feature RED |
| seat proxy-session-env | 23:41:50/23:41:50 | 1/1/0 | Expected instance OAuth leak |
| cli launcher (whole) | 23:41:55/23:42:25 | 34/1/0 | New P3 route rejected; all34 old tests pass |
Per sage-4319, fixed only the two new-file fixtures and committed b285e581e `fixture fix, untested` before rerunning. resolvedFor uses its mutation callback; createLoader receives {log(){}}. Existing launcher assertions were not changed.
| Corrected file | UTC start/end | pass/fail/skip | Classification |
| --- | --- | --- | --- |
| harness proxy-bundle | 23:42:41/23:42:41 | 0/5/0 | Another fixture ERROR: pm selects a/z/g absent from fixture launch.models; not valid feature RED |
| plugins proxy-harness | 23:42:41/23:42:41 | 1/4/0 | Valid feature REDs: missing Claude proxy URL/key and preflight; pi missing-credential refusals absent. Acceptance test already passes because existing pi preflight only checks binary; not proof of proxy credential behavior |
Stopped after exactly one authorized corrected run each. No edits/reruns after second harness fixture error; report to Sage before changes. Proposed follow-up: preserve valid fixture business routing, then overlay a test-local resolved vars object for buildBundle, or supply a coherent model table in callback. GPT API assertion still awaits authorized evidence and must precede a GREEN claim.
Stash created before rebase: 69ad35ec79805a0303ede4454f8d6815ddfa7bb3. Shared refs/stash must not be used again; entry remains untouched for Sage to clear. Future checkpoints use branch WIP commits.
Own-worktree node/chromium process sweep at23:42:57Z found only six tool-service processes predating tests (started23:12:08–23:12:10Z), no test node/chromium leftovers. Preserved tool services. No process killed. Lane B returned; mutants deferred until RED→fix→GREEN and later CLEAR with tip.
## Corrected bundle first valid RED — sage-4320
Only proxy-bundle.test.mjs edited: resolve a valid existing fixture business first, then copy resolved and vars locally, overlay harness/model, and assert selection exists in the supplied declared models table. Frozen original is untouched. Commit56701f715 `fixture fix, untested`, directly atop b285e581e, before execution.
Exactly one whole proxy-bundle run at23:44:40Z (start/end), fresh gXXX TMPDIR, nice19, timeout-k10/180s: 5tests,0pass,5fail,0skip,exit1. All five now reach real buildBundle and fail ENOENT on the required run/home/.pi/agent/models.json: missing production generation, valid feature RED rather than fixture errors. Earlier frozen-vars and unknown-model errors remain separately recorded. Log red/harness-corrected-2.txt. No production edits, further runs, mutants, probes or fetches. Lane B free.
Rebase made original origin/fethry/row332 diverge from local; publish current history on fethry/row332-p1 without force, preserving original remote checkpoint. Shared stash69ad35ec79805a0303ede4454f8d6815ddfa7bb3 remains untouched. Remaining uncommitted business/seat tests, launcher addition and audit source are not included in this two-fixture checkpoint.
## P3 implementation checkpoint — sage-4323/4325, UNRUN
Scope correction: sage-4322's P1 meant P3; no P1 code changed. Source edits authorized by sage-4323; all runs remain held. This is an implementation checkpoint, not GREEN or acceptance. Executing the established plan inline; user lane restrictions supersede skill test-run/commit defaults for this checkpoint.
Latest route ruling sage-4325 supersedes sage-4293/4298 and all earlier route-required notes: omitted proxy route means Anthropic and preserves the stored provider/model shape. Explicit anthropic/glm/codex routes remain accepted; unknown/present-invalid route refuses proxy-route-unknown. proxy-route-missing is withdrawn, not implemented. Other providers keep provider/model-only schema. Own business test updated for default; new bundle test exercises default generation without changing existing explicit-route assertions. launch-settings.test.mjs remains byte-unchanged.
Implementation in six production files:
- business launch validates optional proxy route, preserves omission, accepts account credential literal proxy.
- seat sessionEnv leaves ENV_ALLOW unchanged and filters provider variables only with proxy context.
- Claude accepts proxy credential preflight and returns proxy base/auth env; pi requires own provider key or proxy key, never Claude OAuth.
- bundle carries transient proxy/models to harness calls and propagates proxyRoute separately from primary/fallback route; no context in manifest.
- pi groups declared routes into run-local private models.json, references only $ANTHROPIC_API_KEY, refuses executable-looking model ids/key collisions, exclusive create and0700 parents/0600 file. No host auth reads. Generated file digest included in bundle manifest. Models use pi's documented default sizes/costs and reasoning support, with explicit z.ai compat for GLM; no catalog membership inference.
- launcher accepts the specified context stand-in or a per-agent factory, copies only baseUrl/key, carries it through repeated preflight checks and final bundle/spawn. Factory receives business/instance; P2 owns acquisition and may be called twice due to existing launch recheck. No P2 store/client calls invented. Provider credential variables split out at actual session.json serialization and delivered only through spawn env. Account proxy source validates against the supplied context, not host upstream variables.
### Old-test changes authorized by sage-4325 (baseline1e47b0919)
P3 item4 (rows brief pi preflight bullet, lines250-252) mandates refusal without proxy/own credential:
- plugins/tests/harness.test.mjs:102 before `assert.equal(pi.preflight({ env: {} }), null)`; after asserts `.code === no-session-credential`. Other assertions unchanged.
- cli/tests/launcher.test.mjs prepare():84 before only fake Claude OAuth; after additionally supplies ZAI_API_KEY=fx332-pi only when chief primary/fallback names pi. Other tests' assertions unchanged; Claude-only preparation does not receive it.
- cli/tests/launcher.test.mjs old no-credential pi test (sage reference697): before deletes OAuth then expects launch/pi and launch-log event; after also deletes newly supplied fake ZAI key, expects no-session-credential refusal, refused log code and no registered session. Test renamed to reflect mandated behavior. Existing no-session-credential Claude test unchanged.
No other old test was changed. Static review found these conflicts before execution and authorization preceded edits. No old-test RED occurred; baseline whole launcher had34 old passes.
### GPT wire API: PENDING
Single build-time value PROXY_CODEX_API=null in pi/index.mjs. A declared codex route refuses generation with a plain pending-evidence error until that value is settled; no guessed wire API, environment switch or runtime fallback. Consequently existing all-three-route bundle tests are not expected GREEN yet. P2 integration, full tests, pinned evidence, mutants and reviews remain pending.
Planned separate 4c evidence run (outside scripts/test-*.sh), requiring its own lane B CLEAR:
1. Use landed P1 fetchPinned only under a fresh owned temp root for the exact PIN (8.0.42). Fetch is a separately approved preparation, not part of offline networking. Verify hashes via P1; never use host installation or another seat's scratch.
2. Run the pinned proxy and local stand-in upstream inside unshare -rn with loopback enabled, empty private HOME/auth dir and a sanitized environment. No real auth file or network. All fake credentials under24 chars. Private test-only proxy config points only at the stand-in.
3. Generate two private probe-only pi model configs, one openai-responses and one openai-completions, both baseUrl=the isolated proxy/v1. Run pinned pi turns and record safe path/body shape fields, statuses, stream result and upstream observations, omitting auth/header values. These probe configs do not select the production constant.
4. Separately run the GLM completions turn under the same isolation and record whether thinkingFormat=zai/zaiToolStream-derived fields survive proxy translation.
5. If the offline stand-in cannot distinguish the two GPT shapes for the Codex-login route, report inconclusive evidence to Sage for Mos; do not select a value. A compatibility route cannot be reported as a real Codex-auth turn. First real Codex turn remains row209 phaseA step7.
No tests, probes, binary invocation or fetch ran during implementation. Import audit below is source parsing only, never repository evaluation. New run list includes the old harness.test.mjs touched under ruling; case1-accept remains EXCLUDED. Shared stash already cleared by Sage after1e47b0919 confirmation; no further stash operation used.
## Six whole files on a5330386c — sage-4326 lane B
Each ran exactly once, in requested order, no edits between runs and no reruns. Fresh shell gXXX TMPDIR per file; every log records nice19; timeout-k10/180s (launcher300s). No mutants/probes/fetches or extra impact files. Logs green-attempt/*.txt.
| File | pass/fail/skip | exit | UTC start/end |
| --- | --- | --- | --- |
| business | 6/0/0 | 0 | 23:57:06Z/23:57:06Z |
| seat | 2/0/0 | 0 | 23:57:06Z/23:57:06Z |
| proxy-harness | 5/0/0 | 0 | 23:57:06Z/23:57:06Z |
| harness | 9/0/0 | 0 | 23:57:12Z/23:57:12Z |
| proxy-bundle | 1/5/0 | 1 | 23:57:12Z/23:57:12Z |
| launcher | 34/1/0 | 1 | 23:57:12Z/23:57:42Z |
Expected-PENDING failures (each shared declared table includes codex), all stop before assertions with `Error: proxy GPT API is PENDING build-time evidence`:
- P3 Anthropic route uses messages at proxy root and the declared model id
- P3 GLM route uses completions at proxy /v1 with explicit z.ai compatibility
- P3 GPT route selects a stack-owned provider instead of pi Codex OAuth
- P3 models file is private, references the one session key, and stores no executable values or keys
- P3 every launch regenerates proxy port, declared models and own key without caching
The omitted-route-only bundle case passed. Five pending failures do not establish the remaining route/file assertions; no claim of GREEN.
Real old-test RED: `row 65 a failed primary preflight launches the fallback on a fixture harness module, recording the route and the reason` (launcher.test.mjs:714). First expected operation `await launcher.launchPm()` throws before the result assertions: `PM launch refused: no-session-credential (fallback fixture: pi needs its own provider key or a session proxy key (primary down: fixture preflight fails))`. Fixture harness re-exports real pi; prepare() recognized literal pi primary/fallback only, so it did not supply the needed own key. Reported to Sage as fethry-resume-0012 before any edit; no fix or rerun authorized/performed. P3 serialization test and all other launcher tests passed.
After all runs finished, changed only harness.test.mjs:100 title per sage-4326 to `row 65 pi preflight refuses missing credentials, and its version is the package pin`; assertion unchanged, no rerun for title. Sweep after end23:57:42Z found the same six pre-existing tool services (2699602,2699605,2700525,2700526,2700531,2700931), no test node/chromium leftovers; no process killed. Lane B free. No other source/test fixes in this follow-up.
## Fixture correction authorized — sage-4327
Old-test list addition: launcher.test.mjs row65 fallback test (line714 at e9fc105ac), before: no own pi credential before setup; after: this test alone sets given.f.env.ZAI_API_KEY=fx332-pi immediately before setup. All assertions unchanged; prepare() condition unchanged. Reason: P3 item4 requires pi own/proxy credential; this fixture inherits pi preflight. Prior real RED and first thrown error preserved above.
New proxy-bundle tests now supply explicit per-test declared tables: Anthropic only, omitted/default only, GLM only, GPT only; privacy/regeneration use Anthropic+GLM and retain every key/mode/no-executable assertion applicable to those routes. Regeneration additionally checks changed GLM endpoint/model. Added expected refusal test for declared Codex with pending build-time API; no production source changes. Only GPT generation test should remain expected-PENDING. Fixture fixes committed untested before exactly two authorized whole-file runs.
### Two-file fixture verification — sage-4327
Fixture checkpoint f1e8cda07, no source change. Exactly one run each, no edits between runs or reruns. nice19, fresh gXXX TMPDIR per file, timeout-k10/180s bundle and300s launcher. Logs fixture-r3/*.txt.
- proxy-bundle23:59:16Z:7tests,6pass,1fail,0skip,exit1. Sole expected-PENDING failure: `P3 GPT route selects a stack-owned provider instead of pi Codex OAuth`, error `proxy GPT API is PENDING build-time evidence`. All other route/privacy/regeneration cases and explicit pending-refusal case pass.
- launcher23:59:16–23:59:45Z:35tests,35pass,0fail,0skip,exit0. Row65 fallback assertions unchanged and now pass; P3 transient serialization case passes.
No failure other than expected GPT generation; GPT wire evidence, P2 integration/rebase, mutants and reviews still pending. Sweep shows only same six pre-existing node/chrome tool services, no test leftovers. Lane B free after23:59:45Z. No probes/fetches/mutants or extra tests run.
## Route-required correction — sage-4328 restores sage-4293
sage-4325 default-Anthropic ruling withdrawn. Explicit route required again: missing proxy-route-missing, present invalid proxy-route-unknown, distinct own tests. Removed generation/session-model defaults; bundle omitted-route test now asserts missing-route code. Active plug-in documentation corrected. No catalog/prefix inference.
Old-test list (baseline1da28a7bd): launch-settings.test.mjs41,154,161,188,198 object fixtures before provider:proxy/model only; after identical objects plus route:anthropic. Line45 before assignment models.opus.provider=proxy; after adds models.opus.route=anthropic. Every assertion byte-unchanged; no assertion relaxed. Authority/reason sage-4293 restored by sage-4328: D9 proxy is any upstream route and omission cannot select Anthropic silently.
Pre-run git-grep audit scoped 'packages/*/tests/*', saved route-required/proxy-fixture-grep.txt:16 model/assignment lines in four files. Positive controls matched launch-settings41 literal,45 assignment and intentional missing inputs proxy-launch14/proxy-bundle47. Broader quoted-proxy literal audit saved proxy-literal-grep.txt, manually reviewed for multiline entries. Remaining route omissions only intentional refusal cases (proxy-launch14,proxy-bundle47); unknown-route test uses route variable. All six old fixtures explicit; launcher155 and remaining bundle model literals explicit. Other broad hits are account sentinels, CLI argv or filesystem strings, not model table entries. Findings sent inline as fethry-resume-0015 BEFORE any tests. No other missing-route positive fixture found.
Committed untested per instruction; four whole-file runs follow under lane B CLEAR, no reruns or extra files. GPT offline run and P1 fetch remain unstarted and require separate explicit go.
### Required-route four-file verification — sage-4328
Tested9563fbc8b, exactly once per whole file in authorized order. No edits between runs, no reruns/extra tests. Each fresh gXXX TMPDIR,nice19,timeout-k10/180s (launcher300s). Plain logs route-required/*.txt.
| File | pass/fail/skip | exit | UTC start/end (2026-10-25) |
| --- | --- | --- | --- |
| proxy-launch | 6/0/0 | 0 | 00:01:47Z/00:01:47Z |
| launch-settings | 18/0/0 | 0 | 00:01:55Z/00:01:56Z |
| proxy-bundle | 6/1/0 | 1 | 00:01:56Z/00:01:56Z |
| launcher | 35/0/0 | 0 | 00:01:56Z/00:02:27Z |
Only failure: `P3 GPT route selects a stack-owned provider instead of pi Codex OAuth`, expected-PENDING error before assertions: proxy GPT API is PENDING build-time evidence. No other failures; missing-route and unknown-route separate-code tests pass; six old launch-settings fixture metadata changes preserve all assertions. All35 launcher tests pass.
Sweep after00:02:27Z: only same six pre-existing tool services; no test node/chromium leftovers and no process killed. Lane B free. GPT wire-shape evidence and P1 fetch NOT started; each still needs Sage explicit go/CLEAR. No mutants.
## GPT offline attempt1 and static diagnosis — sage-4329/4330
One authorized landed-P1 fetchPinned invocation succeeded, exact PIN8.0.42 executable SHA74661f8cf949977870231359e8bf4344e07946766a673c08fa25a3e5f72fc95e, panel1.26.7 SHA8c9c6b7d3fb311e6aad5d06e1993e53a2d28389e640448a1bc6304ed20b057b5. Fresh owned root named in evidence/root.txt, no alternate binary/new fetch. Fetch entry required nice19, end log observed16 due host renice; disclosed before continuing. Static-inspection invocation then failed entry nice guard before any binary read/launch; no turn. Main isolated attempt1 setPriority19 explicitly, but static binary tag scan again observed host renice16; subsequent child starts explicitly set19.
Attempt1 unshare-rn showed interfaces[lo], empty private HOME/auth and sanitized env. Proxy booted version8.0.42 commitbc064340, built2026-10-24T14:21:38Z. GET/v1/models response200 with modelIds[], script refused `stand-in routes absent from proxy catalog`; zero GPT-responses/GPT-completions/GLM pi turns ran, so zero compatibility evidence. Cleanup remainingManagedChildren0. No rerun under that CLEAR; reported0018. Raw sanitized receipt evidence/offline.txt preserved.
Startup network finding for P7/unit, plain text from isolated proxy log:
`failed to fetch latest Grok CLI version from npm, keeping fallback/cached version error=npm registry request failed: Get https://registry.npmjs.org/@xai-official/grok/latest: dial tcp [2606:4700::6810:122]:443: connect: network is unreachable`.
The namespace blocked external egress. Panel auto-update was disabled; this separate Grok version check still attempted startup egress. No real auth or host proxy touched.
### Static cause recorded BEFORE attempt2 (sage-4330)
No executable/probe invocation for diagnosis. Read the hash-pinned bundled management.html's config reader/serializer and P1 initialConfig in packages/model-proxy/src/settings.mjs. P1 produces nested server/management/access/oauth/observability/routing but adds no upstream provider config. Bundled panel Ip explicitly reads `api-keys.openai-compatibility`; zee reads e['api-keys'][provider]; Fp rejects groups without array group.keys; Np reads group name/base-url/keys/models; xv serializes a group with name,base-url,keys; hv serializes each key as api-key. Therefore the version8 payload is ROOT `api-keys: { openai-compatibility: [{name,base-url,keys:[{api-key}],models:[{name}]}] }`, distinct from the client allowlist under access.api-keys. Source excerpts/character offsets in evidence/bundled-panel-shape.txt; no header/auth values in receipts. This is actual pinned bundled UI reader/writer source, not a guessed provider nesting or an external/unpinned example.
Cause of first setup failure: my test used providers.openai-compatibility with api-key-entries, neither the root key nor the group-key field expected by that pinned writer. Initial readiness also stopped at first200 instead of waiting for required models; fixed to30s bound,1s intervals, model count logged per poll. Under sage-4330 one further isolated attempt only: reuse fetched binary and re-hash with P1 verifyInstall before launch; separate attempt2 test roots; actual pi turns each once, retry disabled in pi settings; API constant remains PENDING. Record/restore niceness for own descendants when host policy changes it. No actual turn has yet run as of this pre-attempt note.
## Offline attempt2 evidence — sage-4330, API STILL PENDING
Static diagnosis above preceded this one extra attempt. No new fetch. P1 verifyInstall recomputed existing executable/panel hashes before use and matched PIN8.0.42/panel1.26.7. unshare-rn verified only lo, empty private HOME/auth, sanitized env. Test config uses bundled writer's root api-keys.openai-compatibility/groups.keys shape. Readiness poll1 not-ready/modelCount0; poll2 status200/modelCount2; proxy lists gpt-fixture and glm-fixture. No setup failure on attempt2.
A transparent loopback HTTP tap captures pi's method/path and a whitelist of body shape fields; forwards original body bytes to pinned proxy; no header/auth values recorded. Upstream stand-in receives proxy output. Both remain inside network namespace. Each actual pi invocation once,50s timeout-k10; retry.enabled=false and provider.maxRetries=0 in private pi settings. Proxy has request-retry0. Outer isolation240s timeout-k10; no reruns. All three turn exits0 and marker P332_OFFLINE_OK observed:
| Turn | Pi request to proxy through transparent tap | Proxy response | Stand-in upstream observation |
| --- | --- | --- | --- |
| GPT responses | POST/v1/responses, modelgpt-fixture,streamtrue,reasoning={effort:low,summary:auto} |200,response.completed event, marker |POST/v1/chat/completions,reasoning_effort=low,max_tokens=16384,streamtrue |
| GPT completions | POST/v1/chat/completions, modelgpt-fixture,roles[developer,user],reasoning_effort=low,max_completion_tokens=16384 |200,completion stream marker |POST/v1/chat/completions,roles[developer,user],reasoning_effort=low,max_tokens=16384 |
| GLM completions | POST/v1/chat/completions,modelglm-fixture,thinking={type:enabled,clear_thinking:false},reasoning_effort=low,max_completion_tokens=16384 |200,completion stream marker |POST/v1/chat/completions,same thinking object and reasoning_effort retained,max_tokens=16384 |
GLM compatibility finding: thinkingFormat=zai-generated thinking.type=enabled/clear_thinking=false survives proxy translation, as does reasoning_effort=low. zaiToolStream-derived tool_stream was NOT emitted, because this turn disabled tools; its survival is NOT proven. Static pinned pi source node_modules/@earendil-works/pi-ai/dist/api/openai-completions.js:612-618 sets params.tool_stream=true only with active tools and compat.zaiToolStream. No tool-call stream was exercised. This limitation is reported, not silently interpreted as pass or drop.
Both GPT shapes pass on the stand-in openai-compatibility credential route. This does not distinguish them for the Codex-login route; no Codex OAuth/auth file exists in this experiment. Evidence is INCONCLUSIVE for the production GPT choice. PROXY_CODEX_API remains null/PENDING; no source or API selection changed. Sage rules or takes to Mos per plan item5; first real Codex-auth turn stays row209 phaseA step7.
Niceness: attempt2 entry/emitted turn values19, explicit setPriority at entry/child start and100ms restore over owned descendants. Host policy temporarily changed processes to16 eight times; corrections restored19, disclosed here. Initial fetch end16 and failed inspection guard are retained separately, not represented as clean19 throughout. Full safe request/response receipts in evidence/offline-attempt2.txt; no auth/header value recorded. Process cleanup reports remainingManagedChildren0. Sweep over worktree and owned evidence root found same six pre-existing tool services only, no proxy/pi/timeout/chromium test leftovers. Lane B free. No mutants or other test files run.
## API choice and active-tool follow-up — sage-4331
Sage's ruling: PROXY_CODEX_API=openai-responses. The evidence does not separate the two shapes: both pass through pinned8.0.42. This is a tie broken on reasoning; it is NOT an evidence-decided pick. Sage's reason: Codex upstream speaks Responses natively and Responses carries pi's reasoning summary field, while completions drops that field; expected fewer translations/lost fields on the real route. This reasoning is a lead decision, not a claim of an authenticated Codex experiment. Row209 phaseA step7 verifies first real Codex turn; change the single constant if it fails there, with no runtime fallback/env switch. Earlier PENDING logs/notes remain historical evidence.
Set constant/remove pending refusal; GPT route test asserts openai-responses on mosaic-proxy-codex. Replaced temporary pending-refusal test with generated single-provider/responses/key-reference assertions per ruling. No other production change. Active plug-in docs updated.
Evidence script adds glm-tool mode: one GLM turn only, same pinned verified binary and isolated setup, distinct attempt3-tool root, active built-in read tool but stand-in still returns text only. Capture tool_stream and tool names before/after proxy, never header/auth values. No actual tool execution is demanded by stand-in, so this checks wire-field survival, not arbitrary tool-call semantics. Rehash before launch, no fetch,30s catalog readiness with counts,50s timeout-k10 for one turn,own descendants restored nice19. Commit untested before cleared run; then proxy-bundle and proxy-harness each whole once. No other runs/mutants.
### sage-4331 single active-tool GLM turn and two-file results
Tested ef0939e35. No fetch. P1 verifyInstall rehashed existing binary/panel and matched both PIN hashes before use. One isolated glm-tool run, unshare-rn interfaces[lo],empty private HOME/auth,sanitized env. Readiness poll1 not-ready/count0;poll2 status200/count2. One pi invocation with one active builtin read tool,exit0,markerP332_OFFLINE_OK; no rerun. Outer timeout-k10/140s,inner120s,pi50s;nice19 explicitly at entry/child starts and guard restores observed16→19 three times. No production API chosen by script.
Plain request/response evidence (full safe receipt evidence/glm-tool.txt):
- pi POST/v1/chat/completions modelglm-fixture,streamtrue,tools=[read],tool_stream=true,thinking={type:enabled,clear_thinking:false},reasoning_effort=low,max_completion_tokens=16384.
- pinned proxy200 completion stream,marker.
- stand-in receives POST/v1/chat/completions,tools=[read],tool_stream=true and same thinking/reasoning_effort fields;max_tokens=16384. Thus zaiToolStream-derived tool_stream survives this proxy route. No tool invocation or tool-call delta sequence was requested by the stand-in; this proves field survival with active tool, not every tool-call streaming semantic.
Then exactly once each whole file, fresh gXXX TMPDIR,nice19,timeout-k10/180s:
- packages/harness/tests/proxy-bundle.test.mjs00:14:20Z:7pass,0fail,0skip,exit0.
- packages/plugins/tests/proxy-harness.test.mjs00:14:20Z:5pass,0fail,0skip,exit0.
No failures, no extra runs/mutants. Cleanup managed children0. Own-worktree/evidence-root sweep found only same six pre-existing tool services,no proxy/pi/test/timeout/chromium leftovers. Lane B free. P3 now waits for P2/row331 landing before rebase,mutants,Gladstone review and further gates; no landing/merge requested or performed.
-51
View File
@@ -1,51 +0,0 @@
# STOPPED — row 332 (P3), T3 crash handoff
Stopped on 2026-10-24 under Mos mos-1630, relaying Jason's instruction: do not restart long jobs; commit/push safe work, leave a handoff, then stop. No further thread messages, tests, probes, queue operations, or implementation will run in this session.
## Branch and completed work
- Worktree: /home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332
- Branch: fethry/row332, based on refactor c8a9bcf94. No implementation commits, rebases, merges or production source edits.
- Read P3 brief, rules, full pi amendment, gate template, design and named source files. Detailed notes in BUILD.md beside this handoff.
- Root npm ci --ignore-scripts --no-audit --no-fund completed in this worktree only (128 packages). No canonical node_modules used.
- Initial test files written before implementation; none executed. Sage has not sent CLEAR. No proxy fetch, binary probe, offline turn, mutant, or suite has run.
- No real proxy, management key, host auth directory or live instance was accessed. No production service was started/stopped.
- Canonical queue next returned nothing during the assignment. Queue start op fethry-332-start refused on locks, then owner sage, including a retry after two minutes. Latest completed queue show still had owner sage, state briefed, after 331; it also warned that the rendered table was unknown. Did not repair or bypass it. Sage sage-4293 says an assign/after=none batch is running. Queue metadata identifies shared Gitea issue #1830.
## Latest accepted design
Sage sage-4293 supersedes all earlier route proposals: explicit route metadata, never catalog membership or model-prefix inference. Selected spelling: launch.models.<selection>.route = anthropic | glm | codex, required only with provider proxy. Missing route: proxy-route-missing; unknown/nonstring route: proxy-route-unknown. Other providers keep provider/model-only entries. Proposed launch.account.credential literal proxy; existing name/credential field names retained. GPT generated provider: mosaic-proxy-codex, never openai-codex. GPT wire API is still undecided pending the authorized pinned-binary requests. P2's seam stays exactly { baseUrl, key }.
Important implementation finding: launcher.mjs:571 serializes bundle.env into session.harnessEnv. Harness env will contain the session key in proxy mode, so credentials must instead reach spawnSession through transient environment variables and be omitted from serialized harnessEnv. runner.mjs:390 already inherits the spawn environment. Preserve ENV_ALLOW; filter instance provider variables in proxy mode only.
## Uncommitted work, intentionally left for the next session
These are unrun, incomplete tests/audit code, excluded from the documentation-only crash commit:
- packages/business/tests/proxy-launch.test.mjs — explicit routes and refusal codes, proxy account credential, existing nonproxy/account behavior.
- packages/plugins/tests/proxy-harness.test.mjs — Claude env/preflight, own-key isolation, pi preflight and OAuth-only refusal.
- packages/seat/tests/proxy-session-env.test.mjs — instance credential filtering and unchanged nonproxy env.
- packages/harness/tests/proxy-bundle.test.mjs — real bundle generation, all three providers, key reference/no-key/no-! invariants, file modes and launch freshness. Exact GPT API assertion deliberately pending probe evidence; add before its first run.
- agents/fethry/work/queue-332/import-run-list.mjs — non-evaluating static import audit using vm.SourceTextModule plus explicit computed loader edges. It ran successfully after correcting its own root-depth setup error. It is not a test runner.
IMPORT-RUN-LIST.txt is a historical 211-entry candidate impact list, generated before proxy-bundle.test.mjs was added. It includes case1-accept as explicitly EXCLUDED (mos-1612). Regenerate the list after resuming and report the actual authorized run list inline before any whole-file run. Do not treat the historical manifest as a current run authorization.
## Reporting status
T3 reporting repeatedly failed during GET with a 30-second timeout. fethry-0004 was confirmed delivered. Some later short numeric keys returned reused:true unexpectedly; do not rely on them as delivery evidence. A row-scoped detailed design resend and the inline 211-line import manifest also timed out, including the manifest's same-key retry. Sage may not have those messages. This handoff and BUILD.md are being pushed so they can be read with git show; no new thread message is sent under mos-1630.
## Next session, after restart authorization
1. Read this handoff/BUILD.md and recover queue state from canonical checkout. Wait for owner fethry and no after, then retry the same start op. Never bypass a refusal.
2. Recover Sage's slot status. Still NO tests or probes until Sage sends CLEAR. No job needs restarting merely to preserve current state.
3. Review the four uncommitted test files. Add the pinned-proxy API probe and exact GPT assertion before the first relevant run. Initial RED has not happened; production implementation must follow the authorized first RED.
4. Rebuild the import-derived run list and send it inline or in a reviewed pushed commit before runs. case1-accept remains off without Mos approval. Existing launch-settings.test.mjs proxy fixtures need explicit route metadata with their authorization assertions preserved; no old-test red has occurred.
5. Use P1's committed fetchPinned code under an owned fresh temporary root (8.0.42 at the inspected magica/row329 revision), never live proxy assets or another seat's scratch. After CLEAR, try pi's responses and completions requests under unshare -rn against stand-in upstream, record evidence, choose one GPT API at build time. Separately prove offline GLM and record z.ai compat survival. Real Codex auth proof remains row209 phase A step7.
6. Implement transient P2 context, model validation/route propagation, harness config, preflight, spawn env/serialization separation and tests. Named mutants: OAuth token leak; literal key in models.json. No policy or real credentials involved.
7. Land only after 329 and 331 land, rebasing on both, Gladstone first review, Dewey landing review and Sage's required gate. No force-push or merge authority is added by the crash instruction.
All future tests use a fresh shell-created short TMPDIR, absolute nice 19, and timeout -k 10 for scripts/test-*.sh. First new-test red is reportable afterward; old-test red or a second red goes to Sage before changes/reruns. No test outcomes are claimed here.
## Crash commit
Only documentation and the historical plain-text import manifest are committed. The final STOPPED reply records the exact pushed commit. The uncommitted files above remain deliberately available in this worktree because they have never run and test-slot authorization has not arrived.
@@ -1,19 +0,0 @@
00:14:20Z
nice=19
✔ P3 Anthropic route uses messages at proxy root and the declared model id (12.070131ms)
✔ P3 omitted route refuses proxy-route-missing before model config generation (2.197623ms)
✔ P3 GLM route uses completions at proxy /v1 with explicit z.ai compatibility (3.390562ms)
✔ P3 GPT route selects a stack-owned provider instead of pi Codex OAuth (4.240948ms)
✔ P3 a declared Codex route generates only the single build-time responses provider (3.37448ms)
✔ P3 models file is private, references the one session key, and stores no executable values or keys (3.305299ms)
✔ P3 every launch regenerates proxy port, declared models and own key without caching (6.287121ms)
ℹ tests 7
ℹ suites 0
ℹ pass 7
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 128.759611
exit=0
00:14:20Z
@@ -1,17 +0,0 @@
00:14:20Z
nice=19
✔ P3 Claude env receives the session proxy URL and key, without another agent or host credential (3.096286ms)
✔ P3 Claude preflight accepts a proxy key without a host provider credential (1.305258ms)
✔ P3 pi refuses no-session-credential with no provider key (1.23137ms)
✔ P3 pi refuses no-session-credential with only a Claude OAuth token (3.659409ms)
✔ P3 pi accepts its own provider key or a session proxy key (0.590987ms)
ℹ tests 5
ℹ suites 0
ℹ pass 5
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 68.648537
exit=0
00:14:20Z
@@ -1,17 +0,0 @@
Ip=e=> @ char 1054606:
Ip=e=>{let t={raw:Dc(e)?e:{}};if(!Dc(e))return t;let n=t=>t.split(`.`).reduce((e,t)=>Dc(e)?e[t]:void 0,e);t.debug=wp(n(`observability.logs.debug`)),t.requestLog=wp(n(`observability.logs.request-log`)),t.loggingToFile=wp(n(`observability.logs.logging-to-file`));let r=n(`observability.logs.logs-max-total-size-mb`);typeof r==`number`&&(t.logsMaxTotalSizeMb=r);let i=n(`requests.proxy-url`);typeof i==`string`&&(t.proxyUrl=i);let a=n(`routing.retry.request-retry`);typeof a==`number`&&(t.requestRetry=a),t.wsAuth=wp(n(`oauth.providers.aistudio.ws-auth`))??!0,t.forceModelPrefix=wp(n(`routing.force-model-prefix`));let o=n(`routing.strategy`);typeof o==`string`&&(t.routingStrategy=o);let s=n(`access.api-keys`);return t.apiKeys=Array.isArray(s)?s.filter(e=>typeof e==`string`):[],t.quotaExceeded={antigravityCredits:wp(n(`oauth.providers.antigravity.antigravity-credits`))??!1},t.providerGroups=Dc(e[`api-keys`])?e[`api-keys`]:{},t.geminiApiKeys=Fp(n(`api-keys.gemini`)),t.interactionsApiKeys=Fp(n(`api-keys.interactions`)),t.codexApiKeys=Fp(n(`api-keys.codex`)),t.metaApiKeys=Fp(n(`api-keys.meta`)),t.xaiApiKeys=Fp(n(`api-keys.xai`)),t.claudeApiKeys=Fp(n(`api-keys.claude`)),t.vertexApiKeys=Fp(n(`api-keys.vertex`)),t.openaiCompatibility=Fp(n(`api-keys.openai-compatibility`),!0),t.oauthExcludedModels=Pp(n(`oauth.excluded-models`)),t},Lp={async getConfig(){return Ip(await W.get(`/config`))},updateRequestLog:e=>W.put(`/config/observability/logs/request-log`,e)},Rp=0,zp=null,Bp=null,Vp=()=>Bp!==null&&Date.now()-Bp.timestamp<3e4,Hp=Tc((e,t)=>({config:null,fetchConfig:async(t=!1)=>{if(!t&&Bp&&Vp())return Bp.data;if(zp)return zp.promise;let n=Rp+=1;try{let t=Lp.getConfig();zp={id:n,promise:t};let r
Fp=(e,t= @ char 1054198:
Fp=(e,t=!1)=>Array.isArray(e)?e.flatMap((n,r)=>{if(!Dc(n)||!Array.isArray(n.keys))return[];if(t){let t=Np(n,r);return t?[{...t,source:{groupIndex:r,group:n,groups:e}}]:[]}return n.keys.flatMap((t,i)=>{if(!Dc(t))return[];let a={...n};delete a.keys,delete a.name,Object.entries(t).forEach(([e,t])=>{t!==null&&(a[e]=t)});let o=Mp(a);return o?[{...o,source:{groupIndex:r,keyIndex:i,group:n,groups:e}}]:[]})}):[],Ip=e=>{let t={raw:Dc(e)?e:{}};if(!Dc(e))return t;let n=t=>t.split(`.`).reduce((e,t)=>Dc(e)?e[t]:void 0,e);t.debug=wp(n(`observability.logs.debug`)),t.requestLog=wp(n(`observability.logs.reques
Np=(e,t)=> @ char 1053331:
Np=(e,t)=>{if(!Dc(e))return null;let n=e.name,r=e[`base-url`];if(!n||!r)return null;let i=Array.isArray(e.keys)?e.keys.map((e,t)=>{let n=Ap(e);return n?{...n,sourceIndex:t}:null}).filter(Boolean):[],a=Ep(e.headers),o=Tp(e.models),s=e.priority,c={name:String(n),baseUrl:String(r),apiKeyEntries:i,...jp(e)},l=wp(e[`support-prompt-cache-key`]);l!==void 0&&(c.supportPromptCacheKey=l);let u=wp(e.disabled);u!==void 0&&(c.disabled=u);let d=wp(e[`disable-cooling`]);d!==void 0&&(c.disableCooling=d);let f=Op(e.prefix);f&&(c.prefix=f),a&&(c.headers=a),o.length&&(c.models=o),s!==void 0&&(c.priority=Number(s));let p=kp(e[`auth-index`]);return p&&(c.authIndex=p),t!==void 0&&(c.sourceIndex=t),c},Pp=e=>{if(!Dc(e))return;let t=e;if(!Dc(t))return;let n={};return Object.entries(t).forEach(([e,t])=>{let r=String(e||``).trim();if(!r)return;let i=Dp(t);n[r.toLow
xv=e=> @ char 1129493:
xv=e=>{let t={name:e.name,"base-url":e.baseUrl,...gv(e),keys:Array.isArray(e.apiKeyEntries)?e.apiKeyEntries.map(e=>hv(e)):[]};e.prefix?.trim()&&(t.prefix=e.prefix.trim()),e.disabled!==void 0&&(t.disabled=e.disabled),e.supportPromptCacheKey!==void 0&&(t[`support-prompt-cache-key`]=e.supportPromptCacheKey);let n=pv(e.headers);n&&(t.headers=n);let r=mv(e.models,!0);return r&&r.length&&(t.models=r),e.priority!==void 0&&(t.priority=e.priority),e.disableCooling!==void 0&&(t[`disable-cooling`]=e.disableCooling),t},Sv=(e,t)=>{if(e===t)return!0;if(Array.isArray(e)&&Array.isArray(t))return e.length===t.length&&e.every((e,n)=>Sv(e,t[n]));if(Dc(e)&&Dc(t)){let n=Object.keys(e).filter(t=>e[t]!==void 0);re
hv=e=> @ char 1126395:
hv=e=>{let t={"api-key":e.apiKey};return e.proxyUrl&&(t[`proxy-url`]=e.proxyUrl),e.weight!==void 0&&(t.weight=e.weight),t},gv=(e,t=!0)=>{let n={};return e.requestRetry!==void 0&&(n[`request-retry`]=e.requestRetry),t&&e.r
zee=(e,t)=> @ char 1130380:
zee=(e,t)=>{if(!Dc(e)||!Dc(e[`api-keys`]))return[];let n=e[`api-keys`][t];if(n===void 0)return[];if(!Array.isArray(n)||!n.every(e=>Dc(e)&&Array.isArray(e.keys)))throw Cv();return n},wv=async e=>{let t=cv(),n=Nm.getState(),r=await W.get(`/config`);t();let i=Nm.getState();if(n.apiBase!==i.apiBase||n.managementKey!==i.managementKey||n.isAuthenticated!==i.isAuthenticated)throw Cv();return zee(r,e)},Tv
@@ -1,11 +0,0 @@
file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/agents/fethry/work/queue-332/proxy-evidence.mjs:9
if (getPriority(0) !== 19) throw Error('nice19 required');
^
Error: nice19 required
at file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/agents/fethry/work/queue-332/proxy-evidence.mjs:9:34
at ModuleJob.run (node:internal/modules/esm/module_job:569:25)
at async node:internal/modules/esm/loader:650:26
at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:101:5)
Node.js v26.8.1
@@ -1 +0,0 @@
{"phase":"fetch","version":"8.0.42","binarySha256":"74661f8cf949977870231359e8bf4344e07946766a673c08fa25a3e5f72fc95e","panelVersion":"1.26.7","panelSha256":"8c9c6b7d3fb311e6aad5d06e1993e53a2d28389e640448a1bc6304ed20b057b5","nice":16,"verified":true}
@@ -1,8 +0,0 @@
{"phase":"isolation","interfaces":["lo"],"enteredNice":19,"nice":19,"version":"8.0.42","binarySha256":"74661f8cf949977870231359e8bf4344e07946766a673c08fa25a3e5f72fc95e","panelSha256":"8c9c6b7d3fb311e6aad5d06e1993e53a2d28389e640448a1bc6304ed20b057b5","reverified":true}
{"phase":"readiness","poll":1,"status":"not-ready","modelCount":0}
{"phase":"readiness","poll":2,"status":200,"modelCount":2}
{"phase":"catalog","modelIds":["gpt-fixture","glm-fixture"]}
{"phase":"turn","name":"glm-completions-tool","api":"openai-completions","exit":0,"signal":null,"marker":true,"piRequests":[{"method":"POST","path":"/v1/chat/completions","keys":["max_completion_tokens","messages","model","reasoning_effort","store","stream","stream_options","thinking","tool_stream","tools"],"model":"glm-fixture","stream":true,"roles":["developer","user"],"inputTypes":"undefined","thinking":{"type":"enabled","clear_thinking":false},"reasoning_effort":"low","tool_stream":true,"toolNames":["read"],"stream_options":{"include_usage":true},"max_completion_tokens":16384}],"proxyResponses":[{"request":0,"status":200,"events":[],"marker":true}],"upstreamRequests":[{"method":"POST","path":"/v1/chat/completions","keys":["max_tokens","messages","model","reasoning_effort","store","stream","stream_options","thinking","tool_stream","tools"],"model":"glm-fixture","stream":true,"roles":["developer","user"],"inputTypes":"undefined","thinking":{"type":"enabled","clear_thinking":false},"reasoning_effort":"low","tool_stream":true,"toolNames":["read"],"stream_options":{"include_usage":true},"max_tokens":16384}],"nice":19}
{"phase":"conclusion","limitation":"Stand-in openai-compatibility credential only; no Codex OAuth credential or real-auth turn. This script never selects the production API."}
{"phase":"nice-corrections","restoredTo":19,"observedBeforeRestore":{"16":3}}
{"phase":"cleanup","remainingManagedChildren":0}
@@ -1,10 +0,0 @@
{"phase":"isolation","interfaces":["lo"],"enteredNice":19,"nice":19,"version":"8.0.42","binarySha256":"74661f8cf949977870231359e8bf4344e07946766a673c08fa25a3e5f72fc95e","panelSha256":"8c9c6b7d3fb311e6aad5d06e1993e53a2d28389e640448a1bc6304ed20b057b5","reverified":true}
{"phase":"readiness","poll":1,"status":"not-ready","modelCount":0}
{"phase":"readiness","poll":2,"status":200,"modelCount":2}
{"phase":"catalog","modelIds":["gpt-fixture","glm-fixture"]}
{"phase":"turn","name":"gpt-responses","api":"openai-responses","exit":0,"signal":null,"marker":true,"piRequests":[{"method":"POST","path":"/v1/responses","keys":["include","input","max_output_tokens","model","prompt_cache_key","reasoning","store","stream"],"model":"gpt-fixture","stream":true,"inputTypes":[null,null],"reasoning":{"effort":"low","summary":"auto"}}],"proxyResponses":[{"request":0,"status":200,"events":["response.created","response.in_progress","response.output_item.added","response.content_part.added","response.output_text.delta","response.output_text.done","response.content_part.done","response.output_item.done","response.completed"],"marker":true}],"upstreamRequests":[{"method":"POST","path":"/v1/chat/completions","keys":["max_tokens","messages","model","reasoning_effort","stream","stream_options"],"model":"gpt-fixture","stream":true,"roles":["user","user"],"inputTypes":"undefined","reasoning_effort":"low","stream_options":{"include_usage":true},"max_tokens":16384}],"nice":19}
{"phase":"turn","name":"gpt-completions","api":"openai-completions","exit":0,"signal":null,"marker":true,"piRequests":[{"method":"POST","path":"/v1/chat/completions","keys":["max_completion_tokens","messages","model","reasoning_effort","store","stream","stream_options"],"model":"gpt-fixture","stream":true,"roles":["developer","user"],"inputTypes":"undefined","reasoning_effort":"low","stream_options":{"include_usage":true},"max_completion_tokens":16384}],"proxyResponses":[{"request":1,"status":200,"events":[],"marker":true}],"upstreamRequests":[{"method":"POST","path":"/v1/chat/completions","keys":["max_tokens","messages","model","reasoning_effort","store","stream","stream_options"],"model":"gpt-fixture","stream":true,"roles":["developer","user"],"inputTypes":"undefined","reasoning_effort":"low","stream_options":{"include_usage":true},"max_tokens":16384}],"nice":19}
{"phase":"turn","name":"glm-completions","api":"openai-completions","exit":0,"signal":null,"marker":true,"piRequests":[{"method":"POST","path":"/v1/chat/completions","keys":["max_completion_tokens","messages","model","reasoning_effort","store","stream","stream_options","thinking"],"model":"glm-fixture","stream":true,"roles":["developer","user"],"inputTypes":"undefined","thinking":{"type":"enabled","clear_thinking":false},"reasoning_effort":"low","stream_options":{"include_usage":true},"max_completion_tokens":16384}],"proxyResponses":[{"request":2,"status":200,"events":[],"marker":true}],"upstreamRequests":[{"method":"POST","path":"/v1/chat/completions","keys":["max_tokens","messages","model","reasoning_effort","store","stream","stream_options","thinking"],"model":"glm-fixture","stream":true,"roles":["developer","user"],"inputTypes":"undefined","thinking":{"type":"enabled","clear_thinking":false},"reasoning_effort":"low","stream_options":{"include_usage":true},"max_tokens":16384}],"nice":19}
{"phase":"conclusion","limitation":"Stand-in openai-compatibility credential only; no Codex OAuth credential or real-auth turn. API value remains PENDING."}
{"phase":"nice-corrections","restoredTo":19,"observedBeforeRestore":{"16":8}}
{"phase":"cleanup","remainingManagedChildren":0}
@@ -1,4 +0,0 @@
{"phase":"isolation","interfaces":["lo"],"enteredNice":19,"nice":16,"version":"8.0.42","configTags":["ntptr; X0 []string } \"*struct { F uintptr; X0 net.Conn } Models yaml:\"models\" json:\"models\" \"*config.DisableImageGene","ubscriptionCommand $*struct { F uintptr; R *api.Server } APIKey yaml:\"api-key\" json:\"api-key\" $EffectiveSignInWithChat","on:\\\"type\\\"\" } '*struct { F uintptr; X0 *bufio.Reader } BaseURL yaml:\"base-url\" json:\"base-url\" '*config.CodexWebSearch","ise-management\" json:\"advertise-management\" OpenAICompatibility7yaml:\"openai-compatibility\" json:\"openai-compatibility\" K*struct { "]}
{"phase":"catalog","modelIds":[]}
{"phase":"error","message":"stand-in routes absent from proxy catalog","proxyDiagnostic":"CLIProxyAPI Version: 8.0.42, Commit: bc064340, BuiltAt: 2026-10-24T14:21:38Z\n[2026-10-24 19:07:27] [--------] [info ] [main.go:641] CLIProxyAPI Version: 8.0.42, Commit: bc064340, BuiltAt: 2026-10-24T14:21:38Z\n[2026-10-24 19:07:27] [--------] [info ] [main.go:752] Local model mode: using embedded catalogs unless an explicit catalog source is configured\n[2026-10-24 19:07:27] [--------] [info ] [antigravity_version.go:71] periodic antigravity version refresh started (interval=3h0m0s)\n[2026-10-24 19:07:27] [--------] [info ] [service_lifecycle.go:103] core auth auto-refresh started (interval=15m0s)\n[2026-10-24 19:07:27] [--------] [info ] [server_management.go:22] management routes registered after secret key configuration\n[2026-10-24 19:07:27] [--------] [warn ] [xai_version.go:96] failed to fetch latest Grok CLI version from npm, keeping fallback/cached version error=npm registry request failed: Get \"https://registry.npmjs.org/@xai-official/grok/latest\": dial tcp [2606:4700::6810:122]:443: connect: network is unreachable\n[2026-10-24 19:07:27] [--------] [info ] [xai_version.go:79] periodic Grok CLI version refresh started (interval=3h0m0s)\n[2026-10-24 19:07:27] [b7852b37] [info ] [gin_logger.go:113] 200 | 0s | 127.0.0.1 | GET \"/v1/models\"\n"}
{"phase":"cleanup","remainingManagedChildren":0}
@@ -1 +0,0 @@
/mnt/storage/scratch/tmp/g2Ta
@@ -1,63 +0,0 @@
23:59:16Z
nice=19
✔ C2-04: launcher workspace clones code but never the library (1450.400805ms)
✔ P3 proxy key reaches the spawned runner but never session.json or the bundle (1347.117393ms)
✔ bus start --pm: the launcher instance (the chief of staff) runs under its own PID namespace, registered, with a manifest (1362.533548ms)
usage: {"event":"usage-unknown","business":"acme","run":"r5c4bfddc2d03","instance":"chief","turn":"2ce6282a-5e4f-4276-851e-3d8dd2d53a7a","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"rf9b4b14789bc","instance":"coder","turn":"d7a0db99-cce3-417f-8e7d-9910641f0860","source":"@none","code":"baseline-unknown"}
✔ the chief of staff launches a coder through its launch tool; the coder answers; refusals name their code (842.489432ms)
usage: {"event":"usage-unknown","business":"acme","run":"rd5fa76df3fb0","instance":"chief","turn":"f739ef1e-c01f-401f-9a89-cf45bc15b976","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r2c414ea1d43f","instance":"pm","turn":"8852a197-c1be-4108-a3af-34dad0232264","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"rd5fa76df3fb0","instance":"chief","turn":"6ccde05e-202a-43af-8556-43481f552676","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"rd5fa76df3fb0","instance":"chief","turn":"4a8f168b-8676-4b54-9404-174a2a703fcf","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r2c414ea1d43f","instance":"pm","turn":"67ee96fd-1338-48aa-a4fc-edbb7e0aef0e","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r2c414ea1d43f","instance":"pm","turn":"ead68527-7bf4-49a1-8fd7-0107b9c6dfdf","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"rd5fa76df3fb0","instance":"chief","turn":"c1cc3a5e-1afe-4994-aea4-a3ea811a8f30","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r2c414ea1d43f","instance":"pm","turn":"e60723f6-187d-4b55-bd81-66189ae014c0","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"rd5fa76df3fb0","instance":"chief","turn":"1b7721ee-a337-4623-9fcc-1e05277336ce","source":"@none","code":"baseline-unknown"}
✔ a launched pm's request_staff reaches the chief of staff; no other session has the tool and the launch limits still hold (1152.112093ms)
✔ each launch makes sure the workspace has a clone of the project: cloned, fast-forwarded, or fetched and logged (4210.704487ms)
✔ a role the broker says holds a merge decision gets land_work, its prompt line, its landing and the git socket; without it, none (713.043698ms)
✔ REQ-LAUNCH-1 the tick starts a listed merge decision holder once, with land_work, the Landing line and its landing turn; an unlisted holder starts nothing (456.475273ms)
usage: {"event":"usage-unknown","business":"acme","run":"r0e259f41ad4d","instance":"coder","turn":"52bb41d8-5eb6-4c72-9c5c-0b8abf8eae42","source":"@none","code":"baseline-unknown"}
✔ a holder running since before the resolution is stopped once the broker releases it, land-relaunch, and the next tick starts it: landing turn first, then the message that waited (838.095383ms)
✔ a landing run that ended isn't started again for its decision, a spent decision starts nothing, and a new decision starts the holder (721.283915ms)
✔ after a restart, the new host's first tick starts a holder whose decision is still held (963.365086ms)
✔ a refused landing start is logged once per code with its decision, isn't a start, and the next tick with room starts the holder (708.305295ms)
✔ a project clone that can't be made refuses checkout-failed, from --chief and from a session, with no run and no clone left (300.51414ms)
✔ a runner that stops at once ends its launch with the runner's reason (380.448961ms)
✔ a Claude Code launch with no session credential refuses before it starts (206.153531ms)
✔ a pi launch with no own credential refuses no-session-credential (207.22057ms)
usage: {"event":"plugin-refused","kind":"harness","name":"down","code":"missing","message":"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/harness/down is missing","kept":[]}
plugins: {"event":"plugin-refused","kind":"harness","name":"down","code":"missing","message":"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/harness/down is missing","kept":[]}
✔ row 65 a failed primary preflight launches the fallback on a fixture harness module, recording the route and the reason (398.352887ms)
✔ a runner killed from the host ends its launch as killed, not failed (418.567314ms)
✔ a missing or failing bwrap refuses sandbox-unavailable before anything starts; there is no unconfined fallback (211.208923ms)
✔ row 64 a role skill that isn't enabled refuses skill-not-enabled, and one that isn't a plain directory skill-refused, before anything starts (215.670064ms)
✔ row 213 a creative instance's persona is read from <configDir>/personas: off its digest the launch fails with the mismatch as its reason (321.498853ms)
✔ row 64 on Claude Code a role skill that isn't enabled refuses the same way, before anything starts (208.543617ms)
usage: {"event":"usage-unknown","business":"acme","run":"r1f065863b517","instance":"chief","turn":"2c19dcc1-343e-4c12-93e3-4cd6dd65c4d9","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"reae1621f7ddf","instance":"coder","turn":"03cc3667-aab3-4f55-9e57-bf637e1be0dc","source":"@none","code":"baseline-unknown"}
✔ a real Claude Code coder's shell can't read a stand-in secret or anything else its sandbox doesn't hold (1566.080686ms)
✔ a host that died hard leaves its sessions to the next host, which kills them and ends their runs so the role can be launched again (1164.65123ms)
✔ a host that died hard leaves its sessions to the next host, which finds one already exited (23) and ends their runs so the role can be launched again (4189.297007ms)
✔ bus start --no-launch leaves an earlier host's live session alone: no signal, no end, sessions.json as it was (258.381919ms)
✔ bus start --no-launch refuses every launch: the PM launch and a session's request, each logged, nothing spawned (219.378242ms)
✔ bus start --no-launch starts no thread tick; the same host with launches runs it (1236.400078ms)
✔ a malformed sessions.json refuses the host start with exit 3 and stays as it was (198.129142ms)
✔ an over-long launch request is refused at once, not at the 10 s idle timeout (200.659094ms)
✔ a launch client that never closes its side doesn't hold the host's close (211.221353ms)
✔ a runner that ignores SIGTERM is killed when the host closes (1398.582123ms)
✔ kill switch refuses chief and hire before launch work and a clear permits a later request (373.807885ms)
✔ kill switch stops an actual managed namespace and records the halt reason without rewriting its bundle (372.1022ms)
✔ a launch waiting across halt and resume cannot use its stale admission (236.835216ms)
ℹ tests 35
ℹ suites 0
ℹ pass 35
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 29398.149477
exit=0
23:59:45Z
@@ -1,35 +0,0 @@
23:59:16Z
nice=19
✔ P3 Anthropic route uses messages at proxy root and the declared model id (9.965114ms)
✔ P3 omitted route generates the Anthropic provider at proxy root (3.050792ms)
✔ P3 GLM route uses completions at proxy /v1 with explicit z.ai compatibility (2.833686ms)
✖ P3 GPT route selects a stack-owned provider instead of pi Codex OAuth (2.980797ms)
✔ P3 a declared Codex route refuses generation while the build-time API is PENDING (4.028363ms)
✔ P3 models file is private, references the one session key, and stores no executable values or keys (3.814909ms)
✔ P3 every launch regenerates proxy port, declared models and own key without caching (7.841047ms)
ℹ tests 7
ℹ suites 0
ℹ pass 6
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 117.036157
✖ failing tests:
test at packages/harness/tests/proxy-bundle.test.mjs:68:1
✖ P3 GPT route selects a stack-owned provider instead of pi Codex OAuth (2.980797ms)
Error: proxy GPT API is PENDING build-time evidence
at Module.bundle (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/harness/pi/index.mjs:78:62)
at buildBundle (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/src/bundle.mjs:354:23)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:20:18)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:69:13)
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)
exit=1
23:59:16Z
@@ -1,18 +0,0 @@
23:57:06Z
nice=19
✔ P3 proxy model validation preserves each explicit wire route and the proxy model id (1.161459ms)
✔ P3 a proxy model without route preserves its stored shape for the default Anthropic route (0.134804ms)
✔ P3 an unknown proxy route refuses proxy-route-unknown (0.823069ms)
✔ P3 nonproxy models retain their provider/model-only shape and reject route metadata (0.170037ms)
✔ P3 launch.account accepts the proxy credential source without naming host variables (0.132947ms)
✔ P3 existing environment-set accounts retain their validated representation (0.200363ms)
ℹ tests 6
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 52.197696
exit=0
23:57:06Z
@@ -1,21 +0,0 @@
23:57:12Z
nice=19
✔ row 65 both harness modules load through the loader with every export the kind names (7.907431ms)
✔ row 65 each module answers for its own harness: adapter, levels, account, web, turn end and session files (0.745524ms)
✔ row 65 claude-code preflight: a missing credential, then a missing or relative binary, each refuse with their code (3.501824ms)
✔ row 65 claude-code version asks MOSAIC_CLAUDE_BIN when set, else claude on PATH, else null (3.715209ms)
✔ row 65 pi preflight passes with the repository's pi, and its version is the package pin (0.570287ms)
✔ row 65 env passes the thinking level to both adapters, and claude-code's bundle writes its hook and MCP files (1.263458ms)
✔ row 65 a route's thinking reaches pi as --thinking and claude as --effort, through each module's env and adapter (14.961799ms)
✔ row 65 no core source outside packages/plugins names a harness, apart from the listed exceptions (14.014352ms)
✔ row 65 the grep's pattern catches a quoted name and a regex alternation, and not a word in prose (0.144087ms)
ℹ tests 9
ℹ suites 0
ℹ pass 9
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 95.780618
exit=0
23:57:12Z
@@ -1,74 +0,0 @@
23:57:12Z
nice=19
✔ C2-04: launcher workspace clones code but never the library (1409.48354ms)
✔ P3 proxy key reaches the spawned runner but never session.json or the bundle (1360.002763ms)
✔ bus start --pm: the launcher instance (the chief of staff) runs under its own PID namespace, registered, with a manifest (1355.188394ms)
usage: {"event":"usage-unknown","business":"acme","run":"r77c2d6253086","instance":"chief","turn":"492fcf7a-ee92-4637-b1ee-de6d29c5f536","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r0caee85973df","instance":"coder","turn":"a8f6e869-e911-4e61-8913-9bcb8c84bca5","source":"@none","code":"baseline-unknown"}
✔ the chief of staff launches a coder through its launch tool; the coder answers; refusals name their code (844.874148ms)
usage: {"event":"usage-unknown","business":"acme","run":"rdd1124f17d39","instance":"chief","turn":"99cbfb5d-a0b1-4de7-b94b-855285416cea","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r3ee360b6ea6f","instance":"pm","turn":"3299c709-0616-4d80-878e-589213b2833a","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"rdd1124f17d39","instance":"chief","turn":"aaef40d5-2c04-4a58-8019-3a9fed2740d3","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"rdd1124f17d39","instance":"chief","turn":"f7697cc5-383e-41e4-8f48-ca8032cb501f","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r3ee360b6ea6f","instance":"pm","turn":"b6f5d1de-a58e-40de-9d2c-9e79472bc8f5","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r3ee360b6ea6f","instance":"pm","turn":"7a8278f1-c934-418d-a62a-34528048a50c","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"rdd1124f17d39","instance":"chief","turn":"c8f0554c-b415-4b2c-aa8e-8eebf3253c12","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r3ee360b6ea6f","instance":"pm","turn":"d5084f6b-43d9-48b4-ada8-14c78f9a6472","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"rdd1124f17d39","instance":"chief","turn":"2b8f60d0-5e87-4823-a4c8-e7a13fdffae2","source":"@none","code":"baseline-unknown"}
✔ a launched pm's request_staff reaches the chief of staff; no other session has the tool and the launch limits still hold (1499.426496ms)
✔ each launch makes sure the workspace has a clone of the project: cloned, fast-forwarded, or fetched and logged (4214.335578ms)
✔ a role the broker says holds a merge decision gets land_work, its prompt line, its landing and the git socket; without it, none (731.541713ms)
✔ REQ-LAUNCH-1 the tick starts a listed merge decision holder once, with land_work, the Landing line and its landing turn; an unlisted holder starts nothing (452.219971ms)
usage: {"event":"usage-unknown","business":"acme","run":"r8dca21c7af83","instance":"coder","turn":"b0a65410-42a5-495d-a881-d7828ea5dc69","source":"@none","code":"baseline-unknown"}
✔ a holder running since before the resolution is stopped once the broker releases it, land-relaunch, and the next tick starts it: landing turn first, then the message that waited (859.92414ms)
✔ a landing run that ended isn't started again for its decision, a spent decision starts nothing, and a new decision starts the holder (813.442124ms)
✔ after a restart, the new host's first tick starts a holder whose decision is still held (1026.204746ms)
✔ a refused landing start is logged once per code with its decision, isn't a start, and the next tick with room starts the holder (698.000891ms)
✔ a project clone that can't be made refuses checkout-failed, from --chief and from a session, with no run and no clone left (333.63354ms)
✔ a runner that stops at once ends its launch with the runner's reason (392.682058ms)
✔ a Claude Code launch with no session credential refuses before it starts (219.352153ms)
✔ a pi launch with no own credential refuses no-session-credential (202.834512ms)
usage: {"event":"plugin-refused","kind":"harness","name":"down","code":"missing","message":"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/harness/down is missing","kept":[]}
plugins: {"event":"plugin-refused","kind":"harness","name":"down","code":"missing","message":"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/harness/down is missing","kept":[]}
✖ row 65 a failed primary preflight launches the fallback on a fixture harness module, recording the route and the reason (214.464488ms)
✔ a runner killed from the host ends its launch as killed, not failed (437.720138ms)
✔ a missing or failing bwrap refuses sandbox-unavailable before anything starts; there is no unconfined fallback (240.940882ms)
✔ row 64 a role skill that isn't enabled refuses skill-not-enabled, and one that isn't a plain directory skill-refused, before anything starts (220.344629ms)
✔ row 213 a creative instance's persona is read from <configDir>/personas: off its digest the launch fails with the mismatch as its reason (288.705681ms)
✔ row 64 on Claude Code a role skill that isn't enabled refuses the same way, before anything starts (211.010194ms)
usage: {"event":"usage-unknown","business":"acme","run":"r31e317a9ff60","instance":"chief","turn":"bf22f39d-2bf0-48ec-849b-bf8665a262af","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"rcb1b05afaad6","instance":"coder","turn":"40f65cf7-8938-4265-949a-c816ef7084cd","source":"@none","code":"baseline-unknown"}
✔ a real Claude Code coder's shell can't read a stand-in secret or anything else its sandbox doesn't hold (1532.310766ms)
✔ a host that died hard leaves its sessions to the next host, which kills them and ends their runs so the role can be launched again (1163.295788ms)
✔ a host that died hard leaves its sessions to the next host, which finds one already exited (23) and ends their runs so the role can be launched again (4129.096956ms)
✔ bus start --no-launch leaves an earlier host's live session alone: no signal, no end, sessions.json as it was (253.012747ms)
✔ bus start --no-launch refuses every launch: the PM launch and a session's request, each logged, nothing spawned (210.12322ms)
✔ bus start --no-launch starts no thread tick; the same host with launches runs it (1206.988059ms)
✔ a malformed sessions.json refuses the host start with exit 3 and stays as it was (200.617792ms)
✔ an over-long launch request is refused at once, not at the 10 s idle timeout (208.31407ms)
✔ a launch client that never closes its side doesn't hold the host's close (210.5977ms)
✔ a runner that ignores SIGTERM is killed when the host closes (1396.242105ms)
✔ kill switch refuses chief and hire before launch work and a clear permits a later request (356.328128ms)
✔ kill switch stops an actual managed namespace and records the halt reason without rewriting its bundle (411.659934ms)
✔ a launch waiting across halt and resume cannot use its stale admission (248.122427ms)
ℹ tests 35
ℹ suites 0
ℹ pass 34
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 29678.41987
✖ failing tests:
test at packages/cli/tests/launcher.test.mjs:714:1
✖ row 65 a failed primary preflight launches the fallback on a fixture harness module, recording the route and the reason (214.464488ms)
Error [CliError]: PM launch refused: no-session-credential (fallback fixture: pi needs its own provider key or a session proxy key (primary down: fixture preflight fails))
at file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/cli/src/launcher.mjs:1189:23
at process.processTicksAndRejections (node:internal/process/task_queues:104:5) {
exitCode: 3,
code: 'no-session-credential'
}
exit=1
23:57:42Z
@@ -1,88 +0,0 @@
23:57:12Z
nice=19
✖ P3 Anthropic route uses messages at proxy root and the declared model id (8.82863ms)
✔ P3 omitted route generates the Anthropic provider at proxy root (3.493006ms)
✖ P3 GLM route uses completions at proxy /v1 with explicit z.ai compatibility (2.169226ms)
✖ P3 GPT route selects a stack-owned provider instead of pi Codex OAuth (2.321456ms)
✖ P3 models file is private, references the one session key, and stores no executable values or keys (2.285532ms)
✖ P3 every launch regenerates proxy port, declared models and own key without caching (2.062519ms)
ℹ tests 6
ℹ suites 0
ℹ pass 1
ℹ fail 5
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 94.962091
✖ failing tests:
test at packages/harness/tests/proxy-bundle.test.mjs:35:1
✖ P3 Anthropic route uses messages at proxy root and the declared model id (8.82863ms)
Error: proxy GPT API is PENDING build-time evidence
at Module.bundle (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/harness/pi/index.mjs:78:62)
at buildBundle (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/src/bundle.mjs:354:23)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:20:18)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:36:13)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.start (node:internal/test_runner/test:1262:17)
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17)
test at packages/harness/tests/proxy-bundle.test.mjs:57:1
✖ P3 GLM route uses completions at proxy /v1 with explicit z.ai compatibility (2.169226ms)
Error: proxy GPT API is PENDING build-time evidence
at Module.bundle (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/harness/pi/index.mjs:78:62)
at buildBundle (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/src/bundle.mjs:354:23)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:20:18)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:58:13)
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)
test at packages/harness/tests/proxy-bundle.test.mjs:68:1
✖ P3 GPT route selects a stack-owned provider instead of pi Codex OAuth (2.321456ms)
Error: proxy GPT API is PENDING build-time evidence
at Module.bundle (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/harness/pi/index.mjs:78:62)
at buildBundle (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/src/bundle.mjs:354:23)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:20:18)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:69:13)
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)
test at packages/harness/tests/proxy-bundle.test.mjs:79:1
✖ P3 models file is private, references the one session key, and stores no executable values or keys (2.285532ms)
Error: proxy GPT API is PENDING build-time evidence
at Module.bundle (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/harness/pi/index.mjs:78:62)
at buildBundle (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/src/bundle.mjs:354:23)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:20:18)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:81:13)
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)
test at packages/harness/tests/proxy-bundle.test.mjs:94:1
✖ P3 every launch regenerates proxy port, declared models and own key without caching (2.062519ms)
Error: proxy GPT API is PENDING build-time evidence
at Module.bundle (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/harness/pi/index.mjs:78:62)
at buildBundle (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/src/bundle.mjs:354:23)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:20:18)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:95:17)
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)
exit=1
23:57:12Z
@@ -1,17 +0,0 @@
23:57:06Z
nice=19
✔ P3 Claude env receives the session proxy URL and key, without another agent or host credential (2.459573ms)
✔ P3 Claude preflight accepts a proxy key without a host provider credential (1.019636ms)
✔ P3 pi refuses no-session-credential with no provider key (0.965529ms)
✔ P3 pi refuses no-session-credential with only a Claude OAuth token (0.264623ms)
✔ P3 pi accepts its own provider key or a session proxy key (0.345262ms)
ℹ tests 5
ℹ suites 0
ℹ pass 5
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 56.359357
exit=0
23:57:06Z
@@ -1,14 +0,0 @@
23:57:06Z
nice=19
✔ P3 proxy sessionEnv removes every instance provider credential without widening ENV_ALLOW (0.976855ms)
✔ P3 no proxy retains the full existing allowlist and run environment (0.214793ms)
ℹ tests 2
ℹ suites 0
ℹ pass 2
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 47.349955
exit=0
23:57:06Z
@@ -1,42 +0,0 @@
// Parse static imports without evaluating any repository module. This is an audit tool, not a test runner.
// Usage: node --experimental-vm-modules agents/fethry/work/queue-332/import-run-list.mjs
import { readdirSync, readFileSync } from 'node:fs';
import { dirname, join, relative, resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
import { SourceTextModule } from 'node:vm';
const root = resolve(dirname(fileURLToPath(import.meta.url)), '../../../..');
const files = [];
function walk(dir) {
for (const entry of readdirSync(dir, { withFileTypes: true })) {
if (['node_modules', '.git', 'dist'].includes(entry.name)) continue;
const path = join(dir, entry.name);
if (entry.isDirectory()) walk(path);
else if (entry.isFile() && path.endsWith('.mjs')) files.push(path);
}
}
for (const dir of ['packages', 'scripts', 'adapters']) walk(join(root, dir));
const graph = new Map();
for (const file of files) {
const module = new SourceTextModule(readFileSync(file, 'utf8'), { identifier: file });
graph.set(file, module.dependencySpecifiers.filter(spec => spec.startsWith('.')).map(spec => resolve(dirname(file), spec)));
}
// The loader imports the configured harness via a computed path. Explicit runtime import edges:
const loader = join(root, 'packages/plugins/src/loader.mjs');
graph.get(loader).push(...['claude-code', 'pi'].map(name => join(root, 'packages/plugins/harness', name, 'index.mjs')));
const changed = new Set([
'packages/seat/src/session.mjs', 'packages/business/src/launch.mjs',
'packages/plugins/harness/claude-code/index.mjs', 'packages/plugins/harness/pi/index.mjs',
'packages/harness/src/bundle.mjs', 'packages/cli/src/launcher.mjs',
].map(file => join(root, file)));
function affected(file, seen = new Set()) {
if (changed.has(file)) return true;
if (seen.has(file)) return false;
seen.add(file);
return (graph.get(file) ?? []).some(dep => affected(dep, seen));
}
const excluded = 'packages/cli/tests/case1-accept.test.mjs';
for (const file of files.filter(file => file.endsWith('.test.mjs')).sort()) {
if (!affected(file)) continue;
const path = relative(root, file);
console.log(`${path === excluded ? 'EXCLUDED (mos-1612) ' : ''}${path}`);
}
@@ -1,211 +0,0 @@
// Row332 evidence. The only network-capable phase is the single authorized fetch.
// offline runs in unshare -rn; a transparent local tap records pi payload shapes
// without retaining headers, then pipes bytes unchanged to the pinned proxy.
import { mkdirSync, readFileSync, readlinkSync, writeFileSync } from 'node:fs';
import { dirname, join, resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
import { getPriority, setPriority, networkInterfaces } from 'node:os';
import { spawn } from 'node:child_process';
import { once } from 'node:events';
import http from 'node:http';
import { fetchPinned } from '../../../../packages/model-proxy/src/fetch.mjs';
import { PIN } from '../../../../packages/model-proxy/src/common.mjs';
import { initialConfig, verifyInstall } from '../../../../packages/model-proxy/src/settings.mjs';
const root = process.env.P3_EVIDENCE_ROOT;
if (!root || !root.startsWith('/mnt/storage/scratch/') || resolve(root) !== root) throw Error('owned evidence root required');
const enteredNice = getPriority(0);
setPriority(0, 19);
const repo = resolve(dirname(fileURLToPath(import.meta.url)), '../../../..');
const mode = process.argv[2];
const fakeKeys = ['fx332-client', 'fx332-upstream', 'fx332-manage'];
function redact(value) {
let text = String(value);
for (const key of fakeKeys) text = text.split(key).join('[redacted]');
return text;
}
const emit = (value) => console.log(redact(JSON.stringify(value)));
if (mode === 'fetch') {
const dataRoot = join(root, 'data');
mkdirSync(dataRoot, { mode: 0o700 });
const installed = await fetchPinned({ dataRoot, pin: PIN });
writeFileSync(join(root, 'installed.json'), JSON.stringify(installed) + '\n', { mode: 0o600, flag: 'wx' });
emit({ phase: 'fetch', version: PIN.version, binarySha256: PIN.binary.sha256,
panelVersion: PIN.panel.version, panelSha256: PIN.panel.sha256, enteredNice, nice: getPriority(0), verified: true });
} else if (mode === 'offline' || mode === 'glm-tool') {
const withTool = mode === 'glm-tool';
if (readlinkSync('/proc/self/ns/net') === process.env.P3_HOST_NET_NS) throw Error('network namespace was not isolated');
if (Object.keys(networkInterfaces()).some(name => name !== 'lo')) throw Error('loopback-only namespace required');
// Re-hash the already fetched assets; this function performs no network I/O.
const installed = verifyInstall(join(root, 'data'), PIN);
const attemptRoot = join(root, withTool ? 'attempt3-tool' : 'attempt2');
mkdirSync(attemptRoot, { mode: 0o700 });
setPriority(0, 19);
emit({ phase: 'isolation', interfaces: Object.keys(networkInterfaces()), enteredNice, nice: getPriority(0), version: PIN.version,
binarySha256: PIN.binary.sha256, panelSha256: PIN.panel.sha256, reverified: true });
const requests = [], responses = [], upstreamRequests = [], children = new Set();
const managed = (args, options = {}) => {
setPriority(0, 19);
const child = spawn('/usr/bin/timeout', ['-k', '10', ...args], { env: {
PATH: '/usr/bin:/bin', HOME: join(root, 'home'), TMPDIR: process.env.TMPDIR,
LANG: 'C.UTF-8', ...options.env,
}, cwd: root, stdio: ['ignore', 'pipe', 'pipe'] });
children.add(child);
setPriority(child.pid, 19);
child.once('close', () => children.delete(child));
return child;
};
const summary = body => ({ keys: Object.keys(body).sort(), model: body.model, stream: body.stream,
roles: Array.isArray(body.messages) ? body.messages.map(message => message.role) : undefined,
inputTypes: Array.isArray(body.input) ? body.input.map(item => item.type) : typeof body.input,
...(Object.hasOwn(body, 'reasoning') ? { reasoning: body.reasoning } : {}),
...(Object.hasOwn(body, 'thinking') ? { thinking: body.thinking } : {}),
...(Object.hasOwn(body, 'reasoning_effort') ? { reasoning_effort: body.reasoning_effort } : {}),
...(Object.hasOwn(body, 'enable_thinking') ? { enable_thinking: body.enable_thinking } : {}),
...(Object.hasOwn(body, 'tool_stream') ? { tool_stream: body.tool_stream } : {}),
...(Array.isArray(body.tools) ? { toolNames: body.tools.map(tool => tool.function?.name) } : {}),
...(Object.hasOwn(body, 'stream_options') ? { stream_options: body.stream_options } : {}),
...(Object.hasOwn(body, 'max_tokens') ? { max_tokens: body.max_tokens } : {}),
...(Object.hasOwn(body, 'max_completion_tokens') ? { max_completion_tokens: body.max_completion_tokens } : {}) });
const payload = async req => { let text = ''; for await (const part of req) text += part; return JSON.parse(text || '{}'); };
const listen = async server => { await new Promise((ok, no) => { server.once('error', no); server.listen(0, '127.0.0.1', ok); }); return server.address().port; };
const marker = 'P332_OFFLINE_OK';
const upstream = http.createServer(async (req, res) => {
const body = await payload(req);
upstreamRequests.push({ method: req.method, path: req.url, ...summary(body) });
const item = { id: 'msg_fixture', type: 'message', role: 'assistant', status: 'completed', content: [{ type: 'output_text', text: marker, annotations: [] }] };
if (req.url.endsWith('/chat/completions')) {
res.writeHead(200, { 'Content-Type': 'text/event-stream' });
const chunk = (delta, finish_reason = null) => res.write(`data: ${JSON.stringify({ id: 'chat_fixture', object: 'chat.completion.chunk', created: 1, model: body.model, choices: [{ index: 0, delta, finish_reason }] })}\n\n`);
chunk({ role: 'assistant', content: marker }); chunk({}, 'stop');
res.write(`data: ${JSON.stringify({ id: 'chat_fixture', object: 'chat.completion.chunk', created: 1, model: body.model, choices: [], usage: { prompt_tokens: 1, completion_tokens: 1, total_tokens: 2 } })}\n\n`);
res.end('data: [DONE]\n\n');
} else if (req.url.endsWith('/responses')) {
res.writeHead(200, { 'Content-Type': 'text/event-stream' });
const event = (type, more) => res.write(`event: ${type}\ndata: ${JSON.stringify({ type, ...more })}\n\n`);
const response = { id: 'resp_fixture', object: 'response', model: body.model, status: 'in_progress', output: [] };
event('response.created', { response });
event('response.output_item.added', { output_index: 0, item: { ...item, status: 'in_progress', content: [] } });
event('response.content_part.added', { item_id: item.id, output_index: 0, content_index: 0, part: { type: 'output_text', text: '', annotations: [] } });
event('response.output_text.delta', { item_id: item.id, output_index: 0, content_index: 0, delta: marker });
event('response.output_text.done', { item_id: item.id, output_index: 0, content_index: 0, text: marker });
event('response.output_item.done', { output_index: 0, item });
event('response.completed', { response: { ...response, status: 'completed', output: [item], usage: { input_tokens: 1, output_tokens: 1, total_tokens: 2 } } });
res.end();
} else { res.writeHead(404); res.end('{"error":"stand-in path refused"}'); }
});
let proxy, tap;
let proxyText = '';
const corrections = {};
const restoreNice = pid => {
try {
const priority = getPriority(pid);
if (priority !== 19) { corrections[priority] = (corrections[priority] ?? 0) + 1; setPriority(pid, 19); }
const descendants = readFileSync(`/proc/${pid}/task/${pid}/children`, 'utf8').trim().split(/\s+/).filter(Boolean);
for (const child of descendants) restoreNice(Number(child));
} catch {}
};
const keepNice = setInterval(() => restoreNice(process.pid), 100);
keepNice.unref();
try {
const upstreamPort = await listen(upstream);
const reservation = http.createServer(); const proxyPort = await listen(reservation);
await new Promise(ok => reservation.close(ok));
if (proxyPort === 8317 || upstreamPort === 8317) throw Error('reserved host-proxy port excluded');
const dataRoot = join(attemptRoot, 'offline');
mkdirSync(dataRoot, { mode: 0o700 });
mkdirSync(join(dataRoot, 'proxy'), { mode: 0o700 });
mkdirSync(join(dataRoot, 'proxy', 'auth'), { mode: 0o700 });
const config = initialConfig({ dataRoot, port: proxyPort, key: fakeKeys[2], sentinel: fakeKeys[0] });
config.management['disable-control-panel'] = true;
config.observability.logs['logging-to-file'] = false;
// Bundled panel1.26.7: Ip reads api-keys.openai-compatibility;
// Fp/Np require group.keys; xv/hv serialize keys:[{"api-key":...}].
config['api-keys'] = { 'openai-compatibility': [{ name: 'p332-standin', 'base-url': `http://127.0.0.1:${upstreamPort}/v1`,
keys: [{ 'api-key': fakeKeys[1] }], models: [{ name: 'gpt-fixture' }, { name: 'glm-fixture' }] }] };
const configFile = join(dataRoot, 'config.yaml');
writeFileSync(configFile, JSON.stringify(config, null, 2) + '\n', { mode: 0o600, flag: 'wx' });
proxy = managed(['200', installed.binary, '-config', configFile, '-local-model'], { env: { MANAGEMENT_STATIC_PATH: dirname(installed.panel) } });
proxy.stdout.on('data', bytes => { proxyText += bytes; });
proxy.stderr.on('data', bytes => { proxyText += bytes; });
let catalog, ids = [];
const readinessDeadline = Date.now() + 30000;
for (let poll = 1; Date.now() < readinessDeadline; poll++) {
if (proxy.exitCode !== null) throw Error('proxy exited before readiness');
try {
const result = await fetch(`http://127.0.0.1:${proxyPort}/v1/models`, { headers: { Authorization: `Bearer ${fakeKeys[0]}` }, signal: AbortSignal.timeout(1000) });
catalog = result.ok ? await result.json() : null;
ids = (catalog?.data ?? []).map(model => model.id);
emit({ phase: 'readiness', poll, status: result.status, modelCount: ids.length });
if (['gpt-fixture', 'glm-fixture'].every(id => ids.includes(id))) break;
} catch { emit({ phase: 'readiness', poll, status: 'not-ready', modelCount: 0 }); }
await new Promise(ok => setTimeout(ok, 1000));
}
if (!catalog) throw Error('proxy readiness failed');
emit({ phase: 'catalog', modelIds: ids });
if (!['gpt-fixture', 'glm-fixture'].every(id => ids.includes(id))) throw Error('stand-in routes absent from proxy catalog');
tap = http.createServer(async (req, res) => {
let raw = ''; for await (const part of req) raw += part;
const body = JSON.parse(raw || '{}');
const index = requests.push({ method: req.method, path: req.url, ...summary(body) }) - 1;
const outgoing = http.request({ hostname: '127.0.0.1', port: proxyPort, method: req.method, path: req.url,
headers: { ...req.headers, host: `127.0.0.1:${proxyPort}` } }, incoming => {
const chunks = [];
res.writeHead(incoming.statusCode, incoming.headers);
incoming.on('data', bytes => { chunks.push(bytes); res.write(bytes); });
incoming.on('end', () => {
const text = Buffer.concat(chunks).toString();
const events = text.split('\n').filter(line => line.startsWith('event: ')).map(line => line.slice(7));
responses.push({ request: index, status: incoming.statusCode, events, marker: text.includes(marker),
...(incoming.statusCode >= 400 ? { errorBody: redact(text).slice(0, 800) } : {}) });
res.end();
});
});
outgoing.on('error', () => { res.writeHead(502); res.end(); });
// Preserve exact body bytes and never log a header value.
outgoing.end(raw);
});
const tapPort = await listen(tap);
if (tapPort === 8317) throw Error('reserved host-proxy port excluded');
const scenarios = [
['gpt-responses', 'openai-responses', 'gpt-fixture', null],
['gpt-completions', 'openai-completions', 'gpt-fixture', null],
['glm-completions', 'openai-completions', 'glm-fixture', { thinkingFormat: 'zai', zaiToolStream: true }],
];
for (const [name, api, model, compat] of (withTool ? scenarios.filter(([name]) => name === 'glm-completions') : scenarios)) {
const turnHome = join(attemptRoot, name, 'home');
const agentDir = join(turnHome, '.pi', 'agent');
mkdirSync(agentDir, { recursive: true, mode: 0o700 });
const models = { providers: { 'p332-probe': { baseUrl: `http://127.0.0.1:${tapPort}/v1`, api,
apiKey: '$ANTHROPIC_API_KEY', ...(compat ? { compat } : {}), models: [{ id: model, reasoning: true }] } } };
writeFileSync(join(agentDir, 'models.json'), JSON.stringify(models) + '\n', { mode: 0o600, flag: 'wx' });
writeFileSync(join(agentDir, 'settings.json'), JSON.stringify({ retry: { enabled: false, maxRetries: 0, provider: { maxRetries: 0 } } }) + '\n', { mode: 0o600, flag: 'wx' });
const reqStart = requests.length, upstreamStart = upstreamRequests.length, responseStart = responses.length;
const pi = managed(['50', '/usr/bin/node', join(repo, 'node_modules/@earendil-works/pi-coding-agent/dist/cli.js'),
'--no-extensions', '--no-skills', '--no-prompt-templates', '--no-themes', '--no-context-files', '--no-session',
...(withTool ? ['--tools', 'read'] : ['--no-tools']),
'--provider', 'p332-probe', '--model', model, '--thinking', 'low', '-p', 'Reply P332_OFFLINE_OK only.'],
{ env: { HOME: turnHome, PI_CODING_AGENT_DIR: agentDir, ANTHROPIC_API_KEY: fakeKeys[0] } });
let stdout = '', stderr = '';
pi.stdout.on('data', bytes => { stdout += bytes; });
pi.stderr.on('data', bytes => { stderr += bytes; });
const [exit, signal] = await once(pi, 'close');
emit({ phase: 'turn', name: withTool ? `${name}-tool` : name, api, exit, signal, marker: stdout.includes(marker),
piRequests: requests.slice(reqStart), proxyResponses: responses.slice(responseStart), upstreamRequests: upstreamRequests.slice(upstreamStart),
...(exit !== 0 ? { stderr: redact(stderr).slice(0, 1200), stdout: redact(stdout).slice(0, 1200) } : {}), nice: getPriority(0) });
}
emit({ phase: 'conclusion', limitation: 'Stand-in openai-compatibility credential only; no Codex OAuth credential or real-auth turn. This script never selects the production API.' });
emit({ phase: 'nice-corrections', restoredTo: 19, observedBeforeRestore: corrections });
} catch (error) {
emit({ phase: 'error', message: error.message, proxyDiagnostic: redact(proxyText).slice(-3000) });
process.exitCode = 1;
} finally {
clearInterval(keepNice);
for (const child of [...children]) child.kill('SIGTERM');
for (const child of [...children]) {
await Promise.race([once(child, 'close'), new Promise(ok => setTimeout(ok, 1200))]);
if (child.exitCode === null) child.kill('SIGKILL');
}
for (const server of [tap, upstream].filter(Boolean)) { server.closeAllConnections(); await new Promise(ok => server.close(ok)); }
emit({ phase: 'cleanup', remainingManagedChildren: children.size });
}
} else { throw Error('fetch, offline or glm-tool phase required'); }
@@ -1,104 +0,0 @@
23:41:37Z
nice=19
✖ P3 proxy model validation preserves each explicit wire route and the proxy model id (0.843397ms)
✖ P3 a proxy model without route refuses proxy-route-missing (0.621133ms)
✖ P3 an unknown proxy route refuses proxy-route-unknown (1.448927ms)
✔ P3 nonproxy models retain their provider/model-only shape and reject route metadata (0.541212ms)
✖ P3 launch.account accepts the proxy credential source without naming host variables (0.159973ms)
✔ P3 existing environment-set accounts retain their validated representation (0.209852ms)
ℹ tests 6
ℹ suites 0
ℹ pass 2
ℹ fail 4
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 58.617716
✖ failing tests:
test at packages/business/tests/proxy-launch.test.mjs:6:1
✖ P3 proxy model validation preserves each explicit wire route and the proxy model id (0.843397ms)
Error [BusinessError]: unsupported launch.models.selected key: "route"
at refuse (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/errors.mjs:12:9)
at rejectUnknownKeys (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/util.mjs:17:33)
at file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/launch.mjs:18:5
at Array.map (<anonymous>)
at checkModels (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/launch.mjs:15:51)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/tests/proxy-launch.test.mjs:9:22)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.start (node:internal/test_runner/test:1262:17)
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
exitCode: 2
}
test at packages/business/tests/proxy-launch.test.mjs:13:1
✖ P3 a proxy model without route refuses proxy-route-missing (0.621133ms)
AssertionError [ERR_ASSERTION]: Missing expected exception.
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/tests/proxy-launch.test.mjs:14:10)
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: 'proxy-route-missing' },
operator: 'throws',
diff: 'simple'
}
test at packages/business/tests/proxy-launch.test.mjs:19:1
✖ P3 an unknown proxy route refuses proxy-route-unknown (1.448927ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
+ actual - expected
+ Comparison {}
- Comparison {
- code: 'proxy-route-unknown'
- }
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/tests/proxy-launch.test.mjs:21:12)
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: true,
code: 'ERR_ASSERTION',
actual: BusinessError: unsupported launch.models.selected key: "route"
at refuse (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/errors.mjs:12:9)
at rejectUnknownKeys (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/util.mjs:17:33)
at file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/launch.mjs:18:5
at Array.map (<anonymous>)
at checkModels (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/launch.mjs:15:51)
at assert.throws.code (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/tests/proxy-launch.test.mjs:21:25)
at getActual (node:assert:580:5)
at strict.throws (node:assert:728:24)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/tests/proxy-launch.test.mjs:21:12)
at Test.runInAsyncScope (node:async_hooks:226:14),
expected: { code: 'proxy-route-unknown' },
operator: 'throws',
diff: 'simple'
}
test at packages/business/tests/proxy-launch.test.mjs:34:1
✖ P3 launch.account accepts the proxy credential source without naming host variables (0.159973ms)
Error [BusinessError]: launch.account.credential must name environment variables, joined with "+"
at refuse (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/errors.mjs:12:9)
at checkAccount (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/launch.mjs:86:5)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/tests/proxy-launch.test.mjs:35:20)
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) {
exitCode: 2
}
exit=1
23:41:37Z
@@ -1,107 +0,0 @@
23:44:40Z
nice=19
✖ P3 Anthropic route uses messages at proxy root and the declared model id (10.834783ms)
✖ P3 GLM route uses completions at proxy /v1 with explicit z.ai compatibility (3.078049ms)
✖ P3 GPT route selects a stack-owned provider instead of pi Codex OAuth (2.606176ms)
✖ P3 models file is private, references the one session key, and stores no executable values or keys (2.917109ms)
✖ P3 every launch regenerates proxy port, declared models and own key without caching (2.778195ms)
ℹ tests 5
ℹ suites 0
ℹ pass 0
ℹ fail 5
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 117.630612
✖ failing tests:
test at packages/harness/tests/proxy-bundle.test.mjs:35:1
✖ P3 Anthropic route uses messages at proxy root and the declared model id (10.834783ms)
Error: ENOENT: no such file or directory, open '/mnt/storage/scratch/tmp/gxWP/p332-ddGpq6/run/home/.pi/agent/models.json'
at readFileSync (node:fs:621:20)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:28:43)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:36:13)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.start (node:internal/test_runner/test:1262:17)
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: '/mnt/storage/scratch/tmp/gxWP/p332-ddGpq6/run/home/.pi/agent/models.json'
}
test at packages/harness/tests/proxy-bundle.test.mjs:45:1
✖ P3 GLM route uses completions at proxy /v1 with explicit z.ai compatibility (3.078049ms)
Error: ENOENT: no such file or directory, open '/mnt/storage/scratch/tmp/gxWP/p332-7vqUkh/run/home/.pi/agent/models.json'
at readFileSync (node:fs:621:20)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:28:43)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:46:13)
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) {
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: '/mnt/storage/scratch/tmp/gxWP/p332-7vqUkh/run/home/.pi/agent/models.json'
}
test at packages/harness/tests/proxy-bundle.test.mjs:56:1
✖ P3 GPT route selects a stack-owned provider instead of pi Codex OAuth (2.606176ms)
Error: ENOENT: no such file or directory, open '/mnt/storage/scratch/tmp/gxWP/p332-xqR4OI/run/home/.pi/agent/models.json'
at readFileSync (node:fs:621:20)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:28:43)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:57:13)
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) {
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: '/mnt/storage/scratch/tmp/gxWP/p332-xqR4OI/run/home/.pi/agent/models.json'
}
test at packages/harness/tests/proxy-bundle.test.mjs:67:1
✖ P3 models file is private, references the one session key, and stores no executable values or keys (2.917109ms)
Error: ENOENT: no such file or directory, open '/mnt/storage/scratch/tmp/gxWP/p332-jAVWvp/run/home/.pi/agent/models.json'
at readFileSync (node:fs:621:20)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:28:43)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:69:13)
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) {
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: '/mnt/storage/scratch/tmp/gxWP/p332-jAVWvp/run/home/.pi/agent/models.json'
}
test at packages/harness/tests/proxy-bundle.test.mjs:82:1
✖ P3 every launch regenerates proxy port, declared models and own key without caching (2.778195ms)
Error: ENOENT: no such file or directory, open '/mnt/storage/scratch/tmp/gxWP/p332-yUgdwP/run/home/.pi/agent/models.json'
at readFileSync (node:fs:621:20)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:28:43)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:83:17)
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) {
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: '/mnt/storage/scratch/tmp/gxWP/p332-yUgdwP/run/home/.pi/agent/models.json'
}
exit=1
23:44:40Z
@@ -1,99 +0,0 @@
23:42:41Z
nice=19
✖ P3 Anthropic route uses messages at proxy root and the declared model id (6.017482ms)
✖ P3 GLM route uses completions at proxy /v1 with explicit z.ai compatibility (1.65735ms)
✖ P3 GPT route selects a stack-owned provider instead of pi Codex OAuth (1.23753ms)
✖ P3 models file is private, references the one session key, and stores no executable values or keys (1.202284ms)
✖ P3 every launch regenerates proxy port, declared models and own key without caching (1.210998ms)
ℹ tests 5
ℹ suites 0
ℹ pass 0
ℹ fail 5
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 88.02888
✖ failing tests:
test at packages/harness/tests/proxy-bundle.test.mjs:35:1
✖ P3 Anthropic route uses messages at proxy root and the declared model id (6.017482ms)
Error [BusinessError]: /mnt/storage/scratch/tmp/gQE5/mosaic-harness-biz-FaxPH3/businesses/acme.json launch: instance pm selects unknown model a
at refuse (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/errors.mjs:12:9)
at checkLaunch (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/business.mjs:204:125)
at validateBusinessDocument (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/business.mjs:310:57)
at resolvedFor (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/helpers.mjs:46:20)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:17:20)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:36:13)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.start (node:internal/test_runner/test:1262:17)
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
exitCode: 2
}
test at packages/harness/tests/proxy-bundle.test.mjs:45:1
✖ P3 GLM route uses completions at proxy /v1 with explicit z.ai compatibility (1.65735ms)
Error [BusinessError]: /mnt/storage/scratch/tmp/gQE5/mosaic-harness-biz-rtXOnL/businesses/acme.json launch: instance pm selects unknown model z
at refuse (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/errors.mjs:12:9)
at checkLaunch (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/business.mjs:204:125)
at validateBusinessDocument (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/business.mjs:310:57)
at resolvedFor (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/helpers.mjs:46:20)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:17:20)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:46:13)
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) {
exitCode: 2
}
test at packages/harness/tests/proxy-bundle.test.mjs:56:1
✖ P3 GPT route selects a stack-owned provider instead of pi Codex OAuth (1.23753ms)
Error [BusinessError]: /mnt/storage/scratch/tmp/gQE5/mosaic-harness-biz-IGXaeo/businesses/acme.json launch: instance pm selects unknown model g
at refuse (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/errors.mjs:12:9)
at checkLaunch (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/business.mjs:204:125)
at validateBusinessDocument (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/business.mjs:310:57)
at resolvedFor (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/helpers.mjs:46:20)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:17:20)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:57:13)
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) {
exitCode: 2
}
test at packages/harness/tests/proxy-bundle.test.mjs:67:1
✖ P3 models file is private, references the one session key, and stores no executable values or keys (1.202284ms)
Error [BusinessError]: /mnt/storage/scratch/tmp/gQE5/mosaic-harness-biz-z5VTgc/businesses/acme.json launch: instance pm selects unknown model a
at refuse (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/errors.mjs:12:9)
at checkLaunch (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/business.mjs:204:125)
at validateBusinessDocument (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/business.mjs:310:57)
at resolvedFor (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/helpers.mjs:46:20)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:17:20)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:69:13)
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) {
exitCode: 2
}
test at packages/harness/tests/proxy-bundle.test.mjs:82:1
✖ P3 every launch regenerates proxy port, declared models and own key without caching (1.210998ms)
Error [BusinessError]: /mnt/storage/scratch/tmp/gQE5/mosaic-harness-biz-83xrrf/businesses/acme.json launch: instance pm selects unknown model a
at refuse (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/errors.mjs:12:9)
at checkLaunch (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/business.mjs:204:125)
at validateBusinessDocument (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/business/src/business.mjs:310:57)
at resolvedFor (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/helpers.mjs:46:20)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:17:20)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:83:17)
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) {
exitCode: 2
}
exit=1
23:42:41Z
@@ -1,77 +0,0 @@
23:41:42Z
nice=19
✖ P3 Anthropic route uses messages at proxy root and the declared model id (8.181278ms)
✖ P3 GLM route uses completions at proxy /v1 with explicit z.ai compatibility (1.652506ms)
✖ P3 GPT route selects a stack-owned provider instead of pi Codex OAuth (1.297337ms)
✖ P3 models file is private, references the one session key, and stores no executable values or keys (1.318875ms)
✖ P3 every launch regenerates proxy port, declared models and own key without caching (1.353193ms)
ℹ tests 5
ℹ suites 0
ℹ pass 0
ℹ fail 5
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 104.116628
✖ failing tests:
test at packages/harness/tests/proxy-bundle.test.mjs:34:1
✖ P3 Anthropic route uses messages at proxy root and the declared model id (8.181278ms)
TypeError: Cannot assign to read only property 'vars' of object '#<Object>'
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:18:17)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:35:13)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.start (node:internal/test_runner/test:1262:17)
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17)
test at packages/harness/tests/proxy-bundle.test.mjs:44:1
✖ P3 GLM route uses completions at proxy /v1 with explicit z.ai compatibility (1.652506ms)
TypeError: Cannot assign to read only property 'vars' of object '#<Object>'
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:18:17)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:45:13)
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)
test at packages/harness/tests/proxy-bundle.test.mjs:55:1
✖ P3 GPT route selects a stack-owned provider instead of pi Codex OAuth (1.297337ms)
TypeError: Cannot assign to read only property 'vars' of object '#<Object>'
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:18:17)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:56:13)
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)
test at packages/harness/tests/proxy-bundle.test.mjs:66:1
✖ P3 models file is private, references the one session key, and stores no executable values or keys (1.318875ms)
TypeError: Cannot assign to read only property 'vars' of object '#<Object>'
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:18:17)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:68:13)
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)
test at packages/harness/tests/proxy-bundle.test.mjs:81:1
✖ P3 every launch regenerates proxy port, declared models and own key without caching (1.353193ms)
TypeError: Cannot assign to read only property 'vars' of object '#<Object>'
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:18:17)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:82:17)
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)
exit=1
23:41:42Z
@@ -1,78 +0,0 @@
23:41:55Z
nice=19
✔ C2-04: launcher workspace clones code but never the library (1499.521161ms)
✖ P3 proxy key reaches the spawned runner but never session.json or the bundle (40.623657ms)
✔ bus start --pm: the launcher instance (the chief of staff) runs under its own PID namespace, registered, with a manifest (1361.267044ms)
usage: {"event":"usage-unknown","business":"acme","run":"r61b9e08ebd95","instance":"chief","turn":"a017a278-0466-41ec-b7d4-d05d7bb2b4e8","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r786eccbac72a","instance":"coder","turn":"5f857a62-f7e6-4662-a745-852935445baf","source":"@none","code":"baseline-unknown"}
✔ the chief of staff launches a coder through its launch tool; the coder answers; refusals name their code (853.066ms)
usage: {"event":"usage-unknown","business":"acme","run":"raa425c1d9f99","instance":"chief","turn":"94eec92a-4189-4188-abf0-c0dd27eb3f7a","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r91d263cb44fe","instance":"pm","turn":"b3030547-e499-4465-ba6f-387ca92e7b2e","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"raa425c1d9f99","instance":"chief","turn":"2bb5f36b-953e-4f27-8368-d3cb77b0e68d","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r91d263cb44fe","instance":"pm","turn":"f393963d-90db-4cc3-ada0-9749bbe898e9","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r91d263cb44fe","instance":"pm","turn":"0fca073a-da7d-4cf2-953f-d590f37c6a9c","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"raa425c1d9f99","instance":"chief","turn":"9afffc56-5aca-4ac9-a8e9-ef50b859e54e","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r91d263cb44fe","instance":"pm","turn":"555642ca-00ee-4665-89ab-e68eee143f82","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"raa425c1d9f99","instance":"chief","turn":"1dad33fc-cbe9-404b-8752-3b68753ab199","source":"@none","code":"baseline-unknown"}
✔ a launched pm's request_staff reaches the chief of staff; no other session has the tool and the launch limits still hold (1303.262398ms)
✔ each launch makes sure the workspace has a clone of the project: cloned, fast-forwarded, or fetched and logged (4218.830472ms)
✔ a role the broker says holds a merge decision gets land_work, its prompt line, its landing and the git socket; without it, none (747.37249ms)
✔ REQ-LAUNCH-1 the tick starts a listed merge decision holder once, with land_work, the Landing line and its landing turn; an unlisted holder starts nothing (463.557222ms)
usage: {"event":"usage-unknown","business":"acme","run":"r18be47008dae","instance":"coder","turn":"52cd9cf6-57bd-41bf-96c0-fedd9ff9c092","source":"@none","code":"baseline-unknown"}
✔ a holder running since before the resolution is stopped once the broker releases it, land-relaunch, and the next tick starts it: landing turn first, then the message that waited (763.066104ms)
✔ a landing run that ended isn't started again for its decision, a spent decision starts nothing, and a new decision starts the holder (706.701053ms)
✔ after a restart, the new host's first tick starts a holder whose decision is still held (956.687674ms)
✔ a refused landing start is logged once per code with its decision, isn't a start, and the next tick with room starts the holder (721.85447ms)
✔ a project clone that can't be made refuses checkout-failed, from --chief and from a session, with no run and no clone left (395.757947ms)
✔ a runner that stops at once ends its launch with the runner's reason (463.349261ms)
✔ a Claude Code launch with no session credential refuses before it starts (235.420433ms)
✔ a pi launch needs no session credential: pi logs in through its own ENV_ALLOW variables (443.687348ms)
usage: {"event":"plugin-refused","kind":"harness","name":"down","code":"missing","message":"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/harness/down is missing","kept":[]}
plugins: {"event":"plugin-refused","kind":"harness","name":"down","code":"missing","message":"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/harness/down is missing","kept":[]}
✔ row 65 a failed primary preflight launches the fallback on a fixture harness module, recording the route and the reason (477.875324ms)
✔ a runner killed from the host ends its launch as killed, not failed (491.276085ms)
✔ a missing or failing bwrap refuses sandbox-unavailable before anything starts; there is no unconfined fallback (257.904073ms)
✔ row 64 a role skill that isn't enabled refuses skill-not-enabled, and one that isn't a plain directory skill-refused, before anything starts (271.706852ms)
✔ row 213 a creative instance's persona is read from <configDir>/personas: off its digest the launch fails with the mismatch as its reason (374.032091ms)
✔ row 64 on Claude Code a role skill that isn't enabled refuses the same way, before anything starts (266.897065ms)
usage: {"event":"usage-unknown","business":"acme","run":"r505be704086e","instance":"chief","turn":"d3144fd2-644c-4bf1-95b5-5914f45dd040","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r505be704086e","instance":"chief","turn":"c61a5cf2-9714-4e2a-a335-a48d0d1dc430","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r96a1ff87bc5e","instance":"coder","turn":"bc58500e-35cc-47b5-b849-a56aa0438ace","source":"@none","code":"baseline-unknown"}
✔ a real Claude Code coder's shell can't read a stand-in secret or anything else its sandbox doesn't hold (1866.534461ms)
✔ a host that died hard leaves its sessions to the next host, which kills them and ends their runs so the role can be launched again (1438.787679ms)
✔ a host that died hard leaves its sessions to the next host, which finds one already exited (23) and ends their runs so the role can be launched again (4207.748283ms)
✔ bus start --no-launch leaves an earlier host's live session alone: no signal, no end, sessions.json as it was (275.473348ms)
✔ bus start --no-launch refuses every launch: the PM launch and a session's request, each logged, nothing spawned (235.254265ms)
✔ bus start --no-launch starts no thread tick; the same host with launches runs it (1246.476055ms)
✔ a malformed sessions.json refuses the host start with exit 3 and stays as it was (188.603222ms)
✔ an over-long launch request is refused at once, not at the 10 s idle timeout (194.710702ms)
✔ a launch client that never closes its side doesn't hold the host's close (204.602445ms)
✔ a runner that ignores SIGTERM is killed when the host closes (1400.602264ms)
✔ kill switch refuses chief and hire before launch work and a clear permits a later request (396.558108ms)
✔ kill switch stops an actual managed namespace and records the halt reason without rewriting its bundle (362.427202ms)
✔ a launch waiting across halt and resume cannot use its stale admission (218.641499ms)
ℹ tests 35
ℹ suites 0
ℹ pass 34
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 29700.689398
✖ failing tests:
test at packages/cli/tests/launcher.test.mjs:150:1
✖ P3 proxy key reaches the spawned runner but never session.json or the bundle (40.623657ms)
Error [CliError]: unsupported /mnt/storage/scratch/tmp/gmDV/mosaic-launch-PVUXgr/config/businesses/acme.json launch.models.claude-opus-5-5 key: "route"
at business (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/cli/src/config.mjs:45:47)
at bootConfig (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/cli/src/config.mjs:126:10)
at setup (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/cli/tests/launcher.test.mjs:99:16)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/cli/tests/launcher.test.mjs:156:34)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
exitCode: 3
}
exit=1
23:42:25Z
@@ -1,98 +0,0 @@
23:42:41Z
nice=19
✖ P3 Claude env receives the session proxy URL and key, without another agent or host credential (3.24785ms)
✖ P3 Claude preflight accepts a proxy key without a host provider credential (1.57681ms)
✖ P3 pi refuses no-session-credential with no provider key (1.085777ms)
✖ P3 pi refuses no-session-credential with only a Claude OAuth token (0.464216ms)
✔ P3 pi accepts its own provider key or a session proxy key (0.351842ms)
ℹ tests 5
ℹ suites 0
ℹ pass 1
ℹ fail 4
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 71.435137
✖ failing tests:
test at packages/plugins/tests/proxy-harness.test.mjs:24:1
✖ P3 Claude env receives the session proxy URL and key, without another agent or host credential (3.24785ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
+ actual - expected
+ undefined
- 'http://127.0.0.1:12345'
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/tests/proxy-harness.test.mjs:30:12)
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: undefined,
expected: 'http://127.0.0.1:12345',
operator: 'strictEqual',
diff: 'simple'
}
test at packages/plugins/tests/proxy-harness.test.mjs:39:1
✖ P3 Claude preflight accepts a proxy key without a host provider credential (1.57681ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
+ actual - expected
+ {
+ code: 'no-session-credential',
+ message: "the bus host has none of CLAUDE_CODE_OAUTH_TOKEN, ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN with ANTHROPIC_BASE_URL; the bus unit's EnvironmentFile sets one when the bus starts"
+ }
- null
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/tests/proxy-harness.test.mjs:44:10)
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: { code: 'no-session-credential', message: "the bus host has none of CLAUDE_CODE_OAUTH_TOKEN, ANTHROPIC_API_KEY, ANTHROPIC_AUTH_TOKEN with ANTHROPIC_BASE_URL; the bus unit's EnvironmentFile sets one when the bus starts" },
expected: null,
operator: 'strictEqual',
diff: 'simple'
}
test at packages/plugins/tests/proxy-harness.test.mjs:49:1
✖ P3 pi refuses no-session-credential with no provider key (1.085777ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
+ actual - expected
+ undefined
- 'no-session-credential'
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/tests/proxy-harness.test.mjs:51:10)
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: undefined,
expected: 'no-session-credential',
operator: 'strictEqual',
diff: 'simple'
}
test at packages/plugins/tests/proxy-harness.test.mjs:54:1
✖ P3 pi refuses no-session-credential with only a Claude OAuth token (0.464216ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
+ actual - expected
+ undefined
- 'no-session-credential'
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/tests/proxy-harness.test.mjs:56:10)
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: undefined,
expected: 'no-session-credential',
operator: 'strictEqual',
diff: 'simple'
}
exit=1
23:42:41Z
@@ -1,82 +0,0 @@
23:41:44Z
nice=19
✖ P3 Claude env receives the session proxy URL and key, without another agent or host credential (0.739622ms)
✖ P3 Claude preflight accepts a proxy key without a host provider credential (0.187719ms)
✖ P3 pi refuses no-session-credential with no provider key (0.161237ms)
✖ P3 pi refuses no-session-credential with only a Claude OAuth token (0.154227ms)
✖ P3 pi accepts its own provider key or a session proxy key (0.168061ms)
ℹ tests 5
ℹ suites 0
ℹ pass 0
ℹ fail 5
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 52.551274
✖ failing tests:
test at packages/plugins/tests/proxy-harness.test.mjs:24:1
✖ P3 Claude env receives the session proxy URL and key, without another agent or host credential (0.739622ms)
TypeError: Cannot destructure property 'log' of 'undefined' as it is undefined.
at createLoader (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/src/loader.mjs:88:32)
at harness (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/tests/proxy-harness.test.mjs:11:18)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/tests/proxy-harness.test.mjs:25:24)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.start (node:internal/test_runner/test:1262:17)
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17)
test at packages/plugins/tests/proxy-harness.test.mjs:39:1
✖ P3 Claude preflight accepts a proxy key without a host provider credential (0.187719ms)
TypeError: Cannot destructure property 'log' of 'undefined' as it is undefined.
at createLoader (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/src/loader.mjs:88:32)
at harness (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/tests/proxy-harness.test.mjs:11:18)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/tests/proxy-harness.test.mjs:40:24)
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)
test at packages/plugins/tests/proxy-harness.test.mjs:49:1
✖ P3 pi refuses no-session-credential with no provider key (0.161237ms)
TypeError: Cannot destructure property 'log' of 'undefined' as it is undefined.
at createLoader (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/src/loader.mjs:88:32)
at harness (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/tests/proxy-harness.test.mjs:11:18)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/tests/proxy-harness.test.mjs:50:20)
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)
test at packages/plugins/tests/proxy-harness.test.mjs:54:1
✖ P3 pi refuses no-session-credential with only a Claude OAuth token (0.154227ms)
TypeError: Cannot destructure property 'log' of 'undefined' as it is undefined.
at createLoader (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/src/loader.mjs:88:32)
at harness (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/tests/proxy-harness.test.mjs:11:18)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/tests/proxy-harness.test.mjs:55:20)
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)
test at packages/plugins/tests/proxy-harness.test.mjs:59:1
✖ P3 pi accepts its own provider key or a session proxy key (0.168061ms)
TypeError: Cannot destructure property 'log' of 'undefined' as it is undefined.
at createLoader (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/src/loader.mjs:88:32)
at harness (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/tests/proxy-harness.test.mjs:11:18)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/tests/proxy-harness.test.mjs:60:20)
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)
exit=1
23:41:44Z
-35
View File
@@ -1,35 +0,0 @@
23:41:50Z
nice=19
✖ P3 proxy sessionEnv removes every instance provider credential without widening ENV_ALLOW (1.019646ms)
✔ P3 no proxy retains the full existing allowlist and run environment (0.564867ms)
ℹ tests 2
ℹ suites 0
ℹ pass 1
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 46.658896
✖ failing tests:
test at packages/seat/tests/proxy-session-env.test.mjs:16:1
✖ P3 proxy sessionEnv removes every instance provider credential without widening ENV_ALLOW (1.019646ms)
AssertionError [ERR_ASSERTION]: CLAUDE_CODE_OAUTH_TOKEN
true !== false
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/seat/tests/proxy-session-env.test.mjs:19:40)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.start (node:internal/test_runner/test:1262:17)
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: true,
expected: false,
operator: 'strictEqual',
diff: 'simple'
}
exit=1
23:41:50Z
@@ -1,30 +0,0 @@
00:01:55Z
nice=19
✔ REQ-LIMIT-1 schema: every scope unset or zero, adjustable above four, bad values and unknown models refuse (22.211777ms)
✔ REQ-LIMIT-1 counts each exact scope at/over limit, unlimited and old tuple after model reassignment (0.666965ms)
✔ REQ-ROLE-3 writer: atomic validated revision, immutable previous bytes and authenticated actor/old/new receipt (19.091287ms)
✔ REQ-ROLE-3 writer: pre-rename fault leaves old file, post-rename recovery records commit, conflicting recovery refuses (15.98515ms)
✔ REQ-LIMIT-1 / decision145 migration prints only, preserves values, rejects ambiguity, and is idempotent (4.713343ms)
✔ REQ-LIMIT-1 shared settings validates the complete proposed selection and logs exact actor (20.35829ms)
✔ REQ-LIMIT-1 provider is table data: another provider routes separately and aliases share exact counts (2.568186ms)
✔ REQ-ROLE-3 refuses live writer locks, symlink targets and uncertain recovery without changing bytes (9.763289ms)
✔ Q169 assistants: vars and definition change and log the actor; tracker null leaves no tracker (16.756637ms)
✔ Q169 assistants: refuses other instances, other definitions, holder and credentials, empty entries, a tracker the definition has no credential for and a stale revision (19.737439ms)
✔ Q169 assistants: a definition with a vikunja credential takes a tracker change and refuses its removal or a used bot (12.898928ms)
✔ row 65 routes lists every instance with harness, model, thinking and fallback, the switched-on harnesses, the model keys and each harness's levels (2.552837ms)
✔ 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 (16.235475ms)
✔ 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 (20.272464ms)
✔ 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 (10.564122ms)
✔ B7 kept instance: the models keys it names and the instances key are the human's (26.878317ms)
✔ B7 kept instance: its route is the human's (10.786018ms)
✔ M10 creative instance: models keys it names, the instances key and its route are the human's (35.64373ms)
ℹ tests 18
ℹ suites 0
ℹ pass 18
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 331.736961
exit=0
00:01:56Z
@@ -1,62 +0,0 @@
00:01:56Z
nice=19
✔ C2-04: launcher workspace clones code but never the library (1457.042303ms)
✔ P3 proxy key reaches the spawned runner but never session.json or the bundle (1365.062806ms)
✔ bus start --pm: the launcher instance (the chief of staff) runs under its own PID namespace, registered, with a manifest (1374.325436ms)
usage: {"event":"usage-unknown","business":"acme","run":"ra78486da0ed8","instance":"chief","turn":"9402e726-ac22-4423-aea9-cf7dcc35c134","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r49e89e37520e","instance":"coder","turn":"6bf40609-ae81-49b3-96d0-de2d5811b135","source":"@none","code":"baseline-unknown"}
✔ the chief of staff launches a coder through its launch tool; the coder answers; refusals name their code (836.256914ms)
usage: {"event":"usage-unknown","business":"acme","run":"rf8408ce6a5b4","instance":"chief","turn":"e773abb1-268c-4404-a5da-81acd979905f","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r42524dd77612","instance":"pm","turn":"58e2bf95-0793-4495-bcdc-b27aa651caa1","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"rf8408ce6a5b4","instance":"chief","turn":"cb53fe60-e24f-4760-b284-d3b1d3620050","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r42524dd77612","instance":"pm","turn":"7460fc5d-aea2-4343-98a5-00d063c730c5","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r42524dd77612","instance":"pm","turn":"1ee4cbc7-90b7-4275-b3ac-4cbbd0394912","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"rf8408ce6a5b4","instance":"chief","turn":"1573dcc7-1d85-4783-b8c9-1a25c6ff71ac","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r42524dd77612","instance":"pm","turn":"bcb2aa05-7af5-4d9e-b085-c631754554ae","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"rf8408ce6a5b4","instance":"chief","turn":"9c77b01a-8f82-4d76-8e86-3eccdf5c05bc","source":"@none","code":"baseline-unknown"}
✔ a launched pm's request_staff reaches the chief of staff; no other session has the tool and the launch limits still hold (1399.028095ms)
✔ each launch makes sure the workspace has a clone of the project: cloned, fast-forwarded, or fetched and logged (4193.990785ms)
✔ a role the broker says holds a merge decision gets land_work, its prompt line, its landing and the git socket; without it, none (707.949813ms)
✔ REQ-LAUNCH-1 the tick starts a listed merge decision holder once, with land_work, the Landing line and its landing turn; an unlisted holder starts nothing (438.968553ms)
usage: {"event":"usage-unknown","business":"acme","run":"r33b3a0a89f29","instance":"coder","turn":"54d42057-6aeb-4460-bbbb-11bb7d96f6a0","source":"@none","code":"baseline-unknown"}
✔ a holder running since before the resolution is stopped once the broker releases it, land-relaunch, and the next tick starts it: landing turn first, then the message that waited (784.946481ms)
✔ a landing run that ended isn't started again for its decision, a spent decision starts nothing, and a new decision starts the holder (733.626616ms)
✔ after a restart, the new host's first tick starts a holder whose decision is still held (1104.180428ms)
✔ a refused landing start is logged once per code with its decision, isn't a start, and the next tick with room starts the holder (766.099638ms)
✔ a project clone that can't be made refuses checkout-failed, from --chief and from a session, with no run and no clone left (314.836965ms)
✔ a runner that stops at once ends its launch with the runner's reason (380.228742ms)
✔ a Claude Code launch with no session credential refuses before it starts (206.698491ms)
✔ a pi launch with no own credential refuses no-session-credential (194.63649ms)
usage: {"event":"plugin-refused","kind":"harness","name":"down","code":"missing","message":"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/harness/down is missing","kept":[]}
plugins: {"event":"plugin-refused","kind":"harness","name":"down","code":"missing","message":"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/harness/down is missing","kept":[]}
✔ row 65 a failed primary preflight launches the fallback on a fixture harness module, recording the route and the reason (395.760187ms)
✔ a runner killed from the host ends its launch as killed, not failed (404.215037ms)
✔ a missing or failing bwrap refuses sandbox-unavailable before anything starts; there is no unconfined fallback (204.482756ms)
✔ row 64 a role skill that isn't enabled refuses skill-not-enabled, and one that isn't a plain directory skill-refused, before anything starts (223.681469ms)
✔ row 213 a creative instance's persona is read from <configDir>/personas: off its digest the launch fails with the mismatch as its reason (294.218836ms)
✔ row 64 on Claude Code a role skill that isn't enabled refuses the same way, before anything starts (216.464613ms)
usage: {"event":"usage-unknown","business":"acme","run":"r4b699771c38c","instance":"chief","turn":"77969cf2-7fc8-41ff-8d52-7569e054b6f8","source":"@none","code":"baseline-unknown"}
usage: {"event":"usage-unknown","business":"acme","run":"r6e6168e49a89","instance":"coder","turn":"e6dfb039-1843-41b7-8111-7992cfddac3d","source":"@none","code":"baseline-unknown"}
✔ a real Claude Code coder's shell can't read a stand-in secret or anything else its sandbox doesn't hold (2155.647443ms)
✔ a host that died hard leaves its sessions to the next host, which kills them and ends their runs so the role can be launched again (1620.990125ms)
✔ a host that died hard leaves its sessions to the next host, which finds one already exited (23) and ends their runs so the role can be launched again (4336.758535ms)
✔ bus start --no-launch leaves an earlier host's live session alone: no signal, no end, sessions.json as it was (279.143242ms)
✔ bus start --no-launch refuses every launch: the PM launch and a session's request, each logged, nothing spawned (229.339371ms)
✔ bus start --no-launch starts no thread tick; the same host with launches runs it (1236.511266ms)
✔ a malformed sessions.json refuses the host start with exit 3 and stays as it was (212.151607ms)
✔ an over-long launch request is refused at once, not at the 10 s idle timeout (201.563393ms)
✔ a launch client that never closes its side doesn't hold the host's close (203.041695ms)
✔ a runner that ignores SIGTERM is killed when the host closes (1399.240682ms)
✔ kill switch refuses chief and hire before launch work and a clear permits a later request (362.776444ms)
✔ kill switch stops an actual managed namespace and records the halt reason without rewriting its bundle (400.610758ms)
✔ a launch waiting across halt and resume cannot use its stale admission (221.918115ms)
ℹ tests 35
ℹ suites 0
ℹ pass 35
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 30999.3545
exit=0
00:02:27Z
@@ -1,35 +0,0 @@
00:01:56Z
nice=19
✔ P3 Anthropic route uses messages at proxy root and the declared model id (11.574291ms)
✔ P3 omitted route refuses proxy-route-missing before model config generation (2.072933ms)
✔ P3 GLM route uses completions at proxy /v1 with explicit z.ai compatibility (2.699568ms)
✖ P3 GPT route selects a stack-owned provider instead of pi Codex OAuth (2.510206ms)
✔ P3 a declared Codex route refuses generation while the build-time API is PENDING (2.334352ms)
✔ P3 models file is private, references the one session key, and stores no executable values or keys (3.084202ms)
✔ P3 every launch regenerates proxy port, declared models and own key without caching (5.343868ms)
ℹ tests 7
ℹ suites 0
ℹ pass 6
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 108.561079
✖ failing tests:
test at packages/harness/tests/proxy-bundle.test.mjs:62:1
✖ P3 GPT route selects a stack-owned provider instead of pi Codex OAuth (2.510206ms)
Error: proxy GPT API is PENDING build-time evidence
at Module.bundle (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/plugins/harness/pi/index.mjs:78:62)
at buildBundle (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/src/bundle.mjs:359:23)
at build (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:20:18)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row332/packages/harness/tests/proxy-bundle.test.mjs:63:13)
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)
exit=1
00:01:56Z
@@ -1,16 +0,0 @@
packages/business/tests/launch-settings.test.mjs:41: assert.throws(()=>migrateLaunch(old,{...mapping,families:{opus:'missing',sonnet:'sonnet'}},f.file,{rolesDir:f.rolesDir}));assert.throws(()=>migrateLaunch(old,{...mapping,families:{opus:'opus',sonnet:'opus'}},f.file,{rolesDir:f.rolesDir}),/ambiguous/);assert.throws(()=>migrateLaunch(old,{...mapping,models:{...mapping.models,proxy:{provider:'proxy',route:'anthropic',model:'claude-opus-5-5'}},instances:{pm:'proxy'}},f.file,{rolesDir:f.rolesDir}),/ambiguous/);const onlyOpus=structuredClone(old);onlyOpus.launch.max={opus:4};assert.throws(()=>migrateLaunch(onlyOpus,mapping,f.file,{rolesDir:f.rolesDir}),/unknown or ambiguous/);const allOpus=structuredClone(old);for(const r of Object.values(allOpus.roles))r.vars.model='claude-opus-5-5';assert.throws(()=>migrateLaunch(allOpus,{...mapping,families:{opus:'opus',sonnet:'opus'}},f.file,{rolesDir:f.rolesDir}),/ambiguous/);assert.equal(readFileSync(f.file,'utf8'),bytes);assert.equal(statSync(f.file).mtimeMs,mtime);
packages/business/tests/launch-settings.test.mjs:45: const result=settings.set('acme',{revision:view.revision,limits:{total:0},instances:{coder:'opus'}},'jason');assert.equal(result.limits.total,0);assert.equal(result.instances.coder.modelKey,'opus');const models=structuredClone(result.models);models.opus.provider='proxy';models.opus.route='anthropic';const updated=settings.set('acme',{revision:result.revision,models},'jason');assert.equal(updated.instances.pm.provider,'proxy');assert.throws(()=>settings.set('acme',{revision:result.revision,instances:{coder:'ghost'}},'jason'));assert.throws(()=>settings.set('acme',{revision:result.revision,roles:{}},'jason'));
packages/business/tests/launch-settings.test.mjs:154: const moved={...models,[key]:{provider:'proxy',route:'anthropic',model:'claude-sonnet-5-5'}};
packages/business/tests/launch-settings.test.mjs:161: ({revision}=settings.set('acme',{revision,models:{...models,spare:{provider:'proxy',route:'anthropic',model:'claude-opus-5-5'}}},chief));
packages/business/tests/launch-settings.test.mjs:188: const sonnet={...models,sonnet:{provider:'proxy',route:'anthropic',model:'claude-sonnet-5-5'}};
packages/business/tests/launch-settings.test.mjs:198: ({revision}=settings.set('acme',{revision,models:{...models,opus:{provider:'proxy',route:'anthropic',model:'claude-opus-5-5'}}},chief));
packages/business/tests/proxy-launch.test.mjs:8: const models = { selected: { provider: 'proxy', model: 'proxy-only-id', route } };
packages/business/tests/proxy-launch.test.mjs:14: assert.throws(() => checkModels({ selected: { provider: 'proxy', model: 'proxy-only-id' } }), {
packages/business/tests/proxy-launch.test.mjs:21: assert.throws(() => checkModels({ selected: { provider: 'proxy', model: 'proxy-only-id', route } }), {
packages/cli/tests/launcher.test.mjs:155: doc.launch.models['claude-opus-5-5'] = { provider: 'proxy', model: 'claude-fixture', route: 'anthropic' };
packages/harness/tests/proxy-bundle.test.mjs:10: a: { provider: 'proxy', model: 'claude-fixture', route: 'anthropic' },
packages/harness/tests/proxy-bundle.test.mjs:11: z: { provider: 'proxy', model: 'glm-fixture', route: 'glm' },
packages/harness/tests/proxy-bundle.test.mjs:12: g: { provider: 'proxy', model: 'gpt-fixture', route: 'codex' },
packages/harness/tests/proxy-bundle.test.mjs:47: a: { provider: 'proxy', model: 'claude-fixture' },
packages/harness/tests/proxy-bundle.test.mjs:97: a: { provider: 'proxy', model: 'changed-model-id', route: 'anthropic' },
packages/harness/tests/proxy-bundle.test.mjs:98: z: { provider: 'proxy', model: 'changed-glm-id', route: 'glm' },
@@ -1,18 +0,0 @@
00:01:47Z
nice=19
✔ P3 proxy model validation preserves each explicit wire route and the proxy model id (1.21495ms)
✔ P3 a proxy model without route refuses proxy-route-missing (0.356994ms)
✔ P3 an unknown proxy route refuses proxy-route-unknown (0.767073ms)
✔ P3 nonproxy models retain their provider/model-only shape and reject route metadata (0.17626ms)
✔ P3 launch.account accepts the proxy credential source without naming host variables (0.179844ms)
✔ P3 existing environment-set accounts retain their validated representation (0.312195ms)
ℹ tests 6
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 57.913873
exit=0
00:01:47Z
@@ -1,31 +0,0 @@
packages/business/tests/launch-settings.test.mjs:41: assert.throws(()=>migrateLaunch(old,{...mapping,families:{opus:'missing',sonnet:'sonnet'}},f.file,{rolesDir:f.rolesDir}));assert.throws(()=>migrateLaunch(old,{...mapping,families:{opus:'opus',sonnet:'opus'}},f.file,{rolesDir:f.rolesDir}),/ambiguous/);assert.throws(()=>migrateLaunch(old,{...mapping,models:{...mapping.models,proxy:{provider:'proxy',route:'anthropic',model:'claude-opus-5-5'}},instances:{pm:'proxy'}},f.file,{rolesDir:f.rolesDir}),/ambiguous/);const onlyOpus=structuredClone(old);onlyOpus.launch.max={opus:4};assert.throws(()=>migrateLaunch(onlyOpus,mapping,f.file,{rolesDir:f.rolesDir}),/unknown or ambiguous/);const allOpus=structuredClone(old);for(const r of Object.values(allOpus.roles))r.vars.model='claude-opus-5-5';assert.throws(()=>migrateLaunch(allOpus,{...mapping,families:{opus:'opus',sonnet:'opus'}},f.file,{rolesDir:f.rolesDir}),/ambiguous/);assert.equal(readFileSync(f.file,'utf8'),bytes);assert.equal(statSync(f.file).mtimeMs,mtime);
packages/business/tests/launch-settings.test.mjs:45: const result=settings.set('acme',{revision:view.revision,limits:{total:0},instances:{coder:'opus'}},'jason');assert.equal(result.limits.total,0);assert.equal(result.instances.coder.modelKey,'opus');const models=structuredClone(result.models);models.opus.provider='proxy';models.opus.route='anthropic';const updated=settings.set('acme',{revision:result.revision,models},'jason');assert.equal(updated.instances.pm.provider,'proxy');assert.throws(()=>settings.set('acme',{revision:result.revision,instances:{coder:'ghost'}},'jason'));assert.throws(()=>settings.set('acme',{revision:result.revision,roles:{}},'jason'));
packages/business/tests/launch-settings.test.mjs:154: const moved={...models,[key]:{provider:'proxy',route:'anthropic',model:'claude-sonnet-5-5'}};
packages/business/tests/launch-settings.test.mjs:161: ({revision}=settings.set('acme',{revision,models:{...models,spare:{provider:'proxy',route:'anthropic',model:'claude-opus-5-5'}}},chief));
packages/business/tests/launch-settings.test.mjs:188: const sonnet={...models,sonnet:{provider:'proxy',route:'anthropic',model:'claude-sonnet-5-5'}};
packages/business/tests/launch-settings.test.mjs:198: ({revision}=settings.set('acme',{revision,models:{...models,opus:{provider:'proxy',route:'anthropic',model:'claude-opus-5-5'}}},chief));
packages/business/tests/proxy-launch.test.mjs:8: const models = { selected: { provider: 'proxy', model: 'proxy-only-id', route } };
packages/business/tests/proxy-launch.test.mjs:14: assert.throws(() => checkModels({ selected: { provider: 'proxy', model: 'proxy-only-id' } }), {
packages/business/tests/proxy-launch.test.mjs:21: assert.throws(() => checkModels({ selected: { provider: 'proxy', model: 'proxy-only-id', route } }), {
packages/business/tests/proxy-launch.test.mjs:35: assert.deepEqual(checkAccount({ name: 'proxy', credential: 'proxy' }), { name: 'proxy', credential: 'proxy' });
packages/business/tests/proxy-launch.test.mjs:43: assert.throws(() => checkAccount({ name: 'proxy', credential }), /launch\.account\.credential/);
packages/cli/tests/launcher.test.mjs:155: doc.launch.models['claude-opus-5-5'] = { provider: 'proxy', model: 'claude-fixture', route: 'anthropic' };
packages/cli/tests/model-proxy.test.mjs:11:test('proxy init agent and tester refuse before prompting or transport',async()=>{for(const args of [['proxy','init','--tester'],['proxy','init']]){const x=io(args.includes('--tester')?{}:{CODEX_THREAD_ID:'fixture'});await assert.rejects(main(args,x,{promptProxyKey:()=>{throw Error('must not prompt');}}),code('human-required'));}});
packages/cli/tests/model-proxy.test.mjs:12:test('proxy init prompts twice through no-echo seam and sends key only through human transport',async()=>{const x=io();x.stdin.isTTY=true;x.stdout.isTTY=true;const prompts=[],calls=[];await main(['proxy','init','--business','demo','--port','18432'],x,{system:fakeSystem(),promptProxyKey:async()=>{prompts.push('hidden');return 'p1-management';},transport:b=>async(verb,args)=>{calls.push({b,verb,args});return {port:18432,binary:'/fixture'};}});assert.equal(prompts.length,2);assert.deepEqual(calls,[{b:'demo',verb:'proxy.init',args:{key:'p1-management',port:18432}}]);assert.equal(x.out.text.includes('p1-management'),false);});
packages/cli/tests/model-proxy.test.mjs:13:test('proxy-key-mismatch: confirmation refuses without bus call',async()=>{const x=io();x.stdin.isTTY=true;x.stdout.isTTY=true;let count=0;await assert.rejects(main(['proxy','init','--business','demo'],x,{system:fakeSystem(),promptProxyKey:async()=>++count===1?'p1-one':'p1-two',transport:()=>()=>{throw Error('must not call');}}),code('proxy-key-mismatch'));});
packages/cli/tests/model-proxy.test.mjs:14:test('proxy-terminal-required: stdin redirection refuses',async()=>{await assert.rejects(main(['proxy','init'],io(),{system:fakeSystem()}),code('proxy-terminal-required'));});
packages/cli/tests/model-proxy.test.mjs:15:test('proxy-usage: invalid verb and repeated flags refuse',async()=>{for(const args of [['proxy','unknown'],['proxy','init','--port','18432','--port','18433']])await assert.rejects(main(args,io(),{system:fakeSystem()}),code('proxy-usage'));});
packages/cli/tests/model-proxy.test.mjs:16:test('proxy-config-invalid: port 8317 refuses before prompting',async()=>await assert.rejects(main(['proxy','init','--port','8317'],io(),{system:fakeSystem()}),code('proxy-config-invalid')));
packages/cli/tests/model-proxy.test.mjs:17:test('proxy-key-invalid: empty prompt refuses without printing input',async()=>{const x=io();x.stdin.isTTY=true;x.stdout.isTTY=true;await assert.rejects(main(['proxy','init','--business','demo'],x,{system:fakeSystem(),promptProxyKey:async()=>'',transport:()=>()=>{throw Error('must not call');}}),code('proxy-key-invalid'));});
packages/harness/tests/proxy-bundle.test.mjs:10: a: { provider: 'proxy', model: 'claude-fixture', route: 'anthropic' },
packages/harness/tests/proxy-bundle.test.mjs:11: z: { provider: 'proxy', model: 'glm-fixture', route: 'glm' },
packages/harness/tests/proxy-bundle.test.mjs:12: g: { provider: 'proxy', model: 'gpt-fixture', route: 'codex' },
packages/harness/tests/proxy-bundle.test.mjs:47: a: { provider: 'proxy', model: 'claude-fixture' },
packages/harness/tests/proxy-bundle.test.mjs:97: a: { provider: 'proxy', model: 'changed-model-id', route: 'anthropic' },
packages/harness/tests/proxy-bundle.test.mjs:98: z: { provider: 'proxy', model: 'changed-glm-id', route: 'glm' },
packages/model-proxy/tests/config-unit.test.mjs:14:test('loader proxy absent is byte-compatible; present validates sidecar and preserves config.json',()=>{const f=fixture(),before=readFileSync(f.file);let r=run(f,'scripts/mosaic-config.mjs',['validate']);assert.equal(r.status,0,r.stderr);assert.equal(Object.hasOwn(JSON.parse(r.stdout),'proxy'),false);const value=proxy(f);r=run(f,'scripts/mosaic-config.mjs',['validate']);assert.equal(r.status,0,r.stderr);assert.deepEqual(JSON.parse(r.stdout).proxy,value);assert.deepEqual(readFileSync(f.file),before);});
packages/model-proxy/tests/config-unit.test.mjs:23:test('historical no-proxy config loader works without new package dependency',()=>{const f=fixture();const copy=join(f.root,'historical/scripts');mkdirSync(copy,{recursive:true});writeFileSync(join(copy,'mosaic-config.mjs'),readFileSync(join(repo,'scripts/mosaic-config.mjs')));const r=spawnSync(process.execPath,[join(copy,'mosaic-config.mjs'),'validate'],{env:f.env,encoding:'utf8',timeout:10000});assert.equal(r.status,0,r.stderr);assert.equal(Object.hasOwn(JSON.parse(r.stdout),'proxy'),false);});
packages/model-proxy/tests/management-key-encoding.test.mjs:71: assert.deepEqual(added('data'), ['proxy', 'proxy/auth', 'proxy/config.yaml', 'proxy/logs']);
packages/model-proxy/tests/runner.test.mjs:9:test('runner verifies before spawning and supplies pinned panel and local model without ambient secrets',()=>{const {root,config,install}=fixture();const calls=[],child=new EventEmitter();startVerifiedProxy(config,{env:{HOME:join(root,'home'),MANAGEMENT_PASSWORD:'p1-management',OPENAI_API_KEY:'p1-upstream'},verify:dir=>{calls.push(['verify',dir]);return install;},spawnImpl:(...args)=>{calls.push(['spawn',...args]);return child;}});assert.equal(calls[0][0],'verify');assert.deepEqual(calls[1],['spawn',install.binary,['-config',join(config.dataRoot,'proxy/config.yaml'),'-local-model'],{cwd:join(config.dataRoot,'proxy'),stdio:'inherit',env:{HOME:join(root,'home'),PATH:'/usr/bin:/bin',MANAGEMENT_STATIC_PATH:join(root,'pin/static')}}]);});
packages/model-proxy/tests/settings.test.mjs:19:test('exclusive initialization writes private sentinel config, never rewrites config.json or exposes key',async()=>{const f=fixture();installed(f);const key='p1-management';const result=await initializeProxy({...f,pin,key});assert.ok(result.port>=1024&&result.port!==8317);assert.equal(JSON.stringify(result).includes(key),false);const conf=JSON.parse(readFileSync(join(f.dataRoot,'proxy/config.yaml'),'utf8'));assert.equal(conf.server.host,'127.0.0.1');assert.equal(conf.management['allow-remote'],false);assert.equal(conf.management['disable-auto-update-panel'],true);assert.equal(conf.routing.strategy,'fill-first');assert.equal(conf.routing.retry['request-retry'],0);assert.match(conf.access['api-keys'][0],/^msk-.*-sentinel-/);for(const file of [join(f.configDir,'secrets/proxy-management.key'),join(f.dataRoot,'proxy/config.yaml')])assert.equal(lstatSync(file).mode&0o777,0o600);for(const dir of ['proxy','proxy/auth','proxy/logs'])assert.equal(lstatSync(join(f.dataRoot,dir)).mode&0o777,0o700);assert.equal(readFileSync(join(f.configDir,'config.json'),'utf8'),'unchanged');await assert.rejects(initializeProxy({...f,pin,key}),code('proxy-already-initialized'));});
packages/model-proxy/tests/settings.test.mjs:23:test('proxy-already-initialized: each existing target is preserved and never followed',async()=>{for(const target of ['proxy','key','settings']){const f=fixture();installed(f);let file;if(target==='proxy'){file=join(f.dataRoot,'proxy');mkdirSync(file);writeFileSync(join(file,'marker'),'old');}else if(target==='key'){mkdirSync(join(f.configDir,'secrets'),{mode:0o700});file=join(f.configDir,'secrets/proxy-management.key');writeFileSync(file,'old');}else{file=join(f.configDir,'proxy.json');writeFileSync(file,'old');}await assert.rejects(initializeProxy({...f,pin,key:'p1-management'}),code('proxy-already-initialized'));assert.equal(readFileSync(target==='proxy'?join(file,'marker'):file,'utf8'),'old');}});
+193
View File
@@ -0,0 +1,193 @@
# Row214 C2-11a work record
Assignment sage-2794 at2026-10-22T16:33:20Z, Q220/mos-1301, issue#1715.
New isolated branch herb/row214 on aca16404c. The earlier197/215 worktrees
and their dirty/untracked historical packets are untouched. node_modules is
the required plain symlink to /mnt/storage/src/mosaic-stack/node_modules.
Read C2-11a in both pinned briefs. The section is unchanged at51cc0445c;
Q222 changes C2-06's reply-limit settings, not wikilinks. The editor model,
entry, view, existing model/browser/provenance tests, build/toolchain and
vendored markdown parser/serializer were read. No third_party source changes.
## Static finding and authored work
model.mjs stores a canonical sig and the raw original block, and serialise
returns raw when the sig matches. The vendored text writer escapes brackets
(to_markdown.ts:433-437). It is therefore possible for no-edit round-trips
to pass while dirty-block output escapes a wikilink. This is a source-based
hypothesis, not a measured result. Both outcomes are in DESIGN.md.
Authored, unrun: the pinned-bundle measurement; ten fixture round-trips;
three browser regressions; inert wikilink schema/tokenizer/serializer. The
schema includes headings, and front matter remains raw. The serializer
validates its spelling before bypassing escaping. HTML/entity-like targets
stay text under the existing escaping rules. No clicking or resolution.
Local static git diff --check is clean. No Node, npm, compiler, browser,
measurement, test, Docker, HTTPS Git or push has run. The queue claim waits
for a gap because scripts/mosaic invokes Node. No candidate or pass claim.
Only design/path documents may be committed before the granted red/green
checks; product, tests and measurement remain uncommitted until validated.
## Next granted steps
1. Claim from canonical during a CLEAR/gap.
2. Run measure.mjs against aca16404c's pinned Git blobs; save JSON unchanged.
3. Run the structural/edit regression alone on the baseline bundle (red).
4. Install the already-pinned esbuild0.28.2 in this worktree's packages/webui
with npm ci --ignore-scripts --no-audit --no-fund; no root install or lock edit.
5. Build with the existing editor/build.mjs, then the whole new test file and
existing editor, editor-browser and editor-provenance files, each singly.
6. Kill the serializer-removal mutant, restore, rebuild, focused green.
7. Commit only after the applicable checks, push only when Sage clears HTTPS
Git, send Filbert and Mos the candidate SHA/hash manifest directly, cc Sage.
8. After253 lands, new branch on its tip preserving all landed changes.
9. Filbert and Sage's whole webui and scripts gate finish the row.
All runs wait for explicit Sage CLEAR. Gander's row253 run5 owns the slot.
The whole suite gate and any unexpected failure use mos-0823's stop rule.
Proposed SESSIONS text for Sage's post-253 doc sweep (do not append here):
2026-10-22 | Herb (gpt-6.1-sol, f6cf4287) | row214 C2-11a editor wikilinks authoring | On herb/row214 at aca16404c, authored baseline round-trip measurement, designs for equal/unequal results, inert inline node and regression tests under sage-2794/Q220. Claim, runs and pushes held while253 owns the slot; measurement and test results unavailable.
## Filbert static design/path review accepted, R1 and R2 required
Review at2026-10-22T16:43:35Z read dee9f3d8d's packet only, no product or
runs. R1 is now in the plan: set MOSAIC_REQUIRE_EDITOR_BUILD=1 on focused
provenance and whole webui runs, grep ^# skip plus TAP/spec skip directives,
and name every skip. Missing/wrong pinned esbuild must fail, not skip.
R2: baseline no-edit roundTrips are expected to pass. They test retention
of raw bytes and are not red evidence for the node. Only the baseline
same-block structural/edit regression is expected red.
Two added fixtures cover a reference-definition collision and an atom
inside ordinary link text, taking the planned file to10 no-edit tests and
3 browser tests. The explicit & exclusion preserves the existing escaped
HTML/entity writer for dirty blocks; Q&A stays text and is a known limit.
Measurement VM setup matches loadEditor. Browser TMPDIR must use the short
non-/tmp scratch root. Sweep Node/Chromium after mutant/timeout and at clear.
All remain authored and unrun while253 owns the slot.
Filbert follow-up at2026-10-22T16:45:34Z: the authored N3 browser fixture
now explicitly asserts the separate reference-definition block ends in its
original exact bytes after the same-block edit. This test change is unrun
and uncommitted with the other product/test authoring, pending CLEAR.
## R2 restart on current refactor, sage-4164
New worktree: /home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2.
Branch herb/row214-r2, base487500a16f4ab5902c318509fdec6acc56a543ca.
Carried dee9f3d8d and e2710e92a as67ac3c25a andde42a59d4. Copied only
Herb's local model, new editor test/helper, measure.mjs and pending BUILD
note. The old worktree remains untouched. No stash or force push.
The current editor model/build/toolchain/BUILD.json/shipped bundle and
loader are identical to the old base. Entry/view and package dependencies
are unchanged. The current test fixture adds configDirectory:root; its
landed change is retained. The C2-11a brief section is unchanged. The
visual-mode condition now lives at public/bus.js:1054. No product behavior
beyond the accepted inert inline node is added by the rebase.
Row266 overlap: none. Our paths do not touch chat*.mjs, chat.js or chat.css,
and the intersection with origin/fethry/row266's actual diff is empty.
HASH-PINS.json records that ref's SHA and merge base.
Hash audit: grepped packages/*/tests for each actual/planned changed file
and filename, and scanned495 test/fixture files for literal prior SHA256
or Git-blob pins. No such pins found. Existing editor-provenance checks
read BUILD.json dynamically; regenerating it and the bundle is required.
The loader and browser/route tests use editor.js but pin no source hash.
No tests or pin asserts were weakened. The complete references and planned
generated paths are in HASH-PINS.json.
Sage-4164 explicitly permits the unrun node/tests to be committed now. This
supersedes the earlier packet's instruction to keep them uncommitted until
green. Static authoring is not a tested candidate. SOURCE.json records its
source hashes and the unbuilt generated-output status. The measurement now
pins this current execution base, not the historical accepted-doc base.
No Node, npm, measurement, compiler, test, browser, Docker or mutant has
run. Claim already succeeded at rev3234 on10-22; no new queue move is
needed. Push authorization is only herb/row214-r2. Row257's landing gate
and then266 own the slot; all execution remains held for Sage's CLEAR.
Planned focused grant: baseline measurement; the same-block structural
red; pinned npm ci/build; whole editor-wikilink.test.mjs (10 no-edit tests
with/without a final newline and3 browser tests), editor.test.mjs,
editor-browser.test.mjs and editor-provenance.test.mjs singly; one
serializer-removal mutant and restored focused green. Set
MOSAIC_REQUIRE_EDITOR_BUILD=1 for provenance and the later whole webui
gate. Capture all skip names, raw logs, short scratch TMPDIR and final
Node/Chromium process sweep. Two failures stop a gate; no rerun after an
out-of-row failure without reporting to Sage.
## Filbert R2 static B1 fixed before execution
Review at2026-10-24T17:14:55Z confirmed a defect in the authored invalid
atom path: state.text alone lacks the text-node override's HTML/entity
escaping. Factored that existing policy into escapedText and reused it for
invalid atoms. Extended the test payload/assertions to cover both <img and
&copy;. Valid atom behavior is unchanged. Excluded backticks from atom
recognition and added a text/code precedence fixture for N1.
Requested focused-grant addition: a second mutant that swaps only the
invalid-atom escapedText call for vendored state.text, dropping the <&
escape for this path. The existing malformed-attrs browser test must kill
it. The original serializer-removal mutant is still required. No runs,
checks, installation or rebuild have occurred; all remain held for CLEAR.
## Granted execution and candidate, sage-4286, 2026-10-24
Granted lane B until22:40Z. Ran on2ec3f5b5d's source in this worktree.
Every child inherited TMPDIR=/mnt/storage/scratch/tmp/g49X, obtained by
mktemp -d /mnt/storage/scratch/tmp/gXXX, never /tmp. Each command used
`nice -n "$((19 - $(nice)))" timeout -k 10 ...` with pipefail and tee;
raw logs record actual absolute nice19 and MOSAIC_REQUIRE_EDITOR_BUILD=1.
Node test concurrency was1 for each focused whole file and2 for webui.
Measurement22:07:22Z: all10 baseline forms round-trip byte for byte. The
JSON is copied unchanged to measurement.json. Adopted outcome A: no
measured file falls to Source just because of its wikilink. The atom is
proved by structure and same-block edits, not no-edit raw retention.
Baseline structural case:0/1 expected red, no atom in old shipped bundle.
Pinned npm ci --ignore-scripts --no-audit --no-fund succeeded locally in
packages/webui, then editor/build.mjs ran with esbuild0.28.2. The existing
upstream sideEffects warning for mark.ts appeared; no vendored file changed.
No package/lockfile change. Rebuild provenance ran and passed, not skipped.
| Whole file | Pass/fail | Wall seconds |
| --- | ---: | ---: |
| editor-wikilink.test.mjs | 13/0 | 2.348 |
| editor.test.mjs | 5/0 | 2.053 |
| editor-browser.test.mjs | 16/0 | 14.984 |
| editor-provenance.test.mjs | 6/0 | 0.343 |
Two mutants, each independently restored and rebuilt: serializer removal
failed the structural case0/1, restore1/0; invalid-path escapedText swapped
for vendored state.text failed malformed attrs0/1, restore1/0. The model
and generated outputs match their original good hashes after both.
Post-mutant cwd/temp-root sweep0. Both failures are expected evidence.
Full webui: exactly69 files,455/0,0 skipped/cancelled,174.189s, ended
22:12:48.880975Z. The log contains the required-build env and nice19.
Skip scan for ^# skip, TAP # SKIP and spec skipped-test lines found none,
so skip names are []. A preliminary command mistakenly selected7 files;
its28/0 in17.787s is archived as webui-whole.log and explicitly NOT used
as full gate evidence. The corrected69-file run is webui-69.log.
Final cwd/TMPDIR/argv sweep22:13:17.560692Z:0 processes. No owned Node or
Chromium remains. Removed the private TMPDIR only after that zero sweep.
Clear was sent to Sage as herb-0102 at22:13:46Z; no further execution.
Bundle SHA256 bd167899a551c70dc07e500fcdd1853d7fb710b23c217ba5b42daf5785c38a72.
CSS SHA2568654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f,
byte-identical to2ec3f5b5d. BUILD.json outputs match those hashes. Source
commit a530a60798bf48eb18bb9e225d099faf5c2975cf adds generated outputs and
an append-only phase log; packet changes follow separately. No code or
assertion changed after these results. The webui gate requirement is met
on this tree; Filbert review and every scripts/test-*.sh remain pending.
Sage re-pinned the brief to case2-rows.md blob85e6fe2e under sage-4286;
its C2-11a section is unchanged. No case1-accept file was in any run.
+168
View File
@@ -0,0 +1,168 @@
# C2-11a: an inert editor wikilink node
Base: aca16404c. Owner: Herb. Reviewer: Filbert. Issue: #1715.
Authority: sage-2794, Q220/mos-1301. The assignment permits authoring the
node and tests before the measurement slot. Runs, claim and pushes wait
for Sage's CLEAR. After row253 lands, a new branch will carry the change
onto its landing with every landed hunk retained.
## Measurement before choosing the explanation
Run agents/herb/work/queue-214/measure.mjs only on a granted slot. It loads
aca16404c's editor.js and markdown-preview.js directly from local Git
objects. It verifies the editor bundle hash against that base's BUILD.json.
It cannot accidentally measure a candidate rebuild. Its JSON records the
full baseline SHA, bundle hash, timestamp, input, output and equality for
each fixture. The first five are the brief's plain, labelled, heading,
list and front-matter cases; extra cases cover a heading block, combined
heading/label, Unicode/spacing, adjacency and an inert embed. No result is
available yet. Static reasoning is not a measurement.
Outcome A, every baseline round-trip is equal: record that wikilinks do
not trigger Source fallback for the measured inputs. Do not claim that
bug exists. The source's raw/sig cache explains why an unchanged block can
keep its bytes even when its canonical serializer escapes brackets. Add
the node for structured wikilinks and dirty-block preservation, as the
brief requests. A baseline structural/edit regression must fail even if
all unchanged-file checks pass.
Outcome B, one or more differ: record the exact differing bytes and affected
contexts. Keep the existing Source fallback fail-closed. The node restores
the required spellings where the block is structured. Retain the same
no-edit and dirty-block regressions. If the mismatch comes from a separate
block, line-ending or front-matter defect, report it before widening scope.
## Representation and conversion
The schema gains one inline atom, wikilink, with a single source attribute.
Its source is the complete spelling, not reconstructed target/label parts.
It has no href, navigation, fetch or click behavior. A span with data-source
and a text child displays the spelling. Heading content includes the new
atom; paragraphs, quotes and lists already accept inline content.
One markdown-it inline rule runs before ordinary links, after escapes and
backticks. A sticky match reads a complete single-line [[...]] or ![[...]]
without copying every suffix or crossing state.posMax. The node writer
writes its validated spelling without bracket escaping, so editing adjacent
text cannot rewrite a wikilink. Front matter remains a raw block. No new
file-read, save, routing, documentPath or target-resolution behavior is added.
The accepted atom grammar excludes brackets within the body, line breaks,
angle brackets and ampersands. This is an editor representation boundary,
not a library resolver or a refusal to open such a file. Malformed,
HTML/entity-like and code syntax stays under the existing text/raw rules.
This preserves the existing escaping of HTML/entities when a block changes.
DOM paste accepts only that same grammar. Invalid attributes constructed
programmatically are flattened to one line and escaped by the text writer.
No input string is parsed as HTML and embeds never load an image.
## Acceptance and review
The measurement JSON goes in BUILD.md and the final manifest packet.
Ten fixture round-trips run with and without a final newline. A browser
test inspects real ProseMirror atom types and attributes, edits the same
block and reparses it, for each fixture. Two more browser tests cover
code/escape/malformed/hostile syntax and DOM/programmatic-attribute safety.
Tests use the existing fixture and Chromium harness and the shipped bundle.
They do not export new production APIs just for testing.
Before rebuilding, run only the structural regression against the baseline
bundle and observe it fail. Rebuild the candidate with the exact pinned
esbuild0.28.2 binary, run the whole new test file, existing editor tests,
editor browser tests and provenance test. Remove only the wikilink serializer
handler for one mutant; the dirty-block assertion must fail. Restore, rebuild
and rerun the focused regression. All execution needs Sage's CLEAR, including
installation, checks, builds, browser tests and the measurement.
The checked-in bundle and editor/BUILD.json must be regenerated by the
existing build script. No hand edits of generated JavaScript or provenance.
The current shared esbuild is0.28.1 and the local webui install is absent.
A granted npm ci --ignore-scripts --no-audit --no-fund in packages/webui is
needed before building; the root node_modules remains its plain symlink.
No dependency or lockfile change is planned.
Final gate: Filbert approves the manifest, then the whole webui suite and
every scripts/test-*.sh on Sage's slot. Two failures stop a gate. A failure
outside this row is reported to Sage before any rerun. Source, generated
output, mode/hash manifest and raw granted logs identify the candidate.
## Static review follow-through (Filbert, 2026-10-22T16:43:35Z)
R1: the focused editor-provenance run and Sage's whole webui gate must set
MOSAIC_REQUIRE_EDITOR_BUILD=1. A missing, wrong-version or unpinned binary
then fails. Check every log for ^# skip, as well as TAP # SKIP directives
and the spec reporter's skipped-test lines; record each skipped name and
reason. A skipped rebuild is not proof of bundle reproducibility. The CSS
output must stay byte-identical and match BUILD.json.
R2: no-edit roundTrip checks are expected to pass on the baseline because
parse sets sig=canonical and an unchanged serialise returns lead+raw. Their
green result is compatibility evidence, never evidence that the atom was
needed or installed. The same-block edit/structural regression is the red
that proves the new node. The required measurement still runs and is kept.
N1: bus.js checks visual mode at949 on this base and also requires
MosaicMarkdown. The measurement uses the existing helper's bare-window VM
shape, markdown-preview.js first, then editor.js, both from pinned Git blobs.
N2: the exclusion of & and angle brackets is deliberate: the existing
text serializer escapes entities/HTML when it rewrites a block for another
renderer. An atom's verbatim writer must not bypass that rule, including
for pasted/programmatic values. This keeps those targets as ordinary text;
[[Q&A]] will still be escaped if its own block changes. It is a known
representation limit beyond the five brief cases, not a resolver change.
It is included among the text-only cases. Unedited bytes remain intact.
N3: the reference-definition fixture [[a]] with [a]: u deliberately becomes
one inert wikilink rather than a bracket around a reference link. Literal
spelling and the separate definition block remain intact.
N4: [x [[a]]](u) is an explicit fixture. The atom inherits the enclosing
ordinary link mark, whose existing target gate still applies. The atom
itself supplies no href or new click behavior; the fixture checks its
structure and spelling before/after a same-block edit.
N6: every granted browser/test process gets TMPDIR from
mktemp -d /mnt/storage/scratch/tmp/gXXX. Never /tmp. Sweep owned Chromium
and Node processes by cwd and the temp-root path after the mutant, after
any timeout, and before clearing the slot. Retain/report uncertain owners.
## R2 current-base check, sage-4164 (2026-10-24)
The execution base is now487500a16, on herb/row214-r2, not the historical
aca16404c above. The two accepted document commits were cherry-picked
cleanly. The model, build script, toolchain, BUILD.json, editor.js, view,
entry and editor test loader are byte-identical between those bases. The
current fixture's new configDirectory isolation is retained; it is not
copied from the old worktree. The visual-mode check is now bus.js:1054.
The current C2-11a brief section is unchanged. Row266's chat modules,
public/chat.js and public/chat.css are outside this row, with no overlap.
measure.mjs now pins487500a16's Git objects and BUILD.json. The baseline
bundle still lacks the atom, and the first executed structural regression
will use it before any rebuild. The required measurement, red/green, pinned
rebuild, mutant kill and full gate remain unrun and required. Runtime
validation is not inferred from the unchanged source or this static check.
Sage-4164 explicitly authorizes committing the preserved local node/tests
on the new branch before execution. The authored source commit is static
work, not a green candidate. No Node, npm, rebuild or browser starts until
Sage sends CLEAR. HASH-PINS.json records the test-tree audit and row266
intersection. The gate still requires MOSAIC_REQUIRE_EDITOR_BUILD=1, a
named skip list, whole webui and every scripts/test-*.sh.
## R2 static follow-up, Filbert B1/N1 (2026-10-24T17:14:55Z)
B1: state.text(..., true) escapes Markdown punctuation, not HTML/entities.
The invalid-atom writer now calls the same escapedText helper as ordinary
text nodes, including the <& step. Valid atoms still preserve their source
verbatim. The malformed-attribute regression now asserts both an escaped
<img and an escaped &copy;, plus flattened line breaks. A second mutant
will replace only the invalid atom's escapedText call with state.text,
leaving normal text escaping intact; this browser regression must kill it.
This additional mutant needs Sage's grant alongside the serializer-removal
mutant. No runtime result is claimed for either.
N1: backticks are excluded from the atom body, preserving code-span
precedence. The text-only fixture includes [[a`]]` and must produce no
wikilink atom. All other malformed/HTML/entity boundaries remain as before.
+572
View File
@@ -0,0 +1,572 @@
{
"grant": "sage-4286",
"candidateBeforeBuild": "2ec3f5b5ddab0cb5f2716f8164c25861b741213e",
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"measurement": {
"base": "487500a16f4ab5902c318509fdec6acc56a543ca",
"bundleSha256": "9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee",
"measuredAt": "2026-10-24T22:07:22.210Z",
"allEqual": true,
"results": [
{
"name": "plain",
"input": "[[a]]\n",
"output": "[[a]]\n",
"equal": true
},
{
"name": "labelled",
"input": "[[a|b]]\n",
"output": "[[a|b]]\n",
"equal": true
},
{
"name": "heading target",
"input": "[[a#h]]\n",
"output": "[[a#h]]\n",
"equal": true
},
{
"name": "list item",
"input": "- [[a]]\n",
"output": "- [[a]]\n",
"equal": true
},
{
"name": "next to front matter",
"input": "---\nrelated: \"[[metadata]]\"\n---\n\n[[a]]\n",
"output": "---\nrelated: \"[[metadata]]\"\n---\n\n[[a]]\n",
"equal": true
},
{
"name": "heading block and combined label",
"input": "# See [[a#h|Title]]\n",
"output": "# See [[a#h|Title]]\n",
"equal": true
},
{
"name": "spaces, Unicode and adjacent links",
"input": "See [[ H\u00e9llo there # A heading | a label ]][[next]]\n",
"output": "See [[ H\u00e9llo there # A heading | a label ]][[next]]\n",
"equal": true
},
{
"name": "reference-definition collision",
"input": "[[a]]\n\n[a]: u\n",
"output": "[[a]]\n\n[a]: u\n",
"equal": true
},
{
"name": "inside an ordinary link",
"input": "[x [[a]]](u)\n",
"output": "[x [[a]]](u)\n",
"equal": true
},
{
"name": "inert embed",
"input": "![[cover.png]]\n",
"output": "![[cover.png]]\n",
"equal": true
}
]
},
"results": [
{
"name": "measurement",
"argv": [
"node",
"agents/herb/work/queue-214/measure.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 0,
"wallSeconds": 0.093,
"counts": {},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 60,
"ended": "2026-10-24T22:07:22.215700+00:00"
},
{
"name": "baseline-red",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"--test-name-pattern=wikilinks are inline atoms and survive",
"packages/webui/tests/editor-wikilink.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 1,
"wallSeconds": 1.151,
"counts": {
"tests": 1,
"pass": 0,
"fail": 1,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 180,
"ended": "2026-10-24T22:07:27.998436+00:00"
},
{
"name": "npm-ci",
"argv": [
"npm",
"ci",
"--ignore-scripts",
"--no-audit",
"--no-fund"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui",
"rc": 0,
"wallSeconds": 0.514,
"counts": {},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 240,
"ended": "2026-10-24T22:07:41.534116+00:00"
},
{
"name": "build",
"argv": [
"node",
"editor/build.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui",
"rc": 0,
"wallSeconds": 0.108,
"counts": {},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 120,
"ended": "2026-10-24T22:07:44.654385+00:00"
},
{
"name": "wikilink-green",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"packages/webui/tests/editor-wikilink.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 0,
"wallSeconds": 2.348,
"counts": {
"tests": 13,
"pass": 13,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 180,
"ended": "2026-10-24T22:07:52.583345+00:00"
},
{
"name": "editor-green",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"packages/webui/tests/editor.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 0,
"wallSeconds": 2.053,
"counts": {
"tests": 5,
"pass": 5,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 240,
"ended": "2026-10-24T22:07:59.286086+00:00"
},
{
"name": "editor-browser-green",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"packages/webui/tests/editor-browser.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 0,
"wallSeconds": 14.984,
"counts": {
"tests": 16,
"pass": 16,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 240,
"ended": "2026-10-24T22:08:20.029050+00:00"
},
{
"name": "provenance-green",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"packages/webui/tests/editor-provenance.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 0,
"wallSeconds": 0.343,
"counts": {
"tests": 6,
"pass": 6,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 180,
"ended": "2026-10-24T22:08:39.003420+00:00"
},
{
"name": "serializer-removal-build",
"argv": [
"node",
"editor/build.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui",
"rc": 0,
"wallSeconds": 0.093,
"counts": {},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 90,
"ended": "2026-10-24T22:08:51.422097+00:00"
},
{
"name": "serializer-removal-red",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"--test-name-pattern=wikilinks are inline atoms and survive",
"packages/webui/tests/editor-wikilink.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 1,
"wallSeconds": 0.887,
"counts": {
"tests": 1,
"pass": 0,
"fail": 1,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 180,
"ended": "2026-10-24T22:08:52.340936+00:00"
},
{
"name": "serializer-removal-restore-build",
"argv": [
"node",
"editor/build.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui",
"rc": 0,
"wallSeconds": 0.115,
"counts": {},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 90,
"ended": "2026-10-24T22:08:52.498613+00:00"
},
{
"name": "serializer-removal-restore-green",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"--test-name-pattern=wikilinks are inline atoms and survive",
"packages/webui/tests/editor-wikilink.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 0,
"wallSeconds": 0.979,
"counts": {
"tests": 1,
"pass": 1,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 180,
"ended": "2026-10-24T22:08:53.514962+00:00"
},
{
"name": "invalid-escaping-build",
"argv": [
"node",
"editor/build.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui",
"rc": 0,
"wallSeconds": 0.102,
"counts": {},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 90,
"ended": "2026-10-24T22:08:53.655583+00:00"
},
{
"name": "invalid-escaping-red",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"--test-name-pattern=wikilink DOM paste accepts",
"packages/webui/tests/editor-wikilink.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 1,
"wallSeconds": 0.979,
"counts": {
"tests": 1,
"pass": 0,
"fail": 1,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 180,
"ended": "2026-10-24T22:08:54.668225+00:00"
},
{
"name": "invalid-escaping-restore-build",
"argv": [
"node",
"editor/build.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui",
"rc": 0,
"wallSeconds": 0.105,
"counts": {},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 90,
"ended": "2026-10-24T22:08:54.809629+00:00"
},
{
"name": "invalid-escaping-restore-green",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"--test-name-pattern=wikilink DOM paste accepts",
"packages/webui/tests/editor-wikilink.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 0,
"wallSeconds": 0.985,
"counts": {
"tests": 1,
"pass": 1,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 180,
"ended": "2026-10-24T22:08:55.831793+00:00"
},
{
"name": "webui-whole",
"argv": [
"node",
"--test",
"--test-concurrency=2",
"tests/agents-browser.test.mjs",
"tests/agents.test.mjs",
"tests/board-held.test.mjs",
"tests/browser-edge.test.mjs",
"tests/browser.test.mjs",
"tests/bus-browser.test.mjs",
"tests/bus.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui",
"rc": 0,
"wallSeconds": 17.787,
"counts": {
"tests": 28,
"pass": 28,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 600,
"ended": "2026-10-24T22:09:39.039897+00:00"
},
{
"name": "webui-69",
"argv": [
"node",
"--test",
"--test-concurrency=2",
"tests/agents-browser.test.mjs",
"tests/agents.test.mjs",
"tests/assistant.test.mjs",
"tests/board-held.test.mjs",
"tests/browser-edge.test.mjs",
"tests/browser.test.mjs",
"tests/bus-browser.test.mjs",
"tests/bus.test.mjs",
"tests/channel-chat.test.mjs",
"tests/chat-browser.test.mjs",
"tests/chat-instances.test.mjs",
"tests/chat-replies-browser.test.mjs",
"tests/chat-sessions-access.test.mjs",
"tests/chat.test.mjs",
"tests/conversation.test.mjs",
"tests/decide-browser.test.mjs",
"tests/decide-sso.test.mjs",
"tests/decision-http.test.mjs",
"tests/discord.test.mjs",
"tests/docs-browser.test.mjs",
"tests/editor-browser.test.mjs",
"tests/editor-provenance.test.mjs",
"tests/editor-wikilink.test.mjs",
"tests/editor.test.mjs",
"tests/granted-user.test.mjs",
"tests/history-return-flow.test.mjs",
"tests/instances-browser.test.mjs",
"tests/instances.test.mjs",
"tests/library-cli.test.mjs",
"tests/library-routes.test.mjs",
"tests/library-status.test.mjs",
"tests/limits-browser.test.mjs",
"tests/limits-route.test.mjs",
"tests/markdown-preview.test.mjs",
"tests/messages.test.mjs",
"tests/pinned-copy.test.mjs",
"tests/preview.test.mjs",
"tests/processing-browser.test.mjs",
"tests/processing-ui.test.mjs",
"tests/processing.test.mjs",
"tests/project-file.test.mjs",
"tests/project-name-repo.test.mjs",
"tests/proof-cli.test.mjs",
"tests/proof.test.mjs",
"tests/reads.test.mjs",
"tests/relaunch.test.mjs",
"tests/return-flow.test.mjs",
"tests/routes-browser.test.mjs",
"tests/routes.test.mjs",
"tests/send-browser.test.mjs",
"tests/send.test.mjs",
"tests/serve.test.mjs",
"tests/service.test.mjs",
"tests/settings-form.test.mjs",
"tests/settings-write.test.mjs",
"tests/shell.test.mjs",
"tests/sso-browser.test.mjs",
"tests/sso.test.mjs",
"tests/tester-browser.test.mjs",
"tests/tester-cli.test.mjs",
"tests/tester-listener.test.mjs",
"tests/tester-socket.test.mjs",
"tests/thread-claims-browser.test.mjs",
"tests/thread-claims.test.mjs",
"tests/thread-sharing.test.mjs",
"tests/usage-browser.test.mjs",
"tests/usage.test.mjs",
"tests/user-option-swap.test.mjs",
"tests/views.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui",
"rc": 0,
"wallSeconds": 174.189,
"counts": {
"tests": 455,
"pass": 455,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 600,
"ended": "2026-10-24T22:12:48.880975+00:00"
}
],
"mutants": [
{
"name": "serializer-removal",
"killed": true,
"restored": true,
"restoredHashesEqual": true
},
{
"name": "invalid-escaping",
"killed": true,
"restored": true,
"restoredHashesEqual": true
}
],
"skipNames": [],
"sweep": {
"at": "2026-10-24T22:13:17.560692+00:00",
"count": 0,
"processes": []
},
"generated": {
"src/public/editor.js": {
"sha256": "bd167899a551c70dc07e500fcdd1853d7fb710b23c217ba5b42daf5785c38a72",
"bytes": 759959
},
"src/public/editor.css": {
"sha256": "8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f",
"bytes": 4462
}
},
"unchangedCss": true,
"modelRestored": true,
"notes": [
"webui-whole was an accidental seven-file subset, 28/0, not gate evidence; superseded by webui-69 455/0",
"no scripts/test-*.sh ran in this grant; later gate remains pending"
],
"tmpRemoved": true
}
+323
View File
@@ -0,0 +1,323 @@
{
"base": "487500a16f4ab5902c318509fdec6acc56a543ca",
"testFilesScanned": 495,
"plannedPaths": [
"packages/webui/editor/model.mjs",
"packages/webui/tests/editor-wikilink.test.mjs",
"packages/webui/tests/helpers/wikilink-cases.mjs",
"agents/herb/work/queue-214/measure.mjs",
"agents/herb/work/queue-214/DESIGN.md",
"agents/herb/work/queue-214/MANIFEST.md",
"agents/herb/work/queue-214/BUILD.md",
"packages/webui/src/public/editor.js",
"packages/webui/editor/BUILD.json",
"agents/herb/work/queue-214/HASH-PINS.json"
],
"literalPriorBlobPins": [],
"pathReferences": [
{
"test": "packages/webui/tests/editor-wikilink.test.mjs",
"line": 6,
"text": "import { WIKILINK_CASES } from './helpers/wikilink-cases.mjs';"
},
{
"test": "packages/webui/tests/browser.test.mjs",
"line": 21,
"text": "// Rows 129, 154, 191, 194 and 294: chat.js, editor.js, processing.js, agents.js and federation.js are the scripts added, same origin; the list is the pin, so another script is a visible change."
},
{
"test": "packages/webui/tests/browser.test.mjs",
"line": 22,
"text": "assert.deepEqual(await b.evaluate('[...document.querySelectorAll(\"script\")].map(s => s.getAttribute(\"src\"))'), ['/editor.js', '/processing.js', '/federation.js', '/brand.js', '/app.js', '/markdown-preview.js', '/chat.js', '/agents.js', '/bus.js']);"
},
{
"test": "packages/webui/tests/sso.test.mjs",
"line": 1,
"text": "// Q175 phase 1 (#1690, design agents/sage/work/q175-sso/DESIGN.md section 9): the Console as an"
},
{
"test": "packages/webui/tests/user-option-swap.test.mjs",
"line": 133,
"text": "['GET', '/app.js'], ['GET', '/bus.js'], ['GET', '/agents.js'], ['GET', '/editor.js'], ['GET', '/shared/app.css'], ['GET', '/index.html'],"
},
{
"test": "packages/webui/tests/serve.test.mjs",
"line": 38,
"text": "for (const path of ['/', '/app.js', '/brand.js', '/console.css', '/live.css', '/editor.js', '/editor.css', '/shared/app.css', '/assets/fonts/manrope-400.woff2']) {"
},
{
"test": "packages/webui/tests/editor-provenance.test.mjs",
"line": 18,
"text": "const build = JSON.parse(readFileSync(join(webui, 'editor/BUILD.json'), 'utf8'));"
},
{
"test": "packages/webui/tests/editor-provenance.test.mjs",
"line": 92,
"text": "const bundle = readFileSync(join(webui, 'src/public/editor.js'), 'utf8');"
},
{
"test": "packages/webui/tests/editor-provenance.test.mjs",
"line": 167,
"text": "const info = await run(out, join(out, 'BUILD.json'));"
},
{
"test": "packages/webui/tests/editor-provenance.test.mjs",
"line": 171,
"text": "assert.equal(readFileSync(join(out, 'BUILD.json'), 'utf8'), readFileSync(join(webui, 'editor/BUILD.json'), 'utf8'));"
},
{
"test": "packages/webui/tests/editor-browser.test.mjs",
"line": 103,
"text": "assert.equal(await h.q('typeof window.MosaicEditor.mount'), 'function', 'editor.js ran under script-src self');"
},
{
"test": "packages/webui/tests/editor-browser.test.mjs",
"line": 423,
"text": "// (The editor's own reading of a file can give a single line break in a title or alt, never a blank line; see BUILD.md.)"
},
{
"test": "packages/webui/tests/granted-user.test.mjs",
"line": 231,
"text": "['GET', '/app.js'], ['GET', '/bus.js'], ['GET', '/agents.js'], ['GET', '/editor.js'], ['GET', '/shared/app.css'], ['GET', '/index.html'],"
},
{
"test": "packages/webui/tests/editor.test.mjs",
"line": 20,
"text": "for (const [path, type] of [['/editor.js', 'text/javascript'], ['/editor.css', 'text/css']]) {"
},
{
"test": "packages/webui/tests/editor.test.mjs",
"line": 29,
"text": "assert.ok(index.indexOf('src=\"/editor.js\"') < index.indexOf('src=\"/bus.js\"'), 'the editor loads before the page script, so bus.js can mount it');"
},
{
"test": "packages/webui/tests/editor.test.mjs",
"line": 60,
"text": "for (const file of ['entry.mjs', 'model.mjs', 'view.mjs']) {"
},
{
"test": "packages/webui/tests/editor.test.mjs",
"line": 64,
"text": "const bundle = readFileSync(join(webui, 'src/public/editor.js'), 'utf8');"
},
{
"test": "packages/webui/tests/editor.test.mjs",
"line": 65,
"text": "assert.doesNotMatch(bundle, /\\beval\\s*\\(|\\bnew\\s+Function\\b/, 'src/public/editor.js');"
},
{
"test": "packages/webui/tests/editor.test.mjs",
"line": 69,
"text": "const model = readFileSync(join(webui, 'editor/model.mjs'), 'utf8');"
},
{
"test": "packages/webui/tests/helpers/editor-bundle.mjs",
"line": 1,
"text": "// Loads src/public/editor.js (and markdown-preview.js, the link gate it needs) into a vm context with a"
},
{
"test": "packages/webui/tests/helpers/editor-bundle.mjs",
"line": 15,
"text": "for (const f of ['markdown-preview.js', 'editor.js']) vm.runInContext(readFileSync(join(pub, f), 'utf8'), sandbox, { filename: f });"
},
{
"test": "packages/plugins/tests/harness.test.mjs",
"line": 44,
"text": "// pi 0.85.1 --thinking and claude 2.1.302 --effort, as probed (BUILD.md); claude has no off or minimal."
},
{
"test": "packages/bus/tests/revoke-window.test.mjs",
"line": 4,
"text": "// a limit stub and a usage stub for the limit stop. BUILD.md (agents/morgana/work/queue-306) names"
},
{
"test": "packages/bus/tests/access-revoke.test.mjs",
"line": 5,
"text": "// lstat key; `edit` changes the document and the stamp together, as a hand edit does. BUILD.md"
},
{
"test": "packages/bus/tests/land.test.mjs",
"line": 410,
"text": "// landHeld still counts it, so it stays listed (BUILD.md follow-up 5)."
},
{
"test": "packages/bus/tests/session-clear.test.mjs",
"line": 13,
"text": "// docs/plans/2026-10-21_t1-sessions.md, the contract in agents/gizmoduck/work/queue-271/BUILD.md."
},
{
"test": "packages/bus/tests/grant-executor.test.mjs",
"line": 1027,
"text": "// credential-unavailable; BUILD.md records the difference)."
},
{
"test": "packages/bus/tests/host-run.test.mjs",
"line": 343,
"text": "// the options are checked here and the call runs with an alias no user file holds (BUILD.md)."
},
{
"test": "packages/business/tests/workflow-roles.test.mjs",
"line": 123,
"text": "// of staff launches it. The broker and launcher states are row 137's tests (BUILD.md, round 3)."
},
{
"test": "packages/business/tests/access.test.mjs",
"line": 1,
"text": "// FED R1 (#414, row 201): the access file loader and validator, DESIGN.md"
},
{
"test": "packages/cli/tests/revoke-window.test.mjs",
"line": 9,
"text": "// poll, with threadsState replaced by the caller. BUILD.md (agents/morgana/work/queue-306) names the"
},
{
"test": "packages/cli/tests/stack-instances.test.mjs",
"line": 3,
"text": "// T table: agents/darkwing/work/queue-190/DESIGN.md D7. The unit, port and release cases are T56 in"
},
{
"test": "packages/cli/tests/session-launch.test.mjs",
"line": 297,
"text": "// Q2 (BUILD.md:177-179, t1-sessions.md:109): an earlier host's sessionless run of the instance is"
},
{
"test": "packages/cli/tests/case1-accept.test.mjs",
"line": 2,
"text": "// (agents/darkwing/work/queue-195/DESIGN.md); deviations in agents/darkwing/work/queue-195/BUILD.md."
},
{
"test": "packages/cli/tests/stack-release.test.mjs",
"line": 4,
"text": "// agents/darkwing/work/queue-162/BUILD.md. Every run uses a temp data root, temp units and stand-in"
},
{
"test": "packages/cli/tests/stack-release.test.mjs",
"line": 915,
"text": "// COUNTED or dropped from it shows here. Row 181's BUILD.md names each writer."
},
{
"test": "packages/cli/tests/stack-release.test.mjs",
"line": 928,
"text": "task_comment_cursors:'no time column; a restore drops its advances uncounted (BUILD.md)',"
},
{
"test": "packages/cli/tests/stack-release.test.mjs",
"line": 1668,
"text": "// refusal is the guard for a file that changes after that (BUILD.md, round 2)."
},
{
"test": "packages/cli/tests/stack-release.test.mjs",
"line": 2331,
"text": "// agents/darkwing/work/queue-190/DESIGN.md. T-I1, T-I2, T-I5, T-I10 and the loader half of T-I7 are in"
},
{
"test": "packages/cli/tests/publish-socket.test.mjs",
"line": 236,
"text": "// sage-1440 on BUILD.md 14: a push between checkPublish and the git push refuses, with one code"
},
{
"test": "packages/cli/tests/stack-upgrade.test.mjs",
"line": 3,
"text": "// agents/darkwing/work/queue-195/DESIGN.md, as the I3 brief changes them; deviations:"
},
{
"test": "packages/cli/tests/stack-upgrade.test.mjs",
"line": 4,
"text": "// agents/darkwing/work/queue-233/BUILD.md. The stand-ins and the module fixture are"
},
{
"test": "packages/cli/tests/stack-release-external.test.mjs",
"line": 2,
"text": "// test list, agents/darkwing/work/queue-195/DESIGN.md; deviations: agents/darkwing/work/queue-232/BUILD.md."
},
{
"test": "packages/cli/tests/case1-hostcheck.test.mjs",
"line": 3,
"text": "// (agents/darkwing/work/queue-195/DESIGN.md at b7239bb66). Every case copies the script into a scratch"
},
{
"test": "packages/cli/tests/thread-revoke.test.mjs",
"line": 5,
"text": "// The bus half is packages/bus/tests/access-revoke.test.mjs; BUILD.md"
},
{
"test": "packages/cli/tests/access.test.mjs",
"line": 308,
"text": "// outside R5 (BUILD.md). The test pins it, and nothing is written."
},
{
"test": "packages/cli/tests/access.test.mjs",
"line": 316,
"text": "// Row 193c (#1705): `user add` and `user remove`. BUILD.md (agents/megavolt/work/queue-207) names"
},
{
"test": "packages/cli/tests/access.test.mjs",
"line": 455,
"text": "// refuses access.reload alone, as a bus would refuse a call it can't take. BUILD.md"
},
{
"test": "packages/cli/tests/launcher.test.mjs",
"line": 799,
"text": "// The run directory exists by then (BUILD.md residual); the persona is read before any bundle file."
},
{
"test": "packages/cli/tests/lifecycle.test.mjs",
"line": 778,
"text": "// N6 (sage-2246, DESIGN.md:118-120): an end signals the runs the verb named and the instance's runs"
}
],
"row266": {
"ref": "origin/fethry/row266",
"tip": "6418ec063389728e0d8883c94812b12d2074eb43",
"diffBase": "487500a16f4ab5902c318509fdec6acc56a543ca",
"overlap": []
},
"interpretation": "No literal SHA256 or Git-blob hash pins found for planned changed files. Editor provenance compares generated output to BUILD.json and requires regeneration/rebuild, not an external fixed hash.",
"postBuildAudit": {
"paths": [
"BUILD-LOG.md",
"agents/herb/work/queue-214/BUILD.md",
"agents/herb/work/queue-214/DESIGN.md",
"agents/herb/work/queue-214/EVIDENCE.json",
"agents/herb/work/queue-214/HASH-PINS.json",
"agents/herb/work/queue-214/MANIFEST.md",
"agents/herb/work/queue-214/SOURCE.json",
"agents/herb/work/queue-214/granted-4286/baseline-red.log",
"agents/herb/work/queue-214/granted-4286/build.log",
"agents/herb/work/queue-214/granted-4286/editor-browser-green.log",
"agents/herb/work/queue-214/granted-4286/editor-green.log",
"agents/herb/work/queue-214/granted-4286/final-sweep.json",
"agents/herb/work/queue-214/granted-4286/invalid-escaping-build.log",
"agents/herb/work/queue-214/granted-4286/invalid-escaping-red.log",
"agents/herb/work/queue-214/granted-4286/invalid-escaping-restore-build.log",
"agents/herb/work/queue-214/granted-4286/invalid-escaping-restore-green.log",
"agents/herb/work/queue-214/granted-4286/measurement.log",
"agents/herb/work/queue-214/granted-4286/mutants.json",
"agents/herb/work/queue-214/granted-4286/mutants.py",
"agents/herb/work/queue-214/granted-4286/npm-ci.log",
"agents/herb/work/queue-214/granted-4286/post-mutant-sweep.json",
"agents/herb/work/queue-214/granted-4286/provenance-green.log",
"agents/herb/work/queue-214/granted-4286/results.jsonl",
"agents/herb/work/queue-214/granted-4286/serializer-removal-build.log",
"agents/herb/work/queue-214/granted-4286/serializer-removal-red.log",
"agents/herb/work/queue-214/granted-4286/serializer-removal-restore-build.log",
"agents/herb/work/queue-214/granted-4286/serializer-removal-restore-green.log",
"agents/herb/work/queue-214/granted-4286/settings.json",
"agents/herb/work/queue-214/granted-4286/skips.json",
"agents/herb/work/queue-214/granted-4286/step.py",
"agents/herb/work/queue-214/granted-4286/webui-69.log",
"agents/herb/work/queue-214/granted-4286/webui-files.txt",
"agents/herb/work/queue-214/granted-4286/webui-whole.log",
"agents/herb/work/queue-214/granted-4286/wikilink-green.log",
"agents/herb/work/queue-214/measure.mjs",
"agents/herb/work/queue-214/measurement.json",
"packages/webui/editor/BUILD.json",
"packages/webui/editor/model.mjs",
"packages/webui/src/public/editor.js",
"packages/webui/tests/editor-wikilink.test.mjs",
"packages/webui/tests/helpers/wikilink-cases.mjs"
],
"literalCurrentOrPriorHashPins": [],
"buildOutputsValidated": true
}
}
+42
View File
@@ -0,0 +1,42 @@
# Row214 candidate manifest
Owner: Herb. Reviewer: Filbert. Issue#1715, C2-11a. Execution base
487500a16f4ab5902c318509fdec6acc56a543ca on herb/row214-r2. Current
brief blob85e6fe2e has the same C2-11a section as the accepted old pin.
Source commit a530a60798bf48eb18bb9e225d099faf5c2975cf.
| Path | Final change |
| --- | --- |
| packages/webui/editor/model.mjs | inert inline atom, heading content, tokenizer and validated serializer; invalid attrs share complete text escaping |
| packages/webui/tests/editor-wikilink.test.mjs | ten byte round-trips and three browser regressions, including same-block edits and malformed attrs |
| packages/webui/tests/helpers/wikilink-cases.mjs | exact fixtures shared with measurement |
| packages/webui/src/public/editor.js | generated with pinned esbuild0.28.2 |
| packages/webui/editor/BUILD.json | generated provenance and output hashes |
| BUILD-LOG.md | one append-only phase receipt |
| agents/herb/work/queue-214/measure.mjs | baseline measurement from pinned Git blobs |
| agents/herb/work/queue-214/measurement.json | unchanged measurement JSON,10/10 equal |
| agents/herb/work/queue-214/DESIGN.md | accepted design, both outcomes and static review follow-through |
| agents/herb/work/queue-214/BUILD.md | rulings, actual granted commands, timings and limits |
| agents/herb/work/queue-214/HASH-PINS.json | static hash-pin/row266 audit, repeated after build |
| agents/herb/work/queue-214/SOURCE.json | actual source/output hashes and unchanged CSS dependency |
| agents/herb/work/queue-214/EVIDENCE.json | grant, exact argv/counts, measurement, mutants, skips and sweeps |
| agents/herb/work/queue-214/granted-4286/ | raw tee logs, commands, file list and sweep/skip/mutant records |
The CSS output is byte-identical and matches BUILD.json. No entry/view,
third_party, dependency/lockfile, library, route, save, click or documentPath
change. No row266 chat path changes. No test assertion changed after runs.
Outcome A: all ten measured no-edit cases were already preserved by the
baseline's raw/sig behavior. Their green result is compatibility evidence,
not proof of the node. The baseline structural case was0/1 expected red.
Grant sage-4286: four whole editor files40/0; whole webui69 files455/0
in174.189s; zero skips/cancellations. Both named mutants killed0/1,
each restored/rebuilt and focused1/0 green. Absolute nice19, required-build
env and short scratch TMPDIR are in raw logs. Provenance rebuilt, not
skipped. Final process sweep0, TMPDIR removed. The mistaken seven-file
subset28/0 is archived but excluded from gate evidence.
The candidate hash manifest is rebuilt from the pushed tip outside its
own path set. Filbert's candidate review and every scripts/test-*.sh gate
remain pending. No Case1 acceptance test was run. The row is not done.
+49
View File
@@ -0,0 +1,49 @@
{
"base": "487500a16f4ab5902c318509fdec6acc56a543ca",
"status": "focused and 69-file webui green under sage-4286; candidate review and shell gate pending",
"sourcePaths": [
{
"path": "packages/webui/editor/model.mjs",
"mode": "100644",
"sha256": "81ac44d852cb54213a9644ebbde26630ec49614e468f376d71b471395e3dd9f7"
},
{
"path": "packages/webui/tests/editor-wikilink.test.mjs",
"mode": "100644",
"sha256": "e144e7dbf23c68c136eef8f0fb2e8979c27e908c7cc14ee4ab4f722220e67d77"
},
{
"path": "packages/webui/tests/helpers/wikilink-cases.mjs",
"mode": "100644",
"sha256": "afa4dc7188548457b2d1966b9437561ba411d7bc9aaaa38bff626c235a64e19c"
},
{
"path": "agents/herb/work/queue-214/measure.mjs",
"mode": "100644",
"sha256": "f81987cdae5c4f7e5ce353162674b3c3510e44f22d6d3beb262a5d198db4e88d"
},
{
"path": "packages/webui/src/public/editor.js",
"mode": "100644",
"sha256": "bd167899a551c70dc07e500fcdd1853d7fb710b23c217ba5b42daf5785c38a72"
},
{
"path": "packages/webui/editor/BUILD.json",
"mode": "100644",
"sha256": "4d73af728cea60eaa6fadb4650b9d42b663c90ef7f59bb2b787e1f3d9acd8278"
},
{
"path": "BUILD-LOG.md",
"mode": "100644",
"sha256": "30cc179e2b76c5aceeec35d5ab20339988241a4cb04d26d1cc9b2a5437796236"
}
],
"pendingGeneratedPaths": [],
"unchangedGeneratedCss": {
"path": "packages/webui/src/public/editor.css",
"sha256": "8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f",
"mode": "100644"
},
"runtimeEvidence": "agents/herb/work/queue-214/EVIDENCE.json",
"sourceCommit": "a530a60798bf48eb18bb9e225d099faf5c2975cf"
}
@@ -0,0 +1,38 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✖ wikilinks are inline atoms and survive a neighbouring edit in every required context (932.607342ms)
ℹ tests 1
ℹ suites 0
ℹ pass 0
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1108.548729
✖ failing tests:
test at packages/webui/tests/editor-wikilink.test.mjs:35:1
✖ wikilinks are inline atoms and survive a neighbouring edit in every required context (932.607342ms)
AssertionError [ERR_ASSERTION]: plain
+ actual - expected
+ []
- [
- {
- atom: true,
- inline: true,
- source: '[[a]]'
- }
- ]
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui/tests/editor-wikilink.test.mjs:39:12)
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: [],
expected: [ { source: '[[a]]', atom: true, inline: true } ],
operator: 'deepStrictEqual',
diff: 'simple'
}
@@ -0,0 +1,15 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
editor.js bd167899a551c70dc07e500fcdd1853d7fb710b23c217ba5b42daf5785c38a72 (133 inputs)
editor.css 8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f
@@ -0,0 +1,25 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (928.130513ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (803.464018ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (635.018754ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2555.185634ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (1077.608366ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (2053.81983ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (761.717564ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (677.209658ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (681.501055ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (664.552078ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (653.763504ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (680.145608ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (681.870693ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (686.810545ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (631.067849ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (631.071266ms)
ℹ tests 16
ℹ suites 0
ℹ pass 16
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 14945.374491
@@ -0,0 +1,14 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✔ the editor routes serve the built files with their types and no cache (36.796766ms)
✔ open and save with no edit writes the same bytes: the goals review and a doc with every element (16.912796ms)
✔ open and save with no edit writes the same bytes: every repository doc under docs/ and spec/ (1791.779235ms)
✔ the editor source builds markup only with DOM calls, and the bundle has no eval (2.568423ms)
✔ the link gate and the image rule are the preview's (0.573105ms)
ℹ tests 5
ℹ suites 0
ℹ pass 5
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 2016.291596
@@ -0,0 +1,5 @@
{
"at": "2026-10-24T22:13:17.560692+00:00",
"count": 0,
"processes": []
}
@@ -0,0 +1,15 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
editor.js 52c00310b3c32b2f5ca99243f9bbe54f8a76ef0a87f597d8a2220cf1baaa8adc (133 inputs)
editor.css 8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f
@@ -0,0 +1,30 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✖ wikilink DOM paste accepts only bounded single-line inert syntax; malformed attrs serialise as escaped text (780.97333ms)
ℹ tests 1
ℹ suites 0
ℹ pass 0
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 939.392901
✖ failing tests:
test at packages/webui/tests/editor-wikilink.test.mjs:65:1
✖ wikilink DOM paste accepts only bounded single-line inert syntax; malformed attrs serialise as escaped text (780.97333ms)
AssertionError [ERR_ASSERTION]: The input was expected to not match the regular expression /(?<!\\)<img/. Input:
'\\[\\[a\\]\\] <img src=x onerror=alert(1)>&copy;\n'
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui/tests/editor-wikilink.test.mjs:78: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: true,
code: 'ERR_ASSERTION',
actual: '\\[\\[a\\]\\] <img src=x onerror=alert(1)>&copy;\n',
expected: /(?<!\\)<img/,
operator: 'doesNotMatch',
diff: 'simple'
}
@@ -0,0 +1,15 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
editor.js bd167899a551c70dc07e500fcdd1853d7fb710b23c217ba5b42daf5785c38a72 (133 inputs)
editor.css 8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f
@@ -0,0 +1,10 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✔ wikilink DOM paste accepts only bounded single-line inert syntax; malformed attrs serialise as escaped text (752.4905ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 941.178679
@@ -0,0 +1,68 @@
{
"base": "487500a16f4ab5902c318509fdec6acc56a543ca",
"bundleSha256": "9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee",
"measuredAt": "2026-10-24T22:07:22.210Z",
"allEqual": true,
"results": [
{
"name": "plain",
"input": "[[a]]\n",
"output": "[[a]]\n",
"equal": true
},
{
"name": "labelled",
"input": "[[a|b]]\n",
"output": "[[a|b]]\n",
"equal": true
},
{
"name": "heading target",
"input": "[[a#h]]\n",
"output": "[[a#h]]\n",
"equal": true
},
{
"name": "list item",
"input": "- [[a]]\n",
"output": "- [[a]]\n",
"equal": true
},
{
"name": "next to front matter",
"input": "---\nrelated: \"[[metadata]]\"\n---\n\n[[a]]\n",
"output": "---\nrelated: \"[[metadata]]\"\n---\n\n[[a]]\n",
"equal": true
},
{
"name": "heading block and combined label",
"input": "# See [[a#h|Title]]\n",
"output": "# See [[a#h|Title]]\n",
"equal": true
},
{
"name": "spaces, Unicode and adjacent links",
"input": "See [[ Héllo there # A heading | a label ]][[next]]\n",
"output": "See [[ Héllo there # A heading | a label ]][[next]]\n",
"equal": true
},
{
"name": "reference-definition collision",
"input": "[[a]]\n\n[a]: u\n",
"output": "[[a]]\n\n[a]: u\n",
"equal": true
},
{
"name": "inside an ordinary link",
"input": "[x [[a]]](u)\n",
"output": "[x [[a]]](u)\n",
"equal": true
},
{
"name": "inert embed",
"input": "![[cover.png]]\n",
"output": "![[cover.png]]\n",
"equal": true
}
]
}
@@ -0,0 +1,14 @@
[
{
"name": "serializer-removal",
"killed": true,
"restored": true,
"restoredHashesEqual": true
},
{
"name": "invalid-escaping",
"killed": true,
"restored": true,
"restoredHashesEqual": true
}
]
@@ -0,0 +1,26 @@
from pathlib import Path
import subprocess,sys,json,hashlib
out=Path(__file__).parent;root=Path('/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2');model=root/'packages/webui/editor/model.mjs';good=model.read_bytes();(out/'model.good.mjs').write_bytes(good)
initial={str(p.relative_to(root)):hashlib.sha256(p.read_bytes()).hexdigest() for p in [model,root/'packages/webui/src/public/editor.js',root/'packages/webui/editor/BUILD.json',root/'packages/webui/src/public/editor.css']}
def step(name,cwd,cap,args):return subprocess.run([sys.executable,str(out/'step.py'),name,str(cwd),str(cap),*args]).returncode
specs=[('serializer-removal','wikilinks are inline atoms and survive'),('invalid-escaping','wikilink DOM paste accepts')]
results=[]
for name,pattern in specs:
changed=good.decode()
if name=='serializer-removal':
start=changed.index(' wikilink(state, node) {');end=changed.index(' raw_block(state, node)',start);changed=changed[:start]+changed[end:]
else:
old="else escapedText(state, oneLine(String(source ?? '')));";assert changed.count(old)==1;changed=changed.replace(old,"else state.text(oneLine(String(source ?? '')));")
try:
model.write_text(changed)
assert step(name+'-build',root/'packages/webui',90,['node','editor/build.mjs'])==0
rc=step(name+'-red',root,180,['node','--test','--test-concurrency=1','--test-name-pattern='+pattern,'packages/webui/tests/editor-wikilink.test.mjs'])
if rc!=1:raise RuntimeError('mutant not killed or timed out: '+str(rc))
finally:
model.write_bytes(good)
if step(name+'-restore-build',root/'packages/webui',90,['node','editor/build.mjs'])!=0:raise RuntimeError('restore build failed')
assert step(name+'-restore-green',root,180,['node','--test','--test-concurrency=1','--test-name-pattern='+pattern,'packages/webui/tests/editor-wikilink.test.mjs'])==0
for p,h in initial.items():assert hashlib.sha256((root/p).read_bytes()).hexdigest()==h,p
results.append({'name':name,'killed':True,'restored':True,'restoredHashesEqual':True})
(out/'mutants.json').write_text(json.dumps(results,indent=2)+'\n')
print('MUTANT_COMPLETE',name,flush=True)
@@ -0,0 +1,3 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
added 2 packages in 425ms
@@ -0,0 +1,4 @@
{
"count": 0,
"processes": []
}
@@ -0,0 +1,27 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✔ the imported source is the tagged upstream source plus the recorded local changes, and nothing else (27.800323ms)
✔ every package names its origin and license, and NOTICE lists each (0.831005ms)
✔ the build reads only imported source and the editor's own files; the bundle is the recorded build (7.478515ms)
✔ MOSAIC_REQUIRE_EDITOR_BUILD: a missing or wrong esbuild skips without it and fails with it; a wrong binary always fails (6.189875ms)
✔ the toolchain check, run as a program, exits non-zero without esbuild when the build is required (143.672155ms)
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
✔ rebuilding from the source gives the same bytes (needs the pinned esbuild; MOSAIC_REQUIRE_EDITOR_BUILD=1 makes its absence a failure) (67.600627ms)
ℹ tests 6
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 305.965249
@@ -0,0 +1,18 @@
{"name": "measurement", "argv": ["node", "agents/herb/work/queue-214/measure.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 0, "wallSeconds": 0.093, "counts": {}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 60, "ended": "2026-10-24T22:07:22.215700+00:00"}
{"name": "baseline-red", "argv": ["node", "--test", "--test-concurrency=1", "--test-name-pattern=wikilinks are inline atoms and survive", "packages/webui/tests/editor-wikilink.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 1, "wallSeconds": 1.151, "counts": {"tests": 1, "pass": 0, "fail": 1, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 180, "ended": "2026-10-24T22:07:27.998436+00:00"}
{"name": "npm-ci", "argv": ["npm", "ci", "--ignore-scripts", "--no-audit", "--no-fund"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui", "rc": 0, "wallSeconds": 0.514, "counts": {}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 240, "ended": "2026-10-24T22:07:41.534116+00:00"}
{"name": "build", "argv": ["node", "editor/build.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui", "rc": 0, "wallSeconds": 0.108, "counts": {}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 120, "ended": "2026-10-24T22:07:44.654385+00:00"}
{"name": "wikilink-green", "argv": ["node", "--test", "--test-concurrency=1", "packages/webui/tests/editor-wikilink.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 0, "wallSeconds": 2.348, "counts": {"tests": 13, "pass": 13, "fail": 0, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 180, "ended": "2026-10-24T22:07:52.583345+00:00"}
{"name": "editor-green", "argv": ["node", "--test", "--test-concurrency=1", "packages/webui/tests/editor.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 0, "wallSeconds": 2.053, "counts": {"tests": 5, "pass": 5, "fail": 0, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 240, "ended": "2026-10-24T22:07:59.286086+00:00"}
{"name": "editor-browser-green", "argv": ["node", "--test", "--test-concurrency=1", "packages/webui/tests/editor-browser.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 0, "wallSeconds": 14.984, "counts": {"tests": 16, "pass": 16, "fail": 0, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 240, "ended": "2026-10-24T22:08:20.029050+00:00"}
{"name": "provenance-green", "argv": ["node", "--test", "--test-concurrency=1", "packages/webui/tests/editor-provenance.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 0, "wallSeconds": 0.343, "counts": {"tests": 6, "pass": 6, "fail": 0, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 180, "ended": "2026-10-24T22:08:39.003420+00:00"}
{"name": "serializer-removal-build", "argv": ["node", "editor/build.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui", "rc": 0, "wallSeconds": 0.093, "counts": {}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 90, "ended": "2026-10-24T22:08:51.422097+00:00"}
{"name": "serializer-removal-red", "argv": ["node", "--test", "--test-concurrency=1", "--test-name-pattern=wikilinks are inline atoms and survive", "packages/webui/tests/editor-wikilink.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 1, "wallSeconds": 0.887, "counts": {"tests": 1, "pass": 0, "fail": 1, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 180, "ended": "2026-10-24T22:08:52.340936+00:00"}
{"name": "serializer-removal-restore-build", "argv": ["node", "editor/build.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui", "rc": 0, "wallSeconds": 0.115, "counts": {}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 90, "ended": "2026-10-24T22:08:52.498613+00:00"}
{"name": "serializer-removal-restore-green", "argv": ["node", "--test", "--test-concurrency=1", "--test-name-pattern=wikilinks are inline atoms and survive", "packages/webui/tests/editor-wikilink.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 0, "wallSeconds": 0.979, "counts": {"tests": 1, "pass": 1, "fail": 0, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 180, "ended": "2026-10-24T22:08:53.514962+00:00"}
{"name": "invalid-escaping-build", "argv": ["node", "editor/build.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui", "rc": 0, "wallSeconds": 0.102, "counts": {}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 90, "ended": "2026-10-24T22:08:53.655583+00:00"}
{"name": "invalid-escaping-red", "argv": ["node", "--test", "--test-concurrency=1", "--test-name-pattern=wikilink DOM paste accepts", "packages/webui/tests/editor-wikilink.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 1, "wallSeconds": 0.979, "counts": {"tests": 1, "pass": 0, "fail": 1, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 180, "ended": "2026-10-24T22:08:54.668225+00:00"}
{"name": "invalid-escaping-restore-build", "argv": ["node", "editor/build.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui", "rc": 0, "wallSeconds": 0.105, "counts": {}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 90, "ended": "2026-10-24T22:08:54.809629+00:00"}
{"name": "invalid-escaping-restore-green", "argv": ["node", "--test", "--test-concurrency=1", "--test-name-pattern=wikilink DOM paste accepts", "packages/webui/tests/editor-wikilink.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 0, "wallSeconds": 0.985, "counts": {"tests": 1, "pass": 1, "fail": 0, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 180, "ended": "2026-10-24T22:08:55.831793+00:00"}
{"name": "webui-whole", "argv": ["node", "--test", "--test-concurrency=2", "tests/agents-browser.test.mjs", "tests/agents.test.mjs", "tests/board-held.test.mjs", "tests/browser-edge.test.mjs", "tests/browser.test.mjs", "tests/bus-browser.test.mjs", "tests/bus.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui", "rc": 0, "wallSeconds": 17.787, "counts": {"tests": 28, "pass": 28, "fail": 0, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 600, "ended": "2026-10-24T22:09:39.039897+00:00"}
{"name": "webui-69", "argv": ["node", "--test", "--test-concurrency=2", "tests/agents-browser.test.mjs", "tests/agents.test.mjs", "tests/assistant.test.mjs", "tests/board-held.test.mjs", "tests/browser-edge.test.mjs", "tests/browser.test.mjs", "tests/bus-browser.test.mjs", "tests/bus.test.mjs", "tests/channel-chat.test.mjs", "tests/chat-browser.test.mjs", "tests/chat-instances.test.mjs", "tests/chat-replies-browser.test.mjs", "tests/chat-sessions-access.test.mjs", "tests/chat.test.mjs", "tests/conversation.test.mjs", "tests/decide-browser.test.mjs", "tests/decide-sso.test.mjs", "tests/decision-http.test.mjs", "tests/discord.test.mjs", "tests/docs-browser.test.mjs", "tests/editor-browser.test.mjs", "tests/editor-provenance.test.mjs", "tests/editor-wikilink.test.mjs", "tests/editor.test.mjs", "tests/granted-user.test.mjs", "tests/history-return-flow.test.mjs", "tests/instances-browser.test.mjs", "tests/instances.test.mjs", "tests/library-cli.test.mjs", "tests/library-routes.test.mjs", "tests/library-status.test.mjs", "tests/limits-browser.test.mjs", "tests/limits-route.test.mjs", "tests/markdown-preview.test.mjs", "tests/messages.test.mjs", "tests/pinned-copy.test.mjs", "tests/preview.test.mjs", "tests/processing-browser.test.mjs", "tests/processing-ui.test.mjs", "tests/processing.test.mjs", "tests/project-file.test.mjs", "tests/project-name-repo.test.mjs", "tests/proof-cli.test.mjs", "tests/proof.test.mjs", "tests/reads.test.mjs", "tests/relaunch.test.mjs", "tests/return-flow.test.mjs", "tests/routes-browser.test.mjs", "tests/routes.test.mjs", "tests/send-browser.test.mjs", "tests/send.test.mjs", "tests/serve.test.mjs", "tests/service.test.mjs", "tests/settings-form.test.mjs", "tests/settings-write.test.mjs", "tests/shell.test.mjs", "tests/sso-browser.test.mjs", "tests/sso.test.mjs", "tests/tester-browser.test.mjs", "tests/tester-cli.test.mjs", "tests/tester-listener.test.mjs", "tests/tester-socket.test.mjs", "tests/thread-claims-browser.test.mjs", "tests/thread-claims.test.mjs", "tests/thread-sharing.test.mjs", "tests/usage-browser.test.mjs", "tests/usage.test.mjs", "tests/user-option-swap.test.mjs", "tests/views.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui", "rc": 0, "wallSeconds": 174.189, "counts": {"tests": 455, "pass": 455, "fail": 0, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 600, "ended": "2026-10-24T22:12:48.880975+00:00"}
@@ -0,0 +1,15 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
editor.js bf55e22b945eda1e51ecbe9185eadd9ff21a7902713b24417ed7d697c7347bba (133 inputs)
editor.css 8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f
@@ -0,0 +1,31 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✖ wikilinks are inline atoms and survive a neighbouring edit in every required context (698.378144ms)
ℹ tests 1
ℹ suites 0
ℹ pass 0
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 850.87157
✖ failing tests:
test at packages/webui/tests/editor-wikilink.test.mjs:35:1
✖ wikilinks are inline atoms and survive a neighbouring edit in every required context (698.378144ms)
Error: Uncaught: Error: Token type `wikilink` not supported by Markdown renderer
at MarkdownSerializerState.render (http://127.0.0.1:43723/editor.js:18015:17)
at progress (http://127.0.0.1:43723/editor.js:18096:18)
at _Fragment.forEach (http://127.0.0.1:43723/editor.js:484:9)
at _Node.forEach (http://127.0.0.1:43723/editor.js:1178:20)
at MarkdownSerializerState.renderInline (http://127.0.0.1:43723/editor.js:18101:14)
at Object.paragraph (http://127.0.0.1:43723/editor.js:17859:13)
at MarkdownSerializerState.render (http://127.0.0.1:43723/editor.js:18012:35)
at http://127.0.0.1:43723/editor.js:18025:44
at _Fragment.forEach (http://127.0.0.1:43723/editor.js:484:9)
at _Node.forEach (http://127.0.0.1:43723/editor.js:1178:20)
at Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui/tests/browser.mjs:49:35)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui/tests/editor-wikilink.test.mjs:38:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
@@ -0,0 +1,15 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
editor.js bd167899a551c70dc07e500fcdd1853d7fb710b23c217ba5b42daf5785c38a72 (133 inputs)
editor.css 8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f
@@ -0,0 +1,10 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✔ wikilinks are inline atoms and survive a neighbouring edit in every required context (782.721982ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 940.955124
@@ -0,0 +1,6 @@
{
"root": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"tmp": "/mnt/storage/scratch/tmp/g49X",
"grant": "sage-4286",
"candidate": "2ec3f5b5ddab0cb5f2716f8164c25861b741213e"
}
@@ -0,0 +1,4 @@
{
"grep": "^# skip plus # SKIP and spec skipped-test lines",
"names": []
}
@@ -0,0 +1,19 @@
import os,sys,subprocess,pathlib,json,time,datetime,shlex,re
out=pathlib.Path(__file__).parent;s=json.loads((out/'settings.json').read_text());name=sys.argv[1];cwd=sys.argv[2];cap=int(sys.argv[3]);argv=sys.argv[4:]
left=datetime.datetime(2026,10,24,22,40,tzinfo=datetime.timezone.utc).timestamp()-time.time()-20
if left<15:raise SystemExit('hard-stop cleanup margin reached')
limit=min(cap,int(left));env=os.environ.copy();env.pop('NODE_TEST_CONTEXT',None)
env.update(TMPDIR=s['tmp'],TMP=s['tmp'],TEMP=s['tmp'],MOSAIC_REQUIRE_EDITOR_BUILD='1',MOSAIC_GATE_LANE='b',MOSAIC_GATE_STATE='/mnt/storage/scratch/mosaic-gate-lanes',NO_COLOR='1',MOSAIC_CONFIG=s['tmp']+'/missing-config.json',XDG_CACHE_HOME=s['tmp']+'/cache',JITI_FS_CACHE=s['tmp']+'/jiti')
header='' if name=='measurement' else 'printf "# grant sage-4286; nice %s; TMPDIR %s; MOSAIC_REQUIRE_EDITOR_BUILD %s\\n" "$(nice)" "$TMPDIR" "$MOSAIC_REQUIRE_EDITOR_BUILD"; '
inner=header+'exec "$@"'
log=out/(name+'.log');command='nice -n "$((19 - $(nice)))" timeout -k 10 '+str(limit)+' bash -c '+shlex.quote(inner)+' gate-run '+shlex.join(argv)+' 2>&1 | tee '+shlex.quote(str(log))
begin=time.time();print('START',name,datetime.datetime.now(datetime.timezone.utc).isoformat(),flush=True)
r=subprocess.run(['bash','-o','pipefail','-c',command],cwd=cwd,env=env,stdout=subprocess.DEVNULL)
text=log.read_text();counts={}
for key in ['tests','pass','fail','cancelled','skipped']:
hits=re.findall(r'^[ℹ#] '+key+r' (\d+)',text,re.M)
if hits:counts[key]=int(hits[-1])
record={'name':name,'argv':argv,'cwd':cwd,'rc':r.returncode,'wallSeconds':round(time.time()-begin,3),'counts':counts,'nice':19,'tmpRoot':s['tmp'],'requireEditorBuild':'1','timeoutSeconds':limit,'ended':datetime.datetime.now(datetime.timezone.utc).isoformat()}
with (out/'results.jsonl').open('a') as f:f.write(json.dumps(record)+'\n')
print(json.dumps(record),flush=True);print('\n'.join(text.splitlines()[-20:]),flush=True)
raise SystemExit(r.returncode)
@@ -0,0 +1,489 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✔ row 194 T16 Settings Agents: unavailable read-only, launch follows its request, confirms, reason and refusal (17431.415001ms)
✔ row 256 T7 T8 the human page offers Delete on a creative instance, the tester page never does (1196.894618ms)
✔ row 194 T16: each agent action makes one call with only its keys, logs the user and answers the request (25.920868ms)
✔ row 194 T16: the boundary refuses before any bus call (13.773722ms)
✔ row 194 T16: read-only when send is off or no writer is wired; no route has a --send exception (6.006105ms)
✔ row 194 T16: a bus refusal names its reason and nothing changed; an unknown outcome or a bad shape is never retried (4.80649ms)
✔ row 194 T16: the request read takes one id, adds the refusal reason and refuses an unexpected shape (9.010999ms)
✔ row 194 T16: delete joins add and change on /api/instances with only revision, instance and op (4.535523ms)
✔ row 194 T16 D4.1: the tester listener launches, terminates and reads requests; regenerate, veto and delete are refused with no call (6.985924ms)
✔ row 194 N5: agents.js is served as JavaScript and index.html loads it once (2.138169ms)
✔ row 239 T6: a delete closed -revoked says the tokens may already be revoked, and outcome-unknown-revoked is an open outcome (3.807253ms)
✔ Q169 the signed-in human names a seat and stops the assistant, one bus call each, logged with the user (20.467126ms)
✔ Q169 the name and stop routes need send on, the public name, the user, the exact Origin and same-origin Fetch Metadata (10.75691ms)
✔ Q169 the name and stop routes take JSON within 4 KiB and only their own keys, all text (7.456ms)
✔ Row 167 a null body on the name and stop routes is 400 invalid-request with no write, and the next request is answered (4.218653ms)
✔ Q169 a bus refusal says nothing changed; a lost or odd answer says the change may have been made (6.353476ms)
✔ Q169 the names read is a bus read like the others (1.642206ms)
✔ the Board: held roles with no machine sessions, a claim with no address, the toggle kept across a reload, and Message addressed to the role (6930.836448ms)
✔ a Seen click while a Board read is in flight waits for that read, then posts (1178.550164ms)
✔ a redirect answer on a Board read, a bus read, a conversation read, a board POST, a module read and a send signs the page out: one line, nothing stale, no further reads (5341.444261ms)
✔ browser edge states: loading, empty, malformed, stale, hostile/long values, in-flight reply and appearance fallback (1618.401633ms)
Rendered contrast: {"failures":[],"count":330,"lowest":4.504658476260286}
✔ served Console browser: real board fixtures, keyboard, drafts, receipts, themes, 320px and failures (1723.682265ms)
✔ the README says a refused field table names the file or the key at fault, never a path (6.362709ms)
✔ S5 pages in a browser: real broker rows, inert text, Copy, routes, failures, layout and no writes (3554.138366ms)
✔ bus routes serve the four reads from the reader view, unescaped JSON for the page to escape (124.549917ms)
✔ decisions route serves the roles and recent lists from the reader view (46.444658ms)
✔ credentials route serves the broker credential status from the reader view (19.448846ms)
✔ replies route serves the replies to one message from the reader view (45.806351ms)
✔ bus routes are GET-only, have no write verb, and keep the same-origin checks (55.698955ms)
✔ bus refusals map to statuses and never carry a path or a stack (27.537764ms)
✔ humanCall speaks the human transport protocol without blocking the server (1707.350793ms)
✔ busReader takes --business, else the live bus host, else refuses (257.530467ms)
✔ humanCall kills a transport that runs past its timeout (529.025642ms)
✔ serve refuses a --business value that is not a business id (463.414608ms)
✔ WebUI channel off returns 503 and named recovery for every chat route without a chat operation (38.716248ms)
✔ WebUI only selection keeps web chat enabled while retaining the old read envelope (2.635502ms)
✔ WebUI channel-disabled recovery text is fixed and never echoes transport text (1.545115ms)
✔ chat browser: list/create named projects and threads, hostile labels inert and no implicit writes (836.234777ms)
✔ chat browser: thread drafts, receipts and cursor history stay isolated; refresh never writes (1150.355116ms)
✔ chat browser: uncertain writes retain draft, ownership refusal clears it, read-only cannot send (1316.24955ms)
✔ chat browser: a late read from A cannot paint B; sign-out clears private state and stops reads (1284.31592ms)
✔ chat browser: page forward and deduplicate replies; pending and byte-limit submissions do not duplicate (953.60414ms)
✔ chat browser: scrolled history stays put, New messages and an own send return to the tail (923.155974ms)
✔ chat browser: automatic polling follows a reply without a POST or a lost draft (10953.35212ms)
✔ chat browser: display stays bounded while every forward page remains reachable (1095.68322ms)
✔ chat browser: a confirmed visible message replaces its pending receipt; malformed receipts stay unknown (963.350843ms)
✔ chat browser: a refusal elsewhere forgets private chat drafts (882.872916ms)
✔ chat browser: a late project creation receipt cannot navigate away from another thread (1050.661257ms)
✔ C2-09a picker: no silent choice, duplicate hostile labels stay inert, selection survives refresh and reaches POST (1062.688519ms)
✔ C2-09a picker: metadata failure, empty set and removed pick explain disabled state and recover without switching (924.988913ms)
✔ C2-09a picker: a single instance is chosen explicitly but read-only mode cannot create a thread (781.216726ms)
✔ 264e chooser: two sessions keep drafts, cursors, deep links and counts independent (921.256121ms)
✔ 264e clear confirmation and status never resend, force-stop or change selection (1103.840292ms)
✔ 264e new session keeps its operation key after an unknown response and uses no implicit open (1124.509192ms)
✔ 264e cancel shows before/after retirement and never starts or replays work (1599.216909ms)
✔ 272 B1: a bad-session deep link preserves the draft and lost clear operation on A (1281.091753ms)
✔ C2-09a metadata uses the human listener bus, projects labels only and refuses unauthenticated reads (23.460794ms)
✔ C2-09a metadata uses the private tester listener own bus and no human transport (5.122028ms)
✔ C2-09a metadata refuses missing or malformed reads and never echoes untrusted fields (5.504868ms)
✔ C2-09a metadata stays behind the SSO session check and a GET never refreshes session activity (4.184632ms)
✔ chat replies: free text, cites with badges, the agent label, changed since and safe links (898.153564ms)
✔ chat replies: a write notice reads as its line with a Revert; a refused revert shows its code (1170.744713ms)
✔ chat replies: a read-only Console shows the notice with Revert disabled (850.32112ms)
✔ chat status line: served commit and age, divergence, fetch error and the problems one click away (897.997997ms)
✔ chat status line: limits when the status carries them, no problems, and refusals (1133.380317ms)
✔ chat status line: a project with no repository link reads no library status (854.88335ms)
✔ chat status line: unreadable reply limits show their problem and both fallback keys (882.924328ms)
✔ chat replies: unchanged file at a different library commit and incomplete checks stay unmarked (768.120005ms)
✔ chat status line: an invalid library mapping remains visible for diagnosis (737.619858ms)
✔ chat replies: a checked notice-shaped agent message is plain text with no Revert (725.56059ms)
✔ chat replies: owner-only without a sent field is a definite Revert refusal (811.129366ms)
✔ 272 fallback: granted legacy route keeps default history, send and open without session controls (715.832685ms)
✔ 272 fallback guard: granted explicit-session route refuses without default history or writes (631.667619ms)
✔ 272 fallback guard: human-required catalog failure never enables default-thread access (663.54337ms)
✔ 272 fallback guard: timeout catalog failure never enables default-thread access (537.528495ms)
✔ 272 fallback guard: no-bus-host catalog failure never enables default-thread access (622.030953ms)
✔ 272 fallback guard: malformed catalog failure never enables default-thread access (624.379398ms)
✔ 272 fallback guard: owner route retains chooser and explicit default-session addressing (635.748276ms)
✔ chat reads map only fixed verbs, strict forward paging and pure GET (40.110234ms)
✔ chat refuses malformed and repeated query/id values before transport (7.000459ms)
✔ chat project.create: one verified write, fixed identity/class and private log (2.986922ms)
✔ chat project.create: each existing Console write fence makes zero bus calls (8.933369ms)
✔ chat project.create: refusal or lost/malformed receipt never retries or invents success (5.056788ms)
✔ chat thread.create: one verified write, fixed identity/class and private log (1.581993ms)
✔ chat thread.create: each existing Console write fence makes zero bus calls (8.197701ms)
✔ chat thread.create: refusal or lost/malformed receipt never retries or invents success (3.965463ms)
✔ chat thread.send: one verified write, fixed identity/class and private log (1.353806ms)
✔ chat thread.send: each existing Console write fence makes zero bus calls (6.740756ms)
✔ chat thread.send: refusal or lost/malformed receipt never retries or invents success (4.970022ms)
✔ chat thread.open: one verified write, fixed identity/class and private log (1.438093ms)
✔ chat thread.open: each existing Console write fence makes zero bus calls (6.978012ms)
✔ chat thread.open: refusal or lost/malformed receipt never retries or invents success (3.64445ms)
✔ chat createThread receipt requires an instance even when its id is valid (2.535217ms)
✔ chat write receipts expose only the fields belonging to their operation (3.886809ms)
✔ chat validates names, body, project and strict empty open payload (5.948932ms)
✔ chat read failures redact ownership and refuse invalid transport arrays (7.572799ms)
✔ REQ-USER-2 real broker: owned catalog, create/name/filter, isolated history and 403/404 without mutations (108.639676ms)
✔ chat repeats every POST boundary even when called behind an admitted request (1.210711ms)
✔ configured Console process injects chat through its existing human transport (201.842342ms)
✔ chat assets, GET purity, method and unknown-route refusals are explicit (15.908528ms)
✔ the chat seam names the transport it is given: the human one and the tester one both pass, anything else is a TypeError (0.594861ms)
✔ C2-09a createThread forwards an explicit instance through the existing channel (4.877049ms)
✔ C2-09a malformed instance and extra thread fields refuse before the channel write (4.621594ms)
✔ 264e session catalog/create and explicit selectors keep the human transport and strict keys (6.446ms)
✔ 264e session writes retain Origin/identity fences and explicit selector errors (3.221617ms)
✔ 264e clear envelope is projected, pending is preserved and GET never repeats the clear (5.920053ms)
✔ 264e cancel is an authenticated, confirmed human write and retains retirement distinction (7.831208ms)
✔ 272 N1: malformed clear/cancel write receipts get one redacted outcome-unknown audit line (5.831884ms)
✔ conversation view: full history, collapsed tools, hidden thinking, inert hostile content, malformed and reconcile markers (1306.1032ms)
✔ conversation view: a fork keeps the open branch, says so, and opens the new one on request (1836.119679ms)
✔ conversation view: a newer session with no readable history keeps the marker (1285.484193ms)
✔ conversation view: seats without history say so and offer no reply (1047.035848ms)
✔ J16: no controls without sso and decide, read-only reasons, terminal lines kept, and only an eligible grant gets the panel (5771.215266ms)
✔ J17: one POST per click, confirm then answer, cancel, refusals and an unknown outcome never retry (5272.178631ms)
✔ a sign-in redirect at either step signs the page out and answers nothing (1989.670657ms)
✔ a signed-in owner confirms and answers, with the session's provider, issuer and sub as the subject (213.942672ms)
✔ the listener gates: no session, a cross-origin page, a loopback Host, a GET, and a sign-out between the steps (77.826712ms)
✔ J16: without a decision transport the routes are read-only and /api/config says no; startServer refuses decide without sso or send (481.428976ms)
✔ J19: a granted user's session gets decide false and the user page config, and a decision POST stops at owner-only (54.985489ms)
✔ N4: decision.resolve has no Console route, the --send caller names no decision verb, and consoleCall takes only the two console verbs (80.240021ms)
✔ a confirmation then a resolve answers once with the held choice and digest, and a second resolve refuses (3.814984ms)
✔ deny resolves without a grant field (0.482281ms)
✔ the gates before the body: method, read-only, sign-in and same origin (0.49765ms)
✔ a bad body, id or content type refuses before the bus (0.762162ms)
✔ a choice that is neither key is decision-stale, and a malformed preview is confirmation-unavailable (0.681931ms)
✔ bus refusals map by code, and an unknown or missing code is unavailable at preview and outcome-unknown at resolve (2.862415ms)
✔ a confirmation binds the session, decision and choice, and any mismatch spends it (0.81855ms)
✔ a session that ends between the steps refuses before the bus (0.438239ms)
✔ confirmations expire after the TTL, cap at the limit without dropping a live one, and are one use (0.323839ms)
✔ Discord row through real board/WebUI: independent brake/liveness, no Reply, literal content (1065.529279ms)
✔ the editor: the list, hostile markdown that runs nothing, the draft, and each save receipt (2140.805191ms)
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (1354.955091ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (1547.923208ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (1266.979424ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2940.297024ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (1214.212642ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (2204.177601ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (954.989036ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (876.671026ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (876.342459ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (851.548483ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (973.526659ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (730.164235ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (705.431094ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (716.592245ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (764.08523ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (846.538059ms)
✔ the imported source is the tagged upstream source plus the recorded local changes, and nothing else (26.175796ms)
✔ every package names its origin and license, and NOTICE lists each (1.097644ms)
✔ the build reads only imported source and the editor's own files; the bundle is the recorded build (8.957963ms)
✔ MOSAIC_REQUIRE_EDITOR_BUILD: a missing or wrong esbuild skips without it and fails with it; a wrong binary always fails (7.544758ms)
✔ the toolchain check, run as a program, exits non-zero without esbuild when the build is required (302.664165ms)
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
✔ rebuilding from the source gives the same bytes (needs the pinned esbuild; MOSAIC_REQUIRE_EDITOR_BUILD=1 makes its absence a failure) (172.641917ms)
✔ wikilink round-trip: plain (9.175577ms)
✔ wikilink round-trip: labelled (1.129295ms)
✔ wikilink round-trip: heading target (1.25613ms)
✔ wikilink round-trip: list item (1.645832ms)
✔ wikilink round-trip: next to front matter (1.202128ms)
✔ wikilink round-trip: heading block and combined label (1.18696ms)
✔ wikilink round-trip: spaces, Unicode and adjacent links (2.377579ms)
✔ wikilink round-trip: reference-definition collision (2.902031ms)
✔ wikilink round-trip: inside an ordinary link (4.241793ms)
✔ wikilink round-trip: inert embed (0.63341ms)
✔ wikilinks are inline atoms and survive a neighbouring edit in every required context (1556.425084ms)
✔ code, escaped openers, malformed syntax and HTML-like targets stay outside wikilink atoms (1452.825353ms)
✔ wikilink DOM paste accepts only bounded single-line inert syntax; malformed attrs serialise as escaped text (1000.711061ms)
✔ the editor routes serve the built files with their types and no cache (46.893995ms)
✔ open and save with no edit writes the same bytes: the goals review and a doc with every element (21.572081ms)
✔ open and save with no edit writes the same bytes: every repository doc under docs/ and spec/ (2160.196477ms)
✔ the editor source builds markup only with DOM calls, and the bundle has no eval (4.311024ms)
✔ the link gate and the image rule are the preview's (1.175245ms)
✔ R6 G1 a granted user signs in, gets the user page and reaches the broker as itself (172.773172ms)
▶ R6 G2 a subject with no live grant in this business is refused subject-unknown
✔ a listed user with no grant (92.602053ms)
✔ a grant in another business (104.491345ms)
✔ an expired grant (114.256083ms)
✔ another user's grant (55.98006ms)
✔ a sub in no file (64.883816ms)
✔ a file the loader refuses (90.210241ms)
✔ R6 G2 a subject with no live grant in this business is refused subject-unknown (523.697455ms)
▶ R6 G3 a revoke counts on the next request: 401 and the session is gone
✔ grant removed (62.972504ms)
✔ subject removed (93.888865ms)
✔ grant expired (106.472694ms)
✔ file now refused (112.582013ms)
✔ R6 G3 a revoke counts on the next request: 401 and the session is gone (377.178827ms)
✔ R6 G4 every owner route answers 403 owner-only before any bus call (127.865636ms)
✔ R6 G5 the bus refuses every owner verb over the user transport on its own (123.119351ms)
✔ R6 G9 a user chat sends only the plugins read over the owner transport (130.557956ms)
✔ R6 G6 the user page holds the notice word for word (75.808533ms)
✔ R6 G7 the hub label and plain peer links render from config on both pages (984.121102ms)
✔ R6 G8 userCall spawns user-cli directly with the user nonce, no human nonce, and the user request (51.702992ms)
✔ return flow through the conversation view: send, tool call, delayed result, peer message, exact long answers, relaunch (52842.755773ms)
✔ row 165 Settings: role instances read, add with a restart named, change without one, a refusal keeps the draft (2069.883646ms)
✔ row 165 Console: the signed-in human adds an instance through a real broker; validate exits 0, the log names the human and no restart is needed (row 194) (261.303304ms)
✔ row 165 Console: the instance write needs send on, the public name, the user, the exact Origin and same-origin Fetch Metadata (10.054646ms)
✔ row 165 Console: the instance write takes JSON within 16 KiB and only its own keys; holder, credentials and an actor are refused (9.747938ms)
✔ row 165 Console: a bus refusal says nothing changed; a lost or odd answer says the change may have been made (15.879235ms)
✔ row 165 Console: the instances read takes no arguments, needs a bus and refuses an answer without a revision (6.37516ms)
✔ C2-04 CLI: both listener callback pairs dispatch library verbs with their own transport (208.823243ms)
✔ a signed-in same-origin revert reaches exactly one library.revert and returns the new commit (25.090439ms)
✔ a revert needs send, the named Host, the user, the exact Origin and same-origin Fetch Metadata (8.67138ms)
✔ a revert takes a project and a 40-hex commit, nothing else, before the bus is asked (7.475126ms)
✔ a bus refusal is reported as not reverted with its code; before C2-02 that is the verb refusal (9.725112ms)
✔ a revert whose answer is lost or unusable is reported unknown and is never retried (7.701918ms)
✔ the status read takes one project query and answers the bus result for that project (4.432751ms)
✔ a status answer for another project or of the wrong shape is refused; a refusal keeps its status (9.479692ms)
✔ the status read needs no send; a read-only Console still has no revert (2.316938ms)
✔ library routes are the owner's: a granted user is refused them, and the tester never reverts (0.874467ms)
✔ the page gets the one library renderer, byte for byte, as a JavaScript module (1.946831ms)
✔ a revert receipt for another project is unknown and is never retried (1.698516ms)
✔ a granted-user HTTP session cannot reach owner library callbacks (2.11729ms)
✔ a configured revert callback remains unreachable when send is off (1.619535ms)
✔ row 254: each library sync code maps to its status (0.875525ms)
✔ REQ-LIMIT-3 REQ-LIMIT-4 Settings shows token limits counted, not enforced and check failed; Reset posts one path; a save keeps the token limits (1283.613274ms)
✔ Row 167 with an assistant draft open, a token limit reset gives the assistant submit its revision (951.959609ms)
✔ REQ-LIMIT-3 limits read returns only the token rows; no query or write is accepted (36.003397ms)
✔ REQ-LIMIT-3 a limits answer without a token list is refused, not shown as no limits (11.374745ms)
2026-10-24T22:11:16.186Z settings user="jason" changed
✔ REQ-LIMIT-3 a Settings reset reaches the human write with its paths; a reset alone is enough (7.465903ms)
✔ REQ-LIMIT-3 the Console reader asks the bus limits verb with no arguments (0.460687ms)
✔ the preview source names none of the four string-to-markup sinks (1.2239ms)
✔ headings, paragraphs, emphasis and inline code render (1.52146ms)
✔ lists, block quotes and code blocks render (0.569678ms)
✔ a link is made for http, https and relative targets, with rel and the target shown (1.167267ms)
✔ a link with any other scheme, or an evasion of the scheme, stays source text (1.071465ms)
✔ an image shows alt text and URL, is never an img element and never loads (0.176798ms)
✔ raw HTML, entities and unsupported blocks show as source text, never as elements (0.390592ms)
✔ markup inside code and inside link text stays text (0.199256ms)
✔ hostile and pathological input stays within its look-ahead budget and under the nesting cap (48.760884ms)
✔ trailing blanks and closing hashes are cut by a walk from the end, not a regex that retries inside a blank run (35.531804ms)
✔ a link opener with no closer searches at most SPAN characters ahead (188.875275ms)
✔ the look-ahead work of one render is a fixed multiple of the text, whatever the opener (848.275978ms)
✔ past the budget an opener is source text, through the path all other text takes (17.235886ms)
✔ a normal 200 KiB document renders exactly as it did without a budget, and spends little of it (25.044171ms)
✔ a line separator inside a heading, a list item or a fence line does not end the marker line (0.595681ms)
✔ a thematic-break line is a paragraph, every other marker line opens a list (0.433323ms)
✔ every short line over space, tab, - * _ and a letter is a break exactly when the old regex said so (48.393695ms)
✔ one line of marks does not throw, at 4 MiB, whatever the mark or the spacing (7867.726504ms)
✔ CRLF and tabs are read like LF and spaces; empty input renders nothing (0.182135ms)
✔ messages HTTP read pages and preserves metadata; bad arguments refuse before a read; other reads unchanged (114.721485ms)
✔ Console Messages lists late unsolicited messages on polling with sender class time read state and trail; nav count includes beyond the page; reads never deliver (1227.204744ms)
✔ Messages nav count polls on Tasks and Board and clears on a Board refusal; messages 403 refuses local pages (2003.078514ms)
✔ copy writes the Console paths at the full id, read-only, and leaves an existing copy alone (1488.436066ms)
✔ copy refuses a commit off refactor, an unknown one, a worktree and a bad copies directory (1597.975802ms)
✔ copy writes nothing when an archived path is missing at the commit (579.510216ms)
✔ a copy that loses the rename race leaves no read-only temp directory behind (673.135629ms)
✔ a copy whose rename fails with no target refuses, writes no copy and leaves no temp directory (710.289827ms)
✔ a copy that meets a target holding files says exists: and moves nothing into it (732.806597ms)
✔ a copy that meets an empty target directory replaces it by rename, not by moving into it (612.835517ms)
✔ serve runs from a copy: /healthz 200, the config check, roles and RELEASE from the copy, the queue from --checkout (1149.224132ms)
✔ serve refuses a --checkout that is not an absolute directory path (375.216061ms)
✔ consoleReads runs the queue read under queueRoot and reads RELEASE under root (69.061909ms)
✔ preview options are all three or none, and each is checked (11.596651ms)
✔ the CLI refuses a partial or invalid preview flag set at start (945.562554ms)
✔ the CLI with all three flags serves the preview mode (193.560054ms)
✔ a request for the public name needs the header equal to the user id, else 401 and nothing read (21.565508ms)
✔ the header name matches without regard to case, and the value compare is exact (3.95808ms)
✔ the public name with the header reads the bus views, and the Host and Origin are checked first (33.216972ms)
✔ in preview mode every write answers 403 read-only, from the public name and loopback, and reaches nothing (13.946391ms)
✔ loopback requests are unchanged in preview mode, and the bus views work with the board down (21.317768ms)
✔ a proxy that rewrites Host to the loopback port gets 403 on its first request, whatever the user (20.422653ms)
✔ a repeated Host is 400 before any other check, in preview mode and without it (11.215391ms)
✔ without the preview flags the public name is refused and writes still reach the board (5.587922ms)
✔ processing browser: keyboard Stop, confirmed Resume, unknown outcome and persistent banner (718.01676ms)
✔ processing browser: Q175 read-only interim keeps both writes disabled and names CLI recovery at 320px (695.148762ms)
✔ processing browser: sign-out from config redirect blocks later refresh and writes (824.165228ms)
✔ processing browser: sign-out from state redirect blocks later refresh and writes (860.253673ms)
✔ processing browser: sign-out from write redirect blocks later refresh and writes (806.441355ms)
✔ processing browser: sign-out from config sign-in required blocks later refresh and writes (864.004948ms)
✔ processing browser: sign-out from state sign-in required blocks later refresh and writes (886.919472ms)
✔ processing browser: sign-out from write sign-in required blocks later refresh and writes (960.067268ms)
ROW191_LAYOUT {"width":400,"height":1000,"controls":97,"tree":324.0625,"main":1450.703125,"top":181.5,"bottom":217.5,"barBottom":129,"projectsTop":352.59375,"order":"0","visible":true}
ROW191_LAYOUT {"width":1440,"height":1000,"controls":127,"tree":914,"main":914,"top":135.5,"bottom":171.5,"barBottom":53,"projectsTop":636.59375,"order":"0","visible":true}
ROW191_LAYOUT {"width":1440,"height":420,"controls":127,"tree":334,"main":907.734375,"top":135.5,"bottom":171.5,"barBottom":53,"projectsTop":636.59375,"order":"0","visible":true}
ROW191_LAYOUT {"width":800,"height":420,"controls":127,"tree":334,"main":1131.65625,"top":135.5,"bottom":171.5,"barBottom":53,"projectsTop":618.59375,"order":"0","visible":true}
✔ processing browser: static nav controls keep Stop visible, ordered and keyboard reachable (764.42746ms)
✔ interim read-only controls show CLI recovery, disable both writes and retain a halted banner across views (8.191348ms)
✔ Stop sends one empty halt and Resume confirms before sending the displayed generation (2.947603ms)
✔ a cancelled resume never calls the writer (1.219134ms)
✔ unknown writes are not retried or displayed as success and partial stops remain explicit (2.112188ms)
✔ the persistent shell loads the control outside route-specific content with accessible status and native buttons (0.471441ms)
✔ read-only Console can read processing state but neither human control writes without --send (23.636966ms)
✔ Console halt and generation-bound resume use only the management writer and keep partial stops honest (4.923203ms)
✔ processing write fences refuse cross-site, wrong origin, unnamed host, duplicate identity and bad payload before writer (7.499038ms)
✔ tester cannot invoke either control writer and failures never echo backend text (5.000005ms)
✔ processing writes use the existing SSO signer and still require --send and same-origin (5.29471ms)
✔ processing handler independently refuses wrong origin and cross-site before its writer (0.741847ms)
✔ a signed-in same-origin save reaches exactly one human operation and returns the new commit (22.355345ms)
✔ a save needs send, the named Host, the user, the exact Origin and same-origin Fetch Metadata (8.492884ms)
✔ a save validates JSON, strict keys, text values and the 1 MiB body before the bus is asked (19.453599ms)
✔ a body that is JSON but not an object is refused 400, not thrown on (5.777613ms)
✔ the 1 MiB limit is this route only; Settings and messages keep 16 KiB (2.581226ms)
✔ a bus refusal is reported as not saved with its own status; stale-base tells the user to reload (6.148622ms)
✔ a save whose answer is lost or unusable is reported unknown and is never retried (3.873987ms)
✔ the file list and one file read take strict queries and arrive in the expected shape (4.947705ms)
✔ reads work without --send; an unusable bus answer is a bad response, a refusal keeps its status (3.061043ms)
✔ /api/config says edit only where a save can pass (2.093648ms)
✔ a repository-name project refusal is an HTTP conflict (0.589542ms)
✔ proof startup refuses partial flags non-preview and invalid fixture file metadata or bytes (1372.358151ms)
✔ serve argv carries only fixture proof path and header; startup explicitly reports proof on or off (296.532456ms)
✔ CLI applies proof on the main listener and rejects that header on its tester listener (281.757503ms)
✔ proxy proof admits named reads and sends, reads its fixture once, and never exposes the value (34.129527ms)
✔ proxy proof refuses missing wrong short or repeated proof before auth and before any read (10.977149ms)
✔ proxy proof header is refused on other Hosts and on the tester listener (5.374102ms)
✔ proof options reject unsafe or colliding header names without disclosing file contents (0.797857ms)
✔ redactor: config, dataRoot, any absolute path, Discord ids and the JSON parser quote (1.703483ms)
✔ credential state from the date alone, as the bus states it (0.208011ms)
✔ queue: rows, one row, ids and methods, notes; no path or id from a row (414.58832ms)
✔ queue: a refused read fails closed with the store's text, redacted (210.374206ms)
✔ queue: a store that fails to load, or a child that dies, gives a fixed message with no path or stack (858.43953ms)
✔ business: names, vars on the allowlist, authority, credential metadata only (17.500331ms)
✔ business: missing or invalid file refuses with the module's text, redacted (8.383354ms)
✔ business without --business: the live bus host, else no-bus-host; no system config: not-configured (8.244873ms)
✔ settings: release, board, loopback address, notifier binding name only (129.222379ms)
✔ task fields: the committed table with no reads configured, GET only; a bad table refuses with no path (18.325509ms)
✔ bus-status: a refused boot shows reason, file and last good load; a live host or an ok boot clears it (8.620563ms)
✔ both presentations replace old activity with relaunch notice, label retained history, then resume after new activity (912.269858ms)
✔ reported return flow and relative Age: reply sent from the inspector, then the new answer appears there without manual refresh (20871.244615ms)
organization: {"event":"reload-needs-restart","business":"acme"}
organization: {"event":"reload-needs-restart","business":"acme"}
✔ row 65 Settings: the routing table lists every instance, saves a harness, model, thinking and fallback to the file, and keeps the draft on each refusal (1456.057342ms)
organization: {"event":"reload-needs-restart","business":"acme"}
✔ row 65 Console: the signed-in human saves a route through a real broker; each refusal says nothing changed and leaves the file and the log (124.733405ms)
✔ row 65 Console: the routes write needs send on, a writer, the public name, the user, the exact Origin and same-origin Fetch Metadata (7.984846ms)
✔ row 65 Console: the routes write takes JSON within 16 KiB with a revision and routes only; an actor is refused and routes are never logged (9.931147ms)
✔ row 65 Console: a bus refusal maps to its status and says nothing changed; a lost or odd answer says the change may have been made (24.176558ms)
✔ row 65 Console: the routes read takes no arguments, needs a bus and refuses an odd answer (7.91025ms)
✔ the send box: held roles, the draft and caret across a refresh, each receipt, one POST per Send, and the trail link; the board Reply on a 4xx and a 5xx (2577.785116ms)
✔ a sent receipt lists its replies as the page refreshes, oldest first and capped, and marks none delivered or read (11216.600397ms)
✔ startServer takes send only as a function and only with the preview mode (8.305533ms)
✔ the CLI refuses --send without the preview flags, and without a configured bus (622.972543ms)
✔ the CLI with --send and a configured bus sends through the human transport and logs one line (188.71069ms)
✔ without --send the route is read-only like every other write, and config says no send (10.412469ms)
✔ with --send every other write is still 403 read-only, and nothing reaches the board or bus (8.881331ms)
✔ config says send only on the public name with --send on (4.624696ms)
✔ a send without the signed-in user is 401 and is neither sent nor logged, loopback included (6.736458ms)
✔ each request check refuses before anything is sent, and logs the refusal without the body (23.776724ms)
✔ a send passes exactly to, body and in_reply_to, answers the id, and logs it (3.435425ms)
✔ a crafted role name cannot forge a log line (2.520457ms)
✔ a bus refusal is not sent, with its status; an outcome the bus could not confirm is unknown and never retried (8.782419ms)
✔ through the human transport the request is exactly the business, message.send and the keys (100.281561ms)
✔ against a real broker: the message is written once as a human send, and its refusals map (31.579317ms)
✔ loopback host and board origin fail closed (6.349957ms)
✔ real board fixture passes through WebUI; assets and isolated seen/reply work (85.238919ms)
✔ proxy preserves exact request bytes, status and receipt, rejects forms and malformed JSON, never follows redirect (49.199627ms)
✔ unreachable board reports URL; CLI rejects unsupported options (479.978274ms)
✔ tester service render carries the tester port alongside existing flags (134.959305ms)
✔ tester service refuses forwarded 7332 even with another main port (111.314937ms)
✔ tester service invalid ports refuse render and install with exit 4 and leave the unit alone (1140.951065ms)
✔ tester service counts the digits as written before it strips leading zeros (106.037477ms)
✔ tester service install and status show the tester port without changing send reporting (550.730447ms)
✔ render prints the unit without the preview flags (50.043501ms)
✔ render carries every serve flag, the preview set included (48.3057ms)
✔ a partial preview set is refused (116.014202ms)
✔ a value the unit cannot carry is refused, for every flag (2672.644014ms)
✔ the rendered unit names none of the human proof agent markers and sets no agent variable (239.356908ms)
✔ install into --dir with --no-reload writes the file whole, then reports unchanged (287.45407ms)
✔ install without --no-reload runs daemon-reload and nothing that starts the unit (62.23267ms)
✔ uninstall refuses while the unit is running, with or without --no-reload, and removes it once it is not (564.150662ms)
✔ status prints the unit state and GET /healthz on the installed port (418.000891ms)
✔ usage: an unknown verb or flag, and start or enable, exit 4 (748.152129ms)
✔ without --send, render is the template with its placeholders filled, byte for byte (191.946387ms)
✔ render --send with the preview set ends ExecStart with --send and changes nothing else (314.493899ms)
✔ --send without the whole preview set is refused and writes nothing (731.918561ms)
✔ install --send into --dir with --no-reload writes the sending unit, and status says whether it sends (513.043402ms)
✔ uninstall and status take no --send (164.863424ms)
✔ install refuses while the unit is running, in any state but inactive or failed, and changes nothing (697.765957ms)
✔ when the state read fails, install and uninstall refuse with one line and change nothing (238.392922ms)
✔ install needs --copy naming a copy that exists, and refuses outside the canonical checkout without --allow-worktree (355.132277ms)
✔ install refuses unless the bus unit runs from the same copy, naming both paths, and changes nothing (735.389915ms)
✔ render --copy runs the copy and reads the queue in the checkout; without --copy the unit is unchanged (114.218835ms)
✔ the uid header takes only an Authentik uid; the username header still takes a username (2531.254234ms)
✔ a preview value cannot start with - or . (295.955168ms)
✔ status names the copy and whether refactor has moved past it, and says when the unit runs from no copy (877.622422ms)
✔ proxy proof render carries both flags but never opens the fixture file (89.223556ms)
✔ proxy proof render refuses incomplete non-preview missing unsafe-mode and repo/copy paths (565.728452ms)
✔ proxy proof status retains send and tester reporting with both proof flags (170.319152ms)
✔ row196 socket flag renders only for supporting targets and refuses mixed transports (114.439527ms)
✔ Settings form shows every scope and held role; gated save, exact payload, retained draft and no automatic retry (1360.394114ms)
✔ Q169 Assistant section: gated, changed fields only, name and stop posts, retained draft and no automatic retry (1339.787079ms)
✔ Row 167 a refused names read gives the refused usage page; another names failure keeps the Assistant section (1001.13625ms)
✔ Row 167 with a limits draft open, an assistant save gives the limits submit its revision and the typed limit stays (961.46178ms)
✔ Row 167 with an assistant draft open, a launch save gives the assistant submit its revision, and reload reads the current one (919.499255ms)
2026-10-24T22:12:18.574Z settings user="jason" changed
✔ REQ-WEB-1 signed-in same-origin Settings write reaches exactly one human operation (20.814698ms)
✔ REQ-WEB-1 Settings writes require enabled send, named Host, identity, exact Origin and same-origin Fetch Metadata (7.338296ms)
✔ REQ-WEB-1 Settings validates JSON, size, revision and strict writable keys before broker call (5.704514ms)
✔ Q169 a Console change of the assistant reaches the human operation unchanged, and the log names the signed-in user (3.12922ms)
✔ tokens.css and icons.svg are byte copies of docs/design (2.466959ms)
✔ JetBrains Mono files match the digests in their sources file, with the OFL text (2.202837ms)
✔ shipped strings are unchanged, and the web keeps its write boundary (3.483166ms)
ROW191_LAYOUT {"width":1440,"height":1000,"controls":212.5,"tree":914,"main":914}
✔ shell in a browser: System default, seeded states, 400px, focus and the Ctrl+K palette (5724.337234ms)
✔ five states on Board, Inbox, Tasks, Agents and Trail (2781.461551ms)
✔ a 401 sign-in required on each fetch path signs the page out with a sign-in link and stops the refresh; another 401 stays an error (5951.403032ms)
✔ the Sign out form shows only when /api/config says sso, and posts to /auth/logout (1240.276745ms)
✔ positive: an RS256 provider signs in and sends one message, and the session reads (144.348303ms)
✔ positive: an ES256 provider signs in and sends (20.592669ms)
✔ positive: two providers each sign in their own subjects, and one provider's subject is unknown to the other (61.371982ms)
✔ 1: a forged x-authentik header without a cookie is 401 on the API and a sign-in redirect on a page (43.593455ms)
✔ 2: an HS256 ID token keyed with the client secret and a real RSA kid is refused (73.089469ms)
✔ 3: a wrong aud, and an aud list holding another client with no azp, are refused (33.086381ms)
✔ 4: a token that expired 10 minutes ago is refused (63.584637ms)
✔ 5: another issuer, and the issuer without its trailing slash, are refused (48.311745ms)
✔ 6: a nonce mismatch and a missing nonce are refused (27.913813ms)
✔ 7: state mismatch, no login cookie, a replay, an expired record and two login cookies are refused (67.213632ms)
✔ 8: the token request carries the PKCE verifier, and the OP refuses a wrong one (46.450232ms)
✔ 9: alg none, a changed payload under a real kid, and an unknown kid even after the refetch are refused (208.50079ms)
✔ 10: a valid token for a subject not configured is 403 with one subject-unknown line (114.43639ms)
✔ 11: start refusals: HS or none algs, reserved names, HS-only discovery, an empty JWKS, no S256, an issuer mismatch, a short RSA key (276.730279ms)
✔ 11: slot files: a symlink, mode 0644, mode 0640 and a file under the repository are refused, and no message holds the value (2.126877ms)
✔ 11: the CLI refuses --sso with the old flags and without console.sso, and starts with a good one (1317.326217ms)
✔ 12: under --sso the tester listener refuses each kind of sign-in, has no /auth, and startServer refuses tester with sso (61.815926ms)
✔ 13: idle and absolute expiry, logout then reuse, a cross-origin logout, and background reads that don't keep a session (112.338051ms)
✔ 13: the CSP lets the Sign out form reach the provider's end-session origin, and only under --sso (136.264868ms)
✔ 14: open redirects land on /, and a path on the Console lands there (125.077087ms)
✔ 15: a callback for A carrying B's code and iss, and a provider= query, is refused (114.160441ms)
✔ 16: a provider with RS256 and ES256 takes either, and refuses PS256 with a usable PS256 key in the JWKS (111.659664ms)
✔ 17: 33 started logins leave 32 records, and the first one's callback finds none (59.820684ms)
✔ 18: after a key rotation a sign-in works through one refetch, and the removed kid is refused (119.662583ms)
✔ 20 and 21: the store holds no raw session id, and the cookie strings are exact (36.447359ms)
✔ 22: a loopback Host is 403 on a page, a read and a write; /healthz on loopback is 200; a redirect_uri never comes from the Host (64.398495ms)
✔ 23: a provider down at start leaves the Console up and 503, and the retry makes sign-in work (225.671097ms)
✔ 19: no captured log line holds a token, code, state, nonce, verifier, client secret or session id (4.654356ms)
✔ tester Console banner exposes only instance route and name editors and saves a route as tester (1004.885424ms)
✔ row 177: the tester Console chat composer is enabled and a send shows in its own thread (882.644221ms)
✔ tester-port validates range tunnel main port and requires configured bus before listening (1166.339822ms)
✔ CLI tester listener binds a private Unix socket and spawns TESTER_CLI for every Console bus read (4245.099179ms)
✔ main listener refuses x-mosaic-tester before any board or bus read for every Host (28.708091ms)
✔ tester listener rejects preview binding and requires its fixed logical Host and no proxy auth header (145.683675ms)
✔ tester listener writes only instances routes and names with tester receipts and actor (158.995936ms)
✔ tester listener refuses every human-only write with no bus call (108.260486ms)
✔ tester-off and tester-required reads return HTTP 403 (109.020476ms)
✔ tester credentials routes and committed project reads keep secrets and paths bounded (194.378994ms)
✔ row 177 W1: the tester chat makes, sends to, opens and reads its own thread as tester (30.75864ms)
✔ row 177 W2: tester chat writes refuse a missing or foreign Origin, cross-site, text/plain and the proxy header with no bus call (16.544702ms)
✔ row 177 W3: the human thread through the tester chat is thread-not-owned, and bus.tester off answers tester-off (38.09277ms)
✔ row 177 W4: the main listener refuses x-mosaic-tester on chat reads and writes before the chat (3.174145ms)
✔ Row 252: the tester listener has no decision answer routes, and its config never offers them (115.156837ms)
✔ private tester HTTP serves on 0600 socket in 0700 parent and fixed origin (92.027264ms)
✔ private tester refuses symlink, unsafe parent and long path without repairs (1.361981ms)
✔ tester cleanup must leave a replacement inode untouched (1.910765ms)
✔ row278 browser lists held claims and release preserves role rows and totals (847.359938ms)
✔ row278 browser claims 403 stays local and role section remains byte-equal (894.870976ms)
✔ row278 browser renders only four escaped claim fields and never instance or other extras (843.980149ms)
✔ row278 browser sign-out removes claims and prevents reuse of cached answers (893.668522ms)
✔ row278 tester browser keeps role rows without requesting the owner claims section (787.543169ms)
✔ row278 browser discards a late claims answer after sign-out (921.720447ms)
✔ row278 HTTP read returns held claims without send and refuses arguments before the bus (53.230904ms)
✔ row278 HTTP read preserves bus refusal and rejects a malformed result (16.041697ms)
✔ row278 tester socket refuses thread claims explicitly with zero bus calls (7.920469ms)
✔ row278 Console adapter calls argument-free thread.claims through the normal transport (234.138591ms)
✔ 193d HTTP shares use the caller, plain/shared lists, exact args and write fences (101.289213ms)
✔ 193d config supplies only the signed-in user live collaborator scopes and updates on downgrade (42.033352ms)
✔ 193d viewer UI has no composer, resume, share, session mutations or create controls (924.760539ms)
✔ 193d mixed grants keep viewer project read-only and collaborator own thread writable; downgrade hides controls (953.979736ms)
✔ 193d owner has share controls on own threads and shared threads remain read-only (790.551799ms)
✔ 193d bypassed UI checks still reach a refusing bus for every viewer write (788.861611ms)
✔ 193d collaborator shares stay read-only and never expose reshare or wake controls (581.454324ms)
✔ REQ-LIMIT-4 Settings shows all token kinds and unknown turns beside every total, as a read-only separate section (995.953487ms)
✔ REQ-WEB-1 usage read keeps unknown counts and each token kind; no query or write is accepted (45.120159ms)
✔ REQ-WEB-1 malformed usage is refused instead of shown as zero (8.503528ms)
✔ R6-N1 with the userRoute gate open, a user session reaches no owner option over HTTP (253.639899ms)
✔ Queue, Business and Settings in their five states, with no move button (3486.52394ms)
✔ seeded secrets, Discord ids and paths reach no response and no page; business refusals in the module's words (1584.02624ms)
✔ the server log names no config path when the system config refuses (369.222452ms)
ℹ tests 455
ℹ suites 0
ℹ pass 455
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 174122.853398
@@ -0,0 +1,69 @@
tests/agents-browser.test.mjs
tests/agents.test.mjs
tests/assistant.test.mjs
tests/board-held.test.mjs
tests/browser-edge.test.mjs
tests/browser.test.mjs
tests/bus-browser.test.mjs
tests/bus.test.mjs
tests/channel-chat.test.mjs
tests/chat-browser.test.mjs
tests/chat-instances.test.mjs
tests/chat-replies-browser.test.mjs
tests/chat-sessions-access.test.mjs
tests/chat.test.mjs
tests/conversation.test.mjs
tests/decide-browser.test.mjs
tests/decide-sso.test.mjs
tests/decision-http.test.mjs
tests/discord.test.mjs
tests/docs-browser.test.mjs
tests/editor-browser.test.mjs
tests/editor-provenance.test.mjs
tests/editor-wikilink.test.mjs
tests/editor.test.mjs
tests/granted-user.test.mjs
tests/history-return-flow.test.mjs
tests/instances-browser.test.mjs
tests/instances.test.mjs
tests/library-cli.test.mjs
tests/library-routes.test.mjs
tests/library-status.test.mjs
tests/limits-browser.test.mjs
tests/limits-route.test.mjs
tests/markdown-preview.test.mjs
tests/messages.test.mjs
tests/pinned-copy.test.mjs
tests/preview.test.mjs
tests/processing-browser.test.mjs
tests/processing-ui.test.mjs
tests/processing.test.mjs
tests/project-file.test.mjs
tests/project-name-repo.test.mjs
tests/proof-cli.test.mjs
tests/proof.test.mjs
tests/reads.test.mjs
tests/relaunch.test.mjs
tests/return-flow.test.mjs
tests/routes-browser.test.mjs
tests/routes.test.mjs
tests/send-browser.test.mjs
tests/send.test.mjs
tests/serve.test.mjs
tests/service.test.mjs
tests/settings-form.test.mjs
tests/settings-write.test.mjs
tests/shell.test.mjs
tests/sso-browser.test.mjs
tests/sso.test.mjs
tests/tester-browser.test.mjs
tests/tester-cli.test.mjs
tests/tester-listener.test.mjs
tests/tester-socket.test.mjs
tests/thread-claims-browser.test.mjs
tests/thread-claims.test.mjs
tests/thread-sharing.test.mjs
tests/usage-browser.test.mjs
tests/usage.test.mjs
tests/user-option-swap.test.mjs
tests/views.test.mjs
@@ -0,0 +1,38 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✔ row 194 T16 Settings Agents: unavailable read-only, launch follows its request, confirms, reason and refusal (13526.912326ms)
✔ row 256 T7 T8 the human page offers Delete on a creative instance, the tester page never does (917.27163ms)
✔ row 194 T16: each agent action makes one call with only its keys, logs the user and answers the request (26.28546ms)
✔ row 194 T16: the boundary refuses before any bus call (13.102463ms)
✔ row 194 T16: read-only when send is off or no writer is wired; no route has a --send exception (6.394437ms)
✔ row 194 T16: a bus refusal names its reason and nothing changed; an unknown outcome or a bad shape is never retried (4.282632ms)
✔ row 194 T16: the request read takes one id, adds the refusal reason and refuses an unexpected shape (5.922485ms)
✔ row 194 T16: delete joins add and change on /api/instances with only revision, instance and op (2.724511ms)
✔ row 194 T16 D4.1: the tester listener launches, terminates and reads requests; regenerate, veto and delete are refused with no call (4.723645ms)
✔ row 194 N5: agents.js is served as JavaScript and index.html loads it once (1.551741ms)
✔ row 239 T6: a delete closed -revoked says the tokens may already be revoked, and outcome-unknown-revoked is an open outcome (2.702385ms)
✔ the Board: held roles with no machine sessions, a claim with no address, the toggle kept across a reload, and Message addressed to the role (3264.641316ms)
✔ a Seen click while a Board read is in flight waits for that read, then posts (1197.183961ms)
✔ a redirect answer on a Board read, a bus read, a conversation read, a board POST, a module read and a send signs the page out: one line, nothing stale, no further reads (5156.528249ms)
✔ browser edge states: loading, empty, malformed, stale, hostile/long values, in-flight reply and appearance fallback (1309.276425ms)
Rendered contrast: {"failures":[],"count":330,"lowest":4.504658476260286}
✔ served Console browser: real board fixtures, keyboard, drafts, receipts, themes, 320px and failures (1518.992742ms)
✔ the README says a refused field table names the file or the key at fault, never a path (104.682461ms)
✔ S5 pages in a browser: real broker rows, inert text, Copy, routes, failures, layout and no writes (3538.625499ms)
✔ bus routes serve the four reads from the reader view, unescaped JSON for the page to escape (83.53196ms)
✔ decisions route serves the roles and recent lists from the reader view (37.23684ms)
✔ credentials route serves the broker credential status from the reader view (13.661469ms)
✔ replies route serves the replies to one message from the reader view (37.146766ms)
✔ bus routes are GET-only, have no write verb, and keep the same-origin checks (57.970332ms)
✔ bus refusals map to statuses and never carry a path or a stack (25.682155ms)
✔ humanCall speaks the human transport protocol without blocking the server (1672.176975ms)
✔ busReader takes --business, else the live bus host, else refuses (188.376745ms)
✔ humanCall kills a transport that runs past its timeout (527.833381ms)
✔ serve refuses a --business value that is not a business id (331.000231ms)
ℹ tests 28
ℹ suites 0
ℹ pass 28
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 17747.118568
@@ -0,0 +1,22 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✔ wikilink round-trip: plain (5.135516ms)
✔ wikilink round-trip: labelled (0.532763ms)
✔ wikilink round-trip: heading target (0.47601ms)
✔ wikilink round-trip: list item (0.674052ms)
✔ wikilink round-trip: next to front matter (0.620153ms)
✔ wikilink round-trip: heading block and combined label (0.718517ms)
✔ wikilink round-trip: spaces, Unicode and adjacent links (0.543729ms)
✔ wikilink round-trip: reference-definition collision (1.267657ms)
✔ wikilink round-trip: inside an ordinary link (0.565479ms)
✔ wikilink round-trip: inert embed (0.373131ms)
✔ wikilinks are inline atoms and survive a neighbouring edit in every required context (773.2922ms)
✔ code, escaped openers, malformed syntax and HTML-like targets stay outside wikilink atoms (686.084659ms)
✔ wikilink DOM paste accepts only bounded single-line inert syntax; malformed attrs serialise as escaped text (675.536422ms)
ℹ tests 13
ℹ suites 0
ℹ pass 13
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 2305.540306
+27
View File
@@ -0,0 +1,27 @@
// Run only under Sage's explicit CLEAR. Reads the pinned baseline Git objects,
// not the edited model or rebuilt candidate bundle. Never writes product files.
import { execFileSync } from 'node:child_process';
import { createHash } from 'node:crypto';
import { fileURLToPath } from 'node:url';
import { dirname, resolve } from 'node:path';
import vm from 'node:vm';
import { WIKILINK_CASES } from '../../../../packages/webui/tests/helpers/wikilink-cases.mjs';
const repo = resolve(dirname(fileURLToPath(import.meta.url)), '../../../..');
const base = '487500a16f4ab5902c318509fdec6acc56a543ca';
const git = (...args) => execFileSync('git', args, { cwd: repo, encoding: 'utf8', maxBuffer: 16 * 1024 * 1024 });
const read = path => git('show', `${base}:${path}`);
const source = read('packages/webui/src/public/editor.js');
const build = JSON.parse(read('packages/webui/editor/BUILD.json'));
const sha256 = createHash('sha256').update(source).digest('hex');
if (sha256 !== build.outputs['src/public/editor.js'].sha256) throw Error('baseline bundle differs from its recorded build');
const context = { console }; context.window = context; context.globalThis = context;
vm.createContext(context);
for (const [name, text] of [['markdown-preview.js', read('packages/webui/src/public/markdown-preview.js')], ['editor.js', source]])
vm.runInContext(text, context, { filename: name });
const results = WIKILINK_CASES.map(({ name, text }) => {
const output = context.MosaicEditor.roundTrip(text);
return { name, input: text, output, equal: output === text };
});
console.log(JSON.stringify({ base: git('rev-parse', base).trim(), bundleSha256: sha256,
measuredAt: new Date().toISOString(), allEqual: results.every(r => r.equal), results }, null, 2));
@@ -0,0 +1,68 @@
{
"base": "487500a16f4ab5902c318509fdec6acc56a543ca",
"bundleSha256": "9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee",
"measuredAt": "2026-10-24T22:07:22.210Z",
"allEqual": true,
"results": [
{
"name": "plain",
"input": "[[a]]\n",
"output": "[[a]]\n",
"equal": true
},
{
"name": "labelled",
"input": "[[a|b]]\n",
"output": "[[a|b]]\n",
"equal": true
},
{
"name": "heading target",
"input": "[[a#h]]\n",
"output": "[[a#h]]\n",
"equal": true
},
{
"name": "list item",
"input": "- [[a]]\n",
"output": "- [[a]]\n",
"equal": true
},
{
"name": "next to front matter",
"input": "---\nrelated: \"[[metadata]]\"\n---\n\n[[a]]\n",
"output": "---\nrelated: \"[[metadata]]\"\n---\n\n[[a]]\n",
"equal": true
},
{
"name": "heading block and combined label",
"input": "# See [[a#h|Title]]\n",
"output": "# See [[a#h|Title]]\n",
"equal": true
},
{
"name": "spaces, Unicode and adjacent links",
"input": "See [[ Héllo there # A heading | a label ]][[next]]\n",
"output": "See [[ Héllo there # A heading | a label ]][[next]]\n",
"equal": true
},
{
"name": "reference-definition collision",
"input": "[[a]]\n\n[a]: u\n",
"output": "[[a]]\n\n[a]: u\n",
"equal": true
},
{
"name": "inside an ordinary link",
"input": "[x [[a]]](u)\n",
"output": "[x [[a]]](u)\n",
"equal": true
},
{
"name": "inert embed",
"input": "![[cover.png]]\n",
"output": "![[cover.png]]\n",
"equal": true
}
]
}
+402
View File
@@ -0,0 +1,402 @@
# Row 255 design: a bundled Pocket ID for users with no OIDC provider (Q203, Gitea #1760, Vikunja 458)
Launchpad, draft 1, 2026-10-25, on `launchpad/row255` off refactor 78b69e1e6. Brief
`docs/plans/2026-10-21_bundled-pocket-id.md` (blob 26f34400). Reviewer Webby. Sage checks it against Q203, O6,
REQ-WEB-2 and REQ-INST-1. REQ-INST-2 (PRD 1.10) is post-v1 (mos-1204), and so is everything here.
This is a design only. Nothing here installs, downloads or starts Pocket ID. It changes nothing on .53, .54 or
dragon-lin, which keeps Authentik.
## Sources
- Q203 and O6 as the brief quotes them. PRD `docs/prd/mosaic-stack.md` REQ-WEB-2 (:902), REQ-INST-1 (:1509),
REQ-INST-2 (:1513) and REQ-INST-3 (:1528). Lead decision 44 items 5 and 6
(`docs/plans/2026-09-26_lead-decisions.md:655-663`).
- The Q175 design `agents/sage/work/q175-sso/DESIGN.md` sections 4 and 10, and the code row 192 landed:
`packages/webui/src/sso-config.mjs` (the `console.sso` shape), `packages/webui/src/sso.mjs` (the slot read,
the discovery checks at :105-118, the client at :147-148, the callback at :133, the post-logout URI at :332).
- Researcher's note `agents/researcher/work/2026-10-04_vikunja-pocketid.md` part 2 (v2.17.0).
- A fresh read of upstream on 2026-10-25, from release metadata and source text only: no binary was fetched or
run. The latest stable release is **v2.19.1** (2026-10-22). Source paths below are under
`backend/internal/` at tag v2.19.1 in `github.com/pocket-id/pocket-id`, marked "P". Releases v2.18.0,
v2.19.0 and v2.19.1 are not marked breaking.
## What the Console already needs from any provider
This design keeps the Console's sign-in and start checks exactly as row 192 built them. Pocket ID becomes one
`console.sso.providers` entry, the same shape any compliant OP uses (Q175 section 4, "Several providers"). The
Console gets no new sign-in path, no password and no proxy-header identity (O6, REQ-WEB-2, REQ-INST-2). The
facts that drive the rest of the design:
- `publicOrigin` and every `issuer` must be https (`sso-config.mjs` `httpsURL`). A plain-http Pocket ID can't
be a provider at all.
- Each provider needs 1 to 64 `subjects`. A `console.sso` with no subject refuses to load. So the first
person's subject has to exist before the Console starts with `--sso` (section 5).
- The client authenticates with `client_secret_basic` (`sso.mjs:148`), so the client is confidential.
- The slot is `<configDir>/secrets/mosaic-stack/<slot>`: a regular file, owned by the Console's uid, mode
with no group or other bits, and outside the repo and every stack copy (`readSlot`).
- `config.json` is user-authored. bootstrap.sh creates it and nothing overwrites it (canon invariant 2, Q175
section 4). This matters for sections 1 and 5.
## 1. The choice
The installer is REQ-INST-3's install command (Vikunja #432; today `stack-upgrade.sh` and the per-case
install scripts). It takes one sign-in option per instance:
- `--oidc existing`. The user points the Console at one or more OIDC providers they already have. Nothing
is installed. The user writes `console.sso` themselves, as Q175 step 4 does today. The installer writes
nothing into `console.sso`; it prints the entry shape and the two URIs to register
(`<publicOrigin>/auth/callback`, `<publicOrigin>/auth/signed-out`).
- `--oidc bundled`. The stack installs Pocket ID as an install component (section 2), and
`console.sso.providers` holds exactly one entry, `id: "pocket-id"`, whose `issuer` is the component's
origin.
- No option keeps today's behaviour: no `console.sso`, and the Console runs without `--sso`.
How the bundled choice is recorded. REQ-INST-1 lets a component be switched on "in the organization file
or system config". It has to be the system config. The organization file can be written by agents through
`organizationWriter`, which is the reason Q175 B1 put `console.sso` in config.json, and the same reason
holds for a component that issues the Console's identities. So config.json gets one new optional key:
```json
"components": {
"pocket-id": {
"release": "v2.19.1",
"origin": "https://id.example.internal",
"port": 1411
}
}
```
The loader (`scripts/mosaic-config.mjs`) checks the shape: `release` is a `vX.Y.Z` tag, and the component script refuses one that
differs from the pin file (section 2), `origin` is an https origin, `port` is 1024 to 65535. It also cross-checks: when
`components["pocket-id"]` is present, `console.sso` must have exactly one provider, `id` `pocket-id`,
`issuer` equal to `origin`. A config with `console.sso` providers and no `components` is the existing
choice and loads as today.
**M1, approved by Mos with three conditions (mos-1666 item 3).** `components` is a new top-level config key.
The loader refuses unknown keys today, so this is a config schema change. The conditions:
1. **Rollback trap.** A copy older than P1 refuses a config that has the key, the same trap Q175 section 4
names for `console.sso`. P1 documents the order. On a rollback past P1, first take `components` out of
config.json (restore the backup made before the key went in), then roll back the pointer. The STATE check
after the rollback reads config.json and confirms the key is absent.
2. **Strict inside the key.** The loader refuses any name under `components` other than `pocket-id`, and any
field under `pocket-id` other than `release`, `origin` and `port`. Each refusal names the key path and
quotes no value, as `checkConsole` does.
3. **test-config.sh cases:**
- a valid `components` loads;
- a malformed one fails, naming the bad key path;
- a config without `components` loads;
- the cross-check refuses a `console.sso` whose provider doesn't match `origin`.
What each choice writes into `console.sso` is in section 5. For the bundled choice, Pocket ID is the only
providers entry. The design keeps it that way because REQ-INST-2 says "the Console's one providers entry".
A user who later adds an existing provider moves to `--oidc existing` and removes the component (section 2).
## 2. The component, against REQ-INST-1
**Pinned.** A Pocket ID release is a set of raw binaries plus `checksums.txt` (sha256). From v2.16.0 there is
an SPDX SBOM per binary, and the release workflow attests `checksums.txt` through Sigstore (`actions/attest`
in `.github/workflows/release.yml`). The repo holds one pin file,
`scripts/pocket-id-pins.sh`, sourced the way `scripts/case1-pins.sh` is: the tag, and for each supported platform (linux amd64 and arm64 to
start) the asset name and its sha256. The build row copies the sha256 from `checksums.txt` at the tag and
records the `gh attestation verify` output for each asset as its evidence. The pin is checked by hand at
build time, not trusted at install time. No Pocket ID source and no binary goes in the repo. The binary is
not in any image either, since the container install comes after v1 (REQ-INST-3).
Recommended pin: v2.19.1, the current release. The build row checks it again, because Pocket ID ships a
minor every one to four weeks. Upgrading is a pin file change in a reviewed commit.
**Fetched and checked.** `scripts/component-pocket-id.sh fetch` downloads the pinned asset for the host's
platform over https into a new 0700 staging directory, computes its sha256, and compares it with the pin.
On a mismatch it deletes the file and refuses with `pocket-id-digest-mismatch`, naming the expected value
and the computed one. On a match it installs the binary read-only (0555) at
`<dataRoot>/components/pocket-id/bin/pocket-id-<tag>`. The fetch is the only network step, and the user
runs it at install. Tests never run it against the network (section 9).
**Runs.** A systemd user unit, `mosaic-pocket-id.service` (`mosaic-pocket-id-NAME.service` for a named
instance, as row 190 names the bus and webui units), as the instance's user:
- `ExecStart=<dataRoot>/components/pocket-id/bin/pocket-id-<tag>`.
- `WorkingDirectory=<dataRoot>/components/pocket-id/run`, a directory the unit owns, so Pocket ID's habit of
reading `.env` from the working directory reads nothing we didn't write. The build row checks there is no
`.env` there at start.
- Environment, all from the rendered unit:
- `APP_URL=<origin>` and `HOST=127.0.0.1` (P `common/env_config.go`: HOST defaults to `0.0.0.0`).
- `PORT=<port>`.
- `DB_CONNECTION_STRING` and `UPLOAD_PATH` as absolute paths under `<dataRoot>/components/pocket-id/data/`
(P defaults are `data/pocket-id.db` and `data/uploads`, relative to the working directory).
- `ALLOW_USER_SIGNUPS=disabled` and `ALLOW_INSECURE_CALLBACK_URLS=false`.
- `EMAIL_ONE_TIME_ACCESS_AS_UNAUTHENTICATED_ENABLED=false` and `..._AS_ADMIN_ENABLED=false`.
- The `OUTBOUND_ALLOWED_HOSTS_*` allowlists set empty (added in 2.19.0).
- No `TRUST_PROXY` unless section 6's proxy step sets it to the proxy's address.
- `ENCRYPTION_KEY` (mandatory since v2.0, at least 16 bytes) never goes in the unit text. It lives in slot
`<configDir>/secrets/mosaic-stack/pocket-id-encryption-key`, 0600. The component script generates it from
`/dev/urandom` straight into the file and never prints it. The unit passes it with
`LoadCredential=` and `ENCRYPTION_KEY_FILE=%d/...`. The build row confirms `ENCRYPTION_KEY_FILE` at the pinned
tag; if it isn't there, it refuses rather than putting the key in `Environment=`.
- The unit never carries `STATIC_API_KEY`. That key exists only during the enroll run (section 4).
The data directory holds the SQLite database, Pocket ID's signing key (stored encrypted with
`ENCRYPTION_KEY`), and the passkey registrations. It is 0700. Agent sandboxes bind only an allowlist
(`packages/seat/src/sandbox.mjs`), and `<dataRoot>/components/` is not on it. The build row adds a sandbox
test that pins that.
**Health-checked.** `GET http://127.0.0.1:<port>/healthz` returns 204 (P `controller/healthz_controller.go`).
`component-pocket-id.sh status` reports the unit state, the binary tag against the pin, the binary's sha256
against the pin, and the health result. The Console's own `/healthz` already shows `sso: { "pocket-id": ready
| unreachable | refused }` from its discovery retries, so an operator sees the provider from either side.
**Removable.** `component-pocket-id.sh remove` refuses while `console.sso` still names `pocket-id`, so the
Console can't be left pointing at a provider that's gone. Once the user has taken the entry out (or moved to
`--oidc existing`), the script stops and removes the unit, then moves the data directory to
`<dataRoot>/components/pocket-id.removed-<utc>` with a receipt line in `<dataRoot>/state/components.log`
(append-only). It never deletes the passkey database outright. Deleting the moved directory and the
encryption key slot is a separate `purge` verb that names both paths and needs `--yes`. Removing the
`components` key from config.json is the user's edit.
## 3. The Q175 start checks against the bundled instance
The Console checks are unchanged. Here is each one against Pocket ID, and the setting it needs:
| Check (row 192) | Pocket ID v2.19.1 | Default that fails | Fix |
|---|---|---|---|
| `issuer` is https (loader) | issuer = `APP_URL` exactly (P `controller/well_known_controller.go`) | `APP_URL` defaults to `http://localhost:1411` | `APP_URL=<https origin>`, section 6 |
| discovery `issuer` equals config `issuer` | equal when `APP_URL` has no trailing slash; Pocket ID refuses a path | none | config `issuer` = `origin`, no trailing slash; the loader cross-check compares them |
| `id_token_signing_alg_values_supported` overlaps `algs` | advertises only the current key's alg. RS256 (RSA-2048) by default (P `service/jwt_service.go`) | none | `algs: ["RS256"]` |
| `code_challenge_methods_supported` has `S256` | advertises `plain` and `S256` | none | none. The Console always sends S256 (`sso.mjs:221`) |
| JWKS has a usable key for `algs` | one key at `/.well-known/jwks.json` | none | none. The build row's fake OP pins `use`/`alg`/`kid` as Pocket ID emits them |
| `end_session_endpoint` is https | `<APP_URL>/api/oidc/end-session` | http, if `APP_URL` is http | same fix as row 1 |
| `redirect_uri` is registered | exact match first, then wildcard patterns; loopback callbacks match any port (P `utils/callback_url_util.go`) | `ALLOW_INSECURE_CALLBACK_URLS` defaults to true | register exactly `<publicOrigin>/auth/callback`, with no `*`; set `ALLOW_INSECURE_CALLBACK_URLS=false` |
| post-logout URI | per-client `logoutCallbackURLs`, same matching | none | register exactly `<publicOrigin>/auth/signed-out` |
| ID token alg in `algs`, `iss` match | as above | none | none |
Two points the Console doesn't check, set on the client anyway:
- `pkceEnabled: true`. Then Pocket ID refuses an authorize request that has no `code_challenge`. Pocket ID has
no per-client S256-only setting (P `oidc/provider.go` turns on `plain` for the server). That doesn't relax
anything: the Console sends S256 every time, and `plain` stays available only to other clients.
- `isPublic: false`, which matches `client_secret_basic`.
Key rotation. `pocket-id key-rotate --alg ...` replaces the one signing key (P `cmds/key_rotate.go`). After a
rotation to another alg, the Console's discovery check refuses on the next restart (no overlap with
`algs`), and that is the intended fail-closed result. A rotation is a user step that updates `algs` in the
same edit. The component script never rotates.
## 4. The client, and where its secret goes
The person running the install creates the client through `component-pocket-id.sh enroll`. No agent runs
this verb. It refuses when any agent marker is in its environment: the `MARKERS` list in
`packages/bus/src/human.mjs` (`MOSAIC_RUN_ID`, `MOSAIC_BUS_CAP`, `CLAUDECODE` and the rest) that the human
boundary uses. A test pins the refusal.
Enroll needs admin rights before any person has a passkey. Pocket ID offers two ways to get them, and one of
them is a hazard:
- `/setup` and its backing `POST /api/signup/setup` are unauthenticated: whoever calls first becomes admin
(P `usersignup/service.go`). Sandboxed agents share the host's network namespace (`sandbox.mjs` unshares
user, pid and ipc, not net), so any agent could reach a loopback Pocket ID and take that first admin.
- `STATIC_API_KEY` is a fixed admin key with no expiry (P `apikey/service.go`). It doesn't count as
completing setup, so `/setup` stays open while it's set.
So enroll never lets the real unit serve before an admin person exists. It runs the pinned binary once in a
**private network namespace** (`unshare --user --net`, or `bwrap --unshare-net` with the binary and data
directory bound), where only enroll's own loopback can reach it:
1. Generate a one-run static key into a 0600 temp file in a new 0700 directory, and start Pocket ID inside
the namespace with `STATIC_API_KEY_FILE` pointing at it, plus the unit's environment.
2. Wait for `/healthz` 204.
3. Create the admin user, `POST /api/users` with `isAdmin: true` and the username and email given with
`--admin-user` and `--admin-email`. Keep the returned `id`. That is the OIDC `sub` (P
`oidc/claims_service.go` uses `user.ID`, a UUIDv4 set at creation, so it's stable).
4. Create the Console client: client id `mosaic-console-<instance>`, callback and logout URLs exactly as in
section 3, `pkceEnabled: true`, `isPublic: false`. Supply the secret instead of letting Pocket ID
generate it. Enroll generates 48 random bytes, base64url, and writes them straight to slot
`<configDir>/secrets/mosaic-stack/console-sso-pocket-id` (0600, `O_CREAT|O_EXCL`, not a symlink). It sends
the same bytes in the create body over the namespace's loopback (`dto/oidc_dto.go` accepts a supplied
secret of 16 or more characters). The value is never printed, logged or put in an argv, and a test pins
that it appears in no output.
5. Mint a one-time access token for the admin, `POST /api/users/<id>/one-time-access-token`.
6. Stop the namespaced process, then shred and remove the static key file. The real unit has never had a
static key, so no admin key survives enroll.
7. Start the real unit and wait for `/healthz` 204.
8. Print the sign-in link `<origin>/lc/<token>` to the user's terminal (section 5), and the `console.sso`
entry (section 5).
The build row confirms each route and body against the pinned tag's source before it writes the client (the
upstream read for this design didn't trace the create-client route). If any of steps 1 to 7 fails, enroll
stops the process, removes the static key, leaves no slot file it created, and refuses with the step name.
The secret never enters the repo or an image. It sits in two places only: the slot file and Pocket ID's
database (stored as a hash). The Console's `readSlot` reads it as it does any provider's.
## 5. The first person, and their subject in `console.sso`
Pocket ID is passkey-only for people (REQ-INST-2). The installing user enrolls like this:
1. Enroll prints `<origin>/lc/<token>`. The token is valid for one hour and is a credential, so it goes only
to the terminal of the person who ran enroll. It goes in no log and no file.
2. The user opens it in a browser that can reach `origin` (section 6). Pocket ID signs them in and asks them
to add a passkey. Without one they can't sign in again. If the hour passes, `pocket-id
one-time-access-token <username>` (P `cmds/one_time_access_token.go`), run by the user against the data
directory, prints a new link. `component-pocket-id.sh relink` wraps that call.
3. Enroll already has the subject, the `id` from step 3 of section 4. It doesn't wait for a sign-in or read a
`subject-unknown` log line.
How the subject gets into `console.sso`. config.json is user-authored and never auto-written. Two ways
to respect that; I recommend the first:
- **R1 (recommended).** Enroll prints the full entry and writes nothing:
```json
"console": { "sso": { "publicOrigin": "<publicOrigin>", "providers": [ {
"id": "pocket-id", "issuer": "<origin>", "clientId": "mosaic-console-<instance>",
"clientSecret": { "slot": "console-sso-pocket-id" }, "algs": ["RS256"],
"subjects": [ { "sub": "<id>", "name": "<admin-user>" } ] } ] } },
"components": { "pocket-id": { "release": "<tag>", "origin": "<origin>", "port": <port> } }
```
The user pastes it into config.json, as with Q175 step 4. Rerunning `scripts/bootstrap.sh` (or
`--instance NAME`) then validates it through the loader, including the section 1 cross-check, and writes
nothing. Nothing changes in invariant 2.
- **R2 (rejected, Sage sage-4401: R1 chosen).** `enroll --write-config` would write those two keys itself, with a backup of config.json first, and
refuse if `console` or `components` were already present. That would be the first tool to modify an
existing config.json, against canon invariant 2's "never overwritten" practice. Not built.
Whose subject. Enroll creates one person, the one running it, and only that subject goes in the entry. On
Jason's instances, only his subject goes into `console.sso` (mos-1197). Further people are added with
Pocket ID's admin UI (a user plus a one-time link), and their subjects go into `console.sso` by the user's
edit, never by an agent. Pocket ID users who aren't in `subjects` can sign in to Pocket ID, but the Console
refuses them `subject-unknown`, so REQ-WEB-2's "must map to an authorized human" holds.
## 6. Reach: origin, TLS and proxy
WebAuthn takes its RP id from `APP_URL`'s host name, and its allowed origin is `APP_URL`
(P `webauthn/module.go`). Browsers allow passkeys only on a secure origin. The Console also needs https for
both `publicOrigin` and `issuer`. Pocket ID serves plain http, and I found no TLS listener setting in its
environment config. So:
- Pocket ID always binds `127.0.0.1:<port>`. That is the default, and the component never binds anything
else (`HOST=127.0.0.1`; the status verb refuses a unit whose `HOST` differs).
- `origin` is an https origin served by a TLS front that the user already has for the Console. The Console
needs one anyway, since `publicOrigin` is https. Pocket ID goes behind the same front under **its own host
name**, for example `id.<console host>`. Pocket ID doesn't support a path prefix (`APP_URL` must have no
path). A separate host name also keeps Pocket ID's cookies apart from the Console's
`__Host-mosaic_*` cookies; the two share cookies if they sit on one host name on different ports.
- The front reaches Pocket ID on loopback, so the front has to run on the same host. If it doesn't, Pocket
ID would need a non-loopback bind, and that is a `network.expose` hard wait (REQ-WAIT-1), not a component
option.
- `TRUST_PROXY` is set to the front's address only, never `true`.
- The Console fetches discovery and JWKS from `issuer` over https from the server side, so the Console's
node has to trust the front's certificate. A public CA does that. A private CA needs
`NODE_EXTRA_CA_CERTS` in the Console unit, which the build row adds as a render flag.
These steps are the user's, and on Jason's hosts they are Jason's, because each one changes who can reach
the Console or Pocket ID, or who the host trusts:
- J1: the DNS name for `origin`;
- J2: the certificate for it, or a private CA and its trust in the browser and in `NODE_EXTRA_CA_CERTS`;
- J3: the TLS front's route from `origin` to `127.0.0.1:<port>` (a Traefik change on Jason's hosts);
- J4: any listener off loopback.
The component checks and refuses; it never does them itself. With none of them done, Pocket ID runs on
loopback with an https `APP_URL` that nothing serves yet. Enroll's step 2 health probe goes straight to
`127.0.0.1`, so enroll still works. The person can't add a passkey until J1 to J3 are done.
## 7. Agents
Unchanged. Agents keep their per-role service tokens (lead decision 44 item 6, REQ-INST-2). Pocket ID issues
nothing an agent uses. The Console client is the only client enroll creates. No API, no client-credentials
grant and no admin API key exist after enroll. Residuals, stated plainly:
- Agents can reach `127.0.0.1:<port>`, because the sandbox shares the host network. What they can reach there
is the public sign-in pages, discovery and JWKS. Signup is disabled, email codes are off, `/setup` is
closed because an admin exists, and there is no static key. A test of the rendered unit pins all four
settings.
- The data directory and the two slots are outside every sandbox bind (section 2).
- A seat that ran as the same OS user outside a sandbox could read the data directory. The Console's
existing slot has the same exposure; this design adds no new class of it.
## 8. Instances
One Pocket ID per named instance, never shared:
- Each instance has one system config (row 190), and `components` and `console.sso` live in it. A shared
Pocket ID would make one instance's config depend on a unit, a data directory and an encryption key that
belong to another instance's config and data root.
- Unit names, ports, data directory, slots and removal are all per instance (`mosaic-pocket-id-NAME`,
`<dataRoot of NAME>/components/pocket-id`), so removing one instance's component can't break another's
sign-in.
- Each instance needs its own `origin` (section 6), so passkeys are per instance too. A person enrolls once
per instance.
- An instance that wants to use another instance's Pocket ID can still do it with `--oidc existing`. Then it
is just an OIDC provider, with its own client registered by that instance's owner. Nothing special-cases it.
Two instances on one host each need their own `port`. The loader can't see other instances' configs, so
`component-pocket-id.sh` refuses at fetch and enroll when the port is already bound on loopback.
## 9. Tests, stand-ins only
No test downloads or starts a real Pocket ID, and no test touches auth.diversecanvas.com,
mosaic.woltje.com or 127.0.0.1:7332. The stand-ins:
- **Fake Pocket ID OP**, a node server like row 192's fake OP, shaped from v2.19.1:
- the discovery fields `well_known_controller.go` emits (issuer = origin, `plain` and `S256`,
`end_session_endpoint` at `/api/oidc/end-session`, the three auth methods);
- one RS256 JWK at `/.well-known/jwks.json`;
- a token endpoint that takes only `client_secret_basic`;
- `/healthz` 204.
The Console starts against it under `--sso` with the section 5 entry, with no check changed. Negative
cases:
- an http issuer refuses at load;
- an ES256-only JWKS against `algs: ["RS256"]` refuses at discovery;
- an issuer with a trailing slash refuses on the cross-check.
- **Fake admin API** on the same stand-in: `POST /api/users`, the client create, the one-time token, and a
static-key check. Enroll runs against it with the binary replaced by a stub script that serves the stand-in.
The tests pin:
- the namespace argv;
- the slot file's mode and `O_EXCL`;
- that the secret appears in no stdout, stderr or argv;
- the static key file gone after success and after a failure at each step;
- the refusal under an agent marker in the environment.
- **Fetch**: a local file served by a test https server (self-signed, trusted only by the test) with a
matching pin, a mismatched pin and a truncated file.
- **Unit render**: the environment table in section 2. `HOST=127.0.0.1`, no `STATIC_API_KEY`, no
`ENCRYPTION_KEY` value in the text, and `ALLOW_USER_SIGNUPS=disabled`.
- **Loader**: test-config.sh cases for the `components` key and the cross-check, and the copy-rollback note.
- **Sandbox**: `<dataRoot>/components/` is in no bind list.
## 10. Build rows, in landing order
All are post-v1 (REQ-INST-2). Each row has Webby or Sage's named reviewer and its own gate. None of them
runs on .53, .54 or dragon-lin, and none installs Pocket ID on any host.
1. **P1, loader key.** `components["pocket-id"]` in `mosaic-config.mjs`, strict inside the key, and the
cross-check against `console.sso` (section 1, M1 conditions from mos-1666 item 3). P1 also writes the
rollback order into `docs/TOOLS.md` beside Q175's: remove `components` (restore the backup) before the
pointer goes back, and the post-rollback STATE check confirms the key is absent from config.json. Gate:
test-config.sh green with the four M1 cases.
2. **P2, pin and fetch.** `scripts/pocket-id-pins.sh` with the build-time sha256 and the
attestation evidence, and `component-pocket-id.sh fetch|verify`. Gate: the fetch tests against the local
stand-in; the evidence file shows `gh attestation verify` output for each pinned asset.
3. **P3, unit.** The unit template, `render|install|status|remove|purge`, and the encryption key slot. Gate:
the render and remove tests, and the sandbox bind test.
4. **P4, enroll.** The namespaced bootstrap, the client, the subject, `relink`, and printing the entry (R1),
(R2 rejected). Gate: the enroll tests in section 9, and a secret-leak grep over every test log.
5. **P5, Console against the fake Pocket ID.** The section 9 fake-OP start tests, and the
`NODE_EXTRA_CA_CERTS` render flag for the Console unit. Gate: the webui suite, with no change to
`sso.mjs` checks (a diff of `sso.mjs` and `sso-config.mjs` against the base shows none).
6. **P6, installer option.** `--oidc existing|bundled` on REQ-INST-3's install command, calling P2 to P4 in
order, and the docs: `docs/TOOLS.md`, the host run sheet's J1 to J4 steps. Gate: the installer's own
suite against the stubs; the docs list J1 to J4 as the user's steps.
## Open items for review
- M1 approved by Mos with three conditions (mos-1666 item 3), written into section 1 and P1.
- M2 dropped: Sage chose R1 and rejected R2 (sage-4401).
- **Q1 (Webby):** the private network namespace for enroll (section 4). The other option is to start the
real unit and race `/setup`, which I think is unsafe while agents share the host network.
- **Q2 (Webby):** one-providers-entry for the bundled choice (section 1). REQ-INST-2's wording reads that
way. Mixing a bundled Pocket ID with existing providers would need Sage's ruling.
- Not covered: Pocket ID for Vikunja or Gitea people sign-in (the Researcher note's part 3), and
client-credentials between Mosaic services. Neither is in Q203.
+482
View File
@@ -0,0 +1,482 @@
# Row 193 design: many humans per business, human roles, private and shared threads
Morgana (Opus 5.5), 2026-10-20. Revision 5: sage-1373 item 1 (mos-1023 item 2), the user sentence names every record the owner sees. Revision 4: duckworth-0011 B3 and N5. Revision 3: duckworth-0008 B1, B2 and N1-N4, sage-1368. Revision 2: sage-1354 (5.7 private from the owner, 193b split) and gizmoduck-0018 (coverage and the R4 predicate in FED r4.1). Gitea #1691, queue row 193, brief `docs/plans/2026-10-20_human-users.md`
(blob f7472d1e47b1). Reviewer Duckworth, gate owner Sage. Base: `refactor` at 53bb59462.
Read for this design: COMMON.md (53bb59462), the brief, Gizmoduck's federation design r4.4 (b67bc6de9 on
gizmoduck/federation-design, cited as FED; r3.1 a2840a6be was read first), Duckworth's federation reviews (b402197ff, 03a663cd7,
45cbe5896 on duckworth/reviews), Sage's Q175 SSO design (`agents/sage/work/q175-sso/DESIGN.md`), the row 192
and row 196 briefs, Darkwing's row 190 packet (uncommitted, sha256 5493c9df3ec0...), and the bus, business,
cli and webui code at the lines cited. Messages: morgana-0001 to 0003, sage-1338, gizmoduck-0009,
gander-0002 and gander-0005.
## 1. Summary
- Three human roles: **owner**, **collaborator**, **viewer**. The owner is the business file's one `human`,
as today. Collaborators and viewers are access.json users, the same store federation uses (FED 3.5).
Their role is the `level` of a grant, so a role is per project and instance, not per person.
- Every human principal is minted by one bus verifier, owned by row 196 (Gander). Row 193 states what it
needs from that verifier (section 6) and adds no second mechanism.
- Threads stay private to their owner by default. A thread owner may share a thread, read-only, with a
named user, with the owner, or with everyone granted on it. Shares live in a new append-only bus table,
`thread_shares`. This is a deviation from brief point 4, agreed by Sage (sage-1338), for Duckworth to rule
on (section 5.1).
- A share never widens a grant. It counts only while the reader's live grant covers the thread's project
and instance, and while the thread's owner still has coverage. Revocation, expiry and unsharing take
effect on the next request.
- Existing businesses keep working unchanged: every existing thread is already owned by the business
human, and an instance without access.json has exactly one human, the owner.
- The build splits so the part without a schema change can land first. `thread_shares` needs schema 3j and
a `--migrate` window with Jason.
## 2. What exists today (measured at 53bb59462)
- One `human` per business (`packages/business/src/business.mjs:160`). `bindHuman` refuses any other name
(`packages/bus/src/broker.mjs:532-538`).
- The owner's CLI proof is path-bound (#225): `verifyHuman` checks uid, start time, nonce
(`MOSAIC_BUS_CLI_NONCE`), `argv[1]` equal to the tree's `human-cli.mjs`, then walks parents and refuses
agent markers, launch records and agent binaries (`packages/bus/src/human.mjs:64-96`).
`authenticateHuman` binds the proof to `businesses[business].human` (`packages/bus/src/runtime.mjs:175-182`).
- Threads: `threads(seq,id,at,business,project,instance,owner,name)`, append-only
(`packages/bus/schema.sql:247`, triggers at :310-312). `#owner(s)` returns `tester` or `s.human`
(broker.mjs:364-366). `#thread` refuses a non-owner with `thread-not-owned` (:357-362).
- Thread verbs are gated `if (!s.tester) this.#human(s)`: `project.list` (:2318), `thread.create` (:2325),
`thread.list` (:2351, owner filter), `thread.open` (:2365), `thread.send` (:2374, writes `human.input`
for the human only), `thread.messages` (:2401).
- Board reads are business-wide and human or reader only: `inbox`, `agents`, `tasks`, `trail` (:2143-2167),
`decisions` (:2174), `credentials` (:2195), `messages` (:2217, `to_role='human'`), `replies` (:2422).
`trail` and `replies` return any message in the business by id (:2679-2700, :2422-2432).
- The Console reads threads by polling the same verbs (`packages/webui/src/chat.mjs:22-26`). It has no
stream, so a refusal on the next poll ends access.
- The launcher restarts a thread with pending messages as the business human
(`packages/cli/src/launcher.mjs:533-542`).
## 3. The human model (brief point 1)
### 3.1 Who the humans are
| Human | Where it is declared | How many | Identity |
|---|---|---|---|
| owner | business file `human` (unchanged) | exactly one per business | the business human's name |
| user (collaborator or viewer) | access.json `users[]` with `home: "local"` (or a peer id under federation) | any number | `user:<id>` |
| tester | not a human; row 177 test principal | one | `tester` |
The owner stays outside access.json (FED 9 Q2). A business has no second owner and no admin level. Adding
one is out of scope; section 9 lists it as a follow-up for Jason.
### 3.2 How a sign-in or a call becomes exactly one human
| Entry | Becomes | Checked by |
|---|---|---|
| Console SSO session whose `(provider, sub)` is in `console.sso.providers[].subjects` (row 192) | the owner | the Console after OIDC checks, then the bus verifier (row 196) |
| Console SSO session whose `(provider, sub)` is a `users[].subjects` entry in access.json with a live grant | that one user | same |
| Console SSO session matching neither | nobody: refused | the Console, and the bus refuses any later claim |
| CLI call through `human-cli.mjs` that passes the human proof | the owner | the bus (`verifyHuman`) |
| Any other process, including an agent | nobody | the bus |
Why each is exactly one:
- The R1 loader refuses a `(provider, sub)` pair that appears twice in access.json or also in
`console.sso.subjects` (FED 3.5). So one subject maps to at most one human.
- A user id can't be `human`, `tester` or any business's human (FED 3.5). So a user can't be named as the
owner.
- A terminal maps only to the owner. The only identity the bus can verify for a local process is the
instance's OS user, and that is the owner's. A user has no CLI path in row 193. This follows Mos's B1 rule
(mos-0985): the principal comes from what the bus verifies, never the process's own claim.
- The bus never reads a user name from a request body as identity. The verifier returns the principal
(section 6).
## 4. Human roles (brief point 2)
### 4.1 The three roles
- **owner**: everything the business human does today. Only the owner restructures the organization
(business file writer, project and role changes) and only the owner manages users and grants.
- **collaborator**: FED 3.5's level, unchanged. Creates threads in granted projects on granted instances,
sends into and opens its own threads, and in row 193 also shares its own threads.
- **viewer**: new. Reads threads shared with it, within its grant. It creates, opens and sends nothing, so
it never drives an instance. FED 3.5 notes that a collaborator's message drives the instance with the
owner's role authority (F10). A viewer has none of that.
The word "collaborator" stays, so FED's tests and help text need no rename. The brief's example "member" is
this level.
A role is the `level` on a grant, and a grant is per business, project set and instance set. A user may
hold a collaborator grant on one project and a viewer grant on another. Every check asks "does a live
grant of a level that allows this verb cover this project and instance". A user has no single role.
### 4.2 R1 widening
FED R1 refuses any level but `collaborator`, because the 10-27 slice ships only that (FED 9 Q2).
Row 193 widens R1's level check to `collaborator` or `viewer`, with its own test that each is accepted and
anything else refuses. Nothing else in the access file changes. If R1 has not landed when row 193 builds,
this one-line widening goes into the row 193a candidate chained on R1's candidate (Q177).
### 4.3 Bus verbs per role
Every verb not in a user's column fails `access-refused` before its own checks, as FED 3.5 requires for
collaborators. That covers every owner verb, every board read, `message.*`, `decision.*`, project files,
`spec.read`, `assistant.stop`, `launch.*`, `name.set`, `usage.*` and `access.reload`.
| Verb | owner | collaborator | viewer |
|---|---|---|---|
| `project.list` | all | projects covered by any live grant | projects covered by any live grant |
| `thread.create` | yes | collaborator grant covers project and instance | refused |
| `thread.list` | own threads | own threads still covered | own threads still covered (from an earlier collaborator grant) |
| `thread.list {shared: true}` (new) | threads shared with the owner | threads shared with me and readable (5.4) | same |
| `thread.open` | own | own, collaborator grant still covers | refused |
| `thread.send` | own | own, collaborator grant still covers, no `human.input` | refused |
| `thread.messages` | own, or shared with the owner | own (any level still covering), or shared and readable | same as collaborator |
| `thread.share`, `thread.unshare` (new) | own threads | own threads, collaborator grant still covers | refused |
| `thread.shares` (new) | own threads | own threads | refused |
| `names` | all | instances covered by any live grant | instances covered by any live grant |
| every other verb | as today | refused | refused |
Notes:
- `thread.list` keeps its response shape exactly. Shared threads come only from `thread.list {shared: true}`,
whose rows add `owner`. The Console and existing tests read the plain list unchanged.
- A viewer can still read its own threads when a collaborator grant is lowered to viewer, but can't send
or open them. This is the downgrade path.
- The tester keeps its row 177 verbs. It can't share or be shared with: `thread.share`, `thread.unshare`
and `thread.shares` fail `tester-refused`, and a share target is never `tester`. Agent testers (Q173) test
sharing through the bus suites, not the live 7333 listener.
- `reader` sessions (Console read caps, broker.mjs:1303) are the owner's board view and stay owner-only.
A user never gets a reader session.
### 4.4 Console per role
- owner: as today, plus a share control on each own thread and a "Shared with me" list.
- collaborator: the chat view only, for granted projects (FED R6's granted-user sign-in), plus share
controls on its own threads and "Shared with me". No board.
- viewer: "Shared with me" and its own old threads, read-only. No composer, no open, no share control.
- The Console hides controls a role can't use, but the bus check is authoritative. A Console bug can't
widen a grant (FED 3.6). Each role gets a webui test with the UI check removed (mutant) that the bus still
refuses.
### 4.5 Who manages humans and roles
Only the owner, through `mosaic access` (FED R5), which checks the human proof and refuses tester and agent
callers. Row 193 needs from R5:
- `mosaic access user add <id> --home local --subject <provider>:<sub>` and `user remove <id>`;
- `--level viewer` on `grant`;
- the receipt line in `<dataRoot>/state/access-log.jsonl` and the `access.reload` call, as FED R5 has.
If R5 has no `user` verbs when row 193 builds, row 193c adds them on R5's candidate. The Console gets no
user or grant writes in row 193: a write from the Console would need a new owner verb that writes
access.json from the bus, and access.json is a config file only the owner's CLI writes. A read-only users
page for the owner is a follow-up (section 9).
The owner keeps every restructuring power (TARGET Case 1). Users can't touch the business file, projects,
roles or access.json.
## 5. Private and shared threads (brief point 3)
### 5.1 Deviation from brief point 4, agreed by Sage (sage-1338)
Brief point 4 says access.json is the one store. Users, roles and grants live there. Per-thread shares do
not, for three reasons (morgana-0002):
- F1. Thread ids are bus-generated UUIDs. A hand-typed share with a typo would fail the loader, and the
loader refuses the whole file on any failure, which revokes every user.
- F2. Only the owner writes access.json. A collaborator could never share its own thread.
- F3. Threads are append-only bus rows, and a share is a runtime act by a principal that wants a trail.
So shares go in an append-only bus table, gated by the grant. Sage agreed (sage-1338). Gizmoduck had no
objection (gizmoduck-0009) and recorded it as FED 9 Q2. Duckworth rules on it in this review.
### 5.2 Schema 3j
```sql
CREATE TABLE thread_shares (
seq INTEGER PRIMARY KEY AUTOINCREMENT,
at TEXT NOT NULL,
business TEXT NOT NULL,
thread TEXT NOT NULL REFERENCES threads(id),
op TEXT NOT NULL CHECK (op IN ('share','unshare')),
target TEXT NOT NULL,
by TEXT NOT NULL
) STRICT;
CREATE INDEX thread_shares_thread ON thread_shares (thread, target, seq);
-- no_update, no_delete and no_replace triggers, as thread_opens has (schema.sql:319-321).
```
- `target` is an owner string: `user:<id>`, the business human's name, or `*`. A share whose target is a
name that is no longer the business's `human` (after a rename) is void: rule 1 in 5.4 compares against
the current owner string, so it matches nobody (Duckworth N4).
- `by` is the sharer's owner string, which is always the thread's owner.
- A share's state is its latest row per `(thread, target)` (Duckworth N12, REVIEW-r3.md:74-76). Shares
are not assumed to only grow.
- No existing row changes. Existing threads are already owned by the business human (`#owner` at
broker.mjs:364-366), so they are the owner's and private. The brief's "all become the current human's"
is already true.
The migration `3i-3j.sql` creates the table, index and triggers. `thread_shares` joins every table list that
holds timed append-only tables: `timedTables` in store.mjs (:60-74), the broker's clock list
(broker.mjs:223-235), the restore guard's counted tables (row 181) and `COUNTED` in
`scripts/stack-release.sh:315`. The schema digest for 3j is pinned as the other versions are.
### 5.3 Verbs
- `thread.share {thread, to}`: the caller must own the thread (`thread-not-owned`). For a user, a
collaborator grant must still cover the thread. `to` is `user:<id>`, the business human's name or `*`.
A `user:<id>` target must have a live grant, of any level, covering the thread's project and instance,
else `share-not-covered`. Sharing with yourself fails `invalid-request`. A share that is already in force
fails `share-exists`. Writes one `share` row.
- `thread.unshare {thread, to}`: the caller must own the thread. The share must be in force, else
`share-not-found`. Writes one `unshare` row. Unsharing the owner's or `*` shares works the same way.
- `thread.shares {thread}`: the caller must own the thread. Returns the shares in force, latest row each.
- Both writes go through `refuse()` on failure, so each refusal records `action.refused` with `by` set
(FED 3.6 item 6).
### 5.4 The read check, one function
`#readable(s, t)` decides whether a session may read thread `t` it doesn't own. True only when all hold:
1. a share for `t` is in force whose target is the caller's owner string, or `*`;
2. the caller is the owner, or the caller has a live grant of any level covering `t.project` and
`t.instance`;
3. if `t.owner` is a user, that user still has a live grant covering `t` (a revoked owner hides the
thread, sage-1338);
4. `t.owner` is not `tester`.
`#thread(s, id)` keeps its owner check for `thread.open`, `thread.send`, `thread.share`, `thread.unshare`
and `thread.shares`. A new `#threadRead(s, id)` admits the owner or `#readable`, and serves only
`thread.messages`. A sharee fails `thread-not-owned` on every write verb.
### 5.5 Every read path and its filter
| Read path | Today | After row 193 |
|---|---|---|
| `thread.list` | `owner=?` | unchanged for the owner; for users also each row's thread still covered |
| `thread.list {shared: true}` | none | rows where `#readable` holds |
| `thread.messages` | `#thread` | `#threadRead` |
| `thread.open`, `thread.send` | `#thread` | `#thread`, plus a collaborator grant for users |
| `project.list`, `names` | business-wide | per FED 3.5 for users, unchanged for the owner |
| `trail`, `replies` | human, reader or tester; any message by id | users refused (`access-refused`); for the others, messages in other users' unshared threads hidden (5.7) |
| `messages`, `inbox`, `agents`, `tasks`, `decisions`, `credentials` | human or reader | users refused (`access-refused`); owner unchanged. A user-thread run can't send to the human (`user-thread-human`, FED 3.6), so `messages` holds none of a user's thread |
| `message.receive` by a run | its own thread (:1933) | unchanged: runs read their own thread, never a share |
| `threadsState` (launcher) | all threads | adds `revoked` per 5.6 |
### 5.6 Revocation, expiry and unsharing
Gizmoduck asked that a grant loss end access to threads shared with that user (gizmoduck-0009 point 2).
- A sharee holds no claim and no run. Its access is only reads, and every read runs `#readable` against the
access state the broker already refreshes on each request (mtime, size, inode), on its 30 s timer, and on
`access.reload` (FED 3.7). So a removed, expired or invalid grant ends share reads on the next request,
with nothing to tear down. The Console polls, so a revoked sharee's next poll fails.
- An unshare row ends access on the next request in the same way.
- A user who loses coverage of their own thread also loses its shares: rule 3 in 5.4.
The downgrade case. With viewer, "no live grant covers" would be wrong for runs: a viewer grant covers the
thread but must not let a run continue. FED puts this in R4: `revoked`, claim end and the launch check call
`covers` with level `collaborator`, so a downgrade to viewer ends the run within one launcher tick. FED r4.4
(b67bc6de9, mos-1020) chains R4 after row 193's viewer level (193a) and keeps the level-loss test and its
mutant in R4. Row 193 carries neither (Duckworth N3), so the mutant has one owner.
### 5.7 What "private" means, stated plainly
Sage ruled (sage-1354): a user's thread is private from the owner on the bus too. Jason's words are "private
agent sessions per user", and in Case 2 the owner of Melanie's hub is not the user whose thread it is.
Duckworth's B1 asked where the line sits, since a user-thread run acts with the owner's role authority (F10).
I took Duckworth's option (a): **the user's messages are private, and the run's governance is not.** The
run spends the owner's authority, so its decisions, task writes and claims are the owner's to see and
answer. Filtering them too (option b) would need a thread link on `decisions`, more schema, and would hide
from the owner what is done in the owner's name.
Every read an owner or reader session has, and its side of the line:
| Read | Shows | Side |
|---|---|---|
| `thread.list`, `thread.messages`, `thread.open` | own threads only, plus shares to the owner from 193b2 | private: other users' threads never appear |
| `trail` | events, messages, decisions and deliveries by subject | messages filtered (below); decision rows and their events stay visible |
| `replies` | messages replying to an id | filtered (below) |
| `messages`, `message.receive`, `message.read` | messages `to_role='human'` (broker.mjs:1931-1936, :1953) | private by construction: a user-thread run can't send to the human (`user-thread-human`, FED 3.6 item 7) |
| `inbox` | open decisions routed to the human | governance, visible |
| `decisions {list: roles \| recent}` | decision rows with question, options and recommendation | governance, visible |
| `agents` | role claims and each held role's state | governance, visible |
| `tasks`, `state` | tracker tasks and launch state | governance, visible |
| `credentials`, `usage` | credential state, usage records | governance, visible; neither holds message text |
| `project.files`, `project.file` | project files, including records a run writes with `record.write` (broker.mjs:1395-1407, :1441-1450) | governance, visible |
| `project.list`, `names` | projects and instance names | business-wide for the owner, visible |
So a decision a user-thread run raises shows in the owner's `inbox` or `decisions`, with the free text the
run wrote. Its role claims show in `agents`, its task writes in `tasks`, and a record it writes in
`project.file`. Any of these can quote the user, and 5.7 doesn't call them private. The users' help text
(R5) and the Console's share and thread pages say so in one sentence, which FED R6 reuses (mos-1023 item 2,
duckworth-0012 N21):
> The business owner sees your thread's agent's decisions, inbox entries, claims, tasks and project files,
> but not your messages.
The gated-raise route. A user-thread run's uncited gated raise or hard wait routes to the human (broker.mjs:1677-1680).
FED r4.5 (acd5f1f42, B9) settled this with no guard: the tester guard at :1683 (`tester-thread-human`) is not
copied, and the decision reaches the owner's inbox and no other (sage-1368, mos-1021, mos-1022). FED R3 tests it.
Row 193 adds nothing here.
The message filter. A message is hidden from a session when it is in a thread (`message_threads`) whose owner
is a `user:<id>` other than the caller, and `#readable(s, t)` is false. Threads owned by the business human or
by `tester` are not affected, so row 177's behaviour is unchanged.
- `trail`: drops hidden messages, their `deliveries` rows, and `events` rows whose `subject` is a hidden
message id. A `subject` that is itself a hidden message returns `message-not-found`, as an unknown id does,
so the reply doesn't confirm the id exists.
- `replies {id}`: a hidden `id` fails `message-not-found`, and hidden messages are dropped from the result.
- It applies to every session that can call these verbs: the owner, reader sessions and the tester.
- It lands in 193b1, with no schema (Duckworth B2). Before 193b2 there are no shares, so `#readable` is false
for anyone but the thread's owner and b1 hides every message in another user's thread. 193b2 adds only the
share exception. So no build order can put a user thread live without the filter.
What it does not do. The owner holds the store as the instance's OS user and can read it with sqlite. That is
the same-uid limit in section 6, not a bus path. An owner audit verb, explicit and logged, is a follow-up row
only if Jason asks for one (sage-1354).
## 6. The bus human boundary (brief point 5)
Row 196 (Gander, #1694, brief `docs/plans/2026-10-20_human-boundary.md` at 96f243faf) owns P19 333 and the
verifier. Row 193 cites it and designs no boundary of its own (sage-1338: one mechanism).
Agreed with Gander (gander-0002, morgana-0003, gander-0005):
- One bus verifier, `verifyPrincipal(request, connection) -> {kind, business, id}`, kind `owner`, `user` or
`tester`. It mints one transient principal per request. It returns no role. The broker reads the level
from the live grant on every request, so a grant change acts without a new principal.
- Gander recommends FED 3.6's shape for users (path-bound `user-cli.mjs`, direct parent the bus tree's
`packages/webui/src/cli.mjs serve`) plus kernel peer PID binding, and weighs bus-side ID-token
verification as the larger alternative.
- Correction from Gander, accepted: the tester proof doesn't run the full agent walk, because agents bind
tester by design (Q173). Managed runs still fail it. The tester listener moves from TCP 7333 to a private
Unix socket, with `bus.tester` unchanged (agreed by Sage with Gander).
What row 193 needs from row 196:
- H1. Owner on the CLI keeps today's proof. Owner in the Console is a `console.sso.subjects` entry.
- H2. A user principal comes only from an OIDC sign-in, through a path the bus verifies. No CLI path for
users.
- H3. The user binding fails closed on no live grant, an unknown subject, a subject also in
`console.sso.subjects`, or a missing or invalid access.json. A broken access.json never stops the owner.
- H4. Agent processes never get an owner or user principal.
- H5. Revocation ends a bound user within 30 s and at once on `access.reload`, from the same access state
row 193's share check reads.
The same-uid limit. Within one instance, a non-agent process on the instance's uid can claim the owner, and
can start its own Console copy and claim any granted user (FED 3.6). An unsandboxed same-uid agent that
detaches from its ancestry can do the same. The walk doesn't stop that, and Gander's design won't claim it
does (gander-0005). Several humans don't make this worse: a user principal is no stronger than the owner
principal that the same process could already take. Users themselves are not on the uid. They reach the
bus only through the Console, so the limit is about local processes, not other humans.
Does row 190 narrow it? Row 190 runs several instances under one uid, so no. Row 190b puts an instance (the
hub) under its own Linux user (mos-0986). That narrows reach across instances: another instance's uid fails
the uid check (human.mjs:67) and can't read the hub's store or access.json. It does not narrow reach within
one instance. Private threads are private from other humans using the bus, not from processes running as
the instance's uid.
## 7. Migration and rollback (brief point 6)
- No access.json: the business has exactly its owner, every verb behaves as today, and the share verbs
work for the owner only (target `*` or none). A broken access.json revokes users and leaves the owner.
- Existing threads: already owned by the business human. Nothing is rewritten.
- Schema: 3i to 3j adds `thread_shares` only. A re-pin past a schema bump needs a `--migrate` window with
Jason, and row 185's backup before activate covers it.
- Rollback before any share is written: activate the previous copy with the store restored from the
pre-activate backup. A 3i copy refuses a 3j store, as it does for every bump.
- Rollback after shares are written: the same restore loses shares made since the window. Grants are in
access.json and survive. Users re-share. Row 181's restore guard counts `thread_shares`, so the loss is
shown, not silent.
- To keep that window small, the build splits (section 9): 193a, 193b1, 193c and 193d have no schema
change and can go live in any window. 193b2 carries 3j.
## 8. Tests and mutants
Bus, each in `packages/bus/tests/` (193b1: viewer, mixed grants, board reads, the 5.7 message filter and governance pin; 193b2: shares, the share exception to the filter, migration):
- Viewer: each allowed verb works, every other verb refuses `access-refused`, including `thread.create`,
`thread.open`, `thread.send` and `thread.share`.
- Mixed grants: collaborator on project A and viewer on B. Create in A works, create in B refuses.
- Downgrade: not here. FED R4 owns the level-loss test and its mutant (r4.4, mos-1020, N3).
- Shares: owner shares with `user:<id>`, the user reads `thread.messages` and gets `thread-not-owned` on
`thread.send` and `thread.open`. Share with `*` reaches every covered user and the owner. Share with a user
whose grant doesn't cover the project or instance refuses `share-not-covered`.
- A share never widens: the target's grant drops the project, the next read refuses.
- Revoke, expiry and an invalid file each end share reads on the next request. The 30 s timer and
`access.reload` paths each have a case.
- A revoked thread owner hides the thread from sharees.
- Unshare ends access. Share, unshare, share again leaves it shared (latest row wins).
- Non-owner `thread.share`, `thread.unshare`, `thread.shares` refuse. Tester refuses on all three.
- `thread.list` plain shape unchanged. `thread.list {shared: true}` returns only readable threads.
- Board reads refuse users and viewers.
- Governance pin (B1, sage-1368): a user-thread run raises a decision; it shows in the owner's
`decisions recent` with its question text, and `inbox` lists it when routed to the human; the run's
role claim shows in the owner's `agents`, its task write in `tasks`, and its `record.write` in
`project.file` (B3, sage-1373); the user's message bodies stay hidden from the owner's `trail` and
`replies`. The test names each item of the 5.7 user sentence, so the sentence and the pin match.
- `trail`, for the owner, a reader session and the tester (193b1): a user's thread message as `subject`
fails `message-not-found`; a decision trail that reaches such a message omits it, its deliveries and its
events. Once the thread is shared with the owner, the owner's trail shows it.
- `replies`, same three sessions (193b1): a hidden `id` fails `message-not-found`; hidden replies are dropped. The
owner's own and the tester's threads are unchanged.
- Migration: a 3i store with threads migrates to 3j, row counts unchanged, `thread_shares` empty and
append-only (update, delete, replace each abort). Restore-guard and `COUNTED` include it.
Business (193a): R1 accepts `viewer`, refuses any other new level.
CLI (193c): `mosaic access user add/remove` and `grant --level viewer` refuse tester and agent callers,
write a receipt line and call `access.reload`.
Webui (193d): a viewer has no composer or share control. With each UI check removed, the bus still refuses.
Mutants, each must be killed:
1. `#readable` rule 1 dropped (any covered user reads any thread).
2. Rule 2 dropped (a share widens the grant).
3. Rule 3 dropped (a revoked owner's thread stays visible).
4. Latest-row lookup replaced by "any share row" (unshare ignored).
5. (Moved to FED R4, N3: the level-loss mutant is R4's.)
6. Viewer allowed `thread.send`.
7. `#threadRead` used for `thread.send` (sharee writes).
8. `share-not-covered` check removed.
9. `thread.share` owner check removed (sharee re-shares).
10. A user allowed `trail`.
11. The `trail` filter removed (the owner reads a user's unshared message by id).
12. The `replies` filter removed (the owner reads replies in a user's unshared thread).
## 9. Build rows and order
| Row | Work | Chains on | Schema |
|---|---|---|---|
| 193a | R1 level check widened to viewer | FED R1 candidate | none |
| 193b1 | Bus: viewer verb list, per-grant level checks, users refused on board reads, the 5.7 `trail` and `replies` filter with `#readable` as owner-only | FED R3, R4 candidates, row 196 verifier | none |
| 193b2 | Bus: `thread_shares`, share verbs, the share rules of `#readable`, `#threadRead`, the 5.5 share filters | 193b1 candidate | 3j |
| 193c | `mosaic access` user verbs and `--level viewer`, if R5 lacks them | FED R5 candidate | none |
| 193d | Console: shared list, share controls, viewer read-only | FED R6, row 192 candidates, 193b2 for share controls | none |
Sage ruled the split (sage-1354): 193b1 has no schema change and can go live first. 193b2 carries 3j, and
Sage takes its migrate window to Mos when 193b2 is near. The 5.7 message filter is in 193b1 (Duckworth B2,
sage-1368), so it is live before any user thread can be, whatever order FED R8 and 193b2 land in. 193b2 adds
only the share exception. FED R4 chains on 193a (viewer level), and 193b1 chains on R4.
Coverage, settled in FED r4.1 (73677b87d, gizmoduck-0018, still under Duckworth's review). A grant's
`projects` is `["*"]` or bus project UUIDs (`projects.id`, broker.mjs:2306; `threads.project` references it).
R1 exports one pure `covers(grant, {business, project, instance}, now, {level})`. Row 193 uses only that
function and adds no second one (Sage confirmed, sage-1354):
- share reads (5.4 rules 2 and 3) and `share-not-covered`: `covers(g, thread, now, {})`, any level;
- `thread.create`, `thread.open`, `thread.send`, `thread.share`: `covers(g, thread, now, {level: 'collaborator'})`;
- `project.list` and `names` for users: any level, as FED 3.5.
`covers` needs no further argument for row 193. If r4.1 changes in review, 193b1 follows it.
Follow-ups, not in this row:
- A read-only users and grants page for the owner in the Console.
- A second owner or admin level, if Jason wants one.
- An explicit, logged owner audit verb for user threads, only if Jason asks for one (sage-1354).
## 10. Gate
Per the brief: Duckworth approves this design, then the manifest. The bus, business, cli and webui suites and
every `scripts/test-*.sh` pass on Sage's gate, and the section 8 mutants are killed. No test touches the live
directories. No product code before Duckworth approves.
+160
View File
@@ -0,0 +1,160 @@
// Offline upgrade contract: real bus verbs, pinned proxy, no real credentials.
import fs from 'node:fs';
import path from 'node:path';
import net from 'node:net';
import assert from 'node:assert/strict';
import { spawn } from 'node:child_process';
import { createHash } from 'node:crypto';
import { getPriority } from 'node:os';
import { initialConfig } from '../../../../packages/model-proxy/src/settings.mjs';
import { PIN } from '../../../../packages/model-proxy/src/common.mjs';
import { ManagementClient } from '../../../../packages/model-proxy/src/client.mjs';
import { ProxyPage } from '../../../../packages/bus/src/proxy-page.mjs';
import { Broker } from '../../../../packages/bus/src/broker.mjs';
import { Store } from '../../../../packages/bus/src/store.mjs';
const [root, binary] = process.argv.slice(2);
if (process.env.P4_UPGRADE_ISOLATED !== 'yes' || !root?.startsWith('/mnt/storage/scratch/tmp/')) throw Error('wrapper required');
if (createHash('sha256').update(fs.readFileSync(binary)).digest('hex') !== PIN.binary.sha256) throw Error('binary does not match PIN');
const reserve = net.createServer(); await new Promise(r => reserve.listen(0, '127.0.0.1', r));
const port = reserve.address().port; await new Promise(r => reserve.close(r));
if (port === 8317) throw Error('forbidden port');
const management = 'p4-management', canary = 'p4-upstream';
const config = initialConfig({ dataRoot: root, port, key: management, sentinel: 'msk-fixture-sentinel-x' });
config.management['disable-control-panel'] = true; config.observability.logs['logging-to-file'] = false;
fs.mkdirSync(path.join(root, 'proxy/auth'), { recursive: true, mode: 0o700 });
fs.mkdirSync(path.join(root, 'home'));
fs.writeFileSync(path.join(root, 'config.yaml'), JSON.stringify(config), { mode: 0o600 });
const child = spawn(binary, ['-config', path.join(root, 'config.yaml'), '-local-model'], {
cwd: root, env: { HOME: path.join(root, 'home'), PATH: '/usr/bin:/bin' }, stdio: 'ignore',
});
// Diagnostic-only (sage-4432): observe the same run conditions, never change
// priority or print exception values, fixture credentials or upstream content.
let stage = 'binary-start', lastClientErrorCode = null;
const clientErrorCodes = ['proxy-client-down', 'proxy-client-response', 'proxy-client-refused',
'proxy-client-redirect', 'proxy-client-invalid'];
const errorCodes = [...clientErrorCodes, 'ERR_ASSERTION', 'ERR_SQLITE_ERROR', 'SQLITE_ERROR',
'proxy-down', 'not-configured', 'human-required', 'invalid-request', 'invalid-business',
'priority-invalid', 'priority-unconfirmed', 'priority-write-refused', 'login-state-unknown'];
function schedulingPolicy(pid) {
try {
// Only our Node process or the still-live child we spawned. Never print
// raw /proc content; retain just Linux's numeric scheduling-policy field.
const policy = fs.readFileSync(`/proc/${pid}/sched`, 'utf8').match(/^policy\s*:\s*(\d+)\s*$/m)?.[1];
return policy === undefined ? null : Number(policy);
} catch { return null; }
}
function observe() {
let nodePriority = null, childPriority = null, childSchedulingPolicy = null;
try { nodePriority = getPriority(); } catch {}
if (Number.isInteger(child.pid) && child.exitCode === null && child.signalCode === null) {
try { childPriority = getPriority(child.pid); } catch {}
childSchedulingPolicy = schedulingPolicy(child.pid);
}
console.log('P4 diagnostic ' + JSON.stringify({ stage, nodePriority, childPriority, lastClientErrorCode,
nodeSchedulingPolicy: schedulingPolicy(process.pid), childSchedulingPolicy,
childExitCode: Number.isInteger(child.exitCode) ? child.exitCode : null,
childSignal: /^SIG[A-Z0-9]{1,16}$/.test(child.signalCode ?? '') ? child.signalCode : null }));
}
child.once('exit', observe);
let store;
const pause = ms => new Promise(r => setTimeout(r, ms));
const receipts = [], answers = [];
const client = new ManagementClient({ baseUrl: `http://127.0.0.1:${port}`, key: management, receipt: r => receipts.push(r) });
try {
console.log('P4 offline upgrade version=' + PIN.version + ' nice=' + getPriority());
observe();
let ready = false;
for (let n = 0; n < 100; n++) {
try { await client.getCredentials(); ready = true; break; }
catch (error) { lastClientErrorCode = clientErrorCodes.includes(error.code) ? error.code : 'unclassified'; await pause(50); }
}
assert.equal(ready, true, 'fixture listener starts');
stage = 'management-ready'; observe();
stage = 'store-open';
store = new Store(root);
observe();
const page = new ProxyPage({ client, instanceTag: 'fixture' });
const broker = new Broker({ store, proxyPage: (...args) => page.request(...args), businesses: {
demo: { id: 'demo', human: 'owner', roles: { coder: { authority: { withinRole: [], crossRole: [] } } }, arbiters: { technical: 'coder', delivery: 'coder' } },
} });
const cap = broker.bindHuman({ business: 'demo', human: 'owner', via: 'cli', outsideAgent: true });
stage = 'broker-bound'; observe();
const call = async (verb, args = {}) => { const answer = await broker.request(cap, { verb, args }); answers.push(answer); return answer; };
stage = 'initial-accounts'; observe();
// Diagnostic-only (sage-4448/4452, mos-1683): one direct empty-provider
// read, types/counts only. Never print field names, values or error text.
const receiptCount = receipts.length;
try {
const groups = await client.getUpstreamGroups();
const isArray = Array.isArray(groups);
console.log('P4 empty-provider diagnostic ' + JSON.stringify({
httpStatus: receipts.length === receiptCount + 1 ? receipts.at(-1).status : null,
type: groups === null ? 'null' : typeof groups, isArray,
count: isArray ? groups.length : groups !== null && typeof groups === 'object' ? Object.keys(groups).length : 0,
}));
} catch (error) {
console.log('P4 empty-provider diagnostic ' + JSON.stringify({
httpStatus: receipts.length === receiptCount + 1 ? receipts.at(-1).status : null,
code: clientErrorCodes.includes(error.code) ? error.code : 'proxy-client-error',
}));
}
assert.deepEqual((await call('proxy.accounts')).accounts, []);
console.log('proxy.accounts initial empty; GET /credentials + GET /config/api-keys/claude');
for (const provider of ['claude', 'codex']) {
const login = await call('proxy.login.start', { provider });
assert.equal(typeof login.url, 'string'); assert.equal(typeof login.state, 'string');
console.log('proxy.login.start ' + provider + ' GET /oauth/auth-url; fields=url,state only');
const redirect = provider === 'claude' ? 'http://localhost:54545/callback' : 'http://localhost:1455/auth/callback';
const submitted = await call('proxy.login.submit', { redirect_url: redirect + '?state=' + encodeURIComponent(login.state) + '&code=p4-fake-code' });
assert.notEqual(submitted.status, 'ok');
const status = await call('proxy.login.status', { state: login.state });
assert.notEqual(status.status, 'ok');
console.log('proxy.login.submit POST /oauth/callback; fake code never ok; GET /oauth/status=' + status.status);
if (status.status === 'wait') {
assert.equal((await call('proxy.login.cancel', { state: login.state })).status, 'cancelled');
console.log('proxy.login.cancel DELETE /oauth/session confirmed');
}
}
await call('proxy.apikey.add', { provider: 'z.ai', key: canary }); await pause(200);
const accounts = (await call('proxy.accounts')).accounts;
assert.equal(accounts.length, 1); assert.equal(accounts[0].provider, 'z.ai');
assert.deepEqual(Object.keys(accounts[0]).sort(), ['accountId', 'displayName', 'priority', 'provider', 'status']);
console.log('proxy.apikey.add PUT /config/api-keys/claude; account fields=accountId,provider,displayName,status,priority; id from auth_index');
await call('proxy.priority.set', { accountId: accounts[0].accountId, priority: 7 });
assert.equal((await call('proxy.accounts')).accounts[0].priority, 7);
console.log('proxy.priority.set API-key PUT /config/api-keys/claude; priority read-back=7');
const keys = await call('proxy.keys');
assert.equal(keys.keys.length, 1); assert.equal(keys.keys[0].management, 'sentinel'); assert.match(keys.keys[0].keyId, /^[a-f0-9]{12}$/);
console.log('proxy.keys GET /config/access/api-keys; fields=keyId,management,agent,issuedAt,state; sentinel labelled; values absent');
// Fixture-only upload exercises the OAuth priority API relied on by the page.
const uploaded = await fetch(`http://127.0.0.1:${port}/v8/management/credentials?name=p4-fixture.json`, {
method: 'POST', headers: { Authorization: `Bearer ${management}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ type: 'claude', access_token: 'p4-access', refresh_token: 'p4-refresh', expired: '2099-01-01T00:00:00Z' }),
signal: AbortSignal.timeout(5000), redirect: 'error',
});
assert.equal(uploaded.status, 200); await uploaded.body?.cancel(); await pause(200);
const oauth = (await call('proxy.accounts')).accounts.find(a => a.provider === 'claude');
assert.ok(oauth);
await call('proxy.priority.set', { accountId: oauth.accountId, priority: 8 });
assert.equal((await call('proxy.accounts')).accounts.find(a => a.accountId === oauth.accountId).priority, 8);
console.log('proxy.priority.set OAuth PATCH /credentials/fields body={name,priority}; priority read-back=8');
for (const value of [canary, management, 'p4-access', 'p4-refresh', 'p4-fake-code']) {
assert.equal(JSON.stringify(receipts).includes(value), false, 'secret absent from receipts');
assert.equal(JSON.stringify(store.all('SELECT body FROM events')).includes(value), false, 'secret absent from bus events');
assert.equal(JSON.stringify(answers).includes(value), false, 'credential/code absent from bus replies');
}
console.log('PASS offline native-page bus contract and secret-free receipts');
} catch (error) {
// Never print assertion actual/expected values or a raw upstream exception.
observe();
const errorClass = ['Error', 'AssertionError', 'ProxyError', 'BusError', 'TypeError', 'RangeError'].includes(error.name) ? error.name : 'Error';
console.error('P4 upgrade FAILED ' + JSON.stringify({ stage, errorClass,
code: errorCodes.includes(error.code) ? error.code : 'acceptance-failed' }));
process.exitCode = 1;
} finally {
store?.close(); child.kill('SIGTERM');
await Promise.race([new Promise(r => child.once('exit', r)), pause(3000).then(() => child.kill('SIGKILL'))]);
}
// One end-to-end acceptance phase, emitted only after assertions and cleanup.
console.log(`# tests 1\n# pass ${process.exitCode ? 0 : 1}\n# fail ${process.exitCode ? 1 : 0}\n# skipped 0\n# cancelled 0`);
+13
View File
@@ -0,0 +1,13 @@
#!/usr/bin/env bash
# P4 PIN upgrade acceptance; outside scripts/test-*.sh, requires Sage's slot.
set -euo pipefail
HERE=$(cd "$(dirname "$0")" && pwd)
BINARY=${1:?P1 verified fetched executable required}
export TMPDIR=$(mktemp -d /mnt/storage/scratch/tmp/XXXXXX)
trap 'rm -rf -- "$TMPDIR"' EXIT
timeout -k 10 120 nice -n $((19 - $(nice))) unshare -rn bash -c '
set -e
ip link set lo up
export P4_UPGRADE_ISOLATED=yes
exec node "$1/acceptance.mjs" "$TMPDIR" "$2"
' bash "$HERE" "$BINARY"
+16
View File
@@ -0,0 +1,16 @@
# Source timing repairs — Mos1864
Goal: fix641/642/643 with all prior assertions retained, one independent Codex review, quiet full gate4, authorized green landing.
Base:193774d755c71b3fc41c62e6bde559838c736a57. Scope selected directly by Mos1864; execute inline without approval stops. #657/#658 remain OPEN backlog (comments1317/1318), not landing blockers.
1.641: first inject ETIMEDOUT in existing interpreter io test and require distinct interpreter-probe-timeout. Keep existing1000ms production bound and every interpreter safety check; classify unavailable evidence separately from unsafe evidence. Historical load failure is preserved. Timeout injection supplies deterministic evidence without sleeping or widening deadline.
2.642: preserve real socket test/name/assertions; replace5ms/30ms scheduling race with scoped owned-server Socket.setTimeout observer and virtual idle clock. Deferred actual halt/resume entry signals precede clock advance. Native clients/proof/Broker/socket data remain real. Advancing30ms while admitted must preserve async reply; reversion to ordinary timeout must fail.
3.643: change fixture script execution to async spawn/close, no arbitrary inner deadline. Explicit awaits preserve phase order and result assertions. Track owned children; cleanup closes/reaps before root removal. Keep outer whole-gate limits and existing long integration test deadline. No external callers import setup.
4. Run focused tests plus appropriate package suites; compare original assertions after stripping await-only syntax. One independent Codex review in its own thread; fix source-caused important findings, no extra design approval loop.
5. Fullgate4 after load1<2 and no competing gate/heavy tests, same pin/editor/skip/FED/priority/hook rules. Preserve outputs. Redgate blocks; unrelated pre-existing review defect gets task and does notblock. Land reviewed288 plus reviewed330/331 only when own gates pass.
Preflight: tasks1/2 share bus suite only; task3 independent. No shared changed interface. Existing public/authority/schema/config behavior preserved except exact interpreter timeout classification. No scheduler changes or longer deadlines.
Verification: injected641 old error regression RED thenGREEN.642 manual-clock testGREEN; removing special verb branch alone survives because existing generic-Promise branch also extends correctly; replacing ALL async timeout extensions with ordinary timeout gives named request-timeout RED; restored source.643 entire original18 cases+newheld-readiness control PASS; combined39/39, zero skip/cancel/fail. Every156 original copy assertion retained modulo await/grouping/whitespace. No product server change. Fixture teardown owns isolated child process groups; abort/close is observed before root removal.
Final review: ONE independent Codex thread mcp:9245555c-5430-42f9-8afc-f77a70fc09ee completed. P2 introduced detached child escape on external gate TERM accepted. Extracted fixture runner into tests/fixtures/owned-child.mjs; installed fixture-scoped process termination handling across active pools, killing only captured groups and waiting close before exit; handlers removed on ordinary teardown. Actual owned outer/descendant readiness→TERM regression RED (descendant survives), thenGREEN; all40 affected testsGREEN, zero anomaly. No second review. No minor finding deferred. Wholebus1035GREEN is before fixture-only extraction; fullgate4 will verify final wholecandidate.
@@ -0,0 +1,160 @@
// Offline upgrade contract: real bus verbs, pinned proxy, no real credentials.
import fs from 'node:fs';
import path from 'node:path';
import net from 'node:net';
import assert from 'node:assert/strict';
import { spawn } from 'node:child_process';
import { createHash } from 'node:crypto';
import { getPriority } from 'node:os';
import { initialConfig } from '../../../../packages/model-proxy/src/settings.mjs';
import { PIN } from '../../../../packages/model-proxy/src/common.mjs';
import { ManagementClient } from '../../../../packages/model-proxy/src/client.mjs';
import { ProxyPage } from '../../../../packages/bus/src/proxy-page.mjs';
import { Broker } from '../../../../packages/bus/src/broker.mjs';
import { Store } from '../../../../packages/bus/src/store.mjs';
const [root, binary] = process.argv.slice(2);
if (process.env.P4_UPGRADE_ISOLATED !== 'yes' || !root?.startsWith('/mnt/storage/scratch/tmp/')) throw Error('wrapper required');
if (createHash('sha256').update(fs.readFileSync(binary)).digest('hex') !== PIN.binary.sha256) throw Error('binary does not match PIN');
const reserve = net.createServer(); await new Promise(r => reserve.listen(0, '127.0.0.1', r));
const port = reserve.address().port; await new Promise(r => reserve.close(r));
if (port === 8317) throw Error('forbidden port');
const management = 'p4-management', canary = 'p4-upstream';
const config = initialConfig({ dataRoot: root, port, key: management, sentinel: 'msk-fixture-sentinel-x' });
config.management['disable-control-panel'] = true; config.observability.logs['logging-to-file'] = false;
fs.mkdirSync(path.join(root, 'proxy/auth'), { recursive: true, mode: 0o700 });
fs.mkdirSync(path.join(root, 'home'));
fs.writeFileSync(path.join(root, 'config.yaml'), JSON.stringify(config), { mode: 0o600 });
const child = spawn(binary, ['-config', path.join(root, 'config.yaml'), '-local-model'], {
cwd: root, env: { HOME: path.join(root, 'home'), PATH: '/usr/bin:/bin' }, stdio: 'ignore',
});
// Diagnostic-only (sage-4432): observe the same run conditions, never change
// priority or print exception values, fixture credentials or upstream content.
let stage = 'binary-start', lastClientErrorCode = null;
const clientErrorCodes = ['proxy-client-down', 'proxy-client-response', 'proxy-client-refused',
'proxy-client-redirect', 'proxy-client-invalid'];
const errorCodes = [...clientErrorCodes, 'ERR_ASSERTION', 'ERR_SQLITE_ERROR', 'SQLITE_ERROR',
'proxy-down', 'not-configured', 'human-required', 'invalid-request', 'invalid-business',
'priority-invalid', 'priority-unconfirmed', 'priority-write-refused', 'login-state-unknown'];
function schedulingPolicy(pid) {
try {
// Only our Node process or the still-live child we spawned. Never print
// raw /proc content; retain just Linux's numeric scheduling-policy field.
const policy = fs.readFileSync(`/proc/${pid}/sched`, 'utf8').match(/^policy\s*:\s*(\d+)\s*$/m)?.[1];
return policy === undefined ? null : Number(policy);
} catch { return null; }
}
function observe() {
let nodePriority = null, childPriority = null, childSchedulingPolicy = null;
try { nodePriority = getPriority(); } catch {}
if (Number.isInteger(child.pid) && child.exitCode === null && child.signalCode === null) {
try { childPriority = getPriority(child.pid); } catch {}
childSchedulingPolicy = schedulingPolicy(child.pid);
}
console.log('P4 diagnostic ' + JSON.stringify({ stage, nodePriority, childPriority, lastClientErrorCode,
nodeSchedulingPolicy: schedulingPolicy(process.pid), childSchedulingPolicy,
childExitCode: Number.isInteger(child.exitCode) ? child.exitCode : null,
childSignal: /^SIG[A-Z0-9]{1,16}$/.test(child.signalCode ?? '') ? child.signalCode : null }));
}
child.once('exit', observe);
let store;
const pause = ms => new Promise(r => setTimeout(r, ms));
const receipts = [], answers = [];
const client = new ManagementClient({ baseUrl: `http://127.0.0.1:${port}`, key: management, receipt: r => receipts.push(r) });
try {
console.log('P4 offline upgrade version=' + PIN.version + ' nice=' + getPriority());
observe();
let ready = false;
for (let n = 0; n < 100; n++) {
try { await client.getCredentials(); ready = true; break; }
catch (error) { lastClientErrorCode = clientErrorCodes.includes(error.code) ? error.code : 'unclassified'; await pause(50); }
}
assert.equal(ready, true, 'fixture listener starts');
stage = 'management-ready'; observe();
stage = 'store-open';
store = new Store(root);
observe();
const page = new ProxyPage({ client, instanceTag: 'fixture' });
const broker = new Broker({ store, proxyPage: (...args) => page.request(...args), businesses: {
demo: { id: 'demo', human: 'owner', roles: { coder: { authority: { withinRole: [], crossRole: [] } } }, arbiters: { technical: 'coder', delivery: 'coder' } },
} });
const cap = broker.bindHuman({ business: 'demo', human: 'owner', via: 'cli', outsideAgent: true });
stage = 'broker-bound'; observe();
const call = async (verb, args = {}) => { const answer = await broker.request(cap, { verb, args }); answers.push(answer); return answer; };
stage = 'initial-accounts'; observe();
// Diagnostic-only (sage-4448/4452, mos-1683): one direct empty-provider
// read, types/counts only. Never print field names, values or error text.
const receiptCount = receipts.length;
try {
const groups = await client.getUpstreamGroups();
const isArray = Array.isArray(groups);
console.log('P4 empty-provider diagnostic ' + JSON.stringify({
httpStatus: receipts.length === receiptCount + 1 ? receipts.at(-1).status : null,
type: groups === null ? 'null' : typeof groups, isArray,
count: isArray ? groups.length : groups !== null && typeof groups === 'object' ? Object.keys(groups).length : 0,
}));
} catch (error) {
console.log('P4 empty-provider diagnostic ' + JSON.stringify({
httpStatus: receipts.length === receiptCount + 1 ? receipts.at(-1).status : null,
code: clientErrorCodes.includes(error.code) ? error.code : 'proxy-client-error',
}));
}
assert.deepEqual((await call('proxy.accounts')).accounts, []);
console.log('proxy.accounts initial empty; GET /credentials + GET /config/api-keys/claude');
for (const provider of ['claude', 'codex']) {
const login = await call('proxy.login.start', { provider });
assert.equal(typeof login.url, 'string'); assert.equal(typeof login.state, 'string');
console.log('proxy.login.start ' + provider + ' GET /oauth/auth-url; fields=url,state only');
const redirect = provider === 'claude' ? 'http://localhost:54545/callback' : 'http://localhost:1455/auth/callback';
const submitted = await call('proxy.login.submit', { redirect_url: redirect + '?state=' + encodeURIComponent(login.state) + '&code=p4-fake-code' });
assert.notEqual(submitted.status, 'ok');
const status = await call('proxy.login.status', { state: login.state });
assert.notEqual(status.status, 'ok');
console.log('proxy.login.submit POST /oauth/callback; fake code never ok; GET /oauth/status=' + status.status);
if (status.status === 'wait') {
assert.equal((await call('proxy.login.cancel', { state: login.state })).status, 'cancelled');
console.log('proxy.login.cancel DELETE /oauth/session confirmed');
}
}
await call('proxy.apikey.add', { provider: 'z.ai', key: canary }); await pause(200);
const accounts = (await call('proxy.accounts')).accounts;
assert.equal(accounts.length, 1); assert.equal(accounts[0].provider, 'z.ai');
assert.deepEqual(Object.keys(accounts[0]).sort(), ['accountId', 'displayName', 'priority', 'provider', 'status']);
console.log('proxy.apikey.add PUT /config/api-keys/claude; account fields=accountId,provider,displayName,status,priority; id from auth_index');
await call('proxy.priority.set', { accountId: accounts[0].accountId, priority: 7 });
assert.equal((await call('proxy.accounts')).accounts[0].priority, 7);
console.log('proxy.priority.set API-key PUT /config/api-keys/claude; priority read-back=7');
const keys = await call('proxy.keys');
assert.equal(keys.keys.length, 1); assert.equal(keys.keys[0].management, 'sentinel'); assert.match(keys.keys[0].keyId, /^[a-f0-9]{12}$/);
console.log('proxy.keys GET /config/access/api-keys; fields=keyId,management,agent,issuedAt,state; sentinel labelled; values absent');
// Fixture-only upload exercises the OAuth priority API relied on by the page.
const uploaded = await fetch(`http://127.0.0.1:${port}/v8/management/credentials?name=p4-fixture.json`, {
method: 'POST', headers: { Authorization: `Bearer ${management}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ type: 'claude', access_token: 'p4-access', refresh_token: 'p4-refresh', expired: '2099-01-01T00:00:00Z' }),
signal: AbortSignal.timeout(5000), redirect: 'error',
});
assert.equal(uploaded.status, 200); await uploaded.body?.cancel(); await pause(200);
const oauth = (await call('proxy.accounts')).accounts.find(a => a.provider === 'claude');
assert.ok(oauth);
await call('proxy.priority.set', { accountId: oauth.accountId, priority: 8 });
assert.equal((await call('proxy.accounts')).accounts.find(a => a.accountId === oauth.accountId).priority, 8);
console.log('proxy.priority.set OAuth PATCH /credentials/fields body={name,priority}; priority read-back=8');
for (const value of [canary, management, 'p4-access', 'p4-refresh', 'p4-fake-code']) {
assert.equal(JSON.stringify(receipts).includes(value), false, 'secret absent from receipts');
assert.equal(JSON.stringify(store.all('SELECT body FROM events')).includes(value), false, 'secret absent from bus events');
assert.equal(JSON.stringify(answers).includes(value), false, 'credential/code absent from bus replies');
}
console.log('PASS offline native-page bus contract and secret-free receipts');
} catch (error) {
// Never print assertion actual/expected values or a raw upstream exception.
observe();
const errorClass = ['Error', 'AssertionError', 'ProxyError', 'BusError', 'TypeError', 'RangeError'].includes(error.name) ? error.name : 'Error';
console.error('P4 upgrade FAILED ' + JSON.stringify({ stage, errorClass,
code: errorCodes.includes(error.code) ? error.code : 'acceptance-failed' }));
process.exitCode = 1;
} finally {
store?.close(); child.kill('SIGTERM');
await Promise.race([new Promise(r => child.once('exit', r)), pause(3000).then(() => child.kill('SIGKILL'))]);
}
// One end-to-end acceptance phase, emitted only after assertions and cleanup.
console.log(`# tests 1\n# pass ${process.exitCode ? 0 : 1}\n# fail ${process.exitCode ? 1 : 0}\n# skipped 0\n# cancelled 0`);
@@ -0,0 +1,13 @@
#!/usr/bin/env bash
# P4 PIN upgrade acceptance; outside scripts/test-*.sh, requires Sage's slot.
set -euo pipefail
HERE=$(cd "$(dirname "$0")" && pwd)
BINARY=${1:?P1 verified fetched executable required}
export TMPDIR=$(mktemp -d /mnt/storage/scratch/tmp/XXXXXX)
trap 'rm -rf -- "$TMPDIR"' EXIT
timeout -k 10 120 nice -n $((19 - $(nice))) unshare -rn bash -c '
set -e
ip link set lo up
export P4_UPGRADE_ISOLATED=yes
exec node "$1/acceptance.mjs" "$TMPDIR" "$2"
' bash "$HERE" "$BINARY"
@@ -0,0 +1,14 @@
import fs from 'node:fs';
import {createHash} from 'node:crypto';
import {parseTestSummary} from './test-summary.mjs';
const h=new URL('./',import.meta.url);
const receipt=JSON.parse(fs.readFileSync(new URL('model-join-completion-receipts.json',h),'utf8'));
const rows=receipt.rows.filter(r=>r.name.startsWith('p4-package-'));
if(rows.length!==3)throw Error('missing complete package phase');
const audited=rows.map(row=>{
const bytes=fs.readFileSync(row.log.path),summary=parseTestSummary(bytes.toString());
if(createHash('sha256').update(bytes).digest('hex')!==row.log.sha256||bytes.length!==row.log.bytes||row.rc!==0||!summary.ok)throw Error('package phase not green '+row.name);
return {name:row.name,summary,log:row.log};
});
fs.writeFileSync(new URL('completed-packages-independent-audit.json',h),JSON.stringify({status:'THREE_COMPLETE_NATIVE_PACKAGE_PHASES_GREEN_ON_UNCHANGED_PRODUCT',product:'362893d043ff96fdd35f18e326cce683db031471',rows:audited},null,2)+'\n');
console.log(audited.map(r=>r.name+':'+r.summary.pass).join(' '));
@@ -0,0 +1,63 @@
{
"status": "THREE_COMPLETE_NATIVE_PACKAGE_PHASES_GREEN_ON_UNCHANGED_PRODUCT",
"product": "362893d043ff96fdd35f18e326cce683db031471",
"rows": [
{
"name": "p4-package-bus",
"summary": {
"recognized": true,
"ok": true,
"tests": 1349,
"pass": 1349,
"fail": 0,
"cancelled": 0,
"skipped": 0,
"todo": 0,
"reason": null
},
"log": {
"path": "/mnt/storage/scratch/tmp/NNbINE/001-p4-package-bus.log",
"sha256": "879bfaf5333776d32ca152474ba1f21079ab4f838b81bd5c537aac5f5c3756df",
"bytes": 407826
}
},
{
"name": "p4-package-model-proxy",
"summary": {
"recognized": true,
"ok": true,
"tests": 100,
"pass": 100,
"fail": 0,
"cancelled": 0,
"skipped": 0,
"todo": 0,
"reason": null
},
"log": {
"path": "/mnt/storage/scratch/tmp/NNbINE/002-p4-package-model-proxy.log",
"sha256": "38d0b10474b5eb8bb9a8a27ab846e94151830215e1de22d2e6143baa8f6032f0",
"bytes": 18907
}
},
{
"name": "p4-package-webui",
"summary": {
"recognized": true,
"ok": true,
"tests": 490,
"pass": 490,
"fail": 0,
"cancelled": 0,
"skipped": 0,
"todo": 0,
"reason": null
},
"log": {
"path": "/mnt/storage/scratch/tmp/NNbINE/003-p4-package-webui.log",
"sha256": "e0622991e6ee3c14bfc6290e508facf71520d8129523e1b18ec12e80bd44a69b",
"bytes": 120534
}
}
]
}
@@ -0,0 +1,31 @@
✔ a named target with a recognized failed report is a kill (0.573398ms)
✔ an unrelated failure never kills the named mutant (0.109166ms)
✔ an unrecognized failed report never proves a kill (0.474636ms)
✔ a restored control needs its recognized passing report (0.09892ms)
✔ invented scalar counts never prove a restored control (0.092681ms)
✔ passing TAP (4.566885ms)
✔ failing TAP (0.128457ms)
✔ passing spec (0.273164ms)
✔ failing spec (0.092735ms)
✔ unrecognized output (0.094115ms)
✔ missing fail summary (0.069858ms)
✔ missing pass summary (0.083786ms)
✔ mixed output retains any failure (0.092104ms)
✔ passing shell selftest (0.09601ms)
✔ failing shell selftest (0.135642ms)
✔ invalid counter never coerces to success (0.073398ms)
✔ cancelled work is not green (0.084935ms)
✔ skip-only output is not green (0.065612ms)
✔ same-format skip remains disqualifying (0.072464ms)
✔ same-format cancellation remains disqualifying (0.05814ms)
✔ later partial report cannot borrow fail counter (0.054644ms)
✔ repeated pass starts a distinct incomplete report (0.054143ms)
✔ separate complete passing reports remain recognized (0.063208ms)
ℹ tests 23
ℹ suites 0
ℹ pass 23
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 50.826365
@@ -0,0 +1,21 @@
✔ passing TAP (4.319702ms)
✔ failing TAP (0.138443ms)
✔ passing spec (0.273019ms)
✔ failing spec (0.112311ms)
✔ unrecognized output (0.084954ms)
✔ missing fail summary (0.071389ms)
✔ missing pass summary (0.072913ms)
✔ mixed output retains any failure (0.097022ms)
✔ passing shell selftest (0.095299ms)
✔ failing shell selftest (0.150498ms)
✔ invalid counter never coerces to success (0.080203ms)
✔ cancelled work is not green (0.084233ms)
✔ skip-only output is not green (0.05871ms)
ℹ tests 13
ℹ suites 0
ℹ pass 13
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 53.85486
@@ -0,0 +1,210 @@
✖ passing TAP (5.035624ms)
✖ failing TAP (0.218186ms)
✖ passing spec (0.115108ms)
✖ failing spec (0.098394ms)
✔ unrecognized output (0.134706ms)
✔ missing fail summary (0.077226ms)
✔ missing pass summary (0.062756ms)
✖ mixed output retains any failure (0.107987ms)
✖ passing shell selftest (0.125387ms)
✖ failing shell selftest (0.176262ms)
✔ invalid counter never coerces to success (0.081183ms)
✖ cancelled work is not green (0.115848ms)
✖ skip-only output is not green (0.104575ms)
ℹ tests 13
ℹ suites 0
ℹ pass 4
ℹ fail 9
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 54.805412
✖ failing tests:
test at agents/sage/work/fix-641-643-run4/test-summary.test.mjs:19:49
✖ passing TAP (5.035624ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
false !== true
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/test-summary.test.mjs:20:45)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.start (node:internal/test_runner/test:1262:17)
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: 'strictEqual',
diff: 'simple'
}
test at agents/sage/work/fix-641-643-run4/test-summary.test.mjs:19:49
✖ failing TAP (0.218186ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
false !== true
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/test-summary.test.mjs:20:72)
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: true,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: 'strictEqual',
diff: 'simple'
}
test at agents/sage/work/fix-641-643-run4/test-summary.test.mjs:19:49
✖ passing spec (0.115108ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
false !== true
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/test-summary.test.mjs:20:45)
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: true,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: 'strictEqual',
diff: 'simple'
}
test at agents/sage/work/fix-641-643-run4/test-summary.test.mjs:19:49
✖ failing spec (0.098394ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
false !== true
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/test-summary.test.mjs:20:72)
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: true,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: 'strictEqual',
diff: 'simple'
}
test at agents/sage/work/fix-641-643-run4/test-summary.test.mjs:19:49
✖ mixed output retains any failure (0.107987ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
false !== true
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/test-summary.test.mjs:20:72)
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: true,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: 'strictEqual',
diff: 'simple'
}
test at agents/sage/work/fix-641-643-run4/test-summary.test.mjs:19:49
✖ passing shell selftest (0.125387ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
false !== true
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/test-summary.test.mjs:20:45)
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: true,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: 'strictEqual',
diff: 'simple'
}
test at agents/sage/work/fix-641-643-run4/test-summary.test.mjs:19:49
✖ failing shell selftest (0.176262ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
false !== true
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/test-summary.test.mjs:20:72)
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: true,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: 'strictEqual',
diff: 'simple'
}
test at agents/sage/work/fix-641-643-run4/test-summary.test.mjs:19:49
✖ cancelled work is not green (0.115848ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
false !== true
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/test-summary.test.mjs:20:72)
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: true,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: 'strictEqual',
diff: 'simple'
}
test at agents/sage/work/fix-641-643-run4/test-summary.test.mjs:19:49
✖ skip-only output is not green (0.104575ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
false !== true
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/test-summary.test.mjs:20:72)
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: true,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: 'strictEqual',
diff: 'simple'
}
@@ -0,0 +1,118 @@
{
"review": {
"thread": {
"threadId": "mcp:9245555c-5430-42f9-8afc-f77a70fc09ee",
"projectId": "34050c07-ecff-46d5-82c7-e96cba830f49",
"title": "Codex independent review: source timing fixes641–643 / Mos1864",
"createdBy": "agent",
"creationSource": "mcp",
"status": "completed",
"latestRunId": "run:thread:mcp%3A9245555c-5430-42f9-8afc-f77a70fc09ee:ordinal:2",
"activeRunId": null,
"providerInstanceId": "codex",
"model": "gpt-6.1-sol",
"runtimeMode": "full-access",
"interactionMode": "default",
"linkedPullRequest": null,
"pullRequests": [],
"titleRegeneration": null,
"branch": "sage/fix-641-643-run4",
"worktreePath": "/home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4",
"parentThreadId": null,
"relationshipToParent": null,
"runCount": 2,
"itemCount": 46,
"pendingRequestCount": 0,
"archived": false,
"settled": false,
"settledAt": null,
"snoozed": false,
"snoozedUntil": null,
"createdAt": "2026-10-26T15:36:37.763Z",
"updatedAt": "2026-10-26T17:14:19.011Z"
},
"recentRuns": [
{
"runId": "run:thread:mcp%3A9245555c-5430-42f9-8afc-f77a70fc09ee:ordinal:2",
"ordinal": 2,
"status": "completed",
"providerInstanceId": "codex",
"model": "gpt-6.1-sol",
"requestedAt": "2026-10-26T17:12:04.928Z",
"startedAt": "2026-10-26T17:12:05.730Z",
"completedAt": "2026-10-26T17:14:19.011Z"
},
{
"runId": "run:thread:mcp%3A9245555c-5430-42f9-8afc-f77a70fc09ee:ordinal:1",
"ordinal": 1,
"status": "completed",
"providerInstanceId": "codex",
"model": "gpt-6.1-sol",
"requestedAt": "2026-10-26T15:36:37.773Z",
"startedAt": "2026-10-26T15:36:40.264Z",
"completedAt": "2026-10-26T15:41:08.539Z"
}
],
"items": [
{
"position": 34,
"visibility": "local",
"sourceThreadId": "mcp:9245555c-5430-42f9-8afc-f77a70fc09ee",
"itemId": "turn-item:provider:codex:native-item:msg_060ad7d03fe7975f016adf89eb1eb4819caf7dc6751ddc378f",
"runId": "run:thread:mcp%3A9245555c-5430-42f9-8afc-f77a70fc09ee:ordinal:2",
"messageId": "message:provider:codex:native-item:msg_060ad7d03fe7975f016adf89eb1eb4819caf7dc6751ddc378f",
"createdBy": "agent",
"creationSource": "provider",
"type": "assistant_message",
"status": "completed",
"title": null,
"text": "I’ll review only the Mos1881 tools and their frozen-product checks, read-only. I’ll trace summary parsing through the consumer, check phase completion and cleanup order, and inspect the priority measurement. I won’t run tests, edit files, or launch agents.",
"textTruncated": false,
"nextTextOffset": null,
"updatedAt": "2026-10-26T17:12:13.380Z"
},
{
"position": 41,
"visibility": "local",
"sourceThreadId": "mcp:9245555c-5430-42f9-8afc-f77a70fc09ee",
"itemId": "turn-item:provider:codex:native-item:msg_060ad7d03fe7975f016adf8a3a302c819c9a32d3e303d52fc2",
"runId": "run:thread:mcp%3A9245555c-5430-42f9-8afc-f77a70fc09ee:ordinal:2",
"messageId": "message:provider:codex:native-item:msg_060ad7d03fe7975f016adf8a3a302c819c9a32d3e303d52fc2",
"createdBy": "agent",
"creationSource": "provider",
"type": "assistant_message",
"status": "completed",
"title": null,
"text": "The product commit/tree matches the pin, and all 1,968 freeze entries match their recorded bytes and hashes. The acceptance and mutant bodies retain their prior checks. I found two gaps to resolve before readiness: same-format summaries can overwrite cancellation or skip evidence, and the four-mutant producer still accepts any counted failure without checking a named target.",
"textTruncated": false,
"nextTextOffset": null,
"updatedAt": "2026-10-26T17:13:31.787Z"
},
{
"position": 44,
"visibility": "local",
"sourceThreadId": "mcp:9245555c-5430-42f9-8afc-f77a70fc09ee",
"itemId": "turn-item:provider:codex:native-item:msg_060ad7d03fe7975f016adf8a607568819c990ffed23daac23f",
"runId": "run:thread:mcp%3A9245555c-5430-42f9-8afc-f77a70fc09ee:ordinal:2",
"messageId": "message:provider:codex:native-item:msg_060ad7d03fe7975f016adf8a607568819c990ffed23daac23f",
"createdBy": "agent",
"creationSource": "provider",
"type": "assistant_message",
"status": "completed",
"title": null,
"text": "**Verdict: not ready for the remaining phases—two P2 findings in the counter tooling.**\n\n- **P2 — separate reports can combine into false GREEN.** [test-summary.mjs:17](/home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/test-summary.mjs:17) groups all reports by prefix and overwrites counters. A later passing TAP report can erase an earlier `skipped 1`; an incomplete later report can inherit an earlier `fail 0`. Both can produce `ok:true`. Positive failures remain sticky, but missing-summary and skip handling do not. **Fix:** validate each report independently, reject incomplete reports, and preserve disqualifying evidence across every report. Add same-format concatenation controls; the current mixed-format fixture does not cover this.\n\n- **P2 — the new four-mutant aggregate does not require named-target kills.** [mutants.mjs:43](/home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/mutants.mjs:43) accepts exit 1, any positive failure count, and nice 19. It ignores the collected `failingTests` and bypasses `parseTestSummary`. An unrelated test failure followed by a passing restored control can therefore count as a kill and contribute to the new aggregate GREEN. **Fix:** require a recognized summary with `fail > 0` and the mutant’s expected named target; require `summary.ok` for restored controls. The outer consumer’s P2 mutant checks already apply the required recognition/name conditions.\n\nVerified read-only:\n\n- HEAD/tree match `362893d043ff96fdd35f18e326cce683db031471` / `a7f7fcd7fc2cc4ba06efad78627f5f04929a0740`; all **1,968** freeze entries match.\n- The consumer requires `summaryGreen` for normal phases.\n- Acceptance and mutant changes preserve the prior assertions and checks.\n- The priority import sets and measures 19 inside Node, retaining the 180-second watchdog and strict priority checks.\n- Existing logs record **13/13 counter fixtures green**; they omit the cases above.\n\nThese findings are from source inspection. I ran no tests, edited nothing, and launched no agents.",
"textTruncated": false,
"nextTextOffset": null,
"updatedAt": "2026-10-26T17:14:18.906Z"
}
],
"nextPosition": 44,
"hasMore": false
},
"disposition": "Both P2 findings reproduced with seven failing regression cases, repaired in one TDD pass; 23/23 fixture tests passed. No second review or product change claimed.",
"evidence": [
"counter-review-findings-red.log",
"counter-review-findings-green.log",
"counter-final-fixtures.log"
]
}
@@ -0,0 +1,31 @@
✔ a named target with a recognized failed report is a kill (0.638593ms)
✔ an unrelated failure never kills the named mutant (0.145273ms)
✔ an unrecognized failed report never proves a kill (3.783086ms)
✔ a restored control needs its recognized passing report (0.13499ms)
✔ invented scalar counts never prove a restored control (0.110822ms)
✔ passing TAP (4.702567ms)
✔ failing TAP (0.13658ms)
✔ passing spec (0.304258ms)
✔ failing spec (0.109102ms)
✔ unrecognized output (0.116396ms)
✔ missing fail summary (0.071755ms)
✔ missing pass summary (0.090824ms)
✔ mixed output retains any failure (0.09816ms)
✔ passing shell selftest (0.105798ms)
✔ failing shell selftest (0.152004ms)
✔ invalid counter never coerces to success (0.083234ms)
✔ cancelled work is not green (0.097597ms)
✔ skip-only output is not green (0.087736ms)
✔ same-format skip remains disqualifying (0.115677ms)
✔ same-format cancellation remains disqualifying (0.101965ms)
✔ later partial report cannot borrow fail counter (0.119727ms)
✔ repeated pass starts a distinct incomplete report (0.072837ms)
✔ separate complete passing reports remain recognized (0.641011ms)
ℹ tests 23
ℹ suites 0
ℹ pass 23
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 60.452641
@@ -0,0 +1,180 @@
✔ a named target with a recognized failed report is a kill (0.572194ms)
✖ an unrelated failure never kills the named mutant (0.639647ms)
✖ an unrecognized failed report never proves a kill (0.188296ms)
✔ a restored control needs its recognized passing report (0.110702ms)
✖ invented scalar counts never prove a restored control (0.140817ms)
✔ passing TAP (4.664909ms)
✔ failing TAP (0.136585ms)
✔ passing spec (0.254834ms)
✔ failing spec (0.102053ms)
✔ unrecognized output (0.082375ms)
✔ missing fail summary (0.06971ms)
✔ missing pass summary (0.08176ms)
✔ mixed output retains any failure (0.110895ms)
✔ passing shell selftest (0.093783ms)
✔ failing shell selftest (0.131771ms)
✔ invalid counter never coerces to success (0.078101ms)
✔ cancelled work is not green (0.080207ms)
✔ skip-only output is not green (0.05159ms)
✖ same-format skip remains disqualifying (0.643967ms)
✖ same-format cancellation remains disqualifying (0.155333ms)
✖ later partial report cannot borrow fail counter (0.108603ms)
✖ repeated pass starts a distinct incomplete report (0.096794ms)
✔ separate complete passing reports remain recognized (0.090551ms)
ℹ tests 23
ℹ suites 0
ℹ pass 16
ℹ fail 7
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 59.46894
✖ failing tests:
test at agents/sage/work/fix-641-643-run4/mutant-verdict.test.mjs:9:1
✖ an unrelated failure never kills the named mutant (0.639647ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
true !== false
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/mutant-verdict.test.mjs:9:69)
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: true,
code: 'ERR_ASSERTION',
actual: true,
expected: false,
operator: 'strictEqual',
diff: 'simple'
}
test at agents/sage/work/fix-641-643-run4/mutant-verdict.test.mjs:10:1
✖ an unrecognized failed report never proves a kill (0.188296ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
true !== false
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/mutant-verdict.test.mjs:10:69)
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: true,
code: 'ERR_ASSERTION',
actual: true,
expected: false,
operator: 'strictEqual',
diff: 'simple'
}
test at agents/sage/work/fix-641-643-run4/mutant-verdict.test.mjs:12:1
✖ invented scalar counts never prove a restored control (0.140817ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
true !== false
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/mutant-verdict.test.mjs:12:73)
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: true,
code: 'ERR_ASSERTION',
actual: true,
expected: false,
operator: 'strictEqual',
diff: 'simple'
}
test at agents/sage/work/fix-641-643-run4/test-summary.test.mjs:28:4
✖ same-format skip remains disqualifying (0.643967ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
true !== false
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/test-summary.test.mjs:28:57)
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: true,
code: 'ERR_ASSERTION',
actual: true,
expected: false,
operator: 'strictEqual',
diff: 'simple'
}
test at agents/sage/work/fix-641-643-run4/test-summary.test.mjs:28:4
✖ same-format cancellation remains disqualifying (0.155333ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
true !== false
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/test-summary.test.mjs:28:57)
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: true,
code: 'ERR_ASSERTION',
actual: true,
expected: false,
operator: 'strictEqual',
diff: 'simple'
}
test at agents/sage/work/fix-641-643-run4/test-summary.test.mjs:28:4
✖ later partial report cannot borrow fail counter (0.108603ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
true !== false
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/test-summary.test.mjs:28:57)
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: true,
code: 'ERR_ASSERTION',
actual: true,
expected: false,
operator: 'strictEqual',
diff: 'simple'
}
test at agents/sage/work/fix-641-643-run4/test-summary.test.mjs:28:4
✖ repeated pass starts a distinct incomplete report (0.096794ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
true !== false
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/agents/sage/work/fix-641-643-run4/test-summary.test.mjs:28:57)
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: true,
code: 'ERR_ASSERTION',
actual: true,
expected: false,
operator: 'strictEqual',
diff: 'simple'
}
@@ -0,0 +1,17 @@
{
"scope": "Supply documented P4 helper path with exact tested helper bytes. Alias not separately executed; both paths have identical four-level relative repository imports. No package/script/product change.",
"aliases": [
{
"executed": "agents/sage/work/fix-641-643-run4/acceptance.sh",
"documentedAlias": "agents/poe/work/queue-330/acceptance.sh",
"bytes": 496,
"sha256": "8aa1007a19e70b6be1696896160e7ffdf4ba9afd9fb2d35a996f4a41515b8564"
},
{
"executed": "agents/sage/work/fix-641-643-run4/acceptance.mjs",
"documentedAlias": "agents/poe/work/queue-330/acceptance.mjs",
"bytes": 10706,
"sha256": "07f61ad62d520542e8fe86d8428590eb757a982a1a1341120423a60126c6d55f"
}
]
}
@@ -0,0 +1,553 @@
{
"candidate": "2d3458695a2e129a1f434f7a0bc16e06abb3a5c7",
"base": "e1d8756b51e20fedfbefe8fd8070355f2085467f",
"status": "COMPLETE_FULL_GATE4_GREEN",
"start": "2026-10-26T15:45:13Z",
"end": "2026-10-26T16:01:32Z",
"quietStartLoad1": 1.47,
"runs": [
{
"name": "bus",
"rc": 0,
"end": "15:45:40Z"
},
{
"name": "business",
"rc": 0,
"end": "15:45:42Z"
},
{
"name": "cli",
"rc": 0,
"end": "15:56:15Z"
},
{
"name": "control-board",
"rc": 0,
"end": "15:56:16Z"
},
{
"name": "conversation",
"rc": 0,
"end": "15:56:51Z"
},
{
"name": "discord",
"rc": 0,
"end": "15:56:53Z"
},
{
"name": "harness",
"rc": 0,
"end": "15:57:05Z"
},
{
"name": "ledger",
"rc": 0,
"end": "15:57:19Z"
},
{
"name": "library",
"rc": 0,
"end": "15:57:25Z"
},
{
"name": "model-proxy",
"rc": 0,
"end": "15:57:27Z"
},
{
"name": "mosaic",
"rc": 0,
"end": "15:57:29Z"
},
{
"name": "plugins",
"rc": 0,
"end": "15:57:29Z"
},
{
"name": "processing-control",
"rc": 0,
"end": "15:57:31Z"
},
{
"name": "project",
"rc": 0,
"end": "15:57:32Z"
},
{
"name": "runs",
"rc": 0,
"end": "15:57:33Z"
},
{
"name": "seat",
"rc": 0,
"end": "15:57:39Z"
},
{
"name": "supervisor",
"rc": 0,
"end": "15:57:39Z"
},
{
"name": "tasks",
"rc": 0,
"end": "15:57:41Z"
},
{
"name": "webui",
"rc": 0,
"end": "15:59:01Z"
},
{
"name": "script-auth",
"rc": 0,
"end": "15:59:01Z"
},
{
"name": "script-conductor",
"rc": 0,
"end": "15:59:08Z"
},
{
"name": "script-config",
"rc": 0,
"end": "15:59:11Z"
},
{
"name": "script-discord",
"rc": 0,
"end": "15:59:18Z"
},
{
"name": "script-extension-package",
"rc": 0,
"end": "15:59:20Z"
},
{
"name": "script-federation-acceptance",
"rc": 0,
"end": "15:59:23Z"
},
{
"name": "script-foundation",
"rc": 0,
"end": "16:00:03Z"
},
{
"name": "script-land-work",
"rc": 0,
"end": "16:00:15Z"
},
{
"name": "script-push-check",
"rc": 0,
"end": "16:00:53Z"
},
{
"name": "script-queue",
"rc": 0,
"end": "16:01:15Z"
},
{
"name": "script-release",
"rc": 0,
"end": "16:01:18Z"
},
{
"name": "script-task",
"rc": 0,
"end": "16:01:32Z"
}
],
"packageSuites": 19,
"shellGates": 12,
"raw": [
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-bus.txt",
"sha256": "789d30c8854423c41cf5ed201f2346aa2b186a35c26b81796c12a25893e15dff",
"bytes": 116967
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-business.txt",
"sha256": "e61065c07223481a8867ddb399d22e459ce512d86b9c5d40ae148a6c594587aa",
"bytes": 25762
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-cli.txt",
"sha256": "c1ef6a1be2678683967c478bfea5f2a7d904039c0ce9824c6f8dbc5eb64dadaa",
"bytes": 122696
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-control-board.txt",
"sha256": "028fc4dae3a365a40e5a3c5f4979333ef7d0fe9a92f75b800e59c967621c8d0f",
"bytes": 13604
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-conversation.txt",
"sha256": "7022e520df917f7cc1607d35ab0c90cd9b42760674cddb8b3eb4d1af9077cb19",
"bytes": 21676
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-discord.txt",
"sha256": "4bdf4b745f08ac95e6003f6aec38163125748cf1710ca6c76278f85151ea85ea",
"bytes": 21573
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-harness.txt",
"sha256": "570eecb8f7fc034d66b18a74d7d2395cc70621583c83b8980950118524718fb0",
"bytes": 18238
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-ledger.txt",
"sha256": "eb9456f05c8f829ef51c65696b3e38a4cfadb48f724e3b5d07368be225441f6a",
"bytes": 7842
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-library.txt",
"sha256": "95fbdb62352443919428ecc8202bf1ea86a415f901ba70feac5a35fb7295cdbc",
"bytes": 16347
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-model-proxy.txt",
"sha256": "a6b17de7d7986fb0d7e6fc8dd7c0ab56f6ce2392e5036865c7ff6f805d596619",
"bytes": 5326
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-mosaic.txt",
"sha256": "67fc3daa0c881dbfc5c5268955ac1a4841fdda78f2ea99be62f53cc104730a03",
"bytes": 5518
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-plugins.txt",
"sha256": "7c69ddcdf3ffdcc5ab1161c957d0b488d03824cf48296af5081fa974e757eb34",
"bytes": 11656
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-processing-control.txt",
"sha256": "8eef2d2c3e83c7b7bbe4829491a10663b53c3f91aab5f222a5806bab64577811",
"bytes": 5992
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-project.txt",
"sha256": "7c8d50a61dae9dab2d64f4cb24faaf0902b527bf7b93d517489a422adf25f406",
"bytes": 4211
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-runs.txt",
"sha256": "617094f95e05a438058671cb4d5ac046ab6ece32999bfe6310d628931b168924",
"bytes": 3210
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-script-auth.txt",
"sha256": "f91fc95a173339137f981e24fbf630acfde957e32c3cd71e28304532083c6a77",
"bytes": 815
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-script-conductor.txt",
"sha256": "bc4451be969a0ff4fe0538cf6c31b4dc336b258f8f1dac92411ed905fd407841",
"bytes": 861
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-script-config.txt",
"sha256": "92ea8ce5e66d892fefacc76b87d140bcfb8c5a51dc77bdf4a47a6213ac5d2898",
"bytes": 3172
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-script-discord.txt",
"sha256": "9b482b7a3f0672c872923c06e71d5a88ff085a08170905a6cabe1d2b6fc283b6",
"bytes": 4997
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-script-extension-package.txt",
"sha256": "04ae71cd1f1cb173ab07b7bfacf821b84083c9a82202fd581dacd4bcb7c56257",
"bytes": 1028
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-script-federation-acceptance.txt",
"sha256": "5f8815ab00577227a43bf97dee41081d89ec3f0c66e3ce481739191292e11c33",
"bytes": 246
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-script-foundation.txt",
"sha256": "83dfaa21c4e4ad941088efab3f69e87ebd2f6bd3cc72ede938e21dc06da8a34f",
"bytes": 3552
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-script-land-work.txt",
"sha256": "3e2f8024027592e77790db2bbe039803060915ebf37c7b67f04071a7e83d20dc",
"bytes": 3605
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-script-push-check.txt",
"sha256": "5d9a170308927264d212e3dd00e87463a21d55811cf9b4cb51dce74d6a10fea5",
"bytes": 141
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-script-queue.txt",
"sha256": "c1c77407ad5165e5837da4773cab72b966af05cb8e495df430df95586798a31c",
"bytes": 1637
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-script-release.txt",
"sha256": "9f9dd11e2631a24ad55aaf7becc61965c592b00da08a4e72b98e0384d3a13ec7",
"bytes": 732
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-script-task.txt",
"sha256": "a065947f07d70a4721b423da597968630bc8ec1659db14681af42bb3f974077d",
"bytes": 4711
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-seat.txt",
"sha256": "57814fb126a5bd74a57e685575f3b5fbb824a0ee04a7e0db21ca3bebf4588565",
"bytes": 19422
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-supervisor.txt",
"sha256": "3f6f5d2b730f3e0c987adb42bc2438d7ffe420f60a29a5e93530ee68f7f9a37d",
"bytes": 3280
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-tasks.txt",
"sha256": "f7d7a0cde388a44ebec728b2302b65b9ef8612623a85ea045d131862d94eaa26",
"bytes": 8820
},
{
"path": "/mnt/storage/scratch/sage-641-643-run4/run-webui.txt",
"sha256": "c54acaf0aaf3c7661a0610dde8bab65bcd9ebb856b767c38495d91c33a364aa7",
"bytes": 51255
}
],
"postPins": [
{
"path": "BUILD-LOG.md",
"sha256": "ec5f5b7fde8f50cb7229f438682fb591f1876e13247b4798e23cbdcb8d734233",
"bytes": 694544,
"blob": "e4852a5569ed56173fdfc988ae6762d7898d8e32"
},
{
"path": "agents/bubba/work/queue-288/BUILD.md",
"sha256": "7f908682f83b30e4a065289a3d1732332f4000973a53f8310939f929c6aea81e",
"bytes": 36629,
"blob": "cb231f74ec7ea41e687f5e3c9cddaed9ec385395"
},
{
"path": "agents/bubba/work/queue-288/gate-r6-results.tsv",
"sha256": "08a86355651f32d09496ba888bbbebc70c83d26d24efded798bd48a6f44becc6",
"bytes": 36506,
"blob": "746c106f1bfb39b800c0dcd3de97fdc1c7316303"
},
{
"path": "agents/bubba/work/queue-288/gate-r6-summary.json",
"sha256": "732cbb285a0ea87e4815535f2118186fdccb609fe246ce13d0e014af3b72b1ca",
"bytes": 1696,
"blob": "499247a7ad7cde855f6a6e29ad2f314c540bd860"
},
{
"path": "agents/sage/work/fix-641-643-run4/PLAN.md",
"sha256": "a4b28093f6ad3f784423c285401faf92ec5e9dcdf44495ccbc49dfcf9cd1f18f",
"bytes": 3464,
"blob": "84843bb619f25d9bd0d6b37486036dc34319fa45"
},
{
"path": "agents/sage/work/fix-641-643-run4/independent-codex-review.json",
"sha256": "a0db1a0b2e7851d37668f9132f313cf19836d410094ac1f1da70e378898dcb99",
"bytes": 4092,
"blob": "8a0b3ec3db43da0b57e902ffff17674d91ddb6b1"
},
{
"path": "agents/sage/work/fix-641-643-run4/review-input.json",
"sha256": "2ec9f645f98fb2612f6b4cb7db4cf6d4f6ce9226345650dd25fdff137e692a67",
"bytes": 953,
"blob": "4aa135e4f7f4c2c25d7f437c975d0238f63ba547"
},
{
"path": "docs/SESSIONS.md",
"sha256": "233b80335b57e1c924b7b1b68f09faeebdf7579e54c85099bdd4cd3edcdbaa8a",
"bytes": 590727,
"blob": "c331b29764994cfc5f937c941b797d76e94450e9"
},
{
"path": "packages/bus/src/broker.mjs",
"sha256": "bd89abe4a1234a125a729fc91baa058d6416ccb012b6b9adaba7d5b696882500",
"bytes": 411482,
"blob": "afa6529fedcc91374d219bb3606000154f463c3c"
},
{
"path": "packages/bus/src/client.mjs",
"sha256": "f3d483f61a24cbc9cce235e1e92889f09b8cecf513fcaf90c741f316f62262e2",
"bytes": 2365,
"blob": "95577f52bed9214b24668a8b735b03e0835d8fff"
},
{
"path": "packages/bus/src/interpreter.mjs",
"sha256": "56bfc8dcba476886d7de61a1e798aae8e3041c2434c62d44fc40a168d22bb3bd",
"bytes": 4433,
"blob": "96f8af5d3e7c1fef7eaae271e5cbaa9d494c9243"
},
{
"path": "packages/bus/src/runtime.mjs",
"sha256": "5c077c416012ab3d506c502c6a82af6b392374db6f2c31fe189cd7dfc0f6065e",
"bytes": 45961,
"blob": "a68c22c2629c122289c2f4dcaf3bf569a9902946"
},
{
"path": "packages/bus/src/server.mjs",
"sha256": "8318bed9168ac3f58c09de40a139b68aacefd684e6c117406e181e2ca5ab4ec7",
"bytes": 10607,
"blob": "a55ad7c7e7440056a332776efc31623483ef1741"
},
{
"path": "packages/bus/tests/interpreter.test.mjs",
"sha256": "04c652e849ace440188bde61e31775b83b3b1e703445cca07395af6bc7e8f421",
"bytes": 5098,
"blob": "d1620dfb7745b75d9845b1aa565ab4f693ff2b55"
},
{
"path": "packages/bus/tests/library-write.test.mjs",
"sha256": "160d55d6f9aa639040cd91a78572d84214b8bb2cc56b1c65635bebaab599c795",
"bytes": 22972,
"blob": "c3a7343bf32ca83f1c6e683116520becc0b3e13c"
},
{
"path": "packages/bus/tests/processing.test.mjs",
"sha256": "1de862537330a2e600910305f66400f3fb34cd66886d7f75a3799b24a3c2e9f4",
"bytes": 9952,
"blob": "59c32f3fa58cd1cd5d34aae72e65f6718972be6f"
},
{
"path": "packages/cli/tests/fixtures/owned-child.mjs",
"sha256": "88526dc188b2d23915aac2d0a18e768cb1017c62bf94196d9ddc5776e9797b8f",
"bytes": 2224,
"blob": "8fc0e799f89a5e2d080e22916c5c4443283435ef"
},
{
"path": "packages/cli/tests/owned-child.test.mjs",
"sha256": "e8e98ebc70293e23a83458eae5e3fefef333f8b86a22421af837bd899f8c866a",
"bytes": 2421,
"blob": "fd0abc89121899d930efa28988eb85224821e0f3"
},
{
"path": "packages/cli/tests/stack-copy.test.mjs",
"sha256": "c852edd1c66701023d01409ebd2f1bfa5c4bc7a04a8036824102656a7c4c499d",
"bytes": 36706,
"blob": "7ffd7048fdc88a218cdc4a384de53417fb6e84df"
},
{
"path": "packages/harness/src/tools.mjs",
"sha256": "38fe84040a78c3f8a8dcde4339d88db3b5df9ef669d605ad1d92ff3e8b646b40",
"bytes": 31373,
"blob": "3b89cff708f2e3bc356642f5fad90532055ff90e"
},
{
"path": "packages/harness/tests/library-tools.test.mjs",
"sha256": "63bc0ae0a511542185d875c1bd352ecea23c942dba9f17f7a7a5c416e243df4e",
"bytes": 5295,
"blob": "5d80cd26dbe3359e1c7b59784b65862d1db8c987"
},
{
"path": "packages/harness/tests/library-write-tools.test.mjs",
"sha256": "261aaf1bc8b274810f8a4c5a0199a38f38a5da9ebce9e7cd9806ad8598f1bb53",
"bytes": 3944,
"blob": "8abd6a7e417c0380b2e999eea3d364adc1d87035"
},
{
"path": "packages/library/README.md",
"sha256": "1fef309461afa59d014c08b20be37ae70be139c425771c83be460f79023bc75a",
"bytes": 20746,
"blob": "5a85d3ce611f124a7eba18e8e1c77d726c7fdf96"
},
{
"path": "packages/library/src/index.mjs",
"sha256": "98c2c2877549c3e2c5963ec4e49d99ab3b6d6ad54fb3bfae86cf98542207157e",
"bytes": 1511,
"blob": "79d3b83a3e96bbc19d5a6ada7b2a253fc0f4d5a7"
},
{
"path": "packages/library/src/mirror.mjs",
"sha256": "26b824d6885e5c6d1b8bd71e754a9fa333c26307693f7e6a0c6a8e6300ecb4ae",
"bytes": 15270,
"blob": "e02a5b4bc7d8513f136ca1ec66f145b020a3ec13"
},
{
"path": "packages/library/src/sync.mjs",
"sha256": "a58f3aec5ed9b3530b363e2fdbd38bc9ded7635d261ab2fca3cb31c45dcd3dfa",
"bytes": 18577,
"blob": "5f94f5c80bacdb76d642fc2955c4628509f4cd90"
},
{
"path": "packages/library/src/write.mjs",
"sha256": "a301b7c7e3f42f66cb69d88991220f4e236f25a6e5951c61e79ec4ef2b714198",
"bytes": 11092,
"blob": "82bb177aee943388e6862b580958c0b2e7f50bb1"
},
{
"path": "packages/library/tests/write-fixture.mjs",
"sha256": "41cb113529dcc1f1ed392793d530d5cdc104266c240148063060646b521fe765",
"bytes": 3197,
"blob": "ed032a07db473780d340dc4d038bd5427d74bef0"
},
{
"path": "packages/library/tests/write.test.mjs",
"sha256": "29a0b263cff92c5ae389c7eafed2065af55d52cadd30b47d173bae145bad8f24",
"bytes": 11345,
"blob": "67e3293301a8971db34c19af35a47a88fd3b8b90"
},
{
"path": "packages/webui/src/cli.mjs",
"sha256": "1b6c048ba0431a843fe0650be61c8d5af74710d7f681f9dc48a77a977bb63509",
"bytes": 11027,
"blob": "1e10cf4155985b01b2758a4cf58fdb657cb14669"
},
{
"path": "packages/webui/src/console-bus.mjs",
"sha256": "882b0543b6eb1cb6235b3691462eee37b26e71b0c0e7f0bd65a1ae5fc1c4bbef",
"bytes": 3790,
"blob": "5915fcd7243f49259d87b8e9f44b4dbf872a4756"
},
{
"path": "packages/webui/tests/library-write-options.test.mjs",
"sha256": "532c2196da74eaf3ca41df8bbcfa372df3e691f44cb156a782ae3f1d52520a1e",
"bytes": 1451,
"blob": "5564b53b53cd31137fd39463755a9cfd37ffb419"
}
],
"all32ChangedTrackedInputsUnchanged": true,
"cliSkip": "one FEDR7 wrapper; dedicated acceptance1/1 pass validated by original gate",
"fixtureTokenHits": 0,
"scheduler": {
"at": "2026-10-26T15:47:25.921950+00:00",
"observedOnlyCapturedGateProcesses": [
{
"pid": 104670,
"nice": -4,
"scheduler": 0,
"comm": "bash"
},
{
"pid": 125671,
"nice": 16,
"scheduler": 5,
"comm": "node-MainThread"
},
{
"pid": 125718,
"nice": 16,
"scheduler": 5,
"comm": "node-MainThread"
},
{
"pid": 156903,
"nice": 16,
"scheduler": 5,
"comm": "node-MainThread"
}
],
"standingDisposition": "mos1678 accepts ananicy idle scheduler; quiet-host start remains required;623followup1149 records shell-4/node16 policy5; no host config changed"
},
"review": "one independent Codex review; introduced P2 reproduced and fixed; no second review",
"limits": "original package/shell budgets unchanged; no657/658 applied; source-only landing, no deployment"
}
@@ -0,0 +1,72 @@
#!/bin/bash
# Mos1864: full landing gate4, row288 plus reviewed source fixes641/642/643. Original gate machinery/limits/skip validation retained; own root/webui dependencies, original history preserved.
# Usage: gate.sh T P. mos-1455/1456: every package suite (plugins 0 fail) and
# every scripts/test-*.sh; mos-1453 webui npm ci + MOSAIC_REQUIRE_EDITOR_BUILD=1. mos-1537 fixtures in their own commit.
set -uo pipefail
# Vikunja 623 (mos-1598): absolute nice 19 for the gate and every child; ananicy may still renice node, so the log records it.
[ "$(nice)" = 19 ] || exec nice -n $((19 - $(nice))) bash "$0" "$@"
R=/mnt/storage/src/mosaic-stack
D=/mnt/storage/scratch/sage-641-643-run4
W=/home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4
L=$D/gate.log
C=$1; P=$2
FILES=$(cd $R && git diff --name-only $P $C | grep -v '^agents/' | grep -vx -e docs/SESSIONS.md -e BUILD-LOG.md | sort | tr '\n' ' ')
mkdir -p "$D"
cd $R
[ "$(git -C $W rev-parse HEAD)" = "$(git rev-parse $C)" ] || { echo "worktree not at $C"; exit 9; }
[ -L $W/node_modules ] && rm $W/node_modules; (cd $W && timeout -k 10 900 npm ci --ignore-scripts --no-audit --no-fund) > $D/npm-root.txt 2>&1 || { echo "root npm ci failed" | tee -a $L; exit 9; }; echo "pi $(readlink -f $W/node_modules/.bin/pi)" | tee -a $L
export TMPDIR=$(mktemp -d /mnt/storage/scratch/tmp/XXXXXX) MOSAIC_REQUIRE_EDITOR_BUILD=1
export COMPOSE_PROJECT_NAME=sage641643gate
trap 'docker network rm "${COMPOSE_PROJECT_NAME}_default" >/dev/null 2>&1 && echo "removed network ${COMPOSE_PROJECT_NAME}_default" | tee -a $L' EXIT
echo "start $(date -u +%H:%M:%SZ) base $P cand $C TMPDIR $TMPDIR nice $(nice)" | tee $L
(cd $W/packages/webui && timeout -k 10 900 npm ci --ignore-scripts --no-audit --no-fund) > $D/npm-webui.txt 2>&1 || { echo "npm ci failed" | tee -a $L; exit 9; }
echo "esbuild $(node -p "require('$W/packages/webui/node_modules/esbuild/package.json').version")" | tee -a $L
for f in $FILES; do [ "$(git -C $W hash-object $f)" = "$(git rev-parse $C:$f)" ] || { echo "overlay $f != candidate" | tee -a $L; exit 9; }; done
run() { # name limit dir cmd...
local name=$1 limit=$2 dir=$3; shift 3
( cd $dir && timeout -k 10 $limit "$@" ) > $D/run-$name.txt 2>&1; local rc=$?
echo "== $name rc $rc $(date -u +%H:%M:%SZ) $(grep -E '^ℹ (tests|pass|fail|skipped|cancelled|todo)' $D/run-$name.txt | tr '\n' ' ')" | tee -a $L
grep -nE '^not ok|^✖|# SKIP' $D/run-$name.txt | head -8 | tee -a $L
return $rc
}
red=0
for d in $W/packages/*/; do p=$(basename "$d"); [ -d "$d/tests" ] || continue; [ "$p" = queue ] && continue
case $p in cli) lim=2100;; webui|seat) lim=600;; *) lim=900;; esac
case $p in seat|plugins|webui) run $p $lim $d node --test tests/ || red=1;;
cli) rm -f $D/cli-junit.xml; run $p $lim $d sh -c "node --test --test-reporter=spec --test-reporter-destination=stdout --test-reporter=junit --test-reporter-destination=$D/cli-junit.xml tests/*.test.mjs" || red=1;;
*) run $p $lim $d sh -c 'node --test tests/*.test.mjs' || red=1;; esac
done
grep -qx 'ℹ fail 0' $D/run-plugins.txt || { echo "plugins not fully green" | tee -a $L; red=1; }
for n in $(ls $D/run-*.txt | sed 's/.*run-//; s/\.txt$//'); do grep -q '^ℹ skipped 0$' $D/run-$n.txt || echo "skips in $n: $(grep '^ℹ skipped' $D/run-$n.txt)" | tee -a $L; done
for s in $W/scripts/test-*.sh; do n=$(basename "$s" .sh)
run "script-${n#test-}" 900 $W bash $s || red=1
grep -nE '^skip|SKIP' $D/run-script-${n#test-}.txt | head -5 | sed "s/^/ ${n#test-} /" | tee -a $L
done
# mos-1583: a cli skip passes only if listed here (test file|test name|runner script) and that runner ran in this gate with rc 0, at least 1 pass, 0 skipped and the named test passed. Any unlisted skip is RED.
CLI_SKIP_ALLOW='tests/federation-acceptance.test.mjs|FED R7 scratch two-instance acceptance|scripts/test-federation-acceptance.sh'
python3 -B -I - "$D" "$W" "$CLI_SKIP_ALLOW" <<'PYCHK' | tee -a $L; [ "${PIPESTATUS[0]}" = 0 ] || red=1
import os, re, sys, xml.etree.ElementTree as ET
D, W, allow = sys.argv[1], sys.argv[2], [l.split('|') for l in sys.argv[3].splitlines() if l.strip()]
bad = 0
x = os.path.join(D, 'cli-junit.xml')
if not os.path.exists(x): print('cli skip check: no junit file'); sys.exit(1)
spec = re.search(r'^ℹ skipped (\d+)$', open(os.path.join(D, 'run-cli.txt')).read(), re.M)
skipped = [(os.path.relpath(t.get('file'), os.path.join(W, 'packages/cli')), t.get('name')) for t in ET.parse(x).iter('testcase') if t.find('skipped') is not None]
if not spec or int(spec.group(1)) != len(skipped): print(f'cli skip check: spec count {spec and spec.group(1)} != junit {len(skipped)}'); bad = 1
log = open(os.path.join(D, 'gate.log')).read()
for f, n in skipped:
hit = [a for a in allow if a[0] == f and a[1] == n]
if not hit: print(f'cli skip NOT ALLOWED: {f} "{n}"'); bad = 1; continue
r = hit[0][2]; name = 'script-' + os.path.basename(r)[len('test-'):-len('.sh')]
out = open(os.path.join(D, f'run-{name}.txt')).read() if os.path.exists(os.path.join(D, f'run-{name}.txt')) else ''
rc = re.search(rf'^== {re.escape(name)} rc (\d+) ', log, re.M)
p = re.search(r'^ℹ pass (\d+)$', out, re.M); s = re.search(r'^ℹ skipped (\d+)$', out, re.M)
ok = rc and rc.group(1) == '0' and p and int(p.group(1)) >= 1 and s and s.group(1) == '0' and re.search(rf'^✔ {re.escape(n)} \(', out, re.M)
print(f'cli skip {"allowed" if ok else "RUNNER NOT GREEN"}: {f} "{n}" via {r}'); bad |= 0 if ok else 1
sys.exit(bad)
PYCHK
for f in $FILES; do [ "$(git -C $W hash-object $f)" = "$(git rev-parse $C:$f)" ] || { echo "after runs $f differs" | tee -a $L; red=1; }; done
git -C $W status --porcelain | grep -v '^?? packages/webui/node_modules' | tee -a $L
# Row 288 brief Gate: a search of the run output for the fixture tokens finds nothing (fx288-write, fx288-human).
hits=$(grep -l -E 'fx288-(write|human)' $D/run-*.txt $D/cli-junit.xml 2>/dev/null | wc -l); echo "fixture-token scan: $hits files with a hit" | tee -a $L; [ "$hits" = 0 ] || red=1
[ $red = 0 ] && echo "GATE GREEN $(date -u +%H:%M:%SZ)" | tee -a $L || { echo "GATE RED $(date -u +%H:%M:%SZ)" | tee -a $L; exit 1; }
@@ -0,0 +1,6 @@
// Test/gate process only: measure in the actual Node process after exec.
import os from 'node:os';
os.setPriority(0,19);
const observed=os.getPriority(0);
if(observed!==19)throw Error('gate-priority-refused');
process.stdout.write('nice='+observed+'\n');
@@ -0,0 +1,66 @@
{
"thread": {
"threadId": "mcp:9245555c-5430-42f9-8afc-f77a70fc09ee",
"projectId": "34050c07-ecff-46d5-82c7-e96cba830f49",
"title": "Codex independent review: source timing fixes641\u2013643 / Mos1864",
"createdBy": "agent",
"creationSource": "mcp",
"status": "completed",
"latestRunId": "run:thread:mcp%3A9245555c-5430-42f9-8afc-f77a70fc09ee:ordinal:1",
"activeRunId": null,
"providerInstanceId": "codex",
"model": "gpt-6.1-sol",
"runtimeMode": "full-access",
"interactionMode": "default",
"linkedPullRequest": null,
"pullRequests": [],
"titleRegeneration": null,
"branch": "sage/fix-641-643-run4",
"worktreePath": "/home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4",
"parentThreadId": null,
"relationshipToParent": null,
"runCount": 1,
"itemCount": 33,
"pendingRequestCount": 0,
"archived": false,
"settled": false,
"settledAt": null,
"snoozed": false,
"snoozedUntil": null,
"createdAt": "2026-10-26T15:36:37.763Z",
"updatedAt": "2026-10-26T15:41:08.539Z"
},
"recentRuns": [
{
"runId": "run:thread:mcp%3A9245555c-5430-42f9-8afc-f77a70fc09ee:ordinal:1",
"ordinal": 1,
"status": "completed",
"providerInstanceId": "codex",
"model": "gpt-6.1-sol",
"requestedAt": "2026-10-26T15:36:37.773Z",
"startedAt": "2026-10-26T15:36:40.264Z",
"completedAt": "2026-10-26T15:41:08.539Z"
}
],
"items": [
{
"position": 31,
"visibility": "local",
"sourceThreadId": "mcp:9245555c-5430-42f9-8afc-f77a70fc09ee",
"itemId": "turn-item:provider:codex:native-item:msg_060ad7d03fe7975f016adf7488bbd8819cba249e64860c3f65",
"runId": "run:thread:mcp%3A9245555c-5430-42f9-8afc-f77a70fc09ee:ordinal:1",
"messageId": "message:provider:codex:native-item:msg_060ad7d03fe7975f016adf7488bbd8819cba249e64860c3f65",
"createdBy": "agent",
"creationSource": "provider",
"type": "assistant_message",
"status": "completed",
"title": null,
"text": "**Verdict: not ready to land\u2014one introduced P2 cleanup finding.**\n\n- **P2 \u2014 detached fixture children escape the outer gate\u2019s abort.** [stack-copy.test.mjs:44](/home/jwoltje/.t3/worktrees/mosaic-stack/sage-fix-641-643-run4/packages/cli/tests/stack-copy.test.mjs:44) creates separate process groups, but cleanup runs only through `t.signal` or `t.after`. The actual gate uses external `timeout -k 10`; its SIGTERM can terminate the test-file process without invoking those hooks. A stalled copy/npm group can therefore survive the package timeout, whereas previously it inherited the group receiving the signal. **Recommendation:** add fixture-scoped termination handling that kills owned groups and observes their `close` events before exiting, then restores handlers during ordinary teardown. Keep the asynchronous completion model and existing outer budgets.\n\nOtherwise, the reviewed changes adequately address the stated causes:\n\n- **641:** only probe `ETIMEDOUT` gets the distinct fail-closed refusal; the 1000 ms bound and safety checks remain.\n- **642:** actual halt/resume entry precedes manual clock advancement; original assertions remain, with socket mocking scoped by ownership and restored by `t.mock`. Production `server.mjs` is byte-identical to base.\n- **643:** all **156 original assertions remain in order**, plus three new assertions. Explicit awaits preserve phase order, including both direct spawn conversions. The held-npm control exercises real readiness.\n\nReviewed `193774d75..6efc4a692`; all four hashes match `review-input.json`. Existing logs confirm focused **39/39**, bus **1035/1035**, and the recorded regression/mutation failures. I ran no tests and changed nothing. The abort finding is based on source inspection, without a runtime reproduction; full CLI/fullgate4 acceptance remains pending.",
"textTruncated": false,
"nextTextOffset": null,
"updatedAt": "2026-10-26T15:41:08.478Z"
}
],
"nextPosition": 31,
"hasMore": false
}
@@ -0,0 +1,222 @@
{
"productCommit": "362893d043ff96fdd35f18e326cce683db031471",
"productTree": "a7f7fcd7fc2cc4ba06efad78627f5f04929a0740",
"scope": "Tested gate tooling/evidence publication. No further product changes. Original rc1 receipts preserved. Raw scratch logs are pinned by receipt and independently rehashed.",
"artifacts": [
{
"path": "agents/sage/work/fix-641-643-run4/test-summary.mjs",
"bytes": 2026,
"sha256": "b78746d755d8ff4040bd67f3059db2565d29911082d926ef82836020d91f5d3c"
},
{
"path": "agents/sage/work/fix-641-643-run4/test-summary.test.mjs",
"bytes": 2098,
"sha256": "abcb567c114308f880af37818e6b6c910160f71df8f354fbf4d5878beaee3616"
},
{
"path": "agents/sage/work/fix-641-643-run4/mutant-verdict.mjs",
"bytes": 420,
"sha256": "de04734a7272534fb1a6db4a081d2d4e3e98d200a2e1cc5a3f6eed52ec4098fa"
},
{
"path": "agents/sage/work/fix-641-643-run4/mutant-verdict.test.mjs",
"bytes": 1244,
"sha256": "8879d257a0891ab3736658071b029cdac6a4f7d50d3da11040b200200ba90a9d"
},
{
"path": "agents/sage/work/fix-641-643-run4/gate-priority.mjs",
"bytes": 256,
"sha256": "bd4c6cce235708b82476b8a67c8554dab784a2fdfbe0c0732315696597008da7"
},
{
"path": "agents/sage/work/fix-641-643-run4/acceptance.mjs",
"bytes": 10706,
"sha256": "07f61ad62d520542e8fe86d8428590eb757a982a1a1341120423a60126c6d55f"
},
{
"path": "agents/sage/work/fix-641-643-run4/acceptance.sh",
"bytes": 496,
"sha256": "8aa1007a19e70b6be1696896160e7ffdf4ba9afd9fb2d35a996f4a41515b8564"
},
{
"path": "agents/sage/work/fix-641-643-run4/mutants.mjs",
"bytes": 4197,
"sha256": "c12104113477a8738a70cad8a0b8fbc11409eb7cb6174bbc0b346e22b36ebf9e"
},
{
"path": "agents/sage/work/fix-641-643-run4/p2-mutants-source.txt",
"bytes": 3569,
"sha256": "9bb088485beeda99ab946fad4b8ca18bd29df487d6b5fe72240c12e73a5d803d"
},
{
"path": "agents/sage/work/fix-641-643-run4/audit-completed-packages.mjs",
"bytes": 1041,
"sha256": "46f08f5cb8027adfc0a786bf2cea2c5ee2b7bd986d6ff4c088c83873d634dbdb"
},
{
"path": "agents/sage/work/fix-641-643-run4/completed-packages-independent-audit.json",
"bytes": 1610,
"sha256": "9aceed8a0dcfd31f53e71b69c0bd8ae9e7760ebebd85d8f39b803aed359504a5"
},
{
"path": "agents/sage/work/fix-641-643-run4/counter-final-fixtures.log",
"bytes": 1296,
"sha256": "a43e2768b70cae0d718c8ff7d58a9aa3d84faad55ffd5e4befe71ac77fd5caa0"
},
{
"path": "agents/sage/work/fix-641-643-run4/counter-fixtures-red.log",
"bytes": 8740,
"sha256": "2a0b091cfab86bde15c953a0f593f4efd89043d29756e6b5ac2d7e73e0b9fea9"
},
{
"path": "agents/sage/work/fix-641-643-run4/counter-fixtures-green.log",
"bytes": 625,
"sha256": "49cfb47f4ade3a522614dfcb0c9907708af7d84ac49f42dc3eb7820dd6831dfa"
},
{
"path": "agents/sage/work/fix-641-643-run4/counter-review-findings-red.log",
"bytes": 7916,
"sha256": "01a925a095755e3f269053dea5da955e0c658ff52bef70eb53d954929346485a"
},
{
"path": "agents/sage/work/fix-641-643-run4/counter-review-findings-green.log",
"bytes": 1296,
"sha256": "bd92a950684a36653d45b0a9a253ba623b1a074bb5e65ed640f25b2b3bc5dab8"
},
{
"path": "agents/sage/work/fix-641-643-run4/counter-independent-review.json",
"bytes": 7326,
"sha256": "c24c8a6b5d32b3f4eb9efa8e85070d6ed9db370ba27b3e84be425a6f16218b1e"
},
{
"path": "agents/sage/work/fix-641-643-run4/model-join-files.txt",
"bytes": 13520,
"sha256": "b699613278c76067b27b8ff4f8cac4d26b8fa5a5b2cefc2333d0135407e48d85"
},
{
"path": "agents/sage/work/fix-641-643-run4/model-join-r2-gate.mjs",
"bytes": 8012,
"sha256": "33b2ab20a3a6248706102e8f12851f2c337b7e00403b491e64b6474beb169590"
},
{
"path": "agents/sage/work/fix-641-643-run4/model-join-r2-frozen.json",
"bytes": 366741,
"sha256": "0eaf6b4452fa569bf3abf5ebcdcf21e13158705f082b606b94db0f8fbf7cbd25"
},
{
"path": "agents/sage/work/fix-641-643-run4/model-join-r2-full-events.jsonl",
"bytes": 300991,
"sha256": "0dea4da78877b1da31ddaa6a885bced35eca3b16956642314dbce9aca8bce823"
},
{
"path": "agents/sage/work/fix-641-643-run4/model-join-r2-full-receipts.json",
"bytes": 292045,
"sha256": "df2f0497caa6236784154c6c88528bb7f0caad9346ddef13760185186e777fb4"
},
{
"path": "agents/sage/work/fix-641-643-run4/model-join-r2-independent-audit.json",
"bytes": 647,
"sha256": "0b5928b44152f88f5cc3b205ea3a63cf65f47116db0b7009875f02d088e233a4"
},
{
"path": "agents/sage/work/fix-641-643-run4/model-join-completion-gate.mjs",
"bytes": 7182,
"sha256": "e8443621f152cfb76db464b69c8c0476418e8c18fe84216ea5794118c981d9c0"
},
{
"path": "agents/sage/work/fix-641-643-run4/model-join-completion-events.jsonl",
"bytes": 4525,
"sha256": "68660e2d95ae4de5f88c58684aeb30d4eaf6f8bbd699d731095ab2d776330404"
},
{
"path": "agents/sage/work/fix-641-643-run4/model-join-completion-receipts.json",
"bytes": 4582,
"sha256": "fd1285550659da9caffcef36dfe7d945cbf3c1a68563b1ced9e9a28a2b6d3b0f"
},
{
"path": "agents/sage/work/fix-641-643-run4/model-join-final-gate.mjs",
"bytes": 7465,
"sha256": "ea805c321bcaf12c3f595bfa6fee13e6c0c9b5faee8ef6898099b1443ea01ac4"
},
{
"path": "agents/sage/work/fix-641-643-run4/model-join-final-events.jsonl",
"bytes": 11959,
"sha256": "9fa3be8ccaa17831ae4ea98329948bc3f50f5ff5210d57ac7c3bdb20954ef6c0"
},
{
"path": "agents/sage/work/fix-641-643-run4/model-join-final-receipts.json",
"bytes": 11625,
"sha256": "5aeda9288f418bc5990eec7495b84b8034023b140015cf46ea773baf29f4f378"
},
{
"path": "agents/sage/work/fix-641-643-run4/model-join-final-result.json",
"bytes": 19530,
"sha256": "4400a81d879790a7d4eb6add8bf07e368fd1fbc6dff6989c6629ecf9bdeb4827"
},
{
"path": "agents/sage/work/fix-641-643-run4/model-join-tested-product-map.json",
"bytes": 485066,
"sha256": "6b3cbbac40a50121f1a234ed4690d4ea559b2b7ca1e80a3caabb9e04632cd4e2"
},
{
"path": "agents/sage/work/fix-641-643-run4/mos1881-product-before-final.json",
"bytes": 428,
"sha256": "89dfe11337eb6d33c4ad426d7c3227bfcee1ec1ef4176f3b5be6bbbabd644721"
},
{
"path": "agents/sage/work/fix-641-643-run4/mos1881-product-freeze.json",
"bytes": 365094,
"sha256": "131ed90d0c3bd0bb4681ee0e8046103fcc845536b024871db1e1cb30c491ddfd"
},
{
"path": "agents/sage/work/fix-641-643-run4/pre1881-acceptance.mjs.txt",
"bytes": 10500,
"sha256": "e55807f718375b0914bcd6448e2a420611c25d37061fd9237986b1484acf1f30"
},
{
"path": "agents/sage/work/fix-641-643-run4/pre1881-mutants.mjs.txt",
"bytes": 3693,
"sha256": "335e8b1ec268cab5fe7fe644d635cf78e727b2f257eef5b3dc1bf89fb4f7aa5b"
},
{
"path": "agents/sage/work/fix-641-643-run4/r1-model-join-frozen.json",
"bytes": 366553,
"sha256": "d4855f7df632a3b48d3b93e121452922dfcd386bd1baf9c2901434f49fe7214e"
},
{
"path": "agents/sage/work/fix-641-643-run4/r1-model-join-full-events.jsonl",
"bytes": 80651,
"sha256": "357307a14defa36f1c35715227a090b361a1eab706273880bd355369f8da2e97"
},
{
"path": "agents/sage/work/fix-641-643-run4/r1-model-join-full-receipts.json",
"bytes": 78158,
"sha256": "e79878e31c5b013af297c32fae1f37718366494fb8d0fb33671ea29b372c86ca"
},
{
"path": "agents/sage/work/fix-641-643-run4/r1-model-join-gate.mjs",
"bytes": 7910,
"sha256": "411ab4d25415fb49ba19bdf849614a2d42754d4a8912c99a2d6ec55cb0828c3c"
},
{
"path": "agents/sage/work/fix-641-643-run4/row330-reviewed-integration.patch",
"bytes": 103954,
"sha256": "75bedb29f3e48c148e7a5047a6c2282f198db00cea02ad92e59a60f1e37cc656"
},
{
"path": "agents/sage/work/fix-641-643-run4/row331-reviewed-integration.patch",
"bytes": 376592,
"sha256": "fcac5bd5485662943eb9cfeb3e7db7c279a56743791bbbade4b8236d6f2301d3"
},
{
"path": "agents/sage/work/fix-641-643-run4/task660-runner-facts-comment.txt",
"bytes": 3534,
"sha256": "6178b739f411590f1a50efb6294f395c79132d85b92ca87cf1078cf342b7fdfd"
},
{
"path": "agents/sage/work/fix-641-643-run4/task660-runner-facts-receipt.json",
"bytes": 3967,
"sha256": "5b43680126422bb857bbbe7199fa8d34e183a62a13562b7c962ec3f792c55c2e"
}
]
}
@@ -0,0 +1,22 @@
{
"scope": "Tracking only; source landing complete underMos1864. No fabricated reviewer approval or task closure.",
"landed": "52ba14c5f1273d955956c42c48f5c9ed47fc94a1",
"queue331": {
"command": "scripts/mosaic queue move 331 done --op sage-4845-row331-landed-mos1864 --by sage",
"rc": 2,
"actualRefusal": "queue: row 331 round 3 has no approval recorded by boyd, dewey",
"unchanged": true
},
"queue330": {
"state": "in-progress",
"claimant": "poe",
"reviewers": [
"filbert",
"gladstone"
],
"reviewRound": null,
"sourceRule": "in-progress can request review only through actual claimant; done requires formal current-round approvals. No new request, impersonation or record fabricated."
},
"tasks655656": "OPEN; actual landing comments1336/1337 fullbody+author13 GET readback",
"tasks657658": "OPEN BACKLOG under1864; unchanged"
}
@@ -0,0 +1,11 @@
{"name":"p4-package-bus","event":"start","at":"2026-10-26T16:55:52.536Z","uptime":"11:55:52 up 13 days, 3:15, 2 users, load average: 1.68, 2.43, 2.91","TMPDIR":"/mnt/storage/scratch/tmp/qkd9u0","nice":19}
{"name":"p4-package-bus","event":"end","at":"2026-10-26T16:55:52.536Z","uptime":"11:55:52 up 13 days, 3:15, 2 users, load average: 1.68, 2.43, 2.91","TMPDIR":"/mnt/storage/scratch/tmp/qkd9u0","nice":19,"measuredDriverNice":19,"measuredChildNice":19,"endAt":"2026-10-26T16:56:41.068Z","endUptime":"11:56:41 up 13 days, 3:16, 2 users, load average: 3.65, 2.99, 3.09","rc":0,"signal":null,"timedOut":false,"tests":1349,"pass":1349,"fail":0,"skipped":0,"cancelled":0,"failedNames":[],"log":{"path":"/mnt/storage/scratch/tmp/NNbINE/001-p4-package-bus.log","sha256":"879bfaf5333776d32ca152474ba1f21079ab4f838b81bd5c537aac5f5c3756df","bytes":407826}}
{"name":"p4-package-model-proxy","event":"start","at":"2026-10-26T16:56:41.075Z","uptime":"11:56:41 up 13 days, 3:16, 2 users, load average: 3.65, 2.99, 3.09","TMPDIR":"/mnt/storage/scratch/tmp/sANAtm","nice":19}
{"name":"p4-package-model-proxy","event":"end","at":"2026-10-26T16:56:41.075Z","uptime":"11:56:41 up 13 days, 3:16, 2 users, load average: 3.65, 2.99, 3.09","TMPDIR":"/mnt/storage/scratch/tmp/sANAtm","nice":19,"measuredDriverNice":19,"measuredChildNice":19,"endAt":"2026-10-26T16:56:42.528Z","endUptime":"11:56:42 up 13 days, 3:16, 2 users, load average: 3.52, 2.97, 3.08","rc":0,"signal":null,"timedOut":false,"tests":100,"pass":100,"fail":0,"skipped":0,"cancelled":0,"failedNames":[],"log":{"path":"/mnt/storage/scratch/tmp/NNbINE/002-p4-package-model-proxy.log","sha256":"38d0b10474b5eb8bb9a8a27ab846e94151830215e1de22d2e6143baa8f6032f0","bytes":18907}}
{"name":"p4-package-webui","event":"start","at":"2026-10-26T16:56:42.532Z","uptime":"11:56:42 up 13 days, 3:16, 2 users, load average: 3.52, 2.97, 3.08","TMPDIR":"/mnt/storage/scratch/tmp/N5hmsP","nice":19}
{"name":"p4-package-webui","event":"end","at":"2026-10-26T16:56:42.532Z","uptime":"11:56:42 up 13 days, 3:16, 2 users, load average: 3.52, 2.97, 3.08","TMPDIR":"/mnt/storage/scratch/tmp/N5hmsP","nice":19,"measuredDriverNice":19,"measuredChildNice":19,"endAt":"2026-10-26T16:57:47.265Z","endUptime":"11:57:47 up 13 days, 3:17, 2 users, load average: 30.24, 11.91, 6.22","rc":0,"signal":null,"timedOut":false,"tests":490,"pass":490,"fail":0,"skipped":0,"cancelled":0,"failedNames":[],"log":{"path":"/mnt/storage/scratch/tmp/NNbINE/003-p4-package-webui.log","sha256":"e0622991e6ee3c14bfc6290e508facf71520d8129523e1b18ec12e80bd44a69b","bytes":120534}}
{"name":"p4-PIN8.0.42-acceptance","event":"start","at":"2026-10-26T16:57:47.269Z","uptime":"11:57:47 up 13 days, 3:17, 2 users, load average: 30.24, 11.91, 6.22","TMPDIR":"/mnt/storage/scratch/tmp/hdnrr1","nice":19}
{"name":"p4-PIN8.0.42-acceptance","event":"end","at":"2026-10-26T16:57:47.269Z","uptime":"11:57:47 up 13 days, 3:17, 2 users, load average: 30.24, 11.91, 6.22","TMPDIR":"/mnt/storage/scratch/tmp/hdnrr1","nice":19,"measuredDriverNice":19,"measuredChildNice":19,"endAt":"2026-10-26T16:57:52.712Z","endUptime":"11:57:52 up 13 days, 3:17, 2 users, load average: 27.82, 11.71, 6.19","rc":0,"signal":null,"timedOut":false,"tests":0,"pass":0,"fail":0,"skipped":0,"cancelled":0,"failedNames":[],"log":{"path":"/mnt/storage/scratch/tmp/NNbINE/004-p4-PIN8.0.42-acceptance.log","sha256":"2ff789fe22bd08b11f2ff343f4c801d8fd161f99180bec8f195181e90144e3eb","bytes":2367}}
{"name":"p4-four-mutants","event":"start","at":"2026-10-26T16:57:52.721Z","uptime":"11:57:52 up 13 days, 3:17, 2 users, load average: 27.82, 11.71, 6.19","TMPDIR":"/mnt/storage/scratch/tmp/rulrdY","nice":19}
{"name":"p4-four-mutants","event":"end","at":"2026-10-26T16:57:52.721Z","uptime":"11:57:52 up 13 days, 3:17, 2 users, load average: 27.82, 11.71, 6.19","TMPDIR":"/mnt/storage/scratch/tmp/rulrdY","nice":19,"measuredDriverNice":19,"measuredChildNice":19,"endAt":"2026-10-26T16:57:53.182Z","endUptime":"11:57:53 up 13 days, 3:17, 2 users, load average: 27.82, 11.71, 6.19","rc":1,"signal":null,"timedOut":false,"tests":0,"pass":0,"fail":0,"skipped":0,"cancelled":0,"failedNames":[],"log":{"path":"/mnt/storage/scratch/tmp/NNbINE/005-p4-four-mutants.log","sha256":"b63e4f1129303f2f2fc9f500069c8e30027b3e8a9b99d52a867ba40fbe2847f9","bytes":1045}}
{"event":"stopped","reason":"RED P4 mutants or restored controls","at":"2026-10-26T16:57:53.183Z","uptime":"11:57:53 up 13 days, 3:17, 2 users, load average: 27.82, 11.71, 6.19"}
@@ -0,0 +1,86 @@
// Mos1864: combined321 whole-file gate for reviewed330/331, after landed288 and source timing repairs; source frozen before launch.
import fs from 'node:fs';
import path from 'node:path';
import os from 'node:os';
import vm from 'node:vm';
import { createHash } from 'node:crypto';
import { execFileSync, spawn } from 'node:child_process';
const root=process.cwd(),home=path.join(root,'agents/sage/work/fix-641-643-run4');
os.setPriority(0,19);
const archive=execFileSync('mktemp',['-d','/mnt/storage/scratch/tmp/XXXXXX'],{encoding:'utf8'}).trim();
const events=path.join(home,'model-join-completion-events.jsonl'),receipt=path.join(home,'model-join-completion-receipts.json');
const candidate=execFileSync('git',['rev-parse','HEAD'],{encoding:'utf8'}).trim();
fs.writeFileSync(events,'',{flag:'wx'});
const rows=[];
const uptime=()=>execFileSync('uptime',[],{encoding:'utf8'}).trim();
const logEvent=e=>fs.appendFileSync(events,JSON.stringify(e)+'\n');
const hash=b=>createHash('sha256').update(b).digest('hex');
async function step(name,command,args,timeout=0){
const temp=execFileSync('mktemp',['-d','/mnt/storage/scratch/tmp/XXXXXX'],{encoding:'utf8'}).trim();
fs.mkdirSync(path.join(temp,'home'));fs.mkdirSync(path.join(temp,'config'));
const env={...process.env,TMPDIR:temp,HOME:path.join(temp,'home'),MOSAIC_CONFIG:path.join(temp,'config/config.json'),MOSAIC_REQUIRE_EDITOR_BUILD:'1'};
for(const key of Object.keys(env))if(/TOKEN|SECRET|PASSWORD|API_KEY|AUTH_SOCK|BUS_CAP|CREDENTIAL/.test(key))delete env[key];
for(const key of ['OPENAI_API_KEY','ANTHROPIC_API_KEY','ANTHROPIC_AUTH_TOKEN','CLAUDE_CODE_OAUTH_TOKEN','OPENROUTER_API_KEY','ZAI_API_KEY','MOSAIC_BUS_CAP'])delete env[key];
os.setPriority(0,19);
const before={name,event:'start',at:new Date().toISOString(),uptime:uptime(),TMPDIR:temp,nice:os.getPriority(0)};
logEvent(before);
const file=path.join(archive,String(rows.length+1).padStart(3,'0')+'-'+name.replaceAll('/','_')+'.log');
const fd=fs.openSync(file,'wx',0o600);
os.setPriority(0,19);
const measuredDriverNice=os.getPriority(0);fs.writeSync(fd,'driverNice='+measuredDriverNice+'\n');
let timer,timedOut=false;
const child=spawn(command,args,{cwd:root,env,stdio:['ignore',fd,fd]});
let measuredChildNice=null;
if(child.pid){os.setPriority(child.pid,19);measuredChildNice=os.getPriority(child.pid);}
fs.writeSync(fd,'nice='+String(measuredChildNice)+'\n');fs.closeSync(fd);
if(timeout)timer=setTimeout(()=>{timedOut=true;child.kill('SIGTERM');},timeout);
const outcome=await new Promise(resolve=>{child.once('error',error=>resolve({rc:1,error:error.code}));child.once('close',(code,signal)=>resolve({rc:code??1,signal}));});
clearTimeout(timer);
const endLoad=uptime(),bytes=fs.readFileSync(file),text=bytes.toString();
const count=key=>Number([...text.matchAll(new RegExp('^(?:#|ℹ) '+key+' (\\d+)$','gm'))].at(-1)?.[1]??0);
const shell=/selftest: (\d+) passed, (\d+) failed/.exec(text);
const row={...before,measuredDriverNice,measuredChildNice,event:'end',endAt:new Date().toISOString(),endUptime:endLoad,...outcome,timedOut,
tests:shell?Number(shell[1])+Number(shell[2]):count('tests'),pass:shell?Number(shell[1]):count('pass'),fail:shell?Number(shell[2]):count('fail'),skipped:count('skipped'),cancelled:count('cancelled'),
failedNames:text.split('\n').filter(s=>s.startsWith('not ok ')).map(s=>s.replace(/^not ok \d+ - /,'')),log:{path:file,sha256:hash(bytes),bytes:bytes.length}};
rows.push(row);logEvent(row);fs.writeFileSync(receipt,JSON.stringify({clear:process.env.MOSAIC_GATE_CLEAR??'not supplied',baseHEAD:candidate,appliedFrozenSHA:hash(fs.readFileSync(path.join(home,'model-join-r2-frozen.json'))),archive,rows},null,2)+'\n');
process.stdout.write(`${name} rc=${row.rc} pass=${row.pass} fail=${row.fail} skip=${row.skipped} start=[${row.uptime}] end=[${endLoad}]\n`);
if(measuredDriverNice!==19||measuredChildNice!==19)throw Error('priority-refused '+name);
return row;
}
const testArgs=file=>['--test','--test-reporter=tap',path.join(root,file)];
const sourceFile=path.join(root,'packages/bus/src/model-keys.mjs'),original=fs.readFileSync(sourceFile,'utf8');
const frozen=JSON.parse(fs.readFileSync(path.join(home,'model-join-r2-frozen.json'),'utf8'));
function verifyFrozen(){for(const row of frozen.rows){const bytes=fs.readFileSync(path.join(root,row.path));if(bytes.length!==row.bytes||hash(bytes)!==row.sha256)throw Error('frozen source changed '+row.path);}}
verifyFrozen();
try{
// The unchanged321-file phase and actualFED1/1 are independently audited; this is the remaining distinct gate block.
// P4 also requires its whole packages, not just the dependency inventory.
for(const pkg of ['bus','model-proxy','webui']){
const files=fs.readdirSync(path.join(root,'packages',pkg,'tests')).filter(f=>f.endsWith('.test.mjs')).map(f=>path.join(root,'packages',pkg,'tests',f));
const row=await step('p4-package-'+pkg,process.execPath,['--test','--test-reporter=tap',...files],900000);
if(row.rc!==0||row.fail||row.skipped||row.cancelled||row.timedOut)throw Error('RED P4 whole package '+pkg);
}
const acceptance=await step('p4-PIN8.0.42-acceptance','bash',[path.join(home,'acceptance.sh'),'/mnt/storage/scratch/tmp/76TDtz/download/opt/cliproxyapi/8.0.42/cli-proxy-api'],180000);
if(acceptance.rc!==0||acceptance.timedOut)throw Error('RED P4 PIN acceptance');
const p4mutants=await step('p4-four-mutants',process.execPath,[path.join(home,'mutants.mjs')],900000);
if(p4mutants.rc!==0||p4mutants.timedOut)throw Error('RED P4 mutants or restored controls');
const shell=await step('scripts/test-config.sh','timeout',['-k','10','1800',path.join(root,'scripts/test-config.sh')]);
if(shell.rc!==0||shell.fail)throw Error('RED scripts/test-config.sh');
const helper=fs.readFileSync(path.join(home,'p2-mutants-source.txt'),'utf8');
const start=helper.indexOf('const cases = ')+14,end=helper.indexOf('\nos.setPriority',start);
const cases=vm.runInNewContext('('+helper.slice(start,end).trim().replace(/;$/,'')+')');
for(const m of cases){
if(original.split(m.from).length!==2)throw Error('mutation anchor not unique '+m.name);
let result;
try{fs.writeFileSync(sourceFile,original.replace(m.from,m.to));result=await step('mutant-'+m.name,process.execPath,testArgs('packages/bus/tests/model-keys.test.mjs'),180000);}
finally{fs.writeFileSync(sourceFile,original);}
const killed=result.rc!==0&&!result.timedOut&&result.failedNames.some(name=>name===m.failure);
logEvent({event:'mutant-result',name:m.name,killed,restoredSha256:hash(fs.readFileSync(sourceFile))});
if(!killed)throw Error('mutant not killed by named behavior '+m.name);
const positive=await step('positive-'+m.name,process.execPath,testArgs('packages/bus/tests/model-keys.test.mjs'),180000);
if(positive.rc!==0)throw Error('RED positive control '+m.name);
}
verifyFrozen();
logEvent({event:'complete',at:new Date().toISOString(),uptime:uptime()});
}catch(error){logEvent({event:'stopped',reason:error.message,at:new Date().toISOString(),uptime:uptime()});process.stdout.write(error.message+'\n');process.exitCode=1;}
finally{if(fs.readFileSync(sourceFile,'utf8')!==original)fs.writeFileSync(sourceFile,original);}
@@ -0,0 +1,138 @@
{
"clear": "mos1864-continuation-unchanged-product",
"baseHEAD": "acd2f4abfa7ec45c63ba720ca400683098360ea1",
"appliedFrozenSHA": "0eaf6b4452fa569bf3abf5ebcdcf21e13158705f082b606b94db0f8fbf7cbd25",
"archive": "/mnt/storage/scratch/tmp/NNbINE",
"rows": [
{
"name": "p4-package-bus",
"event": "end",
"at": "2026-10-26T16:55:52.536Z",
"uptime": "11:55:52 up 13 days, 3:15, 2 users, load average: 1.68, 2.43, 2.91",
"TMPDIR": "/mnt/storage/scratch/tmp/qkd9u0",
"nice": 19,
"measuredDriverNice": 19,
"measuredChildNice": 19,
"endAt": "2026-10-26T16:56:41.068Z",
"endUptime": "11:56:41 up 13 days, 3:16, 2 users, load average: 3.65, 2.99, 3.09",
"rc": 0,
"signal": null,
"timedOut": false,
"tests": 1349,
"pass": 1349,
"fail": 0,
"skipped": 0,
"cancelled": 0,
"failedNames": [],
"log": {
"path": "/mnt/storage/scratch/tmp/NNbINE/001-p4-package-bus.log",
"sha256": "879bfaf5333776d32ca152474ba1f21079ab4f838b81bd5c537aac5f5c3756df",
"bytes": 407826
}
},
{
"name": "p4-package-model-proxy",
"event": "end",
"at": "2026-10-26T16:56:41.075Z",
"uptime": "11:56:41 up 13 days, 3:16, 2 users, load average: 3.65, 2.99, 3.09",
"TMPDIR": "/mnt/storage/scratch/tmp/sANAtm",
"nice": 19,
"measuredDriverNice": 19,
"measuredChildNice": 19,
"endAt": "2026-10-26T16:56:42.528Z",
"endUptime": "11:56:42 up 13 days, 3:16, 2 users, load average: 3.52, 2.97, 3.08",
"rc": 0,
"signal": null,
"timedOut": false,
"tests": 100,
"pass": 100,
"fail": 0,
"skipped": 0,
"cancelled": 0,
"failedNames": [],
"log": {
"path": "/mnt/storage/scratch/tmp/NNbINE/002-p4-package-model-proxy.log",
"sha256": "38d0b10474b5eb8bb9a8a27ab846e94151830215e1de22d2e6143baa8f6032f0",
"bytes": 18907
}
},
{
"name": "p4-package-webui",
"event": "end",
"at": "2026-10-26T16:56:42.532Z",
"uptime": "11:56:42 up 13 days, 3:16, 2 users, load average: 3.52, 2.97, 3.08",
"TMPDIR": "/mnt/storage/scratch/tmp/N5hmsP",
"nice": 19,
"measuredDriverNice": 19,
"measuredChildNice": 19,
"endAt": "2026-10-26T16:57:47.265Z",
"endUptime": "11:57:47 up 13 days, 3:17, 2 users, load average: 30.24, 11.91, 6.22",
"rc": 0,
"signal": null,
"timedOut": false,
"tests": 490,
"pass": 490,
"fail": 0,
"skipped": 0,
"cancelled": 0,
"failedNames": [],
"log": {
"path": "/mnt/storage/scratch/tmp/NNbINE/003-p4-package-webui.log",
"sha256": "e0622991e6ee3c14bfc6290e508facf71520d8129523e1b18ec12e80bd44a69b",
"bytes": 120534
}
},
{
"name": "p4-PIN8.0.42-acceptance",
"event": "end",
"at": "2026-10-26T16:57:47.269Z",
"uptime": "11:57:47 up 13 days, 3:17, 2 users, load average: 30.24, 11.91, 6.22",
"TMPDIR": "/mnt/storage/scratch/tmp/hdnrr1",
"nice": 19,
"measuredDriverNice": 19,
"measuredChildNice": 19,
"endAt": "2026-10-26T16:57:52.712Z",
"endUptime": "11:57:52 up 13 days, 3:17, 2 users, load average: 27.82, 11.71, 6.19",
"rc": 0,
"signal": null,
"timedOut": false,
"tests": 0,
"pass": 0,
"fail": 0,
"skipped": 0,
"cancelled": 0,
"failedNames": [],
"log": {
"path": "/mnt/storage/scratch/tmp/NNbINE/004-p4-PIN8.0.42-acceptance.log",
"sha256": "2ff789fe22bd08b11f2ff343f4c801d8fd161f99180bec8f195181e90144e3eb",
"bytes": 2367
}
},
{
"name": "p4-four-mutants",
"event": "end",
"at": "2026-10-26T16:57:52.721Z",
"uptime": "11:57:52 up 13 days, 3:17, 2 users, load average: 27.82, 11.71, 6.19",
"TMPDIR": "/mnt/storage/scratch/tmp/rulrdY",
"nice": 19,
"measuredDriverNice": 19,
"measuredChildNice": 19,
"endAt": "2026-10-26T16:57:53.182Z",
"endUptime": "11:57:53 up 13 days, 3:17, 2 users, load average: 27.82, 11.71, 6.19",
"rc": 1,
"signal": null,
"timedOut": false,
"tests": 0,
"pass": 0,
"fail": 0,
"skipped": 0,
"cancelled": 0,
"failedNames": [],
"log": {
"path": "/mnt/storage/scratch/tmp/NNbINE/005-p4-four-mutants.log",
"sha256": "b63e4f1129303f2f2fc9f500069c8e30027b3e8a9b99d52a867ba40fbe2847f9",
"bytes": 1045
}
}
]
}
Loaded 100 of 299 files, more files were not shown because too many files have changed in this diff. Show more