feat(analysis): analyze_protocol — ניתוח פרוטוקול-דיון השוואתי (WS4 #203) #357

Merged
chaim merged 2 commits from worktree-agent-aefd5594d532d9f06 into main 2026-06-30 12:12:05 +00:00
Owner

מה ולמה

WS4 / TaskMaster legal-ai #203 (יוזמת עיצוב-מחדש זרימת-העבודה). כלי MCP חדש
analyze_protocol שמנתח פרוטוקול-דיון (doc_type='protocol') מול כתבי-הטענות:
אילו טענות ירדו (נזנחו בדיון) / חוזקו / עלו חדשות, ומחדד את השאלות
המשפטיות לקראת פרק הדיון. בנוסף מחלץ את נתוני הכותרת א–ד מהפרוטוקול (הרכב,
תאריך-דיון, צדדים שהופיעו) בפורמט-ההזנה המוכר. התוצאה נכנסת לידע-התיק, זמינה
לסוכני הניתוח והכתיבה.

מה נכלל

  • services/protocol_analyzer.py (חדש) — ניתוח השוואתי דרך claude_session
    (מקומי בלבד), מעוגן model="claude-opus-4-8" + effort="high"
    (reference_claude_generation_path). שער anti-hallucination (_normalize_change):
    רשומה ללא evidence_quote מילולי נדחית במקור. חילוץ א–ד + הזנת hearing_date
    חזרה ל-cases.hearing_date (לא דורס תאריך שהיו"ר מילא).
  • claims_extractor — הורחב לפרוטוקול: claim_type='protocol'; extract_claims
    קולט גם doc_type='protocol'.
  • block_writer._build_claims_context — מחריג claim_type='protocol' מהקשר בלוק ז
    כדי שבלוק ז יישאר טענות-כתב מקוריות בלבד (INV-WR4); טענות-הדיון → בלוק ח + ידע-התיק.
  • db — טבלת protocol_analysis (V47, idempotent per document_id) + replace_/list_.
  • tools/drafting + serveranalyze_protocol + get_protocol_analysis
    (סימטריית extract/get, INV-TOOL4).
  • ספdocs/spec/04-analysis-writing.md §1.3 + 15 בדיקות ב-test_protocol_analyzer.py.

היכן נשמר ידע-התיק

טבלת protocol_analysis (case-knowledge נגזר: מקור-האמת הוא הפרוטוקול +
legal_arguments; הרשומה היא השוואה מטוריאליזת בת-שחזור, לא טבלת-טענות מקבילה).
hearing_date נכתב לעמודה הקנונית cases.hearing_date.

Invariants — הצהרה (חובה)

  • נוגע / מקיים:
    • G1 (נרמול-במקור) — hearing_date מהפרוטוקול נכתב לעמודה הקנונית cases.hearing_date, לא תיקון-קריאה; לא דורס קלט-יו"ר.
    • G2 (מקור-אמת יחיד) — protocol_analysis היא ידע נגזר מ-protocol+legal_arguments, לא מסלול/טבלת-טענות מקבילה; קריאת הטיעונים דרך מסלול-ה-aggregator היחיד.
    • INV-TOOL3 (idempotency) — replace_protocol_analysis מחליף per document_id (re-run לא מכפיל).
    • INV-TOOL4 (extract/get symmetry) — analyze_protocolget_protocol_analysis.
    • INV-AH (anti-hallucination, quote-or-retract) — כל רשומה דורשת evidence_quote מילולי; נדחית במקור אחרת.
    • INV-WR4 (בלוק ז = טענות מקוריות בלבד) — טענות-פרוטוקול מתויגות ומוחרגות מהקשר בלוק ז.
    • claude_session local-only — קריאת-ה-LLM היחידה דרך claude_session, מקומי בלבד.
    • G12 (שער-הפלטפורמה) — mcp-server/src נקי מ-Paperclip; test_platform_port_leak_guard עובר.

צ'קליסט — פרוטוקול כתיבת-קוד

  • קראתי את docs/spec/00-constitution.md + 04-analysis-writing.md + X9 לפני הכתיבה
  • השינוי לא יוצר מסלול מקביל ליכולת קיימת (G2) ולא מתקן תסמין בקריאה (G1)
  • לא הוספתי מגע-Paperclip מחוץ ל-Platform Port (G12) — mcp-server/src נקי (leak-guard עובר)
  • אין בליעה שקטה — חילוץ-כותרת שנכשל מסומן header_failed/warning, לא bare except
  • בדקתי מול gap-audit.md — אין GAP/FU ממופה לפיצ'ר זה (WS4 הוא יכולת חדשה)
  • בדיקות עוברות — 15 חדשות + leak-guards; py_compile + import server נקי
  • data-migration — רק קוד idempotent (SCHEMA_V47); לא הורץ מול ה-DB המשותף (יחול ב-deploy)

אימות

  • py_compile על כל הקבצים שנגעתי בהם — נקי.
  • PYTHONPATH=src pytest tests/test_protocol_analyzer.py tests/test_platform_port_leak_guard.py tests/test_storage_write_leak_guard.py tests/test_export_qa_gate.py tests/test_chunker_section_patterns.pyכולן עוברות.
  • import legal_mcp.server נקי; analyze_protocol + get_protocol_analysis רשומים; ANALYSIS_MODEL=claude-opus-4-8, effort=high.
  • אזהרה: migration SCHEMA_V47 לא הורצה מול Postgres המשותף — תחול אוטומטית ב-deploy (_apply_schema_ddl).
  • מעקב: הענקת analyze_protocol/get_protocol_analysis לסוכני analyst/CEO ב-Paperclip (sync_agents) — שלב-deploy נפרד, מחוץ לתחום ה-PR.

🤖 Generated with Claude Code

## מה ולמה WS4 / TaskMaster `legal-ai` #203 (יוזמת עיצוב-מחדש זרימת-העבודה). כלי MCP חדש `analyze_protocol` שמנתח פרוטוקול-דיון (`doc_type='protocol'`) **מול כתבי-הטענות**: אילו טענות **ירדו** (נזנחו בדיון) / **חוזקו** / **עלו חדשות**, ומחדד את השאלות המשפטיות לקראת פרק הדיון. בנוסף מחלץ את נתוני הכותרת **א–ד** מהפרוטוקול (הרכב, תאריך-דיון, צדדים שהופיעו) בפורמט-ההזנה המוכר. התוצאה נכנסת ל**ידע-התיק**, זמינה לסוכני הניתוח והכתיבה. ### מה נכלל - **`services/protocol_analyzer.py`** (חדש) — ניתוח השוואתי דרך `claude_session` (מקומי בלבד), מעוגן `model="claude-opus-4-8"` + `effort="high"` (`reference_claude_generation_path`). שער anti-hallucination (`_normalize_change`): רשומה ללא `evidence_quote` מילולי נדחית **במקור**. חילוץ א–ד + הזנת `hearing_date` חזרה ל-`cases.hearing_date` (לא דורס תאריך שהיו"ר מילא). - **`claims_extractor`** — הורחב לפרוטוקול: `claim_type='protocol'`; `extract_claims` קולט גם `doc_type='protocol'`. - **`block_writer._build_claims_context`** — מחריג `claim_type='protocol'` מהקשר בלוק ז כדי שבלוק ז יישאר **טענות-כתב מקוריות בלבד** (INV-WR4); טענות-הדיון → בלוק ח + ידע-התיק. - **`db`** — טבלת `protocol_analysis` (V47, idempotent per `document_id`) + `replace_/list_`. - **`tools/drafting` + `server`** — `analyze_protocol` + `get_protocol_analysis` (סימטריית extract/get, INV-TOOL4). - **ספ** — `docs/spec/04-analysis-writing.md` §1.3 + **15 בדיקות** ב-`test_protocol_analyzer.py`. ### היכן נשמר ידע-התיק טבלת `protocol_analysis` (case-knowledge **נגזר**: מקור-האמת הוא הפרוטוקול + `legal_arguments`; הרשומה היא השוואה מטוריאליזת בת-שחזור, לא טבלת-טענות מקבילה). `hearing_date` נכתב לעמודה הקנונית `cases.hearing_date`. ## Invariants — הצהרה (חובה) - **נוגע / מקיים:** - **G1** (נרמול-במקור) — `hearing_date` מהפרוטוקול נכתב לעמודה הקנונית `cases.hearing_date`, לא תיקון-קריאה; לא דורס קלט-יו"ר. - **G2** (מקור-אמת יחיד) — `protocol_analysis` היא ידע **נגזר** מ-`protocol`+`legal_arguments`, לא מסלול/טבלת-טענות מקבילה; קריאת הטיעונים דרך מסלול-ה-aggregator היחיד. - **INV-TOOL3** (idempotency) — `replace_protocol_analysis` מחליף per `document_id` (re-run לא מכפיל). - **INV-TOOL4** (extract/get symmetry) — `analyze_protocol` ↔ `get_protocol_analysis`. - **INV-AH** (anti-hallucination, quote-or-retract) — כל רשומה דורשת `evidence_quote` מילולי; נדחית במקור אחרת. - **INV-WR4** (בלוק ז = טענות מקוריות בלבד) — טענות-פרוטוקול מתויגות ומוחרגות מהקשר בלוק ז. - **claude_session local-only** — קריאת-ה-LLM היחידה דרך `claude_session`, מקומי בלבד. - **G12** (שער-הפלטפורמה) — `mcp-server/src` נקי מ-Paperclip; `test_platform_port_leak_guard` עובר. ## צ'קליסט — פרוטוקול כתיבת-קוד - [x] קראתי את `docs/spec/00-constitution.md` + `04-analysis-writing.md` + `X9` לפני הכתיבה - [x] השינוי **לא** יוצר מסלול מקביל ליכולת קיימת (G2) ולא מתקן תסמין בקריאה (G1) - [x] **לא** הוספתי מגע-Paperclip מחוץ ל-Platform Port (G12) — `mcp-server/src` נקי (leak-guard עובר) - [x] אין בליעה שקטה — חילוץ-כותרת שנכשל מסומן `header_failed`/`warning`, לא bare except - [x] בדקתי מול `gap-audit.md` — אין GAP/FU ממופה לפיצ'ר זה (WS4 הוא יכולת חדשה) - [x] בדיקות עוברות — 15 חדשות + leak-guards; `py_compile` + import server נקי - [ ] data-migration — **רק קוד idempotent** (SCHEMA_V47); **לא** הורץ מול ה-DB המשותף (יחול ב-deploy) ## אימות - `py_compile` על כל הקבצים שנגעתי בהם — נקי. - `PYTHONPATH=src pytest tests/test_protocol_analyzer.py tests/test_platform_port_leak_guard.py tests/test_storage_write_leak_guard.py tests/test_export_qa_gate.py tests/test_chunker_section_patterns.py` → **כולן עוברות**. - `import legal_mcp.server` נקי; `analyze_protocol` + `get_protocol_analysis` רשומים; `ANALYSIS_MODEL=claude-opus-4-8`, `effort=high`. - אזהרה: migration `SCHEMA_V47` **לא** הורצה מול Postgres המשותף — תחול אוטומטית ב-deploy (`_apply_schema_ddl`). - מעקב: הענקת `analyze_protocol`/`get_protocol_analysis` לסוכני analyst/CEO ב-Paperclip (sync_agents) — שלב-deploy נפרד, מחוץ לתחום ה-PR. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-30 11:22:26 +00:00
feat(analysis): analyze_protocol — comparative hearing-protocol analysis (WS4 #203)
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 4s
Lint — undefined names / undefined-names (pull_request) Successful in 10s
24e3e2fe80
מנתח פרוטוקול-דיון מול כתבי-הטענות: אילו טענות ירדו/חוזקו/עלו-חדשות + חידוד
שאלות משפטיות, ומחלץ נתוני כותרת (א–ד). התוצאה נכנסת לידע-התיק.

- protocol_analyzer.py — ניתוח השוואתי דרך claude_session (Opus 4.8, effort=high,
  מקומי בלבד); שער anti-hallucination (quote-or-retract) ב-_normalize_change;
  חילוץ א–ד + הזנת hearing_date חזרה ל-cases (לא דורס קלט-יו"ר).
- claims_extractor: protocol → claim_type='protocol'; extract_claims קולט protocol.
- block_writer._build_claims_context מחריג claim_type='protocol' מבלוק ז (INV-WR4).
- db: טבלת protocol_analysis (V47, idempotent per-doc) + replace/list helpers.
- tools/drafting + server: analyze_protocol + get_protocol_analysis (extract/get).
- ספ 04-analysis-writing §1.3 + 15 בדיקות.

Invariants: G1 (נרמול-במקור: hearing_date לעמודה הקנונית), G2 (ידע-תיק נגזר
ממקור-האמת protocol+legal_arguments, לא מסלול מקביל), INV-TOOL3 (idempotent
per document_id), INV-TOOL4 (extract/get symmetry), INV-AH (quote-or-retract),
INV-WR4 (בלוק ז = טענות-כתב מקוריות בלבד), claude_session local-only, G12 (נקי
מ-Paperclip — leak-guard עובר).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim added 1 commit 2026-06-30 12:10:38 +00:00
Merge remote-tracking branch 'origin/main' into rebase-357
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 4s
Lint — undefined names / undefined-names (pull_request) Successful in 10s
8d704e6e40
# Conflicts:
#	mcp-server/src/legal_mcp/services/db.py
chaim merged commit 33b36e38ee into main 2026-06-30 12:12:05 +00:00
chaim deleted branch worktree-agent-aefd5594d532d9f06 2026-06-30 12:12:05 +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#357