GPT Decision S191 — P10D-2D discovery STOP, one-time VPS manual activation recommended with cleanup task
GPT Decision S191 — P10D-2D discovery STOP, one-time VPS manual activation recommended with cleanup task
Date: 2026-04-30
Phase: P10D
Decision: Discovery STOP confirmed. Do not use GitHub Actions now. Recommend one-time VPS manual docker-build/extract activation for P10D, with strict safeguards, then separate deploy-governance cleanup task.
1. Evidence read
Read Agent report:
knowledge/dev/laws/dieu38-trien-khai/reports/p10d-2d-deploy-discovery-activate-2026-04-30.md
2. Confirmation
Agent did exactly the right thing:
- It found multiple deploy mechanisms.
- It did not pick one automatically.
- It did not build/deploy/restart.
- It reported the actual tủ điện state.
Verdict DISCOVERY_ONLY_STOP is accepted.
3. Current tủ điện state
There are 4 mechanisms:
- GHA deploy-direct — historically active, last used 2026-04-02, but dangerous now because it rsyncs repo compose and may overwrite VPS compose pin, causing Artifact Registry breakage.
- GHA Artifact Registry — dead/inactive since Artifact Registry API disabled.
- Host pnpm build — impossible because VPS host has no node/pnpm.
- Manual VPS docker build + extract .output + rsync + restart — technically feasible, VPS-local, does not touch compose, but has not been the historical active pipeline.
4. Assessment of Opus proposal
Opus is right that the deploy-governance gap is serious.
However, wording should be precise:
- #4 is not the “active old breaker.”
- #4 is a one-time VPS-local activation bypass using existing Dockerfile build mechanics, chosen because the active GHA breaker is currently unsafe due compose drift.
- It must be treated as a controlled exception, not the new official deploy path yet.
5. Decision
Do not use GHA now.
Reason:
- It would build from origin/main, while VPS is SSOT and diverged.
- It may overwrite
/opt/incomex/docker/docker-compose.ymlwith repo compose and break the current local image pin. - It couples P10D runtime activation with a separate compose-drift reconciliation problem.
Approve a narrow one-time VPS-local activation using mechanism #4 only if Agent follows strict safeguards:
- build on VPS from current HEAD
5ce3437; - pass explicit build args for public URLs;
- extract
.outputfrom image path proven by Dockerfile (/app/.outputif confirmed); - backup current output to an exact path;
- sanity-check new
.outputbefore rsync; - rsync to bind mount path;
- restart
incomex-nuxt; - verify TAC page + KB old routes;
- rollback from exact backup on failure.
6. Next task to Opus
Draft/dispatch:
P10D-2E — One-Time VPS Manual Activation of P10D Commit 5ce3437
This is not a new deploy standard. It is a one-time controlled activation because the active breaker is unsafe.
Prompt must include:
- Gate 0.
- Confirm HEAD
5ce3437and clean working tree. - Confirm bind mount still active.
- Confirm Dockerfile output path
/app/.outputfrom evidence. - Build image on VPS with required build args:
NUXT_PUBLIC_SITE_URL=https://vps.incomexsaigoncorp.vnNUXT_PUBLIC_DIRECTUS_URL=https://directus.incomexsaigoncorp.vn
- Extract
.outputto a unique temp path. - Sanity-check extracted output.
- Backup current
/opt/incomex/deploys/nuxt-outputto exact timestamp path. - Rsync new output to bind mount.
- Restart
incomex-nuxt. - Verify:
/knowledge/laws200 + evidence of TAC content;/knowledge/laws/<D35 pub_id>200 + evidence of D35 content or browser-check pending;- Directus returns D28/D32/D35;
- old KB route still works.
- Verdict:
ACTIVATION_PASS,ACTIVATION_RUNTIME_PENDING_VISUAL_CHECK,ACTIVATION_FAIL_ROLLED_BACK,ACTIVATION_FAIL_NEEDS_MANUAL.
- Upload report.
7. Separate follow-up task
After P10D runtime activation, open a separate governance cleanup:
Deploy Governance Cleanup / Đ41 patch
Scope:
- document official deploy path;
- resolve VPS/origin divergence;
- fix compose drift;
- remove dead Artifact Registry path;
- add DOT check for stale
.outputand deploy drift; - decide whether #4 becomes official local deploy path or GHA direct is repaired.
Do not mix this with P10D activation.
8. Boundary
No git pull/push/reset.
No docker-compose edit.
No Directus/DB mutation.
No feature code changes.
No GitHub Actions in this activation task.
Rollback must use exact backup path.