---
name: scratchpad-is-not-preservation
description: "A file 'preserved at scratchpad/' is preserved NOWHERE — the session scratchpad is a per-session %TEMP% dir that dies with the session; my own commune asserted a P1 specimen was safe there while it sat in a DEAD session's temp during a box-wide reap"
metadata:
  node_type: memory
  type: feedback
---

**2026-09-07, during doyle's 0.5-GB-free reap census.** My commune said, as settled fact:
"Specimen preserved at `scratchpad/gears-specimen/`". It was the ONLY evidence capture of the
live operator-facing rc break (perch dir, transcript, daemon + rc log slices, baselines, taken
BEFORE I stopped/started gears — unreproducible, the restart changed the state).

I found it by accident: a `mkdir -p` on THIS session's scratchpad succeeded, which told me the
dir had not existed — because the scratchpad path is keyed by SESSION ID. The specimen was in
session `5ffe203a`'s `%TEMP%` subtree. Dead session, temp dir, during a reap party. 58K, 19 files,
one cleanup away from gone, and my commune recorded it as done.

**Why:** "preserved" names a PROPERTY (survives the thing that threatens it), but the word gets
attached to a LOCATION chosen for convenience mid-investigation. The scratchpad is the correct
place to WORK and the worst place to KEEP: per-session, under `%TEMP%`, invisible to git, and
swept by exactly the disk-pressure events that make you want the evidence. Worse, the false claim
is self-reinforcing — it rides in a commune, which is where stale claims carry the most authority
([[commune-is-testimony-not-an-artifact]]), so every future me reads "preserved" and stops asking.

Note the asymmetry that nearly cost the specimen: doyle's census asked only about `target/` trees.
Nothing in `target/` was ever at risk of taking it. **TEMP was, and nobody was auditing TEMP** —
the reap conversation's frame did not contain the thing most likely to die.

**How to apply:**
1. **Never write "preserved" for a path under the scratchpad, `%TEMP%`, or any session-keyed dir.**
   Write where it actually is and what kills it. If it is in the scratchpad, it is IN FLIGHT.
2. Preservation lands somewhere the threatening event does not reach — for a reap, that is outside
   every `target/`; for a session end, outside the scratchpad; for `git clean -xdf`, tracked.
   **Name the survivor property you actually bought**, not the copy ([[write-a-shared-memory-file-only-after-checking-it-exists]]'s
   tracked != committed != pushed, same shape).
3. `cp -p` / `cp -rp` ALWAYS when the copy is evidence — mtimes are data, and a bare `cp` has
   already destroyed a timestamp that a later ordering argument needed ([[commune-drop-dir-info-cwd]]).
4. **Verify the copy, do not assume it**: file count, byte count, hash, and for a binary, run it
   and grep the specific strings it was kept FOR. I verified both breadcrumb sites in the
   preserved instrument rather than trusting the byte count.
5. When someone's reap census names a scope (`target/` trees), **audit what the scope EXCLUDES**
   before answering — the answer they need may be about a dir they did not ask about.

Extends [[preservation-is-its-own-step-before-any-reap-broadcast]] (ordering + restore cost);
this file is the LOCATION half. See [[a-step-that-straddles-an-irreversible-action-reads-as-done-at-the-action]].
