Why: CI containers run a PID 1 that does not reap orphans, so the killed stub lingers as a zombie and os.kill(pid, 0) keeps succeeding; local dev machines reap instantly, which hid the difference. Evidence: tests/test_svc_recover 10/10 after the fix; make test-governance re-run recorded on the task card; CI on the new head is the authoritative gate. Impact: test helper only (svc.sh already treats zombies as dead via empty-cmdline pidcheck). Refs: .task/feature-svc-autorecover.md