> CI / boxes / infra sub-index — split out of MEMORY.md 2026-08-03 (doyle) to cure index-over-read-limit
> truncation. Entries VERBATIM from the index; consult when working CI, runners, pools, rigs, or
> teardown on shared boxes. This file = mechanisms+rules for infra surfaces; not the population either.

## Boxes / CI / infra
- [Defender first-touch tax on fresh test binaries](defender-first-touch-tax-on-fresh-test-binaries.md) ⭐ 2026-09-09 doyle-measured from my hypothesis+falsifier: a fresh 35 MB binary costs ~1 s on FIRST run (2092/994/1171/1043 ms) vs ~30-260 ms on the second; MsMpEng 68% of a core on an IDLE box. Lands on process SPAWN, so a 3346-cell phase slows monotonically (448.7 -> 495.1 -> 542.6 s at ONE sha) while cargo/rustc/nextest read 0 and the box reads 1.1/16 cores busy. Turns every 5 s/15 s budget in the suite into a coin = RANDOM-VICTIM. Exclusions are UNREADABLE unelevated (Get-MpPreference "must be an administrator", HKLM key SecurityException) — operator question, and an exclusion is a security-posture change: propose, never apply.
- [a kill is only as scoped as its filter](a-kill-is-only-as-scoped-as-its-filter.md) 2026-09-08: killed a peer's gate build with a Name-only process filter; cwd-in-cmdline kills the CALLER, descendancy is the predicate (cargo/rustc CommandLine is often EMPTY), WMI UInt32 vs Int32 hashtable = "descendants 0" reported as success. 2nd FACE 2026-09-09 (hertz), the OPPOSITE error: /T on the RIGHT tree at the WRONG root — the loop lived in the PARENT bash, so a perfect 5-line SUCCESS kill made the next leg start. Walk UP to the session root, census bash by script name in CommandLine, and read the task's exit 0 as your kill observed, not the run finished. 3rd FACE same day: I wrote the 1st face's EXACT box-wide `taskkill /FI "IMAGENAME eq cargo.exe" /F` into a SAFETY watchdog hours after banking the 2nd — it never fired (threshold 15 GiB, free 136), and "a guard that is only safe because its trigger did not come is not a safe guard"; doyle's kin framing: a VOID guard and a PASSING guard render identically. Watchdogs observe; kills go to an owned pid tree.
- [seedmap = STARVATION](seedmap-test-collides-live-daemon.md) gate box AND runner · [runner deaf](runner-online-but-deaf.md) · [disk-full CI](hfenduleam-disk-full-ci.md) · [flynn shares it](hfenduleam-hosts-flynn.md) · [leaked daemons + RANDOM-VICTIM family](e2e-leaked-daemons-shared-box.md) ⭐⭐ a DIFFERENT test dying each run on ONE sha = ONE env cause, not N flaky tests; hardening members never closes it. ⛔ leg 3 (move the runner off this box) is an operator NON-OPTION — upheld 2026-08-04, do not re-propose · [no machine-wide kill](no-machinewide-killon-shared-runner.md) · [which is the listener](spt-daemon-is-live-infra.md) · [reap only your own](rig-ownership-reap-only-your-own.md) · [authenticated ancestry](reap-root-needs-authenticated-ancestry.md).
- [merge-push RE-OCCUPIES the box](merge-push-reoccupies-the-box.md) ⭐⭐ the ff-push CONCLUDING a golden STARTS the automatic post-merge ci run on this runner — "golden green, box is free" is FALSE for minutes after the merge; box empties after the POST-MERGE run, not the golden. Runner's own target ⇒ CPU contention only, no pool at risk. Parent-chain a stray cargo to `Runner.Worker.exe`; sequence around it (⛔ never re-propose moving the runner, line above).
- Pools — [stale false-green](shared-target-stale-false-green.md) tell = test COUNT · [two live trees](shared-target-two-live-trees.md) · [sccache keys on path](sccache-target-path-in-key.md) · [preflight hang](delegate-build-preflight-hang.md).
- [a cold pool costs 2,500 worktrees](a-cold-pool-costs-2500-worktrees.md) MEASURED 2026-08-22: 45 worktrees = 0.79 GB, 3 pools = 130.45 GB. Disk is spent by CONCURRENT POOLS, never worktree count — pruning worktrees is a day of work for <1 GB and leaves the lever untouched. Ceiling: TWO live pools against the 40 GB floor (the floor event happened at FOUR).
- Teardown — [classify first](gate-worktree-target-disk.md) · [junction FIRST](worktree-target-junction.md) · [never into scratchpad](scratchpad-target-trees-eat-the-box.md) · [no inbound link](in-tree-target-has-no-inbound-link.md) · [subtree not session dir](reap-subtree-not-session-dir.md).
- [preservation is an OWNED step BEFORE the release call](preservation-is-an-owned-step-before-the-release-call.md) ⭐⭐ ruled doyle + banked independently by deployah 2026-08-29: naming an artifact worth keeping INSIDE the pools-released broadcast is a starting gun to everyone able to destroy it — todlando's verbatim copies lost to my reap by ~1 min, only prior diff-snapshots saved the 830-line instrument. Preserve (named owner, path + hash confirmed on the record) FIRST; release as a SECOND message gated on the confirmation; a preserved patch's restore COST (applies-at-main or not) is part of the preservation.
- [`cargo run -p xtask -- gen` DEADLOCKS](xtask-gen-deadlocks-under-cargo-run.md) ⭐⭐ xtask shells to `cargo build -p spt` under the OUTER cargo's target lock; silent, 40min of nothing. Run `target/debug/xtask.exe gen` directly; tell wedged from slow by CPU (a blocked rustc burns none), never by elapsed time.
- [inserting a clap variant orphans the next doc block](inserting-a-clap-variant-orphans-the-next-doc-comment.md) the new verb ships the OLD verb's help and the old ships none; read the `xtask gen` diff for rows you did NOT touch. 3rd FACE 2026-09-09 (hertz, doyle caught in review): TWO `///` blocks with NO BLANK LINE are ONE block — a new struct added between an existing doc and its type takes the prose and leaves the original type UNDOCUMENTED; survives compile, clippy -D warnings, tests and treqs because only the BINDING moved and a diff renders no bindings. Check = read the two lines above each `pub` item; fix = a byte-conserving MOVE (assert the length).
- [no warm CI target](ci-runner-has-no-warm-target.md) ⭐⭐ checkout `git clean -ffdx` kills it each job; floor read BEFORE its own reclaim = red over bytes the next step deletes.
- Pins — [holder death ≠ lane state](pool-claim-holder-death-is-not-lane-state.md) ⭐⭐ 3/3 dead holders, one a LIVE lane; decide from git ancestry · [orphan or own cwd](worktree-pin-holder-triage.md) · [pool-claim false orphan](worktree-pool-claim-false-orphan.md) · [orphan conhost](orphan-conhost-cwd-pins-worktree.md) · [husk cleanup](wt-single-process-husk-cleanup.md).
- [a pool MARKER without lane identity answers nothing](pool-marker-without-lane-identity-answers-nothing.md) ⭐⭐ 2026-08-29 disk event, 4th face of the false-read class: `POOL-OWNER.json` held ONLY `owner_tree` + `written_by: spt-poolguard` — a poolguard MARKER, not a `pool-claim` record (no `lane`/`branch`/`base`); that pool PREDATES the claim discipline, so the population is not fully claimed and a missing claim is not evidence of an unowned lane. Second half, the one that nearly mis-reaped: **NOT-ancestor-of-origin/main ≠ stray** — `0ebe0fbd` was the BASE of `d0fdd58d`, a live SEMAPHORE #241 head; `git branch --contains` is the cheap discriminator, ancestry vs main alone returns the same answer for a dead stray and a live lane's base. Reap authorised on 3 named arms instead: clean `status --porcelain`, `ls-remote --heads origin` at the IDENTICAL sha (durable off-MACHINE, not just off-worktree), regenerable target. +38.38 GB, free 70.1. Also: "written TODAY" was true and read as live — newest file 01:48, ZERO newer than 02:00, ~7.5h cold; and the co-author trailer needs a RAW BODY read (`--format=%b`) or the owner reads as absent.
- [free-space floor](free-space-floor-blocks-golden.md) 32GB, LNK1318, resource red = UNTESTED · [serial legs share workdir](serial-legs-share-runner-workdir.md) · [two runs per sha](two-runs-per-sha-notification-trap.md) · [thin lane skips int](thin-lane-ci-skips-integration-tests.md) · [opt-in legs skip silently](opt-in-ci-legs-skip-silently.md) skipped = SILENCE · [traceability gate](ci-traceability-gate.md) · [no internal codes](public-help-no-internal-codes-gate.md).
- [self-host migration](ci-selfhost-migration.md) · [kitsubito speedup](ci-kitsubito-speedup-plan.md) · [kitsubito rig](kitsubito-linux-rig.md) · [wifi-only QUIC seam](kitsubito-wifi-only-quic-seam.md) · [linux runner](linux-runner-migration.md) · [cross-machine rig](cross-machine-test-rig.md) · [gravity deploy](gravity-deploy-procedure.md) · [mirror CI dead](mirror-repo-ci-dead.md).
- [unit-lane isolation](unit-lane-inprocess-isolation.md) · [fixture bins](spt-bin-lane-fixture-bins.md) · [bin-name collision](workspace-bin-name-collision.md) · [libsqlite3-sys corruption](libsqlite3-sys-artifact-corruption.md) · [UAC 740](windows-uac-binary-name-740.md) · same mechanism, second write-up [uac740 dup](win-update-exe-uac740.md) · [PATHEXT shim](ccs-win-pty-program-resolve.md) bare node CLI → os error 193 · [console flash](translation-binary-console-window-bug.md) new spawn site missed CREATE_NO_WINDOW · [IPv6 poisons iroh](broken-ipv6-poisons-iroh-discovery.md) · [service-detection](daemon-service-detection-gotcha.md) · [Linux SPT_HOME no-bug](linux-spt-home-no-bug.md).

- [twohost runs in a TEMP SPT_HOME](twohost-runs-in-its-own-temp-spt-home.md) ⭐⭐ rig sets `SPT_HOME` to a TempDir at test entry and spawns its OWN daemons; "canonical stores" in the comments = paths INSIDE that home. The resident broker version CANNOT enter a twohost result — I built a pair-roll rule and a golden ban on the opposite premise. Open axis: relay-mediated rendezvous.
- [broker cutover refuses from a PERCHED shell](broker-cutover-refuses-from-a-perched-shell.md) ⭐⭐ `spt update --restart` hits the same `OWL_SESSION_ID` guard as `daemon stop` (no flag overrides) and **EXITS 0** — releases#153; a plain-ssh success does NOT generalise to a perched shell, the caller's ENVIRONMENT is the variable. Installed/coordinator image ≠ RUNNING broker image.
- [read enforcement state in the RUNNING image's tree](inert-on-this-version-kills-a-probes-discrimination.md) ⭐⭐ a version banner's prose ("INERT on earlier versions") got 4 agents to mis-scope a real wire falsification; `git show v0.52.0:…/wan.rs` showed tier 1 LIVE and abstaining. If the box runs an older image than your checkout, main is the WRONG tree.
- [dir LastWriteTime is BLIND to nested writes](dir-lastwritetime-is-blind-to-nested-writes.md) ⭐⭐ called a build pool "15 days cold" off the dir stamp; it had been built into that morning — newest nested file was 15 days newer. Root stamp tracks only its OWN entry list. Take max(LastWriteTime) over files in the same walk as the size sum — and answer LIVENESS by process census / claim holder, never by a timestamp.
- [literal \n glues the co-author trailer](literal-backslash-n-glues-the-coauthor-trailer.md) ⭐ trailer mid-line after literal backslash-n = invisible to ci-notify's anchored sed, attribution silently doyle-only; audit anchored per commit, fix by message-only reword, verify tree-id equality so measurements carry.
- [pool-release refusal TAIL reads as a release confirmation](pool-refusal-tail-reads-as-release-confirmation.md) ⭐⭐ the releases#103 blurb closes a `SPT_POOL_FOREIGN` REFUSAL too — `tail -2` turned four failed builds into four apparent successes, all four POOL-OWNER.json still on disk. Verdict token is at the TOP. Also: the release tool is BUILT THROUGH the pool it would release (a bad claim blocks its own fix), and a claim OUTLIVES its worktree (root pool owned by a gate-204 that no longer exists). Reaping the target subtree kills the claim with it.
- [a config fix is verified against the WINNING merge, not your file](config-fix-verified-against-the-winning-merge-not-your-file.md) ⭐⭐ kitsubito 2026-08-25: my `50-backlog.rules` lost the augenrules lexical merge to apt's own `audit.rules` (digits sort BEFORE letters; last directive wins) — kernel silently kept 8192/60000 through a proof run while the fragment grepped perfect and `--check` said "No change". Verify at the EFFECTIVE layer (`auditctl -s`/sysctl readback), read the RENDERED merge, edit the winning file, restart-cycle once and read back again. "Remediation done" in a commune is a claim; the readback is the measurement.
- [cargo REPLAYS a cached build-script's warnings](cargo-replays-cached-build-script-warnings.md) ⭐ deployah, v0.63.0 publish: the green publish build printed the SPT_POOL_UNCHECKED override warning naming a lane that had already been taken over — cargo replayed the PRIOR invocation's stored build.rs output (0.85s, build.rs did not re-run); the env var was NOT set and the on-disk owner record was correct. A build-script diagnostic in a log dates the last EXECUTION, not the invocation that printed it — check whether build.rs actually re-ran before reading its warnings as that build's state.
- [warm rig ≠ spent pool](warm-rig-is-not-a-spent-pool.md) ⭐ 2026-08-29 disk event: "HEAD is ancestor of origin/main" nearly reaped the deliberate W2-W4 warm gate rig (43 GB, would re-derive at gate time into the same thin disk) — "landed" classifies the LANE, a pool also has a FUNCTION axis (spent vs still EARNING for a named future consumer); ask the owner / check the kept-deliberately note first. Same event: ancestor tests against a STALE local main called five landed lanes NOT-IN-MAIN — test against origin/main.
- [a PR open is a CI battery on BOTH runner boxes](a-pr-open-is-a-ci-battery-on-both-runner-boxes.md) ⭐⭐ 2026-09-07: "open the PR at the tip" mid-battery → Windows CI died on disk-full, kitsubito CI `rust-lld` OOM-killed INSIDE the runner cgroup (15 GB), runner unit stayed `failed` (relaunch did not stick) — zero test signal on both, reads as a red head. Open PRs only when both boxes are free; after a "shutdown signal" red, `systemctl is-active` the kitsubito runner and `reset-failed`+`start` it (sudo -n works). 2nd face 04:00Z: the ff push to MAIN fires the same full run on both boxes — the post-land window is NOT free for ~20 min; the runner checkout's `git clean -ffdx` wipes its ~50 GB target = a +52 GB free jump that reads as an unlogged reap, and the space comes back during the next job.
- [a shared tool binary can flip under a live gate](a-shared-tool-binary-can-flip-under-a-live-gate.md) ⭐⭐ 2026-09-07: traceable-reqs.exe 0.2.0→0.4.0 at 02:34Z by an unannounced hand; same tree exit 0→1/396 findings on EVERY lane incl. main, wearing a code-regression shape. Criterion = the CI PIN (ci.yml WANT=), not PATH; classify a window leg by its OUTPUT SHAPE + clock vs exe mtime; pin back, keep the .bak as control, adoption is its own lane (IR-37).
- [a fall-through rm overrides git's own refusal](a-fallthrough-rm-overrides-gits-own-refusal.md) todlando 2026-09-08: `git worktree remove --force` REFUSED all three (Permission denied, holder = rust-analyzer flycheck), my next line `rm -rf` stripped them anyway — 54/40/42 MB to 68K skeletons. Gate the rm on the git verb SUCCEEDING and read the refusal. Second half: pool classification (reparse in/out, size, CARGO_TARGET_DIR) never asks a source checkout if it is DIRTY — run `git status --porcelain` before deleting a worktree; afterwards you cannot tell. Free space is not a meter at 136 MB (it moved DOWN 1 GB from other activity).
- [a single idle sample of a busy box is a LULL](a-single-idle-sample-of-a-busy-box-is-a-lull.md) ⭐ 2026-09-08: watcher read cargo=0 rustc=0 on the CI runner and I nearly launched; re-census showed cargo=1 rustc=11, 5/15-min load 12.70/11.61 — a gap between rustc bursts. Require THREE consecutive quiet samples, print the 1/5/15 triple, and name the builder's cwd (actions-runner/_work = CI, which the ff-push itself started). Also: `pgrep -c || echo 0` prints 0 TWICE.
- [pool-release REBUILDS into the pool you just reaped](pool-release-rebuilds-into-the-pool-you-just-reaped.md) ⭐⭐ 2026-09-08: `cargo run -p xtask -- pool-release` in a freshly-reaped worktree recompiled xtask INTO the empty pool (2.8 GB back in one lane, 73.6 MB partial in the next). A reap that did not take looks exactly like a `target/` that exists again. Release with a PREBUILT xtask.exe against the pool PATH; Test-Path after any reap BEFORE quoting reclaim; "holds no stamp" is correct for an already-deleted target (the claim record lives inside it).
- [golden twohost is CROSS-OS; a count is not an owner](golden-twohost-is-cross-os-and-a-count-is-not-an-owner.md) ⭐⭐ 2026-09-08 MEASURED: golden's twohost pair runs A on hfenduleam AND B on kitsubito (`cargo test -p spt-daemon --test twohost_web` under .github/bench/wrap.sh) — "twohost is Windows-only" is a BELIEF and it is false, so a golden occupies BOTH boxes. Caught by identifying a lone `cargo=1, load 0.78` by cwd (=actions-runner/_work) instead of reading it as a stale leftover, one scp before launching into it. IDENTIFY builders by cwd/etime; a count is occupancy, never ownership.
- [a probe must SHARE THE IDENTITY of what it vouches for](a-probe-must-share-the-identity-of-what-it-vouches-for.md) ⭐⭐ 2026-09-08: Windows firewall allow rules are PER-EXECUTABLE, so a pwsh/bash probe says nothing about `twohost_web-<hash>.exe` — it agrees by coincidence today and goes GREEN the moment the PROBER is allowed. Put the probe IN the binary as its own cell, run it as a SEPARATE invocation first (threads inside one `cargo test` are unordered), assert on the side that can OBSERVE (a sender cannot see a drop), mint its own outcome. Fix must be PORT+REMOTE scoped or the next rebuild's hash orphans it. Reachability GATES (binary); latency does not (continuous).
- [the NAME you give a tree selects which discipline fires](the-name-you-give-a-tree-selects-which-discipline-fires.md) hertz 2026-09-09, the ACTOR's self-caught account (CANONICAL) + the DRI's record [a-tree-gets-its-discipline-from-the-name-the-task-gives-it](a-tree-gets-its-discipline-from-the-name-the-task-gives-it.md), cross-linked, neither deleted: `rm -rf` on "the orphan worktree dir" also reaped a ~9.3 GiB cargo pool with a binding four-arm method attached -- crossing BOTH "never delete a target/ you have not classified" AND "reap the SUBTREE, not the worktree dir around it"; the task's title selected the rule, the pool had no name in that frame. Outcome clean (no inbound reparse, CARGO_TARGET_DIR unset, sources preserved 30/30 first) but the before-size is gone, so it is recorded as a free-space DELTA and never as a measured reap. Ask what a dir CONTAINS before naming the action; a deferred retry inherits every discipline the first attempt owed. (hertz's hook clauses restored verbatim from the author's copy after doyle deleted the line unread.)
- [pool-release STRIPS the lane, not the record -> release BEFORE reap](pool-release-strips-the-lane-not-the-record-so-release-before-reap.md) hertz 2026-09-09: POOL-OWNER.json keeps owner_tree+written_by, loses the five lane fields, and lives INSIDE the pool; reap-first = release on nothing. No lane fields = released, not corrupt.
- [backslash gitdir blocks worktree remove](backslash-gitdir-blocks-worktree-remove.md) todlando 2026-09-22: "not a working tree" = gitdir holds `\...\.git`; rewrite with forward slashes after a clean status, then remove.
