Files

2394 lines
87 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"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-<pin> and on a .. segment
ok 19 - row 195 accept: F6 fails on a stub that prints nothing, on a path outside claude-<pin> 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=<node dir>:...
ok 33 - row 195 accept: every in-instance call goes through sudo -u mosaic -H env PATH=<node dir>:...
---
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 <home> refuses
ok 25 - a --node that is relative, not root-owned or under <home> 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 <user>'s uid
ok 30 - library refuses a proof file not owned by <user>'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 <home>, and a re-install with another --pm or --claude
ok 33 - factory refuses a --claude that is relative, not root-owned or under <home>, 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.<anonymous> (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.<anonymous> (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.<anonymous> (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.<anonymous> (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.<anonymous> (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.<anonymous> (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.<anonymous> (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.<anonymous> (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.<anonymous> (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.<anonymous> (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.<anonymous> (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.<anonymous> (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.<anonymous> (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.<anonymous> (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.<anonymous> (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.<anonymous> (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.<anonymous> (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