Declare all pushed checkpoints as haves to avoid re-fetching ancestry
Commit

With topological ordering, individual first-parent steps can land on a merge whose other parent's ancestry was already pushed in earlier iterations as its own side-branch checkpoint. Previously each fetch only declared the most recent temp-ref position as a have, so the source had to re-send those side-branch objects with every merge.
Track every successfully-pushed checkpoint in a per-batch slice and
thread the full set into the fetch's haves on subsequent iterations.
On resume, seed the slice from the chain prefix at-or-before current:
those commits must have been pushed in prior runs to advance the temp
ref, but in topo order they aren't necessarily ancestors of current
(they can sit on side branches yet to be merged), so declaring just
current misses them.
Entire-Checkpoint: 46264228955f