Parent #66; related #703/#709/#722. Native macOS repair is implemented and verified in 61670c72b. This issue stays open for native Linux/Windows execution verification.
Root cause: runSpawnSyncCaptured applied the original deadline to pipe draining, then called child.wait(io) without a deadline. An actual child that closes both output streams but remains alive could therefore outlive its original bound. The first fs.closeSync control did not reproduce this because pinned Bun/Home intentionally leave standard descriptors open in that API. The correct control uses Home's real FFI to call libc close; both calls return 0. Before the fix, the 20-second Node deadline was missed and the 30-second supervisor stopped the runner (124). Original first-run evidence is retained in 3f956ba.
Repair: observe exit without reaping (WNOWAIT on Darwin/Linux, stable process-handle observation on Windows); keep the same absolute deadline after EOF; terminate at expiration and preserve final ownership/resource/exit-status cleanup. The companion schema-2 journal now records whether streams reached complete EOF.
Verified: native build 23/23, native corpus harness 12/12, focused child units 2/2, journal units 3/3, validator units 9/9, targeted Pickier. Production libc-FFI early exit succeeds; the hanging closed-pipe child now receives the native timeout at the unchanged 20,000 ms deadline (20.47s observed including startup/cleanup), without the outer supervisor firing. Open-pipe timeout, SIGTERM, interruption, failed-write, mixed-case and invalid-negative regressions pass. Six original files retain 402 passes/1 skip/10 TODOs plus distinct process/empty outcomes, with source/snapshot/executable integrity unchanged. Final evidence. Verified Home fd7c61bf96b18d6954687cd33eb95e429290007f5d199fb985d364e868eb98c4.
The helper also compiles for x86_64-linux-musl and x86_64-windows-gnu with its exported call path instantiated. These are compile checks, not native execution. Run the real lifetime, timeout, capture and ownership controls on native Linux and Windows before closing this cross-platform issue. Full applicable primary/vendor corpus execution remains in #722/#724; overall parity remains incomplete in #66.