GET-009: efficient beagle↔beagle (be://) sync — reachability-based upload-pack, cross-file serving, redundant-pack GC

Make be:// keeper-to-keeper sync as efficient as git's own transport: the serving keeper should ship only the objects the requesting keeper lacks, across any number of pack files and divergent branches, and never let a shard accumulate duplicates. This is the umbrella ticket for the beagle-side upload-pack; GET-007 landed the first increment (5124b2ee: wire_locate_sha resolves to the LATEST copy, so the byte-offset watermark stops re-shipping duplicate tails for the common linear/dup-reingest case), but the watermark model is structurally a single contiguous byte-range of one log file — it cannot do reachability across files or exclude duplicates mid-range. The remaining work is to replace it with true object-level negotiation and to reclaim already-bloated shards. This is a be://-only concern: fetches from a git remote (ssh:/https:) use real git-upload-pack reachability and are unaffected. See GET, POST, GET-007, CLAUDE.

Issues

The beagle upload-pack (keeper/WIRE.c WIREBuildSegments/WIREServeUpload) prunes by a byte-offset watermark over one pack-log file, not by object reachability.

Blockers

The keeper pack log is append-only; a reachability serve must build a fresh pack of only-missing objects (it cannot rely on a contiguous byte range). GC/compaction must also stay append-only-safe (write a new compacted pack/shard, swap, never mutate a live one mid-read). Decide whether to reuse git's pack-objects-style closure or implement over the keeper's LSM index + commit walk.

Planned

Replace the offset watermark with object-level negotiation; add cross-file serving and a compaction pass. Stage it.