feat(hearing): פאנל "מה קרה בדיון" — חשיפת ניתוח-הפרוטוקול ב-UI (#226) #395

Merged
chaim merged 1 commits from worktree-hearing-changes-panel into main 2026-07-05 12:17:56 +00:00
Owner

מה זה

תוצר analyze_protocol — הניתוח ההשוואתי של פרוטוקול-הדיון מול כתבי-הטענות (אילו טענות התחזקו, אילו נטענו לראשונה, אילו ירדו) — היה שכבת ידע-תיק (protocol_analysis) ללא endpoint וללא תצוגה; נצרך רק downstream ע"י הכותב בבלוק-י. עלה בתיק 1043-02-26 כשחיים שאל "איפה רואים את זה".

פאנל חדש "מה קרה בדיון" בתחתית טאב "טיעונים ועמדות", מתחת לכרטיס-הטיעונים — כי הוא מדבר על אותם טיעונים בגלגולם בדיון. לא טאב-מקביל חדש (INV-IA1).

עיצוב

מוקאפ 27-case-hearing-changes-panel אושר ע"י חיים דרך שער Claude Design (X17, feedback_claude_design_gate). בחירת-המשתמש להצגת-הנוכחים: אפשרות א — persistence + הצגה.

Backend

  • SCHEMA_V51: cases.hearing_attendees JSONB — בית קנוני לנוכחות-בדיון (panel_members / appellants_present / respondents_present), שקודם נחלצו כ-provenance ונזרקו. נבדל סמנטית מ-decisions.panel_members (מותב חותם-ההחלטה, DOCX) → אין מסלול-מקביל (G2; מתועד בהערת-סכמה).
  • protocol_analyzer._extract_header מאכלס אותם; refresh על re-run (מתקן מצב #223), לא דורס עם חילוץ ריק.
  • GET /api/cases/{n}/protocol-analysisheader (תאריך+נוכחים קנוניים) + verdicts מקובצים לפי צד + by_change. קריאה-בלבד, container-safe, ריק≠שגיאה.
  • POST /api/cases/{n}/analyze-protocol — מעיר את המנתח (analyze_protocol מריץ claude מקומי, נעדר בקונטיינר) בדיוק כתבנית aggregate-arguments.
  • מגע-Paperclip רק דרך agent_platform_port (G12): wake_analyst_for_protocol_analysis.

Frontend

  • lib/api/protocol-analysis.ts (hooks קריאה+הרצה) + HearingChangesPanel (סרגל-כותרת דיון, פסי-סינון התחזק/נטען-לראשונה, כרטיסים לפי צד עם "השאלה שהתחדדה" + ציטוט-ראיה).
  • חיווט לטאב arguments מתחת ל-LegalArgumentsPanel.

Invariants

  • G2 — בית קנוני יחיד ל-attendees, נבדל מ-panel_members; אין מסלול-תצוגה מקביל.
  • G1 — נרמול-במקור (persistence ב-_extract_header, לא בקריאה).
  • G12 — כל מגע-Paperclip בשער-הפלטפורמה.
  • INV-IA1 — הפאנל בטאב קיים, לא טאב-מקביל.
  • INV-AHevidence_quote (quote-or-retract) כבר נאכף במקור ב-_normalize_change.

אימות

  • py_compile (app.py, paperclip_client, agent_platform_port, db, protocol_analyzer) ✓
  • tsc --noEmit ✓ · eslint (קבצים חדשים+page) ✓
  • runtime של ה-endpoint = post-deploy (אין uvicorn מקומי; המיגרציה ALTER … IF NOT EXISTS תואמת-לאחור ותרוץ ב-startup). אימות מתוכנן: curl /api/cases/1043-02-26/protocol-analysis אחרי deploy.
  • npm run api:types — לא רץ (ה-endpoints טרם חיים בפרוד); המודול לא צורך את types.ts. לריענון post-deploy.

🤖 Generated with Claude Code

## מה זה תוצר `analyze_protocol` — הניתוח ההשוואתי של פרוטוקול-הדיון מול כתבי-הטענות (אילו טענות **התחזקו**, אילו **נטענו לראשונה**, אילו **ירדו**) — היה שכבת ידע-תיק (`protocol_analysis`) **ללא endpoint וללא תצוגה**; נצרך רק downstream ע"י הכותב בבלוק-י. עלה בתיק 1043-02-26 כשחיים שאל "איפה רואים את זה". פאנל חדש **"מה קרה בדיון"** בתחתית טאב **"טיעונים ועמדות"**, מתחת לכרטיס-הטיעונים — כי הוא מדבר על אותם טיעונים בגלגולם בדיון. **לא** טאב-מקביל חדש (INV-IA1). ## עיצוב מוקאפ `27-case-hearing-changes-panel` **אושר ע"י חיים** דרך שער Claude Design (X17, feedback_claude_design_gate). בחירת-המשתמש להצגת-הנוכחים: **אפשרות א — persistence + הצגה**. ## Backend - **`SCHEMA_V51`**: `cases.hearing_attendees JSONB` — בית קנוני לנוכחות-בדיון (`panel_members` / `appellants_present` / `respondents_present`), שקודם נחלצו כ-provenance ונזרקו. **נבדל סמנטית** מ-`decisions.panel_members` (מותב חותם-ההחלטה, DOCX) → אין מסלול-מקביל (**G2**; מתועד בהערת-סכמה). - `protocol_analyzer._extract_header` מאכלס אותם; refresh על re-run (מתקן מצב #223), לא דורס עם חילוץ ריק. - **GET** `/api/cases/{n}/protocol-analysis` — `header` (תאריך+נוכחים קנוניים) + verdicts מקובצים לפי צד + `by_change`. קריאה-בלבד, container-safe, ריק≠שגיאה. - **POST** `/api/cases/{n}/analyze-protocol` — מעיר את המנתח (analyze_protocol מריץ `claude` מקומי, נעדר בקונטיינר) בדיוק כתבנית `aggregate-arguments`. - מגע-Paperclip **רק דרך `agent_platform_port`** (**G12**): `wake_analyst_for_protocol_analysis`. ## Frontend - `lib/api/protocol-analysis.ts` (hooks קריאה+הרצה) + `HearingChangesPanel` (סרגל-כותרת דיון, פסי-סינון התחזק/נטען-לראשונה, כרטיסים לפי צד עם "השאלה שהתחדדה" + ציטוט-ראיה). - חיווט לטאב `arguments` מתחת ל-`LegalArgumentsPanel`. ## Invariants - **G2** — בית קנוני יחיד ל-attendees, נבדל מ-panel_members; אין מסלול-תצוגה מקביל. - **G1** — נרמול-במקור (persistence ב-`_extract_header`, לא בקריאה). - **G12** — כל מגע-Paperclip בשער-הפלטפורמה. - **INV-IA1** — הפאנל בטאב קיים, לא טאב-מקביל. - **INV-AH** — `evidence_quote` (quote-or-retract) כבר נאכף במקור ב-`_normalize_change`. ## אימות - `py_compile` (app.py, paperclip_client, agent_platform_port, db, protocol_analyzer) ✓ - `tsc --noEmit` ✓ · `eslint` (קבצים חדשים+page) ✓ - **runtime של ה-endpoint** = post-deploy (אין uvicorn מקומי; המיגרציה `ALTER … IF NOT EXISTS` תואמת-לאחור ותרוץ ב-startup). אימות מתוכנן: `curl /api/cases/1043-02-26/protocol-analysis` אחרי deploy. - `npm run api:types` — לא רץ (ה-endpoints טרם חיים בפרוד); המודול לא צורך את `types.ts`. לריענון post-deploy. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-07-05 12:17:44 +00:00
feat(hearing): פאנל "מה קרה בדיון" — חשיפת ניתוח-הפרוטוקול ב-UI (#226)
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 59s
Lint — undefined names / undefined-names (pull_request) Successful in 10s
ab5d34a9d3
תוצר analyze_protocol (איך הטענות הכתובות התפתחו בדיון בעל-פה) היה שכבת
ידע-תיק ללא endpoint ותצוגה — נצרך רק downstream ע"י הכותב בבלוק-י. פאנל חדש
בתחתית טאב "טיעונים ועמדות", מתחת לכרטיס-הטיעונים (INV-IA1: לא טאב-מקביל).

Backend:
- SCHEMA_V51: cases.hearing_attendees JSONB — בית קנוני לנוכחות-בדיון
  (panel_members/appellants_present/respondents_present). נבדל סמנטית
  מ-decisions.panel_members (מותב חותם-ההחלטה) → אין מסלול-מקביל (G2).
- protocol_analyzer._extract_header: מאכלס hearing_attendees; refresh על re-run
  (מתקן #223), לא דורס עם חילוץ ריק. אישור-משתמש: "אפשרות א" (persist+הצגה).
- GET /api/cases/{n}/protocol-analysis — header (תאריך+נוכחים קנוניים) + verdicts
  מקובצים לפי צד. קריאה-בלבד, container-safe, ריק≠שגיאה.
- POST /api/cases/{n}/analyze-protocol — מעיר את המנתח (analyze_protocol מריץ
  claude מקומי, נעדר בקונטיינר) כתבנית aggregate-arguments.
- מגע-Paperclip רק דרך agent_platform_port (G12): wake_analyst_for_protocol_analysis.

Frontend:
- lib/api/protocol-analysis.ts (hooks read+trigger) + HearingChangesPanel
  (סרגל-כותרת, פסי-סינון התחזק/נטען-לראשונה, כרטיסים לפי צד, ציטוט-ראיה).
- חיווט לטאב arguments מתחת ל-LegalArgumentsPanel.

עיצוב: מוקאפ 27-case-hearing-changes-panel אושר ע"י חיים דרך שער Claude Design (X17).
Invariants: מקיים G2 (בית קנוני יחיד, לא מסלול-מקביל), G1 (נרמול-במקור),
G12 (שער-הפלטפורמה), INV-IA1 (לא טאב-מקביל), INV-AH (evidence_quote כבר נאכף במקור).
אימות: py_compile + tsc --noEmit + eslint ירוקים; runtime של ה-endpoint = post-deploy.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit 0d0631fea5 into main 2026-07-05 12:17:56 +00:00
chaim deleted branch worktree-hearing-changes-panel 2026-07-05 12:17:56 +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#395