gander: publish row 196 rebase gate and migration audit records
This commit is contained in:
1 parent
a415de022d
commit
91e3696efd
82 files changed
+13450
No files matched your search
@@ -20,3 +20,9 @@ sage-1464 (2026-10-20T20:40Z): renewed bus/WebUI/CLI and M1-M29 slot is fifth, a
|
||||
sage-2051 / mos-1193 (2026-10-21T18:45Z) explicitly orders committing and fast-forward pushing the current row196 build before its deferred full verification, then rebasing onto a36523713 on new gander/row196-r2. This supersedes the earlier no-product-commit-before-suite gate for this preservation commit only. Full acceptance remains pending. No tests until Sage says clear. Subsequent batch order: M1-M29, bus, WebUI, CLI, every whole scripts/test-*.sh; TMPDIR must be created with mktemp under /mnt/storage/scratch/tmp, never /tmp. Preserve the old branch. Row252 design may proceed while waiting; no row252 code before Webby approves.
|
||||
sage-2058 clear: clean detached 64539c96b worktree, short scratch TMPDIR, busy && before starts, pipefail and tee, mutation restoration hash and Git-status checks. M1-M22 killed; M23 rejected by broad runtime SyntaxError classification despite passing node --check, 3 pass/2 fail in killer. Stopped, restored clean, slot returned gander-0031 18:51:50Z. No suites started. sage-2063 calls stop 1; driver fix separately committed, no rerun before next clear. r2/REBASE.md records all ten conflict resolutions. Row252 design drafted, no code.
|
||||
sage-2065 clear at 18:58:34Z: base killers 14/0, wall seconds interpreter 1.470, socket 1.528, peer 2.092, focused release 7.983. M23-M27 killed, no outer timeout. M28 survived because its generic first replacement now hits upstream sso_for_target, not the intended proof insertion. Stopped before M29 or any suite, restored every file and Git status clean; sweep found 0 leftover node/tee/Python readers. Slot handed back gander-0035 at 19:01:26Z. This is stop 2, awaiting Sage ruling; no mutation fix/rerun. r2/run2/SUMMARY.md and kill-table.json preserve counts and timings. Webby approved row252 design r1; nonblocking N1-N5 recorded in queue-252/BUILD-NOTES.md; code still waits on row196 landing and PRD amendment.
|
||||
sage-2079 (2026-10-21T19:09:49Z) accepts product test commit 1bb1e8dd6 and driver 42b47f36c. M5 prior kill stands by identical mutated sha; narrowed M25 differs and reruns. Gate and Duckworth merge-scoped candidate is 1bb1e8dd6. Hold until Sage clear after Herb 215: first focused SSO RED/GREEN, then M25/M28/M28b/M29, then whole bus/WebUI/CLI and every whole scripts/test-*.sh. Third stop goes to Mos before another run. No tests started during this hold.
|
||||
sage-2083: rebased six r2 commits onto origin/refactor 6096b051b on new gander/row196-r3, preserving r2. New pushed tip b1076c8b8, no conflicts. All six range-diff entries are =; aggregate patch-id before/after 81901f8d5fe07e7b941d398f9240e835df29cb64, product-test patch-id 533c50a4efc6e0dc8fa3b6da4b1456029bbda490. Requested diff-stat from 1bb1e8dd6 to r3 on all ten mutated paths is empty. Clean detached gate worktree pinned b1076c8b8, linked dependencies, fresh short scratch TMPDIR in r3/paths.txt. Reported gander-0041. Hold for Sage clear; no tests started. Order remains SSO RED/GREEN, narrowed M25/M28/M28b/M29, whole bus/WebUI/CLI and all scripts/test-*.sh. Third stop goes to Mos.
|
||||
sage-2096 r4 grant active on f8a59e6aa, TMPDIR r4/gate/tmpdir.txt, clean detached /mnt/storage/scratch/tmp/g196-tree-tn651z. Per-target blob comparison: M13/M22 server and M17 broker changed; other 27 blobs equal r3 (including successful precise M25/M28/M28b/M29). Reported gander-0044. Repeated SSO RED 4.186 s/GREEN 4.328 s, restored clean. Fresh base transport 1.841 s and tester 3.049 s passed; M13/M17/M22 killed, no timeout, restored hash/status clean. Whole gate process session 55377 runs sequentially via r4/gate/whole.mjs; bus 622/0/0 in 36.272 s, WebUI currently active. Next: CLI, eight whole files, ten whole shell suites. No package/shell results carried. On any stop report Sage and Mos before rerun (would be mos-1166 stop 3; sage-2093 withdrawal did not count). Need grant return with totals/times/sweep, then write r4 manifest for Duckworth. Latest sent message gander-0044; next 0045.
|
||||
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.
|
||||
@@ -0,0 +1,144 @@
|
||||
diff --git a/agents/gander/work/queue-196/BUILD.md b/agents/gander/work/queue-196/BUILD.md
|
||||
index ce3dde23e..77454ecbd 100644
|
||||
--- a/agents/gander/work/queue-196/BUILD.md
|
||||
+++ b/agents/gander/work/queue-196/BUILD.md
|
||||
@@ -104,3 +104,4 @@ changes are planned before the batch. M1-M29 remain prepared and unexecuted.
|
||||
2026-10-21 r2 stop 2: base killer invocations 14/0 under 30 seconds each; M23-M27 killed, M28 survived due rebase making its generic mutation target the earlier SSO insertion. No M29 or golden suite run. Every restored hash and Git status clean; leftover process sweep count 0. Slot returned to Sage in gander-0035. Full per-step counts, base/mutant times and kill table in r2/run2/. Awaiting ruling before any fix or rerun; third stop goes to Mos.
|
||||
|
||||
2026-10-21 sage-2072 product test: added the merge-scoped SSO/socket conversion case without --send, asserting pointer argv order, rendered unit argv order, status agreement and no secret-file reads. Removing socket from sso_for_target is its planned RED case (M28b). Focused RED/GREEN remains pending the busy gate: Herb's suite was active at the preflight, so no test started. Runtime code unchanged. Mos mos-1197 owner-subject ruling recorded in queue-252/BUILD-NOTES.md.
|
||||
+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.
|
||||
diff --git a/agents/gander/work/queue-196/mutant-guard.mjs b/agents/gander/work/queue-196/mutant-guard.mjs
|
||||
new file mode 100644
|
||||
index 000000000..9c8b12ddf
|
||||
--- /dev/null
|
||||
+++ b/agents/gander/work/queue-196/mutant-guard.mjs
|
||||
@@ -0,0 +1,16 @@
|
||||
+// Synchronous mutation preparation only. No file is written until every replacement is unique.
|
||||
+export function guardMutation(input, mutate, { auditOnly = false } = {}) {
|
||||
+ const targets = [];
|
||||
+ class UniqueText extends String {
|
||||
+ replace(target, replacement) { return this.applyReplacement('replace', target, replacement); }
|
||||
+ replaceAll(target, replacement) { return this.applyReplacement('replaceAll', target, replacement); }
|
||||
+ applyReplacement(method, target, replacement) {
|
||||
+ if (typeof target !== 'string' || !target) throw Error('mutation target must be a nonempty string');
|
||||
+ const source = String(this), count = source.split(target).length - 1;
|
||||
+ targets.push({ method, target, count });
|
||||
+ if (count !== 1 && !auditOnly) throw Error(`mutation target occurs ${count} times, expected exactly once: ${target}`);
|
||||
+ return new UniqueText(String.prototype[method].call(source, target, replacement));
|
||||
+ }
|
||||
+ }
|
||||
+ return { text: String(mutate(new UniqueText(input))), targets };
|
||||
+}
|
||||
diff --git a/agents/gander/work/queue-196/mutants.mjs b/agents/gander/work/queue-196/mutants.mjs
|
||||
index a3342f63d..583fc4101 100644
|
||||
--- a/agents/gander/work/queue-196/mutants.mjs
|
||||
+++ b/agents/gander/work/queue-196/mutants.mjs
|
||||
@@ -1,3 +1,4 @@
|
||||
+import { guardMutation } from './mutant-guard.mjs';
|
||||
// Authorized batch only. Mutate isolated scratch copies, never the candidate or installed tree.
|
||||
import {mkdtempSync,cpSync,readFileSync,writeFileSync,rmSync,symlinkSync,existsSync,mkdirSync} from 'node:fs';
|
||||
import {tmpdir} from 'node:os';import {join,resolve} from 'node:path';
|
||||
@@ -5,7 +6,6 @@ import {spawnSync,execFileSync} from 'node:child_process';import {createHash} fr
|
||||
import {fileURLToPath} from 'node:url';
|
||||
const root=fileURLToPath(new URL('../../../../',import.meta.url));
|
||||
const out=join(root,'agents/gander/work/queue-196/evidence/mutants');mkdirSync(out,{recursive:true});
|
||||
-const scratch=mkdtempSync(join(tmpdir(),'g196-mut-'));
|
||||
const p='packages/bus/src/principal.mjs',h='packages/bus/src/human.mjs',w='packages/webui/src/tester-socket.mjs',s='packages/bus/src/server.mjs',peer='packages/bus/src/peercred.mjs';
|
||||
const principal='packages/bus/tests/principal.test.mjs',socket='packages/webui/tests/tester-socket.test.mjs',transport='packages/bus/tests/peer-transport.test.mjs',interpreter='packages/bus/tests/interpreter.test.mjs';
|
||||
const release=['--test-name-pattern=row196 explicit socket','packages/cli/tests/stack-release.test.mjs'];
|
||||
@@ -14,7 +14,7 @@ const specs=[
|
||||
['M2',w,'socket mode widened',socket,t=>t.replace('chmodSync(temporary, 0o600)','chmodSync(temporary, 0o666)')],
|
||||
['M3','packages/webui/src/serve.mjs','sign-in accepted on tester',socket,t=>t.replace("if (tester && (Object.hasOwn(req.headers, 'authorization')", "if (false && (Object.hasOwn(req.headers, 'authorization')")],
|
||||
['M4',p,'copied PID accepted',principal,t=>t.replace('peer.pid !== proof.pid','false')],
|
||||
- ['M5',peer,'helper parse error ignored','packages/bus/tests/peercred.test.mjs',t=>t.replace('} catch { finish(true); }','} catch { finish(false, {pid:2,uid:0,gid:0}); }')],
|
||||
+ ['M5',peer,'helper parse error ignored','packages/bus/tests/peercred.test.mjs',t=>t.replace('finish(false, Object.freeze(p));\n } catch { finish(true); }','finish(false, Object.freeze(p));\n } catch { finish(false, {pid:2,uid:0,gid:0}); }')],
|
||||
['M6',p,'foreign uid accepted',principal,t=>t.replace('peer.uid !== process.getuid()','false')],
|
||||
['M7',w,'unsafe parent accepted',socket,t=>t.replace('(dir.mode & 0o077)','false')],
|
||||
['M8',h,'agent environment walk skipped',principal,t=>t.replace('current.env !== null && MARKERS.some','false && MARKERS.some')],
|
||||
@@ -34,19 +34,25 @@ const specs=[
|
||||
['M22',s,'cap requests invoke helper',transport,t=>t.replace(' if (kind) {',' if (r.cap) await peers.read(socket);\n if (kind) {')],
|
||||
['M23','packages/bus/src/interpreter.mjs','restart retains stale identity',interpreter,t=>t.replace('export function recordInterpreterStart(directory, record) {','export function recordInterpreterStart(directory, record) {\n try { readFileSync(join(directory,"peercred-starts.jsonl")); return; } catch {}')],
|
||||
['M24',w,'listener binds final path directly',socket,t=>t.replace("const temporary = join(parent, '.' + randomBytes(4).toString('hex') + '.s');",'const temporary = path;')],
|
||||
- ['M25','packages/bus/src/interpreter.mjs','FIFO receipt blocks before type refusal',['--test-name-pattern=non-regular startup receipt',interpreter],t=>t.replaceAll(' | constants.O_NONBLOCK','')],
|
||||
+ ['M25','packages/bus/src/interpreter.mjs','FIFO receipt blocks before type refusal',['--test-name-pattern=non-regular startup receipt',interpreter],t=>t.replace('constants.O_WRONLY | constants.O_APPEND | constants.O_CREAT | constants.O_NOFOLLOW | constants.O_NONBLOCK, 0o600','constants.O_WRONLY | constants.O_APPEND | constants.O_CREAT | constants.O_NOFOLLOW, 0o600')],
|
||||
['M26',peer,'missing helper accepted at startup',['--test-name-pattern=missing or non-regular peer helper','packages/bus/tests/peercred.test.mjs'],t=>t.replace('if (!s.isFile() || s.isSymbolicLink()) throw Error();','if (false) throw Error();').replace('catch { throw refused(); }','catch {}')],
|
||||
['M27',peer,'shutdown returns before helpers are reaped',['--test-name-pattern=shutdown waits','packages/bus/tests/peercred.test.mjs'],t=>t.replace(" await Promise.all([...children].map(child => new Promise(resolve => {\n child.once('close', resolve);\n child.kill('SIGKILL');\n })));"," for (const child of children) child.kill('SIGKILL');")],
|
||||
- ['M28','scripts/stack-release.sh','proof pair placed after tester socket flag',release,t=>t.replace('--send | --tester-port | --tester-socket) break','--send | --tester-port) break')],
|
||||
- ['M29','scripts/stack-release.sh','unsafe tester path reaches service stop',release,t=>t.split('\n').filter(line=>!line.includes('|| check_refuse tester-socket-path')).join('\n')],
|
||||
+ ['M28','scripts/stack-release.sh','proof pair placed after tester socket flag',release,t=>t.replace('case "${without_proof[i]}" in --send | --tester-port | --tester-socket) break','case "${without_proof[i]}" in --send | --tester-port) break')],
|
||||
+ ['M28b','scripts/stack-release.sh','SSO placed after tester socket flag',['--test-name-pattern=row196 SSO socket','packages/cli/tests/stack-release.test.mjs'],t=>t.replace('case "${kept[i]}" in --send | --tester-port | --tester-socket) break','case "${kept[i]}" in --send | --tester-port) break')],
|
||||
+ ['M29','scripts/stack-release.sh','unsafe tester path reaches service stop',release,t=>t.replace(t.split('\n').find(line=>line.includes('|| check_refuse tester-socket-path'))+'\n','')],
|
||||
];
|
||||
const hash=x=>createHash('sha256').update(x).digest('hex');
|
||||
const results=[];
|
||||
+for (const [id,file,,,mutate] of specs) {
|
||||
+ try { guardMutation(readFileSync(join(root,file),'utf8'),mutate); }
|
||||
+ catch(error) { throw Error(id+': '+error.message); }
|
||||
+}
|
||||
+const scratch=mkdtempSync(join(tmpdir(),'g196-mut-'));
|
||||
try {
|
||||
for(const name of ['packages','scripts','adapters','roles','contracts','RELEASE','package.json','package-lock.json','.git'])if(existsSync(join(root,name)))cpSync(join(root,name),join(scratch,name),{recursive:true,filter:src=>!src.includes('/node_modules/')&&!src.endsWith('/node_modules')});
|
||||
symlinkSync(join(root,'node_modules'),join(scratch,'node_modules'));
|
||||
for(const [id,file,description,test,mutate] of specs) {
|
||||
- const at=join(scratch,file),original=readFileSync(at,'utf8'),before=hash(original),changed=mutate(original);
|
||||
+ const at=join(scratch,file),original=readFileSync(at,'utf8'),before=hash(original),changed=guardMutation(original,mutate).text;
|
||||
if(changed===original)throw Error(id+' did not change bytes');
|
||||
writeFileSync(at,changed);
|
||||
const syntax=spawnSync(file.endsWith('.sh')?'bash':process.execPath,[file.endsWith('.sh')?'-n':'--check',at],{encoding:'utf8'});
|
||||
diff --git a/agents/gander/work/queue-196/r2/driver.mjs b/agents/gander/work/queue-196/r2/driver.mjs
|
||||
index 508fa4ad3..44b8b1988 100644
|
||||
--- a/agents/gander/work/queue-196/r2/driver.mjs
|
||||
+++ b/agents/gander/work/queue-196/r2/driver.mjs
|
||||
@@ -1,3 +1,4 @@
|
||||
+import { guardMutation } from '../mutant-guard.mjs';
|
||||
// Authorized batch only. Mutate isolated scratch copies, never the candidate or installed tree.
|
||||
import {mkdtempSync,cpSync,readFileSync,writeFileSync,rmSync,symlinkSync,existsSync,mkdirSync} from 'node:fs';
|
||||
import {tmpdir} from 'node:os';import {join,resolve} from 'node:path';
|
||||
@@ -5,7 +6,6 @@ import {spawnSync,execFileSync} from 'node:child_process';import {createHash} fr
|
||||
import {fileURLToPath} from 'node:url';
|
||||
const root='/mnt/storage/scratch/tmp/g196-tree-tn651z';
|
||||
const out='/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-196/r2/mutants';mkdirSync(out,{recursive:true});
|
||||
-const scratch=mkdtempSync(join(tmpdir(),'g196-mut-'));
|
||||
const p='packages/bus/src/principal.mjs',h='packages/bus/src/human.mjs',w='packages/webui/src/tester-socket.mjs',s='packages/bus/src/server.mjs',peer='packages/bus/src/peercred.mjs';
|
||||
const principal='packages/bus/tests/principal.test.mjs',socket='packages/webui/tests/tester-socket.test.mjs',transport='packages/bus/tests/peer-transport.test.mjs',interpreter='packages/bus/tests/interpreter.test.mjs';
|
||||
const release=['--test-name-pattern=row196 explicit socket','packages/cli/tests/stack-release.test.mjs'];
|
||||
@@ -14,7 +14,7 @@ const specs=[
|
||||
['M2',w,'socket mode widened',socket,t=>t.replace('chmodSync(temporary, 0o600)','chmodSync(temporary, 0o666)')],
|
||||
['M3','packages/webui/src/serve.mjs','sign-in accepted on tester',socket,t=>t.replace("if (tester && (Object.hasOwn(req.headers, 'authorization')", "if (false && (Object.hasOwn(req.headers, 'authorization')")],
|
||||
['M4',p,'copied PID accepted',principal,t=>t.replace('peer.pid !== proof.pid','false')],
|
||||
- ['M5',peer,'helper parse error ignored','packages/bus/tests/peercred.test.mjs',t=>t.replace('} catch { finish(true); }','} catch { finish(false, {pid:2,uid:0,gid:0}); }')],
|
||||
+ ['M5',peer,'helper parse error ignored','packages/bus/tests/peercred.test.mjs',t=>t.replace('finish(false, Object.freeze(p));\n } catch { finish(true); }','finish(false, Object.freeze(p));\n } catch { finish(false, {pid:2,uid:0,gid:0}); }')],
|
||||
['M6',p,'foreign uid accepted',principal,t=>t.replace('peer.uid !== process.getuid()','false')],
|
||||
['M7',w,'unsafe parent accepted',socket,t=>t.replace('(dir.mode & 0o077)','false')],
|
||||
['M8',h,'agent environment walk skipped',principal,t=>t.replace('current.env !== null && MARKERS.some','false && MARKERS.some')],
|
||||
@@ -34,20 +34,26 @@ const specs=[
|
||||
['M22',s,'cap requests invoke helper',transport,t=>t.replace(' if (kind) {',' if (r.cap) await peers.read(socket);\n if (kind) {')],
|
||||
['M23','packages/bus/src/interpreter.mjs','restart retains stale identity',interpreter,t=>t.replace('export function recordInterpreterStart(directory, record) {','export function recordInterpreterStart(directory, record) {\n try { readFileSync(join(directory,"peercred-starts.jsonl")); return; } catch {}')],
|
||||
['M24',w,'listener binds final path directly',socket,t=>t.replace("const temporary = join(parent, '.' + randomBytes(4).toString('hex') + '.s');",'const temporary = path;')],
|
||||
- ['M25','packages/bus/src/interpreter.mjs','FIFO receipt blocks before type refusal',['--test-name-pattern=non-regular startup receipt',interpreter],t=>t.replaceAll(' | constants.O_NONBLOCK','')],
|
||||
+ ['M25','packages/bus/src/interpreter.mjs','FIFO receipt blocks before type refusal',['--test-name-pattern=non-regular startup receipt',interpreter],t=>t.replace('constants.O_WRONLY | constants.O_APPEND | constants.O_CREAT | constants.O_NOFOLLOW | constants.O_NONBLOCK, 0o600','constants.O_WRONLY | constants.O_APPEND | constants.O_CREAT | constants.O_NOFOLLOW, 0o600')],
|
||||
['M26',peer,'missing helper accepted at startup',['--test-name-pattern=missing or non-regular peer helper','packages/bus/tests/peercred.test.mjs'],t=>t.replace('if (!s.isFile() || s.isSymbolicLink()) throw Error();','if (false) throw Error();').replace('catch { throw refused(); }','catch {}')],
|
||||
['M27',peer,'shutdown returns before helpers are reaped',['--test-name-pattern=shutdown waits','packages/bus/tests/peercred.test.mjs'],t=>t.replace(" await Promise.all([...children].map(child => new Promise(resolve => {\n child.once('close', resolve);\n child.kill('SIGKILL');\n })));"," for (const child of children) child.kill('SIGKILL');")],
|
||||
- ['M28','scripts/stack-release.sh','proof pair placed after tester socket flag',release,t=>t.replace('--send | --tester-port | --tester-socket) break','--send | --tester-port) break')],
|
||||
- ['M29','scripts/stack-release.sh','unsafe tester path reaches service stop',release,t=>t.split('\n').filter(line=>!line.includes('|| check_refuse tester-socket-path')).join('\n')],
|
||||
+ ['M28','scripts/stack-release.sh','proof pair placed after tester socket flag',release,t=>t.replace('case "${without_proof[i]}" in --send | --tester-port | --tester-socket) break','case "${without_proof[i]}" in --send | --tester-port) break')],
|
||||
+ ['M28b','scripts/stack-release.sh','SSO placed after tester socket flag',['--test-name-pattern=row196 SSO socket','packages/cli/tests/stack-release.test.mjs'],t=>t.replace('case "${kept[i]}" in --send | --tester-port | --tester-socket) break','case "${kept[i]}" in --send | --tester-port) break')],
|
||||
+ ['M29','scripts/stack-release.sh','unsafe tester path reaches service stop',release,t=>t.replace(t.split('\n').find(line=>line.includes('|| check_refuse tester-socket-path'))+'\n','')],
|
||||
];
|
||||
const hash=x=>createHash('sha256').update(x).digest('hex');
|
||||
const results=[];
|
||||
+for (const [id,file,,,mutate] of specs) {
|
||||
+ try { guardMutation(readFileSync(join(root,file),'utf8'),mutate); }
|
||||
+ catch(error) { throw Error(id+': '+error.message); }
|
||||
+}
|
||||
+const scratch=mkdtempSync(join(tmpdir(),'g196-mut-'));
|
||||
try {
|
||||
for(const name of ['packages','scripts','adapters','roles','contracts','RELEASE','package.json','package-lock.json','.gitignore'])if(existsSync(join(root,name)))cpSync(join(root,name),join(scratch,name),{recursive:true,filter:src=>!src.includes('/node_modules/')&&!src.endsWith('/node_modules')});
|
||||
symlinkSync(join(root,'node_modules'),join(scratch,'node_modules'));
|
||||
for(const args of [['init','-q'],['add','.'],['-c','user.name=fixture','-c','user.email=fixture@invalid','-c','commit.gpgsign=false','-c','core.hooksPath=/dev/null','commit','-qm','candidate snapshot']])execFileSync('git',args,{cwd:scratch});
|
||||
for(const [id,file,description,test,mutate] of specs) {
|
||||
- const at=join(scratch,file),original=readFileSync(at,'utf8'),before=hash(original),changed=mutate(original);
|
||||
+ const at=join(scratch,file),original=readFileSync(at,'utf8'),before=hash(original),changed=guardMutation(original,mutate).text;
|
||||
if(changed===original)throw Error(id+' did not change bytes');
|
||||
writeFileSync(at,changed);
|
||||
const syntax=spawnSync(file.endsWith('.sh')?'bash':process.execPath,[file.endsWith('.sh')?'-n':'--check',at],{encoding:'utf8'});
|
||||
@@ -0,0 +1,51 @@
|
||||
diff --git a/agents/gander/work/queue-196/BUILD.md b/agents/gander/work/queue-196/BUILD.md
|
||||
index 693840d15..ce3dde23e 100644
|
||||
--- a/agents/gander/work/queue-196/BUILD.md
|
||||
+++ b/agents/gander/work/queue-196/BUILD.md
|
||||
@@ -102,3 +102,5 @@ changes are planned before the batch. M1-M29 remain prepared and unexecuted.
|
||||
2026-10-21 sage-2063: driver uses only node --check for syntax validity; runtime test failures count as kills, and the r2 driver records GNU timeout process-group TERM/KILL exits so blocked descendants cannot survive. No rerun before next clear.
|
||||
|
||||
2026-10-21 r2 stop 2: base killer invocations 14/0 under 30 seconds each; M23-M27 killed, M28 survived due rebase making its generic mutation target the earlier SSO insertion. No M29 or golden suite run. Every restored hash and Git status clean; leftover process sweep count 0. Slot returned to Sage in gander-0035. Full per-step counts, base/mutant times and kill table in r2/run2/. Awaiting ruling before any fix or rerun; third stop goes to Mos.
|
||||
+
|
||||
+2026-10-21 sage-2072 product test: added the merge-scoped SSO/socket conversion case without --send, asserting pointer argv order, rendered unit argv order, status agreement and no secret-file reads. Removing socket from sso_for_target is its planned RED case (M28b). Focused RED/GREEN remains pending the busy gate: Herb's suite was active at the preflight, so no test started. Runtime code unchanged. Mos mos-1197 owner-subject ruling recorded in queue-252/BUILD-NOTES.md.
|
||||
diff --git a/agents/gander/work/queue-252/BUILD-NOTES.md b/agents/gander/work/queue-252/BUILD-NOTES.md
|
||||
index a62689135..0f767505a 100644
|
||||
--- a/agents/gander/work/queue-252/BUILD-NOTES.md
|
||||
+++ b/agents/gander/work/queue-252/BUILD-NOTES.md
|
||||
@@ -25,3 +25,9 @@ Next review is the manifest. No claim of implementation or live enablement.
|
||||
- N5: Extend readProcess's explicit environment allowlist for the Console nonce
|
||||
and subject metadata keys. Test missing/mismatched keys and distinct namespaces;
|
||||
J5 must reach that check. No token or cookie enters that environment or logs.
|
||||
+
|
||||
+Mos ruling mos-1197, relayed by sage-2072 (2026-10-21T19:04:12Z): on dragon-lin,
|
||||
+console.sso contains only Jason's sub, so one configured subject is one owner.
|
||||
+No second subject is added without Jason. Host .54 is covered by #430. There
|
||||
+is no Jason question now. This supersedes N1's proposed amendment question
|
||||
+above; N2-N5 remain implementation items for the code round.
|
||||
diff --git a/packages/cli/tests/stack-release.test.mjs b/packages/cli/tests/stack-release.test.mjs
|
||||
index 5d114d463..485db7ca0 100644
|
||||
--- a/packages/cli/tests/stack-release.test.mjs
|
||||
+++ b/packages/cli/tests/stack-release.test.mjs
|
||||
@@ -2300,3 +2300,22 @@ test('row196 explicit socket conversion refuses inherited TCP before stop and ro
|
||||
r=await run(long,'activate',C1,'acme','--tester-socket');
|
||||
assert.equal(r.code,3,r.out+r.err);assert.match(r.err,/tester-socket-path/);assert.deepEqual(startsStops(long,before),[]);
|
||||
});
|
||||
+
|
||||
+// Row196 merge guard: without --send, SSO insertion must still precede the socket flag.
|
||||
+test('row196 SSO socket conversion pins pointer and unit argv order without send',async t=>{
|
||||
+ const e=await mk(t);await seedPreview(e,{copy:B});await ssoConfig(e);
|
||||
+ const file=join(COPIES,C1,'packages/webui/src/cli.mjs'),original=readFileSync(file,'utf8');
|
||||
+ chmodSync(file,0o644);writeFileSync(file,original+'\n// MOSAIC_TESTER_SOCKET_V1\n// --tester-socket\n');chmodSync(file,0o444);
|
||||
+ t.after(()=>{chmodSync(file,0o644);writeFileSync(file,original);chmodSync(file,0o444);});
|
||||
+ const module=join(COPIES,C1,'packages/bus/src/interpreter.mjs');
|
||||
+ chmodSync(dirname(module),0o755);
|
||||
+ writeFileSync(module,'export const inspectInterpreter=()=>({path:"/usr/bin/python3",sha256:"fixture"});export const verifyInterpreterReceipt=()=>true;\n');chmodSync(module,0o444);chmodSync(dirname(module),0o555);
|
||||
+ t.after(()=>{chmodSync(dirname(module),0o755);rmSync(module);chmodSync(dirname(module),0o555);});
|
||||
+ const r=await prun(e,'activate',C1,'acme','--sso','--tester-socket');assert.equal(r.code,0,r.out+r.err);
|
||||
+ const want=['--port',e.port,'--business','acme','--sso','--tester-socket'];
|
||||
+ assert.deepEqual(pointer(e).console,want);
|
||||
+ assert.ok(conExec(e).endsWith(` --checkout ${repo} ${want.join(' ')}`),conExec(e));
|
||||
+ assert.doesNotMatch(conExec(e),/ --send(?: |$)|--tester-port|--public-host|--proof-header/);
|
||||
+ const status=await prun(e,'status','acme');assert.equal(status.code,0,status.out+status.err);assert.match(status.out,/unit flags: match the pointer/);
|
||||
+ await noLeak(e);
|
||||
+});
|
||||
@@ -0,0 +1,9 @@
|
||||
diff --git a/agents/gander/work/queue-196/PROGRESS.md b/agents/gander/work/queue-196/PROGRESS.md
|
||||
index 792be51f7..68392995b 100644
|
||||
--- a/agents/gander/work/queue-196/PROGRESS.md
|
||||
+++ b/agents/gander/work/queue-196/PROGRESS.md
|
||||
@@ -20,3 +20,4 @@ sage-1464 (2026-10-20T20:40Z): renewed bus/WebUI/CLI and M1-M29 slot is fifth, a
|
||||
sage-2051 / mos-1193 (2026-10-21T18:45Z) explicitly orders committing and fast-forward pushing the current row196 build before its deferred full verification, then rebasing onto a36523713 on new gander/row196-r2. This supersedes the earlier no-product-commit-before-suite gate for this preservation commit only. Full acceptance remains pending. No tests until Sage says clear. Subsequent batch order: M1-M29, bus, WebUI, CLI, every whole scripts/test-*.sh; TMPDIR must be created with mktemp under /mnt/storage/scratch/tmp, never /tmp. Preserve the old branch. Row252 design may proceed while waiting; no row252 code before Webby approves.
|
||||
sage-2058 clear: clean detached 64539c96b worktree, short scratch TMPDIR, busy && before starts, pipefail and tee, mutation restoration hash and Git-status checks. M1-M22 killed; M23 rejected by broad runtime SyntaxError classification despite passing node --check, 3 pass/2 fail in killer. Stopped, restored clean, slot returned gander-0031 18:51:50Z. No suites started. sage-2063 calls stop 1; driver fix separately committed, no rerun before next clear. r2/REBASE.md records all ten conflict resolutions. Row252 design drafted, no code.
|
||||
sage-2065 clear at 18:58:34Z: base killers 14/0, wall seconds interpreter 1.470, socket 1.528, peer 2.092, focused release 7.983. M23-M27 killed, no outer timeout. M28 survived because its generic first replacement now hits upstream sso_for_target, not the intended proof insertion. Stopped before M29 or any suite, restored every file and Git status clean; sweep found 0 leftover node/tee/Python readers. Slot handed back gander-0035 at 19:01:26Z. This is stop 2, awaiting Sage ruling; no mutation fix/rerun. r2/run2/SUMMARY.md and kill-table.json preserve counts and timings. Webby approved row252 design r1; nonblocking N1-N5 recorded in queue-252/BUILD-NOTES.md; code still waits on row196 landing and PRD amendment.
|
||||
+sage-2079 (2026-10-21T19:09:49Z) accepts product test commit 1bb1e8dd6 and driver 42b47f36c. M5 prior kill stands by identical mutated sha; narrowed M25 differs and reruns. Gate and Duckworth merge-scoped candidate is 1bb1e8dd6. Hold until Sage clear after Herb 215: first focused SSO RED/GREEN, then M25/M28/M28b/M29, then whole bus/WebUI/CLI and every whole scripts/test-*.sh. Third stop goes to Mos before another run. No tests started during this hold.
|
||||
@@ -0,0 +1,2 @@
|
||||
{"name":"interpreter","args":["packages/bus/tests/interpreter.test.mjs"],"seconds":1.590576636,"status":0,"signal":null}
|
||||
{"name":"release","args":["--test-name-pattern=row196 explicit socket","packages/cli/tests/stack-release.test.mjs"],"seconds":8.452289073,"status":0,"signal":null}
|
||||
@@ -0,0 +1,13 @@
|
||||
✔ system Python is a resolved root-owned ELF, never a shim or home interpreter (2.150681ms)
|
||||
✔ real system interpreter is available and safely inspected (21.894937ms)
|
||||
✔ restart receipt appends actual replacement identity and refuses unsafe files (3.667317ms)
|
||||
✔ activation gate compares fresh startup receipt to the current interpreter identity (1.389538ms)
|
||||
✔ non-regular startup receipt refuses promptly without waiting on a FIFO peer (29.362625ms)
|
||||
ℹ tests 5
|
||||
ℹ suites 0
|
||||
ℹ pass 5
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 107.514135
|
||||
@@ -0,0 +1,9 @@
|
||||
✔ row196 explicit socket conversion refuses inherited TCP before stop and rollback disables socket (6189.833666ms)
|
||||
ℹ tests 1
|
||||
ℹ suites 0
|
||||
ℹ pass 1
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 6962.12692
|
||||
@@ -0,0 +1,21 @@
|
||||
[
|
||||
{
|
||||
"name": "interpreter",
|
||||
"args": [
|
||||
"packages/bus/tests/interpreter.test.mjs"
|
||||
],
|
||||
"seconds": 1.590576636,
|
||||
"status": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"name": "release",
|
||||
"args": [
|
||||
"--test-name-pattern=row196 explicit socket",
|
||||
"packages/cli/tests/stack-release.test.mjs"
|
||||
],
|
||||
"seconds": 8.452289073,
|
||||
"status": 0,
|
||||
"signal": null
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,9 @@
|
||||
import {spawnSync} from 'node:child_process';import {writeFileSync} from 'node:fs';import {performance} from 'node:perf_hooks';
|
||||
const root='/mnt/storage/scratch/tmp/g196-tree-tn651z',out=new URL('.',import.meta.url).pathname;
|
||||
const jobs=[['interpreter',['packages/bus/tests/interpreter.test.mjs']],['release',['--test-name-pattern=row196 explicit socket','packages/cli/tests/stack-release.test.mjs']]];
|
||||
const results=[];
|
||||
for(const [name,args] of jobs){
|
||||
const start=performance.now(),r=spawnSync('bash',['-c','set -o pipefail; python3 "$G196_BUSY" && "$G196_NODE" --test "$@" 2>&1 | tee "$G196_LOG"','--',...args],{cwd:root,env:{...process.env,G196_NODE:process.execPath,G196_LOG:out+'base-'+name+'.log'},encoding:'utf8',maxBuffer:4*1024*1024});
|
||||
const seconds=(performance.now()-start)/1000;const result={name,args,seconds,status:r.status,signal:r.signal};results.push(result);writeFileSync(out+'base-results.json',JSON.stringify(results,null,2)+'\n');console.log(JSON.stringify(result));
|
||||
if(r.status!==0||seconds>30){process.exitCode=1;break;}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
M25 KILLED base=1.590576636s timeout=false
|
||||
M28 KILLED base=8.452289073s timeout=false
|
||||
M28b KILLED base=4.386869599s timeout=false
|
||||
M29 KILLED base=8.452289073s timeout=false
|
||||
@@ -0,0 +1,81 @@
|
||||
import { guardMutation } from '../../mutant-guard.mjs';
|
||||
// Authorized batch only. Mutate isolated scratch copies, never the candidate or installed tree.
|
||||
import {mkdtempSync,cpSync,readFileSync,writeFileSync,rmSync,symlinkSync,existsSync,mkdirSync} from 'node:fs';
|
||||
import {tmpdir} from 'node:os';import {join,resolve} from 'node:path';
|
||||
import {spawnSync,execFileSync} from 'node:child_process';import {createHash} from 'node:crypto';
|
||||
import {fileURLToPath} from 'node:url';
|
||||
const root='/mnt/storage/scratch/tmp/g196-tree-tn651z';
|
||||
const out='/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-196/r3/gate/killers';mkdirSync(out,{recursive:true});
|
||||
const p='packages/bus/src/principal.mjs',h='packages/bus/src/human.mjs',w='packages/webui/src/tester-socket.mjs',s='packages/bus/src/server.mjs',peer='packages/bus/src/peercred.mjs';
|
||||
const principal='packages/bus/tests/principal.test.mjs',socket='packages/webui/tests/tester-socket.test.mjs',transport='packages/bus/tests/peer-transport.test.mjs',interpreter='packages/bus/tests/interpreter.test.mjs';
|
||||
const release=['--test-name-pattern=row196 explicit socket','packages/cli/tests/stack-release.test.mjs'];
|
||||
const specs=[
|
||||
['M1', 'packages/webui/src/serve.mjs','tester uses TCP',socket, text=>text.replace('if (tester) return bindTesterSocket(server, testerSocket);',"if (tester) return new Promise(r=>server.listen(0,'127.0.0.1',()=>r(server)));" )],
|
||||
['M2',w,'socket mode widened',socket,t=>t.replace('chmodSync(temporary, 0o600)','chmodSync(temporary, 0o666)')],
|
||||
['M3','packages/webui/src/serve.mjs','sign-in accepted on tester',socket,t=>t.replace("if (tester && (Object.hasOwn(req.headers, 'authorization')", "if (false && (Object.hasOwn(req.headers, 'authorization')")],
|
||||
['M4',p,'copied PID accepted',principal,t=>t.replace('peer.pid !== proof.pid','false')],
|
||||
['M5',peer,'helper parse error ignored','packages/bus/tests/peercred.test.mjs',t=>t.replace('finish(false, Object.freeze(p));\n } catch { finish(true); }','finish(false, Object.freeze(p));\n } catch { finish(false, {pid:2,uid:0,gid:0}); }')],
|
||||
['M6',p,'foreign uid accepted',principal,t=>t.replace('peer.uid !== process.getuid()','false')],
|
||||
['M7',w,'unsafe parent accepted',socket,t=>t.replace('(dir.mode & 0o077)','false')],
|
||||
['M8',h,'agent environment walk skipped',principal,t=>t.replace('current.env !== null && MARKERS.some','false && MARKERS.some')],
|
||||
['M9',h,'leaf identity not reread',principal,t=>t.replace('if (again.startTime !== proof.startTime || again.ppid !== p.ppid)','if (false)')],
|
||||
['M10',p,'Console direct-parent check removed',principal,t=>t.replace("if (parent.uid !== peer.uid || parent.argv[1] !== resolve(paths.console) || parent.argv[2] !== 'serve')",'if (false)')],
|
||||
['M11',p,'Console basename accepted',principal,t=>t.replace("import { resolve }", "import { resolve, basename }").replace('parent.argv[1] !== resolve(paths.console)','basename(parent.argv[1] ?? "") !== basename(paths.console)')],
|
||||
['M12',h,'unknown proof identity accepted',principal,t=>t.replace("Object.keys(proof).some((k) => !['pid', 'startTime', 'nonce', 'business'].includes(k))",'false')],
|
||||
['M13',s,'transient cap leaked',transport,t=>t.replace('broker.disconnect(boundCap)','void(boundCap)')],
|
||||
['M14',p,'tester walk used for user',principal,t=>t.replace("verifyHuman(checked, { cliPath: paths[kind], launches, readProcess,\n nonceKey: kind === 'user' ? 'MOSAIC_BUS_USER_NONCE' : 'MOSAIC_BUS_CLI_NONCE' })",'verifyTester(checked, {cliPath:paths[kind],launches,readProcess,readNonce:()=>checked.nonce})')],
|
||||
['M15','scripts/stack-release.sh','TCP retained during conversion',release,t=>t.replace('RUN_CONSOLE=("${without_tester[@]}" --tester-socket)','RUN_CONSOLE=("${BASE_CONSOLE[@]}" --tester-socket)')],
|
||||
['M16','scripts/stack-release.sh','TCP reopened on downgrade',release,t=>t.replace('RUN_CONSOLE=("${without_tester[@]}") DROP_TESTER="--tester-socket','RUN_CONSOLE=("${without_tester[@]}" --tester-port 7333) DROP_TESTER="--tester-socket')],
|
||||
['M17','packages/bus/src/broker.mjs','tester switch ignored','packages/bus/tests/tester.test.mjs',t=>t.replace("if (this.#business(record.business).vars?.['bus.tester'] !== true)",'if (false)')],
|
||||
['M18',p,'user kind becomes owner',principal,t=>t.replace("return { kind: 'user', business, id: proof.user }","return { kind: 'owner', business, id: proof.user }")],
|
||||
['M19','packages/cli/src/tester-http.mjs','selected instance root ignored',socket,t=>t.replace('socketPath: testerSocketPath(dataRoot)','socketPath: testerSocketPath(dataRoot + "/wrong-instance")')],
|
||||
['M20',peer,'helper gets another pending socket','packages/bus/tests/peercred.test.mjs',t=>t.replace('export function createPeerReader','function originalPeerReader')+`\nexport function createPeerReader(options){const base=originalPeerReader(options),queue=[];let scheduled=false;return{read(socket){return new Promise((resolve,reject)=>{queue.push({socket,resolve,reject});if(!scheduled){scheduled=true;queueMicrotask(()=>{scheduled=false;const jobs=queue.splice(0);jobs.forEach((job,i)=>base.read(jobs[(i+1)%jobs.length].socket).then(job.resolve,job.reject));});}});},close(){base.close();}};}\n`],
|
||||
['M21','packages/bus/src/interpreter.mjs','user-owned interpreter accepted',interpreter,t=>t.replace('s.uid !== 0 || (s.mode & 0o022)','false || (s.mode & 0o022)')],
|
||||
['M22',s,'cap requests invoke helper',transport,t=>t.replace(' if (kind) {',' if (r.cap) await peers.read(socket);\n if (kind) {')],
|
||||
['M23','packages/bus/src/interpreter.mjs','restart retains stale identity',interpreter,t=>t.replace('export function recordInterpreterStart(directory, record) {','export function recordInterpreterStart(directory, record) {\n try { readFileSync(join(directory,"peercred-starts.jsonl")); return; } catch {}')],
|
||||
['M24',w,'listener binds final path directly',socket,t=>t.replace("const temporary = join(parent, '.' + randomBytes(4).toString('hex') + '.s');",'const temporary = path;')],
|
||||
['M25','packages/bus/src/interpreter.mjs','FIFO receipt blocks before type refusal',['--test-name-pattern=non-regular startup receipt',interpreter],t=>t.replace('constants.O_WRONLY | constants.O_APPEND | constants.O_CREAT | constants.O_NOFOLLOW | constants.O_NONBLOCK, 0o600','constants.O_WRONLY | constants.O_APPEND | constants.O_CREAT | constants.O_NOFOLLOW, 0o600')],
|
||||
['M26',peer,'missing helper accepted at startup',['--test-name-pattern=missing or non-regular peer helper','packages/bus/tests/peercred.test.mjs'],t=>t.replace('if (!s.isFile() || s.isSymbolicLink()) throw Error();','if (false) throw Error();').replace('catch { throw refused(); }','catch {}')],
|
||||
['M27',peer,'shutdown returns before helpers are reaped',['--test-name-pattern=shutdown waits','packages/bus/tests/peercred.test.mjs'],t=>t.replace(" await Promise.all([...children].map(child => new Promise(resolve => {\n child.once('close', resolve);\n child.kill('SIGKILL');\n })));"," for (const child of children) child.kill('SIGKILL');")],
|
||||
['M28','scripts/stack-release.sh','proof pair placed after tester socket flag',release,t=>t.replace('case "${without_proof[i]}" in --send | --tester-port | --tester-socket) break','case "${without_proof[i]}" in --send | --tester-port) break')],
|
||||
['M28b','scripts/stack-release.sh','SSO placed after tester socket flag',['--test-name-pattern=row196 SSO socket','packages/cli/tests/stack-release.test.mjs'],t=>t.replace('case "${kept[i]}" in --send | --tester-port | --tester-socket) break','case "${kept[i]}" in --send | --tester-port) break')],
|
||||
['M29','scripts/stack-release.sh','unsafe tester path reaches service stop',release,t=>t.replace(t.split('\n').find(line=>line.includes('|| check_refuse tester-socket-path'))+'\n','')],
|
||||
];
|
||||
const hash=x=>createHash('sha256').update(x).digest('hex');
|
||||
const results=[];
|
||||
for (const [id,file,,,mutate] of specs) {
|
||||
try { guardMutation(readFileSync(join(root,file),'utf8'),mutate); }
|
||||
catch(error) { throw Error(id+': '+error.message); }
|
||||
}
|
||||
const scratch=mkdtempSync(join(tmpdir(),'g196-mut-'));
|
||||
try {
|
||||
for(const name of ['packages','scripts','adapters','roles','contracts','RELEASE','package.json','package-lock.json','.gitignore'])if(existsSync(join(root,name)))cpSync(join(root,name),join(scratch,name),{recursive:true,filter:src=>!src.includes('/node_modules/')&&!src.endsWith('/node_modules')});
|
||||
symlinkSync(join(root,'node_modules'),join(scratch,'node_modules'));
|
||||
for(const args of [['init','-q'],['add','.'],['-c','user.name=fixture','-c','user.email=fixture@invalid','-c','commit.gpgsign=false','-c','core.hooksPath=/dev/null','commit','-qm','candidate snapshot']])execFileSync('git',args,{cwd:scratch});
|
||||
for(const [id,file,description,test,mutate] of specs.filter(row=>['M25','M28','M28b','M29'].includes(row[0]))) {
|
||||
const bases=JSON.parse(readFileSync(new URL('./base-results.json',import.meta.url),'utf8'));
|
||||
const green=JSON.parse(readFileSync(new URL('./sso-results.json',import.meta.url),'utf8')).find(x=>x.name==='sso-green');
|
||||
const base=id==='M28b'?{...green,args:['--test-name-pattern=row196 SSO socket','packages/cli/tests/stack-release.test.mjs']}:bases.find(b=>b.name===(id==='M25'?'interpreter':'release'));
|
||||
if(!base||base.status!==0||base.seconds>30)throw Error(id+' missing or slow passing base');
|
||||
const at=join(scratch,file),original=readFileSync(at,'utf8'),before=hash(original),changed=guardMutation(original,mutate).text;
|
||||
if(changed===original)throw Error(id+' did not change bytes');
|
||||
writeFileSync(at,changed);
|
||||
const syntax=spawnSync(file.endsWith('.sh')?'bash':process.execPath,[file.endsWith('.sh')?'-n':'--check',at],{encoding:'utf8'});
|
||||
if(syntax.status!==0)throw Error(id+' invalid mutation: '+syntax.stderr);
|
||||
const args=['--test',...(Array.isArray(test)?test:[test])];
|
||||
const started=Date.now();
|
||||
const run=spawnSync('timeout',['--signal=TERM','--kill-after=2s','60s','bash','-c','set -o pipefail; python3 "$G196_BUSY" && "$G196_NODE" "$@" 2>&1 | tee "$G196_LOG"','--',...args],{cwd:scratch,env:{...process.env,G196_NODE:process.execPath,G196_LOG:join(out,id+'.txt')},encoding:'utf8',maxBuffer:2*1024*1024});
|
||||
const log=(run.stdout??'')+(run.stderr??'');writeFileSync(join(out,id+'.txt'),log);
|
||||
writeFileSync(at,original);const clean=execFileSync('git',['status','--porcelain'],{cwd:scratch,encoding:'utf8'});if(clean.trim())throw Error(id+' dirty restored tree: '+clean);if(hash(readFileSync(at))!==before)throw Error(id+' restore hash failed');
|
||||
const failed=/[ℹ#]\s*(?:fail|tests failed)\s+[1-9]/.test(log) || /✖/.test(log);
|
||||
// Syntax validity is decided exclusively by the node --check preflight above.
|
||||
// GNU timeout owns a process group and terminates its shell, tee and test descendants.
|
||||
const timedOut=run.status===124||run.status===137;
|
||||
const killed=timedOut||(run.status!==0&&failed);
|
||||
const result={id,description,test,args,status:run.status,signal:run.signal,killed,timedOut,wallSeconds:(Date.now()-started)/1000,baseWallSeconds:base.seconds,baseArgs:base.args,restoredGitStatus:clean,timeoutSeconds:60,timeoutKillAfterSeconds:2,processGroupTimeout:true,syntaxStatus:syntax.status,restoredSha256:before};results.push(result);
|
||||
writeFileSync(join(out,'results.json'),JSON.stringify(results,null,2)+'\n');
|
||||
console.log(id+' '+(killed?'KILLED':'SURVIVED/INVALID')+' base='+base.seconds+'s timeout='+timedOut);
|
||||
if(timedOut&&id!=='M25'){process.exitCode=1;console.log('STOP non-FIFO timeout');break;}
|
||||
if(!killed) {process.exitCode=1;break;}
|
||||
}
|
||||
} finally {rmSync(scratch,{recursive:true,force:true});}
|
||||
@@ -0,0 +1,29 @@
|
||||
CLEAR (current driver ancestors excluded)
|
||||
✖ non-regular startup receipt refuses promptly without waiting on a FIFO peer (1008.075918ms)
|
||||
ℹ tests 1
|
||||
ℹ suites 0
|
||||
ℹ pass 0
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 1060.549377
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/bus/tests/interpreter.test.mjs:69:1
|
||||
✖ non-regular startup receipt refuses promptly without waiting on a FIFO peer (1008.075918ms)
|
||||
AssertionError [ERR_ASSERTION]: unsafe FIFO must refuse without blocking startup
|
||||
|
||||
null !== 0
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/gjDR/g196-mut-lzhidl/packages/bus/tests/interpreter.test.mjs:75:9)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: null,
|
||||
expected: 0,
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
CLEAR (current driver ancestors excluded)
|
||||
✖ row196 explicit socket conversion refuses inherited TCP before stop and rollback disables socket (3863.208125ms)
|
||||
ℹ tests 1
|
||||
ℹ suites 0
|
||||
ℹ pass 0
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 4536.035353
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/cli/tests/stack-release.test.mjs:2277:1
|
||||
✖ row196 explicit socket conversion refuses inherited TCP before stop and rollback disables socket (3863.208125ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
... Skipped lines
|
||||
|
||||
[
|
||||
'--port',
|
||||
'37885',
|
||||
'--business',
|
||||
'acme',
|
||||
...
|
||||
'jason',
|
||||
+ '--tester-socket',
|
||||
'--proof-header',
|
||||
'x-console-proof',
|
||||
'--proof-file',
|
||||
'/mnt/storage/scratch/tmp/gjDR/sr-6IN6bS/proof.187',
|
||||
- '--tester-socket'
|
||||
]
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/gjDR/g196-mut-lzhidl/packages/cli/tests/stack-release.test.mjs:2291:9)
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ '--port', '37885', '--business', 'acme', '--public-host', 'console.example', '--auth-header', 'x-user', '--allow-user', 'jason', '--tester-socket', '--proof-header', 'x-console-proof', '--proof-file', '/mnt/storage/scratch/tmp/gjDR/sr-6IN6bS/proof.187' ],
|
||||
expected: [ '--port', '37885', '--business', 'acme', '--public-host', 'console.example', '--auth-header', 'x-user', '--allow-user', 'jason', '--proof-header', 'x-console-proof', '--proof-file', '/mnt/storage/scratch/tmp/gjDR/sr-6IN6bS/proof.187', '--tester-socket' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
CLEAR (current driver ancestors excluded)
|
||||
✖ row196 SSO socket conversion pins pointer and unit argv order without send (2182.8487ms)
|
||||
ℹ tests 1
|
||||
ℹ suites 0
|
||||
ℹ pass 0
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 2883.631603
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/cli/tests/stack-release.test.mjs:2305:1
|
||||
✖ row196 SSO socket conversion pins pointer and unit argv order without send (2182.8487ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
[
|
||||
'--port',
|
||||
'39799',
|
||||
'--business',
|
||||
'acme',
|
||||
+ '--tester-socket',
|
||||
'--sso',
|
||||
- '--tester-socket'
|
||||
]
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/gjDR/g196-mut-lzhidl/packages/cli/tests/stack-release.test.mjs:2316:9)
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ '--port', '39799', '--business', 'acme', '--tester-socket', '--sso' ],
|
||||
expected: [ '--port', '39799', '--business', 'acme', '--sso', '--tester-socket' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
CLEAR (current driver ancestors excluded)
|
||||
✖ row196 explicit socket conversion refuses inherited TCP before stop and rollback disables socket (6565.572186ms)
|
||||
ℹ tests 1
|
||||
ℹ suites 0
|
||||
ℹ pass 0
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 6950.421507
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/cli/tests/stack-release.test.mjs:2277:1
|
||||
✖ row196 explicit socket conversion refuses inherited TCP before stop and rollback disables socket (6565.572186ms)
|
||||
AssertionError [ERR_ASSERTION]: stack-release: interpreter: {"path":"/usr/bin/python3","sha256":"fixture"}
|
||||
stack-release: captured the rollback set: /mnt/storage/scratch/tmp/gjDR/sr-B6ReeQ/data/state/stack-rollback/20261021T192526Z-af666f645a82
|
||||
stack-release: stopped both units
|
||||
stack-release: stopped store schema: 3g
|
||||
stack-release: backup: /mnt/storage/scratch/tmp/gjDR/sr-B6ReeQ/data/backups/stack/20261021T192526Z-af666f645a82
|
||||
stack-release: installed af666f645a823d0eab2ecb7b01a0eefda5e388df
|
||||
stack-release: gate passed on af666f645a823d0eab2ecb7b01a0eefda5e388df
|
||||
stack-release: activate ok: af666f645a823d0eab2ecb7b01a0eefda5e388df is live for acme
|
||||
|
||||
|
||||
0 !== 3
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/gjDR/g196-mut-lzhidl/packages/cli/tests/stack-release.test.mjs:2297:9)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 0,
|
||||
expected: 3,
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
[
|
||||
{
|
||||
"id": "M25",
|
||||
"description": "FIFO receipt blocks before type refusal",
|
||||
"test": [
|
||||
"--test-name-pattern=non-regular startup receipt",
|
||||
"packages/bus/tests/interpreter.test.mjs"
|
||||
],
|
||||
"args": [
|
||||
"--test",
|
||||
"--test-name-pattern=non-regular startup receipt",
|
||||
"packages/bus/tests/interpreter.test.mjs"
|
||||
],
|
||||
"status": 1,
|
||||
"signal": null,
|
||||
"killed": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 2.549,
|
||||
"baseWallSeconds": 1.590576636,
|
||||
"baseArgs": [
|
||||
"packages/bus/tests/interpreter.test.mjs"
|
||||
],
|
||||
"restoredGitStatus": "",
|
||||
"timeoutSeconds": 60,
|
||||
"timeoutKillAfterSeconds": 2,
|
||||
"processGroupTimeout": true,
|
||||
"syntaxStatus": 0,
|
||||
"restoredSha256": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a"
|
||||
},
|
||||
{
|
||||
"id": "M28",
|
||||
"description": "proof pair placed after tester socket flag",
|
||||
"test": [
|
||||
"--test-name-pattern=row196 explicit socket",
|
||||
"packages/cli/tests/stack-release.test.mjs"
|
||||
],
|
||||
"args": [
|
||||
"--test",
|
||||
"--test-name-pattern=row196 explicit socket",
|
||||
"packages/cli/tests/stack-release.test.mjs"
|
||||
],
|
||||
"status": 1,
|
||||
"signal": null,
|
||||
"killed": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 6.09,
|
||||
"baseWallSeconds": 8.452289073,
|
||||
"baseArgs": [
|
||||
"--test-name-pattern=row196 explicit socket",
|
||||
"packages/cli/tests/stack-release.test.mjs"
|
||||
],
|
||||
"restoredGitStatus": "",
|
||||
"timeoutSeconds": 60,
|
||||
"timeoutKillAfterSeconds": 2,
|
||||
"processGroupTimeout": true,
|
||||
"syntaxStatus": 0,
|
||||
"restoredSha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2"
|
||||
},
|
||||
{
|
||||
"id": "M28b",
|
||||
"description": "SSO placed after tester socket flag",
|
||||
"test": [
|
||||
"--test-name-pattern=row196 SSO socket",
|
||||
"packages/cli/tests/stack-release.test.mjs"
|
||||
],
|
||||
"args": [
|
||||
"--test",
|
||||
"--test-name-pattern=row196 SSO socket",
|
||||
"packages/cli/tests/stack-release.test.mjs"
|
||||
],
|
||||
"status": 1,
|
||||
"signal": null,
|
||||
"killed": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 4.308,
|
||||
"baseWallSeconds": 4.386869599,
|
||||
"baseArgs": [
|
||||
"--test-name-pattern=row196 SSO socket",
|
||||
"packages/cli/tests/stack-release.test.mjs"
|
||||
],
|
||||
"restoredGitStatus": "",
|
||||
"timeoutSeconds": 60,
|
||||
"timeoutKillAfterSeconds": 2,
|
||||
"processGroupTimeout": true,
|
||||
"syntaxStatus": 0,
|
||||
"restoredSha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2"
|
||||
},
|
||||
{
|
||||
"id": "M29",
|
||||
"description": "unsafe tester path reaches service stop",
|
||||
"test": [
|
||||
"--test-name-pattern=row196 explicit socket",
|
||||
"packages/cli/tests/stack-release.test.mjs"
|
||||
],
|
||||
"args": [
|
||||
"--test",
|
||||
"--test-name-pattern=row196 explicit socket",
|
||||
"packages/cli/tests/stack-release.test.mjs"
|
||||
],
|
||||
"status": 1,
|
||||
"signal": null,
|
||||
"killed": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 8.462,
|
||||
"baseWallSeconds": 8.452289073,
|
||||
"baseArgs": [
|
||||
"--test-name-pattern=row196 explicit socket",
|
||||
"packages/cli/tests/stack-release.test.mjs"
|
||||
],
|
||||
"restoredGitStatus": "",
|
||||
"timeoutSeconds": 60,
|
||||
"timeoutKillAfterSeconds": 2,
|
||||
"processGroupTimeout": true,
|
||||
"syntaxStatus": 0,
|
||||
"restoredSha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,2 @@
|
||||
{"name":"sso-red","status":1,"signal":null,"seconds":4.244384619,"timedOut":false}
|
||||
{"name":"sso-green","status":0,"signal":null,"seconds":4.386869599,"timedOut":false}
|
||||
@@ -0,0 +1,9 @@
|
||||
✔ row196 SSO socket conversion pins pointer and unit argv order without send (2286.735799ms)
|
||||
ℹ tests 1
|
||||
ℹ suites 0
|
||||
ℹ pass 1
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 2974.25362
|
||||
@@ -0,0 +1,15 @@
|
||||
import {readFileSync,writeFileSync} from 'node:fs';import {spawnSync,execFileSync} from 'node:child_process';import {performance} from 'node:perf_hooks';import {createHash} from 'node:crypto';
|
||||
const root='/mnt/storage/scratch/tmp/g196-tree-tn651z',out=new URL('.',import.meta.url).pathname,file=root+'/scripts/stack-release.sh';
|
||||
const original=readFileSync(file,'utf8'),needle='case "${kept[i]}" in --send | --tester-port | --tester-socket) break';
|
||||
if(original.split(needle).length!==2)throw Error('SSO target not unique');
|
||||
const results=[];
|
||||
function run(name){const start=performance.now();const r=spawnSync('timeout',['--signal=TERM','--kill-after=2s','60s','bash','-c','set -o pipefail; python3 "$G196_BUSY" && "$G196_NODE" --test --test-name-pattern="row196 SSO socket" packages/cli/tests/stack-release.test.mjs 2>&1 | tee "$G196_LOG"'],{cwd:root,env:{...process.env,G196_NODE:process.execPath,G196_LOG:out+name+'.log'},encoding:'utf8',maxBuffer:4*1024*1024});const log=(r.stdout??'')+(r.stderr??'');const result={name,status:r.status,signal:r.signal,seconds:(performance.now()-start)/1000,timedOut:[124,137].includes(r.status)};results.push(result);writeFileSync(out+'sso-results.json',JSON.stringify(results,null,2)+'\n');console.log(JSON.stringify(result));return {r,log,result};}
|
||||
try{
|
||||
writeFileSync(file,original.replace(needle,'case "${kept[i]}" in --send | --tester-port) break'));
|
||||
const {r,log}=run('sso-red');
|
||||
if(r.status!==1||!log.includes('AssertionError')||!log.includes('--sso')||!log.includes('--tester-socket'))throw Error('unexpected RED result; stop');
|
||||
}finally{writeFileSync(file,original);}
|
||||
const {r,result}=run('sso-green');
|
||||
if(r.status!==0||result.seconds>30)throw Error('GREEN failed or over 30 seconds; stop');
|
||||
const clean=execFileSync('git',['status','--porcelain','--','.',':!node_modules'],{cwd:root,encoding:'utf8'});if(clean)throw Error('candidate dirty: '+clean);
|
||||
writeFileSync(out+'sso-restoration.json',JSON.stringify({sha256:createHash('sha256').update(readFileSync(file)).digest('hex'),gitStatus:clean},null,2)+'\n');
|
||||
@@ -0,0 +1,38 @@
|
||||
✖ row196 SSO socket conversion pins pointer and unit argv order without send (2216.853142ms)
|
||||
ℹ tests 1
|
||||
ℹ suites 0
|
||||
ℹ pass 0
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 2829.78359
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/cli/tests/stack-release.test.mjs:2305:1
|
||||
✖ row196 SSO socket conversion pins pointer and unit argv order without send (2216.853142ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
[
|
||||
'--port',
|
||||
'42359',
|
||||
'--business',
|
||||
'acme',
|
||||
+ '--tester-socket',
|
||||
'--sso',
|
||||
- '--tester-socket'
|
||||
]
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/g196-tree-tn651z/packages/cli/tests/stack-release.test.mjs:2316:9)
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ '--port', '42359', '--business', 'acme', '--tester-socket', '--sso' ],
|
||||
expected: [ '--port', '42359', '--business', 'acme', '--sso', '--tester-socket' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"sha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"gitStatus": ""
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
[
|
||||
{
|
||||
"name": "sso-red",
|
||||
"status": 1,
|
||||
"signal": null,
|
||||
"seconds": 4.244384619,
|
||||
"timedOut": false
|
||||
},
|
||||
{
|
||||
"name": "sso-green",
|
||||
"status": 0,
|
||||
"signal": null,
|
||||
"seconds": 4.386869599,
|
||||
"timedOut": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1 @@
|
||||
/mnt/storage/scratch/tmp/gjDR
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"scope": [
|
||||
"/mnt/storage/scratch/tmp/g196-tree-tn651z",
|
||||
"/mnt/storage/scratch/tmp/gjDR",
|
||||
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
|
||||
],
|
||||
"leftovers": [],
|
||||
"count": 0
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"roots": [],
|
||||
"terminated": []
|
||||
}
|
||||
Whitespace-only changes.
@@ -0,0 +1 @@
|
||||
81901f8d5fe07e7b941d398f9240e835df29cb64 0000000000000000000000000000000000000000
|
||||
@@ -0,0 +1 @@
|
||||
81901f8d5fe07e7b941d398f9240e835df29cb64 0000000000000000000000000000000000000000
|
||||
@@ -0,0 +1,2 @@
|
||||
/mnt/storage/scratch/tmp/g196-tree-tn651z
|
||||
/mnt/storage/scratch/tmp/gDLo
|
||||
@@ -0,0 +1 @@
|
||||
533c50a4efc6e0dc8fa3b6da4b1456029bbda490 0000000000000000000000000000000000000000
|
||||
@@ -0,0 +1 @@
|
||||
533c50a4efc6e0dc8fa3b6da4b1456029bbda490 0000000000000000000000000000000000000000
|
||||
@@ -0,0 +1,10 @@
|
||||
diff --git a/agents/gander/work/queue-196/PROGRESS.md b/agents/gander/work/queue-196/PROGRESS.md
|
||||
index 792be51f7..b2a58b1f5 100644
|
||||
--- a/agents/gander/work/queue-196/PROGRESS.md
|
||||
+++ b/agents/gander/work/queue-196/PROGRESS.md
|
||||
@@ -20,3 +20,5 @@ sage-1464 (2026-10-20T20:40Z): renewed bus/WebUI/CLI and M1-M29 slot is fifth, a
|
||||
sage-2051 / mos-1193 (2026-10-21T18:45Z) explicitly orders committing and fast-forward pushing the current row196 build before its deferred full verification, then rebasing onto a36523713 on new gander/row196-r2. This supersedes the earlier no-product-commit-before-suite gate for this preservation commit only. Full acceptance remains pending. No tests until Sage says clear. Subsequent batch order: M1-M29, bus, WebUI, CLI, every whole scripts/test-*.sh; TMPDIR must be created with mktemp under /mnt/storage/scratch/tmp, never /tmp. Preserve the old branch. Row252 design may proceed while waiting; no row252 code before Webby approves.
|
||||
sage-2058 clear: clean detached 64539c96b worktree, short scratch TMPDIR, busy && before starts, pipefail and tee, mutation restoration hash and Git-status checks. M1-M22 killed; M23 rejected by broad runtime SyntaxError classification despite passing node --check, 3 pass/2 fail in killer. Stopped, restored clean, slot returned gander-0031 18:51:50Z. No suites started. sage-2063 calls stop 1; driver fix separately committed, no rerun before next clear. r2/REBASE.md records all ten conflict resolutions. Row252 design drafted, no code.
|
||||
sage-2065 clear at 18:58:34Z: base killers 14/0, wall seconds interpreter 1.470, socket 1.528, peer 2.092, focused release 7.983. M23-M27 killed, no outer timeout. M28 survived because its generic first replacement now hits upstream sso_for_target, not the intended proof insertion. Stopped before M29 or any suite, restored every file and Git status clean; sweep found 0 leftover node/tee/Python readers. Slot handed back gander-0035 at 19:01:26Z. This is stop 2, awaiting Sage ruling; no mutation fix/rerun. r2/run2/SUMMARY.md and kill-table.json preserve counts and timings. Webby approved row252 design r1; nonblocking N1-N5 recorded in queue-252/BUILD-NOTES.md; code still waits on row196 landing and PRD amendment.
|
||||
+sage-2079 (2026-10-21T19:09:49Z) accepts product test commit 1bb1e8dd6 and driver 42b47f36c. M5 prior kill stands by identical mutated sha; narrowed M25 differs and reruns. Gate and Duckworth merge-scoped candidate is 1bb1e8dd6. Hold until Sage clear after Herb 215: first focused SSO RED/GREEN, then M25/M28/M28b/M29, then whole bus/WebUI/CLI and every whole scripts/test-*.sh. Third stop goes to Mos before another run. No tests started during this hold.
|
||||
+sage-2083: rebased six r2 commits onto origin/refactor 6096b051b on new gander/row196-r3, preserving r2. New pushed tip b1076c8b8, no conflicts. All six range-diff entries are =; aggregate patch-id before/after 81901f8d5fe07e7b941d398f9240e835df29cb64, product-test patch-id 533c50a4efc6e0dc8fa3b6da4b1456029bbda490. Requested diff-stat from 1bb1e8dd6 to r3 on all ten mutated paths is empty. Clean detached gate worktree pinned b1076c8b8, linked dependencies, fresh short scratch TMPDIR in r3/paths.txt. Reported gander-0041. Hold for Sage clear; no tests started. Order remains SSO RED/GREEN, narrowed M25/M28/M28b/M29, whole bus/WebUI/CLI and all scripts/test-*.sh. Third stop goes to Mos.
|
||||
@@ -0,0 +1,6 @@
|
||||
1: 64539c96b = 1: a95afb43b gander: preserve row 196 human boundary build for rebase
|
||||
2: d218e14bd = 2: 07251d956 gander: record row 196 rebase gate stop and row 252 design
|
||||
3: ab1f0e576 = 3: 9d3ba3f59 gander: classify runtime mutation failures and bound process groups
|
||||
4: ed99ca225 = 4: 0b3cf2742 gander: record r2 stop two timings and approved row 252 notes
|
||||
5: 1bb1e8dd6 = 5: c7e54236e gander: pin SSO and tester socket release argument order
|
||||
6: 42b47f36c = 6: b1076c8b8 gander: guard unique mutation targets and separate SSO ordering mutant
|
||||
@@ -0,0 +1,47 @@
|
||||
# Row 196 r4 on row 215
|
||||
|
||||
Sage withdrew grant sage-2092 in sage-2093 as a base change. It is not a
|
||||
mos-1166 stop. When inspected, the active command had naturally completed
|
||||
SSO RED/GREEN and M25/M28/M28b/M29; no package or shell suite had started.
|
||||
The withdrawn grant's sweep found zero leftover node, tee or Python/FIFO readers.
|
||||
Its exact counts and times remain in r3/gate/. No new test starts without clear.
|
||||
|
||||
Rebased six r3 commits onto e54e05463 on new gander/row196-r4; r3 is preserved.
|
||||
Candidate f8a59e6aadf779d6c42e28cd693bdee1b441f54a.
|
||||
Range-diff: first commit differs on merge context/integration; later five equal.
|
||||
Aggregate stable patch-id changed from 81901f8d5fe07e7b941d398f9240e835df29cb64
|
||||
to 22057b82181f42301c8819fbb5d0be134c8c79bc.
|
||||
SSO test commit stable patch-id remains 533c50a4efc6e0dc8fa3b6da4b1456029bbda490.
|
||||
|
||||
## Every conflicted hunk
|
||||
|
||||
1. BUILD-LOG.md append hunk: retained both row215 build entries, then row196
|
||||
append-only entries. No historical entry removed or rewritten. The raw
|
||||
conflict and resolved context are in conflicts.diff and the candidate.
|
||||
2. packages/bus/src/server.mjs import hunk: retained row215's LIBRARY_VERBS
|
||||
alongside HOST_VERBS, HOSTS_VERBS and PROJECT_FILE_VERBS, then retained row196
|
||||
inspectInterpreter and createPeerReader imports. Library requests keep their
|
||||
awaited branch; every proof still passes kernel-peer verification and every
|
||||
transient cap still uses the idempotent release closure.
|
||||
|
||||
## Automatically merged overlaps inspected
|
||||
|
||||
- runtime.mjs keeps library ensureMirror before socket readiness, library service
|
||||
callbacks and filtering of library mappings out of code-project root scanning,
|
||||
alongside row196 interpreter receipt, reader and principal binding.
|
||||
- server.mjs retains LIBRARY_VERBS in the async request branch and release() on
|
||||
its finalizer, so one-request Console proofs are neither lost nor leaked.
|
||||
- webui CLI keeps libraryFile/libraryStatus handlers on both main and tester
|
||||
handler objects, alongside SSO lifecycle and Unix tester startup. The bus's
|
||||
library authorization remains authoritative; no tester privilege is added.
|
||||
- stack-release fixture includes packages/library/src in its copy closure while
|
||||
retaining row196 optional long-path dataName for refusal tests.
|
||||
- stack-release test rehearsal closure includes packages/library/src while all
|
||||
proof/socket and SSO/socket tests are retained. The SSO test patch is unchanged.
|
||||
|
||||
Mutated paths now also contain upstream library changes. Do not claim the r3
|
||||
empty-stat proof still holds. mutated-paths-stat.txt records the exact delta.
|
||||
The next grant must run the requested mutants and whole suites on r4.
|
||||
whole-test-union.json lists every test file touched by either side and the eight
|
||||
additional whole files outside bus/WebUI/CLI. Test fixtures are reviewed as
|
||||
helpers, not invoked as independent tests. Every scripts/test-*.sh remains whole.
|
||||
@@ -0,0 +1,8 @@
|
||||
import {readFileSync,writeFileSync} from 'node:fs';import vm from 'node:vm';import {join} from 'node:path';import {createHash} from 'node:crypto';
|
||||
import {guardMutation} from '../mutant-guard.mjs';
|
||||
const root='/mnt/storage/scratch/tmp/g196-tree-tn651z',out=new URL('.',import.meta.url).pathname;
|
||||
const source=readFileSync('agents/gander/work/queue-196/r2/driver.mjs','utf8');
|
||||
const context=vm.createContext({});vm.runInContext(source.slice(source.indexOf("const p='"),source.indexOf('const hash='))+';globalThis.rows=specs;',context);
|
||||
const rows=[];
|
||||
for(const [id,file,,,mutate] of context.rows){const original=readFileSync(join(root,file),'utf8');const result=guardMutation(original,mutate);rows.push({id,file,targets:result.targets,accepted:true});}
|
||||
writeFileSync(out+'uniqueness-final.json',JSON.stringify(rows,null,2)+'\n');console.log(rows.length+' definitions pass uniqueness guard; no mutation tests run');
|
||||
@@ -0,0 +1,979 @@
|
||||
{
|
||||
"candidate": "f8a59e6aadf779d6c42e28cd693bdee1b441f54a",
|
||||
"base": "e54e05463",
|
||||
"scope": "immutable Git blobs; acceptance still pending",
|
||||
"files": [
|
||||
{
|
||||
"path": "BUILD-LOG.md",
|
||||
"kind": "evidence",
|
||||
"sha256": "d49bc248f696fcf370653a425b55424d8ce7921b05452e1e5c976ad1c6f3f46d",
|
||||
"baseSha256": "b7c8f906f2db095dfe02d29b4064836af83ae877a87b38c09466b8c9a327e019"
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/BUILD.md",
|
||||
"kind": "evidence",
|
||||
"sha256": "1c81ce9d3aaf5a12d841b7d60d1d36294862004126b786ab6a369cb59daf3a90",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/DESIGN.md",
|
||||
"kind": "evidence",
|
||||
"sha256": "37bb8c99b25febd7dc95b063d76c622e2b6ee0add8e0ecce4543ff81d6259715",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/MANIFEST.md",
|
||||
"kind": "evidence",
|
||||
"sha256": "88fc9747b133b4a2aace1015cdc4c6e0e06972955d47a00619613a4f6053f825",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/PLAN.md",
|
||||
"kind": "evidence",
|
||||
"sha256": "24cb6a7413bb461b33730367203741beca320101fc5dcd9fc60eca6e195de6b4",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/PRODUCT-FILES.json",
|
||||
"kind": "evidence",
|
||||
"sha256": "c9e5ac5ec9e43d57eac429e1fc5857c8451d1d77d4bba408adb492fd10d83ffd",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/PROGRESS.md",
|
||||
"kind": "evidence",
|
||||
"sha256": "2cc87c3ef0c8f6e6b6b298e67dc11e6dda8ca2cbbde604ff92c6c43cde7a0ebf",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/channel-proof.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "616d0a90f79ac541f5c95ad0f581580c0c3fd15bd17be38b5dcfc89fdf46293e",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/human.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "a330dbbaed0d5773967b865fd5e83580b913dc01c45de91c1728c7d4e1288b19",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/interpreter-fifo-red.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "05b9dab3e668241e8fbd03b4b2d48354d743afc2508f573ab43152dc4d18a3d8",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/interpreter-gate-red.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "bdfc30704be69b508adc1aa4b709e5f558c6e09a5ae83905847fddb267e5808e",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/interpreter-green.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "1d16dd2903d380ebd19bc33fbd36e52d34ba77b4e142c043a03a45551000fb20",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/interpreter-red.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "4ab32265a026628c19008121f444d07c8b5d150fd71e3e30d5ad33ffb7164e3e",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/node24-peercred.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "cef6d0ebbb0e68de9fdd205e2e82da54b865952d533ee9f1b514b2e2d22d3e06",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/node24-principal.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "5f487126f9240459c7eeb49434d9361f0b47a861adef34faa51c2dbcd13c78a3",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/node24.json",
|
||||
"kind": "evidence",
|
||||
"sha256": "756dafce4ac4f7a6ed7eaba8f2156b889dc3c760d2ae691eb1d1b3986ccdb8a6",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/peer-helper-red.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "16be13a0f525f67de28d520021dc2e089be3d7f7358fabc57d3aab88cd619429",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/peer-shutdown-red.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "ea68c9401d14bb0460000b6a8ef09de57ff1482be5e85941392e586ba3ce9464",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/peer-transport-green.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "dd2bdeaa3587d98528d704b22cb610c4cd4f32c950c9ca07d1626371a43c3249",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/peer-transport-red.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "182e9fc16a67d6c683c7231a5f78bccfefb9a0d635e2c2b1b5a61f797509981d",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/peercred-debug.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "d4e1b17e433d5cc78ea15420953b2e3ac485371d9282a3678dc61ce1de7472c3",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/peercred-green.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "12b7772e6d3ba2ba760cebf7290f8dcc03ea48a016b391bb17803cbbbf5a5a55",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/peercred-red.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "912071b254adf39814a2175f4611969ed055daf567969afc8a8011e96a6a6090",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/peercred-resume.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "79a2c8c730aaecf675c5bec517621b710776ce75af5c1122e7509442efe7ff33",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/principal-green.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "7c3c17fa91c070bc76f1bd6dcc27b8efec4489504f01e4a8f7bd99eaf5cb1540",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/principal-red.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "bf1f4c56f7b1c52fd7abb9f29317e3169280310ec3fabcde5c9c11af7b703098",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/process.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "4f9e40ce6745a73d9bdc52466914974d7f2e8c28cbb7612be1b3d5115c1e0cac",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/proof-cli.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "0cb7311871a73f204fbd7ea08d08a5e0758beac62610d4fc2ab39b9f1552ae10",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/proof.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "56050395b89adcd84c1ab53830e3a5132481744c93db633c5e2ae599f465d38f",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/refusal-baseline-comparison.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "e98c74133eaaa54a7a626629e54ce4a2df631bb2f769e6e48e67062e37856f0f",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/release-path-green.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "ed66ec271578e524202f34c7c00ec815a634c711718774fe61d3aaada298e0a5",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/release-path-red.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "cc23a9f1545db47105c7ffd85ca30a52adafb85f5405260de250d81617e7ff07",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/release-proof-order-green.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "dcbd08f4c9610ad0a7ffb40587c46379f2bbf8c0e90b39588f7c6169d95e3922",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/release-proof-order-red.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "c57fa1e0f941c1cc564a100ef54fbfa3b5fb5cf843eb98174cefc9a0e2d4b13b",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/release-socket-green.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "bc31709f84b707405b446517cab34b88b35c9366ca0ee1861e699af7d5268e2b",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/release-socket-red.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "585ecca1cf7c74359422f9ca20ec31973909e1f674e78e342872dc8203001895",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/service-socket-green.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "630435e8c6556086c2040c2473509fed7d923fd158a7129b87a628a2bf22c940",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/service-socket-red.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "bfc08484143e35bf28dc5b318f7b1c1b8e4b210a2faf568dc0a1ddf73dad11f8",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/service.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "1511c627cef7e974f5524af6d00c1b2ebeca957191778c8e34dd9d249ebc9da8",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/stopped-gate-counts.json",
|
||||
"kind": "evidence",
|
||||
"sha256": "65399c10c808c9e5a84cc1980d2a29b482f16003a6a6aaedd39738bc9af1d1f4",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/suite-bus-run1.tap",
|
||||
"kind": "evidence",
|
||||
"sha256": "0196e6231925db428bfa967fbcc19aacceefcf76f0fbec0cab41b8577b670e7d",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/suite-bus.tap",
|
||||
"kind": "evidence",
|
||||
"sha256": "63b3962babee8315ab6fb485b979a236b2473bb9ca1bc2c4f092d3a0a08feae2",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/suite-results-run1.json",
|
||||
"kind": "evidence",
|
||||
"sha256": "bf39c89bb4b8e1fdd844d215ca6adaa4886c95fee9692be3b115fbe66f0c6abe",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/suite-results.json",
|
||||
"kind": "evidence",
|
||||
"sha256": "4d270eff7002a30f9f2c681dd96b52e745429169b7d02c1e8c34ef3f20b6fac2",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/suite-webui.tap",
|
||||
"kind": "evidence",
|
||||
"sha256": "a6541496e8c06b945661a7a95e3ea2b129c773cd3abf14e78e64af5fd61bed26",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/tester-browser-focused.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "b236e29c35c3ecef8e00ce25ecbc84018bc7602b3430e354081d01f9a960ce82",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/tester-cleanup-blocker.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "9c816e2ac45a9dee6dcb970adff945fee68c767d35841eea831d02014c1b94ee",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/tester-cleanup-rename-green.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "8c67b9bd8ce78a5ff51c6311a344f50c1348f7b9c5b5c1d7fd5b4b4f0a1a5627",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/tester-cleanup-rename-red.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "59caa888184a01253f6ccf7cf07c2ed5ca1980d746231b3cf63086f87e633130",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/tester-cli.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "c455da1e3121940ae687a816b549480cd2277df837e122a94243e145a7537a46",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/tester-http.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "90b24f9f9d5c423e8e1ae1df978bc034db6cd047dc5469a66e83577611ded171",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/tester-listener.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "8f82a6b3b5c86ab4f8e3dd3ee7d8f47e1ddf26b42e634a693bf444b3a0bc1281",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/tester-socket-green.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "37cdf422fdf56db4e99932c3af20e4499400e8f764952af610dea1c3702a6bfd",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/tester-socket-red.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "b6458e2d22ddfbe294a2cb8d060da72f944a44cc1044467165f4af2b67274f76",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/tester.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "d6bd874d224b82a6e7b5ba9f5bd844b5a6b835683c86c6bfe82498bfbe34977a",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/transport.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "860fbc3a76dbd053c982ee82e4d00ffdde22ff78127c15c1c881ceccd7739621",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/evidence/webui-bus.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "0eadbc5f23e6516b6c0d0991f2f82d2d35484476573d57f5cf0d13a4701553e3",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/mutant-guard.mjs",
|
||||
"kind": "evidence",
|
||||
"sha256": "6be31cbacd0080586d13896ee14591716d2f88254143959120fed259cbe7bfdb",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/mutants.mjs",
|
||||
"kind": "evidence",
|
||||
"sha256": "ad5940cd822223698f4187aefd6195b59b3463d9005dc214e8956c5fd23fbfe4",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/REBASE.md",
|
||||
"kind": "evidence",
|
||||
"sha256": "c5c2445c291dd0bf958fd1009521ac4bbb78b512d22a27443c9a210c44fbaf6b",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/batch.log",
|
||||
"kind": "evidence",
|
||||
"sha256": "0382a38d6f620756fd992aa1d726f64ac2d79a0e94fe33a66833b40afd747f9d",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/busy.py",
|
||||
"kind": "evidence",
|
||||
"sha256": "4336592b40bd580b9287114021236f910ef2d7a8de65bfc8476d69293a5620ed",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/driver-fix.diff",
|
||||
"kind": "evidence",
|
||||
"sha256": "e3ea8d94f28f3ff83abaf02ae23c794000e96b6f021d39707825ea21c8a0ec0a",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/driver.mjs",
|
||||
"kind": "evidence",
|
||||
"sha256": "0f5801728188f341d53bcc81217fa60f219301396634fafd829f4c9652ec4c9a",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M1.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "0498cfba5ed4594a0895236f719e2bd2ca12ff19fc3d056ef4de0bd1dba9681f",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M10.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "49e4fdf73926b18ded746c02b1ab74e444abe24bf5321c6bb5455ece808d4236",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M11.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "7a3d4d79d340f00856d8b6e8c981f2210ac1943f3ff4e5ec200e009586ef01fb",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M12.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "f6546565d2c9e4ae61f9fd721869642eeaf1a97efc2366d21ba4875b47eb97b2",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M13.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "8ff49c13d3effacba6a6b5a8636681ddfc198c7c4240bbeb24ca8fb58154b5e4",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M14.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "2dcd9d882ce88059abcba944418fc919bee529180567c3604903aa58ec9337d0",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M15.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "9f83506e5d62f7642d1b3225228f29f250768d4d110d256c343ab6092e78d2ed",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M16.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "ad3cb5483aaa580e2bc2fd01dc127953e71eef5b2e1aaf2c432cf3d37f75a0a0",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M17.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "faab77634767026906cd5e4d2ac25c976da0b1d46eac39beeb453a65684261d3",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M18.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "5c9bf75c80c81fcea5cf9ecb8917fdb9c9c69d8e5b5685abbda141ccc07fa83c",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M19.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "b65b302ae364f3c6402759af0fc9998695bb1abda06e1e55d3a3c4e9059e57ae",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M2.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "1da13202221bedf81e3326699de3775c79179162c6dcbd23b563d8060d7d9f17",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M20.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "13316522038aa980680cdc5c72faf8bd6bfe7e0d0d71d01f54c4ea1a369c99ca",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M21.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "6f3e067071768135ddba35a6df8963965b0095b881806703fc8e2567d58917db",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M22.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "365d7a41abf839404eccec2615c87775749e748aa11771c6ae8cea5e25ddb065",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M23.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "7fd15eaaf6c7a34f13e7648b1b2dd8f56a97beeba7859caf8556fd079d046ce8",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M3.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "9d0a74d016117a1de8ecb09c14520ed0e73b5d54c2b4a79299af6b8099019098",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M4.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "f2a8d0bb0477df56b573c44362f4c847e15ad0d14ec43cb68b8371a38437a940",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M5.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "d60d2d9a759a3558bdd00fce8ed2717f7f42f625598a5be20234c6b0ee42034e",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M6.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "4df9bc439feca5397b19ab794607cff57bfe72a8275b30074a05dedc9e23a2f7",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M7.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "1b9480dff19d85236598c2c7b83477faf65a0486860da7e8a95990178cca371e",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M8.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "bbc62af7595ac83cc5c96f82923eb5c63a8fd51f71c1067d41bad055d7821846",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/M9.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "57c936cf714b0e918985082bd47119565cdeeaf57ee9ce10a7621652c889ffd7",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/mutants/results.json",
|
||||
"kind": "evidence",
|
||||
"sha256": "769f34c681c6de6a12b5e92039c512cc13a93af5ad2bd0ee4363e37f32983096",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/patch-id-after.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "dddd4a83e27def111a5b334cf6d7cf6ffd56cf2e65e11627026d9e64596bc667",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/patch-id-before.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "016f641ab4861889ba23f06b326470fa30e0f311aeb798f19bc6f00acd33b983",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/paths.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "b83b8dfaf435aea743b1ccd3bd95e6b409510d7963456bfecb4fbc448ad674e7",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/range-diff.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "da026ef46fc16c1a40db3a5684ef5300748d78f458ae56f23a9bd3b86cacffd0",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/SUMMARY.md",
|
||||
"kind": "evidence",
|
||||
"sha256": "0d8cb0339a746d29fdc1a3d353a96b231d18f729b1ae3c5f3fc4c197850bfd50",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/base-driver.log",
|
||||
"kind": "evidence",
|
||||
"sha256": "6066e60f3616daee901e3be46db564972ede565479cb7bf3b7e7d9649e731e19",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/base-interpreter.log",
|
||||
"kind": "evidence",
|
||||
"sha256": "dd8d13704ac9c06f05a445c0130d54b36d2bd128ad9d2a71696155c3892a7780",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/base-peercred.log",
|
||||
"kind": "evidence",
|
||||
"sha256": "a8a9c5ab5e7de30c6e13c7b3d6a56485c35cd79b05bb3e71566250a321073f59",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/base-release.log",
|
||||
"kind": "evidence",
|
||||
"sha256": "2eba721e258d1c04cf6700d4b869e739e9a660d944632b5872916025a73ad387",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/base-results.json",
|
||||
"kind": "evidence",
|
||||
"sha256": "5c8fd9519b3ae7c62cb61ad418602ce53310da56a110e5fb8e1d51fcd4492de4",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/base-socket.log",
|
||||
"kind": "evidence",
|
||||
"sha256": "53580eb2e8a328880f9621f43f3a6ad90d49dd497ed434c07e2e2f8ab76d5767",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/base.mjs",
|
||||
"kind": "evidence",
|
||||
"sha256": "a33b644350cca634e482728c779288dd65100d6ba3de601c17cf423d88a4388b",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/driver.log",
|
||||
"kind": "evidence",
|
||||
"sha256": "00328f9d386e5d76d598124e27df19edf81cf71016ff0ef25ce7c07d0881d265",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/driver.mjs",
|
||||
"kind": "evidence",
|
||||
"sha256": "2b8914f01b313c4725720a3136859c3fc14070cfce84ea6c43c99d4ca2c62701",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/kill-table.json",
|
||||
"kind": "evidence",
|
||||
"sha256": "78b1c9a21a4b55d7563274967e4f0d8016a012c0093994d78b177d5771a740dd",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/killers/M23.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "b43a9e2da2ecbdbcc44efe1dab472b0c76291c38c447e930c714274a67f03c92",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/killers/M24.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "47a1b116c44ccafef6aaa32f2bfcfcb50dff48f9efcdeef07de7c5b646a7be57",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/killers/M25.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "20f2ac0988475e6bf509dfec7b2be5f3a915e830f706b879e9443a23a58f320f",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/killers/M26.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "bbcd65bd1fd66a906d2e06ca629df2f240ec09a739d0cb80807e44c8c61f7e2a",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/killers/M27.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "022a3943afb5a7b4995c1b68f6dfce3c2bec6cc400d2b18413b6ef9abd2e24e5",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/killers/M28.txt",
|
||||
"kind": "evidence",
|
||||
"sha256": "fb0c775b247e25df68db63217ee9c608e6b2e53ac0ac27928c19421e0f9070e3",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/killers/results.json",
|
||||
"kind": "evidence",
|
||||
"sha256": "27ec554d01e0260c9e21273177b85e926d8b2e183c6960536afbffe7befc015f",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run2/process-sweep.json",
|
||||
"kind": "evidence",
|
||||
"sha256": "ca01381ac96a2dcfdce28a8884065404579ee7efd1593bafcc10457aec938244",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run3/M25-narrowed.mjs",
|
||||
"kind": "evidence",
|
||||
"sha256": "cd20a831fbaecbd1aedcbb634062786099266d0a6196d9b8987706dfd5a6aa1c",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run3/M25-old.mjs",
|
||||
"kind": "evidence",
|
||||
"sha256": "2668be95c72562a76987ed3cdffdc8ee029ac15bd12eb8b23f4a541eb4c53e28",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run3/M5-narrowed.mjs",
|
||||
"kind": "evidence",
|
||||
"sha256": "803bd73ccaf0730a7ab69c70d513257484df788fa96c13c3c4ed87664b67c45a",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run3/M5-old.mjs",
|
||||
"kind": "evidence",
|
||||
"sha256": "803bd73ccaf0730a7ab69c70d513257484df788fa96c13c3c4ed87664b67c45a",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run3/audit-initial.mjs",
|
||||
"kind": "evidence",
|
||||
"sha256": "5e96fc92dbc5d1e27145ae2e7adcd401881541b7cc2e1861fec88167b03a0abe",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run3/audit.mjs",
|
||||
"kind": "evidence",
|
||||
"sha256": "17029af94b3bfabe160642cd0b2ec9f96ed5a3430fe7147c452c7dc4def36577",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run3/guard-refusals.json",
|
||||
"kind": "evidence",
|
||||
"sha256": "deb52f06f65606ef9353be4f6d2afda8ccd1041bad58f5b8fe70acf8efaa64fa",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run3/narrowing-sha256.json",
|
||||
"kind": "evidence",
|
||||
"sha256": "3b8d1331452f13efadb5288fe0e15a92daed051ce2f1eda839c197d07a1fbff5",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run3/uniqueness-final.json",
|
||||
"kind": "evidence",
|
||||
"sha256": "df23925d7a1ec7b37ac8d3480ad17edaac04b4dc1f267f49aef44dae620ea490",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/r2/run3/uniqueness-initial.json",
|
||||
"kind": "evidence",
|
||||
"sha256": "210a0dd36d941c3ae1d99ddb0b02ca369b88db1d66802ced26db2b8b5b0f1ea9",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-196/run-gates.mjs",
|
||||
"kind": "evidence",
|
||||
"sha256": "bdf78e8a1922efb00e20767658f4c225cbe6492782b35a9112f538eb9ddef731",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-252/BUILD-NOTES.md",
|
||||
"kind": "row252-approved-doc",
|
||||
"sha256": "6bad6178386f7191f06d2a85d64cc8642689a8da2d1c0b4fa2e1adf0a01980fe",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "agents/gander/work/queue-252/DESIGN.md",
|
||||
"kind": "row252-approved-doc",
|
||||
"sha256": "d85bd103bc0a2cc96fe47b9f8a6d4e0e16d90ee398ef8ffaa2fe1c55d926d23f",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "docs/TOOLS.md",
|
||||
"kind": "operator-doc",
|
||||
"sha256": "4f5e1f7cb21d86cced206e25abac032d75c7e3ba683d6f80f42001d5b4211e05",
|
||||
"baseSha256": "17528973e2ed9748f5b0a9218feb5b2ae9789c13998e29e448b5775aae3c561d"
|
||||
},
|
||||
{
|
||||
"path": "packages/bus/README.md",
|
||||
"kind": "product",
|
||||
"sha256": "10c996d323ac46d45548f7748d40b246de93f8c5eacae9f951c6eeb5dcc62697",
|
||||
"baseSha256": "30db0bea82f6f9c2000b68797c461d1fb26726c4f983e6e984b36014c9865d15"
|
||||
},
|
||||
{
|
||||
"path": "packages/bus/fixtures/peer-client.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "60720461a7994011a9a30594715eb2c992be699cd61c656e77cbd609ad05328e",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "packages/bus/src/human.mjs",
|
||||
"kind": "product",
|
||||
"sha256": "0c6d96abe4607cba0b02b0638a2fc217ff8135bac9a47761a0ef015fbe9d3079",
|
||||
"baseSha256": "b995fc5cff3af8ade4c990d0e3bebf9d83829e00f034ebc9c3dcfd05f252b573"
|
||||
},
|
||||
{
|
||||
"path": "packages/bus/src/interpreter.mjs",
|
||||
"kind": "product",
|
||||
"sha256": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "packages/bus/src/peercred.mjs",
|
||||
"kind": "product",
|
||||
"sha256": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "packages/bus/src/peercred.py",
|
||||
"kind": "product",
|
||||
"sha256": "d1536a8f472fa5b3773adb10555529ed049ad63b647c0b44c00ce5f25ce09f85",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "packages/bus/src/principal.mjs",
|
||||
"kind": "product",
|
||||
"sha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "packages/bus/src/runtime.mjs",
|
||||
"kind": "product",
|
||||
"sha256": "f060bb55bb3abbc9f5d776ce7728a8e49356a6c5307bca8411e6163f0e044e83",
|
||||
"baseSha256": "c759e665514a5bcad40536bc9f979837187fe6523462b3c0a0687182885c3ac6"
|
||||
},
|
||||
{
|
||||
"path": "packages/bus/src/server.mjs",
|
||||
"kind": "product",
|
||||
"sha256": "7be306c830aa98763b34b329995b40e9df443483fe20fcd69100a3acb6311bd6",
|
||||
"baseSha256": "207c7a76752c753ef7380f18f9ce1a4f23e8fa35142973b6358aaf0c45f44899"
|
||||
},
|
||||
{
|
||||
"path": "packages/bus/tests/channel-proof.test.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "e99133c3c957a1e856e404343721add2430e4a0d8c75452517aef04942af56ab",
|
||||
"baseSha256": "98f12f509f0e292fa0b0e3924834f9d0f285c08ea5c4d22057566c49e2bd6c68"
|
||||
},
|
||||
{
|
||||
"path": "packages/bus/tests/interpreter.test.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "d19779b97e80ed3d62f58d0e798df46c23f45fa02b14fb4ac7a2ff4690a734e2",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "packages/bus/tests/peer-transport.test.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "a39af877a2d9143cc8d0584af0d603ca7ab651db8787e5816579762f17295887",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "packages/bus/tests/peercred.test.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "2c4c0bed41e546ce94535d8c4547b1cf5552a181183525dd1d52e2af1d64ccb6",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "packages/bus/tests/principal.test.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "cefbc0688d823c69196d94bb71467884acd639070721286d7e8e4e986c8240c1",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "packages/cli/README.md",
|
||||
"kind": "product",
|
||||
"sha256": "95c7acdb47f753d1e129adaa90b5937318d8d006ca47be9d92729fdae013776f",
|
||||
"baseSha256": "66ad221829e3b710106379070e5decd3b6e7bfe352175c02fba1463bd18801e0"
|
||||
},
|
||||
{
|
||||
"path": "packages/cli/src/tester-http.mjs",
|
||||
"kind": "product",
|
||||
"sha256": "4bd7bdf0898844684ebf9444b110d2c5b6fa874b2681183e54f1f62f97823192",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "packages/cli/tests/stack-release-fixture.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "a7cb20db2941b3b3abb09bcaa55eac92a1d420cf4ec79c6f83e4bb3235e04a2b",
|
||||
"baseSha256": "86a3c15446d4c119206097c754cd15f5bef7b7e93c9f16e9d8696ec8c475eea9"
|
||||
},
|
||||
{
|
||||
"path": "packages/cli/tests/stack-release.test.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "2a5a896831c1bab2ae239c90651592c95d6d08c151df518a5f6cdae65bded3ef",
|
||||
"baseSha256": "46cc95a6e75a89b907cdd5e9bd03853e1d1f75f1ced81084d968c5476466822e"
|
||||
},
|
||||
{
|
||||
"path": "packages/cli/tests/tester-http.test.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "fbaa36e64129aee324341364bde831c379c098b97932cceadb7fcaa7909d4b20",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/README.md",
|
||||
"kind": "product",
|
||||
"sha256": "04b7c1165c4fa73137a72e8373d70fd7d96a5897b5511170e6d41908a7667e96",
|
||||
"baseSha256": "68e5db18de89d59357171f3393c9803043f00d6388999a1e44a312365fe2fde5"
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/src/bus.mjs",
|
||||
"kind": "product",
|
||||
"sha256": "934ab2f9b6bde72aafe7814758550c283eb25a4f3a23b284021b13718d67178f",
|
||||
"baseSha256": "76a1b57858c4aa41071746713a196299264851c18322a6f9869d553f0362d421"
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/src/cli.mjs",
|
||||
"kind": "product",
|
||||
"sha256": "2c7f791e53b4bce8dc23aa974a8fe4c5d7b59204331a3d8ac398a31e530517a2",
|
||||
"baseSha256": "e98fd2fe4e621d5b4fa1ed95c4d4585469e7ab7a11dd379dc541dddb1b1a1f02"
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/src/serve.mjs",
|
||||
"kind": "product",
|
||||
"sha256": "da624f188c69e016ff82e1d1dcae1c579e68a57f0f25d773bb5d8bca56b80ee1",
|
||||
"baseSha256": "333d474b1c7e753938aedc639c08f9db0e787faf56aa8068d013fd304a0b3b7e"
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/src/tester-socket.mjs",
|
||||
"kind": "product",
|
||||
"sha256": "1c1fe0c795adac97f28502564a75f26d5666d9be5ae51169f7dd5bb7741fad16",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/tests/browser.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "2f3ea92cbe1ca115301ee1e3b8fc55a206842606237446b700881ee57a1b18cb",
|
||||
"baseSha256": "1e70a0175f1d660f6b71449a1423ece83fbe8332108960fa9aff6f7a5e48022a"
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/tests/proof-cli.test.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "edef361c4654ec010809c12c87c00197ec6e6b8337863068c4ffa144e291e300",
|
||||
"baseSha256": "a1aff7eec4e2f90533bacaf14e2fdeaba3a6a8a87aae700ec6d68e3bd536af73"
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/tests/proof.test.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "5f34d699a1bce6f46f286def1a93fdd4d863d06bec6839677fae1041be7153dd",
|
||||
"baseSha256": "c06a1e673ef6f3df8f0473692c828aeba853369d2b668e821f1d41e6340b6503"
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/tests/service.test.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "6457debc3d233a24643be00e4876e1129db664da2fbf5cc7168f3e371c46f313",
|
||||
"baseSha256": "845313239547ddbc478090b29f96385f0b8853e5087c572393be328e7075f578"
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/tests/sso.test.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "3c1d2481eff2271c1c83f7ec2e9d616ac22600d032af23afc47f919c58f1b9ba",
|
||||
"baseSha256": "67f93deb65b14dc213615e5e674fb908a2d13b253c8c0e4b8c0cd5476157a06a"
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/tests/tester-browser-fixture.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "9215ff92df774ba1e83819b87f758b53c8f3d19c2824c916490165914f1cb9e8",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/tests/tester-browser.test.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "89ffc5cbed1630a523080e8561d3678c1f781fb657199a5cd6cdb8189f082c73",
|
||||
"baseSha256": "3cc6def0c8cfb6cf7bb91a52df6e57f18071549588b35394e0083f7dc938dacf"
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/tests/tester-cli.test.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "23219434713fbd283a1e5cb1a373ed9d19d0963e171636dbf39bed3d60cd1316",
|
||||
"baseSha256": "8bf4491f7982399b4162cfbe36d0b68888e99ceb2cbaefefc2361732dd95e0c8"
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/tests/tester-fixture.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "7d4f3a59d21675807b1bfb92d40b7378134df450590bc6d42fa4103ab1343348",
|
||||
"baseSha256": "2169803c50815d214cab120eaa9d1542aa3b96bfe4738d68307eb0b92c1213f3"
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/tests/tester-listener.test.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "7f0fc2daead11048cb86e0a74b6a223314785b1740a2927461d012b876a69f18",
|
||||
"baseSha256": "aed4cec37401bc7953b1a872349ed77c70210fcfb75ebf6d4e881a393f92c7e9"
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/tests/tester-socket.test.mjs",
|
||||
"kind": "test",
|
||||
"sha256": "c01a942da1ad66a08a4e7c92d3c7e64f517530acfe5517f1e9895767d5ea3c0b",
|
||||
"baseSha256": null
|
||||
},
|
||||
{
|
||||
"path": "scripts/stack-release.sh",
|
||||
"kind": "product",
|
||||
"sha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"baseSha256": "1896d6518a502d340dfe30d402102b8c5cd5d8520757387b018b636755eb5d36"
|
||||
},
|
||||
{
|
||||
"path": "scripts/webui-service.sh",
|
||||
"kind": "product",
|
||||
"sha256": "6e7069cca9f7aef84c17f15611f2d7e0d09083a363c23da8dbd14d3ed29f0f40",
|
||||
"baseSha256": "39f2b8e4384978538337d85d740a3eaf68b28529c0e7cfdaca105b9177ed678a"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
diff --cc BUILD-LOG.md
|
||||
index 36109816c,cda73e0b0..000000000
|
||||
--- a/BUILD-LOG.md
|
||||
+++ b/BUILD-LOG.md
|
||||
@@@ -5177,5 -5177,13 +5177,18 @@@ Before: managed project/thread verbs ha
|
||||
2026-10-21T01:28:05Z | Darkwing | row 232 #1734 installer I1 build, round 1 in review | Before: stack-release.sh managed only user units (systemctl --user), and stack-copy.sh had no bundle copy. After: --units external (adopt, activate, rollback --to, status, confirm, revert, gate --since, AWAITING-UNITS, stale-start, external-pm, --plan --expect-from) and stack-copy check --units external, copy --bundle FILE SHA, wrapper ID --create; user mode byte-identical to the base by test. First build 0af0c73c6 on 00d4cc1f6; rebased onto row 200 (cb5fdb064) as a0ffabc3f on darkwing/row232-r1; --sso refused under external (D9), row 200 config_checks run under external (D10). Gate on Sage's slot (sage-1618): cli 561/0, every scripts/test-*.sh green; 17/17 mutants killed. Results commit 84f1a91e6 (pushed, seat branch only). Manifest 7a3b4ea1 (9 paths), queue revs 2595-2596, request comment 29825, reviewer Filbert. Packet agents/darkwing/work/queue-232/BUILD.md.
|
||||
2026-10-21T04:50:44Z | Darkwing | row 233 #1735 installer I3 build, round 1 in review | Before: root had no upgrade driver for root-owned units and no host run sheet; stack-release.sh had no rehearse --backup last and no external plan refusals. After: scripts/stack-upgrade.sh upgrade and rollback (r6 A1-A5, A2f, R1-R4) with 20 tests, docs/guides/host-run-sheet.md, TOOLS.md lines, and on Sage's rulings stack-release.sh --backup last, BACKUP_STORE and the --plan refusals open-activation and migrate-required (3 tests). Base e65a3ab4d (row 232's landing). Gate on Sage's slot (sage-1704) on d99166ade: cli 616/0, every scripts/test-*.sh green, 1201/0 summed by awk; m1-m8 8/8 killed. Correction: the process sweep after the gate found an orphaned sleep 60 from the lock test's flock holder (N1); 08db6ac3f fixes it test only, Sage ruled the gate stands (sage-1707), rerun c0 20/0 and m1 killed with 0 left (sage-1708). Tip 1a1dc80ca (pushed, seat branch only). Manifest 464ce9eb (7 paths), queue revs 2644 and 2647, request comment 29901, reviewer Filbert. Packet agents/darkwing/work/queue-233/BUILD.md.
|
||||
2026-10-21T06:37:41Z | Darkwing | row 240 #1746 installer I4 build, round 1 in review | Before: root had no host check for the bwrap AppArmor profile, its pins or a boot unit, and stack-upgrade.sh exited 1 args-failed when the args move after A5 failed, while exit 1 means the old copy runs. After: scripts/case1-hostcheck.sh (seven items, --check, --enforce, --upstream), scripts/case1-pins.sh, mosaic-hostcheck.service and 16 tests; the args move failure exits 5 args-failed, documented in TOOLS.md and run sheet section 6 and tested; run sheet section 3 puts the pinned npm on PATH and names the bin/claude.exe --claude path; sections 8 and 10 have precheck lines. Verification: slot run r1 on 47ec9fe2f failed at the singles (the new N1 test's after hook threw ENOENT after the fixture cleanup removed the root); b45852daa drops the hook; r2 on b45852daa green: singles 16/0 and 21/0, c0 plus M1-M8 8/8 killed, cli 639/0, scripts 585/0. Candidate darkwing/row240-r3 ad1b23ab2 on c771a36f4, manifest 573ece95 (9 paths), revs 2694 and 2695, comment 29943.
|
||||
++<<<<<<< HEAD
|
||||
+2026-10-21T09:00Z | Herb | row 215 C2-04 implementation started | Before: business files reject library entries and root consumers assume code projects; the organization writer can change all project mappings. Plan: approved manifest 2522025af on C2-01 a2c72ac95, Filbert reply to herb-0056, scope sage-1848/1852/1860. Focused slot sage-1869 observed expected red mapping and M9 cases, then 14/0 green for new T1/T2 cases, no skips; clear herb-0062 with empty test/fixture process scan. After that clear, T3/T4 tests and host-only mirror/bus implementation continue under sage-1874, unrun while Sage holds the slot. Full singles, suites and implementation review remain pending. No source commit, push or live change.
|
||||
+2026-10-21T13:29Z | Herb | row 215 C2-04 source verified for candidate review | Before: business code assumed every project had a root and organization writes could replace project mappings. After: library mappings load without agent checkouts or publish grants, project mappings are protected before and after serialization, host-only bare mirrors share a bounded publication lock with sync, and library.file/library.status are human-only async bus reads. Base f8276c5eb preserves all nine landed overlaps. Granted sage-2008 whole singles: 16 files, 451/0, no skips or cancellations, ended 13:27:27.279728Z; all source hashes unchanged, process scan empty, no own-path drift through 8a04f4aa4. Full landing gate and implementation review remain pending; no HTTP, sync writer or live change.
|
||||
++=======
|
||||
+
|
||||
+ 2026-10-20 19:09:44 UTC | Gander row 196 #1694 design phase | Before: tester TCP reaches every local uid and human proofs do not bind the socket peer. After: design draft at agents/gander/work/queue-196/DESIGN.md inventories listeners, proposes private tester HTTP and SO_PEERCRED binding, aligns the per-request principal contract with Morgana and Gizmoduck, and lists migration, tests, mutants and same-uid limits. Python versus other credential options and Console provenance require Duckworth ruling. Documentation only. No product code, suite, live probe, secret access or deployment.
|
||||
+
|
||||
+ 2026-10-20 19:16:20 UTC | Gander row 196 #1694 design r2 | Before: Duckworth r1 requested concurrent helper-fd evidence (B1) and selected O1 with interpreter, proof-only and image conditions. After: design adds eight concurrent genuine proof processes plus a racing copier, M20 swapped socket and post-helper socket survival, root-owned system ELF pinning and activation evidence, safe gid validation, cap traffic without helpers, and unchanged P19 R2 text. Mos accepted socket-only tester access (mos-1015 via sage-1363); any authenticated browser relay is a separate row. Documentation coverage checks passed. No product code, suites or live action.
|
||||
+
|
||||
+ 2026-10-20 19:21:19 UTC | Gander row 196 #1694 design approval and N5 | Before: Duckworth approved r2 (duckworth-0009, cb6d840df) with a nonblocking interpreter-upgrade note. After: r3 chooses startup safety revalidation, appends actual interpreter identity to bus/peercred-starts.jsonl and retains old activation evidence. Operator re-pin uses the next reviewed copy, respecting already-active refusal. Added task-by-task PLAN.md for inline implementation and independent manifest review. Documentation checks passed. No product code, suites or live action.
|
||||
+
|
||||
+ 2026-10-20 19:34:28 UTC | Gander row 196 build paused at design mismatch | Before: approved design promised Unix tester cleanup only for the owned inode. After: scratch test shows Node/libuv close unlinks a replacement inode before JS close handlers. Evidence agents/gander/work/queue-196/evidence/tester-cleanup-blocker.txt. Sent Sage/Duckworth gander-0016/0017, recommending explicit same-uid residual with private 0700 parent retained. Interpreter, concurrent peer, principal, human, peer-transport, transport, tester and process single files passed. Partial code uncommitted, tester transport not wired. No suites, mutant batches or live actions.
|
||||
+
|
||||
+ 2026-10-21 18:45 UTC | Gander row 196 preservation before rebase | Sage-2051, Mos order mos-1193, explicitly authorizes commit and fast-forward push of the current build before deferred full verification. Product and evidence preserved together; prior focused checks and stopped gates are recorded in the row196 packet, with no claim of full acceptance. Next: rebase onto a36523713 on new gander/row196-r2, report range-diff/patch-id/conflicts, then await Sage's clear for M1-M29 and all requested suites. No live action, force push, branch deletion or tests during hold.
|
||||
++>>>>>>> a95afb43b (gander: preserve row 196 human boundary build for rebase)
|
||||
diff --cc packages/bus/src/server.mjs
|
||||
index 53d38dd85,8a66050b9..000000000
|
||||
--- a/packages/bus/src/server.mjs
|
||||
+++ b/packages/bus/src/server.mjs
|
||||
@@@ -1,6 -1,8 +1,12 @@@
|
||||
import { createServer } from 'node:net';
|
||||
import { lstatSync, chmodSync, unlinkSync } from 'node:fs';
|
||||
++<<<<<<< HEAD
|
||||
+import { BusError, TASK_VERBS, WEB_VERBS, HOST_VERBS, HOSTS_VERBS, PROJECT_FILE_VERBS, LIBRARY_VERBS, PROJECT_SAVE_VERB, PROJECT_SAVE_REQUEST_MAX } from './broker.mjs';
|
||||
++=======
|
||||
+ import { BusError, TASK_VERBS, WEB_VERBS, HOST_VERBS, HOSTS_VERBS, PROJECT_FILE_VERBS, PROJECT_SAVE_VERB, PROJECT_SAVE_REQUEST_MAX } from './broker.mjs';
|
||||
+ import { inspectInterpreter } from './interpreter.mjs';
|
||||
+ import { createPeerReader } from './peercred.mjs';
|
||||
++>>>>>>> a95afb43b (gander: preserve row 196 human boundary build for rebase)
|
||||
const LIMIT = 65536;
|
||||
// Row 148: a document save may carry up to 1 MiB of text. Only a request that names that verb near
|
||||
// its start (the proof object comes first) may pass LIMIT; the parsed verb is checked again below.
|
||||
@@ -0,0 +1,45 @@
|
||||
# Grant sage-2096: r4 stop 3
|
||||
|
||||
Product f8a59e6aadf779d6c42e28cd693bdee1b441f54a on e54e05463.
|
||||
No rerun or repair occurred under the stopped grant. Returned to Sage in
|
||||
gander-0045; escalated to Mos in gander-0046 under mos-1166.
|
||||
|
||||
| Step | Pass | Fail | Skip | Wall seconds |
|
||||
|---|---:|---:|---:|---:|
|
||||
| SSO deliberate RED | 0 | 1 expected | 0 | 4.186 |
|
||||
| SSO restored GREEN | 1 | 0 | 0 | 4.328 |
|
||||
| Base peer transport | 4 | 0 | 0 | 1.841 |
|
||||
| Base tester | 14 | 0 | 0 | 3.049 |
|
||||
| M13 | killed | 0 driver failures | 0 | 1.781 |
|
||||
| M17 | killed | 0 driver failures | 0 | 2.940 |
|
||||
| M22 | killed | 0 driver failures | 0 | 1.766 |
|
||||
| Whole bus, 80 files | 622 | 0 | 0 | 36.272 |
|
||||
| Whole WebUI, 50 files | 303 | 1 | 1 | 113.151 |
|
||||
| Whole CLI | unrun | | | |
|
||||
| Eight additional whole files | unrun | | | |
|
||||
| Ten whole shell suites | unrun | | | |
|
||||
|
||||
Failure: C2-04 CLI: both listener callback pairs dispatch library verbs with their
|
||||
own transport, library-cli.test.mjs:10 (assertion :27). Row215's callback fixture
|
||||
still passed --tester-port, which the row196 Console refuses. The text merge
|
||||
kept the callbacks but left a semantic transport conflict. The whole-file gate
|
||||
exposed it. WebUI finished its file set with one failure, then the driver stopped.
|
||||
|
||||
The skip is the existing editor rebuild check: shared esbuild is 0.28.1 while
|
||||
the editor requires exactly 0.28.2. No dependency install was attempted.
|
||||
Golden suites observed so far total 925 pass, 1 fail, 1 skip. This is not a green
|
||||
gate. M1-M29 plus M28b total 30 killed under the accepted per-target hash rule:
|
||||
27 carried, three refreshed. consolidated-kills.json verifies every restored
|
||||
source hash against the r4 target SHA; original logs are retained unchanged.
|
||||
|
||||
Sweep correction: the broad scan counted 9 processes under the seat worktree,
|
||||
all harness/MCP helpers started 18:45:45-18:45:52, before this grant's 19:29:41
|
||||
start. Candidate and fresh grant TMPDIR had no leftovers. Gate leftover count
|
||||
is 0. Raw process-sweep.json and categorized-sweep.json retain both the raw
|
||||
count and classification. No pre-existing helper was terminated. Sage accepted
|
||||
that classification in sage-2111. Mos noted it in mos-1198.
|
||||
|
||||
Mos mos-1198 authorizes a fourth run on r5 after Gizmoduck 250 r2, with a new
|
||||
Sage grant. r5 is one test-only activation change plus BUILD note, preserving
|
||||
all original assertions. All product source hashes must equal r4 for its bus
|
||||
and mutant results to stand. No tests after stop 3 until that new grant.
|
||||
@@ -0,0 +1,2 @@
|
||||
{"name":"transport","args":["packages/bus/tests/peer-transport.test.mjs"],"seconds":1.840884985,"status":0,"signal":null}
|
||||
{"name":"tester","args":["packages/bus/tests/tester.test.mjs"],"seconds":3.049434243,"status":0,"signal":null}
|
||||
@@ -0,0 +1,20 @@
|
||||
[
|
||||
{
|
||||
"name": "transport",
|
||||
"args": [
|
||||
"packages/bus/tests/peer-transport.test.mjs"
|
||||
],
|
||||
"seconds": 1.840884985,
|
||||
"status": 0,
|
||||
"signal": null
|
||||
},
|
||||
{
|
||||
"name": "tester",
|
||||
"args": [
|
||||
"packages/bus/tests/tester.test.mjs"
|
||||
],
|
||||
"seconds": 3.049434243,
|
||||
"status": 0,
|
||||
"signal": null
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,22 @@
|
||||
✔ the tester binds only when the business sets bus.tester to exactly true (65.807956ms)
|
||||
✔ a business may not name a role tester, so the tester address is never a role (19.109144ms)
|
||||
✔ every verb outside the tester list refuses tester-refused and is recorded against the tester (43.044457ms)
|
||||
✔ a tester message is from tester, needs no prefix, and writes no human.input or authority (17.979473ms)
|
||||
✔ a tester message to a role no run holds refuses tester-target-not-running and stores nothing (12.296363ms)
|
||||
✔ a tester message is refused while the run is only launched, and routes once it claims (15.27344ms)
|
||||
✔ a human message to a role no run holds still waits and tells launch.by (12.830639ms)
|
||||
✔ a role answers a tester only in reply to a tester message, and the answer never reaches the human (22.475399ms)
|
||||
✔ the tester reads the human views a reader reads (26.771278ms)
|
||||
✔ tester proof binds its own CLI, start time and nonce, refuses a managed run and allows an agent (1.479618ms)
|
||||
✔ neither CLI's nonce proves the other: each proof is bound to its own CLI and nonce variable (0.527506ms)
|
||||
✔ testerNonce reads only the tester's variable and gives null on any read error (0.255977ms)
|
||||
✔ an envelope carries exactly one of cap, human and tester; no tester authenticator refuses (113.500663ms)
|
||||
✔ tester-cli.mjs binds through the runtime when the switch is on, and refuses off or under a run marker (988.347719ms)
|
||||
ℹ tests 14
|
||||
ℹ suites 0
|
||||
ℹ pass 14
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 1449.588503
|
||||
@@ -0,0 +1,12 @@
|
||||
✔ proof receives actual peer, cap traffic never invokes helper and transient cap disconnects (6.717548ms)
|
||||
✔ proof helper error and disconnect during verification never dispatch or bind (1.430525ms)
|
||||
✔ Client receives explicit proof refusal codes without dispatch, not outcome-unknown (43.439922ms)
|
||||
✔ asynchronous proof calls release their transient session on success, failure and timeout (28.922236ms)
|
||||
ℹ tests 4
|
||||
ℹ suites 0
|
||||
ℹ pass 4
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 136.482329
|
||||
@@ -0,0 +1,9 @@
|
||||
import {spawnSync} from 'node:child_process';import {writeFileSync} from 'node:fs';import {performance} from 'node:perf_hooks';
|
||||
const root='/mnt/storage/scratch/tmp/g196-tree-tn651z',out=new URL('.',import.meta.url).pathname;
|
||||
const jobs=[['transport',['packages/bus/tests/peer-transport.test.mjs']],['tester',['packages/bus/tests/tester.test.mjs']]];
|
||||
const results=[];
|
||||
for(const [name,args] of jobs){
|
||||
const start=performance.now(),r=spawnSync('bash',['-c','set -o pipefail; python3 "$G196_BUSY" && "$G196_NODE" --test "$@" 2>&1 | tee "$G196_LOG"','--',...args],{cwd:root,env:{...process.env,G196_NODE:process.execPath,G196_LOG:out+'base-'+name+'.log'},encoding:'utf8',maxBuffer:4*1024*1024});
|
||||
const seconds=(performance.now()-start)/1000;const result={name,args,seconds,status:r.status,signal:r.signal};results.push(result);writeFileSync(out+'base-results.json',JSON.stringify(results,null,2)+'\n');console.log(JSON.stringify(result));
|
||||
if(r.status!==0||seconds>30){process.exitCode=1;break;}
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,136 @@
|
||||
{
|
||||
"grantStart": "2026-10-21T19:29:41Z",
|
||||
"rawSweepCount": 9,
|
||||
"preexistingHarnessHelpers": [
|
||||
{
|
||||
"pid": 748279,
|
||||
"name": "npm exec @playw",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:45.352804+00:00",
|
||||
"predatesGrant": true
|
||||
},
|
||||
{
|
||||
"pid": 748302,
|
||||
"name": "node-MainThread",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:45.372804+00:00",
|
||||
"predatesGrant": true
|
||||
},
|
||||
{
|
||||
"pid": 748306,
|
||||
"name": "npm exec @model",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:45.372804+00:00",
|
||||
"predatesGrant": true
|
||||
},
|
||||
{
|
||||
"pid": 748314,
|
||||
"name": "npm exec chrome",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:45.382804+00:00",
|
||||
"predatesGrant": true
|
||||
},
|
||||
{
|
||||
"pid": 748494,
|
||||
"name": "chrome-devtools",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:46.342804+00:00",
|
||||
"predatesGrant": true
|
||||
},
|
||||
{
|
||||
"pid": 748496,
|
||||
"name": "node-MainThread",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:46.352804+00:00",
|
||||
"predatesGrant": true
|
||||
},
|
||||
{
|
||||
"pid": 748506,
|
||||
"name": "node-MainThread",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:46.362804+00:00",
|
||||
"predatesGrant": true
|
||||
},
|
||||
{
|
||||
"pid": 748547,
|
||||
"name": "node-MainThread",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:46.722805+00:00",
|
||||
"predatesGrant": true
|
||||
},
|
||||
{
|
||||
"pid": 749160,
|
||||
"name": "codex-code-mode",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:52.822804+00:00",
|
||||
"predatesGrant": true
|
||||
}
|
||||
],
|
||||
"gateLeftovers": [],
|
||||
"processes": [
|
||||
{
|
||||
"pid": 748279,
|
||||
"name": "npm exec @playw",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:45.352804+00:00",
|
||||
"predatesGrant": true
|
||||
},
|
||||
{
|
||||
"pid": 748302,
|
||||
"name": "node-MainThread",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:45.372804+00:00",
|
||||
"predatesGrant": true
|
||||
},
|
||||
{
|
||||
"pid": 748306,
|
||||
"name": "npm exec @model",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:45.372804+00:00",
|
||||
"predatesGrant": true
|
||||
},
|
||||
{
|
||||
"pid": 748314,
|
||||
"name": "npm exec chrome",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:45.382804+00:00",
|
||||
"predatesGrant": true
|
||||
},
|
||||
{
|
||||
"pid": 748494,
|
||||
"name": "chrome-devtools",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:46.342804+00:00",
|
||||
"predatesGrant": true
|
||||
},
|
||||
{
|
||||
"pid": 748496,
|
||||
"name": "node-MainThread",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:46.352804+00:00",
|
||||
"predatesGrant": true
|
||||
},
|
||||
{
|
||||
"pid": 748506,
|
||||
"name": "node-MainThread",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:46.362804+00:00",
|
||||
"predatesGrant": true
|
||||
},
|
||||
{
|
||||
"pid": 748547,
|
||||
"name": "node-MainThread",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:46.722805+00:00",
|
||||
"predatesGrant": true
|
||||
},
|
||||
{
|
||||
"pid": 749160,
|
||||
"name": "codex-code-mode",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"startedAt": "2026-10-21T18:45:52.822804+00:00",
|
||||
"predatesGrant": true
|
||||
}
|
||||
],
|
||||
"gateLeftoverCount": 0
|
||||
}
|
||||
@@ -0,0 +1,398 @@
|
||||
{
|
||||
"rule": "sage-2096 target blob SHA equality; original run records retained",
|
||||
"count": 30,
|
||||
"fresh": 3,
|
||||
"carried": 27,
|
||||
"rows": [
|
||||
{
|
||||
"id": "M1",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/webui/src/serve.mjs",
|
||||
"r3Sha256": "da624f188c69e016ff82e1d1dcae1c579e68a57f0f25d773bb5d8bca56b80ee1",
|
||||
"r4Sha256": "da624f188c69e016ff82e1d1dcae1c579e68a57f0f25d773bb5d8bca56b80ee1",
|
||||
"restoredSha256": "da624f188c69e016ff82e1d1dcae1c579e68a57f0f25d773bb5d8bca56b80ee1",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M2",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/webui/src/tester-socket.mjs",
|
||||
"r3Sha256": "1c1fe0c795adac97f28502564a75f26d5666d9be5ae51169f7dd5bb7741fad16",
|
||||
"r4Sha256": "1c1fe0c795adac97f28502564a75f26d5666d9be5ae51169f7dd5bb7741fad16",
|
||||
"restoredSha256": "1c1fe0c795adac97f28502564a75f26d5666d9be5ae51169f7dd5bb7741fad16",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M3",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/webui/src/serve.mjs",
|
||||
"r3Sha256": "da624f188c69e016ff82e1d1dcae1c579e68a57f0f25d773bb5d8bca56b80ee1",
|
||||
"r4Sha256": "da624f188c69e016ff82e1d1dcae1c579e68a57f0f25d773bb5d8bca56b80ee1",
|
||||
"restoredSha256": "da624f188c69e016ff82e1d1dcae1c579e68a57f0f25d773bb5d8bca56b80ee1",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M4",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/bus/src/principal.mjs",
|
||||
"r3Sha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"r4Sha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"restoredSha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M5",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/bus/src/peercred.mjs",
|
||||
"r3Sha256": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"r4Sha256": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"restoredSha256": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M6",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/bus/src/principal.mjs",
|
||||
"r3Sha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"r4Sha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"restoredSha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M7",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/webui/src/tester-socket.mjs",
|
||||
"r3Sha256": "1c1fe0c795adac97f28502564a75f26d5666d9be5ae51169f7dd5bb7741fad16",
|
||||
"r4Sha256": "1c1fe0c795adac97f28502564a75f26d5666d9be5ae51169f7dd5bb7741fad16",
|
||||
"restoredSha256": "1c1fe0c795adac97f28502564a75f26d5666d9be5ae51169f7dd5bb7741fad16",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M8",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/bus/src/human.mjs",
|
||||
"r3Sha256": "0c6d96abe4607cba0b02b0638a2fc217ff8135bac9a47761a0ef015fbe9d3079",
|
||||
"r4Sha256": "0c6d96abe4607cba0b02b0638a2fc217ff8135bac9a47761a0ef015fbe9d3079",
|
||||
"restoredSha256": "0c6d96abe4607cba0b02b0638a2fc217ff8135bac9a47761a0ef015fbe9d3079",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M9",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/bus/src/human.mjs",
|
||||
"r3Sha256": "0c6d96abe4607cba0b02b0638a2fc217ff8135bac9a47761a0ef015fbe9d3079",
|
||||
"r4Sha256": "0c6d96abe4607cba0b02b0638a2fc217ff8135bac9a47761a0ef015fbe9d3079",
|
||||
"restoredSha256": "0c6d96abe4607cba0b02b0638a2fc217ff8135bac9a47761a0ef015fbe9d3079",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M10",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/bus/src/principal.mjs",
|
||||
"r3Sha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"r4Sha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"restoredSha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M11",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/bus/src/principal.mjs",
|
||||
"r3Sha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"r4Sha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"restoredSha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M12",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/bus/src/human.mjs",
|
||||
"r3Sha256": "0c6d96abe4607cba0b02b0638a2fc217ff8135bac9a47761a0ef015fbe9d3079",
|
||||
"r4Sha256": "0c6d96abe4607cba0b02b0638a2fc217ff8135bac9a47761a0ef015fbe9d3079",
|
||||
"restoredSha256": "0c6d96abe4607cba0b02b0638a2fc217ff8135bac9a47761a0ef015fbe9d3079",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M13",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r4/gate/killers",
|
||||
"targetFile": "packages/bus/src/server.mjs",
|
||||
"r3Sha256": "830faa9a76150b59189cde395ec8deeb768e4b0d45ed262a57bb6fc6e459abb4",
|
||||
"r4Sha256": "7be306c830aa98763b34b329995b40e9df443483fe20fcd69100a3acb6311bd6",
|
||||
"restoredSha256": "7be306c830aa98763b34b329995b40e9df443483fe20fcd69100a3acb6311bd6",
|
||||
"carried": false,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 1.781,
|
||||
"baseWallSeconds": 1.840884985
|
||||
},
|
||||
{
|
||||
"id": "M14",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/bus/src/principal.mjs",
|
||||
"r3Sha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"r4Sha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"restoredSha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M15",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "scripts/stack-release.sh",
|
||||
"r3Sha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"r4Sha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"restoredSha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M16",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "scripts/stack-release.sh",
|
||||
"r3Sha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"r4Sha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"restoredSha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M17",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r4/gate/killers",
|
||||
"targetFile": "packages/bus/src/broker.mjs",
|
||||
"r3Sha256": "e6f33bac95a40c9d52d67f297eec361cd0f30da5d3c28057468ee5d56c3ae7fc",
|
||||
"r4Sha256": "762234259d72db87aff510751fe14003099759ae37bc8eaf14f1ea1de61d2005",
|
||||
"restoredSha256": "762234259d72db87aff510751fe14003099759ae37bc8eaf14f1ea1de61d2005",
|
||||
"carried": false,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 2.94,
|
||||
"baseWallSeconds": 3.049434243
|
||||
},
|
||||
{
|
||||
"id": "M18",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/bus/src/principal.mjs",
|
||||
"r3Sha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"r4Sha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"restoredSha256": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M19",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/cli/src/tester-http.mjs",
|
||||
"r3Sha256": "4bd7bdf0898844684ebf9444b110d2c5b6fa874b2681183e54f1f62f97823192",
|
||||
"r4Sha256": "4bd7bdf0898844684ebf9444b110d2c5b6fa874b2681183e54f1f62f97823192",
|
||||
"restoredSha256": "4bd7bdf0898844684ebf9444b110d2c5b6fa874b2681183e54f1f62f97823192",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M20",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/bus/src/peercred.mjs",
|
||||
"r3Sha256": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"r4Sha256": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"restoredSha256": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M21",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/mutants",
|
||||
"targetFile": "packages/bus/src/interpreter.mjs",
|
||||
"r3Sha256": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a",
|
||||
"r4Sha256": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a",
|
||||
"restoredSha256": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": null,
|
||||
"baseWallSeconds": null
|
||||
},
|
||||
{
|
||||
"id": "M22",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r4/gate/killers",
|
||||
"targetFile": "packages/bus/src/server.mjs",
|
||||
"r3Sha256": "830faa9a76150b59189cde395ec8deeb768e4b0d45ed262a57bb6fc6e459abb4",
|
||||
"r4Sha256": "7be306c830aa98763b34b329995b40e9df443483fe20fcd69100a3acb6311bd6",
|
||||
"restoredSha256": "7be306c830aa98763b34b329995b40e9df443483fe20fcd69100a3acb6311bd6",
|
||||
"carried": false,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 1.766,
|
||||
"baseWallSeconds": 1.840884985
|
||||
},
|
||||
{
|
||||
"id": "M23",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/run2/killers",
|
||||
"targetFile": "packages/bus/src/interpreter.mjs",
|
||||
"r3Sha256": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a",
|
||||
"r4Sha256": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a",
|
||||
"restoredSha256": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 2.736,
|
||||
"baseWallSeconds": 1.4702031439999999
|
||||
},
|
||||
{
|
||||
"id": "M24",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/run2/killers",
|
||||
"targetFile": "packages/webui/src/tester-socket.mjs",
|
||||
"r3Sha256": "1c1fe0c795adac97f28502564a75f26d5666d9be5ae51169f7dd5bb7741fad16",
|
||||
"r4Sha256": "1c1fe0c795adac97f28502564a75f26d5666d9be5ae51169f7dd5bb7741fad16",
|
||||
"restoredSha256": "1c1fe0c795adac97f28502564a75f26d5666d9be5ae51169f7dd5bb7741fad16",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 1.647,
|
||||
"baseWallSeconds": 1.52819561
|
||||
},
|
||||
{
|
||||
"id": "M25",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r3/gate/killers",
|
||||
"targetFile": "packages/bus/src/interpreter.mjs",
|
||||
"r3Sha256": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a",
|
||||
"r4Sha256": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a",
|
||||
"restoredSha256": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 2.549,
|
||||
"baseWallSeconds": 1.590576636
|
||||
},
|
||||
{
|
||||
"id": "M26",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/run2/killers",
|
||||
"targetFile": "packages/bus/src/peercred.mjs",
|
||||
"r3Sha256": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"r4Sha256": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"restoredSha256": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 1.95,
|
||||
"baseWallSeconds": 2.0922415990000003
|
||||
},
|
||||
{
|
||||
"id": "M27",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r2/run2/killers",
|
||||
"targetFile": "packages/bus/src/peercred.mjs",
|
||||
"r3Sha256": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"r4Sha256": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"restoredSha256": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 1.572,
|
||||
"baseWallSeconds": 2.0922415990000003
|
||||
},
|
||||
{
|
||||
"id": "M28",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r3/gate/killers",
|
||||
"targetFile": "scripts/stack-release.sh",
|
||||
"r3Sha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"r4Sha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"restoredSha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 6.09,
|
||||
"baseWallSeconds": 8.452289073
|
||||
},
|
||||
{
|
||||
"id": "M28b",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r3/gate/killers",
|
||||
"targetFile": "scripts/stack-release.sh",
|
||||
"r3Sha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"r4Sha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"restoredSha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 4.308,
|
||||
"baseWallSeconds": 4.386869599
|
||||
},
|
||||
{
|
||||
"id": "M29",
|
||||
"killed": true,
|
||||
"evidenceFolder": "r3/gate/killers",
|
||||
"targetFile": "scripts/stack-release.sh",
|
||||
"r3Sha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"r4Sha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"restoredSha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"carried": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 8.462,
|
||||
"baseWallSeconds": 8.452289073
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
M13 KILLED base=1.840884985s timeout=false
|
||||
M17 KILLED base=3.049434243s timeout=false
|
||||
M22 KILLED base=1.840884985s timeout=false
|
||||
@@ -0,0 +1,81 @@
|
||||
import { guardMutation } from '../../mutant-guard.mjs';
|
||||
// Authorized batch only. Mutate isolated scratch copies, never the candidate or installed tree.
|
||||
import {mkdtempSync,cpSync,readFileSync,writeFileSync,rmSync,symlinkSync,existsSync,mkdirSync} from 'node:fs';
|
||||
import {tmpdir} from 'node:os';import {join,resolve} from 'node:path';
|
||||
import {spawnSync,execFileSync} from 'node:child_process';import {createHash} from 'node:crypto';
|
||||
import {fileURLToPath} from 'node:url';
|
||||
const root='/mnt/storage/scratch/tmp/g196-tree-tn651z';
|
||||
const out='/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-196/r4/gate/killers';mkdirSync(out,{recursive:true});
|
||||
const p='packages/bus/src/principal.mjs',h='packages/bus/src/human.mjs',w='packages/webui/src/tester-socket.mjs',s='packages/bus/src/server.mjs',peer='packages/bus/src/peercred.mjs';
|
||||
const principal='packages/bus/tests/principal.test.mjs',socket='packages/webui/tests/tester-socket.test.mjs',transport='packages/bus/tests/peer-transport.test.mjs',interpreter='packages/bus/tests/interpreter.test.mjs';
|
||||
const release=['--test-name-pattern=row196 explicit socket','packages/cli/tests/stack-release.test.mjs'];
|
||||
const specs=[
|
||||
['M1', 'packages/webui/src/serve.mjs','tester uses TCP',socket, text=>text.replace('if (tester) return bindTesterSocket(server, testerSocket);',"if (tester) return new Promise(r=>server.listen(0,'127.0.0.1',()=>r(server)));" )],
|
||||
['M2',w,'socket mode widened',socket,t=>t.replace('chmodSync(temporary, 0o600)','chmodSync(temporary, 0o666)')],
|
||||
['M3','packages/webui/src/serve.mjs','sign-in accepted on tester',socket,t=>t.replace("if (tester && (Object.hasOwn(req.headers, 'authorization')", "if (false && (Object.hasOwn(req.headers, 'authorization')")],
|
||||
['M4',p,'copied PID accepted',principal,t=>t.replace('peer.pid !== proof.pid','false')],
|
||||
['M5',peer,'helper parse error ignored','packages/bus/tests/peercred.test.mjs',t=>t.replace('finish(false, Object.freeze(p));\n } catch { finish(true); }','finish(false, Object.freeze(p));\n } catch { finish(false, {pid:2,uid:0,gid:0}); }')],
|
||||
['M6',p,'foreign uid accepted',principal,t=>t.replace('peer.uid !== process.getuid()','false')],
|
||||
['M7',w,'unsafe parent accepted',socket,t=>t.replace('(dir.mode & 0o077)','false')],
|
||||
['M8',h,'agent environment walk skipped',principal,t=>t.replace('current.env !== null && MARKERS.some','false && MARKERS.some')],
|
||||
['M9',h,'leaf identity not reread',principal,t=>t.replace('if (again.startTime !== proof.startTime || again.ppid !== p.ppid)','if (false)')],
|
||||
['M10',p,'Console direct-parent check removed',principal,t=>t.replace("if (parent.uid !== peer.uid || parent.argv[1] !== resolve(paths.console) || parent.argv[2] !== 'serve')",'if (false)')],
|
||||
['M11',p,'Console basename accepted',principal,t=>t.replace("import { resolve }", "import { resolve, basename }").replace('parent.argv[1] !== resolve(paths.console)','basename(parent.argv[1] ?? "") !== basename(paths.console)')],
|
||||
['M12',h,'unknown proof identity accepted',principal,t=>t.replace("Object.keys(proof).some((k) => !['pid', 'startTime', 'nonce', 'business'].includes(k))",'false')],
|
||||
['M13',s,'transient cap leaked',transport,t=>t.replace('broker.disconnect(boundCap)','void(boundCap)')],
|
||||
['M14',p,'tester walk used for user',principal,t=>t.replace("verifyHuman(checked, { cliPath: paths[kind], launches, readProcess,\n nonceKey: kind === 'user' ? 'MOSAIC_BUS_USER_NONCE' : 'MOSAIC_BUS_CLI_NONCE' })",'verifyTester(checked, {cliPath:paths[kind],launches,readProcess,readNonce:()=>checked.nonce})')],
|
||||
['M15','scripts/stack-release.sh','TCP retained during conversion',release,t=>t.replace('RUN_CONSOLE=("${without_tester[@]}" --tester-socket)','RUN_CONSOLE=("${BASE_CONSOLE[@]}" --tester-socket)')],
|
||||
['M16','scripts/stack-release.sh','TCP reopened on downgrade',release,t=>t.replace('RUN_CONSOLE=("${without_tester[@]}") DROP_TESTER="--tester-socket','RUN_CONSOLE=("${without_tester[@]}" --tester-port 7333) DROP_TESTER="--tester-socket')],
|
||||
['M17','packages/bus/src/broker.mjs','tester switch ignored','packages/bus/tests/tester.test.mjs',t=>t.replace("if (this.#business(record.business).vars?.['bus.tester'] !== true)",'if (false)')],
|
||||
['M18',p,'user kind becomes owner',principal,t=>t.replace("return { kind: 'user', business, id: proof.user }","return { kind: 'owner', business, id: proof.user }")],
|
||||
['M19','packages/cli/src/tester-http.mjs','selected instance root ignored',socket,t=>t.replace('socketPath: testerSocketPath(dataRoot)','socketPath: testerSocketPath(dataRoot + "/wrong-instance")')],
|
||||
['M20',peer,'helper gets another pending socket','packages/bus/tests/peercred.test.mjs',t=>t.replace('export function createPeerReader','function originalPeerReader')+`\nexport function createPeerReader(options){const base=originalPeerReader(options),queue=[];let scheduled=false;return{read(socket){return new Promise((resolve,reject)=>{queue.push({socket,resolve,reject});if(!scheduled){scheduled=true;queueMicrotask(()=>{scheduled=false;const jobs=queue.splice(0);jobs.forEach((job,i)=>base.read(jobs[(i+1)%jobs.length].socket).then(job.resolve,job.reject));});}});},close(){base.close();}};}\n`],
|
||||
['M21','packages/bus/src/interpreter.mjs','user-owned interpreter accepted',interpreter,t=>t.replace('s.uid !== 0 || (s.mode & 0o022)','false || (s.mode & 0o022)')],
|
||||
['M22',s,'cap requests invoke helper',transport,t=>t.replace(' if (kind) {',' if (r.cap) await peers.read(socket);\n if (kind) {')],
|
||||
['M23','packages/bus/src/interpreter.mjs','restart retains stale identity',interpreter,t=>t.replace('export function recordInterpreterStart(directory, record) {','export function recordInterpreterStart(directory, record) {\n try { readFileSync(join(directory,"peercred-starts.jsonl")); return; } catch {}')],
|
||||
['M24',w,'listener binds final path directly',socket,t=>t.replace("const temporary = join(parent, '.' + randomBytes(4).toString('hex') + '.s');",'const temporary = path;')],
|
||||
['M25','packages/bus/src/interpreter.mjs','FIFO receipt blocks before type refusal',['--test-name-pattern=non-regular startup receipt',interpreter],t=>t.replace('constants.O_WRONLY | constants.O_APPEND | constants.O_CREAT | constants.O_NOFOLLOW | constants.O_NONBLOCK, 0o600','constants.O_WRONLY | constants.O_APPEND | constants.O_CREAT | constants.O_NOFOLLOW, 0o600')],
|
||||
['M26',peer,'missing helper accepted at startup',['--test-name-pattern=missing or non-regular peer helper','packages/bus/tests/peercred.test.mjs'],t=>t.replace('if (!s.isFile() || s.isSymbolicLink()) throw Error();','if (false) throw Error();').replace('catch { throw refused(); }','catch {}')],
|
||||
['M27',peer,'shutdown returns before helpers are reaped',['--test-name-pattern=shutdown waits','packages/bus/tests/peercred.test.mjs'],t=>t.replace(" await Promise.all([...children].map(child => new Promise(resolve => {\n child.once('close', resolve);\n child.kill('SIGKILL');\n })));"," for (const child of children) child.kill('SIGKILL');")],
|
||||
['M28','scripts/stack-release.sh','proof pair placed after tester socket flag',release,t=>t.replace('case "${without_proof[i]}" in --send | --tester-port | --tester-socket) break','case "${without_proof[i]}" in --send | --tester-port) break')],
|
||||
['M28b','scripts/stack-release.sh','SSO placed after tester socket flag',['--test-name-pattern=row196 SSO socket','packages/cli/tests/stack-release.test.mjs'],t=>t.replace('case "${kept[i]}" in --send | --tester-port | --tester-socket) break','case "${kept[i]}" in --send | --tester-port) break')],
|
||||
['M29','scripts/stack-release.sh','unsafe tester path reaches service stop',release,t=>t.replace(t.split('\n').find(line=>line.includes('|| check_refuse tester-socket-path'))+'\n','')],
|
||||
];
|
||||
const hash=x=>createHash('sha256').update(x).digest('hex');
|
||||
const results=[];
|
||||
for (const [id,file,,,mutate] of specs) {
|
||||
try { guardMutation(readFileSync(join(root,file),'utf8'),mutate); }
|
||||
catch(error) { throw Error(id+': '+error.message); }
|
||||
}
|
||||
const scratch=mkdtempSync(join(tmpdir(),'g196-mut-'));
|
||||
try {
|
||||
for(const name of ['packages','scripts','adapters','roles','contracts','RELEASE','package.json','package-lock.json','.gitignore'])if(existsSync(join(root,name)))cpSync(join(root,name),join(scratch,name),{recursive:true,filter:src=>!src.includes('/node_modules/')&&!src.endsWith('/node_modules')});
|
||||
symlinkSync(join(root,'node_modules'),join(scratch,'node_modules'));
|
||||
for(const args of [['init','-q'],['add','.'],['-c','user.name=fixture','-c','user.email=fixture@invalid','-c','commit.gpgsign=false','-c','core.hooksPath=/dev/null','commit','-qm','candidate snapshot']])execFileSync('git',args,{cwd:scratch});
|
||||
for(const [id,file,description,test,mutate] of specs.filter(row=>['M13','M17','M22'].includes(row[0]))) {
|
||||
const bases=JSON.parse(readFileSync(new URL('./base-results.json',import.meta.url),'utf8'));
|
||||
const killerFile=Array.isArray(test)?test.at(-1):test;
|
||||
const base=bases.find(b=>b.args.at(-1)===killerFile);
|
||||
if(!base||base.status!==0||base.seconds>30)throw Error(id+' missing or slow passing base');
|
||||
const at=join(scratch,file),original=readFileSync(at,'utf8'),before=hash(original),changed=guardMutation(original,mutate).text;
|
||||
if(changed===original)throw Error(id+' did not change bytes');
|
||||
writeFileSync(at,changed);
|
||||
const syntax=spawnSync(file.endsWith('.sh')?'bash':process.execPath,[file.endsWith('.sh')?'-n':'--check',at],{encoding:'utf8'});
|
||||
if(syntax.status!==0)throw Error(id+' invalid mutation: '+syntax.stderr);
|
||||
const args=['--test',...(Array.isArray(test)?test:[test])];
|
||||
const started=Date.now();
|
||||
const run=spawnSync('timeout',['--signal=TERM','--kill-after=2s','60s','bash','-c','set -o pipefail; python3 "$G196_BUSY" && "$G196_NODE" "$@" 2>&1 | tee "$G196_LOG"','--',...args],{cwd:scratch,env:{...process.env,G196_NODE:process.execPath,G196_LOG:join(out,id+'.txt')},encoding:'utf8',maxBuffer:2*1024*1024});
|
||||
const log=(run.stdout??'')+(run.stderr??'');writeFileSync(join(out,id+'.txt'),log);
|
||||
writeFileSync(at,original);const clean=execFileSync('git',['status','--porcelain'],{cwd:scratch,encoding:'utf8'});if(clean.trim())throw Error(id+' dirty restored tree: '+clean);if(hash(readFileSync(at))!==before)throw Error(id+' restore hash failed');
|
||||
const failed=/[ℹ#]\s*(?:fail|tests failed)\s+[1-9]/.test(log) || /✖/.test(log);
|
||||
// Syntax validity is decided exclusively by the node --check preflight above.
|
||||
// GNU timeout owns a process group and terminates its shell, tee and test descendants.
|
||||
const timedOut=run.status===124||run.status===137;
|
||||
const killed=timedOut||(run.status!==0&&failed);
|
||||
const result={id,description,test,args,status:run.status,signal:run.signal,killed,timedOut,wallSeconds:(Date.now()-started)/1000,baseWallSeconds:base.seconds,baseArgs:base.args,restoredGitStatus:clean,timeoutSeconds:60,timeoutKillAfterSeconds:2,processGroupTimeout:true,syntaxStatus:syntax.status,restoredSha256:before};results.push(result);
|
||||
writeFileSync(join(out,'results.json'),JSON.stringify(results,null,2)+'\n');
|
||||
console.log(id+' '+(killed?'KILLED':'SURVIVED/INVALID')+' base='+base.seconds+'s timeout='+timedOut);
|
||||
if(timedOut){process.exitCode=1;console.log('STOP non-FIFO timeout');break;}
|
||||
if(!killed) {process.exitCode=1;break;}
|
||||
}
|
||||
} finally {rmSync(scratch,{recursive:true,force:true});}
|
||||
@@ -0,0 +1,55 @@
|
||||
CLEAR (current driver ancestors excluded)
|
||||
✖ proof receives actual peer, cap traffic never invokes helper and transient cap disconnects (9.757279ms)
|
||||
✔ proof helper error and disconnect during verification never dispatch or bind (2.152394ms)
|
||||
✔ Client receives explicit proof refusal codes without dispatch, not outcome-unknown (42.155022ms)
|
||||
✖ asynchronous proof calls release their transient session on success, failure and timeout (2.42083ms)
|
||||
ℹ tests 4
|
||||
ℹ suites 0
|
||||
ℹ pass 2
|
||||
ℹ fail 2
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 118.061986
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/bus/tests/peer-transport.test.mjs:11:1
|
||||
✖ proof receives actual peer, cap traffic never invokes helper and transient cap disconnects (9.757279ms)
|
||||
AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:
|
||||
|
||||
assert.ok(disconnected.includes('transient'))
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/gHx4/g196-mut-8ogds2/packages/bus/tests/peer-transport.test.mjs:18:52)
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: false,
|
||||
expected: true,
|
||||
operator: '==',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/bus/tests/peer-transport.test.mjs:46:1
|
||||
✖ asynchronous proof calls release their transient session on success, failure and timeout (2.42083ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- 'success'
|
||||
- ]
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/gHx4/g196-mut-8ogds2/packages/bus/tests/peer-transport.test.mjs:56:11)
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ 'success' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
CLEAR (current driver ancestors excluded)
|
||||
✖ the tester binds only when the business sets bus.tester to exactly true (15.529676ms)
|
||||
✔ a business may not name a role tester, so the tester address is never a role (17.048772ms)
|
||||
✔ every verb outside the tester list refuses tester-refused and is recorded against the tester (35.981662ms)
|
||||
✔ a tester message is from tester, needs no prefix, and writes no human.input or authority (15.121114ms)
|
||||
✔ a tester message to a role no run holds refuses tester-target-not-running and stores nothing (9.568351ms)
|
||||
✔ a tester message is refused while the run is only launched, and routes once it claims (12.81092ms)
|
||||
✔ a human message to a role no run holds still waits and tells launch.by (10.797551ms)
|
||||
✔ a role answers a tester only in reply to a tester message, and the answer never reaches the human (20.81123ms)
|
||||
✔ the tester reads the human views a reader reads (23.440112ms)
|
||||
✔ tester proof binds its own CLI, start time and nonce, refuses a managed run and allows an agent (1.235067ms)
|
||||
✔ neither CLI's nonce proves the other: each proof is bound to its own CLI and nonce variable (0.35141ms)
|
||||
✔ testerNonce reads only the tester's variable and gives null on any read error (0.185262ms)
|
||||
✔ an envelope carries exactly one of cap, human and tester; no tester authenticator refuses (89.955842ms)
|
||||
✖ tester-cli.mjs binds through the runtime when the switch is on, and refuses off or under a run marker (996.323635ms)
|
||||
ℹ tests 14
|
||||
ℹ suites 0
|
||||
ℹ pass 12
|
||||
ℹ fail 2
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 1342.918342
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/bus/tests/tester.test.mjs:44:1
|
||||
✖ the tester binds only when the business sets bus.tester to exactly true (15.529676ms)
|
||||
AssertionError [ERR_ASSERTION]: Missing expected exception: null
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/gHx4/g196-mut-8ogds2/packages/bus/tests/tester.test.mjs:47:12)
|
||||
at Test.runInAsyncScope (node:async_hooks:226:14)
|
||||
at Test.run (node:internal/test_runner/test:1402:25)
|
||||
at Test.start (node:internal/test_runner/test:1262:17)
|
||||
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: undefined,
|
||||
expected: { code: 'tester-off' },
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/bus/tests/tester.test.mjs:427:1
|
||||
✖ tester-cli.mjs binds through the runtime when the switch is on, and refuses off or under a run marker (996.323635ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
+ err: '',
|
||||
+ out: '[]',
|
||||
+ status: 0
|
||||
- err: 'tester-off',
|
||||
- out: '',
|
||||
- status: 2
|
||||
}
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/gHx4/g196-mut-8ogds2/packages/bus/tests/tester.test.mjs:448:10)
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { status: 0, out: '[]', err: '' },
|
||||
expected: { status: 2, out: '', err: 'tester-off' },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
CLEAR (current driver ancestors excluded)
|
||||
✖ proof receives actual peer, cap traffic never invokes helper and transient cap disconnects (7.094815ms)
|
||||
✔ proof helper error and disconnect during verification never dispatch or bind (1.83943ms)
|
||||
✔ Client receives explicit proof refusal codes without dispatch, not outcome-unknown (42.771345ms)
|
||||
✔ asynchronous proof calls release their transient session on success, failure and timeout (28.445739ms)
|
||||
ℹ tests 4
|
||||
ℹ suites 0
|
||||
ℹ pass 3
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 138.603552
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/bus/tests/peer-transport.test.mjs:11:1
|
||||
✖ proof receives actual peer, cap traffic never invokes helper and transient cap disconnects (7.094815ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
|
||||
|
||||
2 !== 1
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/gHx4/g196-mut-8ogds2/packages/bus/tests/peer-transport.test.mjs:20:9)
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 2,
|
||||
expected: 1,
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
[
|
||||
{
|
||||
"id": "M13",
|
||||
"description": "transient cap leaked",
|
||||
"test": "packages/bus/tests/peer-transport.test.mjs",
|
||||
"args": [
|
||||
"--test",
|
||||
"packages/bus/tests/peer-transport.test.mjs"
|
||||
],
|
||||
"status": 1,
|
||||
"signal": null,
|
||||
"killed": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 1.781,
|
||||
"baseWallSeconds": 1.840884985,
|
||||
"baseArgs": [
|
||||
"packages/bus/tests/peer-transport.test.mjs"
|
||||
],
|
||||
"restoredGitStatus": "",
|
||||
"timeoutSeconds": 60,
|
||||
"timeoutKillAfterSeconds": 2,
|
||||
"processGroupTimeout": true,
|
||||
"syntaxStatus": 0,
|
||||
"restoredSha256": "7be306c830aa98763b34b329995b40e9df443483fe20fcd69100a3acb6311bd6"
|
||||
},
|
||||
{
|
||||
"id": "M17",
|
||||
"description": "tester switch ignored",
|
||||
"test": "packages/bus/tests/tester.test.mjs",
|
||||
"args": [
|
||||
"--test",
|
||||
"packages/bus/tests/tester.test.mjs"
|
||||
],
|
||||
"status": 1,
|
||||
"signal": null,
|
||||
"killed": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 2.94,
|
||||
"baseWallSeconds": 3.049434243,
|
||||
"baseArgs": [
|
||||
"packages/bus/tests/tester.test.mjs"
|
||||
],
|
||||
"restoredGitStatus": "",
|
||||
"timeoutSeconds": 60,
|
||||
"timeoutKillAfterSeconds": 2,
|
||||
"processGroupTimeout": true,
|
||||
"syntaxStatus": 0,
|
||||
"restoredSha256": "762234259d72db87aff510751fe14003099759ae37bc8eaf14f1ea1de61d2005"
|
||||
},
|
||||
{
|
||||
"id": "M22",
|
||||
"description": "cap requests invoke helper",
|
||||
"test": "packages/bus/tests/peer-transport.test.mjs",
|
||||
"args": [
|
||||
"--test",
|
||||
"packages/bus/tests/peer-transport.test.mjs"
|
||||
],
|
||||
"status": 1,
|
||||
"signal": null,
|
||||
"killed": true,
|
||||
"timedOut": false,
|
||||
"wallSeconds": 1.766,
|
||||
"baseWallSeconds": 1.840884985,
|
||||
"baseArgs": [
|
||||
"packages/bus/tests/peer-transport.test.mjs"
|
||||
],
|
||||
"restoredGitStatus": "",
|
||||
"timeoutSeconds": 60,
|
||||
"timeoutKillAfterSeconds": 2,
|
||||
"processGroupTimeout": true,
|
||||
"syntaxStatus": 0,
|
||||
"restoredSha256": "7be306c830aa98763b34b329995b40e9df443483fe20fcd69100a3acb6311bd6"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"scope": [
|
||||
"/mnt/storage/scratch/tmp/g196-tree-tn651z",
|
||||
"/mnt/storage/scratch/tmp/gHx4",
|
||||
"/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
|
||||
],
|
||||
"leftovers": [
|
||||
{
|
||||
"pid": 748279,
|
||||
"name": "npm exec @playw",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
|
||||
},
|
||||
{
|
||||
"pid": 748302,
|
||||
"name": "node-MainThread",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
|
||||
},
|
||||
{
|
||||
"pid": 748306,
|
||||
"name": "npm exec @model",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
|
||||
},
|
||||
{
|
||||
"pid": 748314,
|
||||
"name": "npm exec chrome",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
|
||||
},
|
||||
{
|
||||
"pid": 748494,
|
||||
"name": "chrome-devtools",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
|
||||
},
|
||||
{
|
||||
"pid": 748496,
|
||||
"name": "node-MainThread",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
|
||||
},
|
||||
{
|
||||
"pid": 748506,
|
||||
"name": "node-MainThread",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
|
||||
},
|
||||
{
|
||||
"pid": 748547,
|
||||
"name": "node-MainThread",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
|
||||
},
|
||||
{
|
||||
"pid": 749160,
|
||||
"name": "codex-code-mode",
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196"
|
||||
}
|
||||
],
|
||||
"count": 9
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
{"name":"sso-red","status":1,"signal":null,"seconds":4.186297276,"timedOut":false}
|
||||
{"name":"sso-green","status":0,"signal":null,"seconds":4.327955846,"timedOut":false}
|
||||
@@ -0,0 +1,9 @@
|
||||
✔ row196 SSO socket conversion pins pointer and unit argv order without send (2284.385768ms)
|
||||
ℹ tests 1
|
||||
ℹ suites 0
|
||||
ℹ pass 1
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 2988.023223
|
||||
@@ -0,0 +1,15 @@
|
||||
import {readFileSync,writeFileSync} from 'node:fs';import {spawnSync,execFileSync} from 'node:child_process';import {performance} from 'node:perf_hooks';import {createHash} from 'node:crypto';
|
||||
const root='/mnt/storage/scratch/tmp/g196-tree-tn651z',out=new URL('.',import.meta.url).pathname,file=root+'/scripts/stack-release.sh';
|
||||
const original=readFileSync(file,'utf8'),needle='case "${kept[i]}" in --send | --tester-port | --tester-socket) break';
|
||||
if(original.split(needle).length!==2)throw Error('SSO target not unique');
|
||||
const results=[];
|
||||
function run(name){const start=performance.now();const r=spawnSync('timeout',['--signal=TERM','--kill-after=2s','60s','bash','-c','set -o pipefail; python3 "$G196_BUSY" && "$G196_NODE" --test --test-name-pattern="row196 SSO socket" packages/cli/tests/stack-release.test.mjs 2>&1 | tee "$G196_LOG"'],{cwd:root,env:{...process.env,G196_NODE:process.execPath,G196_LOG:out+name+'.log'},encoding:'utf8',maxBuffer:4*1024*1024});const log=(r.stdout??'')+(r.stderr??'');const result={name,status:r.status,signal:r.signal,seconds:(performance.now()-start)/1000,timedOut:[124,137].includes(r.status)};results.push(result);writeFileSync(out+'sso-results.json',JSON.stringify(results,null,2)+'\n');console.log(JSON.stringify(result));return {r,log,result};}
|
||||
try{
|
||||
writeFileSync(file,original.replace(needle,'case "${kept[i]}" in --send | --tester-port) break'));
|
||||
const {r,log}=run('sso-red');
|
||||
if(r.status!==1||!log.includes('AssertionError')||!log.includes('--sso')||!log.includes('--tester-socket'))throw Error('unexpected RED result; stop');
|
||||
}finally{writeFileSync(file,original);}
|
||||
const {r,result}=run('sso-green');
|
||||
if(r.status!==0||result.seconds>30)throw Error('GREEN failed or over 30 seconds; stop');
|
||||
const clean=execFileSync('git',['status','--porcelain','--','.',':!node_modules'],{cwd:root,encoding:'utf8'});if(clean)throw Error('candidate dirty: '+clean);
|
||||
writeFileSync(out+'sso-restoration.json',JSON.stringify({sha256:createHash('sha256').update(readFileSync(file)).digest('hex'),gitStatus:clean},null,2)+'\n');
|
||||
@@ -0,0 +1,37 @@
|
||||
✖ row196 SSO socket conversion pins pointer and unit argv order without send (2065.614409ms)
|
||||
ℹ tests 1
|
||||
ℹ suites 0
|
||||
ℹ pass 0
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 2822.203375
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/cli/tests/stack-release.test.mjs:2305:1
|
||||
✖ row196 SSO socket conversion pins pointer and unit argv order without send (2065.614409ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
[
|
||||
'--port',
|
||||
'41171',
|
||||
'--business',
|
||||
'acme',
|
||||
+ '--tester-socket',
|
||||
'--sso',
|
||||
- '--tester-socket'
|
||||
]
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/g196-tree-tn651z/packages/cli/tests/stack-release.test.mjs:2316:9)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ '--port', '41171', '--business', 'acme', '--tester-socket', '--sso' ],
|
||||
expected: [ '--port', '41171', '--business', 'acme', '--sso', '--tester-socket' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"sha256": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"gitStatus": ""
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
[
|
||||
{
|
||||
"name": "sso-red",
|
||||
"status": 1,
|
||||
"signal": null,
|
||||
"seconds": 4.186297276,
|
||||
"timedOut": false
|
||||
},
|
||||
{
|
||||
"name": "sso-green",
|
||||
"status": 0,
|
||||
"signal": null,
|
||||
"seconds": 4.327955846,
|
||||
"timedOut": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,212 @@
|
||||
[
|
||||
{
|
||||
"id": "M1",
|
||||
"file": "packages/webui/src/serve.mjs",
|
||||
"r3": "da624f188c69e016ff82e1d1dcae1c579e68a57f0f25d773bb5d8bca56b80ee1",
|
||||
"r4": "da624f188c69e016ff82e1d1dcae1c579e68a57f0f25d773bb5d8bca56b80ee1",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M2",
|
||||
"file": "packages/webui/src/tester-socket.mjs",
|
||||
"r3": "1c1fe0c795adac97f28502564a75f26d5666d9be5ae51169f7dd5bb7741fad16",
|
||||
"r4": "1c1fe0c795adac97f28502564a75f26d5666d9be5ae51169f7dd5bb7741fad16",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M3",
|
||||
"file": "packages/webui/src/serve.mjs",
|
||||
"r3": "da624f188c69e016ff82e1d1dcae1c579e68a57f0f25d773bb5d8bca56b80ee1",
|
||||
"r4": "da624f188c69e016ff82e1d1dcae1c579e68a57f0f25d773bb5d8bca56b80ee1",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M4",
|
||||
"file": "packages/bus/src/principal.mjs",
|
||||
"r3": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"r4": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M5",
|
||||
"file": "packages/bus/src/peercred.mjs",
|
||||
"r3": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"r4": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M6",
|
||||
"file": "packages/bus/src/principal.mjs",
|
||||
"r3": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"r4": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M7",
|
||||
"file": "packages/webui/src/tester-socket.mjs",
|
||||
"r3": "1c1fe0c795adac97f28502564a75f26d5666d9be5ae51169f7dd5bb7741fad16",
|
||||
"r4": "1c1fe0c795adac97f28502564a75f26d5666d9be5ae51169f7dd5bb7741fad16",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M8",
|
||||
"file": "packages/bus/src/human.mjs",
|
||||
"r3": "0c6d96abe4607cba0b02b0638a2fc217ff8135bac9a47761a0ef015fbe9d3079",
|
||||
"r4": "0c6d96abe4607cba0b02b0638a2fc217ff8135bac9a47761a0ef015fbe9d3079",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M9",
|
||||
"file": "packages/bus/src/human.mjs",
|
||||
"r3": "0c6d96abe4607cba0b02b0638a2fc217ff8135bac9a47761a0ef015fbe9d3079",
|
||||
"r4": "0c6d96abe4607cba0b02b0638a2fc217ff8135bac9a47761a0ef015fbe9d3079",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M10",
|
||||
"file": "packages/bus/src/principal.mjs",
|
||||
"r3": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"r4": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M11",
|
||||
"file": "packages/bus/src/principal.mjs",
|
||||
"r3": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"r4": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M12",
|
||||
"file": "packages/bus/src/human.mjs",
|
||||
"r3": "0c6d96abe4607cba0b02b0638a2fc217ff8135bac9a47761a0ef015fbe9d3079",
|
||||
"r4": "0c6d96abe4607cba0b02b0638a2fc217ff8135bac9a47761a0ef015fbe9d3079",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M13",
|
||||
"file": "packages/bus/src/server.mjs",
|
||||
"r3": "830faa9a76150b59189cde395ec8deeb768e4b0d45ed262a57bb6fc6e459abb4",
|
||||
"r4": "7be306c830aa98763b34b329995b40e9df443483fe20fcd69100a3acb6311bd6",
|
||||
"changed": true
|
||||
},
|
||||
{
|
||||
"id": "M14",
|
||||
"file": "packages/bus/src/principal.mjs",
|
||||
"r3": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"r4": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M15",
|
||||
"file": "scripts/stack-release.sh",
|
||||
"r3": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"r4": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M16",
|
||||
"file": "scripts/stack-release.sh",
|
||||
"r3": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"r4": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M17",
|
||||
"file": "packages/bus/src/broker.mjs",
|
||||
"r3": "e6f33bac95a40c9d52d67f297eec361cd0f30da5d3c28057468ee5d56c3ae7fc",
|
||||
"r4": "762234259d72db87aff510751fe14003099759ae37bc8eaf14f1ea1de61d2005",
|
||||
"changed": true
|
||||
},
|
||||
{
|
||||
"id": "M18",
|
||||
"file": "packages/bus/src/principal.mjs",
|
||||
"r3": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"r4": "32ef39d80b523bdd586c29620d7a752c309c8e1aa70befc1414125468f3411dd",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M19",
|
||||
"file": "packages/cli/src/tester-http.mjs",
|
||||
"r3": "4bd7bdf0898844684ebf9444b110d2c5b6fa874b2681183e54f1f62f97823192",
|
||||
"r4": "4bd7bdf0898844684ebf9444b110d2c5b6fa874b2681183e54f1f62f97823192",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M20",
|
||||
"file": "packages/bus/src/peercred.mjs",
|
||||
"r3": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"r4": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M21",
|
||||
"file": "packages/bus/src/interpreter.mjs",
|
||||
"r3": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a",
|
||||
"r4": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M22",
|
||||
"file": "packages/bus/src/server.mjs",
|
||||
"r3": "830faa9a76150b59189cde395ec8deeb768e4b0d45ed262a57bb6fc6e459abb4",
|
||||
"r4": "7be306c830aa98763b34b329995b40e9df443483fe20fcd69100a3acb6311bd6",
|
||||
"changed": true
|
||||
},
|
||||
{
|
||||
"id": "M23",
|
||||
"file": "packages/bus/src/interpreter.mjs",
|
||||
"r3": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a",
|
||||
"r4": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M24",
|
||||
"file": "packages/webui/src/tester-socket.mjs",
|
||||
"r3": "1c1fe0c795adac97f28502564a75f26d5666d9be5ae51169f7dd5bb7741fad16",
|
||||
"r4": "1c1fe0c795adac97f28502564a75f26d5666d9be5ae51169f7dd5bb7741fad16",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M25",
|
||||
"file": "packages/bus/src/interpreter.mjs",
|
||||
"r3": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a",
|
||||
"r4": "d5d98a9133a1b449acc48143fd559d890a470c6ea210b30b9b70e491e6cd855a",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M26",
|
||||
"file": "packages/bus/src/peercred.mjs",
|
||||
"r3": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"r4": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M27",
|
||||
"file": "packages/bus/src/peercred.mjs",
|
||||
"r3": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"r4": "29c88655e8b9aed8db604573c9213fd9f3c40ef35ff04f4eda8fbe8f1b8a32d7",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M28",
|
||||
"file": "scripts/stack-release.sh",
|
||||
"r3": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"r4": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M28b",
|
||||
"file": "scripts/stack-release.sh",
|
||||
"r3": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"r4": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"changed": false
|
||||
},
|
||||
{
|
||||
"id": "M29",
|
||||
"file": "scripts/stack-release.sh",
|
||||
"r3": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"r4": "b916a2793311d21e3ce7117e9b5e0768e6e33c841fa3aa39fb7ffc9c5974acd2",
|
||||
"changed": false
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,5 @@
|
||||
import {readFileSync,writeFileSync} from 'node:fs';import {execFileSync} from 'node:child_process';import vm from 'node:vm';import {createHash} from 'node:crypto';
|
||||
const source=readFileSync('agents/gander/work/queue-196/r2/driver.mjs','utf8'),context=vm.createContext({});vm.runInContext(source.slice(source.indexOf("const p='"),source.indexOf('const hash='))+';globalThis.rows=specs;',context);
|
||||
const sha=x=>createHash('sha256').update(x).digest('hex');
|
||||
const rows=context.rows.map(([id,file])=>{const r3=sha(execFileSync('git',['show','b1076c8b8:'+file])),r4=sha(execFileSync('git',['show','f8a59e6aa:'+file]));return{id,file,r3,r4,changed:r3!==r4};});
|
||||
writeFileSync('agents/gander/work/queue-196/r4/gate/target-shas.json',JSON.stringify(rows,null,2)+'\n');console.log(JSON.stringify({changed:rows.filter(r=>r.changed),unchanged:rows.filter(r=>!r.changed).map(r=>r.id)},null,2));
|
||||
@@ -0,0 +1 @@
|
||||
/mnt/storage/scratch/tmp/gHx4
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,5 @@
|
||||
START bus 80 whole file(s)
|
||||
END bus {"code":0,"signal":null,"pass":622,"fail":0,"skip":0,"wallSeconds":36.272237477999994,"stopped":false}
|
||||
START webui 50 whole file(s)
|
||||
END webui {"code":1,"signal":null,"pass":303,"fail":1,"skip":1,"wallSeconds":113.151197196,"stopped":false}
|
||||
STOP webui
|
||||
@@ -0,0 +1,612 @@
|
||||
[
|
||||
{
|
||||
"name": "bus",
|
||||
"command": "/usr/bin/node",
|
||||
"args": [
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"--test-concurrency=2",
|
||||
"packages/bus/tests/account-migration.test.mjs",
|
||||
"packages/bus/tests/agents.test.mjs",
|
||||
"packages/bus/tests/approval-binding.test.mjs",
|
||||
"packages/bus/tests/broker.test.mjs",
|
||||
"packages/bus/tests/business.test.mjs",
|
||||
"packages/bus/tests/channel-proof.test.mjs",
|
||||
"packages/bus/tests/chief-of-staff.test.mjs",
|
||||
"packages/bus/tests/comment-cursors.test.mjs",
|
||||
"packages/bus/tests/comment-migration.test.mjs",
|
||||
"packages/bus/tests/creative.test.mjs",
|
||||
"packages/bus/tests/credential-claim.test.mjs",
|
||||
"packages/bus/tests/credential-status.test.mjs",
|
||||
"packages/bus/tests/credential-store.test.mjs",
|
||||
"packages/bus/tests/credential-verbs.test.mjs",
|
||||
"packages/bus/tests/credentials.test.mjs",
|
||||
"packages/bus/tests/csuite-messaging.test.mjs",
|
||||
"packages/bus/tests/daily-quota-runtime.test.mjs",
|
||||
"packages/bus/tests/decision-close.test.mjs",
|
||||
"packages/bus/tests/decision-route.test.mjs",
|
||||
"packages/bus/tests/decisions.test.mjs",
|
||||
"packages/bus/tests/end-launch.test.mjs",
|
||||
"packages/bus/tests/grant-enroll.test.mjs",
|
||||
"packages/bus/tests/grant-executor.test.mjs",
|
||||
"packages/bus/tests/grant-host.test.mjs",
|
||||
"packages/bus/tests/grant-migration.test.mjs",
|
||||
"packages/bus/tests/hard-waits.test.mjs",
|
||||
"packages/bus/tests/host-run.test.mjs",
|
||||
"packages/bus/tests/host-tools.test.mjs",
|
||||
"packages/bus/tests/human.test.mjs",
|
||||
"packages/bus/tests/instances-verb.test.mjs",
|
||||
"packages/bus/tests/interpreter.test.mjs",
|
||||
"packages/bus/tests/land.test.mjs",
|
||||
"packages/bus/tests/launch-notice.test.mjs",
|
||||
"packages/bus/tests/library.test.mjs",
|
||||
"packages/bus/tests/limit-checks.test.mjs",
|
||||
"packages/bus/tests/limit-stop.test.mjs",
|
||||
"packages/bus/tests/limits-runtime.test.mjs",
|
||||
"packages/bus/tests/limits.test.mjs",
|
||||
"packages/bus/tests/message-citation.test.mjs",
|
||||
"packages/bus/tests/messages.test.mjs",
|
||||
"packages/bus/tests/messaging.test.mjs",
|
||||
"packages/bus/tests/name-migration.test.mjs",
|
||||
"packages/bus/tests/names.test.mjs",
|
||||
"packages/bus/tests/peer-transport.test.mjs",
|
||||
"packages/bus/tests/peercred.test.mjs",
|
||||
"packages/bus/tests/plugins-verb.test.mjs",
|
||||
"packages/bus/tests/principal.test.mjs",
|
||||
"packages/bus/tests/process.test.mjs",
|
||||
"packages/bus/tests/project-await.test.mjs",
|
||||
"packages/bus/tests/project-files.test.mjs",
|
||||
"packages/bus/tests/project-runtime.test.mjs",
|
||||
"packages/bus/tests/publish.test.mjs",
|
||||
"packages/bus/tests/replies.test.mjs",
|
||||
"packages/bus/tests/requirements.test.mjs",
|
||||
"packages/bus/tests/review.test.mjs",
|
||||
"packages/bus/tests/routes-verb.test.mjs",
|
||||
"packages/bus/tests/schema.test.mjs",
|
||||
"packages/bus/tests/single-use.test.mjs",
|
||||
"packages/bus/tests/spec-migration.test.mjs",
|
||||
"packages/bus/tests/spec-review.test.mjs",
|
||||
"packages/bus/tests/spec-socket.test.mjs",
|
||||
"packages/bus/tests/spec.test.mjs",
|
||||
"packages/bus/tests/staff-request.test.mjs",
|
||||
"packages/bus/tests/state.test.mjs",
|
||||
"packages/bus/tests/store.test.mjs",
|
||||
"packages/bus/tests/task-page.test.mjs",
|
||||
"packages/bus/tests/task-read.test.mjs",
|
||||
"packages/bus/tests/tasks.test.mjs",
|
||||
"packages/bus/tests/tester-threads.test.mjs",
|
||||
"packages/bus/tests/tester-writes.test.mjs",
|
||||
"packages/bus/tests/tester.test.mjs",
|
||||
"packages/bus/tests/thread-migration.test.mjs",
|
||||
"packages/bus/tests/threads.test.mjs",
|
||||
"packages/bus/tests/transport.test.mjs",
|
||||
"packages/bus/tests/usage-broker.test.mjs",
|
||||
"packages/bus/tests/usage-migration.test.mjs",
|
||||
"packages/bus/tests/usage-runtime.test.mjs",
|
||||
"packages/bus/tests/usage.test.mjs",
|
||||
"packages/bus/tests/web.test.mjs",
|
||||
"packages/bus/tests/workflow-roles.test.mjs"
|
||||
],
|
||||
"kind": "node",
|
||||
"wholeFiles": [
|
||||
"packages/bus/tests/account-migration.test.mjs",
|
||||
"packages/bus/tests/agents.test.mjs",
|
||||
"packages/bus/tests/approval-binding.test.mjs",
|
||||
"packages/bus/tests/broker.test.mjs",
|
||||
"packages/bus/tests/business.test.mjs",
|
||||
"packages/bus/tests/channel-proof.test.mjs",
|
||||
"packages/bus/tests/chief-of-staff.test.mjs",
|
||||
"packages/bus/tests/comment-cursors.test.mjs",
|
||||
"packages/bus/tests/comment-migration.test.mjs",
|
||||
"packages/bus/tests/creative.test.mjs",
|
||||
"packages/bus/tests/credential-claim.test.mjs",
|
||||
"packages/bus/tests/credential-status.test.mjs",
|
||||
"packages/bus/tests/credential-store.test.mjs",
|
||||
"packages/bus/tests/credential-verbs.test.mjs",
|
||||
"packages/bus/tests/credentials.test.mjs",
|
||||
"packages/bus/tests/csuite-messaging.test.mjs",
|
||||
"packages/bus/tests/daily-quota-runtime.test.mjs",
|
||||
"packages/bus/tests/decision-close.test.mjs",
|
||||
"packages/bus/tests/decision-route.test.mjs",
|
||||
"packages/bus/tests/decisions.test.mjs",
|
||||
"packages/bus/tests/end-launch.test.mjs",
|
||||
"packages/bus/tests/grant-enroll.test.mjs",
|
||||
"packages/bus/tests/grant-executor.test.mjs",
|
||||
"packages/bus/tests/grant-host.test.mjs",
|
||||
"packages/bus/tests/grant-migration.test.mjs",
|
||||
"packages/bus/tests/hard-waits.test.mjs",
|
||||
"packages/bus/tests/host-run.test.mjs",
|
||||
"packages/bus/tests/host-tools.test.mjs",
|
||||
"packages/bus/tests/human.test.mjs",
|
||||
"packages/bus/tests/instances-verb.test.mjs",
|
||||
"packages/bus/tests/interpreter.test.mjs",
|
||||
"packages/bus/tests/land.test.mjs",
|
||||
"packages/bus/tests/launch-notice.test.mjs",
|
||||
"packages/bus/tests/library.test.mjs",
|
||||
"packages/bus/tests/limit-checks.test.mjs",
|
||||
"packages/bus/tests/limit-stop.test.mjs",
|
||||
"packages/bus/tests/limits-runtime.test.mjs",
|
||||
"packages/bus/tests/limits.test.mjs",
|
||||
"packages/bus/tests/message-citation.test.mjs",
|
||||
"packages/bus/tests/messages.test.mjs",
|
||||
"packages/bus/tests/messaging.test.mjs",
|
||||
"packages/bus/tests/name-migration.test.mjs",
|
||||
"packages/bus/tests/names.test.mjs",
|
||||
"packages/bus/tests/peer-transport.test.mjs",
|
||||
"packages/bus/tests/peercred.test.mjs",
|
||||
"packages/bus/tests/plugins-verb.test.mjs",
|
||||
"packages/bus/tests/principal.test.mjs",
|
||||
"packages/bus/tests/process.test.mjs",
|
||||
"packages/bus/tests/project-await.test.mjs",
|
||||
"packages/bus/tests/project-files.test.mjs",
|
||||
"packages/bus/tests/project-runtime.test.mjs",
|
||||
"packages/bus/tests/publish.test.mjs",
|
||||
"packages/bus/tests/replies.test.mjs",
|
||||
"packages/bus/tests/requirements.test.mjs",
|
||||
"packages/bus/tests/review.test.mjs",
|
||||
"packages/bus/tests/routes-verb.test.mjs",
|
||||
"packages/bus/tests/schema.test.mjs",
|
||||
"packages/bus/tests/single-use.test.mjs",
|
||||
"packages/bus/tests/spec-migration.test.mjs",
|
||||
"packages/bus/tests/spec-review.test.mjs",
|
||||
"packages/bus/tests/spec-socket.test.mjs",
|
||||
"packages/bus/tests/spec.test.mjs",
|
||||
"packages/bus/tests/staff-request.test.mjs",
|
||||
"packages/bus/tests/state.test.mjs",
|
||||
"packages/bus/tests/store.test.mjs",
|
||||
"packages/bus/tests/task-page.test.mjs",
|
||||
"packages/bus/tests/task-read.test.mjs",
|
||||
"packages/bus/tests/tasks.test.mjs",
|
||||
"packages/bus/tests/tester-threads.test.mjs",
|
||||
"packages/bus/tests/tester-writes.test.mjs",
|
||||
"packages/bus/tests/tester.test.mjs",
|
||||
"packages/bus/tests/thread-migration.test.mjs",
|
||||
"packages/bus/tests/threads.test.mjs",
|
||||
"packages/bus/tests/transport.test.mjs",
|
||||
"packages/bus/tests/usage-broker.test.mjs",
|
||||
"packages/bus/tests/usage-migration.test.mjs",
|
||||
"packages/bus/tests/usage-runtime.test.mjs",
|
||||
"packages/bus/tests/usage.test.mjs",
|
||||
"packages/bus/tests/web.test.mjs",
|
||||
"packages/bus/tests/workflow-roles.test.mjs"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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,306 @@
|
||||
[
|
||||
{
|
||||
"name": "bus",
|
||||
"command": "/usr/bin/node",
|
||||
"args": [
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"--test-concurrency=2",
|
||||
"packages/bus/tests/account-migration.test.mjs",
|
||||
"packages/bus/tests/agents.test.mjs",
|
||||
"packages/bus/tests/approval-binding.test.mjs",
|
||||
"packages/bus/tests/broker.test.mjs",
|
||||
"packages/bus/tests/business.test.mjs",
|
||||
"packages/bus/tests/channel-proof.test.mjs",
|
||||
"packages/bus/tests/chief-of-staff.test.mjs",
|
||||
"packages/bus/tests/comment-cursors.test.mjs",
|
||||
"packages/bus/tests/comment-migration.test.mjs",
|
||||
"packages/bus/tests/creative.test.mjs",
|
||||
"packages/bus/tests/credential-claim.test.mjs",
|
||||
"packages/bus/tests/credential-status.test.mjs",
|
||||
"packages/bus/tests/credential-store.test.mjs",
|
||||
"packages/bus/tests/credential-verbs.test.mjs",
|
||||
"packages/bus/tests/credentials.test.mjs",
|
||||
"packages/bus/tests/csuite-messaging.test.mjs",
|
||||
"packages/bus/tests/daily-quota-runtime.test.mjs",
|
||||
"packages/bus/tests/decision-close.test.mjs",
|
||||
"packages/bus/tests/decision-route.test.mjs",
|
||||
"packages/bus/tests/decisions.test.mjs",
|
||||
"packages/bus/tests/end-launch.test.mjs",
|
||||
"packages/bus/tests/grant-enroll.test.mjs",
|
||||
"packages/bus/tests/grant-executor.test.mjs",
|
||||
"packages/bus/tests/grant-host.test.mjs",
|
||||
"packages/bus/tests/grant-migration.test.mjs",
|
||||
"packages/bus/tests/hard-waits.test.mjs",
|
||||
"packages/bus/tests/host-run.test.mjs",
|
||||
"packages/bus/tests/host-tools.test.mjs",
|
||||
"packages/bus/tests/human.test.mjs",
|
||||
"packages/bus/tests/instances-verb.test.mjs",
|
||||
"packages/bus/tests/interpreter.test.mjs",
|
||||
"packages/bus/tests/land.test.mjs",
|
||||
"packages/bus/tests/launch-notice.test.mjs",
|
||||
"packages/bus/tests/library.test.mjs",
|
||||
"packages/bus/tests/limit-checks.test.mjs",
|
||||
"packages/bus/tests/limit-stop.test.mjs",
|
||||
"packages/bus/tests/limits-runtime.test.mjs",
|
||||
"packages/bus/tests/limits.test.mjs",
|
||||
"packages/bus/tests/message-citation.test.mjs",
|
||||
"packages/bus/tests/messages.test.mjs",
|
||||
"packages/bus/tests/messaging.test.mjs",
|
||||
"packages/bus/tests/name-migration.test.mjs",
|
||||
"packages/bus/tests/names.test.mjs",
|
||||
"packages/bus/tests/peer-transport.test.mjs",
|
||||
"packages/bus/tests/peercred.test.mjs",
|
||||
"packages/bus/tests/plugins-verb.test.mjs",
|
||||
"packages/bus/tests/principal.test.mjs",
|
||||
"packages/bus/tests/process.test.mjs",
|
||||
"packages/bus/tests/project-await.test.mjs",
|
||||
"packages/bus/tests/project-files.test.mjs",
|
||||
"packages/bus/tests/project-runtime.test.mjs",
|
||||
"packages/bus/tests/publish.test.mjs",
|
||||
"packages/bus/tests/replies.test.mjs",
|
||||
"packages/bus/tests/requirements.test.mjs",
|
||||
"packages/bus/tests/review.test.mjs",
|
||||
"packages/bus/tests/routes-verb.test.mjs",
|
||||
"packages/bus/tests/schema.test.mjs",
|
||||
"packages/bus/tests/single-use.test.mjs",
|
||||
"packages/bus/tests/spec-migration.test.mjs",
|
||||
"packages/bus/tests/spec-review.test.mjs",
|
||||
"packages/bus/tests/spec-socket.test.mjs",
|
||||
"packages/bus/tests/spec.test.mjs",
|
||||
"packages/bus/tests/staff-request.test.mjs",
|
||||
"packages/bus/tests/state.test.mjs",
|
||||
"packages/bus/tests/store.test.mjs",
|
||||
"packages/bus/tests/task-page.test.mjs",
|
||||
"packages/bus/tests/task-read.test.mjs",
|
||||
"packages/bus/tests/tasks.test.mjs",
|
||||
"packages/bus/tests/tester-threads.test.mjs",
|
||||
"packages/bus/tests/tester-writes.test.mjs",
|
||||
"packages/bus/tests/tester.test.mjs",
|
||||
"packages/bus/tests/thread-migration.test.mjs",
|
||||
"packages/bus/tests/threads.test.mjs",
|
||||
"packages/bus/tests/transport.test.mjs",
|
||||
"packages/bus/tests/usage-broker.test.mjs",
|
||||
"packages/bus/tests/usage-migration.test.mjs",
|
||||
"packages/bus/tests/usage-runtime.test.mjs",
|
||||
"packages/bus/tests/usage.test.mjs",
|
||||
"packages/bus/tests/web.test.mjs",
|
||||
"packages/bus/tests/workflow-roles.test.mjs"
|
||||
],
|
||||
"kind": "node",
|
||||
"wholeFiles": [
|
||||
"packages/bus/tests/account-migration.test.mjs",
|
||||
"packages/bus/tests/agents.test.mjs",
|
||||
"packages/bus/tests/approval-binding.test.mjs",
|
||||
"packages/bus/tests/broker.test.mjs",
|
||||
"packages/bus/tests/business.test.mjs",
|
||||
"packages/bus/tests/channel-proof.test.mjs",
|
||||
"packages/bus/tests/chief-of-staff.test.mjs",
|
||||
"packages/bus/tests/comment-cursors.test.mjs",
|
||||
"packages/bus/tests/comment-migration.test.mjs",
|
||||
"packages/bus/tests/creative.test.mjs",
|
||||
"packages/bus/tests/credential-claim.test.mjs",
|
||||
"packages/bus/tests/credential-status.test.mjs",
|
||||
"packages/bus/tests/credential-store.test.mjs",
|
||||
"packages/bus/tests/credential-verbs.test.mjs",
|
||||
"packages/bus/tests/credentials.test.mjs",
|
||||
"packages/bus/tests/csuite-messaging.test.mjs",
|
||||
"packages/bus/tests/daily-quota-runtime.test.mjs",
|
||||
"packages/bus/tests/decision-close.test.mjs",
|
||||
"packages/bus/tests/decision-route.test.mjs",
|
||||
"packages/bus/tests/decisions.test.mjs",
|
||||
"packages/bus/tests/end-launch.test.mjs",
|
||||
"packages/bus/tests/grant-enroll.test.mjs",
|
||||
"packages/bus/tests/grant-executor.test.mjs",
|
||||
"packages/bus/tests/grant-host.test.mjs",
|
||||
"packages/bus/tests/grant-migration.test.mjs",
|
||||
"packages/bus/tests/hard-waits.test.mjs",
|
||||
"packages/bus/tests/host-run.test.mjs",
|
||||
"packages/bus/tests/host-tools.test.mjs",
|
||||
"packages/bus/tests/human.test.mjs",
|
||||
"packages/bus/tests/instances-verb.test.mjs",
|
||||
"packages/bus/tests/interpreter.test.mjs",
|
||||
"packages/bus/tests/land.test.mjs",
|
||||
"packages/bus/tests/launch-notice.test.mjs",
|
||||
"packages/bus/tests/library.test.mjs",
|
||||
"packages/bus/tests/limit-checks.test.mjs",
|
||||
"packages/bus/tests/limit-stop.test.mjs",
|
||||
"packages/bus/tests/limits-runtime.test.mjs",
|
||||
"packages/bus/tests/limits.test.mjs",
|
||||
"packages/bus/tests/message-citation.test.mjs",
|
||||
"packages/bus/tests/messages.test.mjs",
|
||||
"packages/bus/tests/messaging.test.mjs",
|
||||
"packages/bus/tests/name-migration.test.mjs",
|
||||
"packages/bus/tests/names.test.mjs",
|
||||
"packages/bus/tests/peer-transport.test.mjs",
|
||||
"packages/bus/tests/peercred.test.mjs",
|
||||
"packages/bus/tests/plugins-verb.test.mjs",
|
||||
"packages/bus/tests/principal.test.mjs",
|
||||
"packages/bus/tests/process.test.mjs",
|
||||
"packages/bus/tests/project-await.test.mjs",
|
||||
"packages/bus/tests/project-files.test.mjs",
|
||||
"packages/bus/tests/project-runtime.test.mjs",
|
||||
"packages/bus/tests/publish.test.mjs",
|
||||
"packages/bus/tests/replies.test.mjs",
|
||||
"packages/bus/tests/requirements.test.mjs",
|
||||
"packages/bus/tests/review.test.mjs",
|
||||
"packages/bus/tests/routes-verb.test.mjs",
|
||||
"packages/bus/tests/schema.test.mjs",
|
||||
"packages/bus/tests/single-use.test.mjs",
|
||||
"packages/bus/tests/spec-migration.test.mjs",
|
||||
"packages/bus/tests/spec-review.test.mjs",
|
||||
"packages/bus/tests/spec-socket.test.mjs",
|
||||
"packages/bus/tests/spec.test.mjs",
|
||||
"packages/bus/tests/staff-request.test.mjs",
|
||||
"packages/bus/tests/state.test.mjs",
|
||||
"packages/bus/tests/store.test.mjs",
|
||||
"packages/bus/tests/task-page.test.mjs",
|
||||
"packages/bus/tests/task-read.test.mjs",
|
||||
"packages/bus/tests/tasks.test.mjs",
|
||||
"packages/bus/tests/tester-threads.test.mjs",
|
||||
"packages/bus/tests/tester-writes.test.mjs",
|
||||
"packages/bus/tests/tester.test.mjs",
|
||||
"packages/bus/tests/thread-migration.test.mjs",
|
||||
"packages/bus/tests/threads.test.mjs",
|
||||
"packages/bus/tests/transport.test.mjs",
|
||||
"packages/bus/tests/usage-broker.test.mjs",
|
||||
"packages/bus/tests/usage-migration.test.mjs",
|
||||
"packages/bus/tests/usage-runtime.test.mjs",
|
||||
"packages/bus/tests/usage.test.mjs",
|
||||
"packages/bus/tests/web.test.mjs",
|
||||
"packages/bus/tests/workflow-roles.test.mjs"
|
||||
],
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-196/r4/gate/bus.log",
|
||||
"code": 0,
|
||||
"signal": null,
|
||||
"wallSeconds": 36.272237477999994,
|
||||
"pass": 622,
|
||||
"fail": 0,
|
||||
"skip": 0,
|
||||
"observedFailures": 0,
|
||||
"stopped": false,
|
||||
"complete": true
|
||||
},
|
||||
{
|
||||
"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/r4/gate/webui.log",
|
||||
"code": 1,
|
||||
"signal": null,
|
||||
"wallSeconds": 113.151197196,
|
||||
"pass": 303,
|
||||
"fail": 1,
|
||||
"skip": 1,
|
||||
"observedFailures": 1,
|
||||
"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 ['bus','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('../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;}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
packages/bus/src/broker.mjs | 27 ++++++++++++++++++++++++++-
|
||||
packages/bus/src/server.mjs | 4 ++--
|
||||
2 files changed, 28 insertions(+), 3 deletions(-)
|
||||
@@ -0,0 +1 @@
|
||||
22057b82181f42301c8819fbb5d0be134c8c79bc 0000000000000000000000000000000000000000
|
||||
@@ -0,0 +1 @@
|
||||
81901f8d5fe07e7b941d398f9240e835df29cb64 0000000000000000000000000000000000000000
|
||||
@@ -0,0 +1,45 @@
|
||||
1: a95afb43b ! 1: 19073a8e0 gander: preserve row 196 human boundary build for rebase
|
||||
@@ Commit message
|
||||
|
||||
## BUILD-LOG.md ##
|
||||
@@ BUILD-LOG.md: Before: managed project/thread verbs had no Console conversation area. After: fi
|
||||
- 2026-10-21T01:28:05Z | Darkwing | row 232 #1734 installer I1 build, round 1 in review | Before: stack-release.sh managed only user units (systemctl --user), and stack-copy.sh had no bundle copy. After: --units external (adopt, activate, rollback --to, status, confirm, revert, gate --since, AWAITING-UNITS, stale-start, external-pm, --plan --expect-from) and stack-copy check --units external, copy --bundle FILE SHA, wrapper ID --create; user mode byte-identical to the base by test. First build 0af0c73c6 on 00d4cc1f6; rebased onto row 200 (cb5fdb064) as a0ffabc3f on darkwing/row232-r1; --sso refused under external (D9), row 200 config_checks run under external (D10). Gate on Sage's slot (sage-1618): cli 561/0, every scripts/test-*.sh green; 17/17 mutants killed. Results commit 84f1a91e6 (pushed, seat branch only). Manifest 7a3b4ea1 (9 paths), queue revs 2595-2596, request comment 29825, reviewer Filbert. Packet agents/darkwing/work/queue-232/BUILD.md.
|
||||
- 2026-10-21T04:50:44Z | Darkwing | row 233 #1735 installer I3 build, round 1 in review | Before: root had no upgrade driver for root-owned units and no host run sheet; stack-release.sh had no rehearse --backup last and no external plan refusals. After: scripts/stack-upgrade.sh upgrade and rollback (r6 A1-A5, A2f, R1-R4) with 20 tests, docs/guides/host-run-sheet.md, TOOLS.md lines, and on Sage's rulings stack-release.sh --backup last, BACKUP_STORE and the --plan refusals open-activation and migrate-required (3 tests). Base e65a3ab4d (row 232's landing). Gate on Sage's slot (sage-1704) on d99166ade: cli 616/0, every scripts/test-*.sh green, 1201/0 summed by awk; m1-m8 8/8 killed. Correction: the process sweep after the gate found an orphaned sleep 60 from the lock test's flock holder (N1); 08db6ac3f fixes it test only, Sage ruled the gate stands (sage-1707), rerun c0 20/0 and m1 killed with 0 left (sage-1708). Tip 1a1dc80ca (pushed, seat branch only). Manifest 464ce9eb (7 paths), queue revs 2644 and 2647, request comment 29901, reviewer Filbert. Packet agents/darkwing/work/queue-233/BUILD.md.
|
||||
2026-10-21T06:37:41Z | Darkwing | row 240 #1746 installer I4 build, round 1 in review | Before: root had no host check for the bwrap AppArmor profile, its pins or a boot unit, and stack-upgrade.sh exited 1 args-failed when the args move after A5 failed, while exit 1 means the old copy runs. After: scripts/case1-hostcheck.sh (seven items, --check, --enforce, --upstream), scripts/case1-pins.sh, mosaic-hostcheck.service and 16 tests; the args move failure exits 5 args-failed, documented in TOOLS.md and run sheet section 6 and tested; run sheet section 3 puts the pinned npm on PATH and names the bin/claude.exe --claude path; sections 8 and 10 have precheck lines. Verification: slot run r1 on 47ec9fe2f failed at the singles (the new N1 test's after hook threw ENOENT after the fixture cleanup removed the root); b45852daa drops the hook; r2 on b45852daa green: singles 16/0 and 21/0, c0 plus M1-M8 8/8 killed, cli 639/0, scripts 585/0. Candidate darkwing/row240-r3 ad1b23ab2 on c771a36f4, manifest 573ece95 (9 paths), revs 2694 and 2695, comment 29943.
|
||||
+ 2026-10-21T09:00Z | Herb | row 215 C2-04 implementation started | Before: business files reject library entries and root consumers assume code projects; the organization writer can change all project mappings. Plan: approved manifest 2522025af on C2-01 a2c72ac95, Filbert reply to herb-0056, scope sage-1848/1852/1860. Focused slot sage-1869 observed expected red mapping and M9 cases, then 14/0 green for new T1/T2 cases, no skips; clear herb-0062 with empty test/fixture process scan. After that clear, T3/T4 tests and host-only mirror/bus implementation continue under sage-1874, unrun while Sage holds the slot. Full singles, suites and implementation review remain pending. No source commit, push or live change.
|
||||
+ 2026-10-21T13:29Z | Herb | row 215 C2-04 source verified for candidate review | Before: business code assumed every project had a root and organization writes could replace project mappings. After: library mappings load without agent checkouts or publish grants, project mappings are protected before and after serialization, host-only bare mirrors share a bounded publication lock with sync, and library.file/library.status are human-only async bus reads. Base f8276c5eb preserves all nine landed overlaps. Granted sage-2008 whole singles: 16 files, 451/0, no skips or cancellations, ended 13:27:27.279728Z; all source hashes unchanged, process scan empty, no own-path drift through 8a04f4aa4. Full landing gate and implementation review remain pending; no HTTP, sync writer or live change.
|
||||
+
|
||||
+2026-10-20 19:09:44 UTC | Gander row 196 #1694 design phase | Before: tester TCP reaches every local uid and human proofs do not bind the socket peer. After: design draft at agents/gander/work/queue-196/DESIGN.md inventories listeners, proposes private tester HTTP and SO_PEERCRED binding, aligns the per-request principal contract with Morgana and Gizmoduck, and lists migration, tests, mutants and same-uid limits. Python versus other credential options and Console provenance require Duckworth ruling. Documentation only. No product code, suite, live probe, secret access or deployment.
|
||||
+
|
||||
@@ packages/bus/src/server.mjs
|
||||
@@
|
||||
import { createServer } from 'node:net';
|
||||
import { lstatSync, chmodSync, unlinkSync } from 'node:fs';
|
||||
- import { BusError, TASK_VERBS, WEB_VERBS, HOST_VERBS, HOSTS_VERBS, PROJECT_FILE_VERBS, PROJECT_SAVE_VERB, PROJECT_SAVE_REQUEST_MAX } from './broker.mjs';
|
||||
+ import { BusError, TASK_VERBS, WEB_VERBS, HOST_VERBS, HOSTS_VERBS, PROJECT_FILE_VERBS, LIBRARY_VERBS, PROJECT_SAVE_VERB, PROJECT_SAVE_REQUEST_MAX } from './broker.mjs';
|
||||
+import { inspectInterpreter } from './interpreter.mjs';
|
||||
+import { createPeerReader } from './peercred.mjs';
|
||||
const LIMIT = 65536;
|
||||
@@ packages/webui/src/cli.mjs: try {
|
||||
}
|
||||
const reads = consoleReads({ root: REPO, queueRoot: options.checkout ?? REPO, system, configDir: configDir(), rolesDir: rolesDir(), business: options.business ?? null });
|
||||
@@ packages/webui/src/cli.mjs: try {
|
||||
- server = await startServer({ board: options.board, port: options.port, bus, reads, preview: options.preview, sso, proof, send, settingsWrite, projectFiles, projectFile, projectSave, chat, nameWrite, assistantStop, instancesWrite, routesWrite });
|
||||
+ server = await startServer({ board: options.board, port: options.port, bus, reads, preview: options.preview, sso, proof, send, settingsWrite, projectFiles, projectFile, libraryFile, libraryStatus, projectSave, chat, nameWrite, assistantStop, instancesWrite, routesWrite });
|
||||
} catch (err) { sso?.close(); throw err; }
|
||||
let testerServer = null;
|
||||
- if (testerPort !== null) {
|
||||
@@ packages/webui/src/cli.mjs: try {
|
||||
+ testerServer = await startTesterSocket({ dataRoot: system.dataRoot, board: options.board,
|
||||
tester: true, testerNoSignIn: ssoOn, testerProofHeader: proof?.header ?? null, testerAuthHeader: options.preview?.header ?? null, bus: testerBus, reads,
|
||||
projectFiles: args => call('project.files', args), projectFile: args => call('project.file', args),
|
||||
- instancesWrite: args => call('instances.set', args), routesWrite: args => call('routes.set', args), nameWrite: args => call('name.set', args),
|
||||
+ libraryFile: args => call('library.file', args), libraryStatus: args => call('library.status', args),
|
||||
@@ packages/webui/src/cli.mjs: try {
|
||||
const health = sso?.health() ?? {};
|
||||
const ssoLines = sso ? `\nSign-in: ${sso.publicOrigin}/ (--sso), ${send ? 'reads and human writes (--send)' : 'read-only'}` + sso.summary().map(p => `\nSign-in provider: ${p.id} issuer ${p.issuer} subjects ${p.subjects} (${health[p.id]})`).join('') : '';
|
||||
2: 07251d956 = 2: 6c6efc125 gander: record row 196 rebase gate stop and row 252 design
|
||||
3: 9d3ba3f59 = 3: 4519a14b2 gander: classify runtime mutation failures and bound process groups
|
||||
4: 0b3cf2742 = 4: 0ca104acc gander: record r2 stop two timings and approved row 252 notes
|
||||
5: c7e54236e = 5: 84aea3063 gander: pin SSO and tester socket release argument order
|
||||
6: b1076c8b8 = 6: f8a59e6aa gander: guard unique mutation targets and separate SSO ordering mutant
|
||||
@@ -0,0 +1 @@
|
||||
533c50a4efc6e0dc8fa3b6da4b1456029bbda490 0000000000000000000000000000000000000000
|
||||
@@ -0,0 +1 @@
|
||||
533c50a4efc6e0dc8fa3b6da4b1456029bbda490 0000000000000000000000000000000000000000
|
||||
@@ -0,0 +1,372 @@
|
||||
[
|
||||
{
|
||||
"id": "M1",
|
||||
"file": "packages/webui/src/serve.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "if (tester) return bindTesterSocket(server, testerSocket);",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M2",
|
||||
"file": "packages/webui/src/tester-socket.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "chmodSync(temporary, 0o600)",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M3",
|
||||
"file": "packages/webui/src/serve.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "if (tester && (Object.hasOwn(req.headers, 'authorization')",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M4",
|
||||
"file": "packages/bus/src/principal.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "peer.pid !== proof.pid",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M5",
|
||||
"file": "packages/bus/src/peercred.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "finish(false, Object.freeze(p));\n } catch { finish(true); }",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M6",
|
||||
"file": "packages/bus/src/principal.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "peer.uid !== process.getuid()",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M7",
|
||||
"file": "packages/webui/src/tester-socket.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "(dir.mode & 0o077)",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M8",
|
||||
"file": "packages/bus/src/human.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "current.env !== null && MARKERS.some",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M9",
|
||||
"file": "packages/bus/src/human.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "if (again.startTime !== proof.startTime || again.ppid !== p.ppid)",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M10",
|
||||
"file": "packages/bus/src/principal.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "if (parent.uid !== peer.uid || parent.argv[1] !== resolve(paths.console) || parent.argv[2] !== 'serve')",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M11",
|
||||
"file": "packages/bus/src/principal.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "import { resolve }",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "parent.argv[1] !== resolve(paths.console)",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M12",
|
||||
"file": "packages/bus/src/human.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "Object.keys(proof).some((k) => !['pid', 'startTime', 'nonce', 'business'].includes(k))",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M13",
|
||||
"file": "packages/bus/src/server.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "broker.disconnect(boundCap)",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M14",
|
||||
"file": "packages/bus/src/principal.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "verifyHuman(checked, { cliPath: paths[kind], launches, readProcess,\n nonceKey: kind === 'user' ? 'MOSAIC_BUS_USER_NONCE' : 'MOSAIC_BUS_CLI_NONCE' })",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M15",
|
||||
"file": "scripts/stack-release.sh",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "RUN_CONSOLE=(\"${without_tester[@]}\" --tester-socket)",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M16",
|
||||
"file": "scripts/stack-release.sh",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "RUN_CONSOLE=(\"${without_tester[@]}\") DROP_TESTER=\"--tester-socket",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M17",
|
||||
"file": "packages/bus/src/broker.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "if (this.#business(record.business).vars?.['bus.tester'] !== true)",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M18",
|
||||
"file": "packages/bus/src/principal.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "return { kind: 'user', business, id: proof.user }",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M19",
|
||||
"file": "packages/cli/src/tester-http.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "socketPath: testerSocketPath(dataRoot)",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M20",
|
||||
"file": "packages/bus/src/peercred.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "export function createPeerReader",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M21",
|
||||
"file": "packages/bus/src/interpreter.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "s.uid !== 0 || (s.mode & 0o022)",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M22",
|
||||
"file": "packages/bus/src/server.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": " if (kind) {",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M23",
|
||||
"file": "packages/bus/src/interpreter.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "export function recordInterpreterStart(directory, record) {",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M24",
|
||||
"file": "packages/webui/src/tester-socket.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "const temporary = join(parent, '.' + randomBytes(4).toString('hex') + '.s');",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M25",
|
||||
"file": "packages/bus/src/interpreter.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "constants.O_WRONLY | constants.O_APPEND | constants.O_CREAT | constants.O_NOFOLLOW | constants.O_NONBLOCK, 0o600",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M26",
|
||||
"file": "packages/bus/src/peercred.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "if (!s.isFile() || s.isSymbolicLink()) throw Error();",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "catch { throw refused(); }",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M27",
|
||||
"file": "packages/bus/src/peercred.mjs",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": " await Promise.all([...children].map(child => new Promise(resolve => {\n child.once('close', resolve);\n child.kill('SIGKILL');\n })));",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M28",
|
||||
"file": "scripts/stack-release.sh",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "case \"${without_proof[i]}\" in --send | --tester-port | --tester-socket) break",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M28b",
|
||||
"file": "scripts/stack-release.sh",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": "case \"${kept[i]}\" in --send | --tester-port | --tester-socket) break",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
},
|
||||
{
|
||||
"id": "M29",
|
||||
"file": "scripts/stack-release.sh",
|
||||
"targets": [
|
||||
{
|
||||
"method": "replace",
|
||||
"target": " node -e 'const fs=require(\"fs\"),p=require(\"path\"),root=process.argv[1],parent=p.join(root,\"console\");if(!p.isAbsolute(root)||Buffer.byteLength(p.join(parent,\"tester.sock\"))>107)process.exit(1);try{const s=fs.lstatSync(parent);if(!s.isDirectory()||s.isSymbolicLink()||s.uid!==process.getuid()||(s.mode&0o077))process.exit(1);}catch(e){if(e.code!==\"ENOENT\")process.exit(1);}' -- \"$DATA\" || check_refuse tester-socket-path \"private tester path is too long or its parent is unsafe\"\n",
|
||||
"count": 1
|
||||
}
|
||||
],
|
||||
"accepted": true
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"rule": "whole files touched by either side",
|
||||
"row196": [
|
||||
"packages/bus/tests/channel-proof.test.mjs",
|
||||
"packages/bus/tests/interpreter.test.mjs",
|
||||
"packages/bus/tests/peer-transport.test.mjs",
|
||||
"packages/bus/tests/peercred.test.mjs",
|
||||
"packages/bus/tests/principal.test.mjs",
|
||||
"packages/cli/tests/stack-release.test.mjs",
|
||||
"packages/cli/tests/tester-http.test.mjs",
|
||||
"packages/webui/tests/proof-cli.test.mjs",
|
||||
"packages/webui/tests/proof.test.mjs",
|
||||
"packages/webui/tests/service.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"
|
||||
],
|
||||
"row215": [
|
||||
"packages/bus/tests/library.test.mjs",
|
||||
"packages/business/tests/business.test.mjs",
|
||||
"packages/business/tests/cli.test.mjs",
|
||||
"packages/business/tests/instance-settings.test.mjs",
|
||||
"packages/business/tests/library-projects-protected.test.mjs",
|
||||
"packages/business/tests/resolve.test.mjs",
|
||||
"packages/cli/tests/launcher.test.mjs",
|
||||
"packages/cli/tests/stack-release.test.mjs",
|
||||
"packages/cli/tests/trackers-boot.test.mjs",
|
||||
"packages/library/tests/mirror.test.mjs",
|
||||
"packages/project/tests/project.test.mjs",
|
||||
"packages/seat/tests/checkout.test.mjs",
|
||||
"packages/webui/tests/library-cli.test.mjs"
|
||||
],
|
||||
"extraOutsideWholePackageSuites": [
|
||||
"packages/business/tests/business.test.mjs",
|
||||
"packages/business/tests/cli.test.mjs",
|
||||
"packages/business/tests/instance-settings.test.mjs",
|
||||
"packages/business/tests/library-projects-protected.test.mjs",
|
||||
"packages/business/tests/resolve.test.mjs",
|
||||
"packages/library/tests/mirror.test.mjs",
|
||||
"packages/project/tests/project.test.mjs",
|
||||
"packages/seat/tests/checkout.test.mjs"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
# r5 static tester-port caller audit
|
||||
|
||||
Candidate a415de022, parent r4 f8a59e6aa. No tests were run for this audit.
|
||||
Source scope: current scripts/ and packages/, including tests, test helpers and
|
||||
unit generators. Archived v1 and historical agents/ receipts are not installed
|
||||
callers. README descriptions and a retired-flag refusal are listed separately.
|
||||
Search: rg -l -- '--tester-port' scripts packages. Each returned source was read
|
||||
at its call, render, parser or assertion; finding the text alone is not a launch.
|
||||
|
||||
## Scripts and generated units
|
||||
|
||||
| File | How the flag reaches or relates to serve | Disposition |
|
||||
|---|---|---|
|
||||
| scripts/case2-unit.sh | Parses the factory tester-port at 163/193, builds FLAGS at 196, validates it, and renders/checks `cli.mjs serve $FLAGS` at 356. | Real remaining producer. Out of r5 under mos-1198. Follow-up chained after 196 must migrate the installer and its factory fixtures before using it to enable the new tester. |
|
||||
| scripts/case1-accept.sh | Reads the post-`--` serve argv from the saved installer args at 65 and requires numeric tester-port at 88. | Remaining acceptance consumer coupled to the old unit/args contract. Out of r5 under mos-1198; include with case2-unit in that follow-up. It must accept/check the new socket form before that window. |
|
||||
| scripts/webui-service.sh | serve_flags emits a legacy tester-port pair into ExecStart. | Deliberate old-copy support. Install/render with an explicit new target refuses the retired port; --tester-socket support is checked. Default render is text only. Legacy tests do not start the current Console on TCP. |
|
||||
| scripts/stack-release.sh | Builds RUN_CONSOLE with a tester-port only for a legacy target, then hands it to webui-service. | Deliberate migration/rollback compatibility. A marked new target requires explicit socket conversion for inherited TCP; unsupported socket rollback disables tester instead of reopening TCP. Failed activation recovery may restore the old saved security state, as documented. |
|
||||
| scripts/instance.sh | Scans existing ExecStart tokens for tester-port to detect port ownership. | Parser only, not a producer or launch. Keeping it recognizes legacy units during migration and prevents port collisions. |
|
||||
|
||||
## Every test file containing tester-port on r5
|
||||
|
||||
| Test file | Actual behavior and why retained |
|
||||
|---|---|
|
||||
| packages/webui/tests/tester-cli.test.mjs | The only remaining direct call to the real current `CLI serve` with tester-port. Every such call deliberately asserts exit 2 and a retired-flag message. Successful startup cases use tester-socket. Whole file passed on r4. |
|
||||
| packages/webui/tests/service.test.mjs | Calls the service renderer/installer in fake-copy roots. Generated ExecStart lines may carry legacy tester-port; no current Console is launched by these assertions. Exercises legacy propagation, argument refusal and status. Whole file passed on r4. |
|
||||
| packages/cli/tests/stack-release.test.mjs | Activates fixture copies whose stand-in cli source explicitly advertises the legacy flag; fake systemctl never executes a real tester listener. Also tests explicit socket conversion and unsupported rollback. Keep to protect old-copy migration semantics. |
|
||||
| packages/cli/tests/stack-release-external.test.mjs | Passes tester-port to stack-release under external mode and expects usage refusal. Does not call serve or install that flag. Keep the negative external-authority case. |
|
||||
| packages/cli/tests/case2-unit.test.mjs | Renders/checks scratch factory units with tester-port and tests profile/port refusals. Uses fake node/systemctl/copies, not the current Console. Correct for the existing installer contract; not proof that those units can start r5. The chained installer follow-up must migrate these fixtures with case2-unit.sh. |
|
||||
| packages/cli/tests/case1-accept.test.mjs | Supplies legacy post-`--` serve args to the scratch acceptance harness, with fake systemctl/curl/ss/sudo/stat, and checks missing tester-port refusal. No actual current serve startup. Coupled to case1-accept.sh's old acceptance contract; migrate it in the same follow-up. |
|
||||
| packages/cli/tests/case1-hostcheck.test.mjs | Writes textual scratch ExecStart examples containing tester-port for static host checks, including a missing-main-port refusal. Does not execute them. Keep as a legacy-unit/host-check fixture; it grants no claim about private tester startup. |
|
||||
|
||||
Related helper packages/cli/tests/stack-release-fixture.mjs generates old-copy
|
||||
cli source comments advertising tester-port and supplies the fake service
|
||||
processes. It is deliberately legacy and consumed by the release tests, not
|
||||
an independent current Console launch. No test-*.sh contains tester-port.
|
||||
|
||||
## Non-callers and the repaired semantic conflict
|
||||
|
||||
packages/webui/src/cli.mjs contains only the retired-flag refusal, not a tester-port
|
||||
producer. packages/webui/README.md describes retirement/legacy conversion; it
|
||||
passes no argv. library-cli.test.mjs no longer contains tester-port: r5 changes
|
||||
only its activation flag to tester-socket. Its configured dataRoot is under its
|
||||
own tmp(t) root, and startTesterSocket derives console/tester.sock there. Its
|
||||
existing loader still intercepts startServer and captures both callback pairs;
|
||||
no real listener is opened in this callback wiring test. The test name and all
|
||||
assertions remain byte-identical to e54e05463.
|
||||
|
||||
This list is input for Sage's follow-up row chained after 196. r5 intentionally
|
||||
changes no product file. It does not claim the two root installer/acceptance
|
||||
scripts have already migrated to the new transport.
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"base": "e54e05463",
|
||||
"onlyDifference": "'--tester-port', '7444' -> '--tester-socket'",
|
||||
"entireRemainderByteIdentical": true,
|
||||
"baseSha256": "1983912b76f01f8e6d0c564e3bbcd763c0b2c44044988b192ef827446f98556c",
|
||||
"r5Sha256": "f505b5fc635aa699556c237a92401b495943e45e25ebfadab945d64477e3e86e"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
41e3237501720175a38b58d5564776f4aba54cb2 0000000000000000000000000000000000000000
|
||||
@@ -0,0 +1,23 @@
|
||||
diff --git a/agents/gander/work/queue-196/BUILD.md b/agents/gander/work/queue-196/BUILD.md
|
||||
index 77454ecbd..3111f38e7 100644
|
||||
--- a/agents/gander/work/queue-196/BUILD.md
|
||||
+++ b/agents/gander/work/queue-196/BUILD.md
|
||||
@@ -105,3 +105,5 @@ changes are planned before the batch. M1-M29 remain prepared and unexecuted.
|
||||
|
||||
2026-10-21 sage-2072 product test: added the merge-scoped SSO/socket conversion case without --send, asserting pointer argv order, rendered unit argv order, status agreement and no secret-file reads. Removing socket from sso_for_target is its planned RED case (M28b). Focused RED/GREEN remains pending the busy gate: Herb's suite was active at the preflight, so no test started. Runtime code unchanged. Mos mos-1197 owner-subject ruling recorded in queue-252/BUILD-NOTES.md.
|
||||
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.
|
||||
diff --git a/packages/webui/tests/library-cli.test.mjs b/packages/webui/tests/library-cli.test.mjs
|
||||
index a308e4c0d..b9a0fc129 100644
|
||||
--- a/packages/webui/tests/library-cli.test.mjs
|
||||
+++ b/packages/webui/tests/library-cli.test.mjs
|
||||
@@ -22,7 +22,7 @@ test('C2-04 CLI: both listener callback pairs dispatch library verbs with their
|
||||
return next(url,context);
|
||||
}});`);
|
||||
const result = spawnSync(process.execPath, [new URL('../src/cli.mjs', import.meta.url).pathname,
|
||||
- 'serve', '--business', 'acme', '--port', '0', '--tester-port', '7444'],
|
||||
+ 'serve', '--business', 'acme', '--port', '0', '--tester-socket'],
|
||||
{ env: { ...f.env, NODE_OPTIONS: `--import=${hook}` }, encoding: 'utf8', timeout: 10000 });
|
||||
assert.equal(result.status, 0, result.stdout + result.stderr);
|
||||
const calls = readFileSync(log, 'utf8').trim().split('\n').filter(Boolean).map(JSON.parse);
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1 @@
|
||||
118b993f0dff2e91b9a1335082cbf05b6dedf22a 0000000000000000000000000000000000000000
|
||||
@@ -0,0 +1,232 @@
|
||||
[
|
||||
{
|
||||
"path": "packages/cli/tests/case1-accept.test.mjs",
|
||||
"kind": "test; see TESTER-PORT-AUDIT.md for direct/fixture/refusal classification",
|
||||
"lines": [
|
||||
28,
|
||||
477
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "packages/cli/tests/case1-hostcheck.test.mjs",
|
||||
"kind": "test; see TESTER-PORT-AUDIT.md for direct/fixture/refusal classification",
|
||||
"lines": [
|
||||
68,
|
||||
215
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "packages/cli/tests/case2-unit.test.mjs",
|
||||
"kind": "test; see TESTER-PORT-AUDIT.md for direct/fixture/refusal classification",
|
||||
"lines": [
|
||||
80,
|
||||
328,
|
||||
364,
|
||||
365,
|
||||
378,
|
||||
380
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "packages/cli/tests/stack-release-external.test.mjs",
|
||||
"kind": "test; see TESTER-PORT-AUDIT.md for direct/fixture/refusal classification",
|
||||
"lines": [
|
||||
75
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "packages/cli/tests/stack-release-fixture.mjs",
|
||||
"kind": "legacy test helper",
|
||||
"lines": [
|
||||
306
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "packages/cli/tests/stack-release.test.mjs",
|
||||
"kind": "test; see TESTER-PORT-AUDIT.md for direct/fixture/refusal classification",
|
||||
"lines": [
|
||||
681,
|
||||
687,
|
||||
688,
|
||||
690,
|
||||
692,
|
||||
693,
|
||||
694,
|
||||
697,
|
||||
702,
|
||||
705,
|
||||
708,
|
||||
709,
|
||||
714,
|
||||
718,
|
||||
724,
|
||||
731,
|
||||
732,
|
||||
736,
|
||||
738,
|
||||
740,
|
||||
741,
|
||||
746,
|
||||
749,
|
||||
821,
|
||||
827,
|
||||
830,
|
||||
839,
|
||||
843,
|
||||
846,
|
||||
848,
|
||||
850,
|
||||
1056,
|
||||
1057,
|
||||
1058,
|
||||
1129,
|
||||
1132,
|
||||
1135,
|
||||
1137,
|
||||
1138,
|
||||
1141,
|
||||
1162,
|
||||
1351,
|
||||
1352,
|
||||
1367,
|
||||
1468,
|
||||
1480,
|
||||
1481,
|
||||
1483,
|
||||
1486,
|
||||
1563,
|
||||
1564,
|
||||
1584,
|
||||
1594,
|
||||
1682,
|
||||
1810,
|
||||
2197,
|
||||
2201,
|
||||
2216,
|
||||
2279,
|
||||
2289,
|
||||
2291,
|
||||
2318
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/README.md",
|
||||
"kind": "documentation, not a caller",
|
||||
"lines": [
|
||||
128,
|
||||
130,
|
||||
144,
|
||||
176,
|
||||
1001
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/src/cli.mjs",
|
||||
"kind": "retired flag refusal, not a caller",
|
||||
"lines": [
|
||||
30
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/tests/service.test.mjs",
|
||||
"kind": "test; see TESTER-PORT-AUDIT.md for direct/fixture/refusal classification",
|
||||
"lines": [
|
||||
125,
|
||||
127,
|
||||
129,
|
||||
136,
|
||||
150,
|
||||
151,
|
||||
152,
|
||||
153,
|
||||
154,
|
||||
164,
|
||||
172,
|
||||
175,
|
||||
176,
|
||||
178,
|
||||
186,
|
||||
188,
|
||||
189,
|
||||
199,
|
||||
799,
|
||||
813
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "packages/webui/tests/tester-cli.test.mjs",
|
||||
"kind": "test; see TESTER-PORT-AUDIT.md for direct/fixture/refusal classification",
|
||||
"lines": [
|
||||
25
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "scripts/case1-accept.sh",
|
||||
"kind": "script producer or acceptance consumer; see audit",
|
||||
"lines": [
|
||||
65,
|
||||
88
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "scripts/case2-unit.sh",
|
||||
"kind": "script producer or acceptance consumer; see audit",
|
||||
"lines": [
|
||||
25,
|
||||
163,
|
||||
193,
|
||||
194,
|
||||
204
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "scripts/instance.sh",
|
||||
"kind": "existing unit parser, not a caller",
|
||||
"lines": [
|
||||
114,
|
||||
132
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "scripts/stack-release.sh",
|
||||
"kind": "script producer or acceptance consumer; see audit",
|
||||
"lines": [
|
||||
47,
|
||||
63,
|
||||
126,
|
||||
797,
|
||||
800,
|
||||
814,
|
||||
830,
|
||||
832,
|
||||
833,
|
||||
837,
|
||||
878,
|
||||
885,
|
||||
893,
|
||||
897,
|
||||
903,
|
||||
919,
|
||||
1076,
|
||||
1134,
|
||||
1142,
|
||||
2106
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "scripts/webui-service.sh",
|
||||
"kind": "script producer or acceptance consumer; see audit",
|
||||
"lines": [
|
||||
43,
|
||||
74,
|
||||
96,
|
||||
97,
|
||||
137,
|
||||
182,
|
||||
266,
|
||||
462,
|
||||
467,
|
||||
471
|
||||
]
|
||||
}
|
||||
]
|
||||
Reference in new issue
Block a user