---
name: no-machinewide-kill-shared-runner
description: Never machine-wide process-kill on the shared self-hosted runner — scope to workspace path or PID
metadata: 
  node_type: memory
  type: feedback
  originSessionId: c7e38d83-75f7-41a8-9593-2034b5bcc0e0
---

2026-06-15: hfenduleam is a self-hosted CI runner that SHARES the physical machine with live agents (doyle/perri/deployah/solar live perches + the installed spt-core daemon). So `Get-Process spt | Stop-Process -Force` (machine-wide) in CI or local cleanup is dangerous — it kills live/fleet `spt.exe` infra, not just build artifacts.

**Why:** the Windows exe-lock that blocks `xtask check` (can't overwrite a running `spt.exe`) tempts a broad process-kill to clear it. On a shared box that broad kill has fleet-wide blast radius.

**How to apply:** scope every reap to the build artifacts —
- CI guard: `Get-Process spt,notify-shell | Where-Object { $_.Path -like "$env:GITHUB_WORKSPACE\*" } | Stop-Process -Force` (only the checkout's `target\debug` daemons), Windows-only, placed before the docs-drift `xtask check` step. Landed in ci.yml (PR #12, f747e1e).
- Local: kill by specific PID (resolve via `Get-Process spt | Select Id,Path`), or scope to the dev `target\debug\spt.exe` path — never bare name.

Live perches survive a stray spt-core kill anyway (they run on legacy owl.exe, not spt-core `spt.exe` — see [[owl-send-not-legacy-spt-send]] / [[spt-daemon-is-live-infra]]), and the install daemon auto-restarts (REQ-DAEMON-3) — but don't rely on that; don't fire the broad kill. Root cause of the lock: daemon-spawning E2Es (`poll_envelope_e2e`, `notify_shell_e2e` — `api poll` autostarts a daemon) that don't reap before the docs-drift build.
