gander: record fourth gate busy preflight stop

This commit is contained in:
jason.woltje committed 2026-10-21 14:48:43 -05:00
1 parent 91e3696efd
commit 05e940117f
12 files changed
+2664

No files matched your search

+4
View File
@@ -107,3 +107,7 @@ changes are planned before the batch. M1-M29 remain prepared and unexecuted.
2026-10-21 sage-2072/2077 driver: unique string-target guard preflights every definition before any tests and before creating scratch state; M28 names without_proof, M28b names kept, M5 names the parse catch, M25 names append flags, M29 uses the unique full line. Static audit accepts all 30 definitions; zero/duplicate targets refuse. Against 64539c96b, M5 old/narrowed bytes match; M25 differs and joins the next batch. No mutation tests ran in this static check.
2026-10-21 mos-1198 r5: row 215 landed ahead of row 196; its library CLI fixture retained --tester-port, a semantic conflict despite the callback code merging. The sole test change switches activation to --tester-socket. The test name and every original assertion remain byte-identical; the existing startServer hook still captures both listener callback pairs. No product file changed. No test run before Sage's fourth-run grant; Duckworth reviews this hunk.
2026-10-21 fourth-run preflight, sage-2113: no predicted test reds. The prior editor rebuild skip may remain because shared esbuild is 0.28.1 while the test requires 0.28.2. Legacy case1/case2 tester-port consumers remain follow-up scope per mos-1198; their contract tests use stand-ins. The fourth run covers WebUI and CLI whole, eight union files and every scripts/test-*.sh. No product edit or dependency install.
2026-10-21 fourth-run stop, sage-2113/2120 at 91e3696ef: WebUI whole passed 304/0 with one existing editor skip in 112.142839 seconds. CLI did not start: busy preflight detected Sage queue add sage-2122a (PID 2054449) and refused, 1.612991 seconds. No extra files or shell tests started. No rerun; simultaneous report gander-0052 to Sage and Mos returned the slot. Sweep found zero gate leftovers and eight pre-existing harness helpers. Product tracked tree clean. Records: r5/gate/.
+2
View File
@@ -26,3 +26,5 @@ sage-2096 r4 grant active on f8a59e6aa, TMPDIR r4/gate/tmpdir.txt, clean detache
sage-2093 withdrew r3 grant due row215 landing e54e05463, not a mos-1166 stop. By inspection its SSO demonstration and four mutants had completed; no suites began, sweep 0. Rebased six commits onto e54 on preserved new r4 f8a59e6aa. Two conflicts: BUILD-LOG append and server imports; retained both histories/LIBRARY_VERBS plus peer helpers. r4/REBASE.md and conflicts.diff record every hunk; eight additional whole test files in whole-test-union.json. No gate until sage-2096 clear.
sage-2096 ended at stop 3: whole bus 622/0/0 in 36.272 s; whole WebUI 303/1/1 in 113.151 s, failure library-cli.test's retired tester-port activation. CLI, eight extra files and shells unrun. SSO RED/GREEN passed and refreshed M13/M17/M22 killed; other 27 target hashes matched r3. Reported Sage gander-0045 and Mos gander-0046. Sweep correction gander-0047/48: broad scope 9 pre-existing harness helpers (all started 18:45), gate leftovers 0; raw and categorized evidence retained, Sage accepted in sage-2111. No fourth run without Mos/Sage grant.
mos-1198 approves fourth run after Gizmoduck 250 r2 with Sage grant, r5 only activation flag change and BUILD note, exact name/assertions retained. New branch r5 a415de022 is one commit on retained r4; wider unpublished draft preserved on gander/row196-r5-draft. All 595 product blobs match r4 by SHA256. r5/TESTER-PORT-AUDIT.md lists scripts and tests, including case2-unit/case1-accept for Sage's chained follow-up. Sent gander-0049/50. No tests since stop3. mos-1199 requires all queue196 records committed/pushed before fourth grant, no product or node_modules changes. Next message gander-0051.
Fourth run sage-2113/2120 at 91e3696ef: WebUI whole 304/0/1 in 112.143 s. CLI mandatory busy preflight refused on Sage queue add sage-2122a PID 2054449, so no CLI, extras or shells started. Driver stopped; no rerun. gander-0052 simultaneously reported Sage and Mos and returned slot. Sweep gate leftovers 0, eight pre-existing harness helpers. r5/gate/RESULTS.md and raw logs retain evidence. Await Mos ruling and Sage grant; no fifth run.
@@ -0,0 +1,16 @@
# Fourth run, r5 91e3696ef
Grant sage-2113, updated by sage-2120. No product or test bytes differ from a415de022. Clean detached worktree, linked node_modules, TMPDIR /mnt/storage/scratch/tmp/gYGf, pipefail and tee for every start. Busy check gates every invocation with &&.
| Step | Pass | Fail | Skip | Wall seconds | Result |
|---|---:|---:|---:|---:|---|
| WebUI whole, 50 files | 304 | 0 | 1 | 112.142839 | Passed; existing editor build skip |
| CLI preflight | n/a | n/a | n/a | 1.612991 | Busy refusal; CLI not started |
| Eight union files | n/a | n/a | n/a | n/a | Not started |
| Ten scripts/test-*.sh | n/a | n/a | n/a | n/a | Not started |
CLI busy preflight found PID 2054449 running Sage queue add sage-2122a. The driver stopped without retry. This is not a failed test. Report gander-0052 went simultaneously to Sage and Mos at 19:48:04Z, returning the slot. Any continuation requires their ruling and grant.
Sweep: zero gate leftovers; eight pre-existing harness helpers remain. The earlier r4 record had nine; one has since exited. No helper was stopped. Gate tracked tree remains clean; only the expected node_modules symlink is untracked.
Standing evidence per Mos-1198/Sage-2113: bus whole 622 pass, zero fail/skip in 36.272237 seconds, plus all 30 killed mutants. All 595 product hashes match r4; the r5 record-only commit changes none. This is incomplete acceptance, not a green final gate. Raw results, logs, plan and sweep are adjacent.
@@ -0,0 +1 @@
BUSY 2054449: node /mnt/storage/src/mosaic-stack/packages/queue/src/cli.mjs add --op sage-2122a --piece F27: case2-unit.sh and case1-accept.sh move to --tester-socket and ref
@@ -0,0 +1,5 @@
START webui 50 whole file(s)
END webui {"code":0,"signal":null,"pass":304,"fail":0,"skip":1,"wallSeconds":112.142838529,"stopped":false}
START cli 50 whole file(s)
END cli {"code":1,"signal":null,"pass":null,"fail":null,"skip":null,"wallSeconds":1.612991227999999,"stopped":false}
STOP cli
@@ -0,0 +1,60 @@
{
"scope": [
"/mnt/storage/scratch/tmp/g196-tree-tn651z",
"/mnt/storage/scratch/tmp/gYGf",
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
],
"rawCount": 8,
"preexistingCount": 8,
"gateLeftoverCount": 0,
"processes": [
{
"pid": 748279,
"name": "npm exec @playw",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"preexisting": true
},
{
"pid": 748302,
"name": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"preexisting": true
},
{
"pid": 748306,
"name": "npm exec @model",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"preexisting": true
},
{
"pid": 748314,
"name": "npm exec chrome",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"preexisting": true
},
{
"pid": 748494,
"name": "chrome-devtools",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"preexisting": true
},
{
"pid": 748496,
"name": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"preexisting": true
},
{
"pid": 748506,
"name": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"preexisting": true
},
{
"pid": 748547,
"name": "node-MainThread",
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
"preexisting": true
}
]
}
@@ -0,0 +1,22 @@
import os,json,datetime
from pathlib import Path
out=Path(__file__).parent
roots=[Path('/mnt/storage/scratch/tmp/g196-tree-tn651z'),Path((out/'tmpdir.txt').read_text().strip()),Path('/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196')]
old={x['pid']:x for x in json.loads((out/'../../r4/gate/categorized-sweep.json').read_text())['preexistingHarnessHelpers']}
anc=set();pid=os.getpid()
while pid>1 and pid not in anc:
anc.add(pid)
try:pid=int(Path(f'/proc/{pid}/stat').read_text().rsplit(')',1)[1].split()[1])
except (OSError,ValueError):break
rows=[]
for p in Path('/proc').iterdir():
if not p.name.isdigit() or int(p.name) in anc:continue
try:
cwd=Path(os.readlink(p/'cwd'));name=(p/'comm').read_text().strip()
if not any(cwd==r or r in cwd.parents for r in roots):continue
if not any(n in name.lower() for n in ['node','tee','npm','chrome','fifo','python','bash','sh']):continue
rows.append(dict(pid=int(p.name),name=name,cwd=str(cwd),preexisting=int(p.name) in old))
except (OSError,ValueError):continue
result=dict(scope=list(map(str,roots)),rawCount=len(rows),preexistingCount=sum(r['preexisting'] for r in rows),gateLeftoverCount=sum(not r['preexisting'] for r in rows),processes=rows)
(out/'process-sweep.json').write_text(json.dumps(result,indent=2)+'\n')
print(json.dumps(result))
@@ -0,0 +1 @@
/mnt/storage/scratch/tmp/gYGf
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,440 @@
[
{
"name": "webui",
"command": "/usr/bin/node",
"args": [
"--test",
"--test-reporter=tap",
"--test-concurrency=2",
"packages/webui/tests/assistant.test.mjs",
"packages/webui/tests/board-held.test.mjs",
"packages/webui/tests/browser-edge.test.mjs",
"packages/webui/tests/browser.test.mjs",
"packages/webui/tests/bus-browser.test.mjs",
"packages/webui/tests/bus.test.mjs",
"packages/webui/tests/channel-chat.test.mjs",
"packages/webui/tests/chat-browser.test.mjs",
"packages/webui/tests/chat.test.mjs",
"packages/webui/tests/conversation.test.mjs",
"packages/webui/tests/discord.test.mjs",
"packages/webui/tests/docs-browser.test.mjs",
"packages/webui/tests/editor-browser.test.mjs",
"packages/webui/tests/editor-provenance.test.mjs",
"packages/webui/tests/editor.test.mjs",
"packages/webui/tests/history-return-flow.test.mjs",
"packages/webui/tests/instances-browser.test.mjs",
"packages/webui/tests/instances.test.mjs",
"packages/webui/tests/library-cli.test.mjs",
"packages/webui/tests/limits-browser.test.mjs",
"packages/webui/tests/limits-route.test.mjs",
"packages/webui/tests/markdown-preview.test.mjs",
"packages/webui/tests/messages.test.mjs",
"packages/webui/tests/pinned-copy.test.mjs",
"packages/webui/tests/preview.test.mjs",
"packages/webui/tests/project-file.test.mjs",
"packages/webui/tests/project-name-repo.test.mjs",
"packages/webui/tests/proof-cli.test.mjs",
"packages/webui/tests/proof.test.mjs",
"packages/webui/tests/reads.test.mjs",
"packages/webui/tests/relaunch.test.mjs",
"packages/webui/tests/return-flow.test.mjs",
"packages/webui/tests/routes-browser.test.mjs",
"packages/webui/tests/routes.test.mjs",
"packages/webui/tests/send-browser.test.mjs",
"packages/webui/tests/send.test.mjs",
"packages/webui/tests/serve.test.mjs",
"packages/webui/tests/service.test.mjs",
"packages/webui/tests/settings-form.test.mjs",
"packages/webui/tests/settings-write.test.mjs",
"packages/webui/tests/shell.test.mjs",
"packages/webui/tests/sso-browser.test.mjs",
"packages/webui/tests/sso.test.mjs",
"packages/webui/tests/tester-browser.test.mjs",
"packages/webui/tests/tester-cli.test.mjs",
"packages/webui/tests/tester-listener.test.mjs",
"packages/webui/tests/tester-socket.test.mjs",
"packages/webui/tests/usage-browser.test.mjs",
"packages/webui/tests/usage.test.mjs",
"packages/webui/tests/views.test.mjs"
],
"kind": "node",
"wholeFiles": [
"packages/webui/tests/assistant.test.mjs",
"packages/webui/tests/board-held.test.mjs",
"packages/webui/tests/browser-edge.test.mjs",
"packages/webui/tests/browser.test.mjs",
"packages/webui/tests/bus-browser.test.mjs",
"packages/webui/tests/bus.test.mjs",
"packages/webui/tests/channel-chat.test.mjs",
"packages/webui/tests/chat-browser.test.mjs",
"packages/webui/tests/chat.test.mjs",
"packages/webui/tests/conversation.test.mjs",
"packages/webui/tests/discord.test.mjs",
"packages/webui/tests/docs-browser.test.mjs",
"packages/webui/tests/editor-browser.test.mjs",
"packages/webui/tests/editor-provenance.test.mjs",
"packages/webui/tests/editor.test.mjs",
"packages/webui/tests/history-return-flow.test.mjs",
"packages/webui/tests/instances-browser.test.mjs",
"packages/webui/tests/instances.test.mjs",
"packages/webui/tests/library-cli.test.mjs",
"packages/webui/tests/limits-browser.test.mjs",
"packages/webui/tests/limits-route.test.mjs",
"packages/webui/tests/markdown-preview.test.mjs",
"packages/webui/tests/messages.test.mjs",
"packages/webui/tests/pinned-copy.test.mjs",
"packages/webui/tests/preview.test.mjs",
"packages/webui/tests/project-file.test.mjs",
"packages/webui/tests/project-name-repo.test.mjs",
"packages/webui/tests/proof-cli.test.mjs",
"packages/webui/tests/proof.test.mjs",
"packages/webui/tests/reads.test.mjs",
"packages/webui/tests/relaunch.test.mjs",
"packages/webui/tests/return-flow.test.mjs",
"packages/webui/tests/routes-browser.test.mjs",
"packages/webui/tests/routes.test.mjs",
"packages/webui/tests/send-browser.test.mjs",
"packages/webui/tests/send.test.mjs",
"packages/webui/tests/serve.test.mjs",
"packages/webui/tests/service.test.mjs",
"packages/webui/tests/settings-form.test.mjs",
"packages/webui/tests/settings-write.test.mjs",
"packages/webui/tests/shell.test.mjs",
"packages/webui/tests/sso-browser.test.mjs",
"packages/webui/tests/sso.test.mjs",
"packages/webui/tests/tester-browser.test.mjs",
"packages/webui/tests/tester-cli.test.mjs",
"packages/webui/tests/tester-listener.test.mjs",
"packages/webui/tests/tester-socket.test.mjs",
"packages/webui/tests/usage-browser.test.mjs",
"packages/webui/tests/usage.test.mjs",
"packages/webui/tests/views.test.mjs"
]
},
{
"name": "cli",
"command": "/usr/bin/node",
"args": [
"--test",
"--test-reporter=tap",
"--test-concurrency=2",
"packages/cli/tests/app.test.mjs",
"packages/cli/tests/boot-status.test.mjs",
"packages/cli/tests/case1-accept.test.mjs",
"packages/cli/tests/case1-hostcheck.test.mjs",
"packages/cli/tests/case2-persona-import.test.mjs",
"packages/cli/tests/case2-unit.test.mjs",
"packages/cli/tests/channel-cli.test.mjs",
"packages/cli/tests/channel-recovery.test.mjs",
"packages/cli/tests/cli.test.mjs",
"packages/cli/tests/config.test.mjs",
"packages/cli/tests/credentials.test.mjs",
"packages/cli/tests/follow.test.mjs",
"packages/cli/tests/format.test.mjs",
"packages/cli/tests/gate-lane-fixtures.test.mjs",
"packages/cli/tests/gate-lane-image.test.mjs",
"packages/cli/tests/gate-lane-state.test.mjs",
"packages/cli/tests/gate-lane.test.mjs",
"packages/cli/tests/git-socket.test.mjs",
"packages/cli/tests/host.test.mjs",
"packages/cli/tests/hosts.test.mjs",
"packages/cli/tests/instances.test.mjs",
"packages/cli/tests/launch-account.test.mjs",
"packages/cli/tests/launch-limit-checks.test.mjs",
"packages/cli/tests/launch-limits.test.mjs",
"packages/cli/tests/launch-routes.test.mjs",
"packages/cli/tests/launcher.test.mjs",
"packages/cli/tests/limits-tokens.test.mjs",
"packages/cli/tests/limits.test.mjs",
"packages/cli/tests/mark-read.test.mjs",
"packages/cli/tests/names.test.mjs",
"packages/cli/tests/notifier.test.mjs",
"packages/cli/tests/other-tree.test.mjs",
"packages/cli/tests/project-name-repo.test.mjs",
"packages/cli/tests/project.test.mjs",
"packages/cli/tests/publish-socket.test.mjs",
"packages/cli/tests/stack-copy.test.mjs",
"packages/cli/tests/stack-instances.test.mjs",
"packages/cli/tests/stack-release-external.test.mjs",
"packages/cli/tests/stack-release.test.mjs",
"packages/cli/tests/stack-upgrade.test.mjs",
"packages/cli/tests/tester-http.test.mjs",
"packages/cli/tests/tester-reads.test.mjs",
"packages/cli/tests/tester-threads.test.mjs",
"packages/cli/tests/tester.test.mjs",
"packages/cli/tests/thread-cli.test.mjs",
"packages/cli/tests/thread-launch.test.mjs",
"packages/cli/tests/trackers-boot.test.mjs",
"packages/cli/tests/transport.test.mjs",
"packages/cli/tests/usage.test.mjs",
"packages/cli/tests/verbs.test.mjs"
],
"kind": "node",
"wholeFiles": [
"packages/cli/tests/app.test.mjs",
"packages/cli/tests/boot-status.test.mjs",
"packages/cli/tests/case1-accept.test.mjs",
"packages/cli/tests/case1-hostcheck.test.mjs",
"packages/cli/tests/case2-persona-import.test.mjs",
"packages/cli/tests/case2-unit.test.mjs",
"packages/cli/tests/channel-cli.test.mjs",
"packages/cli/tests/channel-recovery.test.mjs",
"packages/cli/tests/cli.test.mjs",
"packages/cli/tests/config.test.mjs",
"packages/cli/tests/credentials.test.mjs",
"packages/cli/tests/follow.test.mjs",
"packages/cli/tests/format.test.mjs",
"packages/cli/tests/gate-lane-fixtures.test.mjs",
"packages/cli/tests/gate-lane-image.test.mjs",
"packages/cli/tests/gate-lane-state.test.mjs",
"packages/cli/tests/gate-lane.test.mjs",
"packages/cli/tests/git-socket.test.mjs",
"packages/cli/tests/host.test.mjs",
"packages/cli/tests/hosts.test.mjs",
"packages/cli/tests/instances.test.mjs",
"packages/cli/tests/launch-account.test.mjs",
"packages/cli/tests/launch-limit-checks.test.mjs",
"packages/cli/tests/launch-limits.test.mjs",
"packages/cli/tests/launch-routes.test.mjs",
"packages/cli/tests/launcher.test.mjs",
"packages/cli/tests/limits-tokens.test.mjs",
"packages/cli/tests/limits.test.mjs",
"packages/cli/tests/mark-read.test.mjs",
"packages/cli/tests/names.test.mjs",
"packages/cli/tests/notifier.test.mjs",
"packages/cli/tests/other-tree.test.mjs",
"packages/cli/tests/project-name-repo.test.mjs",
"packages/cli/tests/project.test.mjs",
"packages/cli/tests/publish-socket.test.mjs",
"packages/cli/tests/stack-copy.test.mjs",
"packages/cli/tests/stack-instances.test.mjs",
"packages/cli/tests/stack-release-external.test.mjs",
"packages/cli/tests/stack-release.test.mjs",
"packages/cli/tests/stack-upgrade.test.mjs",
"packages/cli/tests/tester-http.test.mjs",
"packages/cli/tests/tester-reads.test.mjs",
"packages/cli/tests/tester-threads.test.mjs",
"packages/cli/tests/tester.test.mjs",
"packages/cli/tests/thread-cli.test.mjs",
"packages/cli/tests/thread-launch.test.mjs",
"packages/cli/tests/trackers-boot.test.mjs",
"packages/cli/tests/transport.test.mjs",
"packages/cli/tests/usage.test.mjs",
"packages/cli/tests/verbs.test.mjs"
]
},
{
"name": "packages_business_tests_business.test.mjs",
"command": "/usr/bin/node",
"args": [
"--test",
"--test-reporter=tap",
"packages/business/tests/business.test.mjs"
],
"kind": "node",
"wholeFiles": [
"packages/business/tests/business.test.mjs"
]
},
{
"name": "packages_business_tests_cli.test.mjs",
"command": "/usr/bin/node",
"args": [
"--test",
"--test-reporter=tap",
"packages/business/tests/cli.test.mjs"
],
"kind": "node",
"wholeFiles": [
"packages/business/tests/cli.test.mjs"
]
},
{
"name": "packages_business_tests_instance-settings.test.mjs",
"command": "/usr/bin/node",
"args": [
"--test",
"--test-reporter=tap",
"packages/business/tests/instance-settings.test.mjs"
],
"kind": "node",
"wholeFiles": [
"packages/business/tests/instance-settings.test.mjs"
]
},
{
"name": "packages_business_tests_library-projects-protected.test.mjs",
"command": "/usr/bin/node",
"args": [
"--test",
"--test-reporter=tap",
"packages/business/tests/library-projects-protected.test.mjs"
],
"kind": "node",
"wholeFiles": [
"packages/business/tests/library-projects-protected.test.mjs"
]
},
{
"name": "packages_business_tests_resolve.test.mjs",
"command": "/usr/bin/node",
"args": [
"--test",
"--test-reporter=tap",
"packages/business/tests/resolve.test.mjs"
],
"kind": "node",
"wholeFiles": [
"packages/business/tests/resolve.test.mjs"
]
},
{
"name": "packages_library_tests_mirror.test.mjs",
"command": "/usr/bin/node",
"args": [
"--test",
"--test-reporter=tap",
"packages/library/tests/mirror.test.mjs"
],
"kind": "node",
"wholeFiles": [
"packages/library/tests/mirror.test.mjs"
]
},
{
"name": "packages_project_tests_project.test.mjs",
"command": "/usr/bin/node",
"args": [
"--test",
"--test-reporter=tap",
"packages/project/tests/project.test.mjs"
],
"kind": "node",
"wholeFiles": [
"packages/project/tests/project.test.mjs"
]
},
{
"name": "packages_seat_tests_checkout.test.mjs",
"command": "/usr/bin/node",
"args": [
"--test",
"--test-reporter=tap",
"packages/seat/tests/checkout.test.mjs"
],
"kind": "node",
"wholeFiles": [
"packages/seat/tests/checkout.test.mjs"
]
},
{
"name": "test-auth.sh",
"command": "bash",
"args": [
"scripts/test-auth.sh"
],
"kind": "shell",
"wholeFiles": [
"scripts/test-auth.sh"
]
},
{
"name": "test-conductor.sh",
"command": "bash",
"args": [
"scripts/test-conductor.sh"
],
"kind": "shell",
"wholeFiles": [
"scripts/test-conductor.sh"
]
},
{
"name": "test-config.sh",
"command": "bash",
"args": [
"scripts/test-config.sh"
],
"kind": "shell",
"wholeFiles": [
"scripts/test-config.sh"
]
},
{
"name": "test-discord.sh",
"command": "bash",
"args": [
"scripts/test-discord.sh"
],
"kind": "shell",
"wholeFiles": [
"scripts/test-discord.sh"
]
},
{
"name": "test-extension-package.sh",
"command": "bash",
"args": [
"scripts/test-extension-package.sh"
],
"kind": "shell",
"wholeFiles": [
"scripts/test-extension-package.sh"
]
},
{
"name": "test-foundation.sh",
"command": "bash",
"args": [
"scripts/test-foundation.sh"
],
"kind": "shell",
"wholeFiles": [
"scripts/test-foundation.sh"
]
},
{
"name": "test-land-work.sh",
"command": "bash",
"args": [
"scripts/test-land-work.sh"
],
"kind": "shell",
"wholeFiles": [
"scripts/test-land-work.sh"
]
},
{
"name": "test-queue.sh",
"command": "bash",
"args": [
"scripts/test-queue.sh"
],
"kind": "shell",
"wholeFiles": [
"scripts/test-queue.sh"
]
},
{
"name": "test-release.sh",
"command": "bash",
"args": [
"scripts/test-release.sh"
],
"kind": "shell",
"wholeFiles": [
"scripts/test-release.sh"
]
},
{
"name": "test-task.sh",
"command": "bash",
"args": [
"scripts/test-task.sh"
],
"kind": "shell",
"wholeFiles": [
"scripts/test-task.sh"
]
}
]
@@ -0,0 +1,246 @@
[
{
"name": "webui",
"command": "/usr/bin/node",
"args": [
"--test",
"--test-reporter=tap",
"--test-concurrency=2",
"packages/webui/tests/assistant.test.mjs",
"packages/webui/tests/board-held.test.mjs",
"packages/webui/tests/browser-edge.test.mjs",
"packages/webui/tests/browser.test.mjs",
"packages/webui/tests/bus-browser.test.mjs",
"packages/webui/tests/bus.test.mjs",
"packages/webui/tests/channel-chat.test.mjs",
"packages/webui/tests/chat-browser.test.mjs",
"packages/webui/tests/chat.test.mjs",
"packages/webui/tests/conversation.test.mjs",
"packages/webui/tests/discord.test.mjs",
"packages/webui/tests/docs-browser.test.mjs",
"packages/webui/tests/editor-browser.test.mjs",
"packages/webui/tests/editor-provenance.test.mjs",
"packages/webui/tests/editor.test.mjs",
"packages/webui/tests/history-return-flow.test.mjs",
"packages/webui/tests/instances-browser.test.mjs",
"packages/webui/tests/instances.test.mjs",
"packages/webui/tests/library-cli.test.mjs",
"packages/webui/tests/limits-browser.test.mjs",
"packages/webui/tests/limits-route.test.mjs",
"packages/webui/tests/markdown-preview.test.mjs",
"packages/webui/tests/messages.test.mjs",
"packages/webui/tests/pinned-copy.test.mjs",
"packages/webui/tests/preview.test.mjs",
"packages/webui/tests/project-file.test.mjs",
"packages/webui/tests/project-name-repo.test.mjs",
"packages/webui/tests/proof-cli.test.mjs",
"packages/webui/tests/proof.test.mjs",
"packages/webui/tests/reads.test.mjs",
"packages/webui/tests/relaunch.test.mjs",
"packages/webui/tests/return-flow.test.mjs",
"packages/webui/tests/routes-browser.test.mjs",
"packages/webui/tests/routes.test.mjs",
"packages/webui/tests/send-browser.test.mjs",
"packages/webui/tests/send.test.mjs",
"packages/webui/tests/serve.test.mjs",
"packages/webui/tests/service.test.mjs",
"packages/webui/tests/settings-form.test.mjs",
"packages/webui/tests/settings-write.test.mjs",
"packages/webui/tests/shell.test.mjs",
"packages/webui/tests/sso-browser.test.mjs",
"packages/webui/tests/sso.test.mjs",
"packages/webui/tests/tester-browser.test.mjs",
"packages/webui/tests/tester-cli.test.mjs",
"packages/webui/tests/tester-listener.test.mjs",
"packages/webui/tests/tester-socket.test.mjs",
"packages/webui/tests/usage-browser.test.mjs",
"packages/webui/tests/usage.test.mjs",
"packages/webui/tests/views.test.mjs"
],
"kind": "node",
"wholeFiles": [
"packages/webui/tests/assistant.test.mjs",
"packages/webui/tests/board-held.test.mjs",
"packages/webui/tests/browser-edge.test.mjs",
"packages/webui/tests/browser.test.mjs",
"packages/webui/tests/bus-browser.test.mjs",
"packages/webui/tests/bus.test.mjs",
"packages/webui/tests/channel-chat.test.mjs",
"packages/webui/tests/chat-browser.test.mjs",
"packages/webui/tests/chat.test.mjs",
"packages/webui/tests/conversation.test.mjs",
"packages/webui/tests/discord.test.mjs",
"packages/webui/tests/docs-browser.test.mjs",
"packages/webui/tests/editor-browser.test.mjs",
"packages/webui/tests/editor-provenance.test.mjs",
"packages/webui/tests/editor.test.mjs",
"packages/webui/tests/history-return-flow.test.mjs",
"packages/webui/tests/instances-browser.test.mjs",
"packages/webui/tests/instances.test.mjs",
"packages/webui/tests/library-cli.test.mjs",
"packages/webui/tests/limits-browser.test.mjs",
"packages/webui/tests/limits-route.test.mjs",
"packages/webui/tests/markdown-preview.test.mjs",
"packages/webui/tests/messages.test.mjs",
"packages/webui/tests/pinned-copy.test.mjs",
"packages/webui/tests/preview.test.mjs",
"packages/webui/tests/project-file.test.mjs",
"packages/webui/tests/project-name-repo.test.mjs",
"packages/webui/tests/proof-cli.test.mjs",
"packages/webui/tests/proof.test.mjs",
"packages/webui/tests/reads.test.mjs",
"packages/webui/tests/relaunch.test.mjs",
"packages/webui/tests/return-flow.test.mjs",
"packages/webui/tests/routes-browser.test.mjs",
"packages/webui/tests/routes.test.mjs",
"packages/webui/tests/send-browser.test.mjs",
"packages/webui/tests/send.test.mjs",
"packages/webui/tests/serve.test.mjs",
"packages/webui/tests/service.test.mjs",
"packages/webui/tests/settings-form.test.mjs",
"packages/webui/tests/settings-write.test.mjs",
"packages/webui/tests/shell.test.mjs",
"packages/webui/tests/sso-browser.test.mjs",
"packages/webui/tests/sso.test.mjs",
"packages/webui/tests/tester-browser.test.mjs",
"packages/webui/tests/tester-cli.test.mjs",
"packages/webui/tests/tester-listener.test.mjs",
"packages/webui/tests/tester-socket.test.mjs",
"packages/webui/tests/usage-browser.test.mjs",
"packages/webui/tests/usage.test.mjs",
"packages/webui/tests/views.test.mjs"
],
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-196/r5/gate/webui.log",
"code": 0,
"signal": null,
"wallSeconds": 112.142838529,
"pass": 304,
"fail": 0,
"skip": 1,
"observedFailures": 0,
"stopped": false,
"complete": true
},
{
"name": "cli",
"command": "/usr/bin/node",
"args": [
"--test",
"--test-reporter=tap",
"--test-concurrency=2",
"packages/cli/tests/app.test.mjs",
"packages/cli/tests/boot-status.test.mjs",
"packages/cli/tests/case1-accept.test.mjs",
"packages/cli/tests/case1-hostcheck.test.mjs",
"packages/cli/tests/case2-persona-import.test.mjs",
"packages/cli/tests/case2-unit.test.mjs",
"packages/cli/tests/channel-cli.test.mjs",
"packages/cli/tests/channel-recovery.test.mjs",
"packages/cli/tests/cli.test.mjs",
"packages/cli/tests/config.test.mjs",
"packages/cli/tests/credentials.test.mjs",
"packages/cli/tests/follow.test.mjs",
"packages/cli/tests/format.test.mjs",
"packages/cli/tests/gate-lane-fixtures.test.mjs",
"packages/cli/tests/gate-lane-image.test.mjs",
"packages/cli/tests/gate-lane-state.test.mjs",
"packages/cli/tests/gate-lane.test.mjs",
"packages/cli/tests/git-socket.test.mjs",
"packages/cli/tests/host.test.mjs",
"packages/cli/tests/hosts.test.mjs",
"packages/cli/tests/instances.test.mjs",
"packages/cli/tests/launch-account.test.mjs",
"packages/cli/tests/launch-limit-checks.test.mjs",
"packages/cli/tests/launch-limits.test.mjs",
"packages/cli/tests/launch-routes.test.mjs",
"packages/cli/tests/launcher.test.mjs",
"packages/cli/tests/limits-tokens.test.mjs",
"packages/cli/tests/limits.test.mjs",
"packages/cli/tests/mark-read.test.mjs",
"packages/cli/tests/names.test.mjs",
"packages/cli/tests/notifier.test.mjs",
"packages/cli/tests/other-tree.test.mjs",
"packages/cli/tests/project-name-repo.test.mjs",
"packages/cli/tests/project.test.mjs",
"packages/cli/tests/publish-socket.test.mjs",
"packages/cli/tests/stack-copy.test.mjs",
"packages/cli/tests/stack-instances.test.mjs",
"packages/cli/tests/stack-release-external.test.mjs",
"packages/cli/tests/stack-release.test.mjs",
"packages/cli/tests/stack-upgrade.test.mjs",
"packages/cli/tests/tester-http.test.mjs",
"packages/cli/tests/tester-reads.test.mjs",
"packages/cli/tests/tester-threads.test.mjs",
"packages/cli/tests/tester.test.mjs",
"packages/cli/tests/thread-cli.test.mjs",
"packages/cli/tests/thread-launch.test.mjs",
"packages/cli/tests/trackers-boot.test.mjs",
"packages/cli/tests/transport.test.mjs",
"packages/cli/tests/usage.test.mjs",
"packages/cli/tests/verbs.test.mjs"
],
"kind": "node",
"wholeFiles": [
"packages/cli/tests/app.test.mjs",
"packages/cli/tests/boot-status.test.mjs",
"packages/cli/tests/case1-accept.test.mjs",
"packages/cli/tests/case1-hostcheck.test.mjs",
"packages/cli/tests/case2-persona-import.test.mjs",
"packages/cli/tests/case2-unit.test.mjs",
"packages/cli/tests/channel-cli.test.mjs",
"packages/cli/tests/channel-recovery.test.mjs",
"packages/cli/tests/cli.test.mjs",
"packages/cli/tests/config.test.mjs",
"packages/cli/tests/credentials.test.mjs",
"packages/cli/tests/follow.test.mjs",
"packages/cli/tests/format.test.mjs",
"packages/cli/tests/gate-lane-fixtures.test.mjs",
"packages/cli/tests/gate-lane-image.test.mjs",
"packages/cli/tests/gate-lane-state.test.mjs",
"packages/cli/tests/gate-lane.test.mjs",
"packages/cli/tests/git-socket.test.mjs",
"packages/cli/tests/host.test.mjs",
"packages/cli/tests/hosts.test.mjs",
"packages/cli/tests/instances.test.mjs",
"packages/cli/tests/launch-account.test.mjs",
"packages/cli/tests/launch-limit-checks.test.mjs",
"packages/cli/tests/launch-limits.test.mjs",
"packages/cli/tests/launch-routes.test.mjs",
"packages/cli/tests/launcher.test.mjs",
"packages/cli/tests/limits-tokens.test.mjs",
"packages/cli/tests/limits.test.mjs",
"packages/cli/tests/mark-read.test.mjs",
"packages/cli/tests/names.test.mjs",
"packages/cli/tests/notifier.test.mjs",
"packages/cli/tests/other-tree.test.mjs",
"packages/cli/tests/project-name-repo.test.mjs",
"packages/cli/tests/project.test.mjs",
"packages/cli/tests/publish-socket.test.mjs",
"packages/cli/tests/stack-copy.test.mjs",
"packages/cli/tests/stack-instances.test.mjs",
"packages/cli/tests/stack-release-external.test.mjs",
"packages/cli/tests/stack-release.test.mjs",
"packages/cli/tests/stack-upgrade.test.mjs",
"packages/cli/tests/tester-http.test.mjs",
"packages/cli/tests/tester-reads.test.mjs",
"packages/cli/tests/tester-threads.test.mjs",
"packages/cli/tests/tester.test.mjs",
"packages/cli/tests/thread-cli.test.mjs",
"packages/cli/tests/thread-launch.test.mjs",
"packages/cli/tests/trackers-boot.test.mjs",
"packages/cli/tests/transport.test.mjs",
"packages/cli/tests/usage.test.mjs",
"packages/cli/tests/verbs.test.mjs"
],
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-196/r5/gate/cli.log",
"code": 1,
"signal": null,
"wallSeconds": 1.612991227999999,
"pass": null,
"fail": null,
"skip": null,
"observedFailures": 0,
"stopped": false,
"complete": true
}
]
@@ -0,0 +1,23 @@
import {spawn} from 'node:child_process';import {readFileSync,writeFileSync,readdirSync} from 'node:fs';import {join} from 'node:path';import {performance} from 'node:perf_hooks';
const root='/mnt/storage/scratch/tmp/g196-tree-tn651z',out=new URL('.',import.meta.url).pathname;
const jobs=[];
for(const pkg of ['webui','cli']){const files=readdirSync(join(root,'packages',pkg,'tests')).filter(n=>n.endsWith('.test.mjs')).sort().map(n=>`packages/${pkg}/tests/${n}`);jobs.push({name:pkg,command:process.execPath,args:['--test','--test-reporter=tap','--test-concurrency=2',...files],kind:'node',wholeFiles:files});}
const extras=JSON.parse(readFileSync(new URL('../../r4/whole-test-union.json',import.meta.url),'utf8')).extraOutsideWholePackageSuites;
for(const file of extras)jobs.push({name:file.replaceAll('/','_'),command:process.execPath,args:['--test','--test-reporter=tap',file],kind:'node',wholeFiles:[file]});
for(const file of readdirSync(join(root,'scripts')).filter(n=>/^test-.*\.sh$/.test(n)).sort())jobs.push({name:file,command:'bash',args:['scripts/'+file],kind:'shell',wholeFiles:['scripts/'+file]});
writeFileSync(out+'whole-plan.json',JSON.stringify(jobs,null,2)+'\n');
const results=[];
for(const job of jobs){
const log=out+job.name+'.log',start=performance.now();let text='',buffer='',failures=0,stopped=false;
console.log('START '+job.name+' '+job.wholeFiles.length+' whole file(s)');
const child=spawn('bash',['-c','set -o pipefail; { python3 "$G196_BUSY" && "$@"; } 2>&1 | tee "$G196_LOG"','--',job.command,...job.args],{cwd:root,env:{...process.env,G196_LOG:log},stdio:['ignore','pipe','pipe'],detached:true});
const consume=data=>{const part=String(data);text+=part;buffer+=part;const lines=buffer.split('\n');buffer=lines.pop();for(const raw of lines){const line=raw.replace(/\x1b\[[0-9;]*m/g,'');if(/^\s*not ok \d/.test(line)||/^FAIL(?:\s|:)/.test(line)){failures++;if(failures>=2&&!stopped){stopped=true;process.kill(-child.pid,'SIGTERM');}}}};
child.stdout.on('data',consume);child.stderr.on('data',consume);
const status=await new Promise(resolve=>child.on('close',(code,signal)=>resolve({code,signal})));
const summary=key=>{const matches=[...text.matchAll(new RegExp('^# '+key+' (\\d+)','gm'))];return matches.length?Number(matches.at(-1)[1]):null;};
const shell=[...text.matchAll(/(\d+) passed,\s*(\d+) failed/g)].at(-1);
const result={...job,log,...status,wallSeconds:(performance.now()-start)/1000,pass:job.kind==='node'?summary('pass'):shell?Number(shell[1]):null,fail:job.kind==='node'?summary('fail'):shell?Number(shell[2]):null,skip:job.kind==='node'?summary('skipped'):0,observedFailures:failures,stopped,complete:!stopped};
results.push(result);writeFileSync(out+'whole-results.json',JSON.stringify(results,null,2)+'\n');
console.log('END '+job.name+' '+JSON.stringify({code:status.code,signal:status.signal,pass:result.pass,fail:result.fail,skip:result.skip,wallSeconds:result.wallSeconds,stopped}));
if(status.code!==0||failures||result.pass===null){process.exitCode=1;console.log('STOP '+job.name);break;}
}