מחיקת מסמך משאירה בלוב יתום ב-MinIO — נמחק רק הנתיב המקומי #460
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What & Why
DELETE /api/cases/{case_number}/documents/{doc_id}(web/app.py:6304) מוחק את הקובץ כך:זהו נתיב-דיסק מקומי בלבד. אבל אחרי הגירת X14 הייצור רץ
STORAGE_BACKEND=s3(אומת בקונטיינרgyjo0mtw2c42ej3xxvbz8zio), כלומר הבלוב האמיתי יושב ב-MinIO.p.exists()מחזיר False, ה-unlinkלא עושה כלום, והבלוב נשאר ב-MinIO לנצח בעוד השורה ב-DB נעלמת — אין יותר דרך למצוא אותו.השכבה הנכונה כבר קיימת ולא נקראת:
storage.delete(key, bucket=...)ב-mcp-server/src/legal_mcp/services/storage.py:465, עם מימוש לשני ה-backends (fsב-384,s3ב-386).הקשר
התגלה 2026-08-05 בעת מחיקת "כתב ערר" מתיק 1069-04-26 (מסמך של 407K תווים, 618 chunks, 336 image embeddings). ה-DB נוקה כראוי דרך CASCADE — הבלוב לא.
נזק: דליפת אחסון שקטה. כל מסמך שנמחק מאז המעבר ל-s3-only השאיר בלוב. שווה גם סקריפט-ניקוי חד-פעמי שמאתר בלובים ב-MinIO שאין להם שורה ב-
documents.⚠️ WORM: לשני מסמכים סופיים יש נעילת-WORM ל-7 שנים (ראה X14) — מחיקת בלוב חייבת לכבד זאת ולא להיכשל בקול.
Acceptance Criteria
api_delete_documentקורא ל-storage.delete()עם המפתח של המסמך, ולא רק ל-pathlib.unlink.STORAGE_BACKEND=s3מסירה את האובייקט מ-MinIO — מאומת ב-mcli lsלפני/אחרי.logger.warning+ שדה בתשובה) ולא נבלע — §6. מחיקת שורת-ה-DB לא נחסמת בגללו.storage.deleteנקרא פעם אחת עם המפתח הנכון.