fix(halacha): חילוץ-מחדש משמר הלכות מאושרות (INV-G10, #108) #172

Merged
chaim merged 1 commits from worktree-fix-halacha-reextract-dataloss into main 2026-06-10 09:08:47 +00:00
Owner

מה ולמה

תיקון data-loss (TaskMaster #108). reset_halacha_extraction ביצע DELETE FROM halachot ללא-תנאי לפני חילוץ-מחדש; קריסה בין המחיקה לאחסון-הראשון מחקה את כל אישורי-היו"ר והשאירה את הרשומה תקועה status='processing' עם 0 שורות (תקרית עמיאל בל"מ 8126-03-25, 2026-06-08 — 29 הלכות, 9 מאושרות + rule_type, אבדו).

התיקון: המחיקה מחריגה כעת review_status IN ('approved','published') — אישור אנושי לא נמחק בשקט (INV-G10). תובנת-המפתח: ה-dedup-on-insert הקיים ב-store_halachot_for_chunk (normalized-quote + cosine) מדלג על חילוץ טרי שמשכפל מאושרת שנשמרה — כך אין כפילות. reset_halacha_extraction מחזיר {deleted, preserved}, וה-extractor מתעד כמה מאושרות נשמרו (provenance).

עמידות מלאה מול מוות-תהליך (OOM) נשארת ל-X16/#114 (durable resume) — #108 הוא תנאי-מקדים לו.

Invariants — הצהרה (חובה)

  • נוגע / מקיים: G10 (שער-יו"ר — אישור אנושי לא נמחק בשקט בחילוץ-מחדש) · G1 (תיקון בנקודת-הכתיבה ב-reset_halacha_extraction, לא טלאי בקריאה) · G9 (provenance — דיווח deleted/preserved). אין מסלול מקביל (G2) — שונתה הפונקציה הקנונית היחידה.

צ'קליסט — פרוטוקול כתיבת-קוד

  • קראתי את docs/spec/00-constitution.md + ספ-התחום הרלוונטי
  • השינוי לא יוצר מסלול מקביל (G2) ולא מתקן תסמין בקריאה (G1)
  • אין בליעה שקטה — reset מחזיר ספירות; ה-extractor מתעד preserved
  • בדקתי מול gap-audit.md — זהו #108, לא חופף ל-FU קיים
  • בדיקות עוברות — test_halacha_reextract_preserves_approved.py (offline SQL-capture) + 64 בדיקות-הלכה קיימות

אימות

test_halacha_reextract_preserves_approved.py  →  1 passed   (DELETE מחריג approved/published)
test_halacha_quality + test_halacha_coerce + test_precedent_corpus_isolation  →  64 passed
py_compile  →  OK (db.py, halacha_extractor.py, precedent_library.py ×2)

קבצים: services/db.py (reset_halacha_extraction), services/halacha_extractor.py (force branch + provenance), services/precedent_library.py + tools/precedent_library.py (docstrings).

🤖 Generated with Claude Code

## מה ולמה תיקון **data-loss** (TaskMaster #108). `reset_halacha_extraction` ביצע `DELETE FROM halachot` **ללא-תנאי** לפני חילוץ-מחדש; קריסה בין המחיקה לאחסון-הראשון מחקה את כל אישורי-היו"ר והשאירה את הרשומה תקועה `status='processing'` עם 0 שורות (תקרית עמיאל בל"מ 8126-03-25, 2026-06-08 — 29 הלכות, 9 מאושרות + rule_type, אבדו). **התיקון:** המחיקה מחריגה כעת `review_status IN ('approved','published')` — אישור אנושי לא נמחק בשקט (INV-G10). תובנת-המפתח: ה-`dedup-on-insert` הקיים ב-`store_halachot_for_chunk` (normalized-quote + cosine) מדלג על חילוץ טרי שמשכפל מאושרת שנשמרה — כך אין כפילות. `reset_halacha_extraction` מחזיר `{deleted, preserved}`, וה-extractor מתעד כמה מאושרות נשמרו (provenance). עמידות מלאה מול מוות-תהליך (OOM) נשארת ל-**X16/#114** (durable resume) — #108 הוא תנאי-מקדים לו. ## Invariants — הצהרה (חובה) - **נוגע / מקיים:** **G10** (שער-יו"ר — אישור אנושי לא נמחק בשקט בחילוץ-מחדש) · **G1** (תיקון בנקודת-הכתיבה ב-`reset_halacha_extraction`, לא טלאי בקריאה) · **G9** (provenance — דיווח `deleted`/`preserved`). אין מסלול מקביל (G2) — שונתה הפונקציה הקנונית היחידה. ## צ'קליסט — פרוטוקול כתיבת-קוד - [x] קראתי את `docs/spec/00-constitution.md` + ספ-התחום הרלוונטי - [x] השינוי **לא** יוצר מסלול מקביל (G2) ולא מתקן תסמין בקריאה (G1) - [x] אין בליעה שקטה — `reset` מחזיר ספירות; ה-extractor מתעד preserved - [x] בדקתי מול `gap-audit.md` — זהו #108, לא חופף ל-FU קיים - [x] בדיקות עוברות — `test_halacha_reextract_preserves_approved.py` (offline SQL-capture) + 64 בדיקות-הלכה קיימות ## אימות ``` test_halacha_reextract_preserves_approved.py → 1 passed (DELETE מחריג approved/published) test_halacha_quality + test_halacha_coerce + test_precedent_corpus_isolation → 64 passed py_compile → OK (db.py, halacha_extractor.py, precedent_library.py ×2) ``` קבצים: `services/db.py` (reset_halacha_extraction), `services/halacha_extractor.py` (force branch + provenance), `services/precedent_library.py` + `tools/precedent_library.py` (docstrings). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-10 09:08:41 +00:00
תיקון data-loss: reset_halacha_extraction ביצע DELETE ללא-תנאי לפני חילוץ-מחדש;
קריסה בין המחיקה לאחסון הראשון מחקה את כל אישורי-היו"ר והשאירה את הרשומה תקועה
status='processing' עם 0 שורות (תקרית עמיאל 8126-03-25, 2026-06-08).

עכשיו המחיקה מחריגה review_status IN ('approved','published') — אישור אנושי לא
נמחק בשקט (INV-G10). ה-dedup-on-insert של store_halachot_for_chunk מדלג על חילוץ
טרי שמשכפל מאושרת שנשמרה, כך שאין כפילות. reset מחזיר {deleted, preserved},
וה-extractor מתעד כמה מאושרות נשמרו (provenance, G9).

עמידות מלאה מול מוות-תהליך (OOM) נשארת ל-X16/#114 (durable resume) — זה תנאי-מקדים.

בדיקה: test_halacha_reextract_preserves_approved.py (offline SQL-capture) מאמת
שה-DELETE מחריג approved/published; 64 בדיקות-הלכה קיימות עוברות.

Invariants: G10 (שער-יו"ר — אישור לא נמחק), G1 (תיקון במקור), G9 (provenance).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit c903770fb3 into main 2026-06-10 09:08:47 +00:00
chaim deleted branch worktree-fix-halacha-reextract-dataloss 2026-06-10 09:08:47 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ezer-mishpati/legal-ai#172