10 — UI Projection Model: tree / graph / topic / reconstruction reader (views-only, no UI impl, design-only, 2026-06-02)
10 — UI Projection Model (Branch J)
Branch J. The human-facing read model. No UI implementation — this designs the projections (views) the UI reads. UI reads projections/views only; it is never the source of truth (PG → Directus → Nuxt; no direct PG from Nuxt; a hardcoded axis list in the UI =
hardcode_violation#37). Verdict: RECOMMENDED — reusev_ui_iu_three_axis_envelope+iu_tree_path+v_kg_edges_all; add per-axis projection views declared inaxis_registry.projection_view; clearly separate official (active/born) from candidate (provisional) lanes.
10.0 The projection contract
Every UI surface reads a named view (axis_registry.projection_view), recomputable from PG truth. Live precedents: v_ui_iu_three_axis_envelope, v_iu_three_axis_envelope_refresh_status, v_iu_three_axis_envelope_drift, v_kg_edges_all, v_pivot_dot_by_category. New axes declare their projection view at registration; the UI never queries base tables directly and never computes axis truth.
10.1 The surfaces
| Surface | Reads (projection) | Truth behind it |
|---|---|---|
| Official treeview | iu_tree_path spanning tree (primary parents), sibling_order |
information_unit.parent_or_container_ref + iu_relation contains |
| Graph browser | v_kg_edges_all / universal_edges (all edges incl. secondary parents, topic-topic) |
iu_relation, universal_edges |
| Topic detail | a topic node + its assigned IUs | taxonomy (FAC-08, active) + axis_assignment(zone=approved) |
| IU list under topic | IUs assigned to a topic, ordered, with confidence | axis_assignment filtered by node_ref |
| Reconstruction reader | IUs of a doc_code in sort_order, contiguous |
information_unit + fn_iu_reconstruct_source fingerprint |
| Containment tree | nested IUs by iu_tree_path |
containment graph |
| Axis browser | the Axis Registry (what axes exist, owners, lifecycle) | axis_registry |
10.2 Status / confidence / evidence badges
The UI surfaces governance state as badges, read from projection columns (never recomputed in Nuxt):
- lifecycle: candidate / provisional / active / deprecated / retired (
taxonomy.status,axis_registry.lifecycle_status). - zone: approved / candidate / quarantine (
axis_assignment.zone). - confidence: calibrated
confidence+match_score(shown distinctly — technical vs governance). - evidence / provenance: an expandable evidence panel (
evidence/provenancejsonb) — "why is this IU tagged this topic?". - integrity: reconstruction fingerprint verified/drifted; containment cycle/dangling flags.
10.3 Candidate vs official visibility (the critical UI rule)
- Official lane (default human view): only active/born nodes + approved assignments. This is the navigable, trustworthy tree/topic structure.
- Candidate lane (opt-in / AI / reviewer view): provisional/candidate nodes + candidate/quarantine assignments, clearly marked ("proposed", "low confidence", "needs review"), and excluded from the official tree. KG-provisional topics live only here until promoted (doc 06).
- Never present a candidate as official; never let a UI action promote a candidate without routing the approval ladder (doc 02).
10.4 Reading flows
- Read a document (reconstruction): pick
doc_code→ reconstruction reader renders1..Nin order with a "verified" fingerprint badge; a drift badge warns ifcontent_digest ≠ indexed_digest. - Navigate structure (containment): expand the spanning tree; secondary containment parents appear only in the graph browser.
- Explore meaning (topic): browse the FAC-08 topic hierarchy → topic detail → IU list (with confidence/evidence); cross-topic semantic links via the graph browser.
- Govern (axis browser): see every registered axis, its owner, lifecycle, coverage, and open issues — the operator surface for the open-axis model.
10.5 Boundaries
- UI computes no axis truth (no client-side classification/aggregation that becomes truth); it reads L5/pivot/coverage/projection views (open-axis model §2.10).
- Assembly is PG → Directus → Nuxt; no direct PG access from Nuxt; no one-off Nuxt feature where a factory/assembly projection should exist.
- This document specifies projections only; building screens is a later, separate, non-design task.
10.6 Verdict
RECOMMENDED. The UI is a set of recomputable projection views (mostly already present for the envelope/tree/graph), extended per-axis via axis_registry.projection_view, with a strict official-vs-candidate split and governance badges sourced from projection columns. No UI is built here.