RP Final Acceptance 05 — UI/API Live Acceptance
05 — UI/API Live Acceptance (Workstream D)
Verdict: VERIFIED COMPLIANT on core principles; PATCH-READY for new acceptance features. No redeploy (operator-gated).
Source (live, via ssh)
Page /opt/incomex/docker/nuxt-repo/web/pages/knowledge/registries-pivot/index.vue; API /opt/incomex/docker/nuxt-repo/web/server/api/registries-pivot/{summary,rows,node}.get.ts (built 2026-05-31). Old /knowledge/registries remains separate.
API today (honest)
- summary.get.ts ← v_count_integrity + v_count_drift + v_registries_pivot_tree; all aggregates computed in PG, returned verbatim (no JS aggregation, no gap math).
- rows.get.ts ← v_count_integrity ⋈ v_living_lists; one leaf row mapped to legacy /knowledge/registries columns (code,name,layer,so_luong,thanh_phan,plus,minus,mo_coi,xac_minh) + pivot_backed/pivot_code for honest PIVOT_MISSING.
- node.get.ts ← fn_registries_pivot_node_substrate($code) drill, pure pass-through. Hard rules ALL PASS: no Nuxt math; no hardcoded depth; PIVOT_MISSING honest; legacy philosophy preserved; honest verdict (152 ok/5 unverified/3 failed → summary FAILED, not fake green).
Gap (patch-ready)
Does NOT yet consume: v_registries_pivot_node_contract / v_registries_pivot_surface (pin+grouping), v_rp_aggregate_candidate_register (candidates), v_rp_drill_reconciliation (drill status). PIV-311/313 in tree skeleton but not in leaf rows set.
Patch list (additive; ticket RP_UI_CONSUME_SURFACE_AND_CANDIDATES)
P1 surface.get.ts ← v_registries_pivot_surface ORDER BY pin_sort_rank, display_order. P2 candidates.get.ts ← v_rp_aggregate_candidate_register. P3 extend summary with v_rp_drill_reconciliation (reconciles/mismatches; mismatch→banner, currently 0). P4 add PIV-311/313 to leaf set (extend v_living_lists/v_count_integrity or UNION). P5 page: sort by pin_sort_rank; pin marker; grouping_status; CANDIDATE badges; filter is_active (hide PIV-020/MTX-TEST). Deploy = Nuxt rebuild, operator-gated.
Operator/browser checklist
- /knowledge/registries-pivot renders. 2. /api/registries-pivot/summary → integrity(leaf_rows 160, pivot_backed 22), verdict FAILED, tree(nodes 39, roots 26, parents 6). 3. /api/registries-pivot/rows → ~160 leaf rows, PIVOT_MISSING visible. 4. /api/registries-pivot/node?code=PIV-007 → DOT substrate+counts. 5. post-deploy: pinned-first; PIV-019/313/311 NEEDS_GROUPING; PIV-007 SATISFIED; candidate badges.