feat(graph): metadata filters + facets (corpus graph PR A) #126

Merged
chaim merged 1 commits from worktree-graph-metadata into main 2026-06-07 20:52:36 +00:00
Owner

PR A מתוך 4 פיתוחים לגרף הקורפוס. מוסיף סינון לפי מטא-דאטה משפטית + ה-payload לצביעה לפיה (תשתית ל-color-by ב-PR האנליטיקה).

Backend (read-only, G2):

  • GraphNode += court, date (ISO).
  • build_corpus_graph += פילטרים server-side (G5): court, precedent_level, chair, district, year_from, year_to. גם שאילתת ה-neighborhood בוחרת court/date.
  • GET /api/graph/facets (response_model GraphFacets, UI2) → ערכי court/level/chair/district ייחודיים, כדי שה-UI לא יקודד מחרוזות עברית.

Frontend:

  • graph.ts: שדות+params+useGraphFacets().
  • graph-filter-panel: Accordion "סינון מתקדם" — Selects ל-court/precedent_level/chair/district (מ-facets) + טווח-שנים.
  • graph-view: השחלת הבקרות + facets.

אימות: read-only מול ה-DB החי (precedent_level=עליון&year_from=2015 מסנן נכון; facets: 36 courts/3 levels/19 chairs/4 districts). build+lint עוברים.

Invariants: G2 · G5 · UI2. npm run api:types יורץ אחרי deploy.

🤖 Generated with Claude Code

PR A מתוך 4 פיתוחים לגרף הקורפוס. מוסיף **סינון לפי מטא-דאטה משפטית** + ה-payload לצביעה לפיה (תשתית ל-color-by ב-PR האנליטיקה). **Backend (read-only, G2):** - `GraphNode` += `court`, `date` (ISO). - `build_corpus_graph` += פילטרים server-side (G5): `court`, `precedent_level`, `chair`, `district`, `year_from`, `year_to`. גם שאילתת ה-neighborhood בוחרת court/date. - **`GET /api/graph/facets`** (response_model `GraphFacets`, UI2) → ערכי court/level/chair/district ייחודיים, כדי שה-UI לא יקודד מחרוזות עברית. **Frontend:** - `graph.ts`: שדות+params+`useGraphFacets()`. - `graph-filter-panel`: Accordion "סינון מתקדם" — Selects ל-court/precedent_level/chair/district (מ-facets) + טווח-שנים. - `graph-view`: השחלת הבקרות + facets. **אימות:** read-only מול ה-DB החי (precedent_level=עליון&year_from=2015 מסנן נכון; facets: 36 courts/3 levels/19 chairs/4 districts). build+lint עוברים. Invariants: G2 · G5 · UI2. `npm run api:types` יורץ אחרי deploy. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-07 20:52:30 +00:00
Adds legal-metadata filtering and the payload to color by it (foundation for
the color-by selector in the analytics PR).

Backend (web/graph_api.py, web/app.py) — read-only, G2:
- GraphNode += court, date (ISO) — precedents carry them for filter/color-by.
- build_corpus_graph += server-side WHERE filters (G5): court, precedent_level,
  chair, district, year_from, year_to (EXTRACT(YEAR FROM date)). Neighborhood
  query also selects court/date.
- New GET /api/graph/facets (response_model GraphFacets, UI2) → distinct
  courts/levels/chairs/districts so the UI doesn't hardcode Hebrew strings.

Frontend:
- graph.ts: GraphNode += court/date; GraphFilters += the six params;
  buildParams; useGraphFacets() hook.
- graph-filter-panel: an "advanced" Accordion with court/precedent_level/chair/
  district Selects (from facets) + year-from/year-to Selects.
- graph-view: new controls wired into filters; facets fetched and passed down.

Verified read-only against the live DB (precedent_level=עליון&year_from=2015
filters correctly; facets populated: 36 courts / 3 levels / 19 chairs / 4
districts). web-ui build + lint pass.

Invariants: G2 (SELECT-only via db.get_pool), G5 (filters server-side),
UI2 (explicit response_models). api:types to be regenerated post-deploy.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit 106ab53231 into main 2026-06-07 20:52:36 +00:00
chaim deleted branch worktree-graph-metadata 2026-06-07 20:52:37 +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#126