feat(proxy): reclaim space from the blob store

A dry run leaves the blobs and deletes their index entries

Defect 12 / Tier 3 / blocking

services/proxy/src/sweep.rs:125services/proxy/src/sweep.rs:140services/proxy/src/sweep.rs:249

Expected review

pass `dry_run` into `forget` and return early, or move the index pruning inside the branch that actually removed the blob.

Discovery difficulty

the flag is threaded through and honoured in two of the three places that delete something, so a reader checking that dry run is wired up finds it wired up. `forget`'s own doc comment is a well-argued justification for pruning index entries, and it is correct - about the non-dry-run case, which is the only one it discusses.

Trigger

`POST /v1/admin/cache/sweep?dry_run=true` against a store over its ceiling. Verified: the blobs all survive and the index entry naming the evicted digest is gone. The cache then misses on coordinates whose bytes it is holding, and every one of those misses is a fetch from an upstream, so a caller trying a low ceiling drops most of the index and sends the proxy's whole fetch volume upstream - which is the amplification `admin.rs` opens by naming as the reason these routes need a credential.

Severity

blocking

benchee benchee-dashboard-1 built from 10f4ec58 Static benchmark evidence ·