feat(digests): קורפוס יומונים כשכבת-גילוי (radar) — X12 #109

Merged
chaim merged 1 commits from worktree-digests-radar into main 2026-06-07 17:50:07 +00:00
Owner

מה ולמה

מאגר חדש ליומוני "כל יום" (עפר טויסטר) שחיים מקבל כמעט יומית במייל — סיכומי עמוד-אחד של פסקי דין/החלטות בתחום תכנון ובנייה / היטל השבחה / פיצויים(ס'197). הם נקלטים כשכבת-גילוי (radar) מעל קורפוסי-הפסיקה: מקור-משני המצביע על פסק הדין המקורי, נחפש סמנטית, ומקושר לפסק המקורי בספריית הפסיקה — אך לעולם אינו מצוטט בהחלטה ואינו מחלץ הלכות.

תוכנית מלאה: .claude/plans/glimmering-sniffing-storm.md. משימת-אב TaskMaster legal-ai #104.

החלטות שאישר היו"ר: (1) קורפוס נפרד (2) מצביע-מחקר בלבד (3) המקור זמין מיד → קישור digest→precedent (4) קליטה ידנית להתחלה.

Invariants (תבנית PR)

מוסיףX12-digests-radar.md:

  • INV-DIG1 — היומון מצביע, לא מצוטט (אין FK מ-decision_blocks ל-digests; QA דוחה ציטוט שמקורו digest).
  • INV-DIG2 — מסלול-קליטה נפרד-בכוונה (bounded context), לא מסלול-פסיקה מקביל.
  • INV-DIG3 — קישור-לפסק-המקורי הוא הגשר; חוסר-קישור = פער-ידע גלוי (לא נבלע).

מקייםG2 (קורפוס היומונים הוא יכולת חדשה/bounded-context, לא שכפול מסלול-אחזור — טבלה פיזית נפרדת digests), G3 (idempotent upsert על yomon_number/content_hash), G4 (אין בליעה שקטה — פער-קישור מוצף דרך missing_precedent_create), G9 (עקיבוּת — היומון מצביע על מקור עקיב, הציטוט נשען על הפסק).
נוגעG7 (RRF): נדחה לשלב-המשך; חיפוש סמנטי-בלבד כעת (ה-FTS index מוכן ל-RRF עתידי).

שינויים

Phase 0 — spec: docs/spec/X12-digests-radar.md + עדכון אינדקס ב-00-constitution.md §7, סעיף שכבת-גילוי ב-03-retrieval.md, README.md.

Phase 1 — MVP:

  • db.py SCHEMA_V30: טבלת digests + HNSW על embedding (לא ivfflat — נמנע recall-cliff בקורפוס קטן/צומח) + GIN/FTS + UNIQUE חלקי; פונקציות DB (create/get/update/list/link/search_digests_semantic/find_case_law_by_citation_fuzzy).
  • services/digest_metadata_extractor.py — חילוץ-LLM (claude_session local-only, ייבוא lazy): תג-מושג, כותרת-הלכה, מראה-מקום, שני-תאריכים מובחנים, תחום, תגיות.
  • services/digest_library.py — מסלול קצר עצמאי (INV-DIG2): stage→extract→content_hash→LLM→embedding-יחיד→autolink. לא משתמש ב-ingest.ingest_document.
  • tools/digests.py + רישום 7 כלים ב-server.py.
  • scripts/ingest_digests_batch.py (+ data/digests/incoming|processed) + SCRIPTS.md.
  • legal-researcher.md: שלב 2ב.0 (סריקת-radar לפני האימות) + סעיף-דוח ט + 3 כלים ב-frontmatter. HEARTBEAT.md §8: ניתוב יומון→digest_upload.

אימות (עבר )

  • סכמה: V30 הוחלה — 24 עמודות, HNSW + GIN/FTS.
  • קליטה: 4 יומונים (5158/5159/5160/5163) → completed, מטא-דאטה מדויק (5163 ⇐ עת"מ 46111-12-22 יכין-אפק; שני-תאריכים מובחנים; תגיות snake_case).
  • חיפוש סמנטי מדרג נכון: "היטל השבחה"→5160/5159/5158 · "תמא 38"→5158 · "שיקול דעת הוועדה...הקלה"→5163 · "מועד קובע...שימור"→5160 (0.556).
  • קישור: link/relink/autolink/revert + מעטפת-MCP (envelope ok) + רישום 7 כלים ב-FastMCP.
  • autolink: 4 הפסקים המקוריים לא בקורפוס → מסומנים unlinked (פער INV-DIG3 מוצף נכון).

המשך (לא ב-PR זה)

Phase 2 (FastAPI endpoints + דף /digests + api:types) · Phase 3 (אוטומציית Gmail + פיצול העלון החודשי 201 יוני).

🤖 Generated with Claude Code

## מה ולמה מאגר חדש ליומוני **"כל יום"** (עפר טויסטר) שחיים מקבל כמעט יומית במייל — סיכומי עמוד-אחד של פסקי דין/החלטות בתחום תכנון ובנייה / היטל השבחה / פיצויים(ס'197). הם נקלטים כ**שכבת-גילוי (radar)** מעל קורפוסי-הפסיקה: **מקור-משני המצביע** על פסק הדין המקורי, נחפש סמנטית, ומקושר לפסק המקורי בספריית הפסיקה — אך **לעולם אינו מצוטט בהחלטה ואינו מחלץ הלכות**. תוכנית מלאה: `.claude/plans/glimmering-sniffing-storm.md`. משימת-אב TaskMaster `legal-ai` #104. החלטות שאישר היו"ר: (1) קורפוס נפרד (2) מצביע-מחקר בלבד (3) המקור זמין מיד → קישור digest→precedent (4) קליטה ידנית להתחלה. ## Invariants (תבנית PR) **מוסיף** — `X12-digests-radar.md`: - **INV-DIG1** — היומון מצביע, לא מצוטט (אין FK מ-decision_blocks ל-digests; QA דוחה ציטוט שמקורו digest). - **INV-DIG2** — מסלול-קליטה נפרד-בכוונה (bounded context), לא מסלול-פסיקה מקביל. - **INV-DIG3** — קישור-לפסק-המקורי הוא הגשר; חוסר-קישור = פער-ידע גלוי (לא נבלע). **מקיים** — **G2** (קורפוס היומונים הוא יכולת חדשה/bounded-context, לא שכפול מסלול-אחזור — טבלה פיזית נפרדת `digests`), **G3** (idempotent upsert על yomon_number/content_hash), **G4** (אין בליעה שקטה — פער-קישור מוצף דרך missing_precedent_create), **G9** (עקיבוּת — היומון מצביע על מקור עקיב, הציטוט נשען על הפסק). **נוגע** — **G7** (RRF): נדחה לשלב-המשך; חיפוש סמנטי-בלבד כעת (ה-FTS index מוכן ל-RRF עתידי). ## שינויים **Phase 0 — spec:** `docs/spec/X12-digests-radar.md` + עדכון אינדקס ב-`00-constitution.md` §7, סעיף שכבת-גילוי ב-`03-retrieval.md`, `README.md`. **Phase 1 — MVP:** - `db.py` `SCHEMA_V30`: טבלת `digests` + **HNSW** על embedding (לא ivfflat — נמנע recall-cliff בקורפוס קטן/צומח) + GIN/FTS + UNIQUE חלקי; פונקציות DB (create/get/update/list/link/search_digests_semantic/find_case_law_by_citation_fuzzy). - `services/digest_metadata_extractor.py` — חילוץ-LLM (claude_session **local-only**, ייבוא lazy): תג-מושג, כותרת-הלכה, מראה-מקום, **שני-תאריכים מובחנים**, תחום, תגיות. - `services/digest_library.py` — מסלול קצר עצמאי (INV-DIG2): stage→extract→content_hash→LLM→embedding-יחיד→autolink. **לא** משתמש ב-`ingest.ingest_document`. - `tools/digests.py` + רישום 7 כלים ב-`server.py`. - `scripts/ingest_digests_batch.py` (+ `data/digests/incoming|processed`) + `SCRIPTS.md`. - `legal-researcher.md`: שלב **2ב.0** (סריקת-radar לפני האימות) + סעיף-דוח **ט** + 3 כלים ב-frontmatter. `HEARTBEAT.md` §8: ניתוב יומון→`digest_upload`. ## אימות (עבר ✅) - **סכמה:** V30 הוחלה — 24 עמודות, HNSW + GIN/FTS. - **קליטה:** 4 יומונים (5158/5159/5160/5163) → `completed`, מטא-דאטה מדויק (5163 ⇐ `עת"מ 46111-12-22 יכין-אפק`; שני-תאריכים מובחנים; תגיות snake_case). - **חיפוש סמנטי מדרג נכון:** "היטל השבחה"→5160/5159/5158 · "תמא 38"→5158 · "שיקול דעת הוועדה...הקלה"→5163 · "מועד קובע...שימור"→5160 (0.556). - **קישור:** link/relink/autolink/revert + מעטפת-MCP (envelope ok) + רישום 7 כלים ב-FastMCP. - **autolink:** 4 הפסקים המקוריים לא בקורפוס → מסומנים unlinked (פער INV-DIG3 מוצף נכון). ## המשך (לא ב-PR זה) Phase 2 (FastAPI endpoints + דף `/digests` + `api:types`) · Phase 3 (אוטומציית Gmail + פיצול העלון החודשי `201 יוני`). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-07 17:49:57 +00:00
מאגר חדש ליומוני "כל יום" (עפר טויסטר) כשכבת-גילוי מעל קורפוסי-הפסיקה:
מקור-משני המצביע על פסק הדין המקורי, נקלט לטבלה נפרדת `digests`, נחפש
סמנטית, ומקושר לפסק המקורי בספריית הפסיקה — אך לעולם אינו מצוטט בהחלטה
ואינו מחלץ הלכות.

Phase 0 (spec):
- docs/spec/X12-digests-radar.md — INV-DIG1 (מצביע לא מצוטט) /
  INV-DIG2 (מסלול-קליטה נפרד, לא מקביל — מקיים G2) / INV-DIG3 (קישור-לפסק
  הוא הגשר; חוסר-קישור = פער גלוי). עדכון אינדקס 00/03/README.

Phase 1 (MVP):
- SCHEMA_V30: טבלת `digests` (HNSW על embedding — לא ivfflat, להימנע מ-recall
  cliff בקורפוס קטן/צומח) + GIN/FTS + UNIQUE חלקי ל-idempotent.
- services/digest_metadata_extractor.py — חילוץ-LLM (claude_session local-only,
  ייבוא lazy): תג-מושג, כותרת-הלכה, מראה-מקום, שני-תאריכים מובחנים, תגיות.
- services/digest_library.py — מסלול קצר עצמאי (INV-DIG2): extract→hash→LLM→
  embedding יחיד→autolink. לא משתמש ב-ingest.ingest_document.
- tools/digests.py + רישום 7 כלים ב-server.py (digest_upload/list/get/link/
  relink/delete + search_digests).
- scripts/ingest_digests_batch.py — קליטה ידנית מ-data/digests/incoming.
- legal-researcher.md: שלב 2ב.0 (סריקת-radar לפני אימות) + סעיף-דוח ט +
  3 כלים ב-frontmatter. HEARTBEAT §8: ניתוב יומון→digest_upload.

אומת end-to-end: 4 יומונים נקלטו (מטא-דאטה מדויק), חיפוש סמנטי מדרג נכון
("היטל השבחה"→5160, "תמא 38"→5158), link/relink/autolink/revert + מעטפת-MCP.

Invariants: מוסיף INV-DIG1/2/3 (X12). מקיים G2 (bounded context נפרד, לא
מסלול מקביל), G3 (idempotent upsert), G4 (אין בליעה שקטה — פער-קישור מוצף),
G9 (עקיבוּת — היומון מצביע על מקור עקיב). נוגע G7 (RRF) — נדחה, חיפוש
סמנטי-בלבד בשלב 1 (FTS index מוכן).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit 955675eb1f into main 2026-06-07 17:50:07 +00:00
chaim deleted branch worktree-digests-radar 2026-06-07 17:50:07 +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#109