Deploy Pipeline · OMEGA-102
Consola operativa de la entrega ejecutable CI/CD VPS. Runbook de 4 fases — contención, unblock CI, deploy productivo, branch protection final.
PROTOCOLO ABSOLUTO del operador (2026-08-23) — commit/push/branch/PR/deploy = 0 hasta checklist 100% + validación integral. Desde 2026-08-29: flujo PR-per-anomalía del operador (#470..#518) — cada merge bajo 14 required checks + reviews, deploy veraz y L4 por PR.
Checklist maestro incompletoCUMPLIDA
desbloquea cuando: 100% de las tareas implementables CLOSED/verificadas (XLS-QB 88 + FE-MASTER + WP-R)
fuente: .ai-work/TASK_REGISTRY.json (fuente canónica local)
evidencia (2026-09-04): FIRMAZO §17 2026-08-25 (ARBX-0015). Censo registry 2026-09-04: 194 filas → 193 CLOSED/CLOSED-VERIFIED/LOCALLY_VERIFIED + 1 BLOCKED_OPERATOR (ARBX-E1-01 = decisión D10); 0 PENDING/IN_PROGRESS.
Validación integral local pendienteCUMPLIDA
desbloquea cuando: suite completa + typecheck verde sobre el árbol final (no por-tarea)
fuente: §78 matriz de aceptación del gate final
evidencia (2026-09-04): Árbol final 5074bb4e: FE tsc --noEmit 0 errores + vitest 1016/1016 (115 archivos); api-server vitest 659/659 (54 archivos); Rust vía CI (AppControl local, R8): head #518 28/28, SHA final 40/40.
Revisión cruzada pendienteCUMPLIDA
desbloquea cuando: 0 filas PENDING/IN_PROGRESS en el registry (R3/R6 cerrados en ambas lanes)
fuente: .ai-work/TEAM_BOARD.md (vista derivada)
evidencia (2026-09-04): Censo registry 2026-09-04: 0 filas PENDING/IN_PROGRESS; verificación cruzada R3/R6 documentada (cont.89–128); TEAM_BOARD regenerado desde el registry (SSOT).
Gates de regresión sin verificación post-deployCUMPLIDA
desbloquea cuando: ARBX-R-0001..0004 + G-Gates §37 verdes en L4 post-deploy (probe vivo, no local)
fuente: docs/governance/HARDENING_ANTI_REGRESION.md
evidencia (2026-09-04): L4 vivo: VPS HEAD == 5074bb4e (deploy veraz); /api/gates/status paper_mode PASSED (capital expuesto 0); /api/status 7/7 servicios; XLEN arbx:opps:detected 10.002; PG MAX(detected_at) fresco; ARBX_TRADE_MODE=paper; operator/me y svcctrl admin = 401 honestos.
CI no puede correr bajo el protocoloSUPERADA
desbloquea cuando: el ÚNICO commit del gate final dispara los 14 required checks — nada antes
fuente: .github/workflows (branch protection 14 checks)
evidencia (2026-09-04): La premisa quedó superada por el flujo PR: branch protection viva = 14 required contexts (strict + enforce_admins + reviews); cada PR #470..#518 los disparó — head #518: 28/28 incl. CodeQL; SHA final: 40/40.
Autorización operador del gate finalPENDIENTE OPERADOR
desbloquea cuando: aprobación explícita WP-F + KNOWN_GOOD_REVISION (gate ARBX-R-0004 en scripts/deploy.sh)
fuente: scripts/deploy.sh (gates veraces) + directiva operador
evidencia (2026-09-04): WP-F 2026-08-25 aprobado por el operador vía merge #464 (deploy verificado, ARBX-0017). Pendiente operador: decisión D10 wiring de identidad backend (síntoma FE ya resuelto por #512) y flips SIM_BACKEND (S4 labels). Toda autorización de gate final sigue siendo operador-only.
nivel-(b): sin endpoint runtime de registry/CI — los estados por razón son evidencia estática fechada (verificable contra git/API GitHub/probes), NO estado vivo ni fabricado (RULE 00)
llevar arbitragex-v2 del estado actual (CI 100% rojo, repo PUBLIC, branch protection sin status checks) a producción operativa en VPS via GitHub Actions
16
5
7
10
Orden canónico
Rollout de 4 fases mandatorias
Aplicación secuencial — ninguna fase puede ejecutarse fuera de orden.
Privatizar repo (P01 crítico)
gh repo edit hefarica/arbitragex-v2 --visibility private --accept-visibility-change-consequencesEl código de Asimetría Topológica NO puede ser público — docs/REPO_VISIBILITY_POLICY.md
Secret scanning + push protection
gh api -X PATCH repos/hefarica/arbitragex-v2 -f security_and_analysis[secret_scanning][status]=enabled -f security_and_analysis[secret_scanning_push_protection][status]=enabledAplicar workflows del PR (auto via merge)
codeql.yml · dependabot.yml · policy-check.yml
Branch protection · 14 required checks
bash scripts/setup_branch_protection.shIdempotente · requiere GITHUB_TOKEN con admin:repo
Pre-commit hooks locales
pip install pre-commit && cp config/pre-commit-config.yaml .pre-commit-config.yaml && pre-commit installAplicar fixes idempotentes
bash scripts/apply_omega102_fixes.shCommit unblock
git add -A && git commit -m "fix(omega102): unblock CI · resolve 5 root causes [P01-P05]"Trigger workflow
gh workflow run deploy-production.yml --ref main -f confirm_sha=<full_sha> -f confirm_environment=production-vpsNO paths alternativos · NO --admin · NO push directo · NO SSH manual
Enforce required checks
bash scripts/setup_branch_protection.sh --enforce-required-checksDoctrina "POR EL HAZ DE LUZ SOLO PASA QUIEN ES VISTO" materializada
scripts/apply_omega102_fixes.sh. Cada fila incluye CVE/RUSTSEC cuando aplica, el artefacto que la materializa y la verificación PASS esperada.lru 0.12.5 — IterMut unsound
RUSTSEC-2026-0002patches/01_lru_bump.patch (bump → 0.13)
postcss <8.5.10 via Next 14.2.3
GHSA-qx2v-qp2m-jg93patches/02_postcss_override.patch (overrides ^8.5.10)
rustfmt drift v2_shadow_replay.rs:436
cargo fmt --all aplicado en este PR
Constantes fuera de chains.rs
Refactor + byte tests (incluido en patches)
ANVIL_FORK_URL blank + reporter path
Documentado en docs/DEPLOY_PRODUCTION.md § 1
deploy-production.yml · sin paths alternativos.- gate 01Confirm environment
Aprobación humana @hefarica · GitHub Environment production-vps
- gate 02CI green
14 required status checks PASS
- gate 03Build images
buildx multi-arch → GHCR + cosign keyless + SBOM Syft + Trivy
- gate 04Pre-deploy snapshot
pg_dump + Redis BGSAVE + nginx state + vault state on-chain
- gate 05Deploy green slot
SSH al VPS · docker compose up · sqlx migrate
- gate 06Smoke tests
7 checks obligatorios · scripts/smoke-tests.sh
- gate 07Cutover OR rollback
nginx swap blue→green · o scripts/rollback.sh automático
Inventario
16 artefactos ejecutables
Sin recomendaciones — solo artefactos materializados, listos para merge.
.github/workflows/codeql.ymlSAST security-extended Rust+TS.github/workflows/deploy-production.ymlpipeline 7 gates VPS.github/workflows/dependabot.ymlupdates semanales cargo/npm/actions (lunes 09:00 Bogotá).github/workflows/policy-check.ymlverificación horaria policies repopatches/01_lru_bump.patchbump lru 0.12 → 0.13 (RUSTSEC-2026-0002)patches/02_postcss_override.patchoverrides postcss ^8.5.10 (GHSA-qx2v-qp2m-jg93)scripts/apply_omega102_fixes.shaplicador idempotente 5 fixes CIscripts/smoke-tests.sh7 smoke checks post-deployscripts/rollback.shrollback determinista (DB + nginx + slot)scripts/setup_branch_protection.shPUT branches/main/protection con 14 contextsconfig/CODEOWNERSpaths backend/contracts/frontend/edge/workflows → @hefaricaconfig/pre-commit-config.yamlcargo fmt+clippy, tsc, forge build, gitleaks, block .envdocs/INCIDENT_RUNBOOK.mdmatriz INC-01 a INC-10 + killswitch HMAC + rollback + Tribunaldocs/ROTATION_POLICY.mdinventario secrets + protocolo rotación + calendario 2026docs/DEPLOY_PRODUCTION.mdanatomía 7 gates + métricas éxito + R8 límitesdocs/REPO_VISIBILITY_POLICY.mdregla absoluta PRIVATE + monitoring + forksDoctrina R8 · Fail-honest
Límites declarados explícitamente
Lo que la entrega NO resuelve — para que el operador decida con información completa.
Cosign keyless
Requiere OIDC GitHub válido — si falla, no hay alternativa local firmada
TEE attestation
Asume signer en SGX/SEV-SNP real — en VPS sin hardware TEE el stage no es ejecutable y se declara como limitación (fail-honest; no existe implementación sustituta)
Blue/green
Asume ~8GB RAM extra disponibles en VPS — degradar a recreate strategy si insuficiente
Smoke tests
Validan superficie HTTP — no garantizan correctness de Asimetría Topológica (requiere shadow-replay continuo, separado)
Rollback DB
RPO=15min — transacciones post-snapshot se pierden
Validación de la entrega
Criterio OMEGA-OK
Marca cada ítem conforme avances. Estado local en el navegador — no persiste.
Estado local — no persiste. Para auditoría real, los comandos CLI listados en cada ítem son la fuente de verdad.
Estrategia de merge
Dos PRs secuenciales — evita PR monolítico
Scope
- patches/*
- scripts/apply_omega102_fixes.sh
- config/pre-commit-config.yaml
Efecto: Resuelve causas raíz CI → enables los 5 checks rojos a verdes
Blocker: Sin esto, el segundo PR no puede mergearse
Scope
- .github/workflows/*
- scripts/{smoke-tests,rollback,setup_branch_protection}.sh
- config/CODEOWNERS
- docs/*
Efecto: Activa el pipeline completo
Blocker: Depende del primer merge
Comandos operativos
Triggers principales — copy-paste seguro
gh repo edit hefarica/arbitragex-v2 --visibility private --accept-visibility-change-consequencesbash scripts/apply_omega102_fixes.shgh workflow run deploy-production.yml --ref main -f confirm_sha=<full_sha> -f confirm_environment=production-vpsbash scripts/setup_branch_protection.sh --enforce-required-checksFirmas requeridas
Tribunal + Operador
Tribunal R7 (rigor científico)
PASSartefactos materializados, sin teoría
Tribunal R8 (fail-honest)
PASSlímites declarados explícitos en § "Doctrina R8"
Operador @hefarica
PENDINGreview + merge fase por fase
Próxima acción tras merge ambos PRs: ejecutar gh workflow run deploy-production.yml con SHA del segundo merge en environment production-vps. Smoke tests serán el primer test de fuego real del pipeline.