---
name: worktree-pool-claim-false-orphan
description: "Claiming a build pool from a worktree you later remove leaves the owner stamp pointing at the deleted worktree, so the next sweep reads a live pool as ORPHANED and offers it for reaping."
metadata: 
  node_type: memory
  type: project
  originSessionId: af766430-dd07-403e-a7c4-f96fda10be91
  modified: 2026-08-03T02:54:22.870Z
---

Pool-release leaves the OWNER stamp behind. So a pool claimed from inside a worktree keeps
that worktree as its owner, and once the worktree is removed the sweep reads the pool as
ORPHANED — todlando's `target-seam` offered **52.06 GB** for reaping immediately after the
`gc-fix-125` lane closed (2026-08-03). The orphan state was an artifact of the lane, not a
real one. Repair: re-claim the pool from the ROOT tree's cwd, then release, which re-stamps
it owned-by-root with no lane and 0 B reclaimable — the pre-lane shape.

**Why:** this is the third shape of one class in a single day — a LIVE cache reading as
garbage to whoever sweeps next. The others: [[in-tree-target-has-no-inbound-link]]
(orphan-by-inbound-links condemns every live cache) and the idle-vs-abandoned point that put
`gate-target-render` at risk from a reclaim-on-idleness predicate. Each time the sweep is
correct about its own predicate and wrong about the world.

**How to apply:**
- Claim a pool from the ROOT tree, not from a worktree you intend to remove. If you already
  did, re-stamp before the worktree goes.
- Teardown order is junction OFF first (delete the LINK only — verify `LinkType=Junction`),
  then `git worktree remove` + prune, then pool-release. A live junction takes the delete
  into the target.
- A warm pool is not garbage: default to KEEPING it when free space is far above the 32 GB
  golden floor ([[free-space-floor-blocks-golden]]). Reaping build cache is a decision, not
  hygiene — hertz's leg-3 numbers show pool reuse pays.
- Idle ≠ abandoned; owner-stamp-stale ≠ orphaned. Ask what the predicate can actually see.
