## Legacy-psyche LEAK rider — demonstrated fixture mechanism, not #309 attribution Fixture-only commit: [`84e359aa52900256fc860e71052252255b22054e`](https://github.com/BigscreenVR/spt-bs-core/commit/84e359aa52900256fc860e71052252255b22054e), pushed on `test/309-legacy-psyche-leak`, parent `eed9ff361bd094eb9bf7eee4d8acc71b2de8d74b`. Two files: the existing unit fixture in `crates/spt-daemon/src/livehost.rs` and an IR-108 amendment in `docs/INFRA-REGISTER.md`. Ready as a separate fixture rider; no edits to PR #229's branch. ### Mechanism The old Windows fixture spawned `cmd /C "ping -n 30 127.0.0.1 >NUL & rem "`, but killed/waited only the shell. A bounded native-contained probe observed `PING.EXE` PID 49596, birth 1789542539.8991983, still alive after its root cmd had exited. Both captured stdout and stderr lacked EOF. A suspended cmd already exposed the marker in its cmdline, yet spawned no descendant and left prompt EOF when killed. Thus the fixture's cmdline-readiness check can finish before execution; admitting the sleeper before cleanup changes the leak outcome. This supplies a scheduling-sensitive mechanism, not the exact process/schedule of the historical 128-cell LEAK. The reported remedy/baseline runs remain established observations; **the historical LEAK is not attributed to the #309 liveness change**. No blind 128-cell rerolls were performed. ### Hardening Use a shell builtin blocked on owned piped stdin: Windows `cmd /D /Q /C "set /p hold= & rem "`; Unix `sh -c "read -r hold; : "`. Both preserve the shared executable basename and distinct argv markers without spawning an external sleeper. Immediately RAII-own each Child; kill/wait on normal exit and setup/assertion unwind. Keep stdout/stderr inherited so a future leak is observable. Product classifier, existing verdict assertions, nextest settings and leak timeout are unchanged. ### Executed checks Windows cargo-nextest 0.9.137, exact existing cell `livehost::tests::legacy_psyche_sweep_guard_is_id_specific_and_fail_safe`: | Arm | Observation | |---|---| | Old fixture + temporary 1-second delay after both spawns | 1 passed **(1 leaky)**; nextest exit 0 | | Hardened fixture + identical delay | 1 passed, **no LEAK**; exit 0 | | Hardened fixture + forced panic after both spawns, before explicit cleanup | Expected FAIL/exit 100, **no LEAK** | | Exact final commit, no delay/panic | 1 passed in 0.040s, **no LEAK**; exit 0 | Every Windows diagnostic arm, including the standalone pipe probe, ended with native `COMPLETE / CONFIRMED_GONE / active_processes=0`. Exit 0 alone was deliberately not the leak oracle. Temporary source instrumentation and unrelated formatter churn were removed before the final committed-source run. Linux kitsubito shell smoke: both distinct markers readable in live `/usr/bin/dash` wrappers, same basename, no descendants, both roots reaped and both capture streams at EOF. **This was not a Linux cargo-unit run.** Traceability on final source: 924/924 complete, zero findings. Existing regression cell retained; no extra permanent test or user-facing changelog entry for this fixture-only change. Preserved receipt: `.spt/preserved/309/legacy-leak/receipt.json` SHA-256: `1a1dca0cc113b12e6f5fff972b9dbdc331bfe480aa959237c9ccd6c8335baefb`. It indexes native records, logs, probe rows, Linux smoke and trace results. Pool released, retained 13,173,160,479 bytes; no resident daemon or endpoint lifecycle operations. Only this IR-108 fixture seam is addressed; its other cells remain OPEN. — hertz