eab5f124f6
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.1 KiB
2.1 KiB
plan, phase, status, started, completed, requirements
| plan | phase | status | started | completed | requirements |
|---|---|---|---|---|---|
| 06.2-03 | 06.2 | complete | 2026-05-31 | 2026-05-31 |
Plan 06.2-03 Summary — Cloud-Delete Propagation Gap Closure
What Was Built
Closed the cloud-delete correctness gap: deleting a cloud-stored document now propagates to the cloud provider rather than silently orphaning the file.
Backend (Task 1)
services/storage.delete_documentgainsskip_quota: bool = False— quota decrement gated onnot skip_quota; cloud docs (never charged quota at upload) passskip_quota=True.DELETE /api/documents/{id}gainsremove_only: bool = Query(default=False).- Cloud routing: for non-minio docs without
remove_only, callsget_storage_backend_for_document()thenbackend.delete_object(). On provider exception: returns HTTP 200{success: false, cloud_delete_failed: true}— exception message never in response body (T-06.2-03-02). remove_only=true: skips cloud call, deletes DB row withskip_quota=True.- 3 xfail stubs promoted to real tests (propagates, failure, remove_only).
Frontend (Task 2)
api/client.js:deleteDocument(id, removeOnly=false)appends?remove_only=truewhen set;deleteDocumentRemoveOnlyconvenience wrapper added.DocumentView.vue:confirmDelete()now callsapi.deleteDocumentdirectly and inspectsresp.cloud_delete_failed; on true, mapsstorage_backendto provider name and shows warning modal.- Inline
CloudDeleteWarningModal(C-3 contract): "Remove from app" →confirmRemoveOnly()→ DELETE?remove_only=true→ navigate/; "Cancel" → closes modal, document not deleted.
Test Results
backend/tests/test_documents.py — 24 passed, 4 xfailed, 0 failed
Self-Check: PASSED
- Cloud doc delete calls backend.delete_object — test_delete_cloud_document_propagates
- Cloud failure → HTTP 200 cloud_delete_failed=True, DB row preserved — test_delete_cloud_document_failure
- remove_only=true → DB removed, no quota decrement — test_delete_cloud_remove_only
- DocumentView shows CloudDeleteWarningModal on cloud_delete_failed response
- 24 tests pass, 0 fail