feat(principles): עיצוב-מחדש עקרונות משפטיים — פאנל-3, תקרת-5, סינון רטרואקטיבי, סינתזה, טרמינולוגיה (#152) #304

Merged
chaim merged 4 commits from worktree-canonical-synthesis into main 2026-06-19 11:17:06 +00:00
Owner

רקע

הקורפוס תפח ל-5,243 "הלכות" (18.8/החלטה, 1,820 מהחלטות ועדת-הערר עצמה) — מודל מושגי שגוי: ועדת ערר מיישמת דין, אינה יוצרת הלכה. החלטת chaim 2026-06-19. מקור-אמת: docs/legal-principles-redesign.md, TaskMaster legal-ai #152.

מה ה-PR עושה (5 פאזות)

  • A — מודל-הצבעות משותף (services/panel_judges, services/panel_extraction): 3 מודלים (Claude מקומי + DeepSeek + Gemini) → התאמה בין-מודלית (cosine) → votes + score=ממוצע-המצביעים → כלל-אישור: 3 קולות→אישור · 2+≥0.85→אישור · 2+<0.85→יו"ר · ≤1→drop.
  • B — רף-להבא (halacha_extractor._extract_via_panel, db.store_panel_principles): חילוץ ברמת-החלטה דרך הפאנל; דדופ מול הקורפוס (מוכר→קישור, משחרר סלוט); תקרת 5 חדשים/החלטה לפי ציון. מחליף auto-approve חד-מודלי (legacy = fallback כש<2 שופטים). אומת dry-run: 29468-08-23 ‏~18→4.
  • C — סינון רטרואקטיבי (scripts/cull_principles.py): אותו משטר על 5,243 הקיימים, הפיך (גיבוי-CSV + canonical→rejected). אומת dry-run: 37→15.
  • D — טרמינולוגיה (services/principles.py): תווית נגזרת-מקור — הלכה (פס"ד מחוזי/עליון) · כלל פרשני (ועדת ערר) · עיקרון (משכנע); מטרייה "עקרונות משפטיים". מחווט ל-canonical_halacha_get/list. שינויי-מחרוזות-UI נדחו לשער Claude Design.
  • E — סינתזה (services/canonical_synthesis, scripts/backfill_canonical_synthesis): מעוגן (INV-AH) + שער-drift + שער-יו"ר. אין קוד נוסף — מטרגט pending_synthesis, שהסינון משאיר רק על הניצולים.

Invariants

מקיים INV-LRN6/LRN7 (חדשים), G10/INV-LRN1 (כל מקרה-גבול→יו"ר; אף auto-approve), INV-AH (עיגון), G2 (מסלול-פאנל יחיד ל-extractor+cull), G9 (audit-trail: reviewer=panel + CSV).

בדיקות

428 ירוקות (34 חדשות: panel core, selection, cull cap, terminology, synthesis).

⚠️ שערים אנושיים לפני הפעלה מלאה (לא בוצעו אוטומטית)

  1. מיזוג — מפעיל את משטר-הפאנל בייצור (HALACHA_PANEL_REGIME_ENABLED=true).
  2. סינון מלא cull_principles.py --apply על 5,243 — חיתוך דרמטי (~279 החלטות × ≤5). הפיך, אך דורש אישור-יו"ר + כיול HALACHA_PANEL_MATCH_COSINE מול gold-set.
  3. סינתזה מלאה על הניצולים.

🤖 Generated with Claude Code

## רקע הקורפוס תפח ל-**5,243 "הלכות"** (18.8/החלטה, 1,820 מהחלטות ועדת-הערר עצמה) — מודל מושגי שגוי: ועדת ערר **מיישמת** דין, אינה יוצרת הלכה. החלטת chaim 2026-06-19. מקור-אמת: [`docs/legal-principles-redesign.md`](docs/legal-principles-redesign.md), TaskMaster `legal-ai` #152. ## מה ה-PR עושה (5 פאזות) - **A — מודל-הצבעות משותף** (`services/panel_judges`, `services/panel_extraction`): 3 מודלים (Claude מקומי + DeepSeek + Gemini) → התאמה בין-מודלית (cosine) → `votes` + `score`=ממוצע-המצביעים → כלל-אישור: 3 קולות→אישור · 2+≥0.85→אישור · 2+<0.85→יו"ר · ≤1→drop. - **B — רף-להבא** (`halacha_extractor._extract_via_panel`, `db.store_panel_principles`): חילוץ ברמת-החלטה דרך הפאנל; דדופ מול הקורפוס (מוכר→קישור, משחרר סלוט); תקרת **5 חדשים/החלטה** לפי ציון. מחליף auto-approve חד-מודלי (legacy = fallback כש<2 שופטים). אומת dry-run: 29468-08-23 ‏~18→4. - **C — סינון רטרואקטיבי** (`scripts/cull_principles.py`): אותו משטר על 5,243 הקיימים, **הפיך** (גיבוי-CSV + canonical→rejected). אומת dry-run: 37→15. - **D — טרמינולוגיה** (`services/principles.py`): תווית נגזרת-מקור — **הלכה** (פס"ד מחוזי/עליון) · **כלל פרשני** (ועדת ערר) · **עיקרון** (משכנע); מטרייה "עקרונות משפטיים". מחווט ל-`canonical_halacha_get/list`. *שינויי-מחרוזות-UI נדחו לשער Claude Design.* - **E — סינתזה** (`services/canonical_synthesis`, `scripts/backfill_canonical_synthesis`): מעוגן (INV-AH) + שער-drift + שער-יו"ר. **אין קוד נוסף** — מטרגט `pending_synthesis`, שהסינון משאיר רק על הניצולים. ## Invariants מקיים **INV-LRN6/LRN7** (חדשים), **G10/INV-LRN1** (כל מקרה-גבול→יו"ר; אף auto-approve), **INV-AH** (עיגון), **G2** (מסלול-פאנל יחיד ל-extractor+cull), **G9** (audit-trail: reviewer=panel + CSV). ## בדיקות **428 ירוקות** (34 חדשות: panel core, selection, cull cap, terminology, synthesis). ## ⚠️ שערים אנושיים לפני הפעלה מלאה (לא בוצעו אוטומטית) 1. **מיזוג** — מפעיל את משטר-הפאנל בייצור (`HALACHA_PANEL_REGIME_ENABLED=true`). 2. **סינון מלא** `cull_principles.py --apply` על 5,243 — חיתוך דרמטי (~279 החלטות × ≤5). הפיך, אך **דורש אישור-יו"ר** + כיול `HALACHA_PANEL_MATCH_COSINE` מול gold-set. 3. **סינתזה מלאה** על הניצולים. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 4 commits 2026-06-19 11:16:32 +00:00
Grounded (INV-AH) multi-instance synthesis with drift guard + chair gate
(pending_review, G10). Single path used by backfill, MCP tool, nightly drain.
HELD from production run pending the principles-redesign (rename+cull, #152).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
services/panel_judges (shared 3-judge primitive, G2 — lifted from
halacha_panel_approve) + services/panel_extraction (3 models propose →
cross-model cosine clustering → votes + mean-score → chair's approval rule:
3 votes→approve · 2+≥0.85→approve · 2+<0.85→chair · ≤1→drop). Config
HALACHA_PANEL_*. Gemini thinkingBudget=0 + claude tools='' fixes. Design doc
docs/legal-principles-redesign.md; spec INV-LRN6; 21 unit tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
extract() routes to _extract_via_panel when HALACHA_PANEL_REGIME_ENABLED: the
3-model panel proposes → votes/score → approval rule → dedup vs corpus (known
links as citation, frees a cap slot) → cap HALACHA_PANEL_MAX_NEW genuinely-new
principles/decision (by score), rest dropped. Replaces single-model auto-approve;
legacy path kept as <2-judge fallback. db.store_panel_principles persists the
pre-decided verdict + source-aware canonical create/link (G9 reviewer=panel:...).
Dry-run validated on 29468-08-23: ~18 → 4 principles. 6 new tests; full suite 422 green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(principles): retroactive cull (Phase C) + source-derived terminology (Phase D, #152)
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 4s
Lint — undefined names / undefined-names (pull_request) Successful in 11s
4ca907b97f
Phase C — scripts/cull_principles.py: re-adjudicates every existing 'original'
principle with the SAME panel regime (panel_keep_score → classify → apply_cap),
reversible (CSV backup + rejected canonical recoverable), usage-throttled.
panel_extraction.panel_keep_score + apply_cap (shared, G2). Dry-run on 3
decisions: 37→15 survive.

Phase D — services/principles.py: source-derived label הלכה (binding court) /
כלל פרשני (committee) / עיקרון (persuasive); umbrella עקרונות משפטיים. Wired into
canonical_halacha_get/list (principle_class+principle_label). UI string changes
deferred to the Claude Design gate. spec INV-LRN7; SCRIPTS.md; 7 new tests; 428 green.

Phase E needs no new code — synthesis already targets pending_synthesis, which the
cull leaves only on survivors (rejected canonicals → 'rejected').

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit ffa02ca83c into main 2026-06-19 11:17:06 +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#304