docs(row278): record green third gate and final review evidence

This commit is contained in:
jason.woltje committed 2026-10-22 07:32:56 -05:00
1 parent 3e4c77ac60
commit 385a7194c7
90 files changed
+17402 -2

No files matched your search

+4
View File
@@ -5299,3 +5299,7 @@ Before: managed project/thread verbs had no Console conversation area. After: fi
2026-10-22T11:37:16Z | Gander row278 #1783 implementation prepared, verification held | Before: owner thread claims were visible through row277 but absent from the Console Agents view. After: prepared a separate four-field table, a Console-owned read adapter, section-local refusal handling and an explicit tester refusal before busRead. Ten tests and six unique check definitions are prepared but unrun. Base moved from980cec88c to6af85df4b under sage-2625 on new gander/row278-b; no candidate path overlapped. No Node process, syntax check, test, browser, queue command, push helper or live action ran. Next: Sage CLEAR for the queue claim and gate; Webby reviews the verified manifest.
2026-10-22T12:09:45.285844+00:00 | Gander row278 run1 void, loader fake repaired | First new-file run stopped3/1/0 because the fake omitted BusReadError imported by base chat.mjs. Sage-2638 places the first-own-test red and permits the assertion-preserving export; test-only commit964b6b184. Runtime bytes unchanged. All run1 results void, no timeout or run leftovers. Run2 must restart every step after busy CLEAR; a second red goes to Sage then Mos before any change. No product acceptance or push claimed.
### 2026-10-22 | Gander | row278 gate run3
Fresh gate on3e4c77ac6 under sage-2648: bus793/0, WebUI345/0/1 (esbuild version skip), all ten shell files425/0, touched files15/0, M1-M6 killed6/6. No timeout; sweep0 run-created leftovers. Runs1/2 void. Seven-path manifest8fa859a0 goes to Webby for final review. No landing or live change.
+38
View File
@@ -86,3 +86,41 @@ Longest receipt selection: scanned every available Gander row196 JSON result/sum
| scripts/test-task.sh | 36.783798 | 231 | ec1e7fad8:agents/gander/work/queue-196/r5/resume/whole-results.json |
Run3 numbers will be appended here after execution. Run1/run2 remain void next to their numbers above. No result carries.
## Run3 green under sage-2648
Candidate3e4c77ac6, source9696d1fcb, manifest8fa859a0. Fresh run from the top; nothing carried from void runs1/2. Started12:26:46Z and completed verification12:31:45Z,299 wall seconds. No unexpected failure, assertion change or timeout.
| Step | Pass/fail/skip | Wall seconds |
|---|---:|---:|
| syntax-0 | 1/0/0 | 0.064 |
| syntax-1 | 1/0/0 | 0.064 |
| syntax-2 | 1/0/0 | 0.064 |
| syntax-3 | 1/0/0 | 0.064 |
| syntax-4 | 1/0/0 | 0.064 |
| syntax-6 | 1/0/0 | 0.064 |
| red-0 | 0/1/0 intended RED | 0.214 |
| red-1 | 0/1/0 intended RED | 3.773 |
| focused-0 | 4/0/0 | 0.365 |
| focused-1 | 6/0/0 | 3.922 |
| focused-2 | 5/0/0 | 8.082 |
| bus whole | 793/0/0 | 22.463 |
| webui whole | 345/0/1 | 56.982 |
| scripts/test-auth.sh whole | 15/0/0 | 0.816 |
| scripts/test-conductor.sh whole | 17/0/0 | 6.078 |
| scripts/test-config.sh whole | 31/0/0 | 1.868 |
| scripts/test-discord.sh whole | 81/0/0 | 7.431 |
| scripts/test-extension-package.sh whole | 18/0/0 | 1.366 |
| scripts/test-foundation.sh whole | 44/0/0 | 39.901 |
| scripts/test-land-work.sh whole | 86/0/0 | 11.338 |
| scripts/test-queue.sh whole | 28/0/0 | 21.158 |
| scripts/test-release.sh whole | 14/0/0 | 2.67 |
| scripts/test-task.sh whole | 91/0/0 | 13.843 |
Syntax6/0. Both intended REDs repeat and restore byte-identical source and tracked status. Touched files whole: new HTTP4/0, new browser6/0, existing shell5/0. M1-M6 killed6/6, survivor0, timeout0, with passing bases and exact restores; run3/KILL-TABLE.md records named killers and times. Bus793/0, WebUI345/0/1, ten shell whole files425/0. Whole-phase reported assertions1563/0/1; this counts shell summary assertions, without adding nested TAP tests again. Focused repeats are listed separately. All direct test command JSONs use timeout -k10 300. Each whole shell command matches its pre-recorded limit exactly. No script changed.
Named skip: rebuilding from the source gives the same bytes, because esbuild0.28.1 is installed and0.28.2 is required. MOSAIC_REQUIRE_EDITOR_BUILD=1 would fail instead. No dependency install. The log line is saved in SUMMARY.json.
Sweep:0 run-created leftovers. The broad sweep found eight additional MCP/npm/code-mode processes plus the previously known browser helper; all predate the gate by over an hour. Their11:23:49-11:24:06Z start times are recorded with /proc ticks and UTC ps in run3/sweep.json and preexisting-processes.txt; initial broad output retained. Nothing signalled. Source and all ten script hashes still match their frozen values. No product/test bytes changed during the gate.
Seven-path manifest remains8fa859a0c617defe42e50028b057a603c6634f6db47ac2e3f7c01dfb290228a3. Records commit follows; publish own branch only under sage-2648, then hand directly to Webby and Sage. BUILD-LOG stays outside the landing manifest.
+2
View File
@@ -7,3 +7,5 @@ Seven manifest paths are pinned from committed blobs; shell.test.mjs is now incl
Run1 and run2 are void. Run3 must repeat syntax, both expected REDs, all three touched test files whole, M1-M6, bus and webui whole, and ten whole shell files. Direct Node test calls use timeout -k10 300. The whole shell-file calls use their SHELL-LIMITS.json value, derived and recorded in BUILD.md, with no script edit. No Node or test has run since the second stop. Sage grants the slot after Megavolt.
A further unexpected red, any moved existing assertion or a shell timeout goes to Sage and Mos unplaced, with no change/rerun. The editor rebuild environment skip (installed esbuild0.28.1 versus required0.28.2) stays named; no install. No push until green. BUILD-LOG is excluded from the landing manifest and lands as a doc-only append after code.
Run3 is now GREEN under sage-2648 on3e4c77ac6. run3/SUMMARY.json, raw command/log files and KILL-TABLE.md are the acceptance records. Bus793/0, WebUI345/0/1 (named esbuild version skip), ten shells425/0, touched whole files15/0, M1-M6 killed6/6, no timeout, sweep0 run-created leftovers. Source/test/script bytes match the pinned candidate. Run1/run2 remain void. Webby final manifest review is next after publication.
+2 -2
View File
@@ -15,6 +15,6 @@
"packages/webui/README.md": "426007525d15ad0fa11ba02d6cc5d8436c7ff3fa38beb01e9a651c202169d6a5",
"packages/webui/tests/shell.test.mjs": "fd7ad903b682f8f6ceee2d75111b01aa97f50233cd875dd5553e3e83de33ce32"
},
"verification": "Run1 and run2 void. Run3 not started; Sage holds the slot.",
"publication": "held until green"
"verification": "Run3 green under sage-2648; run3/SUMMARY.json contains fresh evidence. Runs1/2 void.",
"publication": "authorized after green under sage-2648"
}
+46
View File
@@ -0,0 +1,46 @@
#!/usr/bin/env python3
"""Assemble run3 evidence from complete logs without running tests."""
import hashlib, json, re
from pathlib import Path
HERE=Path(__file__).resolve().parent
RUN=HERE/'run3'
def main():
sections={n:json.loads((RUN/n/'results.json').read_text()) for n in ['syntax','red','focused','changes','whole']}
for n in ['syntax','focused','whole']:
assert all(s['code']==0 and not s['timeout'] for s in sections[n]['steps']), n
assert len(sections['whole']['steps'])==12
assert all(s['code']!=0 and not s['timeout'] for s in sections['red']['steps'])
changes=sections['changes']['changes']
assert len(changes)==6 and all(s['outcome']=='killed' and not s['timeout'] for s in changes)
limits=json.loads((HERE/'SHELL-LIMITS.json').read_text())['scripts']
shells=[]
for s in sections['whole']['steps'][2:]:
command=json.loads(Path(s['log']).with_suffix('.command.json').read_text())
script=command[-1]
assert command==['timeout','-k','10',str(limits[script]['limit_seconds']),'bash',script]
raw=Path(s['log']).read_text(errors='replace')
matches=re.findall(r'([^\n]*?: (\d+) passed, (\d+) failed)',raw)
assert matches, script
line, passed, failed=matches[-1]
assert int(failed)==0
shells.append(dict(script=script,pass_count=int(passed),fail_count=int(failed),seconds=s['seconds'],limit_seconds=limits[script]['limit_seconds'],summary_line=line,command=command))
webui=Path(sections['whole']['steps'][1]['log']).read_text(errors='replace')
skips=[line for line in webui.splitlines() if '# SKIP' in line]
direct=[]
for p in RUN.rglob('*.command.json'):
cmd=json.loads(p.read_text())
if 'node' in cmd and '--test' in cmd:
assert cmd[:5]==['timeout','-k','10','300','node']
direct.append(str(p))
expected=json.loads((HERE/'CANDIDATE-SHAS.json').read_text())
repo=HERE.parents[3]
assert all(hashlib.sha256((repo/n).read_bytes()).hexdigest()==v for n,v in expected.items())
assert all(hashlib.sha256((repo/n).read_bytes()).hexdigest()==v['script_sha256'] for n,v in limits.items())
result=dict(status='GREEN',grant='sage-2648',candidate='3e4c77ac6056e8efa887eecdbc4001d249b880f6',source='9696d1fcb78d6082cae8dcb61913225e98c9c138',manifest=hashlib.sha256((HERE/'MANIFEST.sha256').read_bytes()).hexdigest(),sections=sections,shells=shells,named_skips=skips,killed=len(changes),survived=0,timeouts=0,timeout_wrapped_direct_test_commands=direct,all_candidate_and_script_hashes_match=True)
(RUN/'SUMMARY.json').write_text(json.dumps(result,indent=2)+'\n')
defs={d['id']:d for d in json.loads((HERE/'changes.json').read_text())}
lines=['# Run3 kill table','','All six bases passed; no timeout. Every change restored exact bytes and tracked git status.','','| Check | Named killer | Base seconds | Changed seconds | Result |','|---|---|---:|---:|---|']
lines += [f"| {s['id']} | {defs[s['id']]['pattern']} | {s['base_seconds']} | {s['seconds']} | {s['outcome']} |" for s in changes]
(RUN/'KILL-TABLE.md').write_text('\n'.join(lines)+'\n')
print(json.dumps(dict(shells=shells,named_skips=skips,killed=len(changes)),indent=2))
if __name__=='__main__': main()
@@ -0,0 +1,12 @@
# Run3 kill table
All six bases passed; no timeout. Every change restored exact bytes and tracked git status.
| Check | Named killer | Base seconds | Changed seconds | Result |
|---|---|---:|---:|---|
| M1 | row278 browser lists held claims | 0.816 | 3.774 | killed |
| M2 | row278 browser lists held claims | 0.816 | 0.766 | killed |
| M3 | row278 browser claims 403 stays local | 0.866 | 3.925 | killed |
| M4 | row278 tester socket refuses thread claims | 0.214 | 0.214 | killed |
| M5 | row278 Console adapter calls argument-free | 0.315 | 0.315 | killed |
| M6 | row278 browser claims 403 stays local | 0.866 | 3.823 | killed |
@@ -0,0 +1,671 @@
{
"status": "GREEN",
"grant": "sage-2648",
"candidate": "3e4c77ac6056e8efa887eecdbc4001d249b880f6",
"source": "9696d1fcb78d6082cae8dcb61913225e98c9c138",
"manifest": "8fa859a0c617defe42e50028b057a603c6634f6db47ac2e3f7c01dfb290228a3",
"sections": {
"syntax": {
"grant": "sage-2648",
"stage": "syntax",
"steps": [
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-0.log",
"name": "syntax-0",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-1.log",
"name": "syntax-1",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-2.log",
"name": "syntax-2",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-3.log",
"name": "syntax-3",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-4.log",
"name": "syntax-4",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-6.log",
"name": "syntax-6",
"expected_red": false,
"counts": {}
}
]
},
"red": {
"grant": "sage-2648",
"stage": "red",
"steps": [
{
"code": 1,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-278/run3/red/red-0.log",
"name": "red-0",
"expected_red": true,
"counts": {
"tests": 1,
"pass": 0,
"fail": 1,
"skipped": 0
}
},
{
"code": 1,
"timeout": false,
"seconds": 3.773,
"log": "agents/gander/work/queue-278/run3/red/red-1.log",
"name": "red-1",
"expected_red": true,
"counts": {
"tests": 1,
"pass": 0,
"fail": 1,
"skipped": 0
}
}
]
},
"focused": {
"grant": "sage-2648",
"stage": "focused",
"steps": [
{
"code": 0,
"timeout": false,
"seconds": 0.365,
"log": "agents/gander/work/queue-278/run3/focused/focused-0.log",
"name": "focused-0",
"expected_red": false,
"counts": {
"tests": 4,
"pass": 4,
"fail": 0,
"skipped": 0
}
},
{
"code": 0,
"timeout": false,
"seconds": 3.922,
"log": "agents/gander/work/queue-278/run3/focused/focused-1.log",
"name": "focused-1",
"expected_red": false,
"counts": {
"tests": 6,
"pass": 6,
"fail": 0,
"skipped": 0
}
},
{
"code": 0,
"timeout": false,
"seconds": 8.082,
"log": "agents/gander/work/queue-278/run3/focused/focused-2.log",
"name": "focused-2",
"expected_red": false,
"counts": {
"tests": 5,
"pass": 5,
"fail": 0,
"skipped": 0
}
}
]
},
"changes": {
"grant": "sage-2648",
"static": [
{
"id": "M1",
"file": "packages/webui/src/public/bus.js",
"occurrences": 1,
"before": "c0306a4db82c286826b157cceb036496666f58ce8073d14280e58c10377ed0d0",
"after": "e1b693b5ddf3cd55091dd4c0a47934ca22fe7851c6e942f2386a6eefdcb5a1a0"
},
{
"id": "M2",
"file": "packages/webui/src/public/bus.js",
"occurrences": 1,
"before": "c0306a4db82c286826b157cceb036496666f58ce8073d14280e58c10377ed0d0",
"after": "6a7274e2d2281ac2d927a00e6cabe72656f648f721607f0896cac107a4e22fdb"
},
{
"id": "M3",
"file": "packages/webui/src/public/bus.js",
"occurrences": 1,
"before": "c0306a4db82c286826b157cceb036496666f58ce8073d14280e58c10377ed0d0",
"after": "7c30c0cfa6908bc0946df325d417f726ea67373b8afffe72fd3aebcd6a52c52b"
},
{
"id": "M4",
"file": "packages/webui/src/serve.mjs",
"occurrences": 1,
"before": "aa25b50543b5bc632ac984e85b0d8b43b1c9af2d617bfc7c19351d07310f396d",
"after": "10324c3a22dbefac6286af4f06e53a6e8057aef56f744eaf7bdd879ac76626e1"
},
{
"id": "M5",
"file": "packages/webui/src/cli.mjs",
"occurrences": 1,
"before": "7ac85787f614aabce4b8eccef01fcdbf1018003e806c5de97d40f47c4041710a",
"after": "3fa30f91b19a1ea0348214b927925b163e51a6184b97910ded2dbc2282e1ddf6"
},
{
"id": "M6",
"file": "packages/webui/src/public/bus.js",
"occurrences": 1,
"before": "c0306a4db82c286826b157cceb036496666f58ce8073d14280e58c10377ed0d0",
"after": "c1c4f97a962d8da9055373ca7ac4441712c2c9f4ea675d7b137a3306d0621012"
}
],
"bases": {
"packages/webui/tests/thread-claims-browser.test.mjs|row278 browser lists held claims": {
"code": 0,
"timeout": false,
"seconds": 0.816,
"log": "agents/gander/work/queue-278/run3/changes/M1-base.log"
},
"packages/webui/tests/thread-claims-browser.test.mjs|row278 browser claims 403 stays local": {
"code": 0,
"timeout": false,
"seconds": 0.866,
"log": "agents/gander/work/queue-278/run3/changes/M3-base.log"
},
"packages/webui/tests/thread-claims.test.mjs|row278 tester socket refuses thread claims": {
"code": 0,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-278/run3/changes/M4-base.log"
},
"packages/webui/tests/thread-claims.test.mjs|row278 Console adapter calls argument-free": {
"code": 0,
"timeout": false,
"seconds": 0.315,
"log": "agents/gander/work/queue-278/run3/changes/M5-base.log"
}
},
"changes": [
{
"code": 1,
"timeout": false,
"seconds": 3.774,
"log": "agents/gander/work/queue-278/run3/changes/M1.log",
"id": "M1",
"base_seconds": 0.816,
"outcome": "killed"
},
{
"code": 1,
"timeout": false,
"seconds": 0.766,
"log": "agents/gander/work/queue-278/run3/changes/M2.log",
"id": "M2",
"base_seconds": 0.816,
"outcome": "killed"
},
{
"code": 1,
"timeout": false,
"seconds": 3.925,
"log": "agents/gander/work/queue-278/run3/changes/M3.log",
"id": "M3",
"base_seconds": 0.866,
"outcome": "killed"
},
{
"code": 1,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-278/run3/changes/M4.log",
"id": "M4",
"base_seconds": 0.214,
"outcome": "killed"
},
{
"code": 1,
"timeout": false,
"seconds": 0.315,
"log": "agents/gander/work/queue-278/run3/changes/M5.log",
"id": "M5",
"base_seconds": 0.315,
"outcome": "killed"
},
{
"code": 1,
"timeout": false,
"seconds": 3.823,
"log": "agents/gander/work/queue-278/run3/changes/M6.log",
"id": "M6",
"base_seconds": 0.866,
"outcome": "killed"
}
]
},
"whole": {
"grant": "sage-2648",
"stage": "whole",
"steps": [
{
"code": 0,
"timeout": false,
"seconds": 22.463,
"log": "agents/gander/work/queue-278/run3/whole/bus.log",
"name": "bus",
"expected_red": false,
"counts": {
"tests": 793,
"pass": 793,
"fail": 0,
"skipped": 0
}
},
{
"code": 0,
"timeout": false,
"seconds": 56.982,
"log": "agents/gander/work/queue-278/run3/whole/webui.log",
"name": "webui",
"expected_red": false,
"counts": {
"tests": 346,
"pass": 345,
"fail": 0,
"skipped": 1
}
},
{
"code": 0,
"timeout": false,
"seconds": 0.816,
"log": "agents/gander/work/queue-278/run3/whole/test-auth.log",
"name": "test-auth",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 6.078,
"log": "agents/gander/work/queue-278/run3/whole/test-conductor.log",
"name": "test-conductor",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 1.868,
"log": "agents/gander/work/queue-278/run3/whole/test-config.log",
"name": "test-config",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 7.431,
"log": "agents/gander/work/queue-278/run3/whole/test-discord.log",
"name": "test-discord",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 1.366,
"log": "agents/gander/work/queue-278/run3/whole/test-extension-package.log",
"name": "test-extension-package",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 39.901,
"log": "agents/gander/work/queue-278/run3/whole/test-foundation.log",
"name": "test-foundation",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 11.338,
"log": "agents/gander/work/queue-278/run3/whole/test-land-work.log",
"name": "test-land-work",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 21.158,
"log": "agents/gander/work/queue-278/run3/whole/test-queue.log",
"name": "test-queue",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 2.67,
"log": "agents/gander/work/queue-278/run3/whole/test-release.log",
"name": "test-release",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 13.843,
"log": "agents/gander/work/queue-278/run3/whole/test-task.log",
"name": "test-task",
"expected_red": false,
"counts": {}
}
]
}
},
"shells": [
{
"script": "scripts/test-auth.sh",
"pass_count": 15,
"fail_count": 0,
"seconds": 0.816,
"limit_seconds": 126,
"summary_line": "selftest: 15 passed, 0 failed",
"command": [
"timeout",
"-k",
"10",
"126",
"bash",
"scripts/test-auth.sh"
]
},
{
"script": "scripts/test-conductor.sh",
"pass_count": 17,
"fail_count": 0,
"seconds": 6.078,
"limit_seconds": 145,
"summary_line": "selftest: 17 passed, 0 failed",
"command": [
"timeout",
"-k",
"10",
"145",
"bash",
"scripts/test-conductor.sh"
]
},
{
"script": "scripts/test-config.sh",
"pass_count": 31,
"fail_count": 0,
"seconds": 1.868,
"limit_seconds": 130,
"summary_line": "selftest: 31 passed, 0 failed",
"command": [
"timeout",
"-k",
"10",
"130",
"bash",
"scripts/test-config.sh"
]
},
{
"script": "scripts/test-discord.sh",
"pass_count": 81,
"fail_count": 0,
"seconds": 7.431,
"limit_seconds": 147,
"summary_line": "discord suite: 81 passed, 0 failed",
"command": [
"timeout",
"-k",
"10",
"147",
"bash",
"scripts/test-discord.sh"
]
},
{
"script": "scripts/test-extension-package.sh",
"pass_count": 18,
"fail_count": 0,
"seconds": 1.366,
"limit_seconds": 130,
"summary_line": "extension package selftest: 18 passed, 0 failed",
"command": [
"timeout",
"-k",
"10",
"130",
"bash",
"scripts/test-extension-package.sh"
]
},
{
"script": "scripts/test-foundation.sh",
"pass_count": 44,
"fail_count": 0,
"seconds": 39.901,
"limit_seconds": 240,
"summary_line": "selftest: 44 passed, 0 failed",
"command": [
"timeout",
"-k",
"10",
"240",
"bash",
"scripts/test-foundation.sh"
]
},
{
"script": "scripts/test-land-work.sh",
"pass_count": 86,
"fail_count": 0,
"seconds": 11.338,
"limit_seconds": 158,
"summary_line": "land-work selftests: 86 passed, 0 failed",
"command": [
"timeout",
"-k",
"10",
"158",
"bash",
"scripts/test-land-work.sh"
]
},
{
"script": "scripts/test-queue.sh",
"pass_count": 28,
"fail_count": 0,
"seconds": 21.158,
"limit_seconds": 191,
"summary_line": "queue suite: 28 passed, 0 failed",
"command": [
"timeout",
"-k",
"10",
"191",
"bash",
"scripts/test-queue.sh"
]
},
{
"script": "scripts/test-release.sh",
"pass_count": 14,
"fail_count": 0,
"seconds": 2.67,
"limit_seconds": 157,
"summary_line": "selftest: 14 passed, 0 failed",
"command": [
"timeout",
"-k",
"10",
"157",
"bash",
"scripts/test-release.sh"
]
},
{
"script": "scripts/test-task.sh",
"pass_count": 91,
"fail_count": 0,
"seconds": 13.843,
"limit_seconds": 231,
"summary_line": "selftest: 91 passed, 0 failed",
"command": [
"timeout",
"-k",
"10",
"231",
"bash",
"scripts/test-task.sh"
]
}
],
"named_skips": [
"ok 98 - rebuilding from the source gives the same bytes (needs the pinned esbuild; MOSAIC_REQUIRE_EDITOR_BUILD=1 makes its absence a failure) # SKIP esbuild 0.28.1 is installed at /mnt/storage/src/mosaic-stack/node_modules/esbuild; the editor rebuild needs exactly 0.28.2 (npm ci --ignore-scripts in packages/webui) (set MOSAIC_REQUIRE_EDITOR_BUILD=1 to fail instead of skip)"
],
"killed": 6,
"survived": 0,
"timeouts": 0,
"timeout_wrapped_direct_test_commands": [
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/focused/focused-2.command.json",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/focused/focused-0.command.json",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/focused/focused-1.command.json",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/changes/M1-base.command.json",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/changes/M4-base.command.json",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/changes/M1.command.json",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/changes/M4.command.json",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/changes/M6.command.json",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/changes/M2.command.json",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/changes/M3-base.command.json",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/changes/M3.command.json",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/changes/M5-base.command.json",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/changes/M5.command.json",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/whole/bus.command.json",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/whole/webui.command.json",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/red/red-1.command.json",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-278/run3/red/red-0.command.json"
],
"all_candidate_and_script_hashes_match": true,
"sweep": {
"timestamp": "2026-10-22T12:31:45.380268+00:00",
"count": 0,
"remaining": [],
"excluded_preexisting_infrastructure": [
{
"pid": 2880439,
"comm": "chrome-devtools",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
},
{
"pid": 2880281,
"comm": "npm exec @model",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T11:23:49.740000+00:00",
"predates_run": true
},
{
"pid": 2880282,
"comm": "npm exec chrome",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T11:23:49.740000+00:00",
"predates_run": true
},
{
"pid": 2880283,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T11:23:49.740000+00:00",
"predates_run": true
},
{
"pid": 2880284,
"comm": "npm exec @playw",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T11:23:49.740000+00:00",
"predates_run": true
},
{
"pid": 2880445,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T11:23:50.780000+00:00",
"predates_run": true
},
{
"pid": 2880487,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T11:23:51.030000+00:00",
"predates_run": true
},
{
"pid": 2880537,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T11:23:51.160000+00:00",
"predates_run": true
},
{
"pid": 2883251,
"comm": "codex-code-mode",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T11:24:06.230000+00:00",
"predates_run": true
}
],
"note": "Read-only cwd sweep. Initial broad sweep retained as sweep-initial.json. Eight additional MCP/npm/code-mode infrastructure processes all started 11:23:49-11:24:06 UTC, before run3 start12:26:46 UTC; /proc start ticks and UTC ps receipt confirm. No signalling. Run-created leftovers0."
},
"shell_total": {
"pass": 425,
"fail": 0
},
"whole_totals_including_shell_assertions": {
"pass": 1563,
"fail": 0,
"skipped": 1
},
"wall_seconds": 299.0
}
+1
View File
@@ -0,0 +1 @@
/mnt/storage/scratch/tmp/gn8bsPt
@@ -0,0 +1,388 @@
TAP version 13
# Subtest: row278 browser lists held claims and release preserves role rows and totals
ok 1 - row278 browser lists held claims and release preserves role rows and totals
---
duration_ms: 605.442749
type: 'test'
...
1..1
# tests 1
# suites 0
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 720.520615
TAP version 13
# Subtest: row278 browser lists held claims and release preserves role rows and totals
not ok 1 - row278 browser lists held claims and release preserves role rows and totals
---
duration_ms: 3560.890687
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:39:1'
failureType: 'testCodeFailure'
error: "Uncaught (in promise) Error: !!document.querySelector('#b-thread-claims'): undefined"
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async setup (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:33:3)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:40:49)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3682.526905
TAP version 13
# Subtest: row278 browser lists held claims and release preserves role rows and totals
not ok 1 - row278 browser lists held claims and release preserves role rows and totals
---
duration_ms: 577.050233
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:39:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
'2' !== '1'
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: '1'
actual: '2'
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:46:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 703.48697
TAP version 13
# Subtest: row278 browser claims 403 stays local and role section remains byte-equal
ok 1 - row278 browser claims 403 stays local and role section remains byte-equal
---
duration_ms: 662.131003
type: 'test'
...
1..1
# tests 1
# suites 0
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 780.998834
TAP version 13
# Subtest: row278 browser claims 403 stays local and role section remains byte-equal
not ok 1 - row278 browser claims 403 stays local and role section remains byte-equal
---
duration_ms: 3697.871789
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:55:1'
failureType: 'testCodeFailure'
error: `Uncaught (in promise) Error: document.querySelector('[aria-labelledby="b-thread-claims"] code')?.textContent==="human-required": undefined`
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:61:5)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3840.85204
TAP version 13
# Subtest: row278 tester socket refuses thread claims explicitly with zero bus calls
ok 1 - row278 tester socket refuses thread claims explicitly with zero bus calls
---
duration_ms: 13.92771
type: 'test'
...
1..1
# tests 1
# suites 0
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 124.707285
TAP version 13
# Subtest: row278 tester socket refuses thread claims explicitly with zero bus calls
not ok 1 - row278 tester socket refuses thread claims explicitly with zero bus calls
---
duration_ms: 14.582953
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims.test.mjs:46:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
200 !== 403
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 403
actual: 200
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims.test.mjs:51:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 129.872985
TAP version 13
# Subtest: row278 Console adapter calls argument-free thread.claims through the normal transport
ok 1 - row278 Console adapter calls argument-free thread.claims through the normal transport
---
duration_ms: 113.932137
type: 'test'
...
1..1
# tests 1
# suites 0
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 230.121832
TAP version 13
# Subtest: row278 Console adapter calls argument-free thread.claims through the normal transport
not ok 1 - row278 Console adapter calls argument-free thread.claims through the normal transport
---
duration_ms: 116.71152
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims.test.mjs:54:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly deep-equal:
+ actual - expected
[
{
args: [],
tester: false,
+ verb: 'agents'
- verb: 'thread.claims'
}
]
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected:
0:
verb: 'thread.claims'
args:
tester: false
actual:
0:
verb: 'agents'
args:
tester: false
operator: 'deepStrictEqual'
stack: |-
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims.test.mjs:67:10)
Test.runInAsyncScope (node:async_hooks:226:14)
Test.run (node:internal/test_runner/test:1402:25)
Test.start (node:internal/test_runner/test:1262:17)
startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 234.638433
TAP version 13
# Subtest: row278 browser claims 403 stays local and role section remains byte-equal
not ok 1 - row278 browser claims 403 stays local and role section remains byte-equal
---
duration_ms: 3622.781369
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:55:1'
failureType: 'testCodeFailure'
error: `Uncaught (in promise) Error: !!document.querySelector('.s1-stale') && document.querySelector('[aria-labelledby="b-thread-claims"] code')?.textContent==='not-read': undefined`
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:67:3)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3737.654687
{
"grant": "sage-2648",
"static": [
{
"id": "M1",
"file": "packages/webui/src/public/bus.js",
"occurrences": 1,
"before": "c0306a4db82c286826b157cceb036496666f58ce8073d14280e58c10377ed0d0",
"after": "e1b693b5ddf3cd55091dd4c0a47934ca22fe7851c6e942f2386a6eefdcb5a1a0"
},
{
"id": "M2",
"file": "packages/webui/src/public/bus.js",
"occurrences": 1,
"before": "c0306a4db82c286826b157cceb036496666f58ce8073d14280e58c10377ed0d0",
"after": "6a7274e2d2281ac2d927a00e6cabe72656f648f721607f0896cac107a4e22fdb"
},
{
"id": "M3",
"file": "packages/webui/src/public/bus.js",
"occurrences": 1,
"before": "c0306a4db82c286826b157cceb036496666f58ce8073d14280e58c10377ed0d0",
"after": "7c30c0cfa6908bc0946df325d417f726ea67373b8afffe72fd3aebcd6a52c52b"
},
{
"id": "M4",
"file": "packages/webui/src/serve.mjs",
"occurrences": 1,
"before": "aa25b50543b5bc632ac984e85b0d8b43b1c9af2d617bfc7c19351d07310f396d",
"after": "10324c3a22dbefac6286af4f06e53a6e8057aef56f744eaf7bdd879ac76626e1"
},
{
"id": "M5",
"file": "packages/webui/src/cli.mjs",
"occurrences": 1,
"before": "7ac85787f614aabce4b8eccef01fcdbf1018003e806c5de97d40f47c4041710a",
"after": "3fa30f91b19a1ea0348214b927925b163e51a6184b97910ded2dbc2282e1ddf6"
},
{
"id": "M6",
"file": "packages/webui/src/public/bus.js",
"occurrences": 1,
"before": "c0306a4db82c286826b157cceb036496666f58ce8073d14280e58c10377ed0d0",
"after": "c1c4f97a962d8da9055373ca7ac4441712c2c9f4ea675d7b137a3306d0621012"
}
],
"bases": {
"packages/webui/tests/thread-claims-browser.test.mjs|row278 browser lists held claims": {
"code": 0,
"timeout": false,
"seconds": 0.816,
"log": "agents/gander/work/queue-278/run3/changes/M1-base.log"
},
"packages/webui/tests/thread-claims-browser.test.mjs|row278 browser claims 403 stays local": {
"code": 0,
"timeout": false,
"seconds": 0.866,
"log": "agents/gander/work/queue-278/run3/changes/M3-base.log"
},
"packages/webui/tests/thread-claims.test.mjs|row278 tester socket refuses thread claims": {
"code": 0,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-278/run3/changes/M4-base.log"
},
"packages/webui/tests/thread-claims.test.mjs|row278 Console adapter calls argument-free": {
"code": 0,
"timeout": false,
"seconds": 0.315,
"log": "agents/gander/work/queue-278/run3/changes/M5-base.log"
}
},
"changes": [
{
"code": 1,
"timeout": false,
"seconds": 3.774,
"log": "agents/gander/work/queue-278/run3/changes/M1.log",
"id": "M1",
"base_seconds": 0.816,
"outcome": "killed"
},
{
"code": 1,
"timeout": false,
"seconds": 0.766,
"log": "agents/gander/work/queue-278/run3/changes/M2.log",
"id": "M2",
"base_seconds": 0.816,
"outcome": "killed"
},
{
"code": 1,
"timeout": false,
"seconds": 3.925,
"log": "agents/gander/work/queue-278/run3/changes/M3.log",
"id": "M3",
"base_seconds": 0.866,
"outcome": "killed"
},
{
"code": 1,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-278/run3/changes/M4.log",
"id": "M4",
"base_seconds": 0.214,
"outcome": "killed"
},
{
"code": 1,
"timeout": false,
"seconds": 0.315,
"log": "agents/gander/work/queue-278/run3/changes/M5.log",
"id": "M5",
"base_seconds": 0.315,
"outcome": "killed"
},
{
"code": 1,
"timeout": false,
"seconds": 3.823,
"log": "agents/gander/work/queue-278/run3/changes/M6.log",
"id": "M6",
"base_seconds": 0.866,
"outcome": "killed"
}
]
}
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row278 browser lists held claims", "packages/webui/tests/thread-claims-browser.test.mjs"]
@@ -0,0 +1,16 @@
TAP version 13
# Subtest: row278 browser lists held claims and release preserves role rows and totals
ok 1 - row278 browser lists held claims and release preserves role rows and totals
---
duration_ms: 605.442749
type: 'test'
...
1..1
# tests 1
# suites 0
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 720.520615
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row278 browser lists held claims", "packages/webui/tests/thread-claims-browser.test.mjs"]
@@ -0,0 +1,27 @@
TAP version 13
# Subtest: row278 browser lists held claims and release preserves role rows and totals
not ok 1 - row278 browser lists held claims and release preserves role rows and totals
---
duration_ms: 3560.890687
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:39:1'
failureType: 'testCodeFailure'
error: "Uncaught (in promise) Error: !!document.querySelector('#b-thread-claims'): undefined"
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async setup (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:33:3)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:40:49)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3682.526905
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row278 browser lists held claims", "packages/webui/tests/thread-claims-browser.test.mjs"]
@@ -0,0 +1,33 @@
TAP version 13
# Subtest: row278 browser lists held claims and release preserves role rows and totals
not ok 1 - row278 browser lists held claims and release preserves role rows and totals
---
duration_ms: 577.050233
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:39:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
'2' !== '1'
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: '1'
actual: '2'
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:46:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 703.48697
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row278 browser claims 403 stays local", "packages/webui/tests/thread-claims-browser.test.mjs"]
@@ -0,0 +1,16 @@
TAP version 13
# Subtest: row278 browser claims 403 stays local and role section remains byte-equal
ok 1 - row278 browser claims 403 stays local and role section remains byte-equal
---
duration_ms: 662.131003
type: 'test'
...
1..1
# tests 1
# suites 0
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 780.998834
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row278 browser claims 403 stays local", "packages/webui/tests/thread-claims-browser.test.mjs"]
@@ -0,0 +1,26 @@
TAP version 13
# Subtest: row278 browser claims 403 stays local and role section remains byte-equal
not ok 1 - row278 browser claims 403 stays local and role section remains byte-equal
---
duration_ms: 3697.871789
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:55:1'
failureType: 'testCodeFailure'
error: `Uncaught (in promise) Error: document.querySelector('[aria-labelledby="b-thread-claims"] code')?.textContent==="human-required": undefined`
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:61:5)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3840.85204
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row278 tester socket refuses thread claims", "packages/webui/tests/thread-claims.test.mjs"]
@@ -0,0 +1,16 @@
TAP version 13
# Subtest: row278 tester socket refuses thread claims explicitly with zero bus calls
ok 1 - row278 tester socket refuses thread claims explicitly with zero bus calls
---
duration_ms: 13.92771
type: 'test'
...
1..1
# tests 1
# suites 0
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 124.707285
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row278 tester socket refuses thread claims", "packages/webui/tests/thread-claims.test.mjs"]
@@ -0,0 +1,33 @@
TAP version 13
# Subtest: row278 tester socket refuses thread claims explicitly with zero bus calls
not ok 1 - row278 tester socket refuses thread claims explicitly with zero bus calls
---
duration_ms: 14.582953
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims.test.mjs:46:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
200 !== 403
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 403
actual: 200
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims.test.mjs:51:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 129.872985
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row278 Console adapter calls argument-free", "packages/webui/tests/thread-claims.test.mjs"]
@@ -0,0 +1,16 @@
TAP version 13
# Subtest: row278 Console adapter calls argument-free thread.claims through the normal transport
ok 1 - row278 Console adapter calls argument-free thread.claims through the normal transport
---
duration_ms: 113.932137
type: 'test'
...
1..1
# tests 1
# suites 0
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 230.121832
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row278 Console adapter calls argument-free", "packages/webui/tests/thread-claims.test.mjs"]
@@ -0,0 +1,50 @@
TAP version 13
# Subtest: row278 Console adapter calls argument-free thread.claims through the normal transport
not ok 1 - row278 Console adapter calls argument-free thread.claims through the normal transport
---
duration_ms: 116.71152
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims.test.mjs:54:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly deep-equal:
+ actual - expected
[
{
args: [],
tester: false,
+ verb: 'agents'
- verb: 'thread.claims'
}
]
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected:
0:
verb: 'thread.claims'
args:
tester: false
actual:
0:
verb: 'agents'
args:
tester: false
operator: 'deepStrictEqual'
stack: |-
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims.test.mjs:67:10)
Test.runInAsyncScope (node:async_hooks:226:14)
Test.run (node:internal/test_runner/test:1402:25)
Test.start (node:internal/test_runner/test:1262:17)
startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 234.638433
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row278 browser claims 403 stays local", "packages/webui/tests/thread-claims-browser.test.mjs"]
@@ -0,0 +1,26 @@
TAP version 13
# Subtest: row278 browser claims 403 stays local and role section remains byte-equal
not ok 1 - row278 browser claims 403 stays local and role section remains byte-equal
---
duration_ms: 3622.781369
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:55:1'
failureType: 'testCodeFailure'
error: `Uncaught (in promise) Error: !!document.querySelector('.s1-stale') && document.querySelector('[aria-labelledby="b-thread-claims"] code')?.textContent==='not-read': undefined`
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:67:3)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3737.654687
@@ -0,0 +1,129 @@
{
"grant": "sage-2648",
"static": [
{
"id": "M1",
"file": "packages/webui/src/public/bus.js",
"occurrences": 1,
"before": "c0306a4db82c286826b157cceb036496666f58ce8073d14280e58c10377ed0d0",
"after": "e1b693b5ddf3cd55091dd4c0a47934ca22fe7851c6e942f2386a6eefdcb5a1a0"
},
{
"id": "M2",
"file": "packages/webui/src/public/bus.js",
"occurrences": 1,
"before": "c0306a4db82c286826b157cceb036496666f58ce8073d14280e58c10377ed0d0",
"after": "6a7274e2d2281ac2d927a00e6cabe72656f648f721607f0896cac107a4e22fdb"
},
{
"id": "M3",
"file": "packages/webui/src/public/bus.js",
"occurrences": 1,
"before": "c0306a4db82c286826b157cceb036496666f58ce8073d14280e58c10377ed0d0",
"after": "7c30c0cfa6908bc0946df325d417f726ea67373b8afffe72fd3aebcd6a52c52b"
},
{
"id": "M4",
"file": "packages/webui/src/serve.mjs",
"occurrences": 1,
"before": "aa25b50543b5bc632ac984e85b0d8b43b1c9af2d617bfc7c19351d07310f396d",
"after": "10324c3a22dbefac6286af4f06e53a6e8057aef56f744eaf7bdd879ac76626e1"
},
{
"id": "M5",
"file": "packages/webui/src/cli.mjs",
"occurrences": 1,
"before": "7ac85787f614aabce4b8eccef01fcdbf1018003e806c5de97d40f47c4041710a",
"after": "3fa30f91b19a1ea0348214b927925b163e51a6184b97910ded2dbc2282e1ddf6"
},
{
"id": "M6",
"file": "packages/webui/src/public/bus.js",
"occurrences": 1,
"before": "c0306a4db82c286826b157cceb036496666f58ce8073d14280e58c10377ed0d0",
"after": "c1c4f97a962d8da9055373ca7ac4441712c2c9f4ea675d7b137a3306d0621012"
}
],
"bases": {
"packages/webui/tests/thread-claims-browser.test.mjs|row278 browser lists held claims": {
"code": 0,
"timeout": false,
"seconds": 0.816,
"log": "agents/gander/work/queue-278/run3/changes/M1-base.log"
},
"packages/webui/tests/thread-claims-browser.test.mjs|row278 browser claims 403 stays local": {
"code": 0,
"timeout": false,
"seconds": 0.866,
"log": "agents/gander/work/queue-278/run3/changes/M3-base.log"
},
"packages/webui/tests/thread-claims.test.mjs|row278 tester socket refuses thread claims": {
"code": 0,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-278/run3/changes/M4-base.log"
},
"packages/webui/tests/thread-claims.test.mjs|row278 Console adapter calls argument-free": {
"code": 0,
"timeout": false,
"seconds": 0.315,
"log": "agents/gander/work/queue-278/run3/changes/M5-base.log"
}
},
"changes": [
{
"code": 1,
"timeout": false,
"seconds": 3.774,
"log": "agents/gander/work/queue-278/run3/changes/M1.log",
"id": "M1",
"base_seconds": 0.816,
"outcome": "killed"
},
{
"code": 1,
"timeout": false,
"seconds": 0.766,
"log": "agents/gander/work/queue-278/run3/changes/M2.log",
"id": "M2",
"base_seconds": 0.816,
"outcome": "killed"
},
{
"code": 1,
"timeout": false,
"seconds": 3.925,
"log": "agents/gander/work/queue-278/run3/changes/M3.log",
"id": "M3",
"base_seconds": 0.866,
"outcome": "killed"
},
{
"code": 1,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-278/run3/changes/M4.log",
"id": "M4",
"base_seconds": 0.214,
"outcome": "killed"
},
{
"code": 1,
"timeout": false,
"seconds": 0.315,
"log": "agents/gander/work/queue-278/run3/changes/M5.log",
"id": "M5",
"base_seconds": 0.315,
"outcome": "killed"
},
{
"code": 1,
"timeout": false,
"seconds": 3.823,
"log": "agents/gander/work/queue-278/run3/changes/M6.log",
"id": "M6",
"base_seconds": 0.866,
"outcome": "killed"
}
]
}
@@ -0,0 +1 @@
2026-10-22T12:31:45Z
@@ -0,0 +1,169 @@
TAP version 13
# Subtest: row278 HTTP read returns held claims without send and refuses arguments before the bus
ok 1 - row278 HTTP read returns held claims without send and refuses arguments before the bus
---
duration_ms: 30.943221
type: 'test'
...
# Subtest: row278 HTTP read preserves bus refusal and rejects a malformed result
ok 2 - row278 HTTP read preserves bus refusal and rejects a malformed result
---
duration_ms: 8.173781
type: 'test'
...
# Subtest: row278 tester socket refuses thread claims explicitly with zero bus calls
ok 3 - row278 tester socket refuses thread claims explicitly with zero bus calls
---
duration_ms: 4.541077
type: 'test'
...
# Subtest: row278 Console adapter calls argument-free thread.claims through the normal transport
ok 4 - row278 Console adapter calls argument-free thread.claims through the normal transport
---
duration_ms: 113.434013
type: 'test'
...
1..4
# tests 4
# suites 0
# pass 4
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 268.961809
TAP version 13
# Subtest: row278 browser lists held claims and release preserves role rows and totals
ok 1 - row278 browser lists held claims and release preserves role rows and totals
---
duration_ms: 650.460597
type: 'test'
...
# Subtest: row278 browser claims 403 stays local and role section remains byte-equal
ok 2 - row278 browser claims 403 stays local and role section remains byte-equal
---
duration_ms: 724.644513
type: 'test'
...
# Subtest: row278 browser renders only four escaped claim fields and never instance or other extras
ok 3 - row278 browser renders only four escaped claim fields and never instance or other extras
---
duration_ms: 565.740361
type: 'test'
...
# Subtest: row278 browser sign-out removes claims and prevents reuse of cached answers
ok 4 - row278 browser sign-out removes claims and prevents reuse of cached answers
---
duration_ms: 607.120628
type: 'test'
...
# Subtest: row278 tester browser keeps role rows without requesting the owner claims section
ok 5 - row278 tester browser keeps role rows without requesting the owner claims section
---
duration_ms: 561.1764
type: 'test'
...
# Subtest: row278 browser discards a late claims answer after sign-out
ok 6 - row278 browser discards a late claims answer after sign-out
---
duration_ms: 615.34577
type: 'test'
...
1..6
# tests 6
# suites 0
# pass 6
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3840.507537
TAP version 13
# Subtest: tokens.css and icons.svg are byte copies of docs/design
ok 1 - tokens.css and icons.svg are byte copies of docs/design
---
duration_ms: 6.354382
type: 'test'
...
# Subtest: JetBrains Mono files match the digests in their sources file, with the OFL text
ok 2 - JetBrains Mono files match the digests in their sources file, with the OFL text
---
duration_ms: 3.767539
type: 'test'
...
# Subtest: shipped strings are unchanged, and the web keeps its write boundary
ok 3 - shipped strings are unchanged, and the web keeps its write boundary
---
duration_ms: 2.60801
type: 'test'
...
# ROW191_LAYOUT {"width":1440,"height":1000,"controls":212.5,"tree":914,"main":914}
# Subtest: shell in a browser: System default, seeded states, 400px, focus and the Ctrl+K palette
ok 4 - shell in a browser: System default, seeded states, 400px, focus and the Ctrl+K palette
---
duration_ms: 5482.449405
type: 'test'
...
# Subtest: five states on Board, Inbox, Tasks, Agents and Trail
ok 5 - five states on Board, Inbox, Tasks, Agents and Trail
---
duration_ms: 2387.650792
type: 'test'
...
1..5
# tests 5
# suites 0
# pass 5
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 7989.37428
{
"grant": "sage-2648",
"stage": "focused",
"steps": [
{
"code": 0,
"timeout": false,
"seconds": 0.365,
"log": "agents/gander/work/queue-278/run3/focused/focused-0.log",
"name": "focused-0",
"expected_red": false,
"counts": {
"tests": 4,
"pass": 4,
"fail": 0,
"skipped": 0
}
},
{
"code": 0,
"timeout": false,
"seconds": 3.922,
"log": "agents/gander/work/queue-278/run3/focused/focused-1.log",
"name": "focused-1",
"expected_red": false,
"counts": {
"tests": 6,
"pass": 6,
"fail": 0,
"skipped": 0
}
},
{
"code": 0,
"timeout": false,
"seconds": 8.082,
"log": "agents/gander/work/queue-278/run3/focused/focused-2.log",
"name": "focused-2",
"expected_red": false,
"counts": {
"tests": 5,
"pass": 5,
"fail": 0,
"skipped": 0
}
}
]
}
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/webui/tests/thread-claims.test.mjs"]
@@ -0,0 +1,34 @@
TAP version 13
# Subtest: row278 HTTP read returns held claims without send and refuses arguments before the bus
ok 1 - row278 HTTP read returns held claims without send and refuses arguments before the bus
---
duration_ms: 30.943221
type: 'test'
...
# Subtest: row278 HTTP read preserves bus refusal and rejects a malformed result
ok 2 - row278 HTTP read preserves bus refusal and rejects a malformed result
---
duration_ms: 8.173781
type: 'test'
...
# Subtest: row278 tester socket refuses thread claims explicitly with zero bus calls
ok 3 - row278 tester socket refuses thread claims explicitly with zero bus calls
---
duration_ms: 4.541077
type: 'test'
...
# Subtest: row278 Console adapter calls argument-free thread.claims through the normal transport
ok 4 - row278 Console adapter calls argument-free thread.claims through the normal transport
---
duration_ms: 113.434013
type: 'test'
...
1..4
# tests 4
# suites 0
# pass 4
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 268.961809
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/webui/tests/thread-claims-browser.test.mjs"]
@@ -0,0 +1,46 @@
TAP version 13
# Subtest: row278 browser lists held claims and release preserves role rows and totals
ok 1 - row278 browser lists held claims and release preserves role rows and totals
---
duration_ms: 650.460597
type: 'test'
...
# Subtest: row278 browser claims 403 stays local and role section remains byte-equal
ok 2 - row278 browser claims 403 stays local and role section remains byte-equal
---
duration_ms: 724.644513
type: 'test'
...
# Subtest: row278 browser renders only four escaped claim fields and never instance or other extras
ok 3 - row278 browser renders only four escaped claim fields and never instance or other extras
---
duration_ms: 565.740361
type: 'test'
...
# Subtest: row278 browser sign-out removes claims and prevents reuse of cached answers
ok 4 - row278 browser sign-out removes claims and prevents reuse of cached answers
---
duration_ms: 607.120628
type: 'test'
...
# Subtest: row278 tester browser keeps role rows without requesting the owner claims section
ok 5 - row278 tester browser keeps role rows without requesting the owner claims section
---
duration_ms: 561.1764
type: 'test'
...
# Subtest: row278 browser discards a late claims answer after sign-out
ok 6 - row278 browser discards a late claims answer after sign-out
---
duration_ms: 615.34577
type: 'test'
...
1..6
# tests 6
# suites 0
# pass 6
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3840.507537
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/webui/tests/shell.test.mjs"]
@@ -0,0 +1,41 @@
TAP version 13
# Subtest: tokens.css and icons.svg are byte copies of docs/design
ok 1 - tokens.css and icons.svg are byte copies of docs/design
---
duration_ms: 6.354382
type: 'test'
...
# Subtest: JetBrains Mono files match the digests in their sources file, with the OFL text
ok 2 - JetBrains Mono files match the digests in their sources file, with the OFL text
---
duration_ms: 3.767539
type: 'test'
...
# Subtest: shipped strings are unchanged, and the web keeps its write boundary
ok 3 - shipped strings are unchanged, and the web keeps its write boundary
---
duration_ms: 2.60801
type: 'test'
...
# ROW191_LAYOUT {"width":1440,"height":1000,"controls":212.5,"tree":914,"main":914}
# Subtest: shell in a browser: System default, seeded states, 400px, focus and the Ctrl+K palette
ok 4 - shell in a browser: System default, seeded states, 400px, focus and the Ctrl+K palette
---
duration_ms: 5482.449405
type: 'test'
...
# Subtest: five states on Board, Inbox, Tasks, Agents and Trail
ok 5 - five states on Board, Inbox, Tasks, Agents and Trail
---
duration_ms: 2387.650792
type: 'test'
...
1..5
# tests 5
# suites 0
# pass 5
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 7989.37428
@@ -0,0 +1,48 @@
{
"grant": "sage-2648",
"stage": "focused",
"steps": [
{
"code": 0,
"timeout": false,
"seconds": 0.365,
"log": "agents/gander/work/queue-278/run3/focused/focused-0.log",
"name": "focused-0",
"expected_red": false,
"counts": {
"tests": 4,
"pass": 4,
"fail": 0,
"skipped": 0
}
},
{
"code": 0,
"timeout": false,
"seconds": 3.922,
"log": "agents/gander/work/queue-278/run3/focused/focused-1.log",
"name": "focused-1",
"expected_red": false,
"counts": {
"tests": 6,
"pass": 6,
"fail": 0,
"skipped": 0
}
},
{
"code": 0,
"timeout": false,
"seconds": 8.082,
"log": "agents/gander/work/queue-278/run3/focused/focused-2.log",
"name": "focused-2",
"expected_red": false,
"counts": {
"tests": 5,
"pass": 5,
"fail": 0,
"skipped": 0
}
}
]
}
@@ -0,0 +1,10 @@
PID PPID STARTED COMMAND
2880281 2880050 Thu Oct 22 11:23:49 2026 npm exec @model
2880282 2880050 Thu Oct 22 11:23:49 2026 npm exec chrome
2880283 2880050 Thu Oct 22 11:23:49 2026 node-MainThread
2880284 2880050 Thu Oct 22 11:23:49 2026 npm exec @playw
2880445 2880281 Thu Oct 22 11:23:50 2026 node-MainThread
2880487 2880284 Thu Oct 22 11:23:51 2026 node-MainThread
2880537 2880439 Thu Oct 22 11:23:51 2026 node-MainThread
2883251 2880050 Thu Oct 22 11:24:06 2026 codex-code-mode
2880439 2880282 Thu Oct 22 11:23:50 2026 chrome-devtools
@@ -0,0 +1,94 @@
TAP version 13
# Subtest: row278 HTTP read returns held claims without send and refuses arguments before the bus
not ok 1 - row278 HTTP read returns held claims without send and refuses arguments before the bus
---
duration_ms: 20.063315
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims.test.mjs:17:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
404 !== 200
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 200
actual: 404
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims.test.mjs:24:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 143.720167
TAP version 13
# Subtest: row278 browser lists held claims and release preserves role rows and totals
not ok 1 - row278 browser lists held claims and release preserves role rows and totals
---
duration_ms: 3570.99556
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:39:1'
failureType: 'testCodeFailure'
error: "Uncaught (in promise) Error: !!document.querySelector('#b-thread-claims'): undefined"
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async setup (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:33:3)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:40:49)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3691.203411
{
"grant": "sage-2648",
"stage": "red",
"steps": [
{
"code": 1,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-278/run3/red/red-0.log",
"name": "red-0",
"expected_red": true,
"counts": {
"tests": 1,
"pass": 0,
"fail": 1,
"skipped": 0
}
},
{
"code": 1,
"timeout": false,
"seconds": 3.773,
"log": "agents/gander/work/queue-278/run3/red/red-1.log",
"name": "red-1",
"expected_red": true,
"counts": {
"tests": 1,
"pass": 0,
"fail": 1,
"skipped": 0
}
}
]
}
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row278 HTTP read returns held claims", "packages/webui/tests/thread-claims.test.mjs"]
@@ -0,0 +1,33 @@
TAP version 13
# Subtest: row278 HTTP read returns held claims without send and refuses arguments before the bus
not ok 1 - row278 HTTP read returns held claims without send and refuses arguments before the bus
---
duration_ms: 20.063315
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims.test.mjs:17:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
404 !== 200
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 200
actual: 404
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims.test.mjs:24:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 143.720167
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row278 browser lists held claims", "packages/webui/tests/thread-claims-browser.test.mjs"]
@@ -0,0 +1,27 @@
TAP version 13
# Subtest: row278 browser lists held claims and release preserves role rows and totals
not ok 1 - row278 browser lists held claims and release preserves role rows and totals
---
duration_ms: 3570.99556
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:39:1'
failureType: 'testCodeFailure'
error: "Uncaught (in promise) Error: !!document.querySelector('#b-thread-claims'): undefined"
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async setup (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:33:3)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/webui/tests/thread-claims-browser.test.mjs:40:49)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3691.203411
@@ -0,0 +1,34 @@
{
"grant": "sage-2648",
"stage": "red",
"steps": [
{
"code": 1,
"timeout": false,
"seconds": 0.214,
"log": "agents/gander/work/queue-278/run3/red/red-0.log",
"name": "red-0",
"expected_red": true,
"counts": {
"tests": 1,
"pass": 0,
"fail": 1,
"skipped": 0
}
},
{
"code": 1,
"timeout": false,
"seconds": 3.773,
"log": "agents/gander/work/queue-278/run3/red/red-1.log",
"name": "red-1",
"expected_red": true,
"counts": {
"tests": 1,
"pass": 0,
"fail": 1,
"skipped": 0
}
}
]
}
@@ -0,0 +1 @@
2026-10-22T12:26:46Z
@@ -0,0 +1,54 @@
{
"timestamp": "2026-10-22T12:31:45.380268+00:00",
"count": 8,
"remaining": [
{
"pid": 2880281,
"comm": "npm exec @model",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
},
{
"pid": 2880282,
"comm": "npm exec chrome",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
},
{
"pid": 2880283,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
},
{
"pid": 2880284,
"comm": "npm exec @playw",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
},
{
"pid": 2880445,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
},
{
"pid": 2880487,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
},
{
"pid": 2880537,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
},
{
"pid": 2883251,
"comm": "codex-code-mode",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
}
],
"excluded_preexisting_infrastructure": [
{
"pid": 2880439,
"comm": "chrome-devtools",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
}
],
"note": "Read-only /proc cwd sweep over own worktree and this run TMPDIR; own ancestry excluded; PID2880439 pre-existing receipt in run1; no signalling."
}
@@ -0,0 +1,69 @@
{
"timestamp": "2026-10-22T12:31:45.380268+00:00",
"count": 0,
"remaining": [],
"excluded_preexisting_infrastructure": [
{
"pid": 2880439,
"comm": "chrome-devtools",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
},
{
"pid": 2880281,
"comm": "npm exec @model",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T11:23:49.740000+00:00",
"predates_run": true
},
{
"pid": 2880282,
"comm": "npm exec chrome",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T11:23:49.740000+00:00",
"predates_run": true
},
{
"pid": 2880283,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T11:23:49.740000+00:00",
"predates_run": true
},
{
"pid": 2880284,
"comm": "npm exec @playw",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T11:23:49.740000+00:00",
"predates_run": true
},
{
"pid": 2880445,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T11:23:50.780000+00:00",
"predates_run": true
},
{
"pid": 2880487,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T11:23:51.030000+00:00",
"predates_run": true
},
{
"pid": 2880537,
"comm": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T11:23:51.160000+00:00",
"predates_run": true
},
{
"pid": 2883251,
"comm": "codex-code-mode",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"started_utc": "2026-10-22T11:24:06.230000+00:00",
"predates_run": true
}
],
"note": "Read-only cwd sweep. Initial broad sweep retained as sweep-initial.json. Eight additional MCP/npm/code-mode infrastructure processes all started 11:23:49-11:24:06 UTC, before run3 start12:26:46 UTC; /proc start ticks and UTC ps receipt confirm. No signalling. Run-created leftovers0."
}
@@ -0,0 +1,60 @@
{
"grant": "sage-2648",
"stage": "syntax",
"steps": [
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-0.log",
"name": "syntax-0",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-1.log",
"name": "syntax-1",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-2.log",
"name": "syntax-2",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-3.log",
"name": "syntax-3",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-4.log",
"name": "syntax-4",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-6.log",
"name": "syntax-6",
"expected_red": false,
"counts": {}
}
]
}
@@ -0,0 +1,60 @@
{
"grant": "sage-2648",
"stage": "syntax",
"steps": [
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-0.log",
"name": "syntax-0",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-1.log",
"name": "syntax-1",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-2.log",
"name": "syntax-2",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-3.log",
"name": "syntax-3",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-4.log",
"name": "syntax-4",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 0.064,
"log": "agents/gander/work/queue-278/run3/syntax/syntax-6.log",
"name": "syntax-6",
"expected_red": false,
"counts": {}
}
]
}
@@ -0,0 +1 @@
["node", "--check", "packages/webui/src/cli.mjs"]
Whitespace-only changes.
@@ -0,0 +1 @@
["node", "--check", "packages/webui/src/serve.mjs"]
Whitespace-only changes.
@@ -0,0 +1 @@
["node", "--check", "packages/webui/src/public/bus.js"]
Whitespace-only changes.
@@ -0,0 +1 @@
["node", "--check", "packages/webui/tests/thread-claims.test.mjs"]
Whitespace-only changes.
@@ -0,0 +1 @@
["node", "--check", "packages/webui/tests/thread-claims-browser.test.mjs"]
Whitespace-only changes.
@@ -0,0 +1 @@
["node", "--check", "packages/webui/tests/shell.test.mjs"]
Whitespace-only changes.
File diff suppressed because it is too large. Load diff
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/bus/tests/"]
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,124 @@
{
"grant": "sage-2648",
"stage": "whole",
"steps": [
{
"code": 0,
"timeout": false,
"seconds": 22.463,
"log": "agents/gander/work/queue-278/run3/whole/bus.log",
"name": "bus",
"expected_red": false,
"counts": {
"tests": 793,
"pass": 793,
"fail": 0,
"skipped": 0
}
},
{
"code": 0,
"timeout": false,
"seconds": 56.982,
"log": "agents/gander/work/queue-278/run3/whole/webui.log",
"name": "webui",
"expected_red": false,
"counts": {
"tests": 346,
"pass": 345,
"fail": 0,
"skipped": 1
}
},
{
"code": 0,
"timeout": false,
"seconds": 0.816,
"log": "agents/gander/work/queue-278/run3/whole/test-auth.log",
"name": "test-auth",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 6.078,
"log": "agents/gander/work/queue-278/run3/whole/test-conductor.log",
"name": "test-conductor",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 1.868,
"log": "agents/gander/work/queue-278/run3/whole/test-config.log",
"name": "test-config",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 7.431,
"log": "agents/gander/work/queue-278/run3/whole/test-discord.log",
"name": "test-discord",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 1.366,
"log": "agents/gander/work/queue-278/run3/whole/test-extension-package.log",
"name": "test-extension-package",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 39.901,
"log": "agents/gander/work/queue-278/run3/whole/test-foundation.log",
"name": "test-foundation",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 11.338,
"log": "agents/gander/work/queue-278/run3/whole/test-land-work.log",
"name": "test-land-work",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 21.158,
"log": "agents/gander/work/queue-278/run3/whole/test-queue.log",
"name": "test-queue",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 2.67,
"log": "agents/gander/work/queue-278/run3/whole/test-release.log",
"name": "test-release",
"expected_red": false,
"counts": {}
},
{
"code": 0,
"timeout": false,
"seconds": 13.843,
"log": "agents/gander/work/queue-278/run3/whole/test-task.log",
"name": "test-task",
"expected_red": false,
"counts": {}
}
]
}
@@ -0,0 +1 @@
["timeout", "-k", "10", "126", "bash", "scripts/test-auth.sh"]
@@ -0,0 +1,17 @@
OK status with missing harness credential exits 3 and still lists accounts
OK status reports harness credential (read-only) + mosaic accounts
OK api key material never reaches output
OK oauth token material never reaches output
OK unparseable credential file exits 2
OK symlinked credential file exits 4
OK env-side credential names reported
OK env var values never reach output
OK accounts without an accounts dir reports none and creates nothing
OK accounts lists files and marks the active one
OK loose account perms flagged in listing
OK agent --auth with missing account file refuses (exit 4)
OK agent --auth with non-0600 account file refuses
OK agent --auth with invalid account name refuses
OK auth.sh without valid config refuses
selftest: 15 passed, 0 failed
@@ -0,0 +1 @@
["timeout", "-k", "10", "145", "bash", "scripts/test-conductor.sh"]
@@ -0,0 +1,23 @@
On branch gander/row278-b
Your branch is up to date with 'origin/gander/row278-b'.
nothing to commit, working tree clean
OK dry-run: allowed change, exit 0, nothing committed (exit 0)
OK dry-run committed nothing
OK apply: allowed change exits 0 (exit 0)
OK apply: attribution in commit subject
OK apply: target tree clean after commit
OK disallowed path refused (exit 1)
OK disallowed path: target untouched
OK syntax gate refused broken .mjs (exit 1)
OK syntax gate: target untouched
OK suite failure refused (exit 1)
OK suite failure: target reverted to clean
OK disabled policy refused (exit 2)
OK disabled policy: target untouched
OK failed run refused (exit 1)
OK failed run: target untouched
OK missing run exits 4 (exit 4)
OK invalid policy exits 2 (exit 2)
selftest: 17 passed, 0 failed
@@ -0,0 +1 @@
["timeout", "-k", "10", "130", "bash", "scripts/test-config.sh"]
@@ -0,0 +1,33 @@
OK absent adapter defaults to pi
OK adapter mock validates (exit 0)
OK unsupported adapter exits 2 (exit 2)
OK env exports adapter
OK bootstrap creates default when absent (exit 0)
OK bootstrap wrote config file
OK bootstrap is idempotent on existing config (exit 0)
OK bootstrap did not rewrite existing config
OK validate missing config exits 3 (exit 3)
OK malformed JSON exits 2 (exit 2)
OK unsupported configVersion exits 2 (exit 2)
OK unknown top-level key exits 2 (exit 2)
OK unknown execution key exits 2 (exit 2)
OK unsupported backend exits 2 (exit 2)
OK unsupported environment exits 2 (exit 2)
OK relative dataRoot exits 2 (exit 2)
OK non-canonical dataRoot exits 2 (exit 2)
OK filesystem root dataRoot exits 2 (exit 2)
OK home directory dataRoot exits 2 (exit 2)
OK dataRoot containing config dir exits 2 (exit 2)
OK control character in provider exits 2 (exit 2)
OK symlinked config file exits 2 (exit 2)
OK env exports resolve correctly
OK valid console.sso loads and is in the output
OK console.sso HS256 alg exits 2 naming the path (exit 2)
OK console.sso alg none exits 2 naming the path (exit 2)
OK console.sso missing slot field exits 2 naming the path (exit 2)
OK console.sso slot name outside the pattern exits 2 naming the path (exit 2)
OK unknown key under console exits 2 naming the path (exit 2)
OK config without console loads with unchanged output
OK failed validation modified nothing
selftest: 31 passed, 0 failed
@@ -0,0 +1 @@
["timeout", "-k", "10", "147", "bash", "scripts/test-discord.sh"]
@@ -0,0 +1,85 @@
toolchain: node v26.8.1
OK syntax: packages/discord/src/approvals.mjs
OK syntax: packages/discord/src/authorize.mjs
OK syntax: packages/discord/src/binding.mjs
OK syntax: packages/discord/src/cli.mjs
OK syntax: packages/discord/src/connector.mjs
OK syntax: packages/discord/src/context.mjs
OK syntax: packages/discord/src/engine-pi.mjs
OK syntax: packages/discord/src/errors.mjs
OK syntax: packages/discord/src/gateway.mjs
OK syntax: packages/discord/src/git.mjs
OK syntax: packages/discord/src/journal.mjs
OK syntax: packages/discord/src/notify.mjs
OK syntax: packages/discord/src/processing.mjs
OK syntax: packages/discord/src/rest.mjs
OK syntax: packages/discord/src/setspark.mjs
OK syntax: packages/discord/src/tools.mjs
OK syntax: packages/discord/src/web.mjs
OK syntax: packages/discord/bin/git-credential.mjs
OK syntax: packages/discord/extension/tools.mjs
OK syntax: packages/discord/tests/approvals.test.mjs
OK syntax: packages/discord/tests/authorize.test.mjs
OK syntax: packages/discord/tests/binding.test.mjs
OK syntax: packages/discord/tests/connector.test.mjs
OK syntax: packages/discord/tests/context.test.mjs
OK syntax: packages/discord/tests/copy-service.test.mjs
OK syntax: packages/discord/tests/engine.test.mjs
OK syntax: packages/discord/tests/fake-pi.mjs
OK syntax: packages/discord/tests/gateway.test.mjs
OK syntax: packages/discord/tests/git.test.mjs
OK syntax: packages/discord/tests/helpers.mjs
OK syntax: packages/discord/tests/journal.test.mjs
OK syntax: packages/discord/tests/notify.test.mjs
OK syntax: packages/discord/tests/offline-check.test.mjs
OK syntax: packages/discord/tests/processing-stop.test.mjs
OK syntax: packages/discord/tests/processing.test.mjs
OK syntax: packages/discord/tests/recover.test.mjs
OK syntax: packages/discord/tests/rest.test.mjs
OK syntax: packages/discord/tests/setspark.test.mjs
OK syntax: packages/discord/tests/tools.test.mjs
OK syntax: packages/discord/tests/web.test.mjs
OK syntax: packages/discord/fixtures/claim-worker.mjs
OK syntax: packages/discord/fixtures/legacy-owner-worker.mjs
OK syntax: scripts/discord.sh
OK syntax: scripts/discord-service.sh
OK packages/discord declares no dependencies
OK no bot-token-shaped string in packages/discord
OK fixture binding uses placeholder ids only
OK fixture binding validates
OK real pi with the extension exposes exactly list_dir, read_file, search and no built-in tool
OK real pi with a writable root exposes exactly the three reads plus write_file and edit_file, and writes nothing at start
OK real pi with a web key exposes the three reads plus web_fetch and web_search, and no write tool without a writable root
OK real pi with a git root exposes the reads, writes and the four git verbs, commits nothing at start, and never shows the token
OK real pi with protocol vault adds reserve_id to the git verbs
OK real pi with a setspark key exposes the reads and the eight record verbs, no counters, and never shows the key
OK real pi refuses a git key on a read-only root (fail closed)
OK real pi with the pilot flags (--no-tools) exposes no tool at all
OK real pi exits non-zero without MOSAIC_DISCORD_TOOLS: no session, no tools (fail closed)
OK a failing nested test fails the run under a parent runner's NODE_TEST_CONTEXT
OK node --test packages/discord/tests/ (ℹ pass 192)
OK scripts/discord.sh --help exits 0
OK scripts/discord.sh check without a binding exits 4
OK scripts/discord.sh recover without a binding exits 4
OK scripts/discord.sh reload without a binding exits 4
OK scripts/discord-service.sh without a command exits 4
OK service unit renders with the repository path, a supervised run as the main process, exit 3 never retried, and reload as SIGHUP
OK service install writes the rendered unit (0644) and leaves no temp file
OK service install a second time reports unchanged
OK systemd-analyze verify accepts the rendered unit
OK service uninstall removes the unit file
OK service install with an unknown flag exits 4
OK service install with USER unset finishes and names the account for lingering
OK pinned render runs copy CLI with copy cwd/repo and no checkout executable
OK pinned install writes the rendered unit in a temporary unit directory
OK pinned install refuses short prerequisite and writes no unit
OK pinned install refuses missing prerequisite and writes no unit
OK pinned install refuses cli prerequisite and writes no unit
OK pinned install refuses pi prerequisite and writes no unit
OK status names the copy from fake systemctl effective cwd
OK checkout install explicitly recommends --copy
OK wrapper check --offline passes local fixture and makes no network call
OK wrapper run --offline refuses usage
discord suite: 81 passed, 0 failed
@@ -0,0 +1 @@
["timeout", "-k", "10", "130", "bash", "scripts/test-extension-package.sh"]
@@ -0,0 +1,21 @@
OK initial ordinary-file install
OK installed tree matches canonical source
OK installed tree has no symlinks
OK check detects installation drift
OK sync refuses to overwrite installation drift
OK check detects an extra destination file
OK check detects an extra destination directory
OK check rejects a destination symlink
OK sync accepts a canonical source update
OK updated installation matches canonical source
scripts/test-extension-package.sh: line 14: 134460 Killed "$@" > /dev/null 2>&1
OK forced interruption kills the replacing process
OK next invocation recovers old consistent installation
OK interrupted replacement rolled back
OK sync succeeds after interruption recovery
OK unlocked stale lock file does not block
OK active lock refuses a concurrent sync
OK source symlink fails closed
OK nested second entrypoint fails closed
extension package selftest: 18 passed, 0 failed
@@ -0,0 +1 @@
["timeout", "-k", "10", "240", "bash", "scripts/test-foundation.sh"]
@@ -0,0 +1,53 @@
toolchain: node v26.8.1, python 3.12.8, jsonschema 4.26.0
OK syntax: scripts/foundation-inspect.mjs
OK syntax: scripts/foundation/strict-json.mjs
OK syntax: scripts/foundation/canonical.mjs
OK syntax: scripts/foundation/resolve.mjs
OK syntax: scripts/foundation/validate-record.mjs
OK syntax: scripts/foundation/fixtures/build-fixtures.mjs
OK syntax: scripts/foundation/canonical.test.mjs
OK syntax: scripts/foundation/cli.test.mjs
OK syntax: scripts/foundation/fixtures.test.mjs
OK syntax: scripts/foundation/resolve.test.mjs
OK syntax: scripts/foundation/strict-json.test.mjs
OK syntax: scripts/foundation/verify-schema.py (ast only; no bytecode written)
OK fixture generator runs
OK checked-in fixtures/bundles equal a fresh generation
OK checked-in fixtures/raw equal a fresh generation
OK checked-in fixtures/index.json equal a fresh generation
OK checked-in demo bundles equal a fresh generation
OK a failing nested test fails the run under a parent runner's NODE_TEST_CONTEXT
OK node --test scripts/foundation/ (ℹ pass 80)
OK differential schema oracle: PASS: differential schema oracle (finite corpus; compatibility evidence, not equivalence proof)
platform witness: strftime('%Y') for year 999 -> '999' (pinned checker refuses years 0001..0999)
node v26.8.1; corpus 1568 records (38 pinned fixtures, 478 unique bundle records, 1052 typeCase/mutation/lexical cases)
schema column: agree-valid 540, agree-invalid 991, DISAGREEMENTS 0; strict-only (parser-bound) cases: 27; unsupported-kind records not schema-assessed by the inspector: 10
profile column (schema-valid records only): profile-valid 510, profile-invalid 30
profile refusals asserted: 30 schema-agreed-valid records refused only by the strict typed-string profile (rule profile-pattern-mismatch), 12 declared by name; 73 named probes verified against declared schema/profile columns
OK oracle: zero schema-column disagreements with the pinned checker
OK oracle: strict-only profile refusals are counted and asserted
OK demo: permitted read preview exits 0 (exit 0)
OK demo: permitted file.change preview exits 0 (exit 0)
OK demo: assignment.change proposal is unresolved (exit 3) (exit 3)
OK demo: revoked registration is refused (exit 3) (exit 3)
OK demo: message is not authority (exit 3) (exit 3)
OK usage: no arguments exits 2 (exit 2)
OK io: missing file exits 4 (exit 4)
OK io: directory exits 4 (exit 4)
OK io: symlink exits 4 (O_NOFOLLOW) (exit 4)
OK bound: oversize fixture exits 2 (exit 2)
OK profile: one final LF in a typed selection id is refused before admission (exit 2) (exit 2)
OK profile: two final LFs fail the schema pattern itself (exit 2) (exit 2)
OK profile: escaped newlines in free-form text stay allowed (exit 0) (exit 0)
OK profile refusal is invalid-request/profile-pattern-mismatch with selection and operation withheld, value not echoed
OK text output starts with the disclaimer
OK json output is valid JSON with result allowed and exactly the charter §7 fields
OK json golden matches byte-for-byte
OK sandboxed bundle run (env -i, PATH=/nonexistent) produced the unresolved proposal
OK sandbox inventory (path/type/size/mode/uid/gid/inode/mtime/sha256) unchanged by runs
OK canary never printed (bundle run and credential-file run)
OK a non-bundle JSON file is refused at the shape gate, not read into output
OK no field of the non-bundle file is echoed
selftest: 44 passed, 0 failed
@@ -0,0 +1 @@
["timeout", "-k", "10", "158", "bash", "scripts/test-land-work.sh"]
@@ -0,0 +1,88 @@
OK args: exit 2, target-branch
OK args: exit 2, target-branch
OK args: exit 4
OK args: exit 4
OK args: exit 4
OK --base next refuses before the config is read (got 2)
OK a missing system config exits 3 (got 3)
OK nobus: exit 3
OK schema-table: exit 2, bus-schema
OK schema-meta: exit 2, bus-schema
OK openBus opens the database read-only
OK other-business: exit 2, decision-not-found
OK no-raise: exit 2, decision-not-found
OK not-a-merge: exit 2, not-a-merge
OK open: exit 2, not-resolved
OK withdrawn: exit 2, not-resolved
OK by-agent: exit 2, not-human
OK via-webui: exit 2, not-human
OK no-answer: exit 2, not-human
OK answer-role: exit 2, not-human
OK answer-run: exit 2, not-human
OK answer-choice: exit 2, not-human
OK two-answers: exit 2, not-human
OK arbiter-cross: exit 2, not-human
OK arbiter-cited: exit 2, not-human
OK chose-no: exit 2, not-merge-option
OK two-refs: exit 2, work-ref
OK bad-ref: exit 2, work-ref
OK task-ref-disagrees: exit 2, work-ref
OK raise-task-disagrees: exit 2, work-ref
OK target-main: exit 2, target-branch
OK superseded-question: exit 2, superseded
OK superseded-task: exit 2, superseded
OK superseded-by: exit 2, superseded
OK no-verdict: exit 2, no-verdict
OK changes-later: exit 2, not-approved
OK short-commit: exit 2, not-approved
OK wrong-task-body: exit 2, not-approved
OK args: exit 2, decision-not-found
OK earlier-merge: exit 0
OK ref-moved: exit 2, ref-moved
OK root-top: exit 2, root-file
OK root-newdir: exit 2, root-file
OK root-src: exit 2, root-file
OK unrelated: exit 2, base-conflict
OK empty: exit 2, base-conflict
OK an empty reviewed diff says so
OK dirty-changed: exit 2, checkout-dirty
OK dirty-staged: exit 2, checkout-dirty
OK dirty-untracked: exit 2, checkout-dirty
OK conflict: exit 2, base-conflict
OK a refusal after the worktree is added leaves no worktree or scratch
OK cleanup looks for the worktree's Docker network
OK dirty-during: exit 2, checkout-dirty
OK a reviewed path dirtied during the gate moves no ref
OK drift: exit 2, patch-drift
OK patch-drift leaves no worktree or scratch
OK gate-pkg: exit 2, gate-failed
OK gate-failed names the failing step's log, and it exists
OK gate-failed leaves no worktree or scratch
OK gate-script: exit 2, gate-failed
OK a failing scripts/test-*.sh fails the gate
OK a failed gate moves no ref
OK nomods: exit 4
OK a target without node_modules leaves no worktree or scratch
OK moved: exit 2, base-moved
OK base-moved keeps the base where it moved to
OK dry: exit 0
OK --dry-run writes no ref
OK --dry-run prints the commit with --subject and --attribution
OK --dry-run runs the gate
OK --dry-run leaves no worktree or scratch
OK land: exit 0
OK the landing is one commit on the old base
OK its diff is the reviewed diff by patch-id
OK its tree is the dry run's
OK the message has the option's subject, the citations and the attribution last
OK it prints the line for the PM
OK the checked-out base has the reviewed paths and keeps the unrelated edit
OK only refs/heads/refactor exists in the target
OK the work ref is unchanged
OK the bus database is unchanged
OK the gate ran each package suite but queue, and each scripts/test-*.sh
OK the landing leaves no worktree or scratch
OK the target's node_modules is still there, with its contents
OK the worktree's Docker network is removed
---
land-work selftests: 86 passed, 0 failed
@@ -0,0 +1 @@
["timeout", "-k", "10", "191", "bash", "scripts/test-queue.sh"]
@@ -0,0 +1,36 @@
toolchain: node v26.8.1, git version 2.55.0
OK syntax: packages/queue/src/cli.mjs
OK syntax: packages/queue/src/errors.mjs
OK syntax: packages/queue/src/io.mjs
OK syntax: packages/queue/src/lock.mjs
OK syntax: packages/queue/src/queue.mjs
OK syntax: packages/queue/src/review.mjs
OK syntax: packages/queue/src/store.mjs
OK syntax: packages/queue/tests/commit.test.mjs
OK syntax: packages/queue/tests/data.test.mjs
OK syntax: packages/queue/tests/dispatch.test.mjs
OK syntax: packages/queue/tests/gate-owner.test.mjs
OK syntax: packages/queue/tests/helpers.mjs
OK syntax: packages/queue/tests/lock.test.mjs
OK syntax: packages/queue/tests/migration.test.mjs
OK syntax: packages/queue/tests/review.test.mjs
OK syntax: packages/queue/tests/store.test.mjs
OK syntax: packages/queue/tests/write.test.mjs
OK syntax: packages/queue/tests/fixtures/fake-gitea.mjs
OK syntax: packages/queue/tests/fixtures/kill-at.mjs
OK syntax: packages/queue/tests/fixtures/lock-child.mjs
OK syntax: packages/queue/tests/fixtures/mosaic-pre-a2.sh
OK syntax: scripts/queue-commit.sh
OK syntax: scripts/git-hooks/pre-commit
OK syntax: scripts/mosaic
OK queue-commit.sh, the guard and scripts/mosaic are executable
OK packages/queue declares no dependencies
ℹ tests 156
ℹ pass 156
ℹ fail 0
OK node --test packages/queue/tests/
OK scripts/mosaic queue help
skip queue verify and render --check: this checkout (/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196) is not the queue's canonical root (/mnt/storage/src/mosaic-stack)
queue suite: 28 passed, 0 failed
@@ -0,0 +1 @@
["timeout", "-k", "10", "157", "bash", "scripts/test-release.sh"]
@@ -0,0 +1,16 @@
OK valid RELEASE resolves (exit 0)
OK invalid RELEASE exits 1 (exit 1)
OK missing RELEASE exits 1 (exit 1)
OK valid RELEASE leaves image tag consistent with version
OK status safe on empty state (exit 0)
OK status created no pointer
OK fault-injected activation refuses (exit 1)
OK refused activation wrote no pointer
OK refusal logged exactly once with valid fields
OK healthy activation succeeds (exit 0)
OK pointer written with valid fields
OK repeat activation succeeds (log grows) (exit 0)
OK log is append-only across activations
OK rollback without previous refuses (exit 1)
selftest: 14 passed, 0 failed
@@ -0,0 +1 @@
["timeout", "-k", "10", "231", "bash", "scripts/test-task.sh"]
@@ -0,0 +1,96 @@
OK valid task validates (exit 0)
OK unknown task key exits 2 (exit 2)
OK unsupported taskVersion exits 2 (exit 2)
OK invalid task id exits 2 (exit 2)
OK empty prompt exits 2 (exit 2)
OK NUL in expectExact exits 2 (exit 2)
OK out-of-range timeout exits 2 (exit 2)
OK missing mission file exits 4 (exit 4)
OK task with valid mission validates (exit 0)
OK invalid mission exits 2 (exit 2)
OK validate missing task exits 4 (exit 4)
OK validation does not modify the task file
OK prune dry-run exits 0 (exit 0)
OK dry-run deleted nothing
OK prune --keep=2 --yes removes oldest (exit 0)
OK kept exactly 2 newest runs
OK newest run kept, oldest pruned
OK append-only receipt written (3 entries)
OK sessions/workspaces untouched by prune
OK prune with invalid keep exits 4 (exit 4)
OK mock adapter: gate passes on matching mock response (exit 0)
OK mock adapter: expect-mismatch recorded (exit 1)
OK mismatch reason recorded
OK unknown adapter fails closed (exit 1)
OK mission task runs via mock adapter (exit 0)
OK mission section injected into generated prompt
OK retry of mission run succeeds (exit 0)
OK retriedFrom lineage recorded
OK mission section present after retry (relative path resolved)
OK retry of missing run exits 4 (exit 4)
OK skill install bundled ms-tools (exit 0)
OK installed to skills-available
OK double install refuses (exit 1)
OK activate enables skill (exit 0)
OK enabled dir populated
OK uninstall while enabled refuses (exit 1)
OK deactivate moves back to available (exit 0)
OK uninstall removes from available (exit 0)
OK seat with enabled skill launches
OK skill path delivered to adapter
OK shipped researcher contract resolves (ceiling + network)
OK resolve-role refuses a non-role document (conductor policy) (exit 2)
OK resolve-role refuses name/filename mismatch (exit 2)
OK resolve-role refuses unknown network declaration (exit 2)
OK resolve-role refuses duplicate role tool (exit 2)
OK resolve-role refuses unsupported tool (exit 2)
OK resolve-role refuses missing contract file (exit 4)
OK version 1 role prints no contract line
OK shipped version 2 roles resolve with their contracts (pm, cto, coder, reviewer)
OK resolve-role accepts a minimal version 2 role (exit 0)
OK resolve-role refuses an action outside the vocabulary (exit 2)
OK resolve-role refuses a gated-only action in a role file (exit 2)
OK resolve-role refuses a Vikunja verb no role may hold (exit 2)
OK resolve-role refuses a version 2 role whose contract is missing (exit 2)
OK resolve-role refuses a contract that is a symbolic link (exit 2)
OK seat launches under role ceiling
OK role ceiling narrows seat tools (read,write,bash -> read,bash)
OK narrowing recorded loudly
OK missing role contract refuses launch (exit 2)
OK missing-contract refusal names the role
OK empty ceiling intersection -> tool-free seat
OK tool-free outcome recorded loudly
OK overridden agents dir without seat definition refuses (exit 4)
OK seat-resolution refusal names the seat
OK policy: mission only -> mission tools
OK policy: task only -> task tools
OK policy: both -> intersection (task narrowed)
OK policy: empty intersection -> tool-free
OK invalid mission capabilities rejected (exit 2)
mosaic-task: unsupported mission tool: "sudo" (supported: read, write, edit, bash, grep, find, ls)
OK task run with user layer present (exit 0)
OK user context dispatched into generated prompt
OK workspace+tools task runs via mock (exit 0)
OK workspace path + tools delivered to adapter
OK persistent workspace created on host
OK plain task still runs (no workspace/tools) (exit 0)
OK workspace var present but empty when absent
OK tools empty when absent
OK unknown tool exits 2 (exit 2)
OK workspace traversal exits 2 (exit 2)
OK hello task succeeds with exact marker
OK result.json written in run dir
OK result.json contents are correct
OK wrong expectExact fails with exit 1 (reason: expect-mismatch)
OK each run gets a distinct run dir (no clobber)
OK list shows both runs
skip live provider cases (row 244: no provider call in the gate)
OK onboard without name exits 4 (non-interactive) (exit 4)
OK onboard --name renders profile (exit 0)
OK profile written
OK canon structure: required filled, optional placeholdered
OK canon sections present
skip live provider cases (row 244: no provider call in the gate)
OK no agent identity on headless run
selftest: 91 passed, 0 failed
@@ -0,0 +1 @@
["timeout", "-k", "10", "300", "node", "--test", "--test-reporter=tap", "packages/webui/tests/"]
File diff suppressed because it is too large. Load diff
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env python3
"""Read-only post-run cwd/process sweep; never signals a process."""
import datetime, json, os
from pathlib import Path
HERE=Path(__file__).resolve().parent
repo=HERE.parents[3]
run=HERE/'run3'
tmp=Path((run/'TMPDIR').read_text().strip())
ancestors=set()
pid=os.getpid()
while pid and pid not in ancestors:
ancestors.add(pid)
try:
status=Path(f'/proc/{pid}/status').read_text()
pid=int(next(s.split(':')[1] for s in status.splitlines() if s.startswith('PPid:')))
except (OSError,StopIteration): break
remaining=[]
excluded=[]
for proc in Path('/proc').iterdir():
if not proc.name.isdigit() or int(proc.name) in ancestors: continue
try:
cwd=(proc/'cwd').resolve(strict=True)
if not (cwd==repo or repo in cwd.parents or cwd==tmp or tmp in cwd.parents): continue
comm=(proc/'comm').read_text().strip()
item=dict(pid=int(proc.name),comm=comm,cwd=str(cwd))
if item['pid']==2880439 and comm.startswith('chrome-devtools'):
excluded.append(item)
else: remaining.append(item)
except (OSError,ValueError): 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 over own worktree and this run TMPDIR; own ancestry excluded; PID2880439 pre-existing receipt in run1; no signalling.')
(run/'sweep.json').write_text(json.dumps(result,indent=2)+'\n')
print(json.dumps(result,indent=2))