Skip to content

Agent handover surface is lossy: .claude/checkpoints/ prunes files and developer/ is not a git repo #751

Description

@hyperpolymath

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

  1. 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.
  2. 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.
  3. test -f before writing an index line naming a checkpoint — write the
    file first, the pointer second.
  4. Periodically re-audit every checkpoint path referenced from memory, and
    print the count checked (a loop that matches nothing prints a confident zero).
  5. Decide whether the pruning is intended. If it is, .claude/checkpoints/ must
    stop being advertised as the handover surface.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions