/simplify + review: fix fallback-on-error, dedup List, share sort helper
Commit

Addresses the two Cursor Bugbot findings on the read-routing PR plus one reuse cleanup from /simplify (the rest of /simplify was judged already-clean — notably firstResolved/readOrder stay centralized, which the fallback fix relies on):
- Fetch errors no longer block the branch fallback (Cursor, medium): firstResolved now falls through to the next store on a non-final store's error as well as on "absent". Under a git-refs primary, a hex read whose refs lookup fails on an on-demand ref fetch (network) still resolves from the git-branch store. The final store's result (hit/absent/error) is still returned verbatim, and single-store orders (ULID→refs, hex under a branch primary) are unchanged.
- List dedups by checkpoint ID (Cursor, low): a checkpoint present in both backends (a mirrored ULID, or a hex on the branch also migrated into refs) now appears once — keeping the most-recent after the sort.
- Extracted sortCheckpointInfosByRecency, shared by the git-branch, git-refs, and routing List implementations (drops the duplicated CreatedAt comparator; refs no longer imports sort).
Tests: added refs-fetch-error-falls-back-to-branch and List-dedup cases.
Skipped (noted): inlining firstResolved/readOrder (centralizing is worth more, especially now the fallback logic lives in one place); the metaAndPrompts wrapper and build-both-stores (negligible per efficiency review); routing-as-a-backend / backends-declare-their-id-kind (real generalization but over-engineering for two backends). List querying both backends is intentional (union completeness) — a bounded per-command cost, not a hot path.
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com Entire-Checkpoint: 022f449bbfda