test: walk closures explicitly so a missing subtree fails

main

Commit

Stefan Hauboldyesterday

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