Scan one canonical object body across arbitrary chunks. Blobs/messages are
skipped without retaining them; commit parents and tag targets are emitted
with their expected kinds. Tree names borrow caller scratch until resumption.
Scratch is divided equally into current/previous names; other kinds need none.
A structurally valid tree, including Git ordering and unique byte names.
Validation uses constant storage. File/directory aliases can be separated
by other names in Git order, so checking them may reread earlier entries.
Every read, including these rescans, consumes an encoded-byte work budget.