Summary
Add a "remove cloud copy only" operation for v2 snapshots (keep the local archive, allow re-upload later).
Current behavior
V2 has a single deletion lifecycle (GlobalSnapshotDeletion): cloud tombstone + delete cloud archive + delete local archive. The UI previously exposed this global delete twice ("remove from cloud" and "delete"), which was deduplicated in the UI rework — but now there is no way to drop only the cloud copy.
Desired behavior
New core operation: tombstone the snapshot in the shared manifest and delete the cloud archive, but keep the local archive file and catalog entry. The snapshot then shows as local-only and can be re-uploaded.
Implementation notes
converge_local_tombstones currently deletes local archives for all tombstones; a "keep local" semantic is needed (new manifest state or flag).
- Re-upload after cloud removal must not hit
RemoteSnapshotIdentityConflict (same id re-enters the shared manifest).
- Needs core tests + UI action slot wiring (location states: local-only / both / cloud-only / elsewhere).
Summary
Add a "remove cloud copy only" operation for v2 snapshots (keep the local archive, allow re-upload later).
Current behavior
V2 has a single deletion lifecycle (
GlobalSnapshotDeletion): cloud tombstone + delete cloud archive + delete local archive. The UI previously exposed this global delete twice ("remove from cloud" and "delete"), which was deduplicated in the UI rework — but now there is no way to drop only the cloud copy.Desired behavior
New core operation: tombstone the snapshot in the shared manifest and delete the cloud archive, but keep the local archive file and catalog entry. The snapshot then shows as local-only and can be re-uploaded.
Implementation notes
converge_local_tombstonescurrently deletes local archives for all tombstones; a "keep local" semantic is needed (new manifest state or flag).RemoteSnapshotIdentityConflict(same id re-enters the shared manifest).