feat(documents): מסמך-עיקרי — is_primary נגזר + רשימה קנונית (#200) #354
Reference in New Issue
Block a user
Delete Branch "worktree-agent-a59ef17c17ecd1d31"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
מה ולמה
WS2 / TaskMaster #200 (יוזמת עיצוב-מחדש זרימת-העבודה). מוסיף את מושג "מסמך עיקרי" (מסמך-מהות שהיו"ר עוקבת אחריו לניתוח) מול מסמך-משני, עם רשימה קנונית מאושרת-יו"ר:
appeal/response/objection/protocol/appraisal/decision. כל doc_type אחר (plan/permit/court_decision/exhibit/reference) = משני.הסיווג נחשף דרך
document_list/case_get/ API-המסמכים (שדותis_primary+doc_category). בונה את התשתית ל-#201 (דגל "לא-נותח" + כלי ניתוח-מחדש).עיצוב מרכזי — נגזר, לא נכתב (G1/G2/INV-DM7): מקור-האמת היחיד הוא
doc_type+ הרשימה הקנוניתdb.PRIMARY_DOC_TYPES. העמודהdocuments.is_primaryהיאBOOLEAN GENERATED ALWAYS AS (doc_type = ANY(PRIMARY_DOC_TYPES)) STORED(SCHEMA_V47) — Postgres מחשב אותה, אין מסלול-כתיבה מקביל ולא יכולה לסטות מ-doc_type, בדיוק כמו ה-tsvectors ב-INV-DM3. נמנעת עמודה כפולה הניתנת-לדריפט (היפוך של INV-DM7 "מחושבת בקריאה, אין עמודה כפולה").שינוי-סכמה מדויק
ביטוי-ה-
ARRAYנבנה מ-PRIMARY_DOC_TYPES(tuple יחיד) דרך_primary_doc_types_sql_array()— הגדרה אחת לרשימה.קבצים
mcp-server/src/legal_mcp/services/db.py—PRIMARY_DOC_TYPES+is_primary_doc_type()+SCHEMA_V47_SQL(רשום ב-_apply_schema_ddl) + גזירתis_primary/doc_categoryב-_row_to_doc.mcp-server/src/legal_mcp/tools/documents.py— docstring שלdocument_listמתעד את השדות הנגזרים.docs/spec/02-data-model.md— §2ג חדש "מסמך-עיקרי" + שורת-הישותdocuments.Invariants — הצהרה (חובה)
is_primaryנגזר מ-doc_type, לא נכתב במקביל.PRIMARY_DOC_TYPES); אין דגל-bool עצמאי שיכול להתפצל מ-doc_type.GENERATED ALWAYS … STOREDdrift-free) — אותה ערובה כמו ה-tsvectors.צ'קליסט — פרוטוקול כתיבת-קוד
docs/spec/00-constitution.md+02-data-model.mdלפני הכתיבהis_primaryGENERATED, מקור-אמת יחידgap-audit.md— אזור זה אינו ממופה ל-GAP/FU קייםאימות
ast.parseעובר על שני קבצי-ה-Python שנערכו.primary; משניים/None/ריק →secondary; רשומות טרום-מיגרציה (ללאis_primary) נגזרות נכון מ-doc_type; רשומות פוסט-מיגרציה (עםis_primaryמה-DB) מכובדות.doc_type = ANY(ARRAY['appeal','response','objection','protocol','appraisal','decision']::text[]).ADD COLUMN IF NOT EXISTS, ביטוי קבוע) ותוחל ב-deploy.🤖 Generated with Claude Code