feat(halacha): strict-rubric quality gate + dedup-on-insert (#81,#82) #50

Merged
chaim merged 1 commits from feat/halacha-quality-gate into main 2026-06-03 12:31:28 +00:00
Owner

רקע

מטמיע את הרובריקה המחמירה (docs/halacha-strict-rubric.md) שהנחתה את ניקוי הקורפוס ב-2026-06-03 (1454→534) לתוך ה-pipeline, כך שחילוץ עתידי יוצא נקי ולא נצטרך לנקות שוב.

#81 — שער איכות

  • מודול טהור חדש halacha_quality.py עם ולידטורים מבודקי-יחידה: אי-הכרעה/obiter (מבחן Wambaugh + לקסיקון), ציטוט-קטוע (חיתוך באמצע מילה), restatement-דק (rule≈quote), ציטוט-לא-מאומת.
  • הוולידטורים רצים ב-halacha_extractor._process; אי-הכרעה ממוין מחדש כ-obiter; הדגלים נשמרים בעמודה חדשה halachot.quality_flags.
  • auto-approve מתנה כעת confidence≥threshold וגם היעדר דגלי איכות — פריט מסומן הולך ל-pending_review ללא קשר לביטחון.
  • שני ה-prompts חוּדדו: דחיית dicta שלא הוכרעו, החרגת יישומים ספציפיים-לתיק, דרישת הפשטה, איסור פיצול-יתר.

#82 — dedup בזמן הכנסה (store_halachot_for_chunk)

  • בתוך אותו פסק, מדלגים על הלכה שה-supporting_quote המנורמל שלה כבר קיים, או שה-embedding שלה ב-cosine≥HALACHA_DEDUP_COSINE (0.93) מול הלכה קיימת. הופך re-run לאידמפוטנטי.

מיגרציה

halachot.quality_flags TEXT[] — ALTER אידמפוטנטי (כבר הוחל על ה-DB; init מריץ אותו שוב בבטחה).

בדיקות

  • 19 טסטי יחידה חדשים; כל המערך 156 passed.
  • אומת end-to-end מול dev DB: dedup מדלג כפילויות, דגל חוסם auto-approve, re-run מכניס 0.
  • Calibration: הדגלים נדלקים על ~10% מהשורדים הנוכחיים בלבד (false-positive נמוך).

נותר ל-follow-up (#81/#82 subtasks)

NLI entailment (#81.3), clustering/cap על over-extraction (#81.5), rhetorical-role (#81.6), gold-set (#81.7), merge-with-provenance + lexical tail (#82.3/4), cross-precedent batch (#82.7).

🤖 Generated with Claude Code

## רקע מטמיע את הרובריקה המחמירה (`docs/halacha-strict-rubric.md`) שהנחתה את ניקוי הקורפוס ב-2026-06-03 (1454→534) **לתוך ה-pipeline**, כך שחילוץ עתידי יוצא נקי ולא נצטרך לנקות שוב. ## #81 — שער איכות - מודול טהור חדש `halacha_quality.py` עם ולידטורים מבודקי-יחידה: אי-הכרעה/obiter (מבחן Wambaugh + לקסיקון), ציטוט-קטוע (חיתוך באמצע מילה), restatement-דק (rule≈quote), ציטוט-לא-מאומת. - הוולידטורים רצים ב-`halacha_extractor._process`; אי-הכרעה ממוין מחדש כ-obiter; הדגלים נשמרים בעמודה חדשה `halachot.quality_flags`. - **auto-approve** מתנה כעת `confidence≥threshold` **וגם** היעדר דגלי איכות — פריט מסומן הולך ל-`pending_review` ללא קשר לביטחון. - שני ה-prompts חוּדדו: דחיית dicta שלא הוכרעו, החרגת יישומים ספציפיים-לתיק, דרישת הפשטה, איסור פיצול-יתר. ## #82 — dedup בזמן הכנסה (`store_halachot_for_chunk`) - בתוך אותו פסק, מדלגים על הלכה שה-`supporting_quote` המנורמל שלה כבר קיים, או שה-embedding שלה ב-cosine≥`HALACHA_DEDUP_COSINE` (0.93) מול הלכה קיימת. הופך re-run לאידמפוטנטי. ## מיגרציה `halachot.quality_flags TEXT[]` — ALTER אידמפוטנטי (כבר הוחל על ה-DB; init מריץ אותו שוב בבטחה). ## בדיקות - 19 טסטי יחידה חדשים; כל המערך **156 passed**. - אומת end-to-end מול dev DB: dedup מדלג כפילויות, דגל חוסם auto-approve, re-run מכניס 0. - Calibration: הדגלים נדלקים על ~10% מהשורדים הנוכחיים בלבד (false-positive נמוך). ## נותר ל-follow-up (#81/#82 subtasks) NLI entailment (#81.3), clustering/cap על over-extraction (#81.5), rhetorical-role (#81.6), gold-set (#81.7), merge-with-provenance + lexical tail (#82.3/4), cross-precedent batch (#82.7). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-03 12:31:20 +00:00
Bake the 2026-06-03 strict-cleanup rubric into the extraction pipeline so the
corpus stays clean at the source instead of accumulating duplicates, obiter
dicta, truncated quotes and thin restatements that clog the review queue.

#81 — quality gate:
- New pure module halacha_quality.py with unit-tested validators:
  non-decision/obiter (Wambaugh markers), truncated-quote (mid-word cut),
  thin-restatement (rule≈quote), quote-unverified.
- Validators run in halacha_extractor._process; a non-decision is re-typed
  obiter; flags persist in new halachot.quality_flags column.
- Auto-approve now requires confidence>=threshold AND no quality flags;
  flagged items route to pending_review regardless of confidence.
- Both extraction prompts hardened: reject undecided dicta, exclude
  case-specific applications, require abstraction, forbid over-splitting.

#82 — dedup-on-insert (store_halachot_for_chunk):
- Within the same precedent, skip a halacha whose normalized supporting_quote
  already exists, or whose rule-embedding has cosine>=HALACHA_DEDUP_COSINE
  (0.93) against an already-stored one. Makes re-runs idempotent.

Migration: halachot.quality_flags TEXT[] (additive, idempotent ALTER).
Tests: 19 new unit tests; full suite 156 passed. Validated end-to-end against
dev DB (dedup skips dups, flag blocks auto-approve, re-run inserts 0).
Calibration: flags fire on only ~10% of current survivors (low false-positive).

Spec: docs/halacha-strict-rubric.md

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit 8e3d14abee into main 2026-06-03 12:31:28 +00:00
chaim deleted branch feat/halacha-quality-gate 2026-06-03 12:31:28 +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#50