teqo-backup/docs/plans/ci-deploy-cooldown-15min-impl.md
Cursor Agent cad3556bce
OPS16: reduce production deploy cooldown from 30 to 15 minutes
Change DEPLOY_COOLDOWN_MS constant, update ci.yml deferral log, and
adjust unit test pins. Closes #259.

Co-authored-by: Francisco Solla <fsolla@users.noreply.github.com>
2026-08-02 18:38:36 +00:00

2.8 KiB

Impl: CI — cooldown de deploy de produção: 30 → 15 min

Status: aprovado Atualizado em: 2026-08-02 Issue: #259 Intenção: docs/plans/ci-deploy-cooldown-15min.md Appetite restante: herdado (~0,25 dia) — só constante + pins

Leitura da intenção

  • Outcome: intervalo mínimo entre deploys READY de produção passa de 30 para 15 minutos; deferral + requeue inalterados; logs/pins honestos.
  • O que NÃO negociar: não remover cooldown; não mudar fonte da idade (Vercel READY production); não tocar ci-pr.yml / required checks / preview Git.
  • O que reavaliar: hipótese do plano de intenção confirma — dono é DEPLOY_COOLDOWN_MS em scripts/lib/vercel-deploy-cooldown.mjs; CLI já deriva minutos do constante.

Abordagem recomendada

flowchart LR
  A[ci.yml deploy job] --> B[vercel-deploy-cooldown.mjs]
  B --> C[evaluateDeployCooldown]
  C --> D{DEPLOY_COOLDOWN_MS}
  D -->|"< 15 min"| E[defer + requeue]
  D -->|">= 15 min"| F[vercel deploy --prod]

Opções consideradas:

  • A) Alterar só DEPLOY_COOLDOWN_MS + pins — mínimo diff, CLI auto-ajusta log.
  • B) Parametrizar via env DEPLOY_COOLDOWN_MINUTES no workflow — flexível, mas YAGNI e duplica fonte da verdade.
  • C) Documentar 15 min só no workflow, constante 30 no script — mente nos testes.

Recomendação: A — uma constante nomeada já é o contrato OPS11; workflow só precisa do echo humano.

Rejeitadas: B (over-engineering); C (pins mentirosos).

Componentes / mudanças

  • DEPLOY_COOLDOWN_MS (scripts/lib/vercel-deploy-cooldown.mjs): 30 * 60 * 1000 → 15 * 60 * 1000.
  • .github/workflows/ci.yml: echo de deferral "30 minutes" → "15 minutes".
  • tests/unit/vercelDeployCooldown.unit.spec.ts: pin da constante + descrições; ajustar waitSeconds no caso 10 min atrás (20 min → 5 min residual).
  • Migration: sem migration.
  • Access / Consent: N/A.
  • UI: N/A (Impeccable A).

Dados → forma

N/A — política de infra.

Fases verificáveis

  1. Constante + workflow log — alterar DEPLOY_COOLDOWN_MS e echo em ci.yml.
  2. Pins unitários — atualizar vercelDeployCooldown.unit.spec.ts.
  3. Gates — pnpm gate:fast; entrega com pnpm push.

Rabbit holes / Não escopo (engenharia)

  • Reescrever docs/plans/ci-deploy-cooldown-vercel.md (histórico OPS11).
  • Parametrizar cooldown por env sem pedido de produto.
  • Batch de merges / teto diário de deploys.

Riscos e mitigação

  • 429 api-upload-free volta: observar pós-merge; reabrir com evidência (assumido na intenção).
  • Echo hardcoded no workflow: aceito — único lugar; constante é fonte da verdade para lógica.

Aceite de engenharia

  • Aceite de produto da intenção ainda coberto
  • Invariantes AGENTS/engineering-standards
  • Testes de domínio previstos (unit pins existentes)