FU-2b: internal case_number reconciliation tooling (GAP-07/08) #15

Merged
chaim merged 6 commits from fix/fu2b-identifier-reconciliation into main 2026-05-31 08:59:14 +00:00
Owner

Summary

כלי-מיגרציה chair-gated הפיך לתיאום case_number של internal_committee מציטוט-מלא למספר-בסיס קנוני (X1: trim·prefix-strip·/-, חודש נשמר). מספק INV-ID1/ID2/DM2.

  • scripts/fu2b_reconcile_internal_case_numbers.py — דטרמיניסטי (token יחיד; 0/>1 → flag, לא ניחוש). --dry-run (ברירת-מחדל) מפיק טבלת-תיאום ל-data/audit/. --apply --approved <csv> מגבה ואז מעדכן רק שורות מאושרות-יו"ר.
  • citation_formatted לא משתנה (כבר תקין; 0 סתירות ב-internal).
  • flags לסקירת-יו"ר: DUP_CHECK (8047-23: ערר מול בל"מ), PROC_MISMATCH (קידומת בל"מ מול proceeding_type=ערר — 2 שורות), MISMATCH/MULTI_NUMBER/NO_NUMBER (0 כל אחד).
  • 10 בדיקות-יחידה offline; חבילה מלאה 111 passed.

מה ה-PR מספק (ומה לא)

ה-PR מספק את הכלי + הבדיקות. ה-dry-run הורץ → 56 שורות, will_change=56, 4 flagged. ה-apply בייצור רץ רק אחרי שדפנה מאשרת את הטבלה (שער-אנושי, לא חלק מהמיזוג). external מופרד ל-#68.

Safety

  • FK-safe: כל 11 ה-FKs של case_law מצביעים ל-id (UUID), לא ל-case_number.
  • הפיך: גיבוי (id, old_case_number) לפני כל UPDATE.
  • scope-guard: AND source_kind='internal_committee' ב-UPDATE.

🤖 Generated with Claude Code

## Summary כלי-מיגרציה **chair-gated הפיך** לתיאום `case_number` של `internal_committee` מציטוט-מלא למספר-בסיס קנוני (X1: trim·prefix-strip·`/`→`-`, **חודש נשמר**). מספק INV-ID1/ID2/DM2. - **`scripts/fu2b_reconcile_internal_case_numbers.py`** — דטרמיניסטי (token יחיד; 0/>1 → flag, לא ניחוש). `--dry-run` (ברירת-מחדל) מפיק טבלת-תיאום ל-`data/audit/`. `--apply --approved <csv>` מגבה ואז מעדכן **רק שורות מאושרות-יו"ר**. - **citation_formatted לא משתנה** (כבר תקין; 0 סתירות ב-internal). - **flags לסקירת-יו"ר:** DUP_CHECK (8047-23: ערר מול בל"מ), PROC_MISMATCH (קידומת בל"מ מול proceeding_type=ערר — 2 שורות), MISMATCH/MULTI_NUMBER/NO_NUMBER (0 כל אחד). - 10 בדיקות-יחידה offline; חבילה מלאה 111 passed. ## מה ה-PR מספק (ומה לא) ה-PR מספק את **הכלי + הבדיקות**. ה-dry-run הורץ → 56 שורות, will_change=56, 4 flagged. ה-**apply בייצור רץ רק אחרי שדפנה מאשרת את הטבלה** (שער-אנושי, לא חלק מהמיזוג). external מופרד ל-#68. ## Safety - FK-safe: כל 11 ה-FKs של case_law מצביעים ל-`id` (UUID), לא ל-case_number. - הפיך: גיבוי `(id, old_case_number)` לפני כל UPDATE. - scope-guard: `AND source_kind='internal_committee'` ב-UPDATE. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 6 commits 2026-05-31 08:59:13 +00:00
Deterministic migration of ~52 internal_committee rows whose case_number holds
a full citation → normalized bare number (citation_formatted already correct).
DB analysis (2026-05-31): clean 1-token extraction, 0 key-collisions, 0
citation↔case_number mismatches, no month-padding dups. Chair-gated reversible
migration (backup→dry-run→approve→apply). One edge for chair: 8047/23 ערר vs בל"מ.
External (#68/FU-2c) split out — its citation_formatted is inconsistent.
Verified all 11 case_law FKs use id(UUID), not case_number → rename is FK-safe.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Dry-run surfaced 2 rows with בל"מ prefix but proceeding_type=ערר. Since the
migration strips the prefix, a wrong proceeding_type would silently lose the
בל"מ signal — must be chair-adjudicated, not auto-applied. Chair table now
flags 4 rows: 2 DUP_CHECK (8047-23) + 2 PROC_MISMATCH.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit 43873adc90 into main 2026-05-31 08:59:14 +00:00
chaim deleted branch fix/fu2b-identifier-reconciliation 2026-05-31 08:59:14 +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#15