Combined IW native validation — 2026-10-15

Attempt 2 passed all eight native arms on the unchanged full-build module 04ede recorded below. Attempt 1 and its fixture failure remain retained. This validates the integrated scalar-send and scoped lifecycle conformance; it does not establish original IW playability or pointer marshalling.

Source 7405b3f4803855e6d2e25506c74afab0d2184af9, dedicated remote checkout /home/user/wa-iw-combined-native, sole bx_9ef2wdsw lane under root grant. Independent preflight 16:11:38.210Z verified 5036 source blobs, 43 dependency files, idle runtime and preserved 937/a948 modules. TTL was extended and verified to 17:10:41.792Z; remote free space was 39 GB.

The normal full build passed all gates in 19074 ms and produced 1803941 bytes: 04ede400070b3acbdcc2ad5f3c033bcf051e3d2da9a4d28a449324d23ab0ba17. The first native arm, cross-process-wat, exited 1 after 138 ms:

Error: Callback wait reservation fences export set_last_error
    at WorkerLink._onMessage (.../lib/guest-thread-host.js:322:41)

The controller stopped immediately. None of the other seven native arms ran. Its summary is failed. The original detach wrapper PID 233894 exited 0 because setsid forked; this was only launcher success. Actual outer timeout PID 233898 and controller PID 233899 terminated. Use setsid --wait timeout ... for the next launch so its wrapper retains the actual terminal status.

Independent postflight at 16:13:02.766Z passed: no live runtime processes, all source/dependency/donor files and both preserved modules unchanged. The lane was released to root. No original game, browser, main merge or deployment.

Recovered archive: scratch/runs/20261015-iw-combined-native/attempt1.tar.gz (2715120 bytes), SHA-256 55378b4635c9bf3dd1b9910dd223e304477f9b858141a13bd9eb32098340980a. The archived summary and postflight were inspected after recovery. Remote complete evidence remains /home/user/iw-combined-evidence-1; the built module remains in the dedicated checkout.

Source diagnosis: the test intentionally traps a guest callback using the public resolveThreadSend driver, correctly leaving the sender at yield10 with its root reservation intact. It then directly calls private _resolveProcessSend without a waitToken for a missing window. That unowned helper path attempts set_last_error, and the production reservation fence correctly rejects it. Both production root and nested drivers supply the owned token and return the error through atomic completion; the fence must not be relaxed.

The fixture repair moves missing-target and unsupported-route assertions before the terminal intentional fault. It loses the target after actual WAT parks the sender, uses public resolveThreadSend, and checks result 0, last-error 1400, ESP/EIP restoration, cleared yield, and an unfenced ordinary setter. The terminal fault still rejects, leaves yield10, and explicitly proves set_last_error remains fenced. Production code is unchanged.

Local repair checks: JavaScript syntax/whitespace and the full tiny-module actual Worker admission suite pass, including owned receiver-gone completion with last-error 1400. The repaired full-module fixture has not run.

A prepared native-only controller mode accepts a pinned existing build receipt and verifies its exact module bytes/size and unchanged original dependency inventory. It permits only the named fixture/controller/report changes from the original build commit; every production/compiler/WAT/region-map change is rejected. This avoids rebuilding the unchanged production module. A separately reviewed immutable commit and renewed root runtime grant are required.

Attempt 2: reviewed fixture repair, same built module

Root granted the native-only retry at source 6c22121e56a0b60163b86969bda2a95f6a4098ad. The prior build receipt hash was 5054bc64b8e41601f93d167dbda61e92fb2e97dcdc24bba93413e2642abf3a7c. The controller verified that only the four reviewed fixture/controller/docs paths differed from the build commit, with all production/compiler/WAT/region map inputs unchanged. It reused the exact 04ede module without rebuilding.

Independent preflight at 16:18:31.246Z verified 5037 source blobs, the same 43 dependency files, idle runtime and preserved inputs. PID 237863, launched with setsid --wait and the unchanged 1500-second outer bound, exited 0 at 16:18:47.779Z. All arms reached their expected final log messages:

Native arm Exit Elapsed ms
Actual WAT cross-process send and error continuation 0 127
Scoped DLL lifecycle 0 62
Local/Worker and Worker/Worker scoped endpoints 0 237
Owner retirement, timeout and pin retention 0 790
Independent send admission 0 257
Deferred and active receiver retirement 0 707
Current-broker receiver-subscription negative control 1, expected 1827
Restored receiver suite 0 706

The negative control failed specifically with RECEIVER_RETIREMENT_DID_NOT_SETTLE. Its broker was an evidence-only copy; production source and module never changed. The positive/restored suites completed all deferred and active stop/raw exit/raw error controls. The WAT route now completes the missing-window error through its owned root reservation, and the terminal guest fault retains the mutating-export fence as asserted.

Independent postflight at 16:18:59.497Z verified idle runtime, all source, dependency and donor files, prior receipt and immutable-input records, and unchanged 937/a948/04ede module hashes. The lane was released to root.

Recovered and inspected archive: scratch/runs/20261015-iw-combined-native/attempt2.tar.gz (5785532 bytes), SHA-256 77693fdebd3bf5a173b6d270df31fad871d53365fced128f9591ced6a9363c0e. Remote complete evidence remains /home/user/iw-combined-evidence-2. No original IW, browser or deployment was performed by this validation. The separate CLI cooperative FreeLibraryAndExitThread repair was not incorporated into this source/module and needs its own evidence.

Root subsequently integrated 898bf1d50, 7405b3f48 and 6c22121e5 onto current main and pushed merge receipt 3fdb29373325607fc2780a5d64832e5b3dd4ac08. Root independently verified production src/lib/host/index and the runtime test matched the tested source, and broker/wait-reservation/crash tests passed. This receipt does not broaden the original-game or pointer-marshalling scope.