--- type: rule name: refatoracao-segura description: Toda refatoração deve preservar comportamento e ter cobertura de testes scope: local trigger: always_on updatedAt: "2026-06-19" --- # Regra: Refatoração Segura ## Contexto Refatoração é a melhoria da estrutura interna do código **sem alterar seu comportamento externo**. Sem essa garantia, refatoração vira regressão. ## Regra Antes de executar qualquer refatoração, verificar: 1. **Testes existem** — o comportamento que será afetado tem cobertura 2. **Testes passam** — o estado antes da mudança é verde 3. **Passos pequenos** — cada mudança deve ser verificável isoladamente 4. **Sem surpresas** — nenhuma funcionalidade nova introduzida junto com refatoração Se não há testes cobrindo o trecho: - **PARAR** a refatoração - Solicitar ao `@ag-testes` a criação de testes de cobertura - Só prosseguir após testes existirem e passarem ## Exemplos ### ✅ Correto ``` 1. Verificar testes existentes para `calcularLicenca()` 2. Executar testes → todos passam 3. Extrair cálculo de multa para `calcularMulta()` 4. Executar testes → todos passam 5. Commit: "refactor: extrair calcularMulta de calcularLicenca" ``` ### ❌ Incorreto ``` 1. Refatorar `calcularLicenca()` inteiro 2. Adicionar nova regra de desconto (feature!) 3. Descobrir que não tinha testes 4. Commit: "refactor: melhorar cálculos" ← mentira, é feature + refatoração ``` ## Impacto Sem esta regra, refatorações introduzem regressões silenciosas que só são descobertas em produção. ## Referências - Martin Fowler — "Refactoring: Improving the Design of Existing Code" - Persona: `agents/ag-refatorar/persona.md`