Maelstrom frozen select record adapter
Candidate based on accepted main 606caff1de558f185487aed5e31ede159262ba7e
(tree fa0cf92625c22dc90e3effbb0a32f3759c3c79bd). This is a host adapter,
not a new native qualification or original-game capture.
tools/maelstrom-select-frozen-record.cjs binds
createOracle(actualInstance, actualInstance.exports) and takes captures only
with snapshot(actualInstance.exports). Start once before supported original
execution. At ordinary successful run returns, observe(batch) ignores
authentic idle/unchanged polls and submits changed attempts to the unchanged
oracle. An unseen park followed by another attempt still rejects as a counter
gap. No completion is inferred from live EAX, ESP, EIP or fdsets.
The first accepted completion is deeply frozen and persisted once. Its
historicalCompletion contains only the trusted result, attempt and latched
identity. liveHostObservation separately labels later state with the host
observation batch and wall-clock milliseconds. The model regression shows
result 7 and post-ESP 4120 retained while live EAX/ESP/EIP become
39321/34952/30583 and live fdsets become [9,8,7]. Neither completion-time fdsets
nor completion-time EIP are available from this latch. The runner adapter
reports only later live EAX/ESP/EIP; it does not invent fdset evidence.
The accepted hook is byte-identical, SHA-256
b7c77c20b12cd582d6fcfbe246e1f0abdcb644266fc3f161bf5d683d93b13930.
Its storage() generates msc_end, which copies EAX after the real select
result store and records invocation-owned metadata. msc_arm and msc_enter
return before writes once completion is set. Those source freeze guards and
the post-store placement are checked structurally against the exact pinned
canonical sources, with a rejecting removed-guard control. The source
evaluator also exercises a later call after completion with changed ownership
and registers. These checks are model/source evidence, not native evidence.
Reproduce the cheap checks
From this candidate checkout, with the retained readonly inputs:
node --max-old-space-size=256 test/test-maelstrom-select-frozen-record.cjs \
/home/user/wine-assembly-shadow-man-span-static-canonical-oct23 \
/tmp/maelstrom-head-yield-observer-oct24/ops/run.js
node --max-old-space-size=256 test/test-maelstrom-select-completion-hook.cjs \
/home/user/wine-assembly-shadow-man-span-static-canonical-oct23
node --max-old-space-size=256 test/test-maelstrom-select-hook-repair.cjs \
/home/user/wine-assembly-shadow-man-span-static-canonical-oct23
Actual bounded invocations, output and exit statuses are committed in
test/fixtures/maelstrom-select-frozen-record-20261024/. They use a 60-second
CPU/wall guard, 256 MiB Node heap and bounded output. The adapter suite passes
12 groups; the unchanged hook suites pass 11 and 16 groups. The adapter suite
runs its same positive regression against two rejecting baselines: substitute
live EAX for the result (--baseline-live-result, 39321 != 7), and demand a
completion-time live-state fence (--baseline-live-fence). Each baseline must
exit 1. Neither changes the accepted hook, source or module.
The first adapter test invocation failed because its setup fixture had already leased the same model through another adapter. The fixture was corrected to use a fresh model for the real transformed setup. The original failed receipt and subsequent passing receipts are retained. No acceptance rule was relaxed.
Intended future original execution (not performed)
tools/maelstrom-select-frozen-runner.cjs checks the entire original runner
SHA-256 4d7b9587676db38fcf3314807acb2b2a42b5f09d2c98fcf3dccb8a6cde9e1809
and four unique anchors before producing any output. Generate into a new file:
node --max-old-space-size=256 tools/maelstrom-select-frozen-runner.cjs \
/tmp/maelstrom-head-yield-observer-oct24/ops/run.js NEW_RUNNER
For a future coordinator-assigned execution, place that generated runner at
the ordinary test/run.js location in a recovered runner closure with these
two new tools and the unchanged hook available under tools/. Add only
--maelstrom-select-frozen-record=NEW_HOST_JSONL to the otherwise accepted
original-run argv. The transform starts immediately after the actual
WebAssembly.instantiate(wasmModule, imports) and before PE/DLL startup;
the pinned runner calls stageAndLoadPe and callDllMain later. It observes
after each of the three explicit main-instance run(BATCH_SIZE) sites.
It does not instrument nested DLL-loader calls or worker instances. Attempts
lost during those executions remain subject to the unchanged counter-gap
rejection. No successful select arrival or capture is promised.
The transform retains the main suspension condition and interleaved swallow versus break catch bodies. Diagnostic start/capture/persistence failures close the adapter and print a diagnostic; they do not enter guest exception handling or stop guest execution. A throwing guest run is not a safe-return observation. Repeated starts and a second adapter for the same instance/export source reject. No option means no adapter require, export reads, start, clock reads or sink IO.
The tests parse the full transformed real runner without executing it, evaluate its extracted setup/run/catch fragments with host fakes, and reverse the four edits to recover the byte-exact original. This proves preserved untouched startup, input, pacing and budget source; it is not a runtime equivalence claim. There is no change to batch size, clocks, yields, budgets, scheduling inputs, production WAT, hook or oracle, and no synthetic select in the runner.
Future execution must reuse the unchanged accepted diagnostic module
select-hook.wasm, SHA-256
ed9d74e5ab4c8bf03bb9f94a56ec41e6e28d9abfa282a20c6654e35e9d177ea7,
and scheduler SHA-256
f0a2f006b0eb992bcdb904f10128167b06bfe143ac05661b82f9586d9755bf40.
The previous filename-bearing tree-mount argv receipt is retained unchanged,
including all 48 files and its comma-bearing filename; no mount or guest was
executed here. A future runtime assignment still needs its own admission and
lifecycle schedule. No box was assigned or accessed in this task.
Native/compiler/guest/box/download/deploy/main-merge counts are all zero. Original arrival, park/completion, fdsets/timeval, route/thread state, gameplay, observer overhead and runtime behavior remain unknown. The earlier no-fence finding remains valid; this adapter consumes a historical immutable record and does not retroactively qualify completion-time live-state inspection.