KB-5537

RP DOT Pivot-Update — 08 UI/API Handoff (badges, L2 banner, JSON, Đ26 layers)

4 min read Revision 1
registries-pivotui-apibadgesl2-bannerdieu26-layers2026-06-03

08 — UI / API Handoff (RP classification)

Source of truth for the screen: v_rp_classification_governance_map (37 rows, live). Nuxt = screen only (Đ26 §0-BA: readItems → render, no business logic). All classification is computed in PG.

Fields the UI consumes (per pivot)

pivot_code, pivot_name, source_object, is_active, raw_registry_group, registry_group_kind (domain|pivot_shape), fac02_label_code, fac02_label_name, pivot_kind, raw_species, species_governed_code, species_display_name, species_governed_composition, species_status (clean|missing|ambiguous_meta), raw_composition_level, composition_status (match|mismatch|drill_overload|no_ref), classification_lane (governance_home|rp_local|inactive_retire_candidate).

Badges

Field Badge values Color intent
classification_lane governance_home 🟢 / rp_local 🔵 / inactive_retire_candidate ⚪ green=L1-governed home, blue=RP-local shape, grey=retired
composition_status match ✓ / mismatch ✗ / drill_overload ▦ / no_ref — mismatch=red (cleanup), drill_overload=neutral (LAW-VALID, not error)
species_status clean ✓ / missing — / ambiguous_meta ◑ ambiguous_meta is NOT an error (governed meta-species)
registry_group_kind domain 🏷 / pivot_shape ⬡ domain=FAC-02 facet; shape=RP-local structure
fac02_label_code LBL-1xx chip or "provisional" provisional = council backlog (no governed label yet)

State after cleanup (what to show)

  • Counts: governance_home 15, rp_local 20, inactive_retire 2.
  • composition_status: match 21 → 24 after the 3 fixes; mismatch 3 → 0; drill_overload 9 (keep, neutral badge); no_ref 4.
  • DOT cleanup state badge: tool=dot-pivot-update deployed; commit HELD pending registration.

MANDATORY L2 banner (never claim gap=0)

L2 Object-Ownership Governance is GATED (inert). This screen reflects L1 classification only. Do not render "fully governed / 0 gaps". L2 ownership=0, v_object_owner_gap=210, axis/topic tables absent, gov_emit=0. Any L2 coverage figure is not production-true.

Forbidden UI assumptions (must encode)

  • drill_overload is not an error — it is the Đ26 td-matrix drill ladder (material/product/building…); render neutral, never red/"broken".
  • species='species' (PIV-016/103) is not an orphan/bug — it is a governed meta-species pivoting over entity_species; render as governed.
  • Do not show L2 ownership/axis/topic as populated — those are clone-only / inert in prod.
  • Do not compute counts in Nuxt; read record_count/view fields from PG.

JSON example (PIV-001, post-fix)

{
  "pivot_code": "PIV-001",
  "pivot_name": "Meta Catalog — Total",
  "source_object": "meta_catalog",
  "is_active": true,
  "classification_lane": "governance_home",
  "registry_group_kind": "domain",
  "raw_registry_group": "cấu_trúc",
  "fac02_label_code": "LBL-101",
  "fac02_label_name": "Cấu trúc",
  "raw_species": "catalog",
  "species_governed_code": "SPE-CAT",
  "species_status": "clean",
  "species_governed_composition": "atom",
  "raw_composition_level": "atom",
  "composition_status": "match"
}

Đ26 drill-down contract (Layers, for the RP UI build, §09)

L1 summary (9-row table) → L2 group list (Atom→species via entity_species WHERE composition_level='atom'; DOT→category; Collections→governance_role) → L3 entity list → L4 entity detail (6 headings) → L5 matrix (pivot GROUP BY, max 7 dims). Each layer ends in a matrix (§II-QUINQUIES). Drill keys come from the classification fields above.

Back to Knowledge Hub knowledge/dev/reports/architecture/registries-pivot-dot-pivot-update-author-register-cleanup-2026-06-03/08-ui-api-handoff.md