{ "grant": "sage-3023", "head": "4e76bd6fc50bb64512dbbd38be550df97387c794", "base": "0cbe2e9b3", "manifest": "8f30c19a530789df8b22a77bed24250a5ccd94f9eb0a38534f512d3dd0e82189", "scope": { "whole_files": [ "packages/cli/tests/case1-accept.test.mjs", "packages/cli/tests/case2-unit.test.mjs" ], "shells": [ "scripts/test-auth.sh", "scripts/test-conductor.sh", "scripts/test-config.sh", "scripts/test-discord.sh", "scripts/test-extension-package.sh", "scripts/test-foundation.sh", "scripts/test-land-work.sh", "scripts/test-queue.sh", "scripts/test-release.sh", "scripts/test-task.sh" ], "mutants": [ "M1", "M2", "M3", "M4", "M5", "M6", "M7", "M8", "M9", "M10", "M11", "M12", "M13", "M14", "M15", "M16", "M17" ], "red_pattern": "row276 talk legacy inner timeout", "node_seconds": 900, "estimate_minutes": "12-18; no row276 measured runtime yet" }, "limits": { "files": { "packages/cli/tests/case1-accept.test.mjs": 900, "packages/cli/tests/case2-unit.test.mjs": 900 }, "basis": "No row276 timing yet; initial900s per whole file; Sage may adjust before CLEAR." }, "shell_limits": { "authority": [ "mos-1275", "sage-2659" ], "scope": "Own Gander row196 receipt set documented for row278, plus the complete row278 run3 shell phase. Row253 old C4 results do not carry. Receipts choose timeouts only.", "consulted_records": [ "ec1e7fad8:agents/gander/work/queue-196/evidence/suite-results-run1.json", "ec1e7fad8:agents/gander/work/queue-196/evidence/suite-results.json", "ec1e7fad8:agents/gander/work/queue-196/r2/mutants/results.json", "ec1e7fad8:agents/gander/work/queue-196/r2/run2/base-results.json", "ec1e7fad8:agents/gander/work/queue-196/r2/run2/killers/results.json", "ec1e7fad8:agents/gander/work/queue-196/r3/gate/base-results.json", "ec1e7fad8:agents/gander/work/queue-196/r3/gate/killers/results.json", "ec1e7fad8:agents/gander/work/queue-196/r3/gate/sso-results.json", "ec1e7fad8:agents/gander/work/queue-196/r4/gate/base-results.json", "ec1e7fad8:agents/gander/work/queue-196/r4/gate/killers/results.json", "ec1e7fad8:agents/gander/work/queue-196/r4/gate/sso-results.json", "ec1e7fad8:agents/gander/work/queue-196/r4/gate/whole-results.json", "ec1e7fad8:agents/gander/work/queue-196/r5/gate/whole-results.json", "ec1e7fad8:agents/gander/work/queue-196/r5/resume/summary.json", "ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json", "ec1e7fad8:agents/gander/work/queue-196/r6/base-results.json", "ec1e7fad8:agents/gander/work/queue-196/r6/first-attempt/results.json", "ec1e7fad8:agents/gander/work/queue-196/r6/killers/results.json", "ec1e7fad8:agents/gander/work/queue-196/r6/summary.json", "ec1e7fad8:agents/gander/work/queue-196/r6/whole-results.json", "385a7194c:agents/gander/work/queue-278/run3/whole/results.json" ], "scripts": { "scripts/test-auth.sh": { "recorded_duration_seconds": 1.9081228229999543, "receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)", "limit_seconds": 126, "derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom", "script_sha256": "dd4720cb0cbecd2fc523a318f2222d21d257c8c5889996a3d69e522ee971a707", "previous_maximum_seconds": 1.9081228229999543, "previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r6/whole-results.json", "row278_run3_seconds": 0.816 }, "scripts/test-conductor.sh": { "recorded_duration_seconds": 8.057173820000026, "receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)", "limit_seconds": 145, "derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom", "script_sha256": "da84150467494a4c979759f400854411bd93a7efce981139757bf526d688a23b", "previous_maximum_seconds": 8.057173820000026, "previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r6/whole-results.json", "row278_run3_seconds": 6.078 }, "scripts/test-config.sh": { "recorded_duration_seconds": 3.1678915339999367, "receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)", "limit_seconds": 130, "derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom", "script_sha256": "3301c1fabf616bb961d62f6decd0a46dadb0f399b8ba7f3c2ca60023d2b24c78", "previous_maximum_seconds": 3.1678915339999367, "previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r6/whole-results.json", "row278_run3_seconds": 1.868 }, "scripts/test-discord.sh": { "recorded_duration_seconds": 8.776727847000002, "receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)", "limit_seconds": 147, "derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom", "script_sha256": "a5dcf783c51a5d5d184a357f91ebf9fa1c4e054f0cb84a3d1d7668f6156e025e", "previous_maximum_seconds": 8.776727847000002, "previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json", "row278_run3_seconds": 7.431 }, "scripts/test-extension-package.sh": { "recorded_duration_seconds": 3.01285702399991, "receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)", "limit_seconds": 130, "derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom", "script_sha256": "5d7b687f16fd1a9414b229501177d530ba3af4eadd3cac319b33f38fdba9bf99", "previous_maximum_seconds": 3.01285702399991, "previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json", "row278_run3_seconds": 1.366 }, "scripts/test-foundation.sh": { "recorded_duration_seconds": 49.367, "receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)", "limit_seconds": 269, "derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom", "script_sha256": "2e11038e7f784ec4f539eb768f63bab0fab9c9940334388a1fe2d47ab9e2b008", "previous_maximum_seconds": 39.70872647900006, "previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json", "row278_run3_seconds": 39.901 }, "scripts/test-land-work.sh": { "recorded_duration_seconds": 16.854, "receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)", "limit_seconds": 171, "derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom", "script_sha256": "c9d1d5c9b006d5c12e5f796a9828361059f8e0410846fc55c070c0148b15cef4", "previous_maximum_seconds": 12.623263413000037, "previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json", "row278_run3_seconds": 11.338 }, "scripts/test-queue.sh": { "recorded_duration_seconds": 35.155, "receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)", "limit_seconds": 226, "derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom", "script_sha256": "c270f181d1fa8b6d42ff4131c339beba786a8fd620bb66f8afdcec05e8b10868", "previous_maximum_seconds": 23.443742031000088, "previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json", "row278_run3_seconds": 21.158 }, "scripts/test-release.sh": { "recorded_duration_seconds": 12.168674453999964, "receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)", "limit_seconds": 157, "derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom", "script_sha256": "be706dff832257bd4781abeabd19faa4ac16edf9a4af0c96457e33cf3bb6deb3", "previous_maximum_seconds": 12.168674453999964, "previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json", "row278_run3_seconds": 2.67 }, "scripts/test-task.sh": { "recorded_duration_seconds": 36.783798266, "receipt": "3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json (with earlier maximum retained)", "limit_seconds": 231, "derivation": "ceil(3 * longest successful whole-file receipt) + 120s headroom", "script_sha256": "10c4abb70bf9b83e617089b06a5436cc7fa6b866a176458b22128c3a15163f94", "previous_maximum_seconds": 36.783798266, "previous_receipt": "ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json", "row278_run3_seconds": 13.843 } } }, "carry": "NONE; fresh run5 after clean10x timing proof" } START whole-1 TAP version 13 # Subtest: row253 socket observation uses configured root, metadata and the Console peer without sending bytes ok 1 - row253 socket observation uses configured root, metadata and the Console peer without sending bytes --- duration_ms: 1884.195252 type: 'test' ... # Subtest: row253 P10 refuses unsafe metadata, wrong peers and an unsafe Python without claiming closure ok 2 - row253 P10 refuses unsafe metadata, wrong peers and an unsafe Python without claiming closure --- duration_ms: 29724.482076 type: 'test' ... # Subtest: row253 acceptance rejects bad config and unsupported copies before talk ok 3 - row253 acceptance rejects bad config and unsupported copies before talk --- duration_ms: 1481.005917 type: 'test' ... # Subtest: row253 stalled peer observation ends within its bound without leaving a reader ok 4 - row253 stalled peer observation ends within its bound without leaving a reader --- duration_ms: 3950.519546 type: 'test' ... # Subtest: row253 P8 refuses both retired TCP and board listeners ok 5 - row253 P8 refuses both retired TCP and board listeners --- duration_ms: 3761.053074 type: 'test' ... # Subtest: row253 C4 acceptance query inner reason holds under both sudo models ok 6 - row253 C4 acceptance query inner reason holds under both sudo models --- duration_ms: 10710.177651 type: 'test' ... # Subtest: row253 C4 acceptance query outer reason discards stdout and names residual cleanup ok 7 - row253 C4 acceptance query outer reason discards stdout and names residual cleanup --- duration_ms: 14178.693831 type: 'test' ... # Subtest: row253 C4 acceptance query overflow is output-limit in both models ok 8 - row253 C4 acceptance query overflow is output-limit in both models --- duration_ms: 493.94819 type: 'test' ... # Subtest: row253 C4 P10 inner reason holds under both sudo models ok 9 - row253 C4 P10 inner reason holds under both sudo models --- duration_ms: 11750.073283 type: 'test' ... # {"fault":"inner","mode":"exec","baselineSeconds":1.8457114119999896,"faultSeconds":4.0058177409999915,"probeSeconds":2.160106329000002} # {"fault":"inner","mode":"hop","baselineSeconds":1.854464009000003,"faultSeconds":3.98279024100001,"probeSeconds":2.1283262320000067} # Subtest: row253 C4 P10 outer reason holds under both sudo models ok 10 - row253 C4 P10 outer reason holds under both sudo models --- duration_ms: 15217.26471 type: 'test' ... # {"fault":"outer","mode":"exec","baselineSeconds":1.8522728860000062,"faultSeconds":5.6763905539999975,"probeSeconds":3.8241176679999915} # {"fault":"outer","mode":"hop","baselineSeconds":1.9324154960000015,"faultSeconds":5.701172953000001,"probeSeconds":3.7687574569999995} # Subtest: row253 C4 P10 overflow reason holds under both sudo models ok 11 - row253 C4 P10 overflow reason holds under both sudo models --- duration_ms: 3690.911036 type: 'test' ... # Subtest: row 195 accept: every check passing exits 0, with each P mark and counts that match the lines ok 12 - row 195 accept: every check passing exits 0, with each P mark and counts that match the lines --- duration_ms: 1851.487032 type: 'test' ... # Subtest: row 195 accept: exits 1 with each F check failing alone, and its line names it ok 13 - row 195 accept: exits 1 with each F check failing alone, and its line names it --- duration_ms: 20883.697173 type: 'test' ... # Subtest: row 195 accept: F3 fails on exit 0 with no reply line, and its evidence takes talk's error ok 14 - row 195 accept: F3 fails on exit 0 with no reply line, and its evidence takes talk's error --- duration_ms: 3645.492091 type: 'test' ... # Subtest: row 195 accept: F1 fails on a unit that isn't active or isn't User=mosaic ok 15 - row 195 accept: F1 fails on a unit that isn't active or isn't User=mosaic --- duration_ms: 3527.944708 type: 'test' ... # Subtest: row 195 accept: F2 fails when healthz doesn't answer and when another pid holds the port ok 16 - row 195 accept: F2 fails when healthz doesn't answer and when another pid holds the port --- duration_ms: 3720.807316 type: 'test' ... # Subtest: row 195 accept: F5 fails on unpriv_bwrap (enforce), on complain and on a trailing space ok 17 - row 195 accept: F5 fails on unpriv_bwrap (enforce), on complain and on a trailing space --- duration_ms: 8639.417648 type: 'test' ... # Subtest: row 195 accept: F5 fails with no bwrap of mosaic's, and passes on comm alone ok 18 - row 195 accept: F5 fails with no bwrap of mosaic's, and passes on comm alone --- duration_ms: 4019.194222 type: 'test' ... # Subtest: row 195 accept: F6 fails on a stub that prints nothing, on a path outside claude- and on a .. segment ok 19 - row 195 accept: F6 fails on a stub that prints nothing, on a path outside claude- and on a .. segment --- duration_ms: 5201.134461 type: 'test' ... # Subtest: row 195 accept: F7 fails on two live PM launches, one for another business, and no launch.by ok 20 - row 195 accept: F7 fails on two live PM launches, one for another business, and no launch.by --- duration_ms: 5675.420389 type: 'test' ... # Subtest: row 195 accept: F8 fails on 0640, on another owner and on a symlink, and never prints the credential ok 21 - row 195 accept: F8 fails on 0640, on another owner and on a symlink, and never prints the credential --- duration_ms: 5840.600009 type: 'test' ... # Subtest: row 195 accept: F9 fails on another owner, a group-writable mode and a number for the flag ok 22 - row 195 accept: F9 fails on another owner, a group-writable mode and a number for the flag --- duration_ms: 5543.907707 type: 'test' ... # Subtest: row 195 accept: F9 won't run --node as root off the pin path or with a writable directory above it ok 23 - row 195 accept: F9 won't run --node as root off the pin path or with a writable directory above it --- duration_ms: 5263.523951 type: 'test' ... # Subtest: row 195 accept: F11 fails on one *.json under discord/ and passes on an empty directory ok 24 - row 195 accept: F11 fails on one *.json under discord/ and passes on an empty directory --- duration_ms: 3688.254273 type: 'test' ... # Subtest: row 195 accept: each P check reports unnamed on its fault, and the exit stays 0 ok 25 - row 195 accept: each P check reports unnamed on its fault, and the exit stays 0 --- duration_ms: 16777.233948 type: 'test' ... # Subtest: row 195 accept: P2 is unnamed with a supplementary group, and P5 names docker ok 26 - row 195 accept: P2 is unnamed with a supplementary group, and P5 names docker --- duration_ms: 3664.221999 type: 'test' ... # Subtest: row 195 accept: P5 is closed with no jarvis account, and P2 with an empty authorized_keys ok 27 - row 195 accept: P5 is closed with no jarvis account, and P2 with an empty authorized_keys --- duration_ms: 1830.135608 type: 'test' ... # Subtest: row 195 accept: P9 is unnamed once for each item missing ok 28 - row 195 accept: P9 is unnamed once for each item missing --- duration_ms: 9142.255667 type: 'test' ... # Subtest: row253 accept: P10 fails its observation with another peer; P11 with the unit disabled ok 29 - row253 accept: P10 fails its observation with another peer; P11 with the unit disabled --- duration_ms: 3678.224358 type: 'test' ... # Subtest: row 195 accept: every P check unnamed together still exits 0 ok 30 - row 195 accept: every P check unnamed together still exits 0 --- duration_ms: 1622.545993 type: 'test' ... # Subtest: row 195 accept: a bad args file refuses with exit 2 before any check, each for its own reason ok 31 - row 195 accept: a bad args file refuses with exit 2 before any check, each for its own reason --- duration_ms: 93.539947 type: 'test' ... # Subtest: row 195 accept: usage errors and a run without --root as a user exit 2 ok 32 - row 195 accept: usage errors and a run without --root as a user exit 2 --- duration_ms: 9.824418 type: 'test' ... # Subtest: row 195 accept: every in-instance call goes through sudo -u mosaic -H env PATH=:... ok 33 - row 195 accept: every in-instance call goes through sudo -u mosaic -H env PATH=:... --- duration_ms: 1831.27001 type: 'test' ... # Subtest: row 195 accept: the host check runs with --check and never --enforce ok 34 - row 195 accept: the host check runs with --check and never --enforce --- duration_ms: 1853.415159 type: 'test' ... # Subtest: row276 legacy call inventory pins every production bound and the conversation contract ok 35 - row276 legacy call inventory pins every production bound and the conversation contract --- duration_ms: 0.372906 type: 'test' ... # Subtest: row276 talk legacy inner timeout cleans both sudo models ok 36 - row276 talk legacy inner timeout cleans both sudo models --- duration_ms: 1651.805289 type: 'test' ... # Subtest: row276 precheck legacy inner timeout cleans both sudo models ok 37 - row276 precheck legacy inner timeout cleans both sudo models --- duration_ms: 1682.074719 type: 'test' ... # Subtest: row276 claude-version legacy inner timeout cleans both sudo models ok 38 - row276 claude-version legacy inner timeout cleans both sudo models --- duration_ms: 1651.678574 type: 'test' ... # Subtest: row276 pm-list legacy inner timeout cleans both sudo models ok 39 - row276 pm-list legacy inner timeout cleans both sudo models --- duration_ms: 1690.998673 type: 'test' ... # Subtest: row276 node-version legacy inner timeout cleans both sudo models ok 40 - row276 node-version legacy inner timeout cleans both sudo models --- duration_ms: 1638.061018 type: 'test' ... # Subtest: row276 legacy streams and display status preserve failures without granting success ok 41 - row276 legacy streams and display status preserve failures without granting success --- duration_ms: 2471.748869 type: 'test' ... # Subtest: row276 trailer grammar cannot make supervisor failure pass ok 42 - row276 trailer grammar cannot make supervisor failure pass --- duration_ms: 1993.507037 type: 'test' ... # Subtest: row276 earlier forged trailer and appended zero remain failures ok 43 - row276 earlier forged trailer and appended zero remain failures --- duration_ms: 504.031734 type: 'test' ... # Subtest: row276 precheck outer bound discards success status and fixture cleans residual ok 44 - row276 precheck outer bound discards success status and fixture cleans residual --- duration_ms: 2170.082104 type: 'test' ... # Subtest: row276 case1 capture and legacy tools refuse unsafe system tools ok 45 - row276 case1 capture and legacy tools refuse unsafe system tools --- duration_ms: 73.160182 type: 'test' ... # Subtest: row276 stderr retention is bounded and keeps the final diagnostic ok 46 - row276 stderr retention is bounded and keeps the final diagnostic --- duration_ms: 244.179199 type: 'test' ... # Subtest: row276 version and PM checks refuse successful-looking stdout on supervisor failure ok 47 - row276 version and PM checks refuse successful-looking stdout on supervisor failure --- duration_ms: 16.161736 type: 'test' ... # Subtest: row276 full acceptance keeps all five healthy calls in both sudo models ok 48 - row276 full acceptance keeps all five healthy calls in both sudo models --- duration_ms: 3664.792254 type: 'test' ... # Subtest: row276 vanished pid stat read returns 3 with empty stderr in both scripts ok 49 - row276 vanished pid stat read returns 3 with empty stderr in both scripts --- duration_ms: 13.162444 type: 'test' ... # Subtest: row276 legacy stdout snapshot preserves exact bytes on success and command failure ok 50 - row276 legacy stdout snapshot preserves exact bytes on success and command failure --- duration_ms: 3211.003138 type: 'test' ... 1..50 # tests 50 # suites 0 # pass 50 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 237630.5628 END whole-1 START whole-2 TAP version 13 # Subtest: row253 factory socket uses actual config and target-uid query without widening hardening ok 1 - row253 factory socket uses actual config and target-uid query without widening hardening --- duration_ms: 278.169614 type: 'test' ... # Subtest: row253 installer refuses unsafe location and query facts before unit writes ok 2 - row253 installer refuses unsafe location and query facts before unit writes --- duration_ms: 2772.439256 type: 'test' ... # Subtest: row253 query timeout kills its process group and leaves no running child ok 3 - row253 query timeout kills its process group and leaves no running child --- duration_ms: 7048.048773 type: 'test' ... # Subtest: row253 protected homes refuse before any filesystem access ok 4 - row253 protected homes refuse before any filesystem access --- duration_ms: 9.013219 type: 'test' ... # Subtest: row253 C4 sleep query has exact inner reason and cleans all members ok 5 - row253 C4 sleep query has exact inner reason and cleans all members --- duration_ms: 10600.723055 type: 'test' ... # Subtest: row253 C4 signals query has exact inner reason and cleans all members ok 6 - row253 C4 signals query has exact inner reason and cleans all members --- duration_ms: 10581.311523 type: 'test' ... # Subtest: row253 C4 member query has exact inner reason and cleans all members ok 7 - row253 C4 member query has exact inner reason and cleans all members --- duration_ms: 10599.798384 type: 'test' ... # Subtest: row253 C4 overflow is output-limit in both sudo modes ok 8 - row253 C4 overflow is output-limit in both sudo modes --- duration_ms: 390.877419 type: 'test' ... # Subtest: row253 C4 stalled supervisor uses the outer reason and explicit residual cleanup ok 9 - row253 C4 stalled supervisor uses the outer reason and explicit residual cleanup --- duration_ms: 14132.397213 type: 'test' ... # Subtest: row253 C4 inline supervisor is byte-identical in both host scripts ok 10 - row253 C4 inline supervisor is byte-identical in both host scripts --- duration_ms: 0.302673 type: 'test' ... # Subtest: row253 C4 cleanup budget starts after inventory pass one ok 11 - row253 C4 cleanup budget starts after inventory pass one --- duration_ms: 30.060154 type: 'test' ... # Subtest: row253 query reaps its group even when a child closes stdout before the query returns ok 12 - row253 query reaps its group even when a child closes stdout before the query returns --- duration_ms: 121.101622 type: 'test' ... # Subtest: row253 config parser is strict ok 13 - row253 config parser is strict --- duration_ms: 8.543713 type: 'test' ... # Subtest: a clean library render writes both units 0644 with the fixed lines, and enables both then starts the bus then the Console ok 14 - a clean library render writes both units 0644 with the fixed lines, and enables both then starts the bus then the Console --- duration_ms: 94.685103 type: 'test' ... # Subtest: PATH starts with the --node directory, for a node outside the default list and for /usr/bin/node ok 15 - PATH starts with the --node directory, for a node outside the default list and for /usr/bin/node --- duration_ms: 93.85558 type: 'test' ... # Subtest: a failed bus start refuses with the Console not started ok 16 - a failed bus start refuses with the Console not started --- duration_ms: 90.339124 type: 'test' ... # Subtest: the script never links a unit file ok 17 - the script never links a unit file --- duration_ms: 0.166585 type: 'test' ... # Subtest: factory renders --pm once and one MOSAIC_CLAUDE_BIN line, and without them both tokens render empty ok 18 - factory renders --pm once and one MOSAIC_CLAUDE_BIN line, and without them both tokens render empty --- duration_ms: 525.524679 type: 'test' ... # Subtest: a re-install over running units says they are still on the old copy and must restart together, never that it started them ok 19 - a re-install over running units says they are still on the old copy and must restart together, never that it started them --- duration_ms: 408.666965 type: 'test' ... # Subtest: a re-install to another copy re-renders both units, and an edited installed unit refuses ok 20 - a re-install to another copy re-renders both units, and an edited installed unit refuses --- duration_ms: 994.927262 type: 'test' ... # Subtest: a template with a namespace, user or system call restriction refuses ok 21 - a template with a namespace, user or system call restriction refuses --- duration_ms: 257.438195 type: 'test' ... # Subtest: the bus template's EnvironmentFile line must be there and point at the session env, and the Console template must have none ok 22 - the bus template's EnvironmentFile line must be there and point at the session env, and the Console template must have none --- duration_ms: 177.781216 type: 'test' ... # Subtest: a template holding an unknown token, PermissionsStartOnly or a privileged Exec prefix refuses ok 23 - a template holding an unknown token, PermissionsStartOnly or a privileged Exec prefix refuses --- duration_ms: 135.757712 type: 'test' ... # Subtest: a symlink at either unit path refuses ok 24 - a symlink at either unit path refuses --- duration_ms: 164.421136 type: 'test' ... # Subtest: a --node that is relative, not root-owned or under refuses ok 25 - a --node that is relative, not root-owned or under refuses --- duration_ms: 18.428744 type: 'test' ... # Subtest: a re-install with a different --node or different serve flags refuses ok 26 - a re-install with a different --node or different serve flags refuses --- duration_ms: 445.511775 type: 'test' ... # Subtest: an installed pair whose units name different copies refuses ok 27 - an installed pair whose units name different copies refuses --- duration_ms: 238.324989 type: 'test' ... # Subtest: a copy id that is short, uppercase, holds / or .., or names no directory refuses ok 28 - a copy id that is short, uppercase, holds / or .., or names no directory refuses --- duration_ms: 26.882576 type: 'test' ... # Subtest: library refuses a privileged-floor miss, a bad proof pair and every flag outside its set ok 29 - library refuses a privileged-floor miss, a bad proof pair and every flag outside its set --- duration_ms: 262.559723 type: 'test' ... # Subtest: library refuses a proof file not owned by 's uid ok 30 - library refuses a proof file not owned by 's uid --- duration_ms: 15.609194 type: 'test' ... # Subtest: factory refuses duplicate socket, a missing --port or --business, and each proxy flag ok 31 - factory refuses duplicate socket, a missing --port or --business, and each proxy flag --- duration_ms: 175.500211 type: 'test' ... # Subtest: row253 factory refuses retired TCP and a value after the socket marker ok 32 - row253 factory refuses retired TCP and a value after the socket marker --- duration_ms: 26.473214 type: 'test' ... # Subtest: factory refuses a --claude that is relative, not root-owned or under , and a re-install with another --pm or --claude ok 33 - factory refuses a --claude that is relative, not root-owned or under , and a re-install with another --pm or --claude --- duration_ms: 1116.584585 type: 'test' ... # Subtest: the precheck passes on a good host and prints free memory, without the key ok 34 - the precheck passes on a good host and prints free memory, without the key --- duration_ms: 105.31252 type: 'test' ... # Subtest: the precheck refuses each failed host check ok 35 - the precheck refuses each failed host check --- duration_ms: 875.507711 type: 'test' ... # Subtest: the precheck refuses a user missing from passwd, a business file that does not load, and a symlinked run root ok 36 - the precheck refuses a user missing from passwd, a business file that does not load, and a symlinked run root --- duration_ms: 460.60088 type: 'test' ... # Subtest: a bwrap that fails refuses and prints the sysctl and where bwrap is ok 37 - a bwrap that fails refuses and prints the sysctl and where bwrap is --- duration_ms: 104.836485 type: 'test' ... # Subtest: an unprivileged port floor at or below the Console's port refuses, and so does a missing Console unit ok 38 - an unprivileged port floor at or below the Console's port refuses, and so does a missing Console unit --- duration_ms: 488.567198 type: 'test' ... # Subtest: bus.tester: library refuses it on, factory needs it on, and factory refuses a library business ok 39 - bus.tester: library refuses it on, factory needs it on, and factory refuses a library business --- duration_ms: 388.911645 type: 'test' ... # Subtest: the claude check runs only for a claude-code instance, and refuses a claude that appends or answers wrong ok 40 - the claude check runs only for a claude-code instance, and refuses a claude that appends or answers wrong --- duration_ms: 858.874041 type: 'test' ... # Subtest: the claude check runs the bus unit's MOSAIC_CLAUDE_BIN over claude on PATH ok 41 - the claude check runs the bus unit's MOSAIC_CLAUDE_BIN over claude on PATH --- duration_ms: 267.434874 type: 'test' ... # Subtest: the session env file refuses when missing, open to others, a symlink, empty, or emptied by a later line ok 42 - the session env file refuses when missing, open to others, a symlink, empty, or emptied by a later line --- duration_ms: 578.147135 type: 'test' ... # Subtest: inside a session's sandbox a bind below 1024 fails with EACCES, and a bind on a free high port succeeds ok 43 - inside a session's sandbox a bind below 1024 fails with EACCES, and a bind on a free high port succeeds --- duration_ms: 80.375463 type: 'test' ... 1..43 # tests 43 # suites 0 # pass 43 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 66174.499323 END whole-2 START changes-controller TAP version 13 # Subtest: row276 talk legacy inner timeout cleans both sudo models ok 1 - row276 talk legacy inner timeout cleans both sudo models --- duration_ms: 1685.440641 type: 'test' ... 1..1 # tests 1 # suites 0 # pass 1 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 1789.846639 TAP version 13 # Subtest: row276 talk legacy inner timeout cleans both sudo models not ok 1 - row276 talk legacy inner timeout cleans both sudo models --- duration_ms: 2079.957342 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:791:33' failureType: 'testCodeFailure' error: |- case1-accept: talk outer-timeout 82 !== 81 code: 'ERR_ASSERTION' name: 'AssertionError' expected: 81 actual: 82 operator: 'strictEqual' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:798:10) Test.runInAsyncScope (node:async_hooks:226:14) Test.run (node:internal/test_runner/test:1402:25) Test.start (node:internal/test_runner/test:1262:17) startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 2182.586031 TAP version 13 # Subtest: row276 precheck outer bound discards success status and fixture cleans residual ok 1 - row276 precheck outer bound discards success status and fixture cleans residual --- duration_ms: 2184.044327 type: 'test' ... 1..1 # tests 1 # suites 0 # pass 1 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 2279.36042 TAP version 13 # Subtest: row276 precheck outer bound discards success status and fixture cleans residual not ok 1 - row276 precheck outer bound discards success status and fixture cleans residual --- duration_ms: 4536.644448 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:831:1' failureType: 'testCodeFailure' error: |- case1-accept: precheck inner-command 87 !== 82 code: 'ERR_ASSERTION' name: 'AssertionError' expected: 82 actual: 87 operator: 'strictEqual' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:836:10) Test.runInAsyncScope (node:async_hooks:226:14) Test.run (node:internal/test_runner/test:1402:25) Test.start (node:internal/test_runner/test:1262:17) startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 4636.294956 TAP version 13 # Subtest: row276 talk legacy inner timeout cleans both sudo models not ok 1 - row276 talk legacy inner timeout cleans both sudo models --- duration_ms: 2161.53711 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:791:33' failureType: 'testCodeFailure' error: |- hop + actual - expected + [ + 54736, + 54736 + ] - [] code: 'ERR_ASSERTION' name: 'AssertionError' expected: actual: 0: 54736 1: 54736 operator: 'deepStrictEqual' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:801:10) async Test.run (node:internal/test_runner/test:1409:7) async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 2263.591697 TAP version 13 # Subtest: row276 earlier forged trailer and appended zero remain failures ok 1 - row276 earlier forged trailer and appended zero remain failures --- duration_ms: 502.066046 type: 'test' ... 1..1 # tests 1 # suites 0 # pass 1 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 606.133522 TAP version 13 # Subtest: row276 earlier forged trailer and appended zero remain failures not ok 1 - row276 earlier forged trailer and appended zero remain failures --- duration_ms: 261.080892 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:823:1' failureType: 'testCodeFailure' error: |- MOSAIC_LEGACY_STATUS=0 7 !== 87 code: 'ERR_ASSERTION' name: 'AssertionError' expected: 87 actual: 7 operator: 'strictEqual' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:828:10) Test.runInAsyncScope (node:async_hooks:226:14) Test.run (node:internal/test_runner/test:1402:25) Test.start (node:internal/test_runner/test:1262:17) startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 359.349585 TAP version 13 # Subtest: row276 legacy streams and display status preserve failures without granting success ok 1 - row276 legacy streams and display status preserve failures without granting success --- duration_ms: 2501.346465 type: 'test' ... 1..1 # tests 1 # suites 0 # pass 1 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 2601.506438 TAP version 13 # Subtest: row276 legacy streams and display status preserve failures without granting success not ok 1 - row276 legacy streams and display status preserve failures without granting success --- duration_ms: 507.498517 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:804:1' failureType: 'testCodeFailure' error: |- original diagnostic 0 !== 87 code: 'ERR_ASSERTION' name: 'AssertionError' expected: 87 actual: 0 operator: 'strictEqual' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:808:10) Test.runInAsyncScope (node:async_hooks:226:14) Test.run (node:internal/test_runner/test:1402:25) Test.start (node:internal/test_runner/test:1262:17) startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 605.071499 TAP version 13 # Subtest: row276 trailer grammar cannot make supervisor failure pass ok 1 - row276 trailer grammar cannot make supervisor failure pass --- duration_ms: 1983.792172 type: 'test' ... 1..1 # tests 1 # suites 0 # pass 1 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 2081.898213 TAP version 13 # Subtest: row276 trailer grammar cannot make supervisor failure pass not ok 1 - row276 trailer grammar cannot make supervisor failure pass --- duration_ms: 507.340357 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:813:1' failureType: 'testCodeFailure' error: |- Expected values to be strictly equal: '256\n' !== '87\n' code: 'ERR_ASSERTION' name: 'AssertionError' expected: |- 87 actual: |- 256 operator: 'strictEqual' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:819:45) Test.runInAsyncScope (node:async_hooks:226:14) Test.run (node:internal/test_runner/test:1402:25) Test.start (node:internal/test_runner/test:1262:17) startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 603.003311 TAP version 13 # Subtest: row276 trailer grammar cannot make supervisor failure pass not ok 1 - row276 trailer grammar cannot make supervisor failure pass --- duration_ms: 978.637412 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:813:1' failureType: 'testCodeFailure' error: |- Expected values to be strictly equal: '01\n' !== '87\n' code: 'ERR_ASSERTION' name: 'AssertionError' expected: |- 87 actual: |- 01 operator: 'strictEqual' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:819:45) Test.runInAsyncScope (node:async_hooks:226:14) Test.run (node:internal/test_runner/test:1402:25) Test.start (node:internal/test_runner/test:1262:17) startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 1076.355294 TAP version 13 # Subtest: row276 trailer grammar cannot make supervisor failure pass not ok 1 - row276 trailer grammar cannot make supervisor failure pass --- duration_ms: 1739.061192 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:813:1' failureType: 'testCodeFailure' error: |- Expected values to be strictly equal: '1\n' !== '87\n' code: 'ERR_ASSERTION' name: 'AssertionError' expected: |- 87 actual: |- 1 operator: 'strictEqual' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:819:45) Test.runInAsyncScope (node:async_hooks:226:14) Test.run (node:internal/test_runner/test:1402:25) Test.start (node:internal/test_runner/test:1262:17) startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 1835.288102 TAP version 13 # Subtest: row276 legacy streams and display status preserve failures without granting success not ok 1 - row276 legacy streams and display status preserve failures without granting success --- duration_ms: 257.906986 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:804:1' failureType: 'testCodeFailure' error: |- Expected values to be strictly equal: + actual - expected + '' - 'original diagnostic\n' code: 'ERR_ASSERTION' name: 'AssertionError' expected: |- original diagnostic actual: '' operator: 'strictEqual' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:809:67) Test.runInAsyncScope (node:async_hooks:226:14) Test.run (node:internal/test_runner/test:1402:25) Test.start (node:internal/test_runner/test:1262:17) startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 359.112083 TAP version 13 # Subtest: row276 case1 capture and legacy tools refuse unsafe system tools ok 1 - row276 case1 capture and legacy tools refuse unsafe system tools --- duration_ms: 85.855667 type: 'test' ... 1..1 # tests 1 # suites 0 # pass 1 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 183.82177 TAP version 13 # Subtest: row276 case1 capture and legacy tools refuse unsafe system tools not ok 1 - row276 case1 capture and legacy tools refuse unsafe system tools --- duration_ms: 105.593706 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:841:1' failureType: 'testCodeFailure' error: |- Expected values to be strictly equal: 85 !== 84 code: 'ERR_ASSERTION' name: 'AssertionError' expected: 84 actual: 85 operator: 'strictEqual' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:846:10) Test.runInAsyncScope (node:async_hooks:226:14) Test.run (node:internal/test_runner/test:1402:25) Test.start (node:internal/test_runner/test:1262:17) startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 235.807684 TAP version 13 # Subtest: row253 C4 acceptance query overflow is output-limit in both models ok 1 - row253 C4 acceptance query overflow is output-limit in both models --- duration_ms: 483.77617 type: 'test' ... 1..1 # tests 1 # suites 0 # pass 1 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 581.721262 TAP version 13 # Subtest: row253 C4 acceptance query overflow is output-limit in both models not ok 1 - row253 C4 acceptance query overflow is output-limit in both models --- duration_ms: 242.576664 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:359:1' failureType: 'testCodeFailure' error: |- Expected values to be strictly equal: + actual - expected + 'case1-accept: refusing: tester config query has invalid facts\n' - 'case1-accept: refusing: tester config query output-limit\n' code: 'ERR_ASSERTION' name: 'AssertionError' expected: |- case1-accept: refusing: tester config query output-limit actual: |- case1-accept: refusing: tester config query has invalid facts operator: 'strictEqual' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:363:72) Test.runInAsyncScope (node:async_hooks:226:14) Test.run (node:internal/test_runner/test:1402:25) Test.start (node:internal/test_runner/test:1262:17) startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 345.685316 TAP version 13 # Subtest: row276 version and PM checks refuse successful-looking stdout on supervisor failure ok 1 - row276 version and PM checks refuse successful-looking stdout on supervisor failure --- duration_ms: 20.656315 type: 'test' ... 1..1 # tests 1 # suites 0 # pass 1 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 119.076534 TAP version 13 # Subtest: row276 version and PM checks refuse successful-looking stdout on supervisor failure not ok 1 - row276 version and PM checks refuse successful-looking stdout on supervisor failure --- duration_ms: 11.277479 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:855:1' failureType: 'testCodeFailure' error: |- check_f6 'PASS\n' !== 'FAIL\n' code: 'ERR_ASSERTION' name: 'AssertionError' expected: |- FAIL actual: |- PASS operator: 'strictEqual' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:861:44) Test.runInAsyncScope (node:async_hooks:226:14) Test.run (node:internal/test_runner/test:1402:25) Test.start (node:internal/test_runner/test:1262:17) startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 112.096878 TAP version 13 # Subtest: row276 version and PM checks refuse successful-looking stdout on supervisor failure not ok 1 - row276 version and PM checks refuse successful-looking stdout on supervisor failure --- duration_ms: 15.350617 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:855:1' failureType: 'testCodeFailure' error: |- check_f7 'PASS\n' !== 'FAIL\n' code: 'ERR_ASSERTION' name: 'AssertionError' expected: |- FAIL actual: |- PASS operator: 'strictEqual' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:861:44) Test.runInAsyncScope (node:async_hooks:226:14) Test.run (node:internal/test_runner/test:1402:25) Test.start (node:internal/test_runner/test:1262:17) startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 114.611873 TAP version 13 # Subtest: row276 version and PM checks refuse successful-looking stdout on supervisor failure not ok 1 - row276 version and PM checks refuse successful-looking stdout on supervisor failure --- duration_ms: 20.669392 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:855:1' failureType: 'testCodeFailure' error: |- check_f10 'PASS\n' !== 'FAIL\n' code: 'ERR_ASSERTION' name: 'AssertionError' expected: |- FAIL actual: |- PASS operator: 'strictEqual' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:861:44) Test.runInAsyncScope (node:async_hooks:226:14) Test.run (node:internal/test_runner/test:1402:25) Test.start (node:internal/test_runner/test:1262:17) startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 123.226191 TAP version 13 # Subtest: row276 stderr retention is bounded and keeps the final diagnostic ok 1 - row276 stderr retention is bounded and keeps the final diagnostic --- duration_ms: 266.287479 type: 'test' ... 1..1 # tests 1 # suites 0 # pass 1 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 366.473467 TAP version 13 # Subtest: row276 stderr retention is bounded and keeps the final diagnostic not ok 1 - row276 stderr retention is bounded and keeps the final diagnostic --- duration_ms: 271.463779 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:851:1' failureType: 'testCodeFailure' error: |- The expression evaluated to a falsy value: assert.ok(Buffer.byteLength(r.stderr)<=65536) code: 'ERR_ASSERTION' name: 'AssertionError' expected: true actual: false operator: '==' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:853:43) Test.runInAsyncScope (node:async_hooks:226:14) Test.run (node:internal/test_runner/test:1402:25) Test.start (node:internal/test_runner/test:1262:17) startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 374.15982 TAP version 13 # Subtest: row276 vanished pid stat read returns 3 with empty stderr in both scripts ok 1 - row276 vanished pid stat read returns 3 with empty stderr in both scripts --- duration_ms: 6.411146 type: 'test' ... 1..1 # tests 1 # suites 0 # pass 1 # fail 0 # cancelled 0 # skipped 0 # todo 0 # duration_ms 104.932317 TAP version 13 # Subtest: row276 vanished pid stat read returns 3 with empty stderr in both scripts not ok 1 - row276 vanished pid stat read returns 3 with empty stderr in both scripts --- duration_ms: 4.612773 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:876:1' failureType: 'testCodeFailure' error: |- /home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/scripts/case1-accept.sh + actual - expected + '--: line 4: /proc/2147483647/stat: No such file or directory\n' - '' code: 'ERR_ASSERTION' name: 'AssertionError' expected: '' actual: |- --: line 4: /proc/2147483647/stat: No such file or directory operator: 'strictEqual' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:885:10) Test.runInAsyncScope (node:async_hooks:226:14) Test.run (node:internal/test_runner/test:1402:25) Test.start (node:internal/test_runner/test:1262:17) startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 103.231795 TAP version 13 # Subtest: row276 precheck outer bound discards success status and fixture cleans residual not ok 1 - row276 precheck outer bound discards success status and fixture cleans residual --- duration_ms: 5639.845628 type: 'test' location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:831:1' failureType: 'testCodeFailure' error: 'hop:4.543492367s' code: 'ERR_ASSERTION' name: 'AssertionError' expected: true actual: false operator: '==' stack: |- TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:837:10) process.processTicksAndRejections (node:internal/process/task_queues:104:5) async Test.run (node:internal/test_runner/test:1409:7) async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) ... 1..1 # tests 1 # suites 0 # pass 0 # fail 1 # cancelled 0 # skipped 0 # todo 0 # duration_ms 5743.705203 { "grant": "sage-3023", "static": [ { "id": "M1", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "f7994147a5eefb924630063cb3bba17bd8ed0b65e7c24d913ee1580f4a9a0b47" }, { "id": "M2", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "8a93c378b1f91238a32c885180e70d7d33b6201d9a2f63f8dea8e39ad577ad01" }, { "id": "M3", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "d3dadb97ca9a1ee26b92af01bd7451804e9b80346bf0673cf63dbad7e7bb5e78" }, { "id": "M4", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "d6754f354b59135f377e8cabdd211553257722fe8298e7d1e65f0a3a5a0de113" }, { "id": "M5", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "3ade5f4cbba5fa7bb2427ef7c5166033efe86231e4479c72a7a1f1b2186f4a73" }, { "id": "M6", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "1a7cd233c86b9ed4bd05d57adb5e6b9c35b537e698615870523429f21dcf3170" }, { "id": "M7", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "bdf3a911e8d287d2459f6b5d8ceb51d5202499b8091e97cf31b3c9c4dbe76058" }, { "id": "M8", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "c0c21ac1bde823f28d5fd3937973128fa59eee042ba4a1e675b4dc7957713f2b" }, { "id": "M9", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "bddfa558b71c12d5fd04782a746382d817008b7cc4cdb0b831afb9c5ec82a251" }, { "id": "M10", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "9bd7b50361ef7b3cef92b02e206711418d831ebf7c6c46073a102991433c3f66" }, { "id": "M11", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "db7c45d67d05f03fea863f50bb167c6d25ebcc2cf47c9f9e79aff07f41c73a64" }, { "id": "M12", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "49e03600ed40deefa1389e50451d353c59f3493175f077e76d511bbabfb33987" }, { "id": "M13", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "788cdbbe10f8056c94d4e9816388509cd1069f328c4e12e3ade8d7c706bcbc16" }, { "id": "M14", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "7e6f382c9e51e67eb173d42ddb402178a6af49822c3c37d36332c08bd65c98a5" }, { "id": "M15", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "a81acad889e36e7b405ac622fc8a75276d3933e07c490637d77007ad43cd6552" }, { "id": "M16", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "a6956292666b7ef35bac215b8213344b29d48a969da60c075fa7c331bbb4e2e0" }, { "id": "M16", "file": "scripts/case2-unit.sh", "occurrences": 1, "before": "f615d09cd0998bd3a109faff9a16a78ac3f414686300fadc282a7773ec08491a", "after": "d2709a1da6c9a03f4c8b31bf57ad00df4c0ae62a5cbc0e7588cdceb9dc0e2aa1" }, { "id": "M17", "file": "scripts/case1-accept.sh", "occurrences": 1, "before": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2", "after": "98f65d07e80b4bfd593e56c0d4a8dc693dc886bbe7296bc60cc278c5d1188e7c" } ], "bases": { "packages/cli/tests/case1-accept.test.mjs|row276 talk legacy inner timeout": { "code": 0, "timeout": false, "seconds": 1.868, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M1-base.log" }, "packages/cli/tests/case1-accept.test.mjs|row276 precheck outer bound": { "code": 0, "timeout": false, "seconds": 2.369, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M2-base.log" }, "packages/cli/tests/case1-accept.test.mjs|row276 earlier forged trailer": { "code": 0, "timeout": false, "seconds": 0.665, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M4-base.log" }, "packages/cli/tests/case1-accept.test.mjs|row276 legacy streams and display status": { "code": 0, "timeout": false, "seconds": 2.67, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M5-base.log" }, "packages/cli/tests/case1-accept.test.mjs|row276 trailer grammar": { "code": 0, "timeout": false, "seconds": 2.168, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M6-base.log" }, "packages/cli/tests/case1-accept.test.mjs|row276 case1 capture and legacy tools": { "code": 0, "timeout": false, "seconds": 0.264, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M10-base.log" }, "packages/cli/tests/case1-accept.test.mjs|row253 C4 acceptance query overflow": { "code": 0, "timeout": false, "seconds": 0.665, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M11-base.log" }, "packages/cli/tests/case1-accept.test.mjs|row276 version and PM checks": { "code": 0, "timeout": false, "seconds": 0.214, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M12-base.log" }, "packages/cli/tests/case1-accept.test.mjs|row276 stderr retention is bounded": { "code": 0, "timeout": false, "seconds": 0.465, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M15-base.log" }, "packages/cli/tests/case1-accept.test.mjs|row276 vanished pid stat read": { "code": 0, "timeout": false, "seconds": 0.164, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M16-base.log" } }, "changes": [ { "code": 1, "timeout": false, "seconds": 2.269, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M1.log", "id": "M1", "base_seconds": 1.868, "outcome": "killed" }, { "code": 1, "timeout": false, "seconds": 4.724, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M2.log", "id": "M2", "base_seconds": 2.369, "outcome": "killed" }, { "code": 1, "timeout": false, "seconds": 2.369, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M3.log", "id": "M3", "base_seconds": 1.868, "outcome": "killed" }, { "code": 1, "timeout": false, "seconds": 0.415, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M4.log", "id": "M4", "base_seconds": 0.665, "outcome": "killed" }, { "code": 1, "timeout": false, "seconds": 0.665, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M5.log", "id": "M5", "base_seconds": 2.67, "outcome": "killed" }, { "code": 1, "timeout": false, "seconds": 0.665, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M6.log", "id": "M6", "base_seconds": 2.168, "outcome": "killed" }, { "code": 1, "timeout": false, "seconds": 1.166, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M7.log", "id": "M7", "base_seconds": 2.168, "outcome": "killed" }, { "code": 1, "timeout": false, "seconds": 1.918, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M8.log", "id": "M8", "base_seconds": 2.168, "outcome": "killed" }, { "code": 1, "timeout": false, "seconds": 0.415, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M9.log", "id": "M9", "base_seconds": 2.67, "outcome": "killed" }, { "code": 1, "timeout": false, "seconds": 0.315, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M10.log", "id": "M10", "base_seconds": 0.264, "outcome": "killed" }, { "code": 1, "timeout": false, "seconds": 0.415, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M11.log", "id": "M11", "base_seconds": 0.665, "outcome": "killed" }, { "code": 1, "timeout": false, "seconds": 0.214, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M12.log", "id": "M12", "base_seconds": 0.214, "outcome": "killed" }, { "code": 1, "timeout": false, "seconds": 0.164, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M13.log", "id": "M13", "base_seconds": 0.214, "outcome": "killed" }, { "code": 1, "timeout": false, "seconds": 0.214, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M14.log", "id": "M14", "base_seconds": 0.214, "outcome": "killed" }, { "code": 1, "timeout": false, "seconds": 0.465, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M15.log", "id": "M15", "base_seconds": 0.465, "outcome": "killed" }, { "code": 1, "timeout": false, "seconds": 0.164, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M16.log", "id": "M16", "base_seconds": 0.164, "outcome": "killed" }, { "code": 1, "timeout": false, "seconds": 5.827, "log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-276/run5/changes/M17.log", "id": "M17", "base_seconds": 2.369, "outcome": "killed" } ] } END changes-controller START shell-1 OK status with missing harness credential exits 3 and still lists accounts OK status reports harness credential (read-only) + mosaic accounts OK api key material never reaches output OK oauth token material never reaches output OK unparseable credential file exits 2 OK symlinked credential file exits 4 OK env-side credential names reported OK env var values never reach output OK accounts without an accounts dir reports none and creates nothing OK accounts lists files and marks the active one OK loose account perms flagged in listing OK agent --auth with missing account file refuses (exit 4) OK agent --auth with non-0600 account file refuses OK agent --auth with invalid account name refuses OK auth.sh without valid config refuses selftest: 15 passed, 0 failed END shell-1 START shell-2 On branch gander/row276-0cbe Your branch is up to date with 'origin/gander/row276-0cbe'. nothing to commit, working tree clean OK dry-run: allowed change, exit 0, nothing committed (exit 0) OK dry-run committed nothing OK apply: allowed change exits 0 (exit 0) OK apply: attribution in commit subject OK apply: target tree clean after commit OK disallowed path refused (exit 1) OK disallowed path: target untouched OK syntax gate refused broken .mjs (exit 1) OK syntax gate: target untouched OK suite failure refused (exit 1) OK suite failure: target reverted to clean OK disabled policy refused (exit 2) OK disabled policy: target untouched OK failed run refused (exit 1) OK failed run: target untouched OK missing run exits 4 (exit 4) OK invalid policy exits 2 (exit 2) selftest: 17 passed, 0 failed END shell-2 START shell-3 OK absent adapter defaults to pi OK adapter mock validates (exit 0) OK unsupported adapter exits 2 (exit 2) OK env exports adapter OK bootstrap creates default when absent (exit 0) OK bootstrap wrote config file OK bootstrap is idempotent on existing config (exit 0) OK bootstrap did not rewrite existing config OK validate missing config exits 3 (exit 3) OK malformed JSON exits 2 (exit 2) OK unsupported configVersion exits 2 (exit 2) OK unknown top-level key exits 2 (exit 2) OK unknown execution key exits 2 (exit 2) OK unsupported backend exits 2 (exit 2) OK unsupported environment exits 2 (exit 2) OK relative dataRoot exits 2 (exit 2) OK non-canonical dataRoot exits 2 (exit 2) OK filesystem root dataRoot exits 2 (exit 2) OK home directory dataRoot exits 2 (exit 2) OK dataRoot containing config dir exits 2 (exit 2) OK control character in provider exits 2 (exit 2) OK symlinked config file exits 2 (exit 2) OK env exports resolve correctly OK valid console.sso loads and is in the output OK console.sso HS256 alg exits 2 naming the path (exit 2) OK console.sso alg none exits 2 naming the path (exit 2) OK console.sso missing slot field exits 2 naming the path (exit 2) OK console.sso slot name outside the pattern exits 2 naming the path (exit 2) OK unknown key under console exits 2 naming the path (exit 2) OK config without console loads with unchanged output OK failed validation modified nothing selftest: 31 passed, 0 failed END shell-3 START shell-4 toolchain: node v26.8.1 OK syntax: packages/discord/src/approvals.mjs OK syntax: packages/discord/src/authorize.mjs OK syntax: packages/discord/src/binding.mjs OK syntax: packages/discord/src/cli.mjs OK syntax: packages/discord/src/connector.mjs OK syntax: packages/discord/src/context.mjs OK syntax: packages/discord/src/engine-pi.mjs OK syntax: packages/discord/src/errors.mjs OK syntax: packages/discord/src/gateway.mjs OK syntax: packages/discord/src/git.mjs OK syntax: packages/discord/src/journal.mjs OK syntax: packages/discord/src/notify.mjs OK syntax: packages/discord/src/processing.mjs OK syntax: packages/discord/src/rest.mjs OK syntax: packages/discord/src/setspark.mjs OK syntax: packages/discord/src/tools.mjs OK syntax: packages/discord/src/web.mjs OK syntax: packages/discord/bin/git-credential.mjs OK syntax: packages/discord/extension/tools.mjs OK syntax: packages/discord/tests/approvals.test.mjs OK syntax: packages/discord/tests/authorize.test.mjs OK syntax: packages/discord/tests/binding.test.mjs OK syntax: packages/discord/tests/connector.test.mjs OK syntax: packages/discord/tests/context.test.mjs OK syntax: packages/discord/tests/copy-service.test.mjs OK syntax: packages/discord/tests/engine.test.mjs OK syntax: packages/discord/tests/fake-pi.mjs OK syntax: packages/discord/tests/gateway.test.mjs OK syntax: packages/discord/tests/git.test.mjs OK syntax: packages/discord/tests/helpers.mjs OK syntax: packages/discord/tests/journal.test.mjs OK syntax: packages/discord/tests/notify.test.mjs OK syntax: packages/discord/tests/offline-check.test.mjs OK syntax: packages/discord/tests/processing-stop.test.mjs OK syntax: packages/discord/tests/processing.test.mjs OK syntax: packages/discord/tests/recover.test.mjs OK syntax: packages/discord/tests/rest.test.mjs OK syntax: packages/discord/tests/setspark.test.mjs OK syntax: packages/discord/tests/tools.test.mjs OK syntax: packages/discord/tests/web.test.mjs OK syntax: packages/discord/fixtures/claim-worker.mjs OK syntax: packages/discord/fixtures/legacy-owner-worker.mjs OK syntax: scripts/discord.sh OK syntax: scripts/discord-service.sh OK packages/discord declares no dependencies OK no bot-token-shaped string in packages/discord OK fixture binding uses placeholder ids only OK fixture binding validates OK real pi with the extension exposes exactly list_dir, read_file, search and no built-in tool OK real pi with a writable root exposes exactly the three reads plus write_file and edit_file, and writes nothing at start OK real pi with a web key exposes the three reads plus web_fetch and web_search, and no write tool without a writable root OK real pi with a git root exposes the reads, writes and the four git verbs, commits nothing at start, and never shows the token OK real pi with protocol vault adds reserve_id to the git verbs OK real pi with a setspark key exposes the reads and the eight record verbs, no counters, and never shows the key OK real pi refuses a git key on a read-only root (fail closed) OK real pi with the pilot flags (--no-tools) exposes no tool at all OK real pi exits non-zero without MOSAIC_DISCORD_TOOLS: no session, no tools (fail closed) OK a failing nested test fails the run under a parent runner's NODE_TEST_CONTEXT OK node --test packages/discord/tests/ (ℹ pass 192) OK scripts/discord.sh --help exits 0 OK scripts/discord.sh check without a binding exits 4 OK scripts/discord.sh recover without a binding exits 4 OK scripts/discord.sh reload without a binding exits 4 OK scripts/discord-service.sh without a command exits 4 OK service unit renders with the repository path, a supervised run as the main process, exit 3 never retried, and reload as SIGHUP OK service install writes the rendered unit (0644) and leaves no temp file OK service install a second time reports unchanged OK systemd-analyze verify accepts the rendered unit OK service uninstall removes the unit file OK service install with an unknown flag exits 4 OK service install with USER unset finishes and names the account for lingering OK pinned render runs copy CLI with copy cwd/repo and no checkout executable OK pinned install writes the rendered unit in a temporary unit directory OK pinned install refuses short prerequisite and writes no unit OK pinned install refuses missing prerequisite and writes no unit OK pinned install refuses cli prerequisite and writes no unit OK pinned install refuses pi prerequisite and writes no unit OK status names the copy from fake systemctl effective cwd OK checkout install explicitly recommends --copy OK wrapper check --offline passes local fixture and makes no network call OK wrapper run --offline refuses usage discord suite: 81 passed, 0 failed END shell-4 START shell-5 OK initial ordinary-file install OK installed tree matches canonical source OK installed tree has no symlinks OK check detects installation drift OK sync refuses to overwrite installation drift OK check detects an extra destination file OK check detects an extra destination directory OK check rejects a destination symlink OK sync accepts a canonical source update OK updated installation matches canonical source scripts/test-extension-package.sh: line 14: 167661 Killed "$@" > /dev/null 2>&1 OK forced interruption kills the replacing process OK next invocation recovers old consistent installation OK interrupted replacement rolled back OK sync succeeds after interruption recovery OK unlocked stale lock file does not block OK active lock refuses a concurrent sync OK source symlink fails closed OK nested second entrypoint fails closed extension package selftest: 18 passed, 0 failed END shell-5 START shell-6 toolchain: node v26.8.1, python 3.12.8, jsonschema 4.26.0 OK syntax: scripts/foundation-inspect.mjs OK syntax: scripts/foundation/strict-json.mjs OK syntax: scripts/foundation/canonical.mjs OK syntax: scripts/foundation/resolve.mjs OK syntax: scripts/foundation/validate-record.mjs OK syntax: scripts/foundation/fixtures/build-fixtures.mjs OK syntax: scripts/foundation/canonical.test.mjs OK syntax: scripts/foundation/cli.test.mjs OK syntax: scripts/foundation/fixtures.test.mjs OK syntax: scripts/foundation/resolve.test.mjs OK syntax: scripts/foundation/strict-json.test.mjs OK syntax: scripts/foundation/verify-schema.py (ast only; no bytecode written) OK fixture generator runs OK checked-in fixtures/bundles equal a fresh generation OK checked-in fixtures/raw equal a fresh generation OK checked-in fixtures/index.json equal a fresh generation OK checked-in demo bundles equal a fresh generation OK a failing nested test fails the run under a parent runner's NODE_TEST_CONTEXT OK node --test scripts/foundation/ (ℹ pass 80) OK differential schema oracle: PASS: differential schema oracle (finite corpus; compatibility evidence, not equivalence proof) platform witness: strftime('%Y') for year 999 -> '999' (pinned checker refuses years 0001..0999) node v26.8.1; corpus 1568 records (38 pinned fixtures, 478 unique bundle records, 1052 typeCase/mutation/lexical cases) schema column: agree-valid 540, agree-invalid 991, DISAGREEMENTS 0; strict-only (parser-bound) cases: 27; unsupported-kind records not schema-assessed by the inspector: 10 profile column (schema-valid records only): profile-valid 510, profile-invalid 30 profile refusals asserted: 30 schema-agreed-valid records refused only by the strict typed-string profile (rule profile-pattern-mismatch), 12 declared by name; 73 named probes verified against declared schema/profile columns OK oracle: zero schema-column disagreements with the pinned checker OK oracle: strict-only profile refusals are counted and asserted OK demo: permitted read preview exits 0 (exit 0) OK demo: permitted file.change preview exits 0 (exit 0) OK demo: assignment.change proposal is unresolved (exit 3) (exit 3) OK demo: revoked registration is refused (exit 3) (exit 3) OK demo: message is not authority (exit 3) (exit 3) OK usage: no arguments exits 2 (exit 2) OK io: missing file exits 4 (exit 4) OK io: directory exits 4 (exit 4) OK io: symlink exits 4 (O_NOFOLLOW) (exit 4) OK bound: oversize fixture exits 2 (exit 2) OK profile: one final LF in a typed selection id is refused before admission (exit 2) (exit 2) OK profile: two final LFs fail the schema pattern itself (exit 2) (exit 2) OK profile: escaped newlines in free-form text stay allowed (exit 0) (exit 0) OK profile refusal is invalid-request/profile-pattern-mismatch with selection and operation withheld, value not echoed OK text output starts with the disclaimer OK json output is valid JSON with result allowed and exactly the charter §7 fields OK json golden matches byte-for-byte OK sandboxed bundle run (env -i, PATH=/nonexistent) produced the unresolved proposal OK sandbox inventory (path/type/size/mode/uid/gid/inode/mtime/sha256) unchanged by runs OK canary never printed (bundle run and credential-file run) OK a non-bundle JSON file is refused at the shape gate, not read into output OK no field of the non-bundle file is echoed selftest: 44 passed, 0 failed END shell-6 START shell-7 OK args: exit 2, target-branch OK args: exit 2, target-branch OK args: exit 4 OK args: exit 4 OK args: exit 4 OK --base next refuses before the config is read (got 2) OK a missing system config exits 3 (got 3) OK nobus: exit 3 OK schema-table: exit 2, bus-schema OK schema-meta: exit 2, bus-schema OK openBus opens the database read-only OK other-business: exit 2, decision-not-found OK no-raise: exit 2, decision-not-found OK not-a-merge: exit 2, not-a-merge OK open: exit 2, not-resolved OK withdrawn: exit 2, not-resolved OK by-agent: exit 2, not-human OK via-webui: exit 2, not-human OK no-answer: exit 2, not-human OK answer-role: exit 2, not-human OK answer-run: exit 2, not-human OK answer-choice: exit 2, not-human OK two-answers: exit 2, not-human OK arbiter-cross: exit 2, not-human OK arbiter-cited: exit 2, not-human OK chose-no: exit 2, not-merge-option OK two-refs: exit 2, work-ref OK bad-ref: exit 2, work-ref OK task-ref-disagrees: exit 2, work-ref OK raise-task-disagrees: exit 2, work-ref OK target-main: exit 2, target-branch OK superseded-question: exit 2, superseded OK superseded-task: exit 2, superseded OK superseded-by: exit 2, superseded OK no-verdict: exit 2, no-verdict OK changes-later: exit 2, not-approved OK short-commit: exit 2, not-approved OK wrong-task-body: exit 2, not-approved OK args: exit 2, decision-not-found OK earlier-merge: exit 0 OK ref-moved: exit 2, ref-moved OK root-top: exit 2, root-file OK root-newdir: exit 2, root-file OK root-src: exit 2, root-file OK unrelated: exit 2, base-conflict OK empty: exit 2, base-conflict OK an empty reviewed diff says so OK dirty-changed: exit 2, checkout-dirty OK dirty-staged: exit 2, checkout-dirty OK dirty-untracked: exit 2, checkout-dirty OK conflict: exit 2, base-conflict OK a refusal after the worktree is added leaves no worktree or scratch OK cleanup looks for the worktree's Docker network OK dirty-during: exit 2, checkout-dirty OK a reviewed path dirtied during the gate moves no ref OK drift: exit 2, patch-drift OK patch-drift leaves no worktree or scratch OK gate-pkg: exit 2, gate-failed OK gate-failed names the failing step's log, and it exists OK gate-failed leaves no worktree or scratch OK gate-script: exit 2, gate-failed OK a failing scripts/test-*.sh fails the gate OK a failed gate moves no ref OK nomods: exit 4 OK a target without node_modules leaves no worktree or scratch OK moved: exit 2, base-moved OK base-moved keeps the base where it moved to OK dry: exit 0 OK --dry-run writes no ref OK --dry-run prints the commit with --subject and --attribution OK --dry-run runs the gate OK --dry-run leaves no worktree or scratch OK land: exit 0 OK the landing is one commit on the old base OK its diff is the reviewed diff by patch-id OK its tree is the dry run's OK the message has the option's subject, the citations and the attribution last OK it prints the line for the PM OK the checked-out base has the reviewed paths and keeps the unrelated edit OK only refs/heads/refactor exists in the target OK the work ref is unchanged OK the bus database is unchanged OK the gate ran each package suite but queue, and each scripts/test-*.sh OK the landing leaves no worktree or scratch OK the target's node_modules is still there, with its contents OK the worktree's Docker network is removed --- land-work selftests: 86 passed, 0 failed END shell-7 START shell-8 toolchain: node v26.8.1, git version 2.55.0 OK syntax: packages/queue/src/cli.mjs OK syntax: packages/queue/src/errors.mjs OK syntax: packages/queue/src/io.mjs OK syntax: packages/queue/src/lock.mjs OK syntax: packages/queue/src/queue.mjs OK syntax: packages/queue/src/review.mjs OK syntax: packages/queue/src/store.mjs OK syntax: packages/queue/tests/commit.test.mjs OK syntax: packages/queue/tests/data.test.mjs OK syntax: packages/queue/tests/dispatch.test.mjs OK syntax: packages/queue/tests/gate-owner.test.mjs OK syntax: packages/queue/tests/helpers.mjs OK syntax: packages/queue/tests/lock.test.mjs OK syntax: packages/queue/tests/migration.test.mjs OK syntax: packages/queue/tests/review.test.mjs OK syntax: packages/queue/tests/store.test.mjs OK syntax: packages/queue/tests/write.test.mjs OK syntax: packages/queue/tests/fixtures/fake-gitea.mjs OK syntax: packages/queue/tests/fixtures/kill-at.mjs OK syntax: packages/queue/tests/fixtures/lock-child.mjs OK syntax: packages/queue/tests/fixtures/mosaic-pre-a2.sh OK syntax: scripts/queue-commit.sh OK syntax: scripts/git-hooks/pre-commit OK syntax: scripts/mosaic OK queue-commit.sh, the guard and scripts/mosaic are executable OK packages/queue declares no dependencies ℹ tests 156 ℹ pass 156 ℹ fail 0 OK node --test packages/queue/tests/ OK scripts/mosaic queue help skip queue verify and render --check: this checkout (/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196) is not the queue's canonical root (/mnt/storage/src/mosaic-stack) queue suite: 28 passed, 0 failed END shell-8 START shell-9 OK valid RELEASE resolves (exit 0) OK invalid RELEASE exits 1 (exit 1) OK missing RELEASE exits 1 (exit 1) OK valid RELEASE leaves image tag consistent with version OK status safe on empty state (exit 0) OK status created no pointer OK fault-injected activation refuses (exit 1) OK refused activation wrote no pointer OK refusal logged exactly once with valid fields OK healthy activation succeeds (exit 0) OK pointer written with valid fields OK repeat activation succeeds (log grows) (exit 0) OK log is append-only across activations OK rollback without previous refuses (exit 1) selftest: 14 passed, 0 failed END shell-9 START shell-10 OK valid task validates (exit 0) OK unknown task key exits 2 (exit 2) OK unsupported taskVersion exits 2 (exit 2) OK invalid task id exits 2 (exit 2) OK empty prompt exits 2 (exit 2) OK NUL in expectExact exits 2 (exit 2) OK out-of-range timeout exits 2 (exit 2) OK missing mission file exits 4 (exit 4) OK task with valid mission validates (exit 0) OK invalid mission exits 2 (exit 2) OK validate missing task exits 4 (exit 4) OK validation does not modify the task file OK prune dry-run exits 0 (exit 0) OK dry-run deleted nothing OK prune --keep=2 --yes removes oldest (exit 0) OK kept exactly 2 newest runs OK newest run kept, oldest pruned OK append-only receipt written (3 entries) OK sessions/workspaces untouched by prune OK prune with invalid keep exits 4 (exit 4) OK mock adapter: gate passes on matching mock response (exit 0) OK mock adapter: expect-mismatch recorded (exit 1) OK mismatch reason recorded OK unknown adapter fails closed (exit 1) OK mission task runs via mock adapter (exit 0) OK mission section injected into generated prompt OK retry of mission run succeeds (exit 0) OK retriedFrom lineage recorded OK mission section present after retry (relative path resolved) OK retry of missing run exits 4 (exit 4) OK skill install bundled ms-tools (exit 0) OK installed to skills-available OK double install refuses (exit 1) OK activate enables skill (exit 0) OK enabled dir populated OK uninstall while enabled refuses (exit 1) OK deactivate moves back to available (exit 0) OK uninstall removes from available (exit 0) OK seat with enabled skill launches OK skill path delivered to adapter OK shipped researcher contract resolves (ceiling + network) OK resolve-role refuses a non-role document (conductor policy) (exit 2) OK resolve-role refuses name/filename mismatch (exit 2) OK resolve-role refuses unknown network declaration (exit 2) OK resolve-role refuses duplicate role tool (exit 2) OK resolve-role refuses unsupported tool (exit 2) OK resolve-role refuses missing contract file (exit 4) OK version 1 role prints no contract line OK shipped version 2 roles resolve with their contracts (pm, cto, coder, reviewer) OK resolve-role accepts a minimal version 2 role (exit 0) OK resolve-role refuses an action outside the vocabulary (exit 2) OK resolve-role refuses a gated-only action in a role file (exit 2) OK resolve-role refuses a Vikunja verb no role may hold (exit 2) OK resolve-role refuses a version 2 role whose contract is missing (exit 2) OK resolve-role refuses a contract that is a symbolic link (exit 2) OK seat launches under role ceiling OK role ceiling narrows seat tools (read,write,bash -> read,bash) OK narrowing recorded loudly OK missing role contract refuses launch (exit 2) OK missing-contract refusal names the role OK empty ceiling intersection -> tool-free seat OK tool-free outcome recorded loudly OK overridden agents dir without seat definition refuses (exit 4) OK seat-resolution refusal names the seat OK policy: mission only -> mission tools OK policy: task only -> task tools OK policy: both -> intersection (task narrowed) OK policy: empty intersection -> tool-free OK invalid mission capabilities rejected (exit 2) mosaic-task: unsupported mission tool: "sudo" (supported: read, write, edit, bash, grep, find, ls) OK task run with user layer present (exit 0) OK user context dispatched into generated prompt OK workspace+tools task runs via mock (exit 0) OK workspace path + tools delivered to adapter OK persistent workspace created on host OK plain task still runs (no workspace/tools) (exit 0) OK workspace var present but empty when absent OK tools empty when absent OK unknown tool exits 2 (exit 2) OK workspace traversal exits 2 (exit 2) OK hello task succeeds with exact marker OK result.json written in run dir OK result.json contents are correct OK wrong expectExact fails with exit 1 (reason: expect-mismatch) OK each run gets a distinct run dir (no clobber) OK list shows both runs skip live provider cases (row 244: no provider call in the gate) OK onboard without name exits 4 (non-interactive) (exit 4) OK onboard --name renders profile (exit 0) OK profile written OK canon structure: required filled, optional placeholdered OK canon sections present skip live provider cases (row 244: no provider call in the gate) OK no agent identity on headless run selftest: 91 passed, 0 failed END shell-10 GATE COMPLETE