feat(precedents): איחוד cited_only↔missing_precedents — גזירת פסיקה-חסרה (#143, G2) #269

Merged
chaim merged 1 commits from worktree-cited-only-missing-precedent-union into main 2026-06-15 08:57:45 +00:00
Owner

הבעיה (#143)

שתי מערכות מקבילות לאותו מושג ("פסיקה מצוטטת שטקסטה לא נקלט"): טבלת missing_precedents (תור-רכישה ידני) מול case_law source_kind='cited_only' (stubs מגרף-הציטוטים/X11). חפיפה≈0 → 31 ה-stubs לא הופיעו ב-/missing-precedents. כשל-G2.

ההכרעה (G2)

missing_precedents = SoT-לתור יחיד; cited_only = מקור-גילוי נגזר (כמו יומונים מזינים את ה-radar). גוזרים רשומת missing_precedents 'open' לכל stub.

התיקון

  • court_citation.citation_dedup_key — מפתח-dedup designator-aware ({designator}\|{docket}). ⚠️ מתקן פגם בתוכנית-הניתוח המקורית: dedup על מספר-בלבד היה ממזג בטעות אותו docket בערכאות שונות — בג"ץ 389/87ע"א 389/87 (נמצאו 18 כאלה בקיים, הם לא כפילים).
  • סכמה V40: missing_precedents + citation_norm (מפתח-dedup) + discovery_source (manual|cited_only|digest|writer) + index. בלי UNIQUE — הקורפוס מחזיק לגיטימית אותו docket בערכאות שונות; ייחודיות נאכפת designator-aware בנתיב-היצירה.
  • create_missing_precedent: מחשב citation_norm בכתיבה (G1), מקבל discovery_source + linked_case_law_id. find_missing_precedent_by_citation: dedup דרך citation_norm (fallback ל-citation גולמי כשאין מספר).
  • scripts/derive_missing_from_cited_only.py: backfill citation_norm ל-291 + גזירת 31 (dry-run: 31 ייווצרו, 0 deduped). linked_case_law_id=stub, status='open'promote-in-place בהעלאת-טקסט דרך ON CONFLICT הקיים. אידמפוטנטי. יורץ אחרי הפריסה.

תיאום

  • תלוי-הקשר #140 (הגדרת cited_only). מתואם עם #136 (digest→MP — אותו citation_norm + נתיב-יצירה).
  • השפעת-UI: דף "פסיקה חסרה" יגדל ב-31 (176→207 פתוחים). פילטר-מקור (discovery_source) ב-UI — נדחה לשער Claude Design.

בדיקות

  • test_dedup_key_is_designator_aware (חדש) — בג"ץ≠ע"א, ערר≠בל"מ, גרסאות-format מתמזגות.
  • כל 356 בדיקות mcp עוברות. undefined-names + leak-guard נקיים. (rebased על origin/main.)

Invariants

  • G2 — SoT-לתור יחיד, cited_only נגזר (לא מסלול מקביל)
  • G1citation_norm מנורמל בכתיבה (designator-aware, לא over-merge)
  • G3 — upsert אידמפוטנטי · G10 — שער-העלאה ידני נשמר · G12 — leak-guard נקי

🤖 Generated with Claude Code

## הבעיה (#143) שתי מערכות מקבילות לאותו מושג ("פסיקה מצוטטת שטקסטה לא נקלט"): טבלת `missing_precedents` (תור-רכישה ידני) מול `case_law` `source_kind='cited_only'` (stubs מגרף-הציטוטים/X11). חפיפה≈0 → 31 ה-stubs **לא הופיעו** ב-/missing-precedents. כשל-G2. ## ההכרעה (G2) `missing_precedents` = **SoT-לתור יחיד**; `cited_only` = **מקור-גילוי נגזר** (כמו יומונים מזינים את ה-radar). גוזרים רשומת `missing_precedents` 'open' לכל stub. ## התיקון - **`court_citation.citation_dedup_key`** — מפתח-dedup **designator-aware** (`{designator}\|{docket}`). ⚠️ **מתקן פגם בתוכנית-הניתוח המקורית:** dedup על מספר-בלבד היה **ממזג בטעות** אותו docket בערכאות שונות — `בג"ץ 389/87` ≠ `ע"א 389/87` (נמצאו 18 כאלה בקיים, הם **לא** כפילים). - **סכמה V40**: `missing_precedents` + `citation_norm` (מפתח-dedup) + `discovery_source` (manual\|cited_only\|digest\|writer) + index. **בלי UNIQUE** — הקורפוס מחזיק לגיטימית אותו docket בערכאות שונות; ייחודיות נאכפת designator-aware בנתיב-היצירה. - **`create_missing_precedent`**: מחשב `citation_norm` בכתיבה (G1), מקבל `discovery_source` + `linked_case_law_id`. **`find_missing_precedent_by_citation`**: dedup דרך `citation_norm` (fallback ל-citation גולמי כשאין מספר). - **`scripts/derive_missing_from_cited_only.py`**: backfill `citation_norm` ל-291 + גזירת 31 (dry-run: **31 ייווצרו, 0 deduped**). `linked_case_law_id`=stub, `status='open'` → **promote-in-place** בהעלאת-טקסט דרך ON CONFLICT הקיים. אידמפוטנטי. **יורץ אחרי הפריסה.** ## תיאום - תלוי-הקשר #140 (הגדרת cited_only). מתואם עם **#136** (digest→MP — אותו `citation_norm` + נתיב-יצירה). - **השפעת-UI**: דף "פסיקה חסרה" יגדל ב-31 (176→207 פתוחים). פילטר-מקור (`discovery_source`) ב-UI — נדחה לשער Claude Design. ## בדיקות - `test_dedup_key_is_designator_aware` (חדש) — `בג"ץ≠ע"א`, `ערר≠בל"מ`, גרסאות-format מתמזגות. - כל **356** בדיקות mcp עוברות. `undefined-names` + `leak-guard` נקיים. (rebased על origin/main.) ## Invariants - ✅ **G2** — SoT-לתור יחיד, cited_only נגזר (לא מסלול מקביל) - ✅ **G1** — `citation_norm` מנורמל בכתיבה (designator-aware, לא over-merge) - ✅ **G3** — upsert אידמפוטנטי · **G10** — שער-העלאה ידני נשמר · **G12** — leak-guard נקי 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-15 08:57:05 +00:00
feat(precedents): איחוד cited_only↔missing_precedents — גזירת פסיקה-חסרה (#143, G2)
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 4s
Lint — undefined names / undefined-names (pull_request) Successful in 11s
161e370a4c
שתי מערכות מקבילות לאותו מושג ("פסיקה מצוטטת שטקסטה לא נקלט"): טבלת
missing_precedents (תור-רכישה ידני של היו"ר) מול case_law source_kind='cited_only'
(stubs מגרף-הציטוטים/X11). חפיפה≈0 → 31 ה-stubs לא הופיעו ב-/missing-precedents.

הכרעה (G2): missing_precedents = SoT-לתור-יחיד; cited_only = מקור-גילוי נגזר (כמו
יומונים מזינים radar). גוזרים רשומת missing_precedents 'open' לכל stub.

תיקון:
- court_citation.citation_dedup_key — מפתח-dedup **designator-aware**
  (`{designator}|{docket}`). **מתקן פגם בתוכנית-הניתוח:** dedup על מספר-בלבד היה
  ממזג בטעות אותו docket בערכאות שונות (בג"ץ 389/87 ≠ ע"א 389/87; 18 כאלה בקיים).
- סכמה V40: missing_precedents מקבל citation_norm (מפתח-dedup) + discovery_source
  (manual|cited_only|digest|writer) + index. **בלי UNIQUE** — הקורפוס מחזיק
  לגיטימית אותו docket בערכאות שונות; ייחודיות נאכפת designator-aware בנתיב-היצירה.
- create_missing_precedent: מחשב citation_norm בכתיבה (G1), מקבל discovery_source
  + linked_case_law_id. find_missing_precedent_by_citation: dedup דרך citation_norm
  (fallback ל-citation גולמי כשאין מספר).
- scripts/derive_missing_from_cited_only.py: backfill citation_norm ל-291 +
  גזירת 31 (dry-run: 31 ייווצרו, 0 deduped). linked_case_law_id=stub, status=open
  → promote-in-place בהעלאת-טקסט דרך ON CONFLICT הקיים. אידמפוטנטי.

תלוי-הקשר: #140 (הגדרת cited_only). מתואם עם #136 (digest→MP — אותו citation_norm
+ create path). תיקון-נתון יורץ אחרי הפריסה.

בדיקות: test_dedup_key_is_designator_aware (בג"ץ≠ע"א, ערר≠בל"מ, גרסאות-format
מתמזגות). כל 356 עוברות. guards נקיים.

Invariants: G2 (SoT-לתור יחיד, cited_only נגזר), G1 (citation_norm מנורמל בכתיבה),
G3 (idempotent upsert), G10 (שער-העלאה ידני נשמר), G12.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit ea8712ecff into main 2026-06-15 08:57:45 +00:00
chaim deleted branch worktree-cited-only-missing-precedent-union 2026-06-15 08:57:45 +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#269