Files
legal-ai/docs/legal-principles-redesign.md

123 lines
9.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# עיצוב-מחדש: עקרונות משפטיים (לשעבר "הלכות")
> **מקור-ההחלטה:** chaim, 2026-06-19. נולד תוך תכנון סינתזת-`canonical_statement`, כשהתגלה
> שהקורפוס תפח ל-5,243 "הלכות" (18.8 לפסק, 1,820 מהחלטות הוועדה עצמה) — מודל מושגי שגוי.
> מסמך זה הוא מקור-האמת ליוזמה עד שיוטמע ב-`docs/spec/`.
## 1. הבעיה
מערכת-החילוץ הקיימת תייגה כל פרופוזיציה-משפטית כ"הלכה" וחילצה ~18.8 לכל פסק, ללא תקרה,
ללא הבחנת-מקור, ובאישור-אוטומטי חד-מודלי (confidence ≥0.80). תוצאה: 5,243 רשומות —
מנופחות ומתויגות-שגוי. **ועדת ערר מיישמת דין; היא אינה יוצרת הלכה.** קריאה ל-1,820
פרופוזיציות מהחלטות-הוועדה "הלכות" שגויה משפטית.
## 2. מודל-המושגים החדש
מטרייה: **עקרונות משפטיים**. שני תת-סוגים לפי מקור:
| מקור (`case_law.source_kind`) | מונח | מחייב? |
|---|---|---|
| פס"ד מחוזי/עליון (external, binding) | **הלכה** | תקדים מחייב |
| החלטת ועדת-ערר (`internal_committee`) | **כלל פרשני** | לא-מחייב; פרשנות/כלל-החלה שהוועדה גיבשה |
## 3. אלגוריתם-החילוץ החדש (חל על שני המקורות)
```text
1. 3 מודלים שונים (Claude מקומי + DeepSeek + Gemini) מנתחים לעומק את הפסק;
כל מודל מציע מועמדים, כל מועמד עם ציון 0-1.
2. התאמה סמנטית בין שלושת המודלים → סט-מועמדים מאוחד; לכל מועמד:
votes = כמה מודלים זיהו/אימצו אותו (1-3)
score = ממוצע הציונים של המצביעים בלבד
3. דדופ מול הקורפוס (V41 lookup-before-insert, cosine ≥ HALACHA_CANONICAL_THRESHOLD):
• מוכר → קישור ל-canonical קיים (instance/citation). לא נספר במכסה → משחרר סלוט.
• חדש → מועמד לעיקרון חדש.
4. כלל-אישור על מועמדים חדשים:
votes = 3 → APPROVED מיידי (גם אם score < 0.85)
votes ≥ 2 AND score ≥ 0.85 → APPROVED
votes = 2 AND score < 0.85 → pending_review (שער-יו"ר, G10) [ברירת-מחדל]
votes = 1 → DROP (לא עיקרון אמיתי) [ברירת-מחדל]
5. תקרה: עד 5 עקרונות חדשים לפסק. אם >5 עוברים — בוחרים 5 לפי score יורד. [ברירת-מחדל]
מקושרים-מוכרים (שלב 3) אינם נספרים בתקרה.
```
**ברירות-מחדל הנדסיות (ניתנות-לכיול ב-config):** מקרה-גבול (2 הצבעות, score<0.85) → יו"ר ולא
פח; בחירת 5 כש->5 עוברים → לפי score; הצבעה-יחידה → drop.
## 4. סינון רטרואקטיבי
אותו פאנל-3 + תקרת-5 + כלל-0.85 ירוץ על **5,243 הקיימים**, מקובצים לפי פסק-המקור:
לכל פסק — להפעיל את האלגוריתם, לשמור את הניצולים (≤5), לסמן את השאר `rejected` (הפיך,
גיבוי SQL/CSV ל-`data/audit/`). מודל על מהלך-הניקוי 2026-06-03 (`docs/halacha-strict-rubric.md`)
ועל `halacha_panel_approve.py` הקיים.
## 5. תשתית קיימת לבנות עליה
- **פאנל תלת-מודלי:** `scripts/halacha_panel_approve.py` (Claude מקומי + DeepSeek + Gemini,
KEEP_SYSTEM) — אותם 3 מודלים מ-gold-set (AC1=0.92). מקור-הצבעות.
- **דדופ/קישור V41:** `db.nearest_canonical_halacha` (cosine), lookup-before-insert בחילוץ.
- **ולידטורים:** `services/halacha_quality.py` (non_decision/application/thin/quote/NLI).
- **רובריקה:** `docs/halacha-strict-rubric.md` (6 עילות-חיתוך).
- **שער-מקור:** `db.EXTRACTION_ELIGIBLE_PREDICATE` (db.py:7171) — נקודת-הזרקת תקרת/תיוג.
- **סינתזה:** `services/canonical_synthesis.py` + `backfill_canonical_synthesis.py` (כבר נבנו;
יחולו על הניצולים בשם החדש — פאזה אחרונה).
## 6. פאזות-ביצוע (מוצע)
| # | פאזה | תוכן | תלות |
|---|---|---|---|
| **0** | עצירה | הקפאת ריצת-הסינתזה המלאה (בוצע) | — |
| **A** | מודל-הצבעות משותף | שירות `panel_extraction` — 3 מודלים, התאמה סמנטית, votes+mean-score, כלל-אישור. מקור-יחיד ל-B ו-C (G2) | — |
| **B** | רף להבא | חיבור A ל-`halacha_extractor`: תקרת-5, דדופ-משחרר-סלוט, תיוג הלכה/כלל-פרשני לפי מקור. מחליף auto-approve חד-מודלי | A |
| **C** | סינון רטרואקטיבי | סקריפט-batch מריץ A על 5,243 לפי פסק; ניצולים≤5; השאר rejected (הפיך) | A |
| **D** | שם | "הלכה"→הלכה/כלל-פרשני/עקרונות; UI + תיאורי-כלים + תיעוד. rename-DB מלא = אופציונלי-נפרד | — |
| **E** | סינתזה | `canonical_synthesis` על הניצולים, בשם החדש | C, D |
**סדר-בנייה מומלץ:** A → (B ‖ D) → C → E. A הוא הליבה המשותפת; D (שם) עצמאי ובטוח להקדים.
## 7. Invariants
מקיים: INV-G10/INV-LRN1 (שער-יו"ר על מקרי-גבול), INV-AH (עיגון-מקור בחילוץ), INV-G2
(מודל-הצבעות מקור-יחיד ל-B+C), INV-G9 (audit-trail להצבעות + לסינון), INV-G6 (רענון-embedding).
מודל-הצבעות-היו"ר משתלב ב-active-learning הקיים (`halacha_panel_rounds`, [[project_active_learning_panel]]).
---
## 8. שכבת-החשיבות (TaskMaster #153) — חוסם את מסה-ה-cull
**הרקע (אבחון-ייצור 2026-06-20):** 49% מהעקרונות החיים (1,751/3,562) מקורם בפס"ד שדפנה
ציטטה או שמופיע ביומון. דירוג-קונצנזוס לבדו (A) עיוור-לחשיבות ועלול לקבור את ההלכה
שדפנה הסתמכה עליה. לכן **לפני מסה-cull** בונים שכבת-חשיבות שמגנה על הזהב ברמת-העיקרון.
### 8.1 שלוש דרגות-חשיבות (לפי *מי* מצטט/מסמן)
| דרגה | סיגנל | מקור | התנהגות בסינון |
|------|-------|------|----------------|
| **1 — זהב** | דפנה ציטטה / יומון | `precedent_internal_citations` (source.chair_name='דפנה תמיר') · `digests` | **פטור-מגן**: שורד תמיד |
| **2 — הסתמכות-שיפוטית** | יו"ר-אחר ציטט | `precedent_internal_citations` (source.chair_name≠דפנה) | משקל-חשיבות גבוה (לא מגן) |
| **3 — מרכזיות** | ציטוט כללי/צד · instance_count · treatment | citator · `/graph` PageRank | משקל-בסיס |
(אין טבלת bookmarks — היו עוגני-DOCX, לא רלוונטי.)
### 8.2 זיהוי-זהב ברמת-עיקרון (לא ברמת-פסק — קריטי)
דפנה מצטטת פס"ד בשביל **הלכה אחת** ממנו, לא כל ~19 העקרונות. לכן:
- **gold_chair:** מטמיעים את `match_context` (טקסט סביב הציטוט, מאוכלס 100%) → cosine מול
עקרונות הפס"ד-המצוטט → ההתאמה-הטובה ≥ סף (~0.78) מקבלת `gold_chair`.
- **gold_digest:** מטמיעים `digests.headline_holding` → התאמה לעקרונות הפס"ד-המקושר.
- כל התאמה שומרת מקור-הזהב + ציון-התאמה (G9). **חובה להריץ את מחלץ-הציטוטים גם על ~45
ההחלטות של יו"רים-אחרים** כדי לאכלס דרגה 2 (כיום רק 398 ציטוטי-דפנה חולצו).
### 8.3 importance_score רציף (לדירוג + RAG)
`halachot.importance_score`∈[0,1] = משוקלל: דרגה-1 ≫ דרגה-2 ≫ דרגה-3 + סמכות
(עליון 1.0/מחוזי 0.7/ועדה 0.4) penalty(overruled). `importance_signals` jsonb (שקיפות).
משקלים ב-config, ניתני-כיול-יו"ר.
### 8.4 שילוב בסינון (הכרעת chaim: כל-הזהב + עד-5-לא-זהב)
זהב(דרגה-1) → מוגן, שורד ללא תקרה (gold+0-votes→pending_review, כי התאמה עלולה
false-positive). לא-זהב → דירוג `(importance_score, votes, score)`, שומרים עד 5. כלומר
החלטה עם 7 הלכות-זהב תשמור 7+; עם 0 זהב תשמור עד 5.
### 8.5 RAG (הרווח הגדול) + רענון
`importance_score` מבוסט באחזור (`search_precedent_library`/halacha) → הלכות-דפנה+סמכותיות
צפות ראשונות בכתיבה. job רענון תקופתי (יומון/החלטה חדשים → re-match), כמו `corroboration_rebuild`.
> **סדר-ביצוע:** 8 (שכבת-חשיבות) → 3+4 (cull-מוגן) → 5 (סינתזה על הניצולים).