feat(arguments): הפרדת-משיבים בצבירה לפי כתב-תשובה (#224)
הצבירה קיבצה את כל המשיבים תחת מפלגה אחת "respondent", כך שכתבי-תשובה נפרדים (משיבות 2-3 מול משיבים 4-6) עם עמדות שעלולות להיות מנוגדות נבלעו לרשימה אחת. התגלה בתיק 1043-02-26. השינוי מפצל את הצדדים הרב-משתתפים (respondent/permit_applicant) לפי source_document — כל כתב-תשובה משותף = יחידת-ליטיגציה קוהרנטית נפרדת — ומאחסן את התווית ב-legal_arguments.party_name (מיגרציה V50). עוררים/ועדה נשארים קבוצה יחידה. בונוס: פיצול ה-129 טענות ל-קריאות-Claude קטנות מתקן את הכשל-בשקט המקורי (קריאה של 100+ פרופוזיציות החזירה non-JSON והפילה את כל הצד). - db.py: SCHEMA_V50_SQL — legal_arguments.party_name (ADD COLUMN IF NOT EXISTS, אידמפוטנטי) - argument_aggregator: קיבוץ (party, party_name); _build_prompt מקבל שם-כתב; SELECT מחזיר party_name - UI: PartySection מתת-קבץ לפי כתב-תשובה; טיפוס LegalArgument.party_name טווח v1: הקיבוץ לפי source_document; אכלוס party_name ב-extractor וזיהוי עמדות-מנוגדות בבלוק ז/י — המשך ב-#224. Invariants: G1 (נרמול-במקור — party_name בסכמה, לא תיקון-בקריאה) · G2 (אין מסלול-צבירה מקביל, אותו pipeline) · §6 (אין בליעה שקטה — הכשל-בשקט תוקן). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1888,6 +1888,18 @@ CREATE INDEX IF NOT EXISTS idx_documents_claims_pending
|
||||
"""
|
||||
|
||||
|
||||
# V50 (#224): per-respondent-brief separation. The aggregator groups respondent /
|
||||
# permit_applicant claims by their source pleading — each joint response brief
|
||||
# (e.g. "כתב תשובה משיבות 2-3" vs "משיבים 4-6") is one coherent litigation
|
||||
# position, so opposing briefs no longer collapse into a single "respondent"
|
||||
# bucket. ``party_name`` carries the brief label; appellant/committee stay ''.
|
||||
SCHEMA_V50_SQL = """
|
||||
ALTER TABLE legal_arguments ADD COLUMN IF NOT EXISTS party_name TEXT NOT NULL DEFAULT '';
|
||||
CREATE INDEX IF NOT EXISTS idx_legal_arguments_party_name
|
||||
ON legal_arguments(case_id, party, party_name);
|
||||
"""
|
||||
|
||||
|
||||
# Stable, arbitrary key for the session-level advisory lock that serialises
|
||||
# schema DDL across processes. Every short-lived process (cron drains, services)
|
||||
# re-runs the idempotent migrations on startup; without this lock two processes
|
||||
@@ -1959,6 +1971,7 @@ async def _apply_schema_ddl(conn: asyncpg.Connection) -> None:
|
||||
await conn.execute(SCHEMA_V47_SQL)
|
||||
await conn.execute(SCHEMA_V48_SQL)
|
||||
await conn.execute(SCHEMA_V49_SQL)
|
||||
await conn.execute(SCHEMA_V50_SQL)
|
||||
|
||||
|
||||
async def init_schema() -> None:
|
||||
|
||||
Reference in New Issue
Block a user