Summary
developer/.claude/checkpoints/ is the estate's agent-handover surface —
MEMORY.md names a file there as the resume-here pointer. That directory
loses files, and developer/ is not a git repository, so the loss is
unrecoverable.
Evidence (measured 2026-09-08)
1. A deliverable vanished inside one session.
2026-09-08-estate-settings-baseline.md (12,703 B, written 08:41) appeared in a
directory listing this afternoon and was absent ~20 minutes later.
find /home/hyperpolymath -name '*estate-settings-baseline*' returned nothing.
2. It is not one bad write — a peer hit it first and its fix died too.
The MEMORY.md resume-here line had already been rewritten by another session
to point at 2026-09-08-E1-RESUME-and-engine-repair.md, annotated "(on disk
15:28Z) … Replaces 3 earlier checkpoints, none of which exist on disk."
That replacement file is also gone.
3. The pointer rot is broad. Every .claude/checkpoints/... path referenced
across the agent memory files was tested for existence:
| Referenced |
Missing |
Genuine (excl. 5 glob/placeholder artefacts) |
| 36 |
13 |
~8 |
4. The pattern looks like rolling retention, not random loss. At the time of
audit only 5 named 2026-09-08-*.md checkpoints survived (3 rebuilt minutes
earlier, 2 written by peers minutes earlier), and the auto-timestamped
checkpoints only reached back ~50 minutes — earlier ones from 07:xx and 15:xx
were gone.
5. No recovery path. git check-ignore in developer/ returns "fatal: not
a git repository" and git ls-files returns 0. There is no object store to
fall back on. (A session-start banner may still report "Is a git repository:
true" — that is wrong, and worth not trusting.)
Why this matters more than it looks
A dead pointer is worse than a missing one. MEMORY.md still advertises the
path as authoritative, so the next session follows resume-here into nothing and
silently loses the parked state while believing it read it. Every campaign
parked "with an exact resume line" is parked in this directory.
Proposed handling
- Durable state does not live only in
.claude/checkpoints/. Anything that
must survive to next week belongs on an issue/comment here, or in the agent
memory directory (which has been stable), or both.
- Keep primary evidence separate from prose. The 435-repo settings baseline
was fully reconstructible only because its TSV/JSON ledgers sat outside that
directory. Prose checkpoints should cite ledgers, not replace them.
test -f before writing an index line naming a checkpoint — write the
file first, the pointer second.
- Periodically re-audit every checkpoint path referenced from memory, and
print the count checked (a loop that matches nothing prints a confident zero).
- Decide whether the pruning is intended. If it is,
.claude/checkpoints/ must
stop being advertised as the handover surface.
Summary
developer/.claude/checkpoints/is the estate's agent-handover surface —MEMORY.mdnames a file there as the resume-here pointer. That directoryloses files, and
developer/is not a git repository, so the loss isunrecoverable.
Evidence (measured 2026-09-08)
1. A deliverable vanished inside one session.
2026-09-08-estate-settings-baseline.md(12,703 B, written 08:41) appeared in adirectory listing this afternoon and was absent ~20 minutes later.
find /home/hyperpolymath -name '*estate-settings-baseline*'returned nothing.2. It is not one bad write — a peer hit it first and its fix died too.
The
MEMORY.mdresume-here line had already been rewritten by another sessionto point at
2026-09-08-E1-RESUME-and-engine-repair.md, annotated "(on disk15:28Z) … Replaces 3 earlier checkpoints, none of which exist on disk."
That replacement file is also gone.
3. The pointer rot is broad. Every
.claude/checkpoints/...path referencedacross the agent memory files was tested for existence:
4. The pattern looks like rolling retention, not random loss. At the time of
audit only 5 named
2026-09-08-*.mdcheckpoints survived (3 rebuilt minutesearlier, 2 written by peers minutes earlier), and the auto-timestamped
checkpoints only reached back ~50 minutes — earlier ones from 07:xx and 15:xx
were gone.
5. No recovery path.
git check-ignoreindeveloper/returns "fatal: nota git repository" and
git ls-filesreturns 0. There is no object store tofall back on. (A session-start banner may still report "Is a git repository:
true" — that is wrong, and worth not trusting.)
Why this matters more than it looks
A dead pointer is worse than a missing one.
MEMORY.mdstill advertises thepath as authoritative, so the next session follows resume-here into nothing and
silently loses the parked state while believing it read it. Every campaign
parked "with an exact resume line" is parked in this directory.
Proposed handling
.claude/checkpoints/. Anything thatmust survive to next week belongs on an issue/comment here, or in the agent
memory directory (which has been stable), or both.
was fully reconstructible only because its TSV/JSON ledgers sat outside that
directory. Prose checkpoints should cite ledgers, not replace them.
test -fbefore writing an index line naming a checkpoint — write thefile first, the pointer second.
print the count checked (a loop that matches nothing prints a confident zero).
.claude/checkpoints/muststop being advertised as the handover surface.