GET-007: be:// fetch re-ships already-present objects → unbounded shard bloat (498 MB pack vs 36 MB fresh clone)

A clean fresh clone's .be/ is 36 MB, yet a re-fetched shard grew to a 498 MB / 290,853-object pack — the same objects at ~14× the bytes. The root cause is NOT a missing client-side negotiation (the client DOES advertise haves from the store) — it is server-side have-pruning that fails and re-ships the whole log, which the client then re-appends. The real fix is to make the peer ship only the objects the client lacks; the ingest-side dedup (below) is a held band-aid, not the cure. See GET, POST, CLAUDE.

Issues

Negotiation machinery exists end-to-end, but the server's pruning is an offset-watermark within one pack file and silently degrades to "ship everything".

Blockers

The keeper pack log is append-only; any ingest-side safety net must stay append-only (decide-before-append, never truncate/u8bShed — see the held band-aid). The primary fix is server-side and protocol-level; trace it before coding.

Planned

Make the server ship only objects the client lacks; confirm the watermark failure first.