KB-50D1

T2 UI-Current Audit — 01 UI-Current Binding Risk

6 min read Revision 1
terminal2auditui-currentbinding-riskfalse-greenreliability-fields2026-06-05

01 · UI-Current Binding Risk

Source access: UNVERIFIED_SOURCE_ACCESS (Nuxt repo outside read-file allowlist). UI internals audited from package docs; PG binding targets audited live.

Live evidence (directus.public, 2026-06-05, read-only)

_current aliases exist (5)

v_rp_universal_node_ui_contract_current, v_rp_dynamic_drill_proof_matrix_current, v_rp_dynamic_drill_acceptance_dashboard_current, v_rp_count_reliability_dashboard_current, v_rp_node_final_substrate_contract_current. PASS — the canonical binding targets the next macro needs all exist.

_current resolves to the reliability decorator (good behavior, hardcoded topology)

pg_get_viewdef(v_rp_universal_node_ui_contract_current) = SELECT … FROM v_rp_universal_node_ui_contract_reliability. The chain is v1 → v2 → reliability. So _current gets the correct drill behaviour (0 NEEDS_GROUPING false-affordances) but still rides the hardcoded 6/7-way UNION — it does NOT resolve through v_rp_universal_node_ui_contract_registry_driven.

_current exposes the reliability fields — YES

Confirmed columns on _current: reliability_label, source_scope, confidence_score, lane_code, count_semantics, warning_flags_v2, blocker_type_v2, next_action_v2 (plus base contract cols). A UI bound to _current can render badges. PASS (data available).

R1 — No UI package binds _currentP0 (HARD binding bug for the next macro)

The two existing UI route packages bind versioned view names, not _current:

  • v1 package (/opt/incomex/docs/mcp-writes/rp-dynamic-drill-2026-06-05/ui-package/): /api/registries-pivot/contractv_rp_universal_node_ui_contract (the stale v1 with 12 false-affordance nodes), /children → v1, etc.
  • v2 package (…/rp-dynamic-drill-grouping-2026-06-05/ui-package-v2/): grouping.get.tsv_rp_pxt_grouping_surface / v_pxt_grouped_children; contract → …_v2.

The contract-canonical macro that built _current shipped NO UI package. Consequence: if an operator deploys the existing package as-is, the UI renders the stale hardcoded v1 contract (the exact 12 false-affordance nodes the _current/reliability chain was built to fix). The next macro must author a _current-bound package; this is the single most important pre-deploy action.

R2 — False-green at the bound surface: contract label ≠ invariant status — P0

The 2 live invariant FAILs are not self-labelled as failures by the contract's own reliability fields:

node invariant view (…_full_population_drill_invariant) _current contract fields
PROC:new_candidates (AX-PXT) FAIL_COUNT_SUBSTRATE_MISMATCH (count 6 vs child_total 50) reliability_label=CANDIDATE, source_scope=synthetic_axis, count_semantics=ledger_backed, next_action_v2=DRILL_GROUPS
PROC:residual_reconcile (AX-PXT) FAIL_COUNT_SUBSTRATE_MISMATCH (count 8 vs child_total 23) reliability_label=CANDIDATE … (same)

A renderer that badges off reliability_label alone shows these as benign CANDIDATE (effectively green). The FAIL only appears if the UI also joins/renders invariant_status from v_rp_full_population_drill_invariant. Binding spec (P0): the renderer's status branch MUST come from the invariant's invariant_status, never from reliability_label alone. Otherwise 2 real count-substrate failures render as healthy candidate nodes.

R3 — Does the UI distinguish SYNTHETIC / CANDIDATE / OFFICIAL / PARTIAL / STALE? — P1 (data partial, render unverified)

  • CANDIDATE / OFFICIAL — yes, governance_status / lifecycle_status carry it (all nodes CANDIDATE, 0 official — correct, no fake-official).
  • SYNTHETIC — yes via source_scope='synthetic_axis' (AX-BASE/AX-PXT/AX-TRIGGER) and v_rp_axis_source_binding.is_registry_backed=false. Renderable.
  • PARTIAL — present in reliability layer (kb_sop PARTIAL, trigger 525 DB-only) but the node-level propagation onto AX-TRIGGER nodes is shallow.
  • STALEGAP. v_rp_static_literal_live_mismatch knows PROC:residual_reconcile is STALE (literal 8 vs live 2), but _current still reports it as CANDIDATE/ledger_backed — the STALE flag is not surfaced on the node in the bound contract. Until T1's substrate-fix lands, the UI must derive STALE from the static-literal detector / invariant, not from the contract row.

R4 — Badges not yet in the renderer — P1

The v2 package predates the reliability fields (per prior T2 doc 09). The renderer has no evidence of rendering reliability_label / source_scope / confidence_score / invariant_status / next_action. The _current UI package must add these to the render model. Source-unverifiable this run — T1 must grep pages/**,composables/**,server/api/** when source access is available.

Binding-risk verdict

NOT_READY (P0). _current is the right target and is reliability-rich, but (a) no package binds it, and (b) the bound contract under-labels the 2 real fails (false-green) unless the renderer also binds the invariant. Both are fixable in the next macro without authority.

Back to Knowledge Hub knowledge/dev/reports/architecture/parallel-terminal2-ui-current-autoscale-generator-deploy-risk-audit-2026-06-05/01-ui-current-binding-risk.md