- ci.yml: on push removido → schedule */30 + workflow_dispatch (fundido com a estrutura de job único sequencial do OPS62 X1) - job gate (host, main-only, sem pnpm): revision do container rodando no homeserver (label org.opencontainers.image.revision — o compose pode mentir após rollback falho) + diff + classificador .dockerignore - fail-open: revision desconhecida → suite roda (verde); incapaz de classificar → run vermelho (nunca blackout silencioso); deploy duplo-gated (needs: [checks, gate] + if explícito) - deploy-homeserver.sh: guard 'already deployed' idempotente (mesma revision) - agent-pool.yml removido; pool dormente (144 pnpm install/dia no tick */10) - specs: dockerignoreMatch, ciClassifyProduction (incl. git-diff com repo scratch e exit codes), pins ciSkipInvariants/deployScript; HIGH_RISK_EXACT - docs: runbook (janela/gate/verificação ao vivo/falhas), AGENTS.md, AGENT-OPS.md (tabela X1 fundida), skills pool dormente, changelog OPS65 - impl plan aprovado; intenção marcada entregue
1.9 KiB
Recently resolved (2026-08-18): OPS65 — CI do main em janela fixa de 30 min + agent-pool morto. O ci.yml não dispara mais a cada push: roda por schedule */30 + workflow_dispatch, e um gate barato (gate, runs-on host, main-only, sem pnpm — scripts/ci-classify-production.mjs + matcher puro scripts/lib/dockerignore.mjs) lê a revision do container rodando no homeserver (label org.opencontainers.image.revision — o compose pode mentir após rollback falho), diffa contra o HEAD de main e classifica "mudança de produção" usando o .dockerignore como fonte da verdade (o que não entra no build context não justifica build novo; docs//.agents/.env* viram skip; scripts//tests/.forgejo/AGENTS.md contam como produção — conservador, qualquer dúvida roda a suite). Deployed == HEAD → suite e deploy skipped, run verde (o rollup checks já aceita skipped); qualquer outra coisa → suite full + deploy na mesma janela; dispatch sempre roda tudo; o deploy-homeserver.sh ganhou guard de idempotência "already deployed" (revision do container já no SHA → skip verde). Fail-open: revision desconhecida → suite roda (main sempre verificada); gate incapaz de classificar → suite roda e o run fica vermelho (nunca blackout silencioso); deploy duplo-gated (needs: [checks, gate] + if explícito — nunca deploy às cegas nem com suite vermelha). agent-pool.yml removido (o tick */10 custava 144 pnpm install/dia na workstation; scripts/skills do pool ficam dormentes). Testes: dockerignoreMatch + ciClassifyProduction unit novos (matcher contra o .dockerignore real, fail-open, dispatch, caminho git com repo scratch, exit codes), pins do ciSkipInvariants (janela 30, sem push, ref guard, ifs fail-open) e do deployScript (guard), HIGH_RISK_EXACT += classificador. Docs: runbook docs/ops/teqo-1313-deploy.md (janela/gate/"already deployed"/falhas), AGENTS.md, docs/AGENT-OPS.md.