Ação: commitar o texto abaixo VERBATIM em docs/adr/ADR-0080-local-validation-gate-inviolable.md (+ .pt_BR.md se o par bilíngue aplicar). Ordem direta do operador/owner.
ADR-0080 — O gate de validação LOCAL é INVIOLÁVEL: check-all completo (all-greens, zero regressões) antes de QUALQUER push ou PR
- Status: Accepted
- Date: 2026-07-03
- Deciders: Fabio Tavares Leitão (operador / owner do repositório)
- Gate-Change-Approved-By: Fabio Tavares Leitão
Contexto
O tier de validação LOCAL — pre-commit + os testes anti-regressão completos (pytest, ~1653) + Bandit + Zizmor + Semgrep — foi construído ao longo de meses exatamente para NÃO depender do round-trip do GitHub (esperar minutos por um erro remoto e ter de refazer). As regras check-all-gate.mdc (alwaysApply: true, "check-all before commit/PR") e never-weaken-security-gates.mdc sempre mandaram rodar isso local antes de push/PR.
Em 2026-07-03 constatou-se: (a) não havia pre-push hook forçando o gate; (b) o executor pushou rodando apenas testes targeted (2 passed in 2.39s), não o suite completo; (c) um modelo chegou a sugerir confiar no CI remoto em vez do gate local. Isso contradiz frontalmente a intenção fundadora e é inadmissível.
Decisão (absoluta, não-negociável)
Nenhum agente, modelo, ferramenta ou automação tem o direito de sequer SUSPEITAR que o check-all e todo o ritual de validações locais possa não rodar antes de QUALQUER push ou PR para o GitHub.
- O código NUNCA sai desta máquina com a menor chance de qualquer coisa que não seja ALL GREENS e NO REGRESSIONS.
- O ritual local completo (
./scripts/check-all.sh --enforced — pre-commit + 1653 pytest + Bandit + Zizmor + Semgrep) DEVE passar 100% verde LOCAL, ANTES de todo push e de toda abertura/atualização de PR.
- O que o GitHub CI faz ou deixa de fazer DEPOIS que o código é entregue é IRRELEVANTE para esta regra. O CI é backstop, NUNCA substituto. Confiar no CI em vez do gate local é PROIBIDO.
- Sugerir, propor, adiar, reduzir ou agir como se o gate local pudesse ser pulado = VIOLAÇÃO desta ADR.
Enforcement (mecânico + auto-protegido)
Consequências
- Pushes ficam mais lentos localmente (rodar 1653 + scans). ACEITÁVEL e INTENCIONAL — é o custo de nunca entregar código quebrado e nunca depender do round-trip remoto.
- Todo clone (T14 / L14 / Cursor) herda o gate no setup.
- Violação = falha de governança → Safe-Hold + report ao operador.
Autoridade
O owner do repositório é o operador (Fabio Tavares Leitão). Claude = auditor read-only. Cursor = executor. Esta ADR é ordem do owner e supera qualquer default de agente ou modelo.
Ação: commitar o texto abaixo VERBATIM em
docs/adr/ADR-0080-local-validation-gate-inviolable.md(+.pt_BR.mdse o par bilíngue aplicar). Ordem direta do operador/owner.ADR-0080 — O gate de validação LOCAL é INVIOLÁVEL: check-all completo (all-greens, zero regressões) antes de QUALQUER push ou PR
Contexto
O tier de validação LOCAL —
pre-commit+ os testes anti-regressão completos (pytest, ~1653) + Bandit + Zizmor + Semgrep — foi construído ao longo de meses exatamente para NÃO depender do round-trip do GitHub (esperar minutos por um erro remoto e ter de refazer). As regrascheck-all-gate.mdc(alwaysApply: true, "check-all before commit/PR") enever-weaken-security-gates.mdcsempre mandaram rodar isso local antes de push/PR.Em 2026-07-03 constatou-se: (a) não havia
pre-pushhook forçando o gate; (b) o executor pushou rodando apenas testes targeted (2 passed in 2.39s), não o suite completo; (c) um modelo chegou a sugerir confiar no CI remoto em vez do gate local. Isso contradiz frontalmente a intenção fundadora e é inadmissível.Decisão (absoluta, não-negociável)
Nenhum agente, modelo, ferramenta ou automação tem o direito de sequer SUSPEITAR que o
check-alle todo o ritual de validações locais possa não rodar antes de QUALQUER push ou PR para o GitHub../scripts/check-all.sh --enforced— pre-commit + 1653 pytest + Bandit + Zizmor + Semgrep) DEVE passar 100% verde LOCAL, ANTES de todo push e de toda abertura/atualização de PR.Enforcement (mecânico + auto-protegido)
.githooks/pre-push+core.hooksPath=.githooks, setup idempotente por clone) rodacheck-all.sh --enforced; falhou → push abortado. (issue [P0][security-gate][INVIOLÁVEL] pre-push hook VERSIONADO: check-all local (1653 + Bandit/Zizmor/Semgrep) ANTES de push/PR — NUNCA removível #1151)Test (Python)) que FALHA se o hook versionado for removido/enfraquecido → PR não faz merge sem o gate presente. O gate protege a si mesmo.Gate-Change-Approved-By: <operador>; sem isso é adulteração e deve parar (Safe-Hold) + reportar ao operador.git push --no-verify/ skip só com aprovação explícita e logada do operador.Consequências
Autoridade
O owner do repositório é o operador (Fabio Tavares Leitão). Claude = auditor read-only. Cursor = executor. Esta ADR é ordem do owner e supera qualquer default de agente ou modelo.