Force o ciclo vermelho-verde-refatorar com seu agente. Nunca mais código sem teste, nunca mais teste sem falha vista.
A fase RED é obrigatória e frequentemente pulada. Um agente sem a skill TDD escreve o código e depois escreve testes que passam — mas nunca confirma se os testes teriam falhado sem o código. Isso cria uma falsa sensação de segurança: testes que sempre passam não testam nada.
Agentes de IA tendem à super-engenharia por padrão. Quando escrevem código, frequentemente adicionam abstrações "que podem ser úteis mais tarde", generalizam casos que ainda não existem e criam hierarquias de classes onde uma função seria suficiente. YAGNI e DRY são os freios necessários.
You Ain't Gonna Need It
Don't Repeat Yourself
Instrução para o agente
Quando o agente propuser abstrações que vão além do teste atual, peça explicitamente: "Escreva apenas o código necessário para este teste passar. Sem abstrações antecipadas."
Agentes cometem erros específicos ao escrever testes que são difíceis de identificar sem experiência. Conhecer esses antipadrões permite corrigi-los antes que contaminem o conjunto de testes e criem uma falsa sensação de cobertura.
O teste verifica o que o código faz, não o que deveria fazer. Ex: expect(add(1,2)).toBe(add(1,2)). Sempre passa, nunca falha, testa nada.
Mockar tanto que o teste verifica apenas se o mock foi chamado, não se o comportamento real é correto. O teste passa mesmo se a lógica estiver completamente errada.
Verificar detalhes de implementação (que variáveis existem, que métodos foram chamados internamente) em vez de comportamento observável. Quebra a qualquer refatoração.
expect(true).toBe(true) ao final de uma função que pode lançar exceção. Verifica apenas que não explodiu, não que produziu o resultado correto.
A disciplina de commitar ao final de cada ciclo RED-GREEN completo cria um histórico granular que serve como rede de segurança. Se algo quebrar na tarefa 7, você tem um ponto de retorno na tarefa 6 com todos os testes passando — sem precisar desfazer horas de trabalho.
# Mensagem de commit por ciclo
test: add validateEmail() — RED
feat: implement validateEmail() — GREEN
refactor: extract regex to constant — REFACTOR
Com commits por ciclo, você pode ver exatamente quando cada comportamento foi adicionado, qual teste o motivou e qual refatoração aconteceu. É um histórico narrativo do desenvolvimento, não apenas uma lista de mudanças.
A fase REFACTOR só começa depois que todos os testes estão verdes. Nela, você melhora a estrutura do código — extrai funções, remove duplicação, melhora nomes — garantindo que nenhum teste quebre durante o processo. Cada passo de refatoração é imediatamente verificado.
Regra de ouro
Se um teste quebrou durante o refactor, desfaça o último passo imediatamente. Não tente consertar o teste — o refactor é que saiu do trilho. Volte ao verde antes de continuar.
Use o plano do módulo anterior. Para cada tarefa, execute o ciclo completo RED-GREEN-REFACTOR com o agente. O exercício termina quando todas as tarefas do plano foram implementadas com testes passando e commits por ciclo.
Critério de conclusão
Todas as tarefas do plano implementadas, todos os testes passando, histórico de commits com pelo menos um commit por ciclo. Sem código não coberto por teste.