---
id: pre-push-quality-gate
agent: devops
title: Gate de qualidade pré-push
inputs: [story, branch atual]
outputs: [veredito do gate (PASS/FAIL), relatório de gate]
elicit: false
modes: [interactive, yolo]
---

# Gate de qualidade pré-push

**Objetivo:** rodar todos os gates de qualidade (lint, typecheck, test, build, revisão automatizada) e
emitir um veredito objetivo — PASS libera a subida; FAIL devolve ao dono do conserto. Nada vermelho
chega à porta de saída.

**Pré-condições:**
- Existe trabalho a subir: branch com commits locais à frente do remoto. Se não há nada novo, **pare**
  e reporte "nada a subir".
- A story está em `Ready for Review`/`Done` com gate de QA aprovado. Se a story não passou pelo
  quality gate do @qa, **pare** e devolva ao @qa antes de tocar nos gates de push.

## Passos

1. **Detecte o contexto do repositório** — remoto, modo (framework-dev vs project-dev) e branch atual.
   Nunca assuma um repo fixo. Se for greenfield (sem git), **pare** e recomende `*environment-bootstrap`.
2. **Varra por segredos** no diff a subir (`git diff origin/{branch}...HEAD`): credencial, token, chave
   ou `.env`. Qualquer match → FAIL imediato, antes de qualquer outro gate. O que vaza pra `main` não volta.
3. **Rode lint.** Vermelho → registre os erros e marque o gate como FAIL.
4. **Rode typecheck.** Qualquer erro de tipo → FAIL.
5. **Rode a suíte de testes.** Um teste falho → FAIL. Suíte verde é pré-requisito da subida.
6. **Rode build.** Falha de build → FAIL.
7. **Rode a revisão automatizada de código** na mudança a subir. Classifique os achados:
   CRITICAL → bloqueia (FAIL); HIGH → sinalizo e recomendo correção; MEDIUM/LOW → documento, não bloqueio.
8. **Emita o veredito.** PASS somente se: sem segredos, lint limpo, typecheck 0, suíte verde, build ok e
   sem CRITICAL. Caso contrário FAIL, com o relatório do que reprovou.
9. **Roteie.** PASS → libera para `*push`/`*create-pr` (com confirmação humana). FAIL → devolvo ao @dev
   o relatório de correção; se o que falta é o gate de story, devolvo ao @qa. Eu não corrijo o código.

## Critério de pronto (DoD)

- [ ] Varredura de segredos executada — diff limpo de credenciais/`.env`
- [ ] lint, typecheck, test e build executados, todos verdes
- [ ] Revisão automatizada rodada e achados classificados (sem CRITICAL aberto)
- [ ] Veredito explícito emitido (PASS ou FAIL) com relatório
- [ ] Em FAIL, story devolvida ao dono do conserto (@dev ou @qa) — não subi nada

## Falha / recuperação

- **Qualquer gate vermelho** → veredito FAIL, push bloqueado, relatório devolvido a @dev. Pressa não fura gate.
- **CRITICAL da revisão** → FAIL; devolvo a @dev e não libero a subida.
- **Segredo no diff** → FAIL imediato; oriento a remover do histórico antes de qualquer push.
- **Ferramenta de gate indisponível** (lint/build não configurado) → registro a lacuna e escalo; não
  declaro PASS sobre um gate que não rodou.
