INV-STG1 Phase 2: read-wire ה-pipeline ל-ensure_local → כתיבת-בלוב ל-S3 בלבד (ללא דיסק) #440

Open
opened 2026-08-05 11:01:13 +00:00 by chaim · 0 comments
Owner

What & Why

להשלים את INV-STG1: לחווט את כל קוראי-הקבצים (ingest/extract/OCR/embed/processor) דרך storage.ensure_local במקום פתיחת file_path ישירה מהדיסק, כך שאתרי-ההעלאה יוכלו לכתוב ל-S3 בלבד (להפיל את עותק-הדיסק שה-seal של Phase-1 משאיר). תנאי-קדם לניקוי-הדיסק (#128). נפתח 2026-06-11 אחרי Phase-1 (PR #205).

הקשר ופירוט

רקע: Phase-1 (PR #205) אטם 15 אתרי-כתיבה ב-dual-write (דיסק ל-pipeline + storage.mirror ל-S3). ה-pipeline עדיין דיסק-תלוי (קורא לפי documents.file_path/cases.active_draft_path וכו' מהדיסק) → לכן ה-seal משאיר עותק-דיסק. Phase-2 = להפיל את עותק-הדיסק.

עבודה:

  1. למפות את כל קוראי-הקבצים: grep ל-open(/read_bytes/read_text/Path(...).exists על נתיבי-DATA_DIR ב-ingest.py, extractor.py, processor.py, ocr, embeddings, block_writer, docx_*, וכל מי שקורא file_path מ-DB.
  2. להחליף כל קריאה ב-await storage.ensure_local(key) (מוריד ל-/tmp תחת s3; מחזיר נתיב-דיסק תחת filesystem) + cleanup של ה-temp.
  3. אחרי שכל הקוראים מחווטים: להמיר את 15 ה-seals מ-dual-write ל-storage.put בלבד (להסיר את כתיבת-הדיסק + ה-# noqa: STG1). ה-leak-guard יאכוף שלא נשארו.
  4. research_md.py — read+write דרך storage (פותר את ה-in-place-edit staleness שסומן ב-Phase-1).
  5. אימות: upload→ingest→extract→embed→search→export→download — הכול בלי קובץ חדש ב-data/{cases,...} (tripwire --since = 0).

הקשר: services/storage.py (ensure_local קיים) · web/app.py (_seal_blob, 15 sealed) · test_storage_write_leak_guard · scripts/storage_leak_tripwire.py · docs/spec/X14-storage-minio.md INV-STG1. סיכון: נוגע ב-pipeline-העיבוד הקריטי → לבדוק כל endpoint חי. אחרי Phase-2 → #128 (ניקוי-דיסק) בטוח.

Acceptance Criteria

לכל endpoint שמעלה/מעבד: לרוץ end-to-end ולוודא tripwire --since=עכשיו מחזיר 0 קבצים חדשים בדיסק. ה-leak-guard עובר גם אחרי הסרת ה-dual-writes (אין write_bytes לא-מסומן). regression: serve/ingest/extract/export ירוקים.


הועבר מ-TaskMaster (tag legal-ai, id 129, status היה pending) ב-2026-08-05. הפניות (#129) בהודעות-commit ישנות מתייחסות למזהה ה-TaskMaster, לא למספר ה-issue הזה.

## What & Why להשלים את INV-STG1: לחווט את כל קוראי-הקבצים (ingest/extract/OCR/embed/processor) דרך storage.ensure_local במקום פתיחת file_path ישירה מהדיסק, כך שאתרי-ההעלאה יוכלו לכתוב ל-S3 **בלבד** (להפיל את עותק-הדיסק שה-seal של Phase-1 משאיר). תנאי-קדם לניקוי-הדיסק (#128). נפתח 2026-06-11 אחרי Phase-1 (PR #205). ## הקשר ופירוט **רקע:** Phase-1 (PR #205) אטם 15 אתרי-כתיבה ב-dual-write (דיסק ל-pipeline + storage.mirror ל-S3). ה-pipeline עדיין דיסק-תלוי (קורא לפי `documents.file_path`/`cases.active_draft_path` וכו' מהדיסק) → לכן ה-seal משאיר עותק-דיסק. Phase-2 = להפיל את עותק-הדיסק. **עבודה:** 1. למפות את כל **קוראי-הקבצים**: grep ל-`open(`/`read_bytes`/`read_text`/`Path(...).exists` על נתיבי-DATA_DIR ב-ingest.py, extractor.py, processor.py, ocr, embeddings, block_writer, docx_*, וכל מי שקורא `file_path` מ-DB. 2. להחליף כל קריאה ב-`await storage.ensure_local(key)` (מוריד ל-/tmp תחת s3; מחזיר נתיב-דיסק תחת filesystem) + cleanup של ה-temp. 3. אחרי שכל הקוראים מחווטים: להמיר את 15 ה-seals מ-dual-write ל-storage.put **בלבד** (להסיר את כתיבת-הדיסק + ה-`# noqa: STG1`). ה-leak-guard יאכוף שלא נשארו. 4. research_md.py — read+write דרך storage (פותר את ה-in-place-edit staleness שסומן ב-Phase-1). 5. אימות: upload→ingest→extract→embed→search→export→download — הכול בלי קובץ חדש ב-data/{cases,...} (tripwire --since = 0). **הקשר:** services/storage.py (ensure_local קיים) · web/app.py (_seal_blob, 15 sealed) · test_storage_write_leak_guard · scripts/storage_leak_tripwire.py · docs/spec/X14-storage-minio.md INV-STG1. **סיכון:** נוגע ב-pipeline-העיבוד הקריטי → לבדוק כל endpoint חי. אחרי Phase-2 → #128 (ניקוי-דיסק) בטוח. ## Acceptance Criteria לכל endpoint שמעלה/מעבד: לרוץ end-to-end ולוודא tripwire --since=עכשיו מחזיר 0 קבצים חדשים בדיסק. ה-leak-guard עובר גם אחרי הסרת ה-dual-writes (אין write_bytes לא-מסומן). regression: serve/ingest/extract/export ירוקים. --- <sub>הועבר מ-TaskMaster (tag `legal-ai`, id **129**, status היה `pending`) ב-2026-08-05. הפניות `(#129)` בהודעות-commit ישנות מתייחסות למזהה ה-TaskMaster, לא למספר ה-issue הזה.</sub>
chaim added the area:infrastatus:readypriority:p2-normaltype:chore labels 2026-08-05 11:01:13 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ezer-mishpati/legal-ai#440