test: walk closures explicitly so a missing subtree fails
main路
Commit
assertClosureReadable leaned on go-git's file iterator, and the pinned TreeWalker turns a missing subtree into io.EOF, so Files().ForEach ends early and reports success. readClosure now follows parents and tree entries itself, with lookups that fail on a missing object.
Checkpoint fixtures nest a 0/ directory beside metadata.json, as real checkpoints do, and TestReadClosureDetectsMissingObjects removes a subtree, a nested blob and a parent commit in turn and requires each to be named.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com Entire-Checkpoint: 01M6K9P5ZFRJHKN87ZQV5A3ET2