Scope
Fix the native shell ls -R lifecycle crash exposed by Bun's unchanged fd-leak stress matrix. The generated child completes repeated shell work but exits with status 139 in fdleak_ls.
Evidence
Validated against Bun checkout 4982b91e3702094330f3be3883354c52b8c01323 with Home invoked through the same absolute-executable contract used by bunExe():
HOME_NATIVE_VM=1 HOME_CORPUS_FULL_VM=1 /Users/chris/Code/Home/lang-bun-port/zig-out/bin/home test packages/runtime/test/test/js/bun/shell/leak.test.tsResult: 41 pass and 1 fail. The sole failing test is fd leak > fdleak_ls; its child exits 139 after the recursive-listing stress loop. All memory-leak cases, other fd-leak cases, issue #11816 checks, and never-run interpreter lifecycle checks pass unchanged.
The earlier 4-pass/38-fail observation used a relative ./zig-out/bin/home invocation. Bun and Home both preserve the original invocation string in process.argv0; changing cwd therefore made that ad hoc command unspawnable. That was a probe setup error, not a runtime parity gap.
Acceptance criteria
- Identify and fix the native lifetime or ownership fault behind the
fdleak_lschild exit 139. - Pass all 42 unchanged upstream cases with their original iteration counts, heap checks, fd thresholds, and deadlines.
- Do not rewrite the fixture, force a repository cwd, skip the case, reduce the 500-iteration
ls -Rworkload, or mask the signal.