---
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`
