Skip to content

[ADR-0080][P0][INVIOLÁVEL] Commitar ADR: gate de validação LOCAL antes de QUALQUER push/PR — all-greens, zero regressões #1152

Description

@FabioLeitao

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.

  1. O código NUNCA sai desta máquina com a menor chance de qualquer coisa que não seja ALL GREENS e NO REGRESSIONS.
  2. 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.
  3. 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.
  4. 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.

Metadata

Metadata

Assignees

Labels

P1High — must fix before next stable tagoperator-gatedStay closed only with Gate-Close-Approved-By trailer (#990, ADR-0072)

Type

Fields

No fields configured for Task.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions