migrate-to-ulid: migrate the union of local + origin v1, report dangling

Commit

Soph2mo ago

Bug: the migration only walked the checkpoint tree it read from the local entire/checkpoints/v1 branch. The local and origin v1 branches can diverge (each machine condenses onto its own before they reconcile), so checkpoints that lived only on origin's v1 were never mapped — and filter-branch left their commit trailers as hex. Observed on a real repo copy: origin/v1 had 381 checkpoints but the run migrated only the stale local subset, leaving ~540 hex trailers.

Fix:

  • Walk the UNION of every available v1 source (local entire/checkpoints/v1 AND origin's remote-tracking copy), deduped by checkpoint id, instead of a single tree. v1CheckpointTrees gathers both; missing/unreadable refs are skipped.
  • Report trailers that reference a checkpoint absent from every v1 source: those can't be remapped and will stay hex (genuinely dangling, or origin's tracking ref is stale — the note tells the user to git fetch and re-run).

Tests: local-only + origin-only checkpoints both migrate; a checkpoint on both sources migrates once. Verified on the real repo — the dry-run now sees origin's 381 checkpoints and flags the 57 dangling trailers.

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

Checkpoints

can you review the branch / pr

CodexGPT-5.5
View session
Checkpoint 1

Build Checkpoints Store Based on Design

Claude CodeOpus 4.8[1m]
View session
Checkpoint 1