KB-775C
02 — UI/API Final Deploy Packet (2026-06-04)
5 min read Revision 1
02 — UI/API Final Deploy Packet
Deploy verdict: BLOCKED_UI_DEPLOY_ACCESS → final packet (operator handoff)
incomex-nuxt (nuxt-ssr-local:s174) and incomex-nginx run in production, but Nuxt/app source is outside the MCP allowlists (read: /opt/incomex/docs, /opt/incomex/dot/specs, /var/log/nginx; write: /opt/incomex/docs/mcp-writes only). I cannot patch or deploy the frontend. The data layer it needs already exists as PG views — so deploy is pure wiring with zero rediscovery.
Golden rule: NO app-layer math. Every count comes from a PG view.
Route → view binding (all read-only SELECT)
| Route | Backing view(s) |
|---|---|
/process-discovery/candidates |
v_ax_process_candidate_universe (19) |
/process-discovery/candidates/:code |
v_ax_process_candidate_universe WHERE candidate_code=:code |
/process-discovery/candidates/:code/components |
wf_process_candidate_member WHERE candidate_code=:code |
/process-discovery/candidates/:code/actions |
v_process_axis_candidate_action_queue_v3 WHERE subject=:code |
/process-discovery/remediation-v2 |
v_workflow_orphan_remediation_v2 (17) + v_workflow_residual_evidence_hardening_v3 (23) |
/registries-pivot/AX-PROCESS/candidate-surface |
v_ax_process_candidate_assignment_surface (19) |
/registries-pivot/AX-PROCESS/coverage-after-candidates |
v_ax_process_rp_visibility_after_candidate_stage (10) |
/registries-pivot/AX-PROCESS/owner-gate |
v_process_axis_owner_decision_flow (12) [new] |
/registries-pivot/AX-PROCESS/birth-requests |
v_process_axis_birth_request_queue (6) |
/registries-pivot/AX-PROCESS/canon-gate |
v_rp_process_canon_gate_summary (14) [new] |
Component → view contract
| Component | Source view | Notes |
|---|---|---|
| ProcessCandidateUniversePanel | v_ax_process_candidate_universe | columns: candidate_code, classification, rp_visibility, owner_status, ai_review_state, confidence, member_count, next_action |
| CandidateLayerDrilldown | v_ax_process_candidate_layer_nodes | 17 nodes |
| CandidateComponentGraph | wf_process_candidate_member | member_role ∈ {ENTRYPOINT, IMPLEMENTATION, ...} |
| CandidateActionPanel | wf_candidate_action_vocabulary + v_process_axis_candidate_action_queue_v3 | buttons call preview/guard endpoint only; no checkbox; all handlers 'unimplemented' → render disabled+reason |
| RemediationQueueV2 | v_workflow_orphan_remediation_v2 + v_workflow_residual_evidence_hardening_v3 | shows before/after hardening |
| OwnerGateQueue | v_process_axis_owner_decision_flow | classification ∈ {READY_FOR_OWNER, READY_FOR_PRESIDENT_VOTE} |
| BirthRequestQueue | v_process_axis_birth_request_queue | 6 |
| CanonGateSummary | v_rp_process_canon_gate_summary | single-row-per-metric; verdict row = CANON_BLOCKED_OWNER_ONLY |
| OfficialVsCandidateCoverageBadge | v_rp_process_canon_gate_summary | official=0/453 (red), candidate_visible=69 (amber); MUST be visually distinct |
UI rules (enforce in review)
- No Nuxt-side arithmetic — render view columns verbatim.
- Official (axis_assignment) vs candidate (candidate layer) must be visually distinct: official badge red "0/453 — owner-gated", candidate badge amber.
- Verified badge only from a verified view (job:cut), never computed client-side.
- Action buttons POST to a preview/guard endpoint; never a direct mutation; no checkbox approvals.
- All handlers are
unimplementedtoday → action buttons render in disabled state with the governance reason tooltip.
Sample API payloads (read endpoints)
GET /api/rp/process/canon-gate
→ rows of {metric, value, denominator, status, note} from v_rp_process_canon_gate_summary
GET /api/rp/process/owner-decisions
→ rows of {decision_id, subject, decision_type, required_actor, reversibility, flips_official_rp, current_state, recommended_action, classification} from v_process_axis_owner_decision_flow
GET /api/process-discovery/candidates
→ rows from v_ax_process_candidate_universe
Test checklist (post-deploy)
-
/registries-pivot/AX-PROCESS/canon-gateshows verdict rowCANON_BLOCKED_OWNER_ONLYand official RP0/453. -
/registries-pivot/AX-PROCESS/owner-gatelists 12 rows (5 president-vote + 7 owner). -
/process-discovery/remediation-v2shows residual hardened: 15 resolved + 8 owner-reconcile. - Candidate action buttons are disabled with governance reason (handlers unimplemented).
- Official-vs-candidate badge renders two distinct colors.
- No client-side count differs from the view value (spot-check 3 routes).
Operator deploy steps (outside MCP reach)
- Add the 10 routes as server routes that
SELECT * FROM <view>(no math). - Add the 9 components bound per table above.
- Build/redeploy
incomex-nuxt; reloadincomex-nginx. - Run the test checklist.