---
name: gate-battery-disposal-leg
description: BINDING — deleting the throwaway target is the LAST LEG of every gate battery on a runner-hosting box; a gate artifact on a CI box is an outage with a delay fuse.
metadata: 
  node_type: memory
  type: feedback
  originSessionId: 7ca578a1-0f09-40dd-a85a-026bc06f7f0a
  modified: 2026-07-29T14:19:16.053Z
---

BINDING (doyle ruling 2026-07-29, fleet-broadcast): **deleting the throwaway `CARGO_TARGET_DIR` is
the last leg of every gate battery** run on a box that also hosts a CI runner. It is a rig step, not
a judgement call.

**Why:** my W2b battery built a **47 GB** throwaway target on HFENDULEAM. C: went 92 GB → 10.1 GB and
the CI free-space preflight (32 GB floor) fast-failed both Windows jobs of **my own PR #123** — code
unindicted, refused before testing. A gate artifact on a CI box is an outage with a delay fuse.

**The generalization that made it binding:** four orphaned gate targets were found on the box the same
day — mine 47 GB, mine 14.78 GB, doyle's 13.03 GB, a leftover 1.76 GB — plus a dead-mirror runner
target. Not one agent's carelessness: **a missing rig leg, in every rig.** The rule was violated by
its author and its adopter before it existed, which is precisely why it is a leg and not a lesson
(see [[rule-failed-its-author-needs-a-mechanism]]).

**How to apply:**
- Battery order: leg 0 build → … → int seam → xtask → traceability → **delete the throwaway target**.
- Before ANY destructive reclaim, preflight `busy` (Runner.Worker/cargo/cargo-nextest/rustc) AND
  `holders` (processes whose `ExecutablePath` is inside the target). On `busy>0`, **skip, do not
  contend** — no sustained I/O on this box while a timing-sensitive job runs, no matter how small the
  task looks. A guard that fires on its own beats remembering the rule at the moment it matters; mine
  skipped correctly into the start of someone else's CI rerun.
- Reclaim only what you can ATTRIBUTE. Verify an attribution from the directory's own contents before
  an irreversible delete, even when the gater hands it to you.
- Split, don't blanket-judge: a live session dir can contain a dead gate target (`tasks/` live,
  `acl-target` dead) — delete the target, keep the session.
- Never touch standing infra without an operator conversation: the ~117 GB shared
  `projects/spt-core/target` and the ~44.6 GB active runner cache.

Kin: [[gate-clean-target-not-incremental]] (use a clean target) is the front half; this is the back
half. [[gate-rig-mechanisms-not-remembered-steps]], [[hfenduleam-disk-full-ci]],
[[e2e-leaked-daemons-shared-box]], [[no-machinewide-killon-shared-runner]].
