KB-1418

RP Dynamic Drill — 02 Universal UI Contract

2 min read Revision 1

02 — Universal UI Contract (Track A)

Object: v_rp_universal_node_ui_contract (read-only view, birth-free). One contract row per node, every axis. The UI renders this verbatim — no axis-specific business logic in Nuxt.

Columns (the contract)

axis_code, node_code, label, count_value, count_status, lifecycle_status, governance_status, warning_flags(jsonb), has_children, child_count, child_node_codes(text[]), grouping_status, final_substrate_ref, substrate_available, drill_action, next_route, owner_blocker, related_axes(jsonb), proof_source

Core drill rule (computed in PG, not Nuxt)

  • count_value > 1 AND has_childrendrill_action = DRILL
  • count_value > 1 AND NOT has_children AND NOT substrateNEEDS_GROUPING
  • otherwise → SHOW_SUBSTRATE

Live coverage (87 nodes)

axis nodes drillable with_substrate needs_grouping source
AX-BASE 39 5 39 0 v_registries_pivot_node_contract
AX-PROCESS 22 18 20 0 wf_process_candidate + job:cut + workflows
AX-PXT 12 0 12 10 v_process_trigger_actionability_ledger
AX-TOPIC 7 0 7 0 v_registries_pivot_axis_surface
AX-TRIGGER 7 7 7 0 v_ax_trigger_surface

Unifies: base pivot nodes, AX-TOPIC candidate nodes, AX-PROCESS candidates (WPC-*) + sole-verified job:cut + 2 official workflows, AX-TRIGGER census classes, and Process×Trigger ledger gaps. Every row carries honest governance/lifecycle status (candidate / blocked / verified) and owner_blocker.

No-hardcode guarantee

All counts, drill rules, child sets, and statuses come from PG views/functions. Nuxt does zero math.

Back to Knowledge Hub knowledge/dev/reports/architecture/registries-pivot-dynamic-drill-ui-pg-structure-proof-2026-06-05/02-universal-ui-contract.md