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

9.0 KiB
Raw Blame History

עיצוב-מחדש: עקרונות משפטיים (לשעבר "הלכות")

מקור-ההחלטה: 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. אלגוריתם-החילוץ החדש (חל על שני המקורות)

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 (סינתזה על הניצולים).