chore(repo): classify the 561 root scratch files — track the cited 18, preserve the rest The `.spt/` ignore lane (#212) named 561 untracked files at the repo ROOT as explicitly out of scope. This is that half, and it is the same landmine: at `2037bcb8` a `git add -A` at the root staged all 561 — 47.7 MiB, 268 `.raw`, 184 `.exit`, 87 `.md`, 7 `.out`, 4 `.log`, 4 `.done`, 2 `.txt`, 2 `.stackdump`, 2 `.sh`, 1 `.py`, none of it repo content until this commit says which part is. THE FINDING IS ABOUT THE CENSUS, NOT THE FILES. The first classification put two CITED files in the bury class. `W3-196-CENSUS.md` and `WEBSERVE-272-JIT.md` were recorded as "cited only from other root scratch" — their citing files, `W3-196-JIT.md` and `W3-272-MEASUREMENTS.md`, are TRACKED. The census corpus was tracked-only, so every hit it could return was a tracked citation by construction, and the two were then relabelled by their PATH, because a `.md` at the repo root reads as scratch. The discriminator is TRACKED-OR-NOT, never ROOT-OR-NOT. A corpus that can only return tracked hits cannot tell you which of its hits are tracked; it threw the distinction away before the question was asked. Burying those two would have left two tracked files citing paths that no longer existed — the `launch-battery.py` mechanism from #212 with the sides swapped. It was caught only because the burial list was re-verified against the corpus a second time, by a different reader. DESTINATIONS WITHDRAWN, and why. The first ruling relocated the cited files into docs/intake/, docs/design/ and docs/gate-records/. But the root already holds 140 TRACKED files, 134 of them `.md`, 25 with JIT in the name — IDLE-EDGE-JIT.md, W3-196-JIT.md, WEBSERVE-272-W2-JIT.md, every M*-PLAN.md, MESH-D*-PLAN.md, RESTORATION-D*-PLAN.md. The house convention is measured, not assumed: a plan or record lives at the root and is tracked. Relocating would have split siblings across two homes (WEBSERVE-272-W2-JIT.md at root, WEBSERVE-272-W3-DRIFT-RIDERS.md in docs/intake/) and repointed 18 citation lines to buy that split. So the 18 are tracked WHERE THEY ARE: zero moves, zero repoints, zero sha-transfer risk. The rule IR-91 states: a plan or record cited from a tracked file is itself tracked, at the path the citation already names. What decides a file's fate is whether the repo points at it — not where it sits, not what it is called, and not whether it looks like scratch. WHAT MOVED, and nothing was deleted: 473 Class B gate legs -> .spt/preserved/root-gate-legs-2026-09-09/ (48,210,644 B) 70 Class C uncited .md -> .spt/preserved/root-md-2026-09-09/ ( 1,140,907 B) Each file hashed before and after the move, each directory carrying a sha256 manifest re-verified after the fact: 473/473 and 70/70, zero mismatches, file counts on disk equal to manifest lines. Every one of the 543 was word-bounded against the whole 911-file tracked corpus first and had no tracked citation — the two that did are the two promoted above. FIVE ROOT-ANCHORED IGNORE LINES, and the anchoring is load-bearing: `/*.raw` `/*.exit` `/*.done` `/*.out` `/*.stackdump`. Legs are the one class whose FUTURE instances are scratch by construction, so ignoring them institutionalizes no loss. Proved by path with a populated pattern field on all five, plus five negative controls — `.md`, `.log`, `.sh`, `.txt` not ignored, and `crates/probe.raw` NOT ignored, which an unanchored `*.raw` would have swallowed. `/*.md`, `/*.log`, `/*.sh` and `/*.txt` are deliberately NOT ignored. A plan or a script dropped at the root must keep showing as `??` so the next census classifies it — that is precisely the pattern that produced this repo's 140-file tracked root corpus, and an ignore line there would hide the next one. Proof: zero `??` rows at the repo root; `traceable-reqs check` exit 0; both manifests verified; the five ignore lines and five controls as above. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01WAw9XAcTR8oSwzYPsqZoY2 Co-authored by: hertz