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)

  1. No Nuxt-side arithmetic — render view columns verbatim.
  2. Official (axis_assignment) vs candidate (candidate layer) must be visually distinct: official badge red "0/453 — owner-gated", candidate badge amber.
  3. Verified badge only from a verified view (job:cut), never computed client-side.
  4. Action buttons POST to a preview/guard endpoint; never a direct mutation; no checkbox approvals.
  5. All handlers are unimplemented today → 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-gate shows verdict row CANON_BLOCKED_OWNER_ONLY and official RP 0/453.
  • /registries-pivot/AX-PROCESS/owner-gate lists 12 rows (5 president-vote + 7 owner).
  • /process-discovery/remediation-v2 shows 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)

  1. Add the 10 routes as server routes that SELECT * FROM <view> (no math).
  2. Add the 9 components bound per table above.
  3. Build/redeploy incomex-nuxt; reload incomex-nginx.
  4. Run the test checklist.
Back to Knowledge Hub knowledge/dev/reports/architecture/registries-pivot-process-coverage-ui-owner-canon-content-closeout-2026-06-04/02-ui-api-deploy-or-final-packet.md