Maelstrom boundary halt-cause repair, 2026-10-24
Repairs candidate 73cdec846a1153651d7c28b9fd33937166bcdfea, independently rejected by review 839d5b5a0e9801917d16170ad32620ab4ab49506. Historical src/13-exports.wat checks WATCHPOINT before EIP breakpoint and both branches set last_run_halt=5. EIP equality alone cannot distinguish these causes.
The enabled adapter now passes the actual runner's watchAddr into its diagnostic initialization and rejects any nonzero watchpoint configuration before entering the batch loop. This includes deferred and JS-only watch configurations. The rejection says MAELSTROM_BOUNDARY_AUDIT: watchpoint configuration conflicts with halt-5 EIP-breakpoint attribution. It performs no breakpoint arming, main.run, diagnostic memory snapshot, halt labeling or target-observed conclusion. Existing watchpoint setup can precede initialization; the adapter never clears or silently disables it. Without a configured watchpoint, the source-supported EIP-breakpoint label remains valid. No distinct numeric halt code is invented.
Disabled transformation remains byte-identical to the pinned historical runner. Tests execute its actual watch setup and transformed init/arm/main-run/render/scheduler/finish fragments with controlled exports. They check the real-breakpoint positive, wrong-halt negative, target and non-target watchpoint rejection, deferred-watch and JS-only rejection, and disabled watchpoint preservation. Removing the new guard from the actual transformed source fails the conflict oracle. All original seven rejecting mutations, ten missing/duplicate anchor checks, seven missing export checks and finite 10,000-batch no-hit assertions pass. Existing host call order, input/pacing fragments, batch size 1000 and finite maximum behavior are preserved. No guest, WASM/native instantiation or build was executed.
Exact historical runner revision: d8cd8c54c8d63c107696f1e4ef7a1e229dcadc1e; full runner SHA-256 4d7b9587676db38fcf3314807acb2b2a42b5f09d2c98fcf3dccb8a6cde9e1809; exports SHA-256 739397dc54a77e93b367334fd4ca96c921180f57a7558913a3301f1de4520b86. Both complete decompressed inputs match that donor Git revision byte for byte. The 25 primary and 23 recovery seals were reverified; nine prior controls are reused from unchanged receipts.
Evidence is in the adjacent repair directory. identity.json binds original and repaired source hashes and the independent reproducer. The two source diffs compare against the candidate. repaired-test-final.json records the exact command, fresh memory measurement, exit 0, wall/CPU time and output size; its .stdout contains the detailed acceptance result.
The unchanged independent reproducer was run with --acceptance-oracle against both versions. Baseline exits 1 at the intended false watchpoint classification assertion after reproducing the defect and passing positive/wrong-halt controls (baseline-oracle.*). Candidate exits 1 at the reproducer's hardcoded old-adapter SHA assertion (candidate-unchanged-oracle.*), before fragment execution. That unchanged oracle has not accepted the repair. The separate revised integration test explicitly proves rejection BEFORE main.run, with no reads or diagnostic rows; its reverting mutation demonstrates that this acceptance assertion detects the original defect. The independent assertion was neither weakened nor edited. An initial command used a nonexistent reproducer path (baseline-reproducer.*); a first test revision lacked the JS-only readGuestSized mock (repaired-test.*). Both failures are retained, followed by corrected passing execution.
This branch includes the candidate's unchanged supporting evidence and pinned compressed inputs because current main f879fd0cd81d918ea54a18b1b222fae25dd6d618 does not contain that candidate. Only its adapter/test are repaired, plus this report and evidence. The base tier helper remains unchanged. No main integration is authorized. Independent acceptance belongs to the coordinator.
Admission/configuration receipts and full external session/events/history accounting are retained under /tmp/maelstrom-boundary-halt-cause-repair-oct24; source, Git, evidence, temporary files, future growth and an 8 MiB reserve are charged within 64 MiB, with per-file 24 MiB and host free floor 2,982,150,144 bytes. Node uses a 256 MiB heap with 60-second CPU/wall limits and fresh MemAvailable checks. Mount argv is empty: this offline task performs no mount or guest operation. Standing tools and donors are read-only. Publication, resource and cleanup receipts are in that task directory; ops/result.json is written last.
Runtime reachability remains UNPROVEN. The cause of historical zero records remains UNKNOWN. No native errno, caller branch, networking fix, gameplay result or runtime qualification is inferred. No box was assigned; box ID/state/expiry are N/A and lifecycle ownership remains with the coordinator.