diff --git a/agents/gander/work/queue-253/BUILD.md b/agents/gander/work/queue-253/BUILD.md index 2718117f3..78beec7a7 100644 --- a/agents/gander/work/queue-253/BUILD.md +++ b/agents/gander/work/queue-253/BUILD.md @@ -293,3 +293,11 @@ Run started14:59:22Z. Two intendedREDs observed, exact restoration. Touched whol M21 drops only the peer regex end anchor. peer-malformed already writes a valid three-number prefix plus extra text, but the aggregate passingTAP does not expose the returnedreason. No loggedP10line can be quoted fromM21 orM17-base. Static trace shows onlyP10peerprobe executes PYTHON_STUB; configandearlierchecks useNode/shell, while tester_python reads metadata/ELF only. See run3-gate/STATIC-TRACE.md. Mos1293requires a scratch-base diagnostic onSagegap, all17P10lines, then exactdesignreasonassertions. peer-malformed expectsprobe. Unexpecteddesignreason or anyproductchange goes toMosbeforeedits. No diagnostic or repair yet. Newcandidate/manifest/review and entiregatefromstart, no carry. Stop packet committed locally; helperpushwaitsforgap. + +## Fixture-only M21 repair, mos1297, not run + +Diagnostic(a) on0604 observed probe-inner-session for peer-malformed andpeer-error, not their designed probe/probe-inner-command. Mos confirmed instant shell output exits before session verification; product fails closed. Authorized option1 uses the same system Python exec for peer-output bytes/status; no delay and no product change. Sourcecommit362ec674c9e7aa8cef0c26f4d7448f459171dbd4 names1297 andquotesoldline100. + +All17faults now assert exact reason with following space and anchoredP10prefix, from the accepted draft. Every old assertion retained. C4overflow andpeer-hang test bodies are byte-identical; overflow must remain probe-output-limit. Peer-hang looseprefixoutofscope unchanged. STATIC-PRESERVATION.json andREPAIR.diff in repair-1297/. + +Seven-path manifesta2ac57342d9c59ddaebddade0fa475a9568719fed50c132bd7bb141167c7e72e; onlycase1testhashchanges. No repaired-source test/syntax/Node execution. Whole gate from start, no carry, after Duckworth review and SageCLEAR. M21survival orwrongmalformed/errorreason goes toMosbeforeanychange. Product fast-exit issue isVikunja532post10-27; SageownsDEFERREDentry. diff --git a/agents/gander/work/queue-253/CANDIDATE-SHAS.json b/agents/gander/work/queue-253/CANDIDATE-SHAS.json index ae2021d19..c45b51405 100644 --- a/agents/gander/work/queue-253/CANDIDATE-SHAS.json +++ b/agents/gander/work/queue-253/CANDIDATE-SHAS.json @@ -1,7 +1,7 @@ { "docs/plans/DEFERRED.md": "f8ad28aa8dc0f12b2c6dddb3b5dc805da05a97c7723e0525905456c064d0cfa3", "packages/cli/tests/case-sudo-fixture.mjs": "b259b8c7926e49829c8a956674021cb0cc85ddd65aebdc786d05cc08d7790008", - "packages/cli/tests/case1-accept.test.mjs": "6cfd2963303315aa6911c4d4f6d75d3ab87d9fcba8e128b056216e7f85fd8901", + "packages/cli/tests/case1-accept.test.mjs": "27378eb1297dc6115b4b1ce849de6ffdb3adccf5249783106fa0570c9d696e8a", "packages/cli/tests/case2-unit.test.mjs": "1e0696eb196e83a0766b433ef71f27df0a3f8fcb6399787ab8c1c0f05c54dc44", "packages/webui/README.md": "ce9054060867120798c6b26737ac7d910d8cfbc7aa4ad614f4295619c7605e46", "scripts/case1-accept.sh": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd", diff --git a/agents/gander/work/queue-253/MANIFEST.md b/agents/gander/work/queue-253/MANIFEST.md index 1dfbae9c7..c3c7472a0 100644 --- a/agents/gander/work/queue-253/MANIFEST.md +++ b/agents/gander/work/queue-253/MANIFEST.md @@ -19,3 +19,5 @@ Final base under sage-2705: gander/row253-aca1 onaca16404c, sourceed3bb376cdd512 Focused27 under sage-2709 now passed on0604d91fc:604/0/0, no timeouts, no retries, N9 executed and passed (exact line in run3-focused/SUMMARY.json). All7 blobs unchanged;573c51cf remains the review digest. run3-focused/ contains every raw whole-file log/command, HEAD/digest/limits preamble, timings and3x basis. No full gate or mutation-batch result is claimed. Whole gate2737 stopped atM21 survivor after20kills. No final acceptance. run3-gate/STOP-SUMMARY.json andSTATIC-TRACE.md preserve the stop. Mos1293requires diagnostic thennewcandidate/review/fullgatefromstart. Current7sourceblobs remain573c51cf; no test/product repair made. + +Mos1297 supersedes573c51cf after one fixture-only repair and17exactreasonassertions: source362ec674c9e7aa8cef0c26f4d7448f459171dbd4, digesta2ac57342d9c59ddaebddade0fa475a9568719fed50c132bd7bb141167c7e72e. Onlycase1testchanges. repair-1297/ is the new review packet. Tests unrun; Duckworthreview and fullfreshgatepending. diff --git a/agents/gander/work/queue-253/MANIFEST.sha256 b/agents/gander/work/queue-253/MANIFEST.sha256 index df0aa3d54..b8de1fdc6 100644 --- a/agents/gander/work/queue-253/MANIFEST.sha256 +++ b/agents/gander/work/queue-253/MANIFEST.sha256 @@ -1,6 +1,6 @@ f8ad28aa8dc0f12b2c6dddb3b5dc805da05a97c7723e0525905456c064d0cfa3 docs/plans/DEFERRED.md b259b8c7926e49829c8a956674021cb0cc85ddd65aebdc786d05cc08d7790008 packages/cli/tests/case-sudo-fixture.mjs -6cfd2963303315aa6911c4d4f6d75d3ab87d9fcba8e128b056216e7f85fd8901 packages/cli/tests/case1-accept.test.mjs +27378eb1297dc6115b4b1ce849de6ffdb3adccf5249783106fa0570c9d696e8a packages/cli/tests/case1-accept.test.mjs 1e0696eb196e83a0766b433ef71f27df0a3f8fcb6399787ab8c1c0f05c54dc44 packages/cli/tests/case2-unit.test.mjs ce9054060867120798c6b26737ac7d910d8cfbc7aa4ad614f4295619c7605e46 packages/webui/README.md c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd scripts/case1-accept.sh diff --git a/agents/gander/work/queue-253/repair-1297/COMMIT-MESSAGE.txt b/agents/gander/work/queue-253/repair-1297/COMMIT-MESSAGE.txt new file mode 100644 index 000000000..f8a0098eb --- /dev/null +++ b/agents/gander/work/queue-253/repair-1297/COMMIT-MESSAGE.txt @@ -0,0 +1,13 @@ +test(row253): expose peer failures and pin reasons (mos-1297) + +The peer-output fixture execs isolated system Python to write its exact bytes +and exit with peer-status. This avoids masking parser/status faults behind the +supervisor session check. All17 faults assert an exact reason with a delimiter; +every existing assertion remains. No product change or timing delay. + +Old packages/cli/tests/case1-accept.test.mjs:100: +const PYTHON_STUB = `[ -f "$HC/peer-output" ] && { cat "$HC/peer-output"; exit "$(cat "$HC/peer-status")"; } + +Diagnostic under sage-2752 found probe-inner-session for malformed output and +nonzero exit. Mos confirmed the fixture mask and authorized this repair. +No tests ran after the repair; Duckworth review and fresh whole gate follow. diff --git a/agents/gander/work/queue-253/repair-1297/NOTES.md b/agents/gander/work/queue-253/repair-1297/NOTES.md new file mode 100644 index 000000000..dd825c6d7 --- /dev/null +++ b/agents/gander/work/queue-253/repair-1297/NOTES.md @@ -0,0 +1,11 @@ +# Row253 mos1297 repair candidate + +Source 362ec674c9e7aa8cef0c26f4d7448f459171dbd4, baseaca16404c. Manifest a2ac57342d9c59ddaebddade0fa475a9568719fed50c132bd7bb141167c7e72e. Only case1-accept.test.mjs changes among the seven entries. No product script, shared fixture, other test or policy change. Source commit names mos1297 and quotes the exact old first line of PYTHON_STUB at0604:100. + +One stub-line change only: when peer-output exists, exec /usr/bin/python3 -I -S, write that file's exact bytes to stdout and exit with peer-status. No fixed delay. All other stub lines remain byte-identical. The healthy Python path remains unchanged. This removes the confirmed instant-shell-exit mask while retaining the fixture's intended output/status fault. + +Add a17-entry expected-reason map, taken from the accepted diagnostic-a/EXPECTED-REASONS draft, and one exact reason assertion per iteration. The new regex anchors the P10 line and requires the following space, so reason=probe does not accept probe-* codes. Every original status, boundary=failed and no-boundary=observed assertion line remains. peer-malformed=probe; peer-error=probe-inner-command. STATIC-PRESERVATION.json checks all old assertion lines remain and that the overflow/peer-hang bodies are byte-identical. No change to the peer-hang loose prefix. No result is claimed for the new code. + +The original single diagnostic remains in diagnostic-a/. It observed15matches and2probe-inner-session mismatches on0604. Mos confirmed the source of that mask with their own no-Node supervisor controls, and authorized this fixture-only repair. Real fast-exit product behavior is post10-27 Vikunja532, with Sage owning its DEFERRED entry; no product repair or DEFERRED edit here. + +Next: new manifest to Duckworth, then a complete whole gate from the start under Sage CLEAR, no carry from any old run. Both17-fault reasons must match the drafted oracle. The C4 overflow test must still give reason=probe-output-limit. The named P10 test must killM21 on assertions. If M21 survives or either reason differs, stop to Mos before anything else changes. All other existing gates/limits and exact restores stand. No Node, syntax test, payload experiment or repaired test run occurred after the change. diff --git a/agents/gander/work/queue-253/repair-1297/REPAIR.diff b/agents/gander/work/queue-253/repair-1297/REPAIR.diff new file mode 100644 index 000000000..7951df468 --- /dev/null +++ b/agents/gander/work/queue-253/repair-1297/REPAIR.diff @@ -0,0 +1,45 @@ +diff --git a/packages/cli/tests/case1-accept.test.mjs b/packages/cli/tests/case1-accept.test.mjs +index 5baddb646..b2673c325 100644 +--- a/packages/cli/tests/case1-accept.test.mjs ++++ b/packages/cli/tests/case1-accept.test.mjs +@@ -97,7 +97,7 @@ const NODE_STUB = `[ "$HOME" = "$ROOT_DIR/srv/mosaic" ] || touch "$HC/node-as-ro + [ "\${1:-}" = --version ] && { cat "$HC/node-version"; exit 0; } + exec "$REAL_NODE" "$@"`; + // The real Python payload runs against a mock socket object, never an OS listener. +-const PYTHON_STUB = `[ -f "$HC/peer-output" ] && { cat "$HC/peer-output"; exit "$(cat "$HC/peer-status")"; } ++const PYTHON_STUB = `[ -f "$HC/peer-output" ] && exec /usr/bin/python3 -I -S -c 'import os,sys; root=os.environ["HC"]; sys.stdout.buffer.write(open(root+"/peer-output","rb").read()); sys.exit(int(open(root+"/peer-status").read()))' + [ -f "$HC/peer-hang" ] && { + here="$BASHPID"; read -r sid < <(/bin/ps -o sid= -p "$here") + echo "$here" > "$HC/peer-pid"; printf '%s %s\\n' "$here" "$sid" >> "$HC/query-pids" +@@ -260,11 +260,31 @@ test('row253 P10 refuses unsafe metadata, wrong peers and an unsafe Python witho + 'changed-pid':h=>put(join(h.hc,'peer-pid-change'),'ActiveState=active\nUser=mosaic\nMainPID=201\n'), + floor:h=>put(join(h.root,'proc/sys/net/ipv4/ip_unprivileged_port_start'),'700\n'), + }; ++ const reasons = { ++ "parent-mode": "metadata", ++ "parent-owner": "metadata", ++ "socket-mode": "metadata", ++ "socket-owner": "metadata", ++ "socket-type": "metadata", ++ "symlink": "metadata", ++ "peer": "peer", ++ "peer-pid": "peer", ++ "python-mode": "interpreter", ++ "python-missing": "interpreter", ++ "python-not-elf": "interpreter", ++ "peer-malformed": "probe", ++ "peer-error": "probe-inner-command", ++ "peer-uid-fields": "metadata", ++ "changed-inode": "changed", ++ "changed-pid": "changed", ++ "floor": "floor", ++ }; + for(const [name,fault] of Object.entries(faults)){ + const h=host(t);fault(h);const r=run(h); + assert.equal(r.status,name==='peer-uid-fields'?1:0,`${name}: ${r.out}${r.err}`); + assert.match(r.out,/P10 tester-socket-squat unnamed boundary=failed/,name); + assert.doesNotMatch(r.out,/boundary=observed/,name); ++ assert.match(r.out,new RegExp('^P10 tester-socket-squat unnamed boundary=failed reason='+reasons[name]+' ', 'm'),name); + } + }); + diff --git a/agents/gander/work/queue-253/repair-1297/SOURCE.json b/agents/gander/work/queue-253/repair-1297/SOURCE.json new file mode 100644 index 000000000..ee854cd32 --- /dev/null +++ b/agents/gander/work/queue-253/repair-1297/SOURCE.json @@ -0,0 +1,22 @@ +{ + "authority": "mos-1297", + "source_commit": "362ec674c9e7aa8cef0c26f4d7448f459171dbd4", + "base": "aca16404cf522b03f39acaf140e4f6185a507b88", + "previous_product": "0604d91fcfc1949810cd5321aea6ec43e9b74b4b", + "previous_manifest": "573c51cf72f2398532a6ea768536f04e3c1681997cb8b9a6f14a8aef884870ae", + "manifest": "a2ac57342d9c59ddaebddade0fa475a9568719fed50c132bd7bb141167c7e72e", + "changed_manifest_paths": [ + "packages/cli/tests/case1-accept.test.mjs" + ], + "hashes": { + "docs/plans/DEFERRED.md": "f8ad28aa8dc0f12b2c6dddb3b5dc805da05a97c7723e0525905456c064d0cfa3", + "packages/cli/tests/case-sudo-fixture.mjs": "b259b8c7926e49829c8a956674021cb0cc85ddd65aebdc786d05cc08d7790008", + "packages/cli/tests/case1-accept.test.mjs": "27378eb1297dc6115b4b1ce849de6ffdb3adccf5249783106fa0570c9d696e8a", + "packages/cli/tests/case2-unit.test.mjs": "1e0696eb196e83a0766b433ef71f27df0a3f8fcb6399787ab8c1c0f05c54dc44", + "packages/webui/README.md": "ce9054060867120798c6b26737ac7d910d8cfbc7aa4ad614f4295619c7605e46", + "scripts/case1-accept.sh": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd", + "scripts/case2-unit.sh": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b" + }, + "tests_run": false, + "gate": "Entire whole gate from start, no carry. M21 must be assertion-killed by named P10 test; malformed/error reasons must match draft or stop to Mos before any further change." +} diff --git a/agents/gander/work/queue-253/repair-1297/STATIC-PRESERVATION.json b/agents/gander/work/queue-253/repair-1297/STATIC-PRESERVATION.json new file mode 100644 index 000000000..beea155bb --- /dev/null +++ b/agents/gander/work/queue-253/repair-1297/STATIC-PRESERVATION.json @@ -0,0 +1,14 @@ +{ + "authority": "mos-1297", + "changed_test": "packages/cli/tests/case1-accept.test.mjs", + "old_assertion_lines": 121, + "all_old_assertions_preserved": true, + "new_assertions": [ + " assert.match(r.out,new RegExp('^P10 tester-socket-squat unnamed boundary=failed reason='+reasons[name]+' ', 'm'),name);" + ], + "stub_first_line_only": true, + "overflow_tests_byte_identical": true, + "peer_hang_test_byte_identical": true, + "expected_reason_count": 17, + "tests_run": false +}