Add hidden `doctor migrate-to-ulid` validation tooling (branch+hex → refs+ULID)

Commit

Soph2mo ago

Test tooling to convert a THROWAWAY COPY of a git-branch + hex-id repo into one that reads as if it had used git-refs + ULIDs from the start, so we can stage a realistic validation repo and exercise commands + the UI against it.

What it does (dry-run preview by default; --yes to apply):

  1. Re-identifies every checkpoint on entire/checkpoints/v1 as a fresh ULID (minted from the checkpoint's original CreatedAt, so ULIDs sort by real time), stored under refs/entire/checkpoints/<shard>/<ulid>. The embedded checkpoint_id in the root + per-session metadata.json is re-stamped to the ULID; everything else (transcripts, summaries, attribution) is carried over byte-for-byte. No commit SHAs are embedded in checkpoint content, so the later history rewrite doesn't stale it.
  2. Rewrites the Entire-Checkpoint commit trailers hex → ULID across all local branches except entire/* (git filter-branch --msg-filter; rewrites history).
  3. Deletes the entire/checkpoints/v1 branch and the shadow branches so only the ULID refs remain — refs-native.

The migrated checkpoints resolve through the normal read path (kind routing → refs) and are enqueued for push like any git-refs write.

Kept hidden and, per intent, on this branch (not for merge to main) — it rewrites history irreversibly apart from git's refs/original backup.

Tests: core re-ID/re-stamp/dry-run/no-branch + ULID-timestamp minting, and an end-to-end command test (real commit trailers → ULID, v1 deleted, checkpoint resolves via Open().Persistent).

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com Entire-Checkpoint: 904b45068824

Checkpoints

Build Checkpoints Store Based on Design

Claude CodeOpus 4.8[1m]
View session
Checkpoint 1