Mad Bomber WinMM full-module native qualification, 2026-10-24

PASS: MADBOMBER-WINMM-ERROR-TEXT-20261019 exact historical-source full-module public API gate. The unchanged native fixture exited 0 on the normal production module. This qualifies source b41a7c5f4b752d1f0bdab1141a11d4fed4dc6f9a including accepted implementation 7fd352855; it does not qualify the current-main full module or original Mad Bomber SDL/gameplay, which remains open.

Exact inputs and provenance

Actual execution and oracle

Node v24.18.1, fixed shared WebAssembly.Memory initial=maximum=8192 pages (512 MiB), heap ceiling 512 MiB. Native run freshly admitted with MemAvailable 2981269504 bytes, minimum 2,684,354,560. Native terminal exit 0 in 0.125s, no stderr, no supervisor limit, process group empty/reaped. Peak child RSS 76705792 bytes reflects lazy physical commitment, not a reduced arena. Node's installed V8 options do not expose experimental-wasm-threads; that switch was omitted to preserve shared-memory support. This fixture uses no worker runner or --no-threads option.

The unchanged fixture loads a deterministic PE, calls public LoadLibraryA(winmm.dll) and GetProcAddress, asserts nonzero distinct A/W callable addresses, and executes those addresses through the actual x86 VM. It does not print the numeric thunk addresses. No private handler invocation substitutes for public resolution.

Reproduction

Recover the 40 pinned paths from historical Git commit b41a7c5f4b752d1f0bdab1141a11d4fed4dc6f9a using source-binding.json; retain that relative directory structure. Recover the sealed normal binary using the preserved build recipe/receipts above, verifying its exact hash before execution. prepare.py documents the explicit require closure and pin verification; no build was run for this task. Execute sequentially from that historical input root:

node --max-old-space-size=256 test/test-wave-error-text.js
node --max-old-space-size=256 test/test-wave-error-text-native.js --wasm=/home/user/wine-assembly-shadow-man-span-static-canonical-oct23/build/wine-assembly.wasm --sha256=0000000000000000000000000000000000000000000000000000000000000000
node --max-old-space-size=512 test/test-wave-error-text-native.js --wasm=/home/user/wine-assembly-shadow-man-span-static-canonical-oct23/build/wine-assembly.wasm --sha256=8fac39936b6df2418ad86cab118cef19a65a727f649fbc14c412b37818904686

Use the retained run.py supervisor for admission, CPU/wall bounds (60s lightweight, 90s native), capped raw logs, process groups, TERM then KILL and subreaper cleanup. Expected exits are 0, 1, 0. Raw stdout/stderr and exact argv/terminal receipts are adjacent. No VM setup occurs for the wrong-hash case.

Historical scope versus main

The following historical inputs differ from reconciled main. No current-main host files were substituted:

Optional external renderer/native-package requires are inventoried in the binding; they were neither installed nor reached by these audio-error-text tests. Unrelated missing module imports retain the unchanged fixture's throwing guard.

Resources, bookkeeping and cleanup

60 MiB projected task peak within 64 MiB allocation, including 8 MiB reserve, 12 MiB transport and 20 MiB external launcher/session/SQLite/future allowance. resource-final.json records measured accounting and host floor. Per-file ceiling 24 MiB; internal cumulative capture budget 1 MiB. Preparation corrected a sparse-missing test path by reading its historical blob and a require resolver suffix (.generated → .generated.js); neither fixture nor production code changed. Initial command capture remains in the retained session history and is conservatively charged in the ledger. Actual historical dependency files and all build-source pins reverified after execution.

No integration into main in this assignment. No assigned box: ID/state/expiry N/A, lifecycle coordinator. All test processes reaped; messageboard watcher terminated before handoff. Historical donor module and root tracked files/index/refs remain untouched. Recovery inputs/receipts remain under /tmp/madbomber-winmm-retained-native-oct24; tracked evidence is sealed below.