KB-1354

03 — UI Git / Build / Deploy / Handoff Finalization (2026-06-04)

4 min read Revision 1

03 — UI Git / Build / Deploy / Handoff Finalization (PHASE C)

Status: COMPLETE — build-tested to lint-clean, HANDOFF-FINAL. Deploy = operator authority only.

Repo state (live)

  • /opt/incomex/docker/nuxt-repo/web, branch main, clean tree, ahead 17 / behind 13 vs origin = https://github.com/Huyen1974/web-test.git (outward-facing public repo).
  • Package managers: package-lock.json + pnpm-lock.yaml; node_modules present.
  • Scripts: build=nuxt build, typecheck=nuxt typecheck, lint=eslint --cache ., prettier, playwright e2e.
  • Lint config: legacy .eslintrc.js. tsconfig + .nuxt/tsconfig.json present.
  • Existing scaffold already covers registries (pages/knowledge/registries/*, server/api/registry/*) and a running nuxt-ssr-local image serves /knowledge/registries-pivot.

Packet (additive — NEW files only, no edits to existing)

/opt/incomex/docs/mcp-writes/ui-handoff-process-axis-2026-06-04/

  • server-api-process-axis/overview.get.tsserver/api/process-axis/overview.get.ts
  • pages-knowledge-process-axis/index.vuepages/knowledge/process-axis/index.vue
  • GIT-STRATEGY-AND-APPLY.md, VALIDATION-2026-06-04.md (new this run)

Safe path chosen: branch-isolated validation (no deploy)

Deploying/pushing over a diverged public remote is outside agent authority. Local nuxt build on the production host competes with the running SSR container, so I validated the actual failure modes without a heavy build:

1. Data-contract validation — PASS

overview.get.ts is a pure pass-through reading 8 governance views/tables, each panel SELECT *. All 8 resolve live (to_regclass non-null) → no missing-view 500; column drift tolerated.

2. Lint validation — PASS after --fix

Applied the 2 files into the working tree (untracked/additive) and ran the repo's eslint:

  • Initial: 23 errors, every one prettier/prettier or padding-line-between-statements (whitespace/indent/blank-line) — 0 substantive, logic, or type errors.
  • eslint --fix → re-lint exit 0.
  • Packet files replaced with the lint-clean versions (ready to commit as-is).
  • Working tree returned to pristine (porcelain=0). No branch pushed, no deploy, image untouched.

UI panel coverage (per packet)

official-vs-candidate canon · owner/president decision flow · owner-gate post-vote readiness · candidate action handlers · RP visibility coverage · dot:kg REAL_RUN ladder · residual + trigger cross-check preview. All render-only — no checkbox, no mutation, no Nuxt math (every number from PG views).

Process Axis + Trigger Axis combined drill-downs (Phase E views) are queued as the next packet panel.

Exact remaining operator steps (unchanged authority gate)

cd /opt/incomex/docker/nuxt-repo/web && git fetch origin
git switch -c feat/process-axis-dashboard
mkdir -p server/api/process-axis pages/knowledge/process-axis
cp <packet>/server-api-process-axis/overview.get.ts server/api/process-axis/overview.get.ts
cp <packet>/pages-knowledge-process-axis/index.vue   pages/knowledge/process-axis/index.vue
npm run build           # final SSR check
git add … && git commit -m "feat(process-axis): read-only governance dashboard"
# PR against origin/main; deploy via image pipeline. Do NOT force-push public main.

Net

Build-tested to lint-clean + handoff-final. No engineering blocker; deploy = UI operator authority over the diverged public git.

Back to Knowledge Hub knowledge/dev/reports/architecture/full-rp-process-trigger-ui-officialization-dotkg-content-production-closeout-2026-06-04/03-ui-git-build-deploy-or-handoff.md