docs(row253): record green 27-file run and measured timeout basis

This commit is contained in:
jason.woltje committed 2026-10-22 09:46:35 -05:00
1 parent 0604d91fcf
commit 34401e7c90
73 files changed
+9823 -18

No files matched your search

+4
View File
@@ -5318,3 +5318,7 @@ Fresh gate on3e4c77ac6 under sage-2648: bus793/0, WebUI345/0/1 (esbuild version
Gander: after Duckworth-0100 design approval with C1-C5, prepared the two host-script socket migrations, fake fixtures, updated retirement docs and 33 unique change checks. Static syntax/diff and source inventory checks pass; behavioral tests have not run. Sage-2191 queues the requested full scope and will send CLEAR. No host, unit or live config changed.
2026-10-22 02:13:30 UTC | Gander row253 C4 committed candidate, gate pending | Sage-2335 explicitly directs committing runnable source and tests before the whole gate. The repair implements the approved after-uid supervisor with separate inner/outer bounds; the static packet is b64aa316a. Current repaired bytes have run no syntax check, test, probe or host experiment. Earlier static syntax results apply only to the old build. Results from 8a8df4171 are historical and do not carry. Duckworth static verdict and Sage CLEAR precede all gate execution. F5 is row276 / #1781 in DEFERRED.md.
2026-10-22 14:45 UTC | Gander row253 focused27 on finalaca16404c base | Fresh0604d91fc / manifest573c51cf:27 whole files604/0/0, no timeout/retry, case134/0 in99.281s, case243/0 in66.418s, stack-release includingT46221/0 in583.453s. N9 sandbox bind ran and passed, no focused skips. Seven source blobs unchanged; sweep0 run-created leftovers, pre-existing infrastructure receipts retained. Whole gate and M1-M40 await separate Sage CLEAR after Duckworth rebase check. No live action.
2026-10-22 14:46 UTC | Gander correction to the row253 focused27 entry immediately above | stack-release whole was218/0/0, not221/0. The27-file sum604/0/0 and duration583.453s are unchanged; raw files/results.json and SUMMARY.json give the exact per-file totals.
+47
View File
@@ -234,3 +234,50 @@ New gander/row253-aca1 rebases13 commits ontoaca16404c without conflicts; all13
Step2 file bounds: every file listed in integration-aca1/FILE-LIMITS.json runs whole as timeout -k10 300 node --test --test-reporter=tap FILE, outer harness330s. Own case1/case2 first, then25 others. Busy check before each start, pipefail and tee, TMPDIR from mktemp-d /mnt/storage/scratch/tmp/gXXXXXX. First unexpected failure or timeout stops to Sage/Mos unplaced; no retry. Print HEAD and manifest digest first. No test has run. Expect10-15min; status at15min. Whole-suite limits are separate and will be written before whole-gate CLEAR.
Whole-shell limits remain as in the earlier table and SHELL-LIMITS.json:auth126,conductor145,config130,discord147,extension130,foundation240,land-work158,queue191,release157,task231. Each is at least3x its longest recorded successful whole run. No script changed.
## Focused27 green under sage-2709
Fresh candidate0604d91fc onaca16404c, manifest573c51cf. HEAD and digest are the first controller-log line, followed by the full900s CLI/300s bus-WebUI limit header before any test. Actual run14:30:03Z to2026-10-22T14:44:57Z, 894.0 wall seconds. All27 files whole604/0/0, timeout0, no retry or busy refusal. Commands use timeout-k10 per file, pipefail/tee and scratch gXXXXXX TMPDIR. No product/test/assertion changed. Entire seven-path manifest verifies after the run.
N9 did not skip. Verbatim case2 result: `ok 43 - inside a session's sandbox a bind below 1024 fails with EACCES, and a bind on a free high port succeeds`. There are no skip lines in any focused file. Later wholeWebUI and shell skips are not measured by this focused scope.
Every measured file duration and its later3x basis follows. The last column is ceil(3*measured whole-file wall)+120, not a completed whole-gate result. Historical C4 gates carry nothing. The whole gate still awaits separate CLEAR and Duckworth rebase review.
# Focused27 whole-file results
| Whole file | Pass/fail/skip | Wall seconds | Command limit seconds | Next3x plus120 basis |
|---|---:|---:|---:|---:|
| packages/cli/tests/case1-accept.test.mjs | 34/0/0 | 99.281 | 900 | 418 |
| packages/cli/tests/case2-unit.test.mjs | 43/0/0 | 66.418 | 900 | 320 |
| packages/bus/tests/account-migration.test.mjs | 3/0/0 | 0.415 | 300 | 122 |
| packages/bus/tests/chief-of-staff.test.mjs | 42/0/0 | 2.168 | 300 | 127 |
| packages/bus/tests/comment-migration.test.mjs | 5/0/0 | 0.565 | 300 | 122 |
| packages/bus/tests/end-launch.test.mjs | 7/0/0 | 0.415 | 300 | 122 |
| packages/bus/tests/fire-revokes-grants.test.mjs | 22/0/0 | 3.271 | 300 | 130 |
| packages/bus/tests/gitea-grant.test.mjs | 49/0/0 | 8.634 | 300 | 146 |
| packages/bus/tests/gitea-migration.test.mjs | 5/0/0 | 0.415 | 300 | 122 |
| packages/bus/tests/grant-executor.test.mjs | 42/0/0 | 21.562 | 300 | 185 |
| packages/bus/tests/grant-migration.test.mjs | 6/0/0 | 0.465 | 300 | 122 |
| packages/bus/tests/lifecycle-revoke.test.mjs | 8/0/0 | 0.665 | 300 | 122 |
| packages/bus/tests/message-filter.test.mjs | 6/0/0 | 0.515 | 300 | 122 |
| packages/bus/tests/name-migration.test.mjs | 1/0/0 | 0.214 | 300 | 121 |
| packages/bus/tests/schema.test.mjs | 1/0/0 | 0.214 | 300 | 121 |
| packages/bus/tests/sessions.test.mjs | 7/0/0 | 0.615 | 300 | 122 |
| packages/bus/tests/spec-migration.test.mjs | 1/0/0 | 0.214 | 300 | 121 |
| packages/bus/tests/tester-writes.test.mjs | 8/0/0 | 0.565 | 300 | 122 |
| packages/bus/tests/thread-claims.test.mjs | 6/0/0 | 0.264 | 300 | 121 |
| packages/bus/tests/thread-migration.test.mjs | 3/0/0 | 0.365 | 300 | 122 |
| packages/bus/tests/threads.test.mjs | 17/0/0 | 1.216 | 300 | 124 |
| packages/bus/tests/usage-migration.test.mjs | 1/0/0 | 0.214 | 300 | 121 |
| packages/cli/tests/lifecycle.test.mjs | 24/0/0 | 13.296 | 900 | 160 |
| packages/cli/tests/stack-release.test.mjs | 218/0/0 | 583.453 | 900 | 1871 |
| packages/cli/tests/thread-cli.test.mjs | 11/0/0 | 1.876 | 900 | 126 |
| packages/cli/tests/thread-launch.test.mjs | 11/0/0 | 16.603 | 900 | 170 |
| packages/webui/tests/chat.test.mjs | 23/0/0 | 0.515 | 300 | 122 |
N9 verbatim: ok 43 - inside a session's sandbox a bind below 1024 fails with EACCES, and a bind on a free high port succeeds
Sweep0 run-created leftovers. Initial broad sweep found nine current MCP/npm/code-mode infrastructure processes, all started14:20:57-14:21:07Z before this run14:30:03Z. UTC ps and /proc start ticks are retained; initial output saved, no signalling. Deleted cwd under run TMPDIR is included. No old-PID assumption replaces the receipt check.
Sage2711/2714 reported unrelated queue reads/write and Python reads by other seats. First and subsequent busy checks passed; no retry was needed and no effect is attributed to those processes. No live data was read by this seat. Raw command/log paths and all27 totals live in run3-focused/files/results.json and SUMMARY.json. Return slot after the record publication; no whole suite or M1-M40 batch starts here.
+2
View File
@@ -15,3 +15,5 @@ Post264a supersedes the385a preview: gander/row253-264a on84f53540d, rebased sou
Corrected interim integration2700/2702: gander/row253-b789 onb78918850, sourcec75c9bbd3339cb2343467715a14455044c2e4aea, digest573c51cf72f2398532a6ea768536f04e3c1681997cb8b9a6f14a8aef884870ae.27-file scope unchanged. Pending final docs tip, rebase and CLEAR; no gate run.
Final base under sage-2705: gander/row253-aca1 onaca16404c, sourceed3bb376cdd5128dc58b3aa193282e1c2bfcf57d, digest573c51cf unchanged. integration-aca1/ is the final-hop packet. No runs yet.
Focused27 under sage-2709 now passed on0604d91fc:604/0/0, no timeouts, no retries, N9 executed and passed (exact line in run3-focused/SUMMARY.json). All7 blobs unchanged;573c51cf remains the review digest. run3-focused/ contains every raw whole-file log/command, HEAD/digest/limits preamble, timings and3x basis. No full gate or mutation-batch result is claimed.
@@ -0,0 +1,36 @@
#!/usr/bin/env python3
"""Summarize completed focused evidence without executing tests."""
import datetime
import hashlib
import json
import math
from pathlib import Path
HERE=Path(__file__).resolve().parent
RUN=HERE/'run3-focused'
def main():
results=json.loads((RUN/'files/results.json').read_text())
assert len(results['steps'])==27
assert all(s['code']==0 and not s['timeout'] and s['counts'].get('fail')==0 for s in results['steps'])
header=(RUN/'controller.log').read_text().splitlines()
assert json.loads(header[0])=={k:results[k] for k in ['grant','head','manifest']}
assert json.loads(header[1])['authority']=='sage-2709'
named=[]
basis={}
lines=['# Focused27 whole-file results','','| Whole file | Pass/fail/skip | Wall seconds | Command limit seconds | Next3x plus120 basis |','|---|---:|---:|---:|---:|']
for s in results['steps']:
command=json.loads(Path(s['log']).with_suffix('.command.json').read_text())
expected=900 if s['file'].startswith('packages/cli/') else 300
assert command==['timeout','-k','10',str(expected),'node','--test','--test-reporter=tap',s['file']]
c=s['counts'];limit=math.ceil(3*s['seconds'])+120
basis[s['file']]=dict(recorded_seconds=s['seconds'],receipt=s['log'],next_limit_seconds=limit,derivation='ceil(3*measured whole-file seconds)+120')
lines.append(f"| {s['file']} | {c['pass']}/{c['fail']}/{c['skipped']} | {s['seconds']} | {expected} | {limit} |")
named += [dict(file=s['file'],line=line) for line in s['named_skips']]
case2=next(s for s in results['steps'] if s['file'].endswith('/case2-unit.test.mjs'))
n9=[line for line in Path(case2['log']).read_text().splitlines() if 'inside a session' in line and 'ok ' in line]
assert len(n9)==1
result=dict(status='GREEN',grant=results['grant'],candidate=results['head'],manifest=results['manifest'],counts={k:sum(s['counts'].get(k,0) for s in results['steps']) for k in ['pass','fail','skipped']},steps=results['steps'],named_skips=named,n9_exact_line=n9[0],file_seconds_sum=round(sum(s['seconds'] for s in results['steps']),3),next_file_limits=basis,timeout_count=0,source_manifest_verified=True)
(RUN/'SUMMARY.json').write_text(json.dumps(result,indent=2)+'\n')
(RUN/'RESULTS.md').write_text('\n'.join(lines)+'\n\nN9 verbatim: '+n9[0]+'\n\nEvery skip:\n\n'+'\n'.join('- '+s['line'] for s in named)+'\n')
(RUN/'MEASURED-FILE-LIMITS.json').write_text(json.dumps(basis,indent=2)+'\n')
print(json.dumps({k:result[k] for k in ['counts','named_skips','n9_exact_line','file_seconds_sum']},indent=2))
if __name__=='__main__':main()
@@ -0,0 +1,34 @@
#!/usr/bin/env python3
"""Read-only sweep of this worktree and focused TMPDIR, including deleted cwd."""
import datetime
import json
import os
from pathlib import Path
HERE=Path(__file__).resolve().parent
REPO=HERE.parents[3]
RUN=HERE/'run3-focused'
def main():
tmp=Path((RUN/'TMPDIR').read_text().strip())
started=datetime.datetime.fromisoformat((RUN/'start.txt').read_text().strip().replace('Z','+00:00')).timestamp()
boot=int(next(s.split()[1] for s in Path('/proc/stat').read_text().splitlines() if s.startswith('btime ')))
ancestors=set();pid=os.getpid()
while pid and pid not in ancestors:
ancestors.add(pid)
try:pid=int(next(s.split(':')[1] for s in Path(f'/proc/{pid}/status').read_text().splitlines() if s.startswith('PPid:')))
except (OSError,StopIteration):break
known={2880281,2880282,2880283,2880284,2880445,2880487,2880537,2883251,2880439,2469277,2469278,2469279,2469292,2469478,2469485,2469518,2469601,2470486}
remaining=[];excluded=[]
for proc in Path('/proc').iterdir():
if not proc.name.isdigit() or int(proc.name) in ancestors:continue
try:
rawcwd=os.readlink(proc/'cwd');cwd=Path(rawcwd.removesuffix(' (deleted)'))
if not(cwd==REPO or REPO in cwd.parents or cwd==tmp or tmp in cwd.parents):continue
stat=(proc/'stat').read_text().rsplit(') ',1)[1].split()
stamp=boot+int(stat[19])/os.sysconf('SC_CLK_TCK')
item=dict(pid=int(proc.name),comm=(proc/'comm').read_text().strip(),cwd=rawcwd,started_utc=datetime.datetime.fromtimestamp(stamp,datetime.timezone.utc).isoformat())
if int(proc.name) in known and stamp<started:excluded.append(item)
else:remaining.append(item)
except (OSError,ValueError,IndexError):continue
result=dict(timestamp=datetime.datetime.now(datetime.timezone.utc).isoformat(),count=len(remaining),remaining=remaining,excluded_preexisting_infrastructure=excluded,note='Read-only /proc cwd sweep, including deleted cwd under this run TMPDIR. Own ancestry excluded. Only known MCP/npm/code-mode infrastructure PIDs with pre-run start ticks are excluded. No signalling.')
(RUN/'sweep.json').write_text(json.dumps(result,indent=2)+'\n');print(json.dumps(result,indent=2))
if __name__=='__main__':main()
@@ -1,15 +1,15 @@
{
"packages/cli/tests/case1-accept.test.mjs": {
"timeout_seconds": 300,
"timeout_seconds": 900,
"kill_after_seconds": 10,
"outer_harness_seconds": 330,
"reason": "Whole-file bound under sage-2705; no prior repaired-C4 whole-file timing claimed."
"outer_harness_seconds": 930,
"reason": "sage-2709: six CLI whole files use900s; measured durations establish later3x basis."
},
"packages/cli/tests/case2-unit.test.mjs": {
"timeout_seconds": 300,
"timeout_seconds": 900,
"kill_after_seconds": 10,
"outer_harness_seconds": 330,
"reason": "Whole-file bound under sage-2705; no prior repaired-C4 whole-file timing claimed."
"outer_harness_seconds": 930,
"reason": "sage-2709: six CLI whole files use900s; measured durations establish later3x basis."
},
"packages/bus/tests/account-migration.test.mjs": {
"timeout_seconds": 300,
@@ -132,28 +132,28 @@
"reason": "Whole-file bound under sage-2705; no prior repaired-C4 whole-file timing claimed."
},
"packages/cli/tests/lifecycle.test.mjs": {
"timeout_seconds": 300,
"timeout_seconds": 900,
"kill_after_seconds": 10,
"outer_harness_seconds": 330,
"reason": "Whole-file bound under sage-2705; no prior repaired-C4 whole-file timing claimed."
"outer_harness_seconds": 930,
"reason": "sage-2709: six CLI whole files use900s; measured durations establish later3x basis."
},
"packages/cli/tests/stack-release.test.mjs": {
"timeout_seconds": 300,
"timeout_seconds": 900,
"kill_after_seconds": 10,
"outer_harness_seconds": 330,
"reason": "Whole-file bound under sage-2705; no prior repaired-C4 whole-file timing claimed."
"outer_harness_seconds": 930,
"reason": "sage-2709: six CLI whole files use900s; measured durations establish later3x basis."
},
"packages/cli/tests/thread-cli.test.mjs": {
"timeout_seconds": 300,
"timeout_seconds": 900,
"kill_after_seconds": 10,
"outer_harness_seconds": 330,
"reason": "Whole-file bound under sage-2705; no prior repaired-C4 whole-file timing claimed."
"outer_harness_seconds": 930,
"reason": "sage-2709: six CLI whole files use900s; measured durations establish later3x basis."
},
"packages/cli/tests/thread-launch.test.mjs": {
"timeout_seconds": 300,
"timeout_seconds": 900,
"kill_after_seconds": 10,
"outer_harness_seconds": 330,
"reason": "Whole-file bound under sage-2705; no prior repaired-C4 whole-file timing claimed."
"outer_harness_seconds": 930,
"reason": "sage-2709: six CLI whole files use900s; measured durations establish later3x basis."
},
"packages/webui/tests/chat.test.mjs": {
"timeout_seconds": 300,
@@ -0,0 +1,164 @@
{
"packages/cli/tests/case1-accept.test.mjs": {
"recorded_seconds": 99.281,
"receipt": "agents/gander/work/queue-253/run3-focused/files/01.log",
"next_limit_seconds": 418,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/cli/tests/case2-unit.test.mjs": {
"recorded_seconds": 66.418,
"receipt": "agents/gander/work/queue-253/run3-focused/files/02.log",
"next_limit_seconds": 320,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/account-migration.test.mjs": {
"recorded_seconds": 0.415,
"receipt": "agents/gander/work/queue-253/run3-focused/files/03.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/chief-of-staff.test.mjs": {
"recorded_seconds": 2.168,
"receipt": "agents/gander/work/queue-253/run3-focused/files/04.log",
"next_limit_seconds": 127,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/comment-migration.test.mjs": {
"recorded_seconds": 0.565,
"receipt": "agents/gander/work/queue-253/run3-focused/files/05.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/end-launch.test.mjs": {
"recorded_seconds": 0.415,
"receipt": "agents/gander/work/queue-253/run3-focused/files/06.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/fire-revokes-grants.test.mjs": {
"recorded_seconds": 3.271,
"receipt": "agents/gander/work/queue-253/run3-focused/files/07.log",
"next_limit_seconds": 130,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/gitea-grant.test.mjs": {
"recorded_seconds": 8.634,
"receipt": "agents/gander/work/queue-253/run3-focused/files/08.log",
"next_limit_seconds": 146,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/gitea-migration.test.mjs": {
"recorded_seconds": 0.415,
"receipt": "agents/gander/work/queue-253/run3-focused/files/09.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/grant-executor.test.mjs": {
"recorded_seconds": 21.562,
"receipt": "agents/gander/work/queue-253/run3-focused/files/10.log",
"next_limit_seconds": 185,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/grant-migration.test.mjs": {
"recorded_seconds": 0.465,
"receipt": "agents/gander/work/queue-253/run3-focused/files/11.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/lifecycle-revoke.test.mjs": {
"recorded_seconds": 0.665,
"receipt": "agents/gander/work/queue-253/run3-focused/files/12.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/message-filter.test.mjs": {
"recorded_seconds": 0.515,
"receipt": "agents/gander/work/queue-253/run3-focused/files/13.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/name-migration.test.mjs": {
"recorded_seconds": 0.214,
"receipt": "agents/gander/work/queue-253/run3-focused/files/14.log",
"next_limit_seconds": 121,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/schema.test.mjs": {
"recorded_seconds": 0.214,
"receipt": "agents/gander/work/queue-253/run3-focused/files/15.log",
"next_limit_seconds": 121,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/sessions.test.mjs": {
"recorded_seconds": 0.615,
"receipt": "agents/gander/work/queue-253/run3-focused/files/16.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/spec-migration.test.mjs": {
"recorded_seconds": 0.214,
"receipt": "agents/gander/work/queue-253/run3-focused/files/17.log",
"next_limit_seconds": 121,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/tester-writes.test.mjs": {
"recorded_seconds": 0.565,
"receipt": "agents/gander/work/queue-253/run3-focused/files/18.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/thread-claims.test.mjs": {
"recorded_seconds": 0.264,
"receipt": "agents/gander/work/queue-253/run3-focused/files/19.log",
"next_limit_seconds": 121,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/thread-migration.test.mjs": {
"recorded_seconds": 0.365,
"receipt": "agents/gander/work/queue-253/run3-focused/files/20.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/threads.test.mjs": {
"recorded_seconds": 1.216,
"receipt": "agents/gander/work/queue-253/run3-focused/files/21.log",
"next_limit_seconds": 124,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/usage-migration.test.mjs": {
"recorded_seconds": 0.214,
"receipt": "agents/gander/work/queue-253/run3-focused/files/22.log",
"next_limit_seconds": 121,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/cli/tests/lifecycle.test.mjs": {
"recorded_seconds": 13.296,
"receipt": "agents/gander/work/queue-253/run3-focused/files/23.log",
"next_limit_seconds": 160,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/cli/tests/stack-release.test.mjs": {
"recorded_seconds": 583.453,
"receipt": "agents/gander/work/queue-253/run3-focused/files/24.log",
"next_limit_seconds": 1871,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/cli/tests/thread-cli.test.mjs": {
"recorded_seconds": 1.876,
"receipt": "agents/gander/work/queue-253/run3-focused/files/25.log",
"next_limit_seconds": 126,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/cli/tests/thread-launch.test.mjs": {
"recorded_seconds": 16.603,
"receipt": "agents/gander/work/queue-253/run3-focused/files/26.log",
"next_limit_seconds": 170,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/webui/tests/chat.test.mjs": {
"recorded_seconds": 0.515,
"receipt": "agents/gander/work/queue-253/run3-focused/files/27.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
}
}
@@ -0,0 +1,7 @@
# Focused window notes
Grant sage-2709 at14:29:21Z, test run start14:30:03Z. First busy check passed; no busy refusal occurred. Sage2711 reports one unrelated canonical queue write by Gizmoduck at14:29:42Z, row269 rev3217, and authorizes rechecking if it trips a busy guard. No recheck or test retry was needed. No test path was changed by that write. Later file results determine the gate outcome; no timing explanation is assumed.
Duckworth0149 static integration check has no blockers on0604d91fc /573c51cf. Focused logs will supply HEAD/digest,27 file totals and every skip, including exact N9 case2 skip.
Sage2714 reports Darkwing queue-show reads around14:31Z and two Python read operations at14:32Z, outside this worktree/TMPDIR. No own busy refusal or retry occurred. No test impact observed; no causal claim made about timings. This seat did not access the live data named in that notice.
@@ -0,0 +1,37 @@
# Focused27 whole-file results
| Whole file | Pass/fail/skip | Wall seconds | Command limit seconds | Next3x plus120 basis |
|---|---:|---:|---:|---:|
| packages/cli/tests/case1-accept.test.mjs | 34/0/0 | 99.281 | 900 | 418 |
| packages/cli/tests/case2-unit.test.mjs | 43/0/0 | 66.418 | 900 | 320 |
| packages/bus/tests/account-migration.test.mjs | 3/0/0 | 0.415 | 300 | 122 |
| packages/bus/tests/chief-of-staff.test.mjs | 42/0/0 | 2.168 | 300 | 127 |
| packages/bus/tests/comment-migration.test.mjs | 5/0/0 | 0.565 | 300 | 122 |
| packages/bus/tests/end-launch.test.mjs | 7/0/0 | 0.415 | 300 | 122 |
| packages/bus/tests/fire-revokes-grants.test.mjs | 22/0/0 | 3.271 | 300 | 130 |
| packages/bus/tests/gitea-grant.test.mjs | 49/0/0 | 8.634 | 300 | 146 |
| packages/bus/tests/gitea-migration.test.mjs | 5/0/0 | 0.415 | 300 | 122 |
| packages/bus/tests/grant-executor.test.mjs | 42/0/0 | 21.562 | 300 | 185 |
| packages/bus/tests/grant-migration.test.mjs | 6/0/0 | 0.465 | 300 | 122 |
| packages/bus/tests/lifecycle-revoke.test.mjs | 8/0/0 | 0.665 | 300 | 122 |
| packages/bus/tests/message-filter.test.mjs | 6/0/0 | 0.515 | 300 | 122 |
| packages/bus/tests/name-migration.test.mjs | 1/0/0 | 0.214 | 300 | 121 |
| packages/bus/tests/schema.test.mjs | 1/0/0 | 0.214 | 300 | 121 |
| packages/bus/tests/sessions.test.mjs | 7/0/0 | 0.615 | 300 | 122 |
| packages/bus/tests/spec-migration.test.mjs | 1/0/0 | 0.214 | 300 | 121 |
| packages/bus/tests/tester-writes.test.mjs | 8/0/0 | 0.565 | 300 | 122 |
| packages/bus/tests/thread-claims.test.mjs | 6/0/0 | 0.264 | 300 | 121 |
| packages/bus/tests/thread-migration.test.mjs | 3/0/0 | 0.365 | 300 | 122 |
| packages/bus/tests/threads.test.mjs | 17/0/0 | 1.216 | 300 | 124 |
| packages/bus/tests/usage-migration.test.mjs | 1/0/0 | 0.214 | 300 | 121 |
| packages/cli/tests/lifecycle.test.mjs | 24/0/0 | 13.296 | 900 | 160 |
| packages/cli/tests/stack-release.test.mjs | 218/0/0 | 583.453 | 900 | 1871 |
| packages/cli/tests/thread-cli.test.mjs | 11/0/0 | 1.876 | 900 | 126 |
| packages/cli/tests/thread-launch.test.mjs | 11/0/0 | 16.603 | 900 | 170 |
| packages/webui/tests/chat.test.mjs | 23/0/0 | 0.515 | 300 | 122 |
N9 verbatim: ok 43 - inside a session's sandbox a bind below 1024 fails with EACCES, and a bind on a free high port succeeds
Every skip:
@@ -0,0 +1,625 @@
{
"status": "GREEN",
"grant": "sage-2709",
"candidate": "0604d91fcfc1949810cd5321aea6ec43e9b74b4b",
"manifest": "573c51cf72f2398532a6ea768536f04e3c1681997cb8b9a6f14a8aef884870ae",
"counts": {
"pass": 604,
"fail": 0,
"skipped": 0
},
"steps": [
{
"code": 0,
"timeout": false,
"seconds": 99.281,
"log": "agents/gander/work/queue-253/run3-focused/files/01.log",
"file": "packages/cli/tests/case1-accept.test.mjs",
"counts": {
"tests": 34,
"pass": 34,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 66.418,
"log": "agents/gander/work/queue-253/run3-focused/files/02.log",
"file": "packages/cli/tests/case2-unit.test.mjs",
"counts": {
"tests": 43,
"pass": 43,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.415,
"log": "agents/gander/work/queue-253/run3-focused/files/03.log",
"file": "packages/bus/tests/account-migration.test.mjs",
"counts": {
"tests": 3,
"pass": 3,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 2.168,
"log": "agents/gander/work/queue-253/run3-focused/files/04.log",
"file": "packages/bus/tests/chief-of-staff.test.mjs",
"counts": {
"tests": 42,
"pass": 42,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.565,
"log": "agents/gander/work/queue-253/run3-focused/files/05.log",
"file": "packages/bus/tests/comment-migration.test.mjs",
"counts": {
"tests": 5,
"pass": 5,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.415,
"log": "agents/gander/work/queue-253/run3-focused/files/06.log",
"file": "packages/bus/tests/end-launch.test.mjs",
"counts": {
"tests": 7,
"pass": 7,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 3.271,
"log": "agents/gander/work/queue-253/run3-focused/files/07.log",
"file": "packages/bus/tests/fire-revokes-grants.test.mjs",
"counts": {
"tests": 22,
"pass": 22,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 8.634,
"log": "agents/gander/work/queue-253/run3-focused/files/08.log",
"file": "packages/bus/tests/gitea-grant.test.mjs",
"counts": {
"tests": 49,
"pass": 49,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.415,
"log": "agents/gander/work/queue-253/run3-focused/files/09.log",
"file": "packages/bus/tests/gitea-migration.test.mjs",
"counts": {
"tests": 5,
"pass": 5,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 21.562,
"log": "agents/gander/work/queue-253/run3-focused/files/10.log",
"file": "packages/bus/tests/grant-executor.test.mjs",
"counts": {
"tests": 42,
"pass": 42,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.465,
"log": "agents/gander/work/queue-253/run3-focused/files/11.log",
"file": "packages/bus/tests/grant-migration.test.mjs",
"counts": {
"tests": 6,
"pass": 6,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.665,
"log": "agents/gander/work/queue-253/run3-focused/files/12.log",
"file": "packages/bus/tests/lifecycle-revoke.test.mjs",
"counts": {
"tests": 8,
"pass": 8,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.515,
"log": "agents/gander/work/queue-253/run3-focused/files/13.log",
"file": "packages/bus/tests/message-filter.test.mjs",
"counts": {
"tests": 6,
"pass": 6,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-253/run3-focused/files/14.log",
"file": "packages/bus/tests/name-migration.test.mjs",
"counts": {
"tests": 1,
"pass": 1,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-253/run3-focused/files/15.log",
"file": "packages/bus/tests/schema.test.mjs",
"counts": {
"tests": 1,
"pass": 1,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.615,
"log": "agents/gander/work/queue-253/run3-focused/files/16.log",
"file": "packages/bus/tests/sessions.test.mjs",
"counts": {
"tests": 7,
"pass": 7,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-253/run3-focused/files/17.log",
"file": "packages/bus/tests/spec-migration.test.mjs",
"counts": {
"tests": 1,
"pass": 1,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.565,
"log": "agents/gander/work/queue-253/run3-focused/files/18.log",
"file": "packages/bus/tests/tester-writes.test.mjs",
"counts": {
"tests": 8,
"pass": 8,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.264,
"log": "agents/gander/work/queue-253/run3-focused/files/19.log",
"file": "packages/bus/tests/thread-claims.test.mjs",
"counts": {
"tests": 6,
"pass": 6,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.365,
"log": "agents/gander/work/queue-253/run3-focused/files/20.log",
"file": "packages/bus/tests/thread-migration.test.mjs",
"counts": {
"tests": 3,
"pass": 3,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 1.216,
"log": "agents/gander/work/queue-253/run3-focused/files/21.log",
"file": "packages/bus/tests/threads.test.mjs",
"counts": {
"tests": 17,
"pass": 17,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-253/run3-focused/files/22.log",
"file": "packages/bus/tests/usage-migration.test.mjs",
"counts": {
"tests": 1,
"pass": 1,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 13.296,
"log": "agents/gander/work/queue-253/run3-focused/files/23.log",
"file": "packages/cli/tests/lifecycle.test.mjs",
"counts": {
"tests": 24,
"pass": 24,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 583.453,
"log": "agents/gander/work/queue-253/run3-focused/files/24.log",
"file": "packages/cli/tests/stack-release.test.mjs",
"counts": {
"tests": 218,
"pass": 218,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 1.876,
"log": "agents/gander/work/queue-253/run3-focused/files/25.log",
"file": "packages/cli/tests/thread-cli.test.mjs",
"counts": {
"tests": 11,
"pass": 11,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 16.603,
"log": "agents/gander/work/queue-253/run3-focused/files/26.log",
"file": "packages/cli/tests/thread-launch.test.mjs",
"counts": {
"tests": 11,
"pass": 11,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.515,
"log": "agents/gander/work/queue-253/run3-focused/files/27.log",
"file": "packages/webui/tests/chat.test.mjs",
"counts": {
"tests": 23,
"pass": 23,
"fail": 0,
"skipped": 0
},
"named_skips": []
}
],
"named_skips": [],
"n9_exact_line": "ok 43 - inside a session's sandbox a bind below 1024 fails with EACCES, and a bind on a free high port succeeds",
"file_seconds_sum": 824.413,
"next_file_limits": {
"packages/cli/tests/case1-accept.test.mjs": {
"recorded_seconds": 99.281,
"receipt": "agents/gander/work/queue-253/run3-focused/files/01.log",
"next_limit_seconds": 418,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/cli/tests/case2-unit.test.mjs": {
"recorded_seconds": 66.418,
"receipt": "agents/gander/work/queue-253/run3-focused/files/02.log",
"next_limit_seconds": 320,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/account-migration.test.mjs": {
"recorded_seconds": 0.415,
"receipt": "agents/gander/work/queue-253/run3-focused/files/03.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/chief-of-staff.test.mjs": {
"recorded_seconds": 2.168,
"receipt": "agents/gander/work/queue-253/run3-focused/files/04.log",
"next_limit_seconds": 127,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/comment-migration.test.mjs": {
"recorded_seconds": 0.565,
"receipt": "agents/gander/work/queue-253/run3-focused/files/05.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/end-launch.test.mjs": {
"recorded_seconds": 0.415,
"receipt": "agents/gander/work/queue-253/run3-focused/files/06.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/fire-revokes-grants.test.mjs": {
"recorded_seconds": 3.271,
"receipt": "agents/gander/work/queue-253/run3-focused/files/07.log",
"next_limit_seconds": 130,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/gitea-grant.test.mjs": {
"recorded_seconds": 8.634,
"receipt": "agents/gander/work/queue-253/run3-focused/files/08.log",
"next_limit_seconds": 146,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/gitea-migration.test.mjs": {
"recorded_seconds": 0.415,
"receipt": "agents/gander/work/queue-253/run3-focused/files/09.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/grant-executor.test.mjs": {
"recorded_seconds": 21.562,
"receipt": "agents/gander/work/queue-253/run3-focused/files/10.log",
"next_limit_seconds": 185,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/grant-migration.test.mjs": {
"recorded_seconds": 0.465,
"receipt": "agents/gander/work/queue-253/run3-focused/files/11.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/lifecycle-revoke.test.mjs": {
"recorded_seconds": 0.665,
"receipt": "agents/gander/work/queue-253/run3-focused/files/12.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/message-filter.test.mjs": {
"recorded_seconds": 0.515,
"receipt": "agents/gander/work/queue-253/run3-focused/files/13.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/name-migration.test.mjs": {
"recorded_seconds": 0.214,
"receipt": "agents/gander/work/queue-253/run3-focused/files/14.log",
"next_limit_seconds": 121,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/schema.test.mjs": {
"recorded_seconds": 0.214,
"receipt": "agents/gander/work/queue-253/run3-focused/files/15.log",
"next_limit_seconds": 121,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/sessions.test.mjs": {
"recorded_seconds": 0.615,
"receipt": "agents/gander/work/queue-253/run3-focused/files/16.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/spec-migration.test.mjs": {
"recorded_seconds": 0.214,
"receipt": "agents/gander/work/queue-253/run3-focused/files/17.log",
"next_limit_seconds": 121,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/tester-writes.test.mjs": {
"recorded_seconds": 0.565,
"receipt": "agents/gander/work/queue-253/run3-focused/files/18.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/thread-claims.test.mjs": {
"recorded_seconds": 0.264,
"receipt": "agents/gander/work/queue-253/run3-focused/files/19.log",
"next_limit_seconds": 121,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/thread-migration.test.mjs": {
"recorded_seconds": 0.365,
"receipt": "agents/gander/work/queue-253/run3-focused/files/20.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/threads.test.mjs": {
"recorded_seconds": 1.216,
"receipt": "agents/gander/work/queue-253/run3-focused/files/21.log",
"next_limit_seconds": 124,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/bus/tests/usage-migration.test.mjs": {
"recorded_seconds": 0.214,
"receipt": "agents/gander/work/queue-253/run3-focused/files/22.log",
"next_limit_seconds": 121,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/cli/tests/lifecycle.test.mjs": {
"recorded_seconds": 13.296,
"receipt": "agents/gander/work/queue-253/run3-focused/files/23.log",
"next_limit_seconds": 160,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/cli/tests/stack-release.test.mjs": {
"recorded_seconds": 583.453,
"receipt": "agents/gander/work/queue-253/run3-focused/files/24.log",
"next_limit_seconds": 1871,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/cli/tests/thread-cli.test.mjs": {
"recorded_seconds": 1.876,
"receipt": "agents/gander/work/queue-253/run3-focused/files/25.log",
"next_limit_seconds": 126,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/cli/tests/thread-launch.test.mjs": {
"recorded_seconds": 16.603,
"receipt": "agents/gander/work/queue-253/run3-focused/files/26.log",
"next_limit_seconds": 170,
"derivation": "ceil(3*measured whole-file seconds)+120"
},
"packages/webui/tests/chat.test.mjs": {
"recorded_seconds": 0.515,
"receipt": "agents/gander/work/queue-253/run3-focused/files/27.log",
"next_limit_seconds": 122,
"derivation": "ceil(3*measured whole-file seconds)+120"
}
},
"timeout_count": 0,
"source_manifest_verified": true,
"sweep": {
"timestamp": "2026-10-22T14:45:17.148081+00:00",
"count": 0,
"remaining": [],
"excluded_preexisting_infrastructure": [
{
"pid": 2469277,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:57.360000+00:00"
},
{
"pid": 2469278,
"comm": "npm exec @model",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:57.370000+00:00"
},
{
"pid": 2469279,
"comm": "npm exec chrome",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:57.370000+00:00"
},
{
"pid": 2469292,
"comm": "npm exec @playw",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:57.380000+00:00"
},
{
"pid": 2469478,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:58.770000+00:00"
},
{
"pid": 2469485,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:58.800000+00:00"
},
{
"pid": 2469518,
"comm": "chrome-devtools",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:59.100000+00:00"
},
{
"pid": 2469601,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:59.440000+00:00"
},
{
"pid": 2470486,
"comm": "codex-code-mode",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:21:07.580000+00:00"
}
],
"note": "Read-only /proc cwd sweep, including deleted cwd under this run TMPDIR. Own ancestry excluded. Only known MCP/npm/code-mode infrastructure PIDs with pre-run start ticks are excluded. No signalling."
},
"start": "2026-10-22T14:30:03Z",
"end": "2026-10-22T14:44:57Z",
"wall_seconds": 894.0
}
@@ -0,0 +1 @@
/mnt/storage/scratch/tmp/gMJyGKC
File diff suppressed because it is too large. Load diff
@@ -0,0 +1 @@
2026-10-22T14:44:57Z
@@ -0,0 +1 @@
["timeout", "-k", "10", "900", "node", "--test", "--test-reporter=tap", "packages/cli/tests/case1-accept.test.mjs"]
@@ -0,0 +1,214 @@
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: 635.08322
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: 8910.768359
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: 1287.210524
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: 2759.173042
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: 1495.993888
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: 10714.050013
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: 14202.380117
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: 533.74284
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: 5977.183052
type: 'test'
...
# 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: 9158.961886
type: 'test'
...
# 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: 1068.808446
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: 657.788738
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: 7275.151025
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: 1359.251446
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: 1214.848264
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: 1318.107134
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: 2891.844673
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: 1370.822639
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: 2098.024276
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: 2106.445728
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: 2002.61524
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: 1861.992457
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: 1901.812772
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: 1431.808863
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: 5915.695807
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: 1423.353014
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: 616.405224
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: 3502.799413
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: 1268.612039
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: 517.656059
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: 114.130545
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: 12.783137
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: 719.568395
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: 753.65801
type: 'test'
...
1..34
# tests 34
# suites 0
# pass 34
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 99207.214655
@@ -0,0 +1 @@
["timeout", "-k", "10", "900", "node", "--test", "--test-reporter=tap", "packages/cli/tests/case2-unit.test.mjs"]
@@ -0,0 +1,268 @@
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: 262.277524
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: 2888.737963
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: 7063.145938
type: 'test'
...
# Subtest: row253 protected homes refuse before any filesystem access
ok 4 - row253 protected homes refuse before any filesystem access
---
duration_ms: 9.095629
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: 10654.435358
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: 10558.851516
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: 10575.034076
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: 356.84676
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.115825
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.332222
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: 27.312099
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: 125.14664
type: 'test'
...
# Subtest: row253 config parser is strict
ok 13 - row253 config parser is strict
---
duration_ms: 8.171201
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.172642
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.781364
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: 91.475307
type: 'test'
...
# Subtest: the script never links a unit file
ok 17 - the script never links a unit file
---
duration_ms: 0.17219
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: 533.168317
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: 410.859392
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: 978.008405
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: 262.771603
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: 178.505576
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.131551
type: 'test'
...
# Subtest: a symlink at either unit path refuses
ok 24 - a symlink at either unit path refuses
---
duration_ms: 164.772609
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.273626
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: 454.1624
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.147366
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.564149
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: 267.048019
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: 17.16447
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: 179.834197
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: 27.35353
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: 1109.424536
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.001864
type: 'test'
...
# Subtest: the precheck refuses each failed host check
ok 35 - the precheck refuses each failed host check
---
duration_ms: 912.086148
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: 468.71868
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: 103.211063
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: 483.098555
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: 397.641457
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: 856.874242
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: 262.683595
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: 591.944048
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: 82.554846
type: 'test'
...
1..43
# tests 43
# suites 0
# pass 43
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 66326.521088
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/account-migration.test.mjs"]
@@ -0,0 +1,28 @@
TAP version 13
# Subtest: REQ-LIMIT-4 3h copy migrates to 3i: every row keeps its seq, the sequence carries over, and only the account CHECK changes
ok 1 - REQ-LIMIT-4 3h copy migrates to 3i: every row keeps its seq, the sequence carries over, and only the account CHECK changes
---
duration_ms: 82.597902
type: 'test'
...
# Subtest: REQ-LIMIT-4 a 3h→3i step that fails partway leaves the store at 3h with every row, the sequence and the schema intact
ok 2 - REQ-LIMIT-4 a 3h→3i step that fails partway leaves the store at 3h with every row, the sequence and the schema intact
---
duration_ms: 92.53462
type: 'test'
...
# Subtest: REQ-LIMIT-4 the 3h engine refuses a migrated store, migrating or not, and leaves it as it was
ok 3 - REQ-LIMIT-4 the 3h engine refuses a migrated store, migrating or not, and leaves it as it was
---
duration_ms: 81.102574
type: 'test'
...
1..3
# tests 3
# suites 0
# pass 3
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 340.975929
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/chief-of-staff.test.mjs"]
@@ -0,0 +1,271 @@
TAP version 13
# organization: {"event":"reload-needs-restart","business":"demo"}
# organization: {"event":"reload-needs-restart","business":"demo"}
# organization: {"event":"reload-needs-restart","business":"demo"}
# organization: {"event":"reload-needs-restart","business":"demo"}
# organization: {"event":"reload-needs-restart","business":"demo"}
# organization: {"event":"reload-needs-restart","business":"demo"}
# organization: {"event":"reload-needs-restart","business":"demo"}
# organization: {"event":"reload-needs-restart","business":"demo"}
# organization: {"event":"reload-needs-restart","business":"demo"}
# Subtest: REQ-COS-1, REQ-ROLE-2: the chief of staff ends a run with a reason and no decision, and the reason is logged
ok 1 - REQ-COS-1, REQ-ROLE-2: the chief of staff ends a run with a reason and no decision, and the reason is logged
---
duration_ms: 28.331746
type: 'test'
...
# Subtest: REQ-ROLE-2: a role without role.end still needs a resolved decision to revoke
ok 2 - REQ-ROLE-2: a role without role.end still needs a resolved decision to revoke
---
duration_ms: 26.434808
type: 'test'
...
# Subtest: REQ-ROLE-2: storage accepts a revoke with a reason or a decision and aborts one with neither
ok 3 - REQ-ROLE-2: storage accepts a revoke with a reason or a decision and aborts one with neither
---
duration_ms: 17.938787
type: 'test'
...
# Subtest: REQ-ROLE-2: the chief of staff may still cite a decision, and a decision alone is the old path
ok 4 - REQ-ROLE-2: the chief of staff may still cite a decision, and a decision alone is the old path
---
duration_ms: 18.620206
type: 'test'
...
# Subtest: REQ-ROLE-2: a role without role.end still ends a run through a resolved decision, which is recorded and has no reason
ok 5 - REQ-ROLE-2: a role without role.end still ends a run through a resolved decision, which is recorded and has no reason
---
duration_ms: 21.128166
type: 'test'
...
# Subtest: REQ-ROLE-2: a reason is required, bounded, and never sent with a decision
ok 6 - REQ-ROLE-2: a reason is required, bounded, and never sent with a decision
---
duration_ms: 23.298242
type: 'test'
...
# Subtest: REQ-COS-1: the chief of staff cannot end its own run; its end of the assistant stops the assistant's thread run
ok 7 - REQ-COS-1: the chief of staff cannot end its own run; its end of the assistant stops the assistant's thread run
---
duration_ms: 24.376739
type: 'test'
...
# Subtest: REQ-LIMIT-1, REQ-COS-1: organization.set from the chief of staff reaches the shared writer, named as the actor
ok 8 - REQ-LIMIT-1, REQ-COS-1: organization.set from the chief of staff reaches the shared writer, named as the actor
---
duration_ms: 18.346487
type: 'test'
...
# Subtest: REQ-LIMIT-1, REQ-COS-1: a refused organization.set logs action.refused and no action.allowed, like a refused limits.set
ok 9 - REQ-LIMIT-1, REQ-COS-1: a refused organization.set logs action.refused and no action.allowed, like a refused limits.set
---
duration_ms: 23.149091
type: 'test'
...
# Subtest: REQ-LIMIT-1: organization.set is refused for every caller whose role file lacks organization.change
ok 10 - REQ-LIMIT-1: organization.set is refused for every caller whose role file lacks organization.change
---
duration_ms: 26.114851
type: 'test'
...
# Subtest: REQ-LIMIT-1: the chief of staff is logged as allowed, and organization.set takes only the human's keys
ok 11 - REQ-LIMIT-1: the chief of staff is logged as allowed, and organization.set takes only the human's keys
---
duration_ms: 28.913122
type: 'test'
...
# Subtest: REQ-COS-1: organization.revision answers the revision alone to the chief of staff and spends nothing
ok 12 - REQ-COS-1: organization.revision answers the revision alone to the chief of staff and spends nothing
---
duration_ms: 23.086141
type: 'test'
...
# Subtest: REQ-COS-1, REQ-LIMIT-1: organization.revision is refused for every caller whose role file lacks organization.change
ok 13 - REQ-COS-1, REQ-LIMIT-1: organization.revision is refused for every caller whose role file lacks organization.change
---
duration_ms: 24.973528
type: 'test'
...
# Subtest: REQ-ROLE-3, REQ-LIMIT-1: a chief-of-staff change is validated, written and logged like a human's; an invalid one is refused
ok 14 - REQ-ROLE-3, REQ-LIMIT-1: a chief-of-staff change is validated, written and logged like a human's; an invalid one is refused
---
duration_ms: 121.448868
type: 'test'
...
# Subtest: REQ-COS-1: the chief of staff reads the revision, changes the file with it, and reads again after a stale one is refused
ok 15 - REQ-COS-1: the chief of staff reads the revision, changes the file with it, and reads again after a stale one is refused
---
duration_ms: 69.528621
type: 'test'
...
# Subtest: Q169: the chief of staff's change of the assistant is validated, written and logged; a stale or protection-stripping one is refused
ok 16 - Q169: the chief of staff's change of the assistant is validated, written and logged; a stale or protection-stripping one is refused
---
duration_ms: 77.400397
type: 'test'
...
# Subtest: row 65, Q169: the chief's change of the assistant's route runs the routing checks, and a valid one saves as the chief
ok 17 - row 65, Q169: the chief's change of the assistant's route runs the routing checks, and a valid one saves as the chief
---
duration_ms: 52.105961
type: 'test'
...
# Subtest: REQ-ROLE-2, REQ-COS-1: the 3c→3d migration lets the chief of staff end a held role with a reason; neither is still refused
ok 18 - REQ-ROLE-2, REQ-COS-1: the 3c→3d migration lets the chief of staff end a held role with a reason; neither is still refused
---
duration_ms: 75.179142
type: 'test'
...
# Subtest: row 194 T10: the chief's reason end of a kept instance refuses instance-kept, holds the claim and spends nothing
ok 19 - row 194 T10: the chief's reason end of a kept instance refuses instance-kept, holds the claim and spends nothing
---
duration_ms: 18.345149
type: 'test'
...
# Subtest: row 194 T10 (Q2): a role.revoke citing a decision the human resolved still ends a kept run
ok 20 - row 194 T10 (Q2): a role.revoke citing a decision the human resolved still ends a kept run
---
duration_ms: 19.386726
type: 'test'
...
# Subtest: row 194 T10 (B7): the chief's organization.set of a kept instance's model refuses before the writer; the human's limits.set does not
ok 21 - row 194 T10 (B7): the chief's organization.set of a kept instance's model refuses before the writer; the human's limits.set does not
---
duration_ms: 19.01179
type: 'test'
...
# Subtest: row 194 T13: organization.set and limits.set refuse the launch, retired, keep and noHire keys before the writer
ok 22 - row 194 T13: organization.set and limits.set refuse the launch, retired, keep and noHire keys before the writer
---
duration_ms: 23.117738
type: 'test'
...
# Subtest: row 194 T18 (D2.4): from a chief session veto.set and instances.set refuse, and nothing reaches the writer
ok 23 - row 194 T18 (D2.4): from a chief session veto.set and instances.set refuse, and nothing reaches the writer
---
duration_ms: 22.420802
type: 'test'
...
# Subtest: row 194 T8: the chief hires with a reason and no decision, the writer gets the reason as context, and the log names it
ok 24 - row 194 T8: the chief hires with a reason and no decision, the writer gets the reason as context, and the log names it
---
duration_ms: 21.138167
type: 'test'
...
# Subtest: row 194 T11: on a bus with two businesses, the chief of one hires and fires only in its own
ok 25 - row 194 T11: on a bus with two businesses, the chief of one hires and fires only in its own
---
duration_ms: 18.321241
type: 'test'
...
# Subtest: row 194 T8: hire and fire need a reason of 1 to 500 characters and refuse a decision key
ok 26 - row 194 T8: hire and fire need a reason of 1 to 500 characters and refuse a decision key
---
duration_ms: 29.401579
type: 'test'
...
# Subtest: row 194 T8 (sage-1471): only the chief hires or fires; every other role refuses role-not-chief, even one granted the actions
ok 27 - row 194 T8 (sage-1471): only the chief hires or fires; every other role refuses role-not-chief, even one granted the actions
---
duration_ms: 27.890795
type: 'test'
...
# Subtest: row 194 T8 (sage-1471): a chief whose authority lacks role.hire or role.fire refuses decision-required before the writer
ok 28 - row 194 T8 (sage-1471): a chief whose authority lacks role.hire or role.fire refuses decision-required before the writer
---
duration_ms: 39.940767
type: 'test'
...
# Subtest: row 194 T8a: a re-hire of a fired name goes to the writer like a hire, and the writer's refusals pass through by name
ok 29 - row 194 T8a: a re-hire of a fired name goes to the writer like a hire, and the writer's refusals pass through by name
---
duration_ms: 23.456981
type: 'test'
...
# Subtest: row 194 T8b: a definition is hireable only when every action is on HIRE_ALLOWED, it is version 2, the chief lists it and noHire doesn't
ok 30 - row 194 T8b: a definition is hireable only when every action is on HIRE_ALLOWED, it is version 2, the chief lists it and noHire doesn't
---
duration_ms: 664.437436
type: 'test'
...
# Subtest: row 194 T8b: a hire without the role files configured refuses not-configured
ok 31 - row 194 T8b: a hire without the role files configured refuses not-configured
---
duration_ms: 18.714128
type: 'test'
...
# Subtest: row 194 T9: a fire revokes the claim, cancels open requests, asks the launcher to kill the runs, then delists and logs
ok 32 - row 194 T9: a fire revokes the claim, cancels open requests, asks the launcher to kill the runs, then delists and logs
---
duration_ms: 21.402072
type: 'test'
...
# Subtest: row 194 T9a (bus): a fire end's done writes lifecycle.end.killed and lifecycle.end.alive with run and pid, and an unknown stop's reason; a terminate's done or a bad stop refuses
ok 33 - row 194 T9a (bus): a fire end's done writes lifecycle.end.killed and lifecycle.end.alive with run and pid, and an unknown stop's reason; a terminate's done or a bad stop refuses
---
duration_ms: 25.798012
type: 'test'
...
# Subtest: row 194 T9: fire refusals come before step A and leave the claim, the requests and the file alone
ok 34 - row 194 T9: fire refusals come before step A and leave the claim, the requests and the file alone
---
duration_ms: 22.191888
type: 'test'
...
# Subtest: row 194 T9c: a writer failure at B leaves the instance firing, and the repeat delists and logs once
ok 35 - row 194 T9c: a writer failure at B leaves the instance firing, and the repeat delists and logs once
---
duration_ms: 23.500086
type: 'test'
...
# Subtest: row 194 T9c: a failure at C leaves the fire unlogged and the instance firing, and the repeat logs it
ok 36 - row 194 T9c: a failure at C leaves the fire unlogged and the instance firing, and the repeat logs it
---
duration_ms: 24.322177
type: 'test'
...
# Subtest: row 194 W-N1: a fire.done before a later fire.stopped of the same instance leaves it firing; another instance's done does not end it
ok 37 - row 194 W-N1: a fire.done before a later fire.stopped of the same instance leaves it firing; another instance's done does not end it
---
duration_ms: 21.989082
type: 'test'
...
# Subtest: row 194 T10: a hire or fire of a kept name refuses instance-kept before the writer
ok 38 - row 194 T10: a hire or fire of a kept name refuses instance-kept before the writer
---
duration_ms: 18.687603
type: 'test'
...
# Subtest: row 194 T10: a fire the writer's check refuses from the file stops nothing and leaves the instance launchable
ok 39 - row 194 T10: a fire the writer's check refuses from the file stops nothing and leaves the instance launchable
---
duration_ms: 18.529568
type: 'test'
...
# Subtest: row 194 T18: hire and fire take only their own keys, and a refused call writes nothing
ok 40 - row 194 T18: hire and fire take only their own keys, and a refused call writes nothing
---
duration_ms: 24.530376
type: 'test'
...
# Subtest: row 194 T8, T9, T18: through the runtime the chief hires and fires with the real writer, the receipt carries the reason, and a refusal leaves the file alone
ok 41 - row 194 T8, T9, T18: through the runtime the chief hires and fires with the real writer, the receipt carries the reason, and a refusal leaves the file alone
---
duration_ms: 67.04966
type: 'test'
...
# Subtest: row 194 W-N1: the launcher's take of a launch or regenerate of a firing instance closes it as instance-firing
ok 42 - row 194 W-N1: the launcher's take of a launch or regenerate of a firing instance closes it as instance-firing
---
duration_ms: 24.174855
type: 'test'
...
1..42
# tests 42
# suites 0
# pass 42
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 2069.126162
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/comment-migration.test.mjs"]
@@ -0,0 +1,40 @@
TAP version 13
# Subtest: explicit 3b copy migration preserves evidence and opens as 3g; normal startup never migrates
ok 1 - explicit 3b copy migration preserves evidence and opens as 3g; normal startup never migrates
---
duration_ms: 66.915434
type: 'test'
...
# Subtest: migration refuses active writers and drifted legacy schemas, with no partial upgrade
ok 2 - migration refuses active writers and drifted legacy schemas, with no partial upgrade
---
duration_ms: 87.090397
type: 'test'
...
# Subtest: named migration registry chains 3b through 3g to a fixture-only future version in order
ok 3 - named migration registry chains 3b through 3g to a fixture-only future version in order
---
duration_ms: 92.896241
type: 'test'
...
# Subtest: migration refuses mismatched source metadata without changing schema or evidence
ok 4 - migration refuses mismatched source metadata without changing schema or evidence
---
duration_ms: 36.477831
type: 'test'
...
# Subtest: offline command migrates only the supplied fixture root and reports usage errors
ok 5 - offline command migrates only the supplied fixture root and reports usage errors
---
duration_ms: 168.952237
type: 'test'
...
1..5
# tests 5
# suites 0
# pass 5
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 517.394008
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/end-launch.test.mjs"]
@@ -0,0 +1,52 @@
TAP version 13
# Subtest: endLaunch writes session.ended, releases the run claim and kills its capabilities
ok 1 - endLaunch writes session.ended, releases the run claim and kills its capabilities
---
duration_ms: 19.923626
type: 'test'
...
# Subtest: endLaunch refuses an unknown run, a second end and a rebind of the ended run
ok 2 - endLaunch refuses an unknown run, a second end and a rebind of the ended run
---
duration_ms: 11.57898
type: 'test'
...
# Subtest: a restarted broker refuses to rebind an ended run; a refused rebind leaves the run unbound
ok 3 - a restarted broker refuses to rebind an ended run; a refused rebind leaves the run unbound
---
duration_ms: 13.959669
type: 'test'
...
# Subtest: endLaunch leaves a claim another run took alone
ok 4 - endLaunch leaves a claim another run took alone
---
duration_ms: 15.607261
type: 'test'
...
# Subtest: refuse records action.refused against the caller with the code only
ok 5 - refuse records action.refused against the caller with the code only
---
duration_ms: 11.34653
type: 'test'
...
# Subtest: launches off refuses role.launch with launch-revoked until launches on
ok 6 - launches off refuses role.launch with launch-revoked until launches on
---
duration_ms: 15.612767
type: 'test'
...
# Subtest: broker process: launch ops authorize role.launch, record refusals and end runs
ok 7 - broker process: launch ops authorize role.launch, record refusals and end runs
---
duration_ms: 162.081295
type: 'test'
...
1..7
# tests 7
# suites 0
# pass 7
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 323.68804
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/fire-revokes-grants.test.mjs"]
@@ -0,0 +1,142 @@
TAP version 13
# Subtest: row 281 T2: a fire with host grants on two hosts and a Gitea grant answers with a job, then revokes all three
ok 1 - row 281 T2: a fire with host grants on two hosts and a Gitea grant answers with a job, then revokes all three
---
duration_ms: 232.783752
type: 'test'
...
# Subtest: row 281 T3 (sage-2575): a delete with grants takes two requests: the first starts the job, the next completes
ok 2 - row 281 T3 (sage-2575): a delete with grants takes two requests: the first starts the job, the next completes
---
duration_ms: 223.116777
type: 'test'
...
# Subtest: row 281 T3b (Q2): a delete whose job refuses on host B; the retry refuses grant-revoke-failed and revokes only B and Gitea
ok 3 - row 281 T3b (Q2): a delete whose job refuses on host B; the retry refuses grant-revoke-failed and revokes only B and Gitea
---
duration_ms: 211.879543
type: 'test'
...
# Subtest: row 281 T3b: B cleared by hand with hosts.revoke; the next delete starts a job for Gitea and the leftover line only
ok 4 - row 281 T3b: B cleared by hand with hosts.revoke; the next delete starts a job for Gitea and the leftover line only
---
duration_ms: 208.941116
type: 'test'
...
# Subtest: row 281 T3c (sage-2575 condition 4): a delete of an instance with no grant completes in one request
ok 5 - row 281 T3c (sage-2575 condition 4): a delete of an instance with no grant completes in one request
---
duration_ms: 52.070752
type: 'test'
...
# Subtest: row 281 T4: host B unreachable in a fire: the job refuses, A stays revoked, B and Gitea untouched; a repeat completes
ok 6 - row 281 T4: host B unreachable in a fire: the job refuses, A stays revoked, B and Gitea untouched; a repeat completes
---
duration_ms: 193.713805
type: 'test'
...
# Subtest: row 281 T4b (Q1): a line a manual hosts.revoke left on C is removed by the fire, with its close
ok 7 - row 281 T4b (Q1): a line a manual hosts.revoke left on C is removed by the fire, with its close
---
duration_ms: 100.196392
type: 'test'
...
# Subtest: row 281 T4b (Q1): with C unreachable, the fire completes and names the line in grantsLeft
ok 8 - row 281 T4b (Q1): with C unreachable, the fire completes and names the line in grantsLeft
---
duration_ms: 82.925658
type: 'test'
...
# Subtest: row 281 T5: Gitea's admin token can't be checked: the job refuses with the Gitea grant intact
ok 9 - row 281 T5: Gitea's admin token can't be checked: the job refuses with the Gitea grant intact
---
duration_ms: 112.342135
type: 'test'
...
# Subtest: row 281 T5b (N1): a failed token DELETE refuses gitea-left; the repeat retries only this agent's entries
ok 10 - row 281 T5b (N1): a failed token DELETE refuses gitea-left; the repeat retries only this agent's entries
---
duration_ms: 295.497967
type: 'test'
...
# Subtest: row 281 T6 (sage-2574): a host decision approved before the fire and run after it ends revoked, with nothing applied
ok 11 - row 281 T6 (sage-2574): a host decision approved before the fire and run after it ends revoked, with nothing applied
---
duration_ms: 64.894992
type: 'test'
...
# Subtest: row 281 T6b (sage-2574): a Gitea decision approved before the fire and run after it ends revoked before any Gitea write
ok 12 - row 281 T6b (sage-2574): a Gitea decision approved before the fire and run after it ends revoked before any Gitea write
---
duration_ms: 86.54008
type: 'test'
...
# Subtest: row 281 T6c: a host executor in flight aborts and ends revoked; a Gitea executor in flight is awaited and leaves no token
ok 13 - row 281 T6c: a host executor in flight aborts and ends revoked; a Gitea executor in flight is awaited and leaves no token
---
duration_ms: 237.49431
type: 'test'
...
# Subtest: row 281 T6d (B1): undecided host and Gitea decisions are in the set, and approved after the fire both end revoked
ok 14 - row 281 T6d (B1): undecided host and Gitea decisions are in the set, and approved after the fire both end revoked
---
duration_ms: 92.642809
type: 'test'
...
# Subtest: row 281 T6e (B1): a grant raise refuses instance-fired while firing and after the fire, goes through after a rehire, and refuses grant-revoke-running during a delete job
ok 15 - row 281 T6e (B1): a grant raise refuses instance-fired while firing and after the fire, goes through after a rehire, and refuses grant-revoke-running during a delete job
---
duration_ms: 104.408759
type: 'test'
...
# Subtest: row 281 T7: an instance with no grant fires as today, synchronously, with the same events
ok 16 - row 281 T7: an instance with no grant fires as today, synchronously, with the same events
---
duration_ms: 52.79141
type: 'test'
...
# Subtest: row 281 T9 (B3): one step G per agent; the manual verbs refuse while it runs, and sweep names it running
ok 17 - row 281 T9 (B3): one step G per agent; the manual verbs refuse while it runs, and sweep names it running
---
duration_ms: 223.695847
type: 'test'
...
# Subtest: row 281 T10 (B2): the fire and the delete answer while their jobs are held, and the broker answers other verbs
ok 18 - row 281 T10 (B2): the fire and the delete answer while their jobs are held, and the broker answers other verbs
---
duration_ms: 196.138967
type: 'test'
...
# Subtest: row 281 T11 (C1): a fire's job completes after the chief's run ends and processing halts
ok 19 - row 281 T11 (C1): a fire's job completes after the chief's run ends and processing halts
---
duration_ms: 81.192633
type: 'test'
...
# Subtest: row 281 T12 (C1, N7): a step B refusal in the job is fire.failed, and the repeat runs B and C synchronously
ok 20 - row 281 T12 (C1, N7): a step B refusal in the job is fire.failed, and the repeat runs B and C synchronously
---
duration_ms: 76.945309
type: 'test'
...
# Subtest: row 281 T13 (N4): a restart records each held job interrupted once, with one message each; an ended job gets none
ok 21 - row 281 T13 (N4): a restart records each held job interrupted once, with one message each; an ended job gets none
---
duration_ms: 129.403455
type: 'test'
...
# Subtest: row 281 T14 (N1, sage-2653): a host removed under an undecided decision stops the fire on host-unknown; the human's no closes it, and the repeat fire has no job
ok 22 - row 281 T14 (N1, sage-2653): a host removed under an undecided decision stops the fire on host-unknown; the human's no closes it, and the repeat fire has no job
---
duration_ms: 61.78992
type: 'test'
...
1..22
# tests 22
# suites 0
# pass 22
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3217.339801
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/gitea-grant.test.mjs"]
@@ -0,0 +1,304 @@
TAP version 13
# Subtest: versionAtLeast compares numbers and refuses a prerelease of 1.27.0
ok 1 - versionAtLeast compares numbers and refuses a prerelease of 1.27.0
---
duration_ms: 1.237036
type: 'test'
...
# Subtest: X-G1: a raise that fails a check refuses and stores nothing
ok 2 - X-G1: a raise that fails a check refuses and stores nothing
---
duration_ms: 62.068324
type: 'test'
...
# Subtest: X-G1: a creative role, a role without identity and a missing or due slot refuse at raise
ok 3 - X-G1: a creative role, a role without identity and a missing or due slot refuse at raise
---
duration_ms: 180.218463
type: 'test'
...
# Subtest: X-G2: admin set refuses each failed check and writes nothing, then writes the slot once
ok 4 - X-G2: admin set refuses each failed check and writes nothing, then writes the slot once
---
duration_ms: 143.52952
type: 'test'
...
# Subtest: X-G3 to X-G8: an approve makes the user, mints the token, forks, checks reach and writes the file, record and grant.applied
ok 5 - X-G3 to X-G8: an approve makes the user, mints the token, forks, checks reach and writes the file, record and grant.applied
---
duration_ms: 102.221906
type: 'test'
...
# Subtest: X-G4: a user this stack did not make, an admin, a disabled user and a remade user each refuse
ok 6 - X-G4: a user this stack did not make, an admin, a disabled user and a remade user each refuse
---
duration_ms: 306.504597
type: 'test'
...
# Subtest: X-G6 and X-G8: the user and mint steps are written before their calls, and each result after its call
ok 7 - X-G6 and X-G8: the user and mint steps are written before their calls, and each result after its call
---
duration_ms: 100.565961
type: 'test'
...
# Subtest: X-G4: a fork by the seat user of another repository than the project refuses fork-foreign
ok 8 - X-G4: a fork by the seat user of another repository than the project refuses fork-foreign
---
duration_ms: 79.418473
type: 'test'
...
# Subtest: X-G5: a failure after the mint deletes the token, unloads nothing it did not load and leaves no file
ok 9 - X-G5: a failure after the mint deletes the token, unloads nothing it did not load and leaves no file
---
duration_ms: 124.149748
type: 'test'
...
# Subtest: X-G5: a token delete that fails is left at Gitea, shown by status and taken by sweep
ok 10 - X-G5: a token delete that fails is left at Gitea, shown by status and taken by sweep
---
duration_ms: 128.702874
type: 'test'
...
# Subtest: X-G5: a mint that fails deletes by name, and a refusal at step 0 leaves the decision unspent
ok 11 - X-G5: a mint that fails deletes by name, and a refusal at step 0 leaves the decision unspent
---
duration_ms: 145.353601
type: 'test'
...
# Subtest: X-G5: an agent held for an unknown token is refused at step 0 with no Gitea call
ok 12 - X-G5: an agent held for an unknown token is refused at step 0 with no Gitea call
---
duration_ms: 65.829336
type: 'test'
...
# Subtest: X-G5 and X-G9 (step 7): a rotation whose old-token delete fails stays applied with the old id left
ok 13 - X-G5 and X-G9 (step 7): a rotation whose old-token delete fails stays applied with the old id left
---
duration_ms: 170.790626
type: 'test'
...
# Subtest: X-G10: in a rotation the store file holds the new token before the old one is deleted
ok 14 - X-G10: in a rotation the store file holds the new token before the old one is deleted
---
duration_ms: 145.852525
type: 'test'
...
# Subtest: X-G6: a rotation cut before the rename settles back at once, and the old token stays live
ok 15 - X-G6: a rotation cut before the rename settles back at once, and the old token stays live
---
duration_ms: 167.483708
type: 'test'
...
# Subtest: X-G6: a rotation whose step 8 write fails is settle-pending, and a restart settles it forward
ok 16 - X-G6: a rotation whose step 8 write fails is settle-pending, and a restart settles it forward
---
duration_ms: 178.569723
type: 'test'
...
# Subtest: X-G6: a restart settles an open rotation back when the file still holds the old token
ok 17 - X-G6: a restart settles an open rotation back when the file still holds the old token
---
duration_ms: 134.9967
type: 'test'
...
# Subtest: X-G6: a restart settles an open rotation forward when the file holds the new token
ok 18 - X-G6: a restart settles an open rotation forward when the file holds the new token
---
duration_ms: 113.009774
type: 'test'
...
# Subtest: X-G6: a 401 on the file token loses the grant: both tokens go, the record goes and memory unloads
ok 19 - X-G6: a 401 on the file token loses the grant: both tokens go, the record goes and memory unloads
---
duration_ms: 136.104972
type: 'test'
...
# Subtest: X-G6: a 403, 404, 500, a hang and a dropped socket each leave the rotation settle-pending with nothing deleted
ok 20 - X-G6: a 403, 404, 500, a hang and a dropped socket each leave the rotation settle-pending with nothing deleted
---
duration_ms: 996.868783
type: 'test'
...
# Subtest: X-G6: a file token no grant minted is held; the next restart says so again; a revoke clears it and takes both ids
ok 21 - X-G6: a file token no grant minted is held; the next restart says so again; a revoke clears it and takes both ids
---
duration_ms: 155.766188
type: 'test'
...
# Subtest: N9: a revoke of an open rotation, then a restart: no settle, no Gitea call and no message
ok 22 - N9: a revoke of an open rotation, then a restart: no settle, no Gitea call and no message
---
duration_ms: 113.207925
type: 'test'
...
# Subtest: N9: a 404 on a delete by id counts as done
ok 23 - N9: a 404 on a delete by id counts as done
---
duration_ms: 128.801734
type: 'test'
...
# Subtest: X-G6: a restart undoes each step a killed child left, and spends an approved unspent decision
ok 24 - X-G6: a restart undoes each step a killed child left, and spends an approved unspent decision
---
duration_ms: 416.149926
type: 'test'
...
# Subtest: X-G6: a restart with no admin slot leaves the user an orphan and the token left
ok 25 - X-G6: a restart with no admin slot leaves the user an orphan and the token left
---
duration_ms: 53.694027
type: 'test'
...
# Subtest: X-G7: a change to the definition, identity, publish remotes or admin slot after the raise ends decision-mismatch
ok 26 - X-G7: a change to the definition, identity, publish remotes or admin slot after the raise ends decision-mismatch
---
duration_ms: 140.801435
type: 'test'
...
# Subtest: X-G7 and X-G9: an admin rotate voids open decisions, and rotate --finish deletes what was left
ok 27 - X-G7 and X-G9: an admin rotate voids open decisions, and rotate --finish deletes what was left
---
duration_ms: 123.822535
type: 'test'
...
# Subtest: X-G9: a rotate whose name is taken refuses and writes nothing; remove takes the slot away
ok 28 - X-G9: a rotate whose name is taken refuses and writes nothing; remove takes the slot away
---
duration_ms: 73.422448
type: 'test'
...
# Subtest: X-G9: a slot past its rotate-by date refuses a run at step 0, leaving the decision unspent
ok 29 - X-G9: a slot past its rotate-by date refuses a run at step 0, leaving the decision unspent
---
duration_ms: 50.180389
type: 'test'
...
# Subtest: X-G11: run refuses every caller but the human, an unapproved, a spent and a busy decision
ok 30 - X-G11: run refuses every caller but the human, an unapproved, a spent and a busy decision
---
duration_ms: 105.874572
type: 'test'
...
# Subtest: kill switch (plan :16): while halted the chief still reads grants.status, and an agent grants.revoke refuses
ok 31 - kill switch (plan :16): while halted the chief still reads grants.status, and an agent grants.revoke refuses
---
duration_ms: 106.333602
type: 'test'
...
# Subtest: X-G11: a revoke while the executor runs aborts it and the grant ends revoked
ok 32 - X-G11: a revoke while the executor runs aborts it and the grant ends revoked
---
duration_ms: 110.333063
type: 'test'
...
# Subtest: X-G11: a revoke unloads memory and removes the file before its Gitea delete
ok 33 - X-G11: a revoke unloads memory and removes the file before its Gitea delete
---
duration_ms: 132.61075
type: 'test'
...
# Subtest: X-G11: a revoke during a rotation step 7 ends it revoked, and step 8 writes no record back
ok 34 - X-G11: a revoke during a rotation step 7 ends it revoked, and step 8 writes no record back
---
duration_ms: 217.837803
type: 'test'
...
# Subtest: X-G11: a revoke while a sweep settles a rotation, forward or back, ends it revoked with no record
ok 35 - X-G11: a revoke while a sweep settles a rotation, forward or back, ends it revoked with no record
---
duration_ms: 373.129907
type: 'test'
...
# Subtest: X-G11: a revoke during a settle whoami that finds a foreign token ends it revoked, not held
ok 36 - X-G11: a revoke during a settle whoami that finds a foreign token ends it revoked, not held
---
duration_ms: 159.428511
type: 'test'
...
# Subtest: X-G11: a revoke during a settle whoami that gets a 401 ends it revoked, not lost
ok 37 - X-G11: a revoke during a settle whoami that gets a 401 ends it revoked, not lost
---
duration_ms: 190.121277
type: 'test'
...
# Subtest: X-G12: a token that reaches wider than its forks fails with the repository named
ok 38 - X-G12: a token that reaches wider than its forks fails with the repository named
---
duration_ms: 422.103379
type: 'test'
...
# Subtest: X-G12: reach is paged by X-Total-Count and a count that does not add up refuses
ok 39 - X-G12: reach is paged by X-Total-Count and a count that does not add up refuses
---
duration_ms: 268.091756
type: 'test'
...
# Subtest: X-G13: an agent cannot record a grant event, and the trigger refuses one from any writer but the grant writer
ok 40 - X-G13: an agent cannot record a grant event, and the trigger refuses one from any writer but the grant writer
---
duration_ms: 41.808143
type: 'test'
...
# Subtest: X-G14: credentials delete fires the user: tokens go, login is prohibited, and grant.revoke.closed records it
ok 41 - X-G14: credentials delete fires the user: tokens go, login is prohibited, and grant.revoke.closed records it
---
duration_ms: 293.964549
type: 'test'
...
# Subtest: X-G14: a fire whose token delete or login PATCH fails lands it in serviceLeft
ok 42 - X-G14: a fire whose token delete or login PATCH fails lands it in serviceLeft
---
duration_ms: 155.089131
type: 'test'
...
# Subtest: X-G14: a fire whose user is gone or remade skips the fire steps and says why
ok 43 - X-G14: a fire whose user is gone or remade skips the fire steps and says why
---
duration_ms: 259.152973
type: 'test'
...
# Subtest: X-G14: a sweep retries a fire only for the user it fired: a remade or gone user is skipped and named
ok 44 - X-G14: a sweep retries a fire only for the user it fired: a remade or gone user is skipped and named
---
duration_ms: 347.428274
type: 'test'
...
# Subtest: X-G14: a revoke Gitea cannot reach stays open, and a restart closes it
ok 45 - X-G14: a revoke Gitea cannot reach stays open, and a restart closes it
---
duration_ms: 116.580427
type: 'test'
...
# Subtest: row 281 T8: a tester grants.revoke refuses tester-dev-only once bus.tester is off; the human revoke keeps its records and starts no job
ok 46 - row 281 T8: a tester grants.revoke refuses tester-dev-only once bus.tester is off; the human revoke keeps its records and starts no job
---
duration_ms: 132.268866
type: 'test'
...
# Subtest: X-G15: look-alike commit steps outside the grant writer are ignored at start, by revoke and by status
ok 47 - X-G15: look-alike commit steps outside the grant writer are ignored at start, by revoke and by status
---
duration_ms: 127.609667
type: 'test'
...
# Subtest: X-G15: a look-alike spend under another kind with the grant writer pair is not an open grant
ok 48 - X-G15: a look-alike spend under another kind with the grant writer pair is not an open grant
---
duration_ms: 43.046865
type: 'test'
...
# Subtest: status lists the slot, users, grants and nothing secret, and every grants verb needs service gitea
ok 49 - status lists the slot, users, grants and nothing secret, and every grants verb needs service gitea
---
duration_ms: 109.158689
type: 'test'
...
1..49
# tests 49
# suites 0
# pass 49
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 8542.307737
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/gitea-migration.test.mjs"]
@@ -0,0 +1,40 @@
TAP version 13
# Subtest: 3j copy migrates to 3k: every row kept, and sqlite_master gains only the two tables and their keys
ok 1 - 3j copy migrates to 3k: every row kept, and sqlite_master gains only the two tables and their keys
---
duration_ms: 81.838559
type: 'test'
...
# Subtest: a 3j→3k step that fails partway leaves the store at 3j with every row and the schema intact
ok 2 - a 3j→3k step that fails partway leaves the store at 3j with every row and the schema intact
---
duration_ms: 89.482209
type: 'test'
...
# Subtest: the 3j engine refuses a migrated store, migrating or not, and leaves it as it was
ok 3 - the 3j engine refuses a migrated store, migrating or not, and leaves it as it was
---
duration_ms: 82.697499
type: 'test'
...
# Subtest: gitea_users: one user per business and agent, an id above 0, a 16-hex nonce and a real decision
ok 4 - gitea_users: one user per business and agent, an id above 0, a 16-hex nonce and a real decision
---
duration_ms: 10.237684
type: 'test'
...
# Subtest: gitea_grants: one grant per agent, a projects array, a token id above 0, and only for a recorded user
ok 5 - gitea_grants: one grant per agent, a projects array, a token id above 0, and only for a recorded user
---
duration_ms: 11.403049
type: 'test'
...
1..5
# tests 5
# suites 0
# pass 5
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 356.386753
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/grant-executor.test.mjs"]
@@ -0,0 +1,262 @@
TAP version 13
# Subtest: row 280: an occupied TCP port is attempted, refused, and retried with our sshd
ok 1 - row 280: an occupied TCP port is attempted, refused, and retried with our sshd
---
duration_ms: 83.960769
type: 'test'
...
# Subtest: row 280: every injected picker sample is unprivileged and outside the ephemeral range
ok 2 - row 280: every injected picker sample is unprivileged and outside the ephemeral range
---
duration_ms: 0.361575
type: 'test'
...
# Subtest: G7: an Approve installs the tagged line, logs in with the new key, and writes the key file, record and grant.applied
ok 3 - G7: an Approve installs the tagged line, logs in with the new key, and writes the key file, record and grant.applied
---
duration_ms: 657.627333
type: 'test'
...
# Subtest: G7: a commands change on a live grant updates the record in one transaction and keeps the key and line
ok 4 - G7: a commands change on a live grant updates the record in one transaction and keeps the key and line
---
duration_ms: 531.338182
type: 'test'
...
# Subtest: G8: a failure at install or verify removes the line and leaves no record, key file or reference
ok 5 - G8: a failure at install or verify removes the line and leaves no record, key file or reference
---
duration_ms: 1517.262253
type: 'test'
...
# Subtest: G8: a failed remove adds hostLineLeft and tells the human to sweep
ok 6 - G8: a failed remove adds hostLineLeft and tells the human to sweep
---
duration_ms: 651.737964
type: 'test'
...
# Subtest: G8: a failure in step 5 before commit unlinks the key file, drops the reference and removes the line
ok 7 - G8: a failure in step 5 before commit unlinks the key file, drops the reference and removes the line
---
duration_ms: 649.340641
type: 'test'
...
# Subtest: G8: a store fault in the commit transaction ends host-failed with no record, key file, reference or line
ok 8 - G8: a store fault in the commit transaction ends host-failed with no record, key file, reference or line
---
duration_ms: 671.126429
type: 'test'
...
# Subtest: G8: a failed step 1 check spends the decision and runs nothing remote
ok 9 - G8: a failed step 1 check spends the decision and runs nothing remote
---
duration_ms: 81.673932
type: 'test'
...
# Subtest: G9: a registry, definition or commands change between raise and Approve ends decision-mismatch before any remote step
ok 10 - G9: a registry, definition or commands change between raise and Approve ends decision-mismatch before any remote step
---
duration_ms: 521.508803
type: 'test'
...
# Subtest: G9: an agent no longer a role or no longer declaring host ends with its code, spent
ok 11 - G9: an agent no longer a role or no longer declaring host ends with its code, spent
---
duration_ms: 68.84932
type: 'test'
...
# Subtest: G10: a second start refuses decision-consumed, and an unresolved or agent-resolved decision not-authorized, writing nothing
ok 12 - G10: a second start refuses decision-consumed, and an unresolved or agent-resolved decision not-authorized, writing nothing
---
duration_ms: 513.85868
type: 'test'
...
# Subtest: G15: no event, message or decision holds the private key
ok 13 - G15: no event, message or decision holds the private key
---
duration_ms: 490.733182
type: 'test'
...
# Subtest: G23: a revoke during install ends grant.failed revoked with no key file, no grant and no line
ok 14 - G23: a revoke during install ends grant.failed revoked with no key file, no grant and no line
---
duration_ms: 525.579468
type: 'test'
...
# Subtest: G23 (row 249): an add that writes after an abort's remove leaves hostLineLeft until the sweep
ok 15 - G23 (row 249): an add that writes after an abort's remove leaves hostLineLeft until the sweep
---
duration_ms: 794.760968
type: 'test'
...
# Subtest: G23 (row 249): an add that writes after a timed-out install's remove leaves hostLineLeft until the sweep
ok 16 - G23 (row 249): an add that writes after a timed-out install's remove leaves hostLineLeft until the sweep
---
duration_ms: 855.43114
type: 'test'
...
# Subtest: G23: a revoke recorded after the raise and before the start ends step 1 revoked, and a held slot ends host-busy
ok 17 - G23: a revoke recorded after the raise and before the start ends step 1 revoked, and a held slot ends host-busy
---
duration_ms: 512.62141
type: 'test'
...
# Subtest: G24: names at 64 characters with . and _ give distinct tags of the fixed length
ok 18 - G24: names at 64 characters with . and _ give distinct tags of the fixed length
---
duration_ms: 0.409892
type: 'test'
...
# Subtest: G11: a restart after install removes the line, then ends interrupted with the tag, holding the slot until then
ok 19 - G11: a restart after install removes the line, then ends interrupted with the tag, holding the slot until then
---
duration_ms: 216.10008
type: 'test'
...
# Subtest: G11: a restart after a new key's commit, with the key file written, ends with no key file, record, reference or line
ok 20 - G11: a restart after a new key's commit, with the key file written, ends with no key file, record, reference or line
---
duration_ms: 220.396391
type: 'test'
...
# Subtest: G11: a restart after a commands change's commit leaves the record as it was and asks nothing of the host
ok 21 - G11: a restart after a commands change's commit leaves the record as it was and asks nothing of the host
---
duration_ms: 560.5996
type: 'test'
...
# Subtest: G11 (B2): a restart before step 1, spent or not yet spent, ends interrupted and nothing runs later
ok 22 - G11 (B2): a restart before step 1, spent or not yet spent, ends interrupted and nothing runs later
---
duration_ms: 68.008875
type: 'test'
...
# Subtest: G11: a remote undo that fails ends interrupted with hostLineLeft and the sweep hint
ok 23 - G11: a remote undo that fails ends interrupted with hostLineLeft and the sweep hint
---
duration_ms: 294.19336
type: 'test'
...
# Subtest: G11: a restart leaves a finished grant alone, and the reconcile adds nothing for it
ok 24 - G11: a restart leaves a finished grant alone, and the reconcile adds nothing for it
---
duration_ms: 492.228554
type: 'test'
...
# Subtest: N1 (G27): the start sweep unlinks host.<id> files with no record in loaded businesses only, and refuses a store dir that is not private
ok 25 - N1 (G27): the start sweep unlinks host.<id> files with no record in loaded businesses only, and refuses a store dir that is not private
---
duration_ms: 6.558346
type: 'test'
...
# Subtest: G12: the human's hosts.revoke deletes the record, the key file, the reference and the line, with a closed marker
ok 26 - G12: the human's hosts.revoke deletes the record, the key file, the reference and the line, with a closed marker
---
duration_ms: 637.696071
type: 'test'
...
# Subtest: G12 (N4): a revoke with no record still removes the computed tag's line, with granted false; bad args refuse
ok 27 - G12 (N4): a revoke with no record still removes the computed tag's line, with granted false; bad args refuse
---
duration_ms: 217.392809
type: 'test'
...
# Subtest: G13: a revoke during install aborts the executor, which ends revoked, and the line goes
ok 28 - G13: a revoke during install aborts the executor, which ends revoked, and the line goes
---
duration_ms: 560.229976
type: 'test'
...
# Subtest: G26: the human, the assistant and the tester revoke; the chief and a pm refuse; sweep is the human's or the tester's
ok 29 - G26: the human, the assistant and the tester revoke; the chief and a pm refuse; sweep is the human's or the tester's
---
duration_ms: 508.929241
type: 'test'
...
# Subtest: row 281 T8: a tester hosts.revoke refuses tester-dev-only once bus.tester is off, and a human revoke writes no job records
ok 30 - row 281 T8: a tester hosts.revoke refuses tester-dev-only once bus.tester is off, and a human revoke writes no job records
---
duration_ms: 641.807226
type: 'test'
...
# Subtest: G27: a restart after step 1 sweeps the key file and runs step 3 once the bus is up; status shows the revoke until then
ok 31 - G27: a restart after step 1 sweeps the key file and runs step 3 once the bus is up; status shows the revoke until then
---
duration_ms: 659.52398
type: 'test'
...
# Subtest: G27: after step 2 with the host down, the restart closes the marker with hostLineLeft; a marker without a revoke id is not reopened
ok 32 - G27: after step 2 with the host down, the restart closes the marker with hostLineLeft; a marker without a revoke id is not reopened
---
duration_ms: 936.59984
type: 'test'
...
# Subtest: G27: a key file a revoke could not unlink is reported left and goes at the next start
ok 33 - G27: a key file a revoke could not unlink is reported left and goes at the next start
---
duration_ms: 632.639641
type: 'test'
...
# Subtest: G28: a commands change, then a revoke, then a restart leave no record, key, reference or line
ok 34 - G28: a commands change, then a revoke, then a restart leave no record, key, reference or line
---
duration_ms: 653.467997
type: 'test'
...
# Subtest: G24 (B4): hosts.sweep removes only this business's recorded tags no live grant holds, and records what it left
ok 35 - G24 (B4): hosts.sweep removes only this business's recorded tags no live grant holds, and records what it left
---
duration_ms: 962.241764
type: 'test'
...
# Subtest: G12: the local steps finish before the host step, so a host that hangs leaves the agent no access
ok 36 - G12: the local steps finish before the host step, so a host that hangs leaves the agent no access
---
duration_ms: 714.365535
type: 'test'
...
# Subtest: G23 (X5): a revoke right after the spend reaches the executor's claim, so the grant ends revoked
ok 37 - G23 (X5): a revoke right after the spend reaches the executor's claim, so the grant ends revoked
---
duration_ms: 207.206499
type: 'test'
...
# Subtest: G23 (X5): a revoke that lands as verify returns ends revoked with no record, key file or line
ok 38 - G23 (X5): a revoke that lands as verify returns ends revoked with no record, key file or line
---
duration_ms: 664.698225
type: 'test'
...
# Subtest: G13: a revoke whose host remove fails still drops the record and key, and reports the line left for a sweep
ok 39 - G13: a revoke whose host remove fails still drops the record and key, and reports the line left for a sweep
---
duration_ms: 653.766611
type: 'test'
...
# Subtest: G22: enroll, check, grant, host.run, a commands change the next host.run uses, and a revoke that kills a run in flight
ok 40 - G22: enroll, check, grant, host.run, a commands change the next host.run uses, and a revoke that kills a run in flight
---
duration_ms: 1172.54697
type: 'test'
...
# Subtest: mos-1163: a grant whose agent became a creative role after the raise ends host-creative-role at step 1, spent, with nothing remote
ok 41 - mos-1163: a grant whose agent became a creative role after the raise ends host-creative-role at step 1, spent, with nothing remote
---
duration_ms: 61.460666
type: 'test'
...
# Subtest: sage-1908: once the agent of an applied grant is a creative role, host.run refuses host-creative-role, runs nothing remote and keeps the record
ok 42 - sage-1908: once the agent of an applied grant is a creative role, host.run refuses host-creative-role, runs nothing remote and keeps the record
---
duration_ms: 510.214713
type: 'test'
...
1..42
# tests 42
# suites 0
# pass 42
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 21467.137575
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/grant-migration.test.mjs"]
@@ -0,0 +1,46 @@
TAP version 13
# Subtest: 3i copy migrates to 3j: every row kept, and sqlite_master gains only the two tables, their keys and the guard
ok 1 - 3i copy migrates to 3j: every row kept, and sqlite_master gains only the two tables, their keys and the guard
---
duration_ms: 73.964009
type: 'test'
...
# Subtest: a 3i→3j step that fails partway leaves the store at 3i with every row and the schema intact
ok 2 - a 3i→3j step that fails partway leaves the store at 3i with every row and the schema intact
---
duration_ms: 84.711984
type: 'test'
...
# Subtest: the 3i engine refuses a migrated store, migrating or not, and leaves it as it was
ok 3 - the 3i engine refuses a migrated store, migrating or not, and leaves it as it was
---
duration_ms: 82.795225
type: 'test'
...
# Subtest: A22b, sage-1703: a session-written grant.* row from before the step survives it, and the grant readers ignore it
ok 4 - A22b, sage-1703: a session-written grant.* row from before the step survives it, and the grant readers ignore it
---
duration_ms: 69.813637
type: 'test'
...
# Subtest: the guard: a grant.* action or operation on action.allowed needs the (NULL, grant) actor
ok 5 - the guard: a grant.* action or operation on action.allowed needs the (NULL, grant) actor
---
duration_ms: 13.398811
type: 'test'
...
# Subtest: hosts: one record per business and host, a ready host has its installer and check, grants need the host
ok 6 - hosts: one record per business and host, a ready host has its installer and check, grants need the host
---
duration_ms: 10.836824
type: 'test'
...
1..6
# tests 6
# suites 0
# pass 6
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 412.883239
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/lifecycle-revoke.test.mjs"]
@@ -0,0 +1,59 @@
TAP version 13
# organization: {"event":"reload-needs-restart","business":"demo"}
# Subtest: T20 fire: a revoke that fails stops the fire with the file unchanged; one that succeeds revokes, keeps the directory and names the services outside the store
ok 1 - T20 fire: a revoke that fails stops the fire with the file unchanged; one that succeeds revokes, keeps the directory and names the services outside the store
---
duration_ms: 91.565281
type: 'test'
...
# Subtest: T20 fire: an instance already delisted still has its tokens revoked and the file is left alone
ok 2 - T20 fire: an instance already delisted still has its tokens revoked and the file is left alone
---
duration_ms: 49.803348
type: 'test'
...
# Subtest: T20 fire: with no entry in the running bus, a token on disk refuses and an empty store goes on
ok 3 - T20 fire: with no entry in the running bus, a token on disk refuses and an empty store goes on
---
duration_ms: 52.945145
type: 'test'
...
# Subtest: T20 delete: a revoke that fails keeps the file; one that succeeds clears the store, deletes, and names the tracker bot
ok 4 - T20 delete: a revoke that fails keeps the file; one that succeeds clears the store, deletes, and names the tracker bot
---
duration_ms: 67.222042
type: 'test'
...
# Subtest: T20 delete: with no entry in the running bus, a token file is cleared and the delete goes on; a file reference refuses
ok 5 - T20 delete: with no entry in the running bus, a token file is cleared and the delete goes on; a file reference refuses
---
duration_ms: 55.353852
type: 'test'
...
# Subtest: T21 delete: a write between the raise and the take makes the delete refuse revision-conflict before it revokes anything
ok 6 - T21 delete: a write between the raise and the take makes the delete refuse revision-conflict before it revokes anything
---
duration_ms: 55.857643
type: 'test'
...
# Subtest: row 281 T1 fire: a host.<id> or granted gitea file in the store refuses step B credential-revoke-failed, file unchanged
ok 7 - row 281 T1 fire: a host.<id> or granted gitea file in the store refuses step B credential-revoke-failed, file unchanged
---
duration_ms: 52.390335
type: 'test'
...
# Subtest: row 281 T1 start: a host grant record whose key file is gone starts and reads not-issued
ok 8 - row 281 T1 start: a host grant record whose key file is gone starts and reads not-issued
---
duration_ms: 49.199992
type: 'test'
...
1..8
# tests 8
# suites 0
# pass 8
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 581.917366
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/message-filter.test.mjs"]
@@ -0,0 +1,46 @@
TAP version 13
# Subtest: trail on a hidden message id answers exactly as on an unknown id, for the owner, a reader and the tester
ok 1 - trail on a hidden message id answers exactly as on an unknown id, for the owner, a reader and the tester
---
duration_ms: 23.582065
type: 'test'
...
# Subtest: replies on a hidden message id answers exactly as on an unknown id, for the owner, a reader and the tester
ok 2 - replies on a hidden message id answers exactly as on an unknown id, for the owner, a reader and the tester
---
duration_ms: 23.016106
type: 'test'
...
# Subtest: trail on a decision keeps the decision and drops the user thread messages, their deliveries and their events
ok 3 - trail on a decision keeps the decision and drops the user thread messages, their deliveries and their events
---
duration_ms: 27.394648
type: 'test'
...
# Subtest: replies leaves out other users thread messages and still fills a page
ok 4 - replies leaves out other users thread messages and still fills a page
---
duration_ms: 168.512501
type: 'test'
...
# Subtest: messages in the business human and tester threads are not hidden (row 177 unchanged)
ok 5 - messages in the business human and tester threads are not hidden (row 177 unchanged)
---
duration_ms: 31.043561
type: 'test'
...
# Subtest: governance pin: the owner sees decisions, inbox entries, claims, tasks and project files, but not the user messages
ok 6 - governance pin: the owner sees decisions, inbox entries, claims, tasks and project files, but not the user messages
---
duration_ms: 97.561497
type: 'test'
...
1..6
# tests 6
# suites 0
# pass 6
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 441.717371
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/name-migration.test.mjs"]
@@ -0,0 +1,16 @@
TAP version 13
# Subtest: 3f copy migrates to 3g preserving every old column/row, with an empty instance_names and null to_name
ok 1 - 3f copy migrates to 3g preserving every old column/row, with an empty instance_names and null to_name
---
duration_ms: 83.476176
type: 'test'
...
1..1
# tests 1
# suites 0
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 148.867035
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/schema.test.mjs"]
@@ -0,0 +1,16 @@
TAP version 13
# Subtest: v3b prototype refusals, views and append-only mutations
ok 1 - v3b prototype refusals, views and append-only mutations
---
duration_ms: 81.916017
type: 'test'
...
1..1
# tests 1
# suites 0
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 127.351705
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/sessions.test.mjs"]
@@ -0,0 +1,52 @@
TAP version 13
# Subtest: T1 REQ-ROLE-2: two sessions of one thread keep their own history, delivery and replies
ok 1 - T1 REQ-ROLE-2: two sessions of one thread keep their own history, delivery and replies
---
duration_ms: 40.706821
type: 'test'
...
# Subtest: T2 REQ-ROLE-2: one holder per session, generations count its claims, and a sibling session's message never reaches the other holder
ok 2 - T2 REQ-ROLE-2: one holder per session, generations count its claims, and a sibling session's message never reaches the other holder
---
duration_ms: 31.91851
type: 'test'
...
# Subtest: T2 sage-2257: a released or revoked run's retired generation refuses its approval, delivery and read, and writes nothing
ok 3 - T2 sage-2257: a released or revoked run's retired generation refuses its approval, delivery and read, and writes nothing
---
duration_ms: 42.685057
type: 'test'
...
# Subtest: session.create is idempotent on its op, refuses a reused op or a taken name, and reaches only the owner's threads
ok 4 - session.create is idempotent on its op, refuses a reused op or a taken name, and reaches only the owner's threads
---
duration_ms: 29.35201
type: 'test'
...
# Subtest: the 3l triggers keep sessions in their thread and session ids apart from thread ids
ok 5 - the 3l triggers keep sessions in their thread and session ids apart from thread ids
---
duration_ms: 61.867285
type: 'test'
...
# Subtest: T7: a 3k store migrates to 3l, each thread's default session has the thread's id, and old rows keep their seqs
ok 6 - T7: a 3k store migrates to 3l, each thread's default session has the thread's id, and old rows keep their seqs
---
duration_ms: 91.694237
type: 'test'
...
# Subtest: T7 D9: the 3k engine refuses a 3l store, migrating or not, and leaves it as it was
ok 7 - T7 D9: the 3k engine refuses a 3l store, migrating or not, and leaves it as it was
---
duration_ms: 148.41378
type: 'test'
...
1..7
# tests 7
# suites 0
# pass 7
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 518.953205
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/spec-migration.test.mjs"]
@@ -0,0 +1,16 @@
TAP version 13
# Subtest: 3e copy migrates through 3f to 3g preserving every old column/row and adding null spec citations
ok 1 - 3e copy migrates through 3f to 3g preserving every old column/row and adding null spec citations
---
duration_ms: 85.093606
type: 'test'
...
1..1
# tests 1
# suites 0
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 149.197988
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/tester-writes.test.mjs"]
@@ -0,0 +1,63 @@
TAP version 13
# organization: {"event":"reload-needs-restart","business":"demo"}
# organization: {"event":"reload-needs-restart","business":"demo"}
# organization: {"event":"reload-needs-restart","business":"demo"}
# organization: {"event":"reload-needs-restart","business":"demo"}
# organization: {"event":"reload-needs-restart","business":"demo"}
# Subtest: row 175: TESTER_VERBS and the organization branch tester set are pinned
ok 1 - row 175: TESTER_VERBS and the organization branch tester set are pinned
---
duration_ms: 1.224975
type: 'test'
...
# Subtest: row 175: each of the six reads as the tester deep-equals the human read
ok 2 - row 175: each of the six reads as the tester deep-equals the human read
---
duration_ms: 70.208706
type: 'test'
...
# Subtest: row 175: W1-W3 as the tester land with receipt actor tester; the human still logs the human
ok 3 - row 175: W1-W3 as the tester land with receipt actor tester; the human still logs the human
---
duration_ms: 71.053044
type: 'test'
...
# Subtest: row 175: W2 as the tester refuses credentials, protected definitions, human, tester and bus.tester, and changes nothing
ok 4 - row 175: W2 as the tester refuses credentials, protected definitions, human, tester and bus.tester, and changes nothing
---
duration_ms: 70.377914
type: 'test'
...
# Subtest: row 175: the human-only actions refuse a tester tester-refused, and the file and store stay as they were
ok 5 - row 175: the human-only actions refuse a tester tester-refused, and the file and store stay as they were
---
duration_ms: 64.353653
type: 'test'
...
# Subtest: row 175: W4 as the tester writes by tester and keeps every name check
ok 6 - row 175: W4 as the tester writes by tester and keeps every name check
---
duration_ms: 17.315774
type: 'test'
...
# Subtest: row 175: W6 as the tester records created_by tester; the human records the human
ok 7 - row 175: W6 as the tester records created_by tester; the human records the human
---
duration_ms: 12.393188
type: 'test'
...
# Subtest: row 175: with bus.tester unset or not exactly true no tester binds, so no read or write runs
ok 8 - row 175: with bus.tester unset or not exactly true no tester binds, so no read or write runs
---
duration_ms: 47.667854
type: 'test'
...
1..8
# tests 8
# suites 0
# pass 8
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 472.183847
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/thread-claims.test.mjs"]
@@ -0,0 +1,46 @@
TAP version 13
# Subtest: T1: the human and the reader see a held thread claim; agents still lists the role only
ok 1 - T1: the human and the reader see a held thread claim; agents still lists the role only
---
duration_ms: 27.73167
type: 'test'
...
# Subtest: T2: a released or revoked thread claim is not listed, though its thread has an earlier claim row
ok 2 - T2: a released or revoked thread claim is not listed, though its thread has an earlier claim row
---
duration_ms: 22.109132
type: 'test'
...
# Subtest: T3: a role session refuses human-required and the tester refuses tester-refused
ok 3 - T3: a role session refuses human-required and the tester refuses tester-refused
---
duration_ms: 20.683145
type: 'test'
...
# Subtest: T4: agents answers each session the same before and after a thread run claims
ok 4 - T4: agents answers each session the same before and after a thread run claims
---
duration_ms: 20.849476
type: 'test'
...
# Subtest: T5: the result carries neither the thread name a user wrote nor a message body
ok 5 - T5: the result carries neither the thread name a user wrote nor a message body
---
duration_ms: 21.572027
type: 'test'
...
# Subtest: T6: two held sessions of one thread list as two rows, each its session's latest claim
ok 6 - T6: two held sessions of one thread list as two rows, each its session's latest claim
---
duration_ms: 22.023845
type: 'test'
...
1..6
# tests 6
# suites 0
# pass 6
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 213.478425
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/thread-migration.test.mjs"]
@@ -0,0 +1,28 @@
TAP version 13
# Subtest: REQ-THREAD-1 REQ-ORG-2: the 3d→3e migration adds the thread tables and leaves messages from before threads as written
ok 1 - REQ-THREAD-1 REQ-ORG-2: the 3d→3e migration adds the thread tables and leaves messages from before threads as written
---
duration_ms: 93.461019
type: 'test'
...
# Subtest: REQ-THREAD-1: a 3d bus with a changed schema is refused and keeps its version and tables
ok 2 - REQ-THREAD-1: a 3d bus with a changed schema is refused and keeps its version and tables
---
duration_ms: 39.774352
type: 'test'
...
# Subtest: REQ-THREAD-1: the offline command prints the kept-message counts before the ready line
ok 3 - REQ-THREAD-1: the offline command prints the kept-message counts before the ready line
---
duration_ms: 112.069661
type: 'test'
...
1..3
# tests 3
# suites 0
# pass 3
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 313.065794
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/threads.test.mjs"]
@@ -0,0 +1,112 @@
TAP version 13
# Subtest: REQ-ROLE-2 REQ-THREAD-1: one holder per thread, through the broker and the trigger
ok 1 - REQ-ROLE-2 REQ-THREAD-1: one holder per thread, through the broker and the trigger
---
duration_ms: 35.368018
type: 'test'
...
# Subtest: REQ-ROLE-2 REQ-THREAD-1: the 3e triggers refuse writes that skip the broker
ok 2 - REQ-ROLE-2 REQ-THREAD-1: the 3e triggers refuse writes that skip the broker
---
duration_ms: 62.531658
type: 'test'
...
# Subtest: REQ-MSG-1: a message to or from the assistant names its thread, or is refused
ok 3 - REQ-MSG-1: a message to or from the assistant names its thread, or is refused
---
duration_ms: 30.552241
type: 'test'
...
# Subtest: REQ-MSG-1: the chief of staff's reply comes back to the thread that sent the work
ok 4 - REQ-MSG-1: the chief of staff's reply comes back to the thread that sent the work
---
duration_ms: 565.000553
type: 'test'
...
# Subtest: REQ-MSG-1: a reply can't carry one thread instance's thread to another thread instance
ok 5 - REQ-MSG-1: a reply can't carry one thread instance's thread to another thread instance
---
duration_ms: 21.500353
type: 'test'
...
# Subtest: REQ-THREAD-1 REQ-USER-2: one thread's messages never reach another thread's holder
ok 6 - REQ-THREAD-1 REQ-USER-2: one thread's messages never reach another thread's holder
---
duration_ms: 26.695901
type: 'test'
...
# Subtest: REQ-LAUNCH-1: a message to a thread with no holder waits, and the next holder gets it
ok 7 - REQ-LAUNCH-1: a message to a thread with no holder waits, and the next holder gets it
---
duration_ms: 27.432301
type: 'test'
...
# Subtest: REQ-THREAD-2 REQ-LAUNCH-1: threadIdle releases only a thread with nothing waiting, and only for its holder
ok 8 - REQ-THREAD-2 REQ-LAUNCH-1: threadIdle releases only a thread with nothing waiting, and only for its holder
---
duration_ms: 31.260651
type: 'test'
...
# Subtest: REQ-THREAD-2 REQ-LAUNCH-1: a message delivered to a run that ended unread doesn't hold up the next holder
ok 9 - REQ-THREAD-2 REQ-LAUNCH-1: a message delivered to a run that ended unread doesn't hold up the next holder
---
duration_ms: 26.185036
type: 'test'
...
# Subtest: REQ-ROLE-2 REQ-THREAD-1 Q169: a role.revoke the human approved ends every thread run of the assistant
ok 10 - REQ-ROLE-2 REQ-THREAD-1 Q169: a role.revoke the human approved ends every thread run of the assistant
---
duration_ms: 24.095062
type: 'test'
...
# Subtest: Q169 REQ-USER-2: assistant.stop ends the human's own assistant thread runs, and only the human's
ok 11 - Q169 REQ-USER-2: assistant.stop ends the human's own assistant thread runs, and only the human's
---
duration_ms: 36.251131
type: 'test'
...
# Subtest: REQ-USER-2: the human verbs refuse another owner's thread
ok 12 - REQ-USER-2: the human verbs refuse another owner's thread
---
duration_ms: 25.603294
type: 'test'
...
# Subtest: REQ-THREAD-1: thread.create refuses when the business has no thread instance or more than one
ok 13 - REQ-THREAD-1: thread.create refuses when the business has no thread instance or more than one
---
duration_ms: 20.346426
type: 'test'
...
# Subtest: REQ-ORG-2: projects and threads are named once, and the repo names a business project
ok 14 - REQ-ORG-2: projects and threads are named once, and the repo names a business project
---
duration_ms: 25.607994
type: 'test'
...
# Subtest: REQ-THREAD-2: thread.messages returns the thread's history in pages and writes nothing
ok 15 - REQ-THREAD-2: thread.messages returns the thread's history in pages and writes nothing
---
duration_ms: 78.720869
type: 'test'
...
# Subtest: project.create refuses a repository name without its matching repo before any write
ok 16 - project.create refuses a repository name without its matching repo before any write
---
duration_ms: 14.676439
type: 'test'
...
# Subtest: project.create keeps unrelated names with and without a repository
ok 17 - project.create keeps unrelated names with and without a repository
---
duration_ms: 10.228522
type: 'test'
...
1..17
# tests 17
# suites 0
# pass 17
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 1141.505018
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/usage-migration.test.mjs"]
@@ -0,0 +1,16 @@
TAP version 13
# Subtest: REQ-LIMIT-4 3g copy migrates through 3h, 3i, 3j and 3k to 3l preserving every old column, row and sequence; new usage table is empty
ok 1 - REQ-LIMIT-4 3g copy migrates through 3h, 3i, 3j and 3k to 3l preserving every old column, row and sequence; new usage table is empty
---
duration_ms: 85.600888
type: 'test'
...
1..1
# tests 1
# suites 0
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 151.46092
@@ -0,0 +1 @@
["timeout", "-k", "10", "900", "node", "--test", "--test-reporter=tap", "packages/cli/tests/lifecycle.test.mjs"]
@@ -0,0 +1,161 @@
TAP version 13
# Subtest: row 194 T2: the human's launch runs an unlisted instance and launch.by through the pm branch, and closes with the run
ok 1 - row 194 T2: the human's launch runs an unlisted instance and launch.by through the pm branch, and closes with the run
---
duration_ms: 387.952455
type: 'test'
...
# Subtest: row 194 T2: a request past its 60 s never launches, and a refused check closes the request with its code
ok 2 - row 194 T2: a request past its 60 s never launches, and a refused check closes the request with its code
---
duration_ms: 80.244644
type: 'test'
...
# Subtest: row 194 T3: a --no-launch host closes each request launches-disabled and starts nothing
ok 3 - row 194 T3: a --no-launch host closes each request launches-disabled and starts nothing
---
duration_ms: 77.542422
type: 'test'
...
# Subtest: row 194 T3: a limit refusal closes the request with its code and the limit in the launch log
ok 4 - row 194 T3: a limit refusal closes the request with its code and the limit in the launch log
---
duration_ms: 204.384901
type: 'test'
...
# Subtest: row 194 T4: terminate revokes and cancels at the verb, then the pass signals the run, which ends once
ok 5 - row 194 T4: terminate revokes and cancels at the verb, then the pass signals the run, which ends once
---
duration_ms: 273.116636
type: 'test'
...
# Subtest: row 194 T5: regenerate ends the run in the registry and starts a new run on the same workspace
ok 6 - row 194 T5: regenerate ends the run in the registry and starts a new run on the same workspace
---
duration_ms: 472.04789
type: 'test'
...
# Subtest: row 194 T5: a run that outlasts the request's mark closes the regenerate regenerate-timeout and starts nothing
ok 7 - row 194 T5: a run that outlasts the request's mark closes the regenerate regenerate-timeout and starts nothing
---
duration_ms: 2750.446694
type: 'test'
...
# Subtest: row 194 V5: delete retires the name, renames the workspace to .retired/I-<transaction> at 0700, and a retry renames after workspace-rename-failed
ok 8 - row 194 V5: delete retires the name, renames the workspace to .retired/I-<transaction> at 0700, and a retry renames after workspace-rename-failed
---
duration_ms: 97.398807
type: 'test'
...
# Subtest: row 194 V5: a delete with no workspace commits and closes with the transaction
ok 9 - row 194 V5: a delete with no workspace commits and closes with the transaction
---
duration_ms: 85.452376
type: 'test'
...
# Subtest: row 281 T10: the delete pass closes a granted instance's first request grants-revoking and the host channel stays up
ok 10 - row 281 T10: the delete pass closes a granted instance's first request grants-revoking and the host channel stays up
---
duration_ms: 98.396833
type: 'test'
...
# Subtest: row 194 D1.1 item 5: the CLI's launch, regenerate, terminate and delete end to end through the pass, and a closed refusal exits 3 with the request id
ok 11 - row 194 D1.1 item 5: the CLI's launch, regenerate, terminate and delete end to end through the pass, and a closed refusal exits 3 with the request id
---
duration_ms: 567.881776
type: 'test'
...
# Subtest: row 194 T20: a store-only delete with a tracker bot closes naming the bot, and the CLI says to remove it in Vikunja
ok 12 - row 194 T20: a store-only delete with a tracker bot closes naming the bot, and the CLI says to remove it in Vikunja
---
duration_ms: 99.557568
type: 'test'
...
# Subtest: row 194 T2a: a launch.revoke between the request and the pass closes it launch-revoked with no process; a done that fails once leaves the request taken and the next pass starts nothing
ok 13 - row 194 T2a: a launch.revoke between the request and the pass closes it launch-revoked with no process; a done that fails once leaves the request taken and the next pass starts nothing
---
duration_ms: 216.950371
type: 'test'
...
# Subtest: row 194 T4: terminate signals a spawned run in the registry that the bus never bound, and not a run whose start time differs
ok 14 - row 194 T4: terminate signals a spawned run in the registry that the bus never bound, and not a run whose start time differs
---
duration_ms: 384.655751
type: 'test'
...
# Subtest: row 194 T9a: fire signals its bound run and a spawned but unbound registry run; a SIGTERM-ignoring runner gets SIGKILL and lifecycle.end.killed, and one whose kill fails gets lifecycle.end.alive
ok 15 - row 194 T9a: fire signals its bound run and a spawned but unbound registry run; a SIGTERM-ignoring runner gets SIGKILL and lifecycle.end.killed, and one whose kill fails gets lifecycle.end.alive
---
duration_ms: 1067.735579
type: 'test'
...
# Subtest: row 194 T9a: fire of a registry run with no runtime record reads lifecycle.end.alive with reason unknown, never killed
ok 16 - row 194 T9a: fire of a registry run with no runtime record reads lifecycle.end.alive with reason unknown, never killed
---
duration_ms: 525.631573
type: 'test'
...
# Subtest: row 194 T9a: a runner whose identity changed before the SIGTERM gets no signal, and one whose identity changed between the SIGTERM and the SIGKILL gets no SIGKILL
ok 17 - row 194 T9a: a runner whose identity changed before the SIGTERM gets no signal, and one whose identity changed between the SIGTERM and the SIGKILL gets no SIGKILL
---
duration_ms: 210.505397
type: 'test'
...
# Subtest: row 194 T9a: V3 terminate of a SIGTERM-ignoring runner sends no SIGKILL
ok 18 - row 194 T9a: V3 terminate of a SIGTERM-ignoring runner sends no SIGKILL
---
duration_ms: 982.216716
type: 'test'
...
# Subtest: row 194 T9b: a halt during a fire's stop sends no second SIGTERM, keeps the fire's deadline, writes one stop receipt with reason fire and the request, and counts the run; a fire while halted refuses
ok 19 - row 194 T9b: a halt during a fire's stop sends no second SIGTERM, keeps the fire's deadline, writes one stop receipt with reason fire and the request, and counts the run; a fire while halted refuses
---
duration_ms: 1690.42137
type: 'test'
...
# Subtest: row 194 T15: while halted the pass closes a launch and a regenerate processing-halted and runs no thread pass, terminate signals, and after a resume a launch starts
ok 20 - row 194 T15: while halted the pass closes a launch and a regenerate processing-halted and runs no thread pass, terminate signals, and after a resume a launch starts
---
duration_ms: 277.574644
type: 'test'
...
# Subtest: row 194 N6: a run spawned after a terminate's verb survives its pass, and the next terminate ends it
ok 21 - row 194 N6: a run spawned after a terminate's verb survives its pass, and the next terminate ends it
---
duration_ms: 517.235834
type: 'test'
...
# Subtest: row 194 T6: a delete leaves the run evidence bytes unchanged, and the retired name refuses a create and a launch
ok 22 - row 194 T6: a delete leaves the run evidence bytes unchanged, and the retired name refuses a create and a launch
---
duration_ms: 298.352196
type: 'test'
...
# Subtest: row 194 T11: two stack roots with the same business id; a launch, a terminate and a delete in one leave the other byte-identical
ok 23 - row 194 T11: two stack roots with the same business id; a launch, a terminate and a delete in one leave the other byte-identical
---
duration_ms: 360.459796
type: 'test'
...
# usage: {"event":"usage-unknown","business":"acme","run":"rb800d18639ac","instance":"chief","turn":"52f92469-bdcc-4062-b60c-ea5f05f513a6","source":"@none","code":"baseline-unknown"}
# usage: {"event":"usage-unknown","business":"acme","run":"rb800d18639ac","instance":"chief","turn":"b02ab9f7-2aa6-4c31-80ab-2716cbedfdda","source":"@none","code":"baseline-unknown"}
# usage: {"event":"usage-unknown","business":"acme","run":"rb800d18639ac","instance":"chief","turn":"c9ef219d-3af5-4ccd-a612-62b3df700dbf","source":"@none","code":"baseline-unknown"}
# usage: {"event":"usage-unknown","business":"acme","run":"rb800d18639ac","instance":"chief","turn":"9827408b-6a47-4671-bb47-611a17aa6e2e","source":"@none","code":"baseline-unknown"}
# usage: {"event":"usage-unknown","business":"acme","run":"rb800d18639ac","instance":"chief","turn":"cd45f590-2a8c-498c-99c7-23b19358cfa1","source":"@none","code":"baseline-unknown"}
# usage: {"event":"usage-unknown","business":"acme","run":"rb800d18639ac","instance":"chief","turn":"09e3ce2f-553e-419b-b437-8f0577401044","source":"@none","code":"baseline-unknown"}
# usage: {"event":"usage-unknown","business":"acme","run":"rb800d18639ac","instance":"chief","turn":"eeb1210a-96af-4c5f-8b9d-f952048e0ab2","source":"@none","code":"baseline-unknown"}
# Subtest: row 194 D3 item 5: the chief's session hires with its tool and launches its hire in the same session, then fires it
ok 24 - row 194 D3 item 5: the chief's session hires with its tool and launches its hire in the same session, then fires it
---
duration_ms: 1337.408893
type: 'test'
...
1..24
# tests 24
# suites 0
# pass 24
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 13228.183722
@@ -0,0 +1 @@
["timeout", "-k", "10", "900", "node", "--test", "--test-reporter=tap", "packages/cli/tests/stack-release.test.mjs"]
File diff suppressed because it is too large. Load diff
@@ -0,0 +1 @@
["timeout", "-k", "10", "900", "node", "--test", "--test-reporter=tap", "packages/cli/tests/thread-cli.test.mjs"]
@@ -0,0 +1,76 @@
TAP version 13
# Subtest: REQ-CLI-1 project create and list work on the bus record and refuse what the broker refuses
ok 1 - REQ-CLI-1 project create and list work on the bus record and refuse what the broker refuses
---
duration_ms: 62.377749
type: 'test'
...
# Subtest: REQ-CLI-1 thread create, list, open and read
ok 2 - REQ-CLI-1 thread create, list, open and read
---
duration_ms: 51.588757
type: 'test'
...
# Subtest: REQ-CLI-1 thread read pages through every message, oldest first
ok 3 - REQ-CLI-1 thread read pages through every message, oldest first
---
duration_ms: 259.255194
type: 'test'
...
# Subtest: REQ-CLI-1 the business needs exactly one threaded instance to create a thread
ok 4 - REQ-CLI-1 the business needs exactly one threaded instance to create a thread
---
duration_ms: 25.937393
type: 'test'
...
# Subtest: REQ-CLI-1 a thread is its id, an id prefix of 8 characters or more, or <project>/<name>; anything else is refused before any write
ok 5 - REQ-CLI-1 a thread is its id, an id prefix of 8 characters or more, or <project>/<name>; anything else is refused before any write
---
duration_ms: 41.582366
type: 'test'
...
# Subtest: REQ-CLI-2 REQ-THREAD-2 talk --thread sends to the thread and prints only the reply to it; the rest stays unread
ok 6 - REQ-CLI-2 REQ-THREAD-2 talk --thread sends to the thread and prints only the reply to it; the rest stays unread
---
duration_ms: 30.979841
type: 'test'
...
# Subtest: REQ-CLI-2 talk --thread --wait gives up with exit 1 and leaves the thread's messages unread
ok 7 - REQ-CLI-2 talk --thread --wait gives up with exit 1 and leaves the thread's messages unread
---
duration_ms: 1030.531062
type: 'test'
...
# Subtest: REQ-CLI-2 talk --thread --follow and follow --thread print and read only that thread's messages
ok 8 - REQ-CLI-2 talk --thread --follow and follow --thread print and read only that thread's messages
---
duration_ms: 75.583468
type: 'test'
...
# Subtest: REQ-CLI-2 plain talk to the assistant asks for a thread and exits 2 without a write
ok 9 - REQ-CLI-2 plain talk to the assistant asks for a thread and exits 2 without a write
---
duration_ms: 18.870123
type: 'test'
...
# Subtest: REQ-USER-2 a thread of another user is refused for talk, open, read and follow, and nothing is written
ok 10 - REQ-USER-2 a thread of another user is refused for talk, open, read and follow, and nothing is written
---
duration_ms: 35.368799
type: 'test'
...
# Subtest: REQ-CLI-1 the new verbs refuse inside an agent run, as every human verb does
ok 11 - REQ-CLI-1 the new verbs refuse inside an agent run, as every human verb does
---
duration_ms: 10.342626
type: 'test'
...
1..11
# tests 11
# suites 0
# pass 11
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 1774.007884
@@ -0,0 +1 @@
["timeout", "-k", "10", "900", "node", "--test", "--test-reporter=tap", "packages/cli/tests/thread-launch.test.mjs"]
@@ -0,0 +1,90 @@
TAP version 13
# usage: {"event":"usage-unknown","business":"acme","run":"rb6ad1f5b21bb","instance":"assistant","turn":"0a2efbe4-6a2f-44e5-af9c-c6d60314afa6","source":"@none","code":"baseline-unknown"}
# usage: {"event":"usage-unknown","business":"acme","run":"r0eb35d40b86a","instance":"assistant","turn":"a496b5ab-090e-493b-a03d-05c06bf5e50c","source":"@none","code":"baseline-unknown"}
# usage: {"event":"usage-unknown","business":"acme","run":"re77ee664419c","instance":"assistant","turn":"9a0eefd5-9a2c-40d9-8c93-fff7383f7fcc","source":"@none","code":"baseline-unknown"}
# usage: {"event":"usage-unknown","business":"acme","run":"r180c2c6ed593","instance":"assistant","turn":"a9aae14a-5e0c-42e8-90be-46e44fc65979","source":"@none","code":"baseline-unknown"}
# Subtest: REQ-THREAD-2 REQ-LAUNCH-1 REQ-MSG-1 a thread message starts the thread's session, which stops when idle; its history survives the stop and a restart and no other thread sees it
ok 1 - REQ-THREAD-2 REQ-LAUNCH-1 REQ-MSG-1 a thread message starts the thread's session, which stops when idle; its history survives the stop and a restart and no other thread sees it
---
duration_ms: 5830.838516
type: 'test'
...
# usage: {"event":"usage-unknown","business":"acme","run":"r5ade9c5abb73","instance":"assistant","turn":"8c1459a9-e7f2-445a-b427-06157fa83852","source":"@none","code":"baseline-unknown"}
# usage: {"event":"usage-unknown","business":"acme","run":"r5ede1873b667","instance":"assistant","turn":"6bde4bc4-f2d1-4765-92b0-c09b7f434390","source":"@none","code":"baseline-unknown"}
# Subtest: REQ-THREAD-2 REQ-LAUNCH-1 a running thread counts against its model's limit and an idle-stopped one doesn't
ok 2 - REQ-THREAD-2 REQ-LAUNCH-1 a running thread counts against its model's limit and an idle-stopped one doesn't
---
duration_ms: 1744.655482
type: 'test'
...
# usage: {"event":"usage-unknown","business":"acme","run":"rbc96143c0955","instance":"assistant","turn":"1db7fc2f-d26b-4ed0-9813-f84604422fcb","source":"@none","code":"baseline-unknown"}
# Subtest: REQ-THREAD-2 REQ-LAUNCH-1 a turn longer than the idle time isn't stopped, and the thread idles out after it
ok 3 - REQ-THREAD-2 REQ-LAUNCH-1 a turn longer than the idle time isn't stopped, and the thread idles out after it
---
duration_ms: 4435.982598
type: 'test'
...
# usage: {"event":"usage-unknown","business":"acme","run":"rdae872029c54","instance":"assistant","turn":"ab9209ff-ef36-44ad-9108-05e7f7af1f4d","source":"@none","code":"baseline-unknown"}
# usage: {"event":"usage-unknown","business":"acme","run":"rdae872029c54","instance":"assistant","turn":"42586325-b659-4e4a-9a4d-1f39be95740e","source":"@none","code":"baseline-unknown"}
# Subtest: REQ-THREAD-2 REQ-LAUNCH-1 a message sent after the idle snapshot keeps the session, which answers it
ok 4 - REQ-THREAD-2 REQ-LAUNCH-1 a message sent after the idle snapshot keeps the session, which answers it
---
duration_ms: 2881.533996
type: 'test'
...
# Subtest: REQ-ROLE-2 REQ-LAUNCH-1 a thread held by a run the launcher didn't start gets no second session
ok 5 - REQ-ROLE-2 REQ-LAUNCH-1 a thread held by a run the launcher didn't start gets no second session
---
duration_ms: 76.274489
type: 'test'
...
# usage: {"event":"usage-unknown","business":"acme","run":"ra70ea4a5dde4","instance":"assistant","turn":"0a70c13f-656d-4af6-b3f6-4e8f83378394","source":"@none","code":"baseline-unknown"}
# Subtest: REQ-LAUNCH-1 a thread run's session file has no landing, even when landHolders names its instance
ok 6 - REQ-LAUNCH-1 a thread run's session file has no landing, even when landHolders names its instance
---
duration_ms: 371.707935
type: 'test'
...
# Subtest: REQ-LAUNCH-1 a run that ends without taking its thread's message isn't started again for that message
ok 7 - REQ-LAUNCH-1 a run that ends without taking its thread's message isn't started again for that message
---
duration_ms: 228.026468
type: 'test'
...
# Subtest: REQ-THREAD-2 REQ-LAUNCH-1 a thread id that isn't a safe segment, or a thread of a non-thread instance, launches nothing
ok 8 - REQ-THREAD-2 REQ-LAUNCH-1 a thread id that isn't a safe segment, or a thread of a non-thread instance, launches nothing
---
duration_ms: 220.298182
type: 'test'
...
# Subtest: REQ-THREAD-1 REQ-LAUNCH-1 the chief can't launch the assistant outside a thread
ok 9 - REQ-THREAD-1 REQ-LAUNCH-1 the chief can't launch the assistant outside a thread
---
duration_ms: 75.436755
type: 'test'
...
# limits: {"event":"limit-reached","business":"acme","check":"token-limit","export":"mayLaunch","subject":{"instance":"assistant","provider":"zai","model":"claude-sonnet-5-5","account":null},"path":["tokens","instances","assistant"],"limit":0,"count":0,"unknownTurns":0}
# limits: {"event":"limit-reached","business":"acme","check":"token-limit","export":"mayLaunch","subject":{"instance":"assistant","provider":"zai","model":"claude-sonnet-5-5","account":null},"path":["tokens","instances","assistant"],"limit":0,"count":0,"unknownTurns":0}
# Subtest: REQ-LIMIT-3 REQ-LIMIT-4 a thread start whose instance is at its token limit is refused, logged once with the limit and the count
ok 10 - REQ-LIMIT-3 REQ-LIMIT-4 a thread start whose instance is at its token limit is refused, logged once with the limit and the count
---
duration_ms: 189.035089
type: 'test'
...
# usage: {"event":"usage-unknown","business":"acme","run":"r8fe913dfa11a","instance":"assistant","turn":"9c6d8e34-432d-4e98-9c84-597e9851c30a","source":"@none","code":"baseline-unknown"}
# limits: {"event":"limit-reached","business":"acme","check":"token-limit","export":"mustStop","subject":{"instance":"assistant","provider":"zai","model":"claude-sonnet-5-5","account":null},"path":["tokens","instances","assistant"],"limit":0,"count":0,"unknownTurns":1}
# Subtest: REQ-LIMIT-4 a thread run at its token limit stops at the end of its turn: the reply lands, and the end record names the limit
ok 11 - REQ-LIMIT-4 a thread run at its token limit stops at the end of its turn: the reply lands, and the end record names the limit
---
duration_ms: 337.389868
type: 'test'
...
1..11
# tests 11
# suites 0
# pass 11
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 16519.142963
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/webui/tests/chat.test.mjs"]
@@ -0,0 +1,148 @@
TAP version 13
# Subtest: chat reads map only fixed verbs, strict forward paging and pure GET
ok 1 - chat reads map only fixed verbs, strict forward paging and pure GET
---
duration_ms: 22.861132
type: 'test'
...
# Subtest: chat refuses malformed and repeated query/id values before transport
ok 2 - chat refuses malformed and repeated query/id values before transport
---
duration_ms: 4.841651
type: 'test'
...
# Subtest: chat project.create: one verified write, fixed identity/class and private log
ok 3 - chat project.create: one verified write, fixed identity/class and private log
---
duration_ms: 2.794084
type: 'test'
...
# Subtest: chat project.create: each existing Console write fence makes zero bus calls
ok 4 - chat project.create: each existing Console write fence makes zero bus calls
---
duration_ms: 6.764949
type: 'test'
...
# Subtest: chat project.create: refusal or lost/malformed receipt never retries or invents success
ok 5 - chat project.create: refusal or lost/malformed receipt never retries or invents success
---
duration_ms: 3.587143
type: 'test'
...
# Subtest: chat thread.create: one verified write, fixed identity/class and private log
ok 6 - chat thread.create: one verified write, fixed identity/class and private log
---
duration_ms: 1.174827
type: 'test'
...
# Subtest: chat thread.create: each existing Console write fence makes zero bus calls
ok 7 - chat thread.create: each existing Console write fence makes zero bus calls
---
duration_ms: 5.516326
type: 'test'
...
# Subtest: chat thread.create: refusal or lost/malformed receipt never retries or invents success
ok 8 - chat thread.create: refusal or lost/malformed receipt never retries or invents success
---
duration_ms: 3.939116
type: 'test'
...
# Subtest: chat thread.send: one verified write, fixed identity/class and private log
ok 9 - chat thread.send: one verified write, fixed identity/class and private log
---
duration_ms: 1.108563
type: 'test'
...
# Subtest: chat thread.send: each existing Console write fence makes zero bus calls
ok 10 - chat thread.send: each existing Console write fence makes zero bus calls
---
duration_ms: 4.964503
type: 'test'
...
# Subtest: chat thread.send: refusal or lost/malformed receipt never retries or invents success
ok 11 - chat thread.send: refusal or lost/malformed receipt never retries or invents success
---
duration_ms: 2.823311
type: 'test'
...
# Subtest: chat thread.open: one verified write, fixed identity/class and private log
ok 12 - chat thread.open: one verified write, fixed identity/class and private log
---
duration_ms: 0.975249
type: 'test'
...
# Subtest: chat thread.open: each existing Console write fence makes zero bus calls
ok 13 - chat thread.open: each existing Console write fence makes zero bus calls
---
duration_ms: 6.197542
type: 'test'
...
# Subtest: chat thread.open: refusal or lost/malformed receipt never retries or invents success
ok 14 - chat thread.open: refusal or lost/malformed receipt never retries or invents success
---
duration_ms: 4.447509
type: 'test'
...
# Subtest: chat createThread receipt requires an instance even when its id is valid
ok 15 - chat createThread receipt requires an instance even when its id is valid
---
duration_ms: 2.034364
type: 'test'
...
# Subtest: chat write receipts expose only the fields belonging to their operation
ok 16 - chat write receipts expose only the fields belonging to their operation
---
duration_ms: 3.200614
type: 'test'
...
# Subtest: chat validates names, body, project and strict empty open payload
ok 17 - chat validates names, body, project and strict empty open payload
---
duration_ms: 3.333389
type: 'test'
...
# Subtest: chat read failures redact ownership and refuse invalid transport arrays
ok 18 - chat read failures redact ownership and refuse invalid transport arrays
---
duration_ms: 3.34412
type: 'test'
...
# Subtest: REQ-USER-2 real broker: owned catalog, create/name/filter, isolated history and 403/404 without mutations
ok 19 - REQ-USER-2 real broker: owned catalog, create/name/filter, isolated history and 403/404 without mutations
---
duration_ms: 79.076193
type: 'test'
...
# Subtest: chat repeats every POST boundary even when called behind an admitted request
ok 20 - chat repeats every POST boundary even when called behind an admitted request
---
duration_ms: 0.885504
type: 'test'
...
# Subtest: configured Console process injects chat through its existing human transport
ok 21 - configured Console process injects chat through its existing human transport
---
duration_ms: 125.514296
type: 'test'
...
# Subtest: chat assets, GET purity, method and unknown-route refusals are explicit
ok 22 - chat assets, GET purity, method and unknown-route refusals are explicit
---
duration_ms: 11.747057
type: 'test'
...
# Subtest: the chat seam names the transport it is given: the human one and the tester one both pass, anything else is a TypeError
ok 23 - the chat seam names the transport it is given: the human one and the tester one both pass, anything else is a TypeError
---
duration_ms: 0.438052
type: 'test'
...
1..23
# tests 23
# suites 0
# pass 23
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 418.941921
@@ -0,0 +1,385 @@
{
"grant": "sage-2709",
"head": "0604d91fcfc1949810cd5321aea6ec43e9b74b4b",
"manifest": "573c51cf72f2398532a6ea768536f04e3c1681997cb8b9a6f14a8aef884870ae",
"steps": [
{
"code": 0,
"timeout": false,
"seconds": 99.281,
"log": "agents/gander/work/queue-253/run3-focused/files/01.log",
"file": "packages/cli/tests/case1-accept.test.mjs",
"counts": {
"tests": 34,
"pass": 34,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 66.418,
"log": "agents/gander/work/queue-253/run3-focused/files/02.log",
"file": "packages/cli/tests/case2-unit.test.mjs",
"counts": {
"tests": 43,
"pass": 43,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.415,
"log": "agents/gander/work/queue-253/run3-focused/files/03.log",
"file": "packages/bus/tests/account-migration.test.mjs",
"counts": {
"tests": 3,
"pass": 3,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 2.168,
"log": "agents/gander/work/queue-253/run3-focused/files/04.log",
"file": "packages/bus/tests/chief-of-staff.test.mjs",
"counts": {
"tests": 42,
"pass": 42,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.565,
"log": "agents/gander/work/queue-253/run3-focused/files/05.log",
"file": "packages/bus/tests/comment-migration.test.mjs",
"counts": {
"tests": 5,
"pass": 5,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.415,
"log": "agents/gander/work/queue-253/run3-focused/files/06.log",
"file": "packages/bus/tests/end-launch.test.mjs",
"counts": {
"tests": 7,
"pass": 7,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 3.271,
"log": "agents/gander/work/queue-253/run3-focused/files/07.log",
"file": "packages/bus/tests/fire-revokes-grants.test.mjs",
"counts": {
"tests": 22,
"pass": 22,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 8.634,
"log": "agents/gander/work/queue-253/run3-focused/files/08.log",
"file": "packages/bus/tests/gitea-grant.test.mjs",
"counts": {
"tests": 49,
"pass": 49,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.415,
"log": "agents/gander/work/queue-253/run3-focused/files/09.log",
"file": "packages/bus/tests/gitea-migration.test.mjs",
"counts": {
"tests": 5,
"pass": 5,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 21.562,
"log": "agents/gander/work/queue-253/run3-focused/files/10.log",
"file": "packages/bus/tests/grant-executor.test.mjs",
"counts": {
"tests": 42,
"pass": 42,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.465,
"log": "agents/gander/work/queue-253/run3-focused/files/11.log",
"file": "packages/bus/tests/grant-migration.test.mjs",
"counts": {
"tests": 6,
"pass": 6,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.665,
"log": "agents/gander/work/queue-253/run3-focused/files/12.log",
"file": "packages/bus/tests/lifecycle-revoke.test.mjs",
"counts": {
"tests": 8,
"pass": 8,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.515,
"log": "agents/gander/work/queue-253/run3-focused/files/13.log",
"file": "packages/bus/tests/message-filter.test.mjs",
"counts": {
"tests": 6,
"pass": 6,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-253/run3-focused/files/14.log",
"file": "packages/bus/tests/name-migration.test.mjs",
"counts": {
"tests": 1,
"pass": 1,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-253/run3-focused/files/15.log",
"file": "packages/bus/tests/schema.test.mjs",
"counts": {
"tests": 1,
"pass": 1,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.615,
"log": "agents/gander/work/queue-253/run3-focused/files/16.log",
"file": "packages/bus/tests/sessions.test.mjs",
"counts": {
"tests": 7,
"pass": 7,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-253/run3-focused/files/17.log",
"file": "packages/bus/tests/spec-migration.test.mjs",
"counts": {
"tests": 1,
"pass": 1,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.565,
"log": "agents/gander/work/queue-253/run3-focused/files/18.log",
"file": "packages/bus/tests/tester-writes.test.mjs",
"counts": {
"tests": 8,
"pass": 8,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.264,
"log": "agents/gander/work/queue-253/run3-focused/files/19.log",
"file": "packages/bus/tests/thread-claims.test.mjs",
"counts": {
"tests": 6,
"pass": 6,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.365,
"log": "agents/gander/work/queue-253/run3-focused/files/20.log",
"file": "packages/bus/tests/thread-migration.test.mjs",
"counts": {
"tests": 3,
"pass": 3,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 1.216,
"log": "agents/gander/work/queue-253/run3-focused/files/21.log",
"file": "packages/bus/tests/threads.test.mjs",
"counts": {
"tests": 17,
"pass": 17,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-253/run3-focused/files/22.log",
"file": "packages/bus/tests/usage-migration.test.mjs",
"counts": {
"tests": 1,
"pass": 1,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 13.296,
"log": "agents/gander/work/queue-253/run3-focused/files/23.log",
"file": "packages/cli/tests/lifecycle.test.mjs",
"counts": {
"tests": 24,
"pass": 24,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 583.453,
"log": "agents/gander/work/queue-253/run3-focused/files/24.log",
"file": "packages/cli/tests/stack-release.test.mjs",
"counts": {
"tests": 218,
"pass": 218,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 1.876,
"log": "agents/gander/work/queue-253/run3-focused/files/25.log",
"file": "packages/cli/tests/thread-cli.test.mjs",
"counts": {
"tests": 11,
"pass": 11,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 16.603,
"log": "agents/gander/work/queue-253/run3-focused/files/26.log",
"file": "packages/cli/tests/thread-launch.test.mjs",
"counts": {
"tests": 11,
"pass": 11,
"fail": 0,
"skipped": 0
},
"named_skips": []
},
{
"code": 0,
"timeout": false,
"seconds": 0.515,
"log": "agents/gander/work/queue-253/run3-focused/files/27.log",
"file": "packages/webui/tests/chat.test.mjs",
"counts": {
"tests": 23,
"pass": 23,
"fail": 0,
"skipped": 0
},
"named_skips": []
}
]
}
@@ -0,0 +1,10 @@
PID PPID STARTED COMMAND
2469277 2469078 Thu Oct 22 14:20:57 2026 node-MainThread
2469278 2469078 Thu Oct 22 14:20:57 2026 npm exec @model
2469279 2469078 Thu Oct 22 14:20:57 2026 npm exec chrome
2469292 2469078 Thu Oct 22 14:20:57 2026 npm exec @playw
2469478 2469278 Thu Oct 22 14:20:58 2026 node-MainThread
2469485 2469292 Thu Oct 22 14:20:58 2026 node-MainThread
2469518 2469279 Thu Oct 22 14:20:59 2026 chrome-devtools
2469601 2469518 Thu Oct 22 14:20:59 2026 node-MainThread
2470486 2469078 Thu Oct 22 14:21:07 2026 codex-code-mode
@@ -0,0 +1 @@
2026-10-22T14:30:03Z
@@ -0,0 +1,62 @@
{
"timestamp": "2026-10-22T14:44:57.963446+00:00",
"count": 9,
"remaining": [
{
"pid": 2469277,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:57.360000+00:00"
},
{
"pid": 2469278,
"comm": "npm exec @model",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:57.370000+00:00"
},
{
"pid": 2469279,
"comm": "npm exec chrome",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:57.370000+00:00"
},
{
"pid": 2469292,
"comm": "npm exec @playw",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:57.380000+00:00"
},
{
"pid": 2469478,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:58.770000+00:00"
},
{
"pid": 2469485,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:58.800000+00:00"
},
{
"pid": 2469518,
"comm": "chrome-devtools",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:59.100000+00:00"
},
{
"pid": 2469601,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:59.440000+00:00"
},
{
"pid": 2470486,
"comm": "codex-code-mode",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:21:07.580000+00:00"
}
],
"excluded_preexisting_infrastructure": [],
"note": "Read-only /proc cwd sweep, including deleted cwd under this run TMPDIR. Own ancestry excluded. Only nine known MCP/npm/code-mode infrastructure PIDs with pre-run start ticks are excluded. No signalling."
}
@@ -0,0 +1,62 @@
{
"timestamp": "2026-10-22T14:45:17.148081+00:00",
"count": 0,
"remaining": [],
"excluded_preexisting_infrastructure": [
{
"pid": 2469277,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:57.360000+00:00"
},
{
"pid": 2469278,
"comm": "npm exec @model",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:57.370000+00:00"
},
{
"pid": 2469279,
"comm": "npm exec chrome",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:57.370000+00:00"
},
{
"pid": 2469292,
"comm": "npm exec @playw",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:57.380000+00:00"
},
{
"pid": 2469478,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:58.770000+00:00"
},
{
"pid": 2469485,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:58.800000+00:00"
},
{
"pid": 2469518,
"comm": "chrome-devtools",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:59.100000+00:00"
},
{
"pid": 2469601,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:20:59.440000+00:00"
},
{
"pid": 2470486,
"comm": "codex-code-mode",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T14:21:07.580000+00:00"
}
],
"note": "Read-only /proc cwd sweep, including deleted cwd under this run TMPDIR. Own ancestry excluded. Only known MCP/npm/code-mode infrastructure PIDs with pre-run start ticks are excluded. No signalling."
}
@@ -32,6 +32,7 @@ def main():
args.out.mkdir(parents=True,exist_ok=True)
result=dict(grant=args.grant,head=subprocess.check_output(['git','rev-parse','HEAD'],cwd=driver.REPO,text=True).strip(),manifest=hashlib.sha256((HERE/'MANIFEST.sha256').read_bytes()).hexdigest(),steps=[])
print(json.dumps({k:result[k] for k in ['grant','head','manifest']}),flush=True)
print(json.dumps(dict(authority='sage-2709',file_limits=limits)),flush=True)
(args.out/'results.json').write_text(json.dumps(result,indent=2)+'\n')
for index,name in enumerate(files):
limit=limits[name]