Non-urgent findings from the post-merge grading review of PRs #640, #646, #648, #650. Batched; none blocks anything.
#640 reader fixture (test-only)
- The fixture omits v0.25.0's finished_at-implies-terminal rule, so the paused variant never pins the one compat property it exists for (deleting the finished_at pop at aboyeur.py:2491 stays green). Add the property.
- The "legacy" snapshot variant is a four-key dict the v0.25.0 writer could never have produced (it always emitted cwd, dry_run, read_only, ...). Generate it from the real writer shape.
- parse_behavior asserts are tautological (fixture constants asserted against the fixture).
- derived_from.commit records the tag object SHA (949d6df7) instead of the commit (5c1dcba).
#646 checkpoint export stripping
- Strip and assert cover only .json: a crashed checkpoint temp (.checkpoint..tmp, run_checkpoint.py:568) holding a full private body is copied and passes the assert. Extend both to the temp pattern.
- A checkpoint whose filename does not match its content hash makes _expected_verify_archive_manifest raise, leaving that verify run permanently unprunable (fail-closed but unbounded retention). Bound it.
#648 regression forgiveness
#650 reused-receipt dedup
- Legacy-row canonicalization depends on the reused receipt file still existing on disk; once receipts are pruned the double count silently returns. Persist the canonical ref (or a resolved marker) instead of re-deriving per read.
- Every rank/score/reconcile now performs O(rows) receipt-file opens (1,600+ on the live ledger); add a cache.
- The ledger row for a reused capture no longer references the reused receipt itself; that provenance lives only in the receipts dir.
From the post-merge grading review. Refs #637, #636, #629, #634.
Non-urgent findings from the post-merge grading review of PRs #640, #646, #648, #650. Batched; none blocks anything.
#640 reader fixture (test-only)
#646 checkpoint export stripping
#648 regression forgiveness
#650 reused-receipt dedup
From the post-merge grading review. Refs #637, #636, #629, #634.