Replace a failed upload with a copy; reclaim copies nothing uses

Astra's review: a copied image whose content never reaches the server
kept its row, and so its bytes, for good. A day after each copy, the copy
now goes through the reclaim check, which removes it only if nothing
shows it. A failed upload under the copy's id no longer reads as one
still on its way: the copy replaces it. Tests cover both, and a viewer
collaborator being refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
a692d7c2ffDara Adedeji committed on 10/10/2026, 4:31:24 PMparent646ef7e

Checks

All checks passed
3 files changedLine totals unavailable