The "אימות פסיקה" tab reloaded its data on every tab revisit and the first
load took 1.5–3s. Two independent causes, two fixes:
Frontend (web-ui/src/lib/api/citation-verification.ts):
- staleTime 10s → 5min and refetchOnMount: false. Radix Tabs unmounts inactive
TabsContent, so switching back used to trigger a full rebuild once the 10s
window elapsed. Verify mutations still invalidate the query, so edits pull
fresh data.
Backend (mcp-server/.../case_citation_verification.py):
- The per-argument loop ran a Voyage embed + vector search + batched authority
query sequentially (N args × ~300ms waterfall). Extracted to _fetch() and
fanned out with asyncio.gather — order preserved, n_verified counter and
per-argument seen-sets unchanged. First load ~5× faster on multi-argument cases.
Pure read/assembly — no new parallel path (G2), no silent error swallowing
(search/radar still log warnings). Invariants: INV-DIG1/INV-AH unaffected
(still read-only, never cites).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Backend half of the citation-verification tab (frontend follows in a separate PR):
- Schema V44: case_precedents gains argument_id (the legal argument it supports),
case_law_id (the corpus ruling — for cited_by + dedup), verified (the INV-AH gate
the writer respects) + verified_at. All nullable; chair_note already existed.
- db: create_case_precedent(+argument_id/case_law_id/verified),
set_case_precedent_verified(id, verified, chair_note), list_case_precedents(+cols).
- services/case_citation_verification.build_view(case): per legal_argument →
in-corpus suggestions (search_library per issue) each with the cited_by authority
breakdown (db.citation_authority, X11) + merged attach/verify state + per-issue
radar (case_digest_radar grouped by matched issue). Pure read/assembly; reuses the
one corpus search + one authority query + one radar (G2).
- endpoints: GET /api/cases/{n}/citation-verification (the view) and
POST .../verify (upsert verify/un-verify + chair note).
Validated on 1044-03-26: 14 arguments, all with support; 317/10 surfaces with
אומץ×11/אובחן×1; radar leads attributed per issue. Auto-approval untouched (chair
gate, INV-G10). Verify defaults to false — nothing is authoritative until the chair
marks it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>