Files
kite/.planning/phases/06.2-close-v1-sharing-cloud-delete-csv-export-gaps/06.2-03-SUMMARY.md
T
2026-05-31 15:11:51 +02:00

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_document gains skip_quota: bool = False — quota decrement gated on not skip_quota; cloud docs (never charged quota at upload) pass skip_quota=True.
  • DELETE /api/documents/{id} gains remove_only: bool = Query(default=False).
  • Cloud routing: for non-minio docs without remove_only, calls get_storage_backend_for_document() then backend.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 with skip_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=true when set; deleteDocumentRemoveOnly convenience wrapper added.
  • DocumentView.vue: confirmDelete() now calls api.deleteDocument directly and inspects resp.cloud_delete_failed; on true, maps storage_backend to 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