Files
legal-ai/docs/spec/ui-audit.md
Chaim 37c56ff22a docs(spec): cycle-2 — 8 application-surface domains (X6–X10) + ui-audit + GAP-24..62/FU-9..15
Extends the system spec beyond the core pipeline to the 8 surfaces outside it:
- X6 UI↔API contract + design rules (INV-UI1..6)
- X7 Paperclip client & connection params (INV-INT4..8)
- X8 field-population & extraction provenance (INV-FP1..5)
- X9 MCP tool contract — 71 tools (INV-TOOL1..6)
- X10 deploy/env/secrets (INV-ENV1..5)
- ui-audit.md — page-by-page UI audit (13 pages)
- 02-data-model: derived-entity invariants (INV-DM4..6)
- X4-agents: tool-grant map + INV-AG3
- gap-audit: GAP-24..62 → FU-9..15; cycle-1 (FU-1..8b) marked done
- constitution §7 + README index (X1..X10)

Planning/spec artifacts only — no application code. All engineering invariants
backed by ≥3 sources; every finding carries verified file:line.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-31 16:21:27 +00:00

7.8 KiB
Raw Blame History

UI-Audit — ביקורת דף-אחר-דף של ה-web-ui

מסמך זה הוא מפת-הממצאים של ה-frontend (web-ui), מקביל ל-gap-audit.md אך ברמת-הדף/הרכיב. הוא תוצר סריקה word-for-word של 13 הדפים (5 cases-flow + 5 knowledge + 3 admin) + השכבה המשותפת. כל ממצא נושא: invariant מופר (מ-X6/X8) · severity · file:line · תיקון. severity = הערכה הנדסית; priority = היו"ר.

איך הופק: סקירת 13 הדפים + src/lib/api/* + src/components/*, מאומת מול הקוד. התיקון מקובץ ל-FU-10.

דפים שנסרקו: dashboard, cases/new, cases/[caseNumber], cases/[caseNumber]/compose, archive · precedents, precedents/[id], training, methodology, missing-precedents · settings, skills, diagnostics. נווט מלא: כל 13 הדפים נגישים מ-app-shell.tsx — אין דף-יתום.


1. מוגדר-לא-נכון (Wrong Definitions)

ID כותרת invariant severity file:line תיקון
UI-A1 PracticeArea מוגדר ב-3 מקומות עם ערכים שוניםlib/practice-area.ts:12 (appeals_committee/national_insurance/labor_law — שאריות מפרויקט אחר!), lib/api/precedent-library.ts:26 (rishuy_uvniya/...), ו-components/precedents/practice-area.ts UI1, G2 CRITICAL 3 קבצים SSoT יחיד; הסרת שאריות national_insurance/labor_law
UI-A2 key_quote חסר מטיפוס Precedent; גישה דרך as {key_quote?:string} UI1/UI2 CRITICAL precedents/[id]/page.tsx:178, precedent-edit-sheet.tsx:94 הוספת key_quote לטיפוס/OpenAPI
UI-A3 תווית לא-עקבית לאותו ערך: "פיצויים (197)" מול "פיצויים לפי ס' 197" UI1 High precedents/[id]/page.tsx:26-35 מול practice-area.ts תווית מ-SSoT יחיד
UI-A4 enum נצרך לא-נגזר-מטיפוס (zod ידחה subtype חדש) UI1 High schemas/case.ts:78-86 zod נגזר מ-PracticeArea/AppealSubtype
UI-A5 expectedOutcomes/set_outcome — אוצר-מילים לא-תואם בק (rejected/accepted/partial מול rejection/.../betterment_levy) UI1, G2 High schemas/case.ts:35-41; בק block_writer.py:442/lessons.py:11 SSoT יחיד ל-enum-תוצאה

2. כפילות (Duplication)

ID כותרת invariant severity file:line תיקון
UI-B1 CaseStatus + STATUS_LABELS + STATUS_TONE ב-3 מקומות UI1, G2 CRITICAL cases.ts:16-33, status-badge.tsx:11-29,77-95, status-changer.tsx:18-24 enum+labels+tones מ-SSoT, ייבוא
UI-B2 STATUS_LABELS של מסמכים משוכפל (ולא-שלם) UI1 High upload-sheet.tsx:39-46, documents-panel.tsx:39-46 ל-lib/doc-types.ts
UI-B3 פירמוט-תאריך משוכפל ×5 UI/§6 Medium archive.tsx, case-header.tsx, documents-panel.tsx (+2) lib/format.ts משותף
UI-B4 תוויות practice-area/source-type משוכפלות UI1 High precedents/[id]/page.tsx:26-35 ייבוא מ-practice-area.ts
UI-B5 boilerplate העלאת-קבצים (FormData+fetch) ×4 §6/G2 Medium documents.ts, training.ts, exports.ts, missing-precedents.ts uploadMultipart<T>() ב-client.ts
UI-B6 כרטיס-שגיאה משוכפל ×3 UI4 Medium detail/library/missing pages <ErrorCard> משותף

3. מיותר / מת (Redundancy / Dead)

ID כותרת invariant severity file:line תיקון
UI-C1 3 דפי-פסיקה חופפים (/precedents, /training, /missing-precedents) — גבולות מטושטשים G2 Medium 3 דפים הגדרת אחריות; שקילת איחוד
UI-C2 כפתור "חלץ מטא-דאטה" שלא מרענן, מפנה ל-CLI ידני UI5/FP5 Medium precedent-edit-sheet.tsx:130 auto-refresh/poll על תור-החילוץ
UI-C3 useCase refetch כל 5ש' גם במנוחה/בעריכה UI5 Low cases.ts:150-152 interval מותנה-סטטוס
UI-C4 magic-numbers (intervals) מפוזרים ב-18 מודולים UI5/§6 Low כל lib/api/* lib/api/query-config.ts

4. אי-עקביות + הפרת-כללים (Inconsistency / Rule-Violations)

ID כותרת invariant severity file:line תיקון
UI-D1 ~60% endpoints unknown → טיפוסים ידניים-סוטים UI1/UI2 CRITICAL cases.ts:1-9 (מתועד מפורשות) + בק Pydantic models + api:types
UI-D2 שדות-Opus מוצגים ללא חיווי "חולץ-אוטומטית"; היו"ר לא יודע מה לאמת UI6/FP1 High precedents/[id]/page.tsx:160-185 badge "מולא-ע"י-Opus"
UI-D3 אין חיווי searchable; הלכות pending_review לא מובלטות בדף-הפרט UI6/FP3 High precedents/[id]/page.tsx חיווי searchable + אזהרת-pending
UI-D4 fallback SSE מסתיר כישלון כ-"completed"; TTL 5ש'↔300ש' UI4/UI5 Medium documents.ts:226-232 terminal-state מפורש
UI-D5 query-keys לא-עקביים (חלק .all, חלק לא; חלק exported, חלק לא) §6 Low agents.ts, feedback.ts (+) convention אחיד
UI-D6 URLs קשיחים (PAPERCLIP_BASE, coolify, frontend) UI3/ENV3 Low app-shell.tsx:70 env (ראה X10)

5. סיכום ל-FU-10

  • SSoT ל-enums/תוויות/tones (UI-A1..A5, UI-B1/B2/B4) — תיקון-השורש של רוב הממצאים.
  • Pydantic models + OpenAPI=SSoT (UI-D1) — מבטל את הטיפוסים-הידניים.
  • helpers משותפים (UI-B3/B5/B6, UI-C4) — תאריך, upload, error-card, query-config.
  • שקיפות-מקור-מילוי (UI-D2/D3) — נגזר מ-X8/X6 INV-UI6.
  • ניקוי redundancy (UI-C1..C3).

6. הפניות-אחיות