From dev-team-kit-fv
Enforces red-green-refactor TDD cycle for building features and fixing bugs test-first, combating horizontal slicing anti-pattern.
npx claudepluginhub felvieira/claude-skills-fvThis skill is limited to using the following tools:
Skill que **forca** o ciclo TDD correto: 1 teste → 1 implementacao → repete. Combate o anti-padrao "escrevo 5 testes, depois 5 implementacoes" — que produz testes ruins (testam shape, nao behavior).
Guides TDD with red-green-refactor loop using vertical slicing, integration tests through public interfaces, and avoiding implementation-coupled tests for features and bug fixes.
Guides test-driven development using red-green-refactor cycle with vertical slices, integration tests via public APIs, and anti-horizontal slicing. For TDD features, bugs, or test-first dev.
Guides TDD workflow with red-green-refactor cycle: plan interfaces, tracer bullet tests, minimal implementation to green, refactor under tests. For explicit TDD requests only.
Share bugs, ideas, or general feedback.
Skill que forca o ciclo TDD correto: 1 teste → 1 implementacao → repete. Combate o anti-padrao "escrevo 5 testes, depois 5 implementacoes" — que produz testes ruins (testam shape, nao behavior).
Adaptado de mattpocock/skills/engineering/tdd e integrado ao kit (skill 05 QA + policies/vertical-slices.md).
Esta skill segue GLOBAL.md, policies/execution.md, policies/quality-gates.md, policies/vertical-slices.md, policies/source-driven.md, policies/writing-clarity.md.
Tests should verify behavior through public interfaces, not implementation details. Code can change entirely; tests shouldn't.
Bom teste e integration-style: exercita codigo real atraves de API publica. Descreve o que o sistema faz, nao como. Le como spec — "user can checkout with valid cart" diz exatamente que capacidade existe. Sobrevive a refactor.
Mau teste acopla a implementacao: mocka colaboradores internos, testa metodo privado, verifica via DB direto. Sinal de alerta: teste quebra ao refactorar sem mudar comportamento. Se renomear funcao interna quebra teste, o teste estava testando implementacao.
CONTEXT.md ou docs/glossary.md)docs/adr/)tests/ ou __tests__/ (path conforme convencao do projeto)NAO escrever todos os testes primeiro, depois toda a implementacao. Isso e horizontal slicing — tratar RED como "escrever todos os testes" e GREEN como "escrever todo o codigo".
Produz testes ruins:
ERRADO (horizontal):
RED: test1, test2, test3, test4, test5
GREEN: impl1, impl2, impl3, impl4, impl5
CERTO (vertical):
RED→GREEN: test1→impl1
RED→GREEN: test2→impl2
RED→GREEN: test3→impl3
...
Esta diretriz ecoa policies/vertical-slices.md — fatia vertical, nao horizontal.
Ao explorar codebase, usar glossario de dominio do projeto para que nomes de teste e vocabulario de interface batam com a linguagem do projeto. Respeitar ADRs na area tocada.
Antes de escrever qualquer codigo:
Pergunta-chave: "Como deve ser a interface publica? Quais comportamentos sao mais importantes testar?"
Voce nao pode testar tudo. Confirmar com usuario quais comportamentos importam mais. Foco em paths criticos e logica complexa, nao todo edge case possivel.
Escrever UM teste que confirma UMA coisa sobre o sistema:
RED: Escrever teste para o primeiro comportamento → teste falha
GREEN: Escrever codigo minimo para passar → teste passa
Esse e o tracer bullet — prova que o caminho funciona end-to-end.
Para cada comportamento restante:
RED: Escrever proximo teste → falha
GREEN: Codigo minimo para passar → passa
Regras:
Apos todos os testes passarem, procurar oportunidades de refactor:
Nunca refactore enquanto RED. Chegue ao GREEN primeiro.
[ ] Teste descreve comportamento, nao implementacao
[ ] Teste usa apenas interface publica
[ ] Teste sobreviveria a refactor interno
[ ] Codigo e minimo para esse teste
[ ] Nenhuma feature especulativa adicionada
Pensamentos que indicam STOP — voce esta racionalizando:
| Pensamento | Realidade |
|---|---|
| "Vou escrever os 5 testes agora porque ja sei o que precisa" | Horizontal slicing. Volte ao tracer bullet. |
| "Esse teste vai precisar de mock do DB pra rodar" | Provavelmente esta testando implementacao. Reescreva pra usar interface publica. |
| "Adicionar funcionalidade extra agora porque ja estou aqui" | Nao antecipe. Codigo minimo para o teste atual. |
| "Refactor enquanto vermelho — vai ficar mais limpo" | Nao. GREEN primeiro, refactor depois. |
| "O teste passou na primeira tentativa, sem ter visto vermelho" | Voce pode estar testando algo que ja existia. Garanta que o teste falha sem o codigo novo. |
| "Vou testar metodo privado pra cobrir tudo" | Metodo privado nao e contrato. Teste comportamento via interface publica. |
| "Vou querer esse teste depois entao escrevo agora" | Especulativo. Escreva quando precisar. |
| "Esse cenario e improvavel" | Se e improvavel, nao teste. Se e critico, escreva o teste agora. |
| "Vou pular TDD nesta feature porque e simples" | "Simples" muitas vezes vira complexo. Comece TDD, abandone se ficar obvio que nao agrega. |
Coordenar com skill 38 (Architecture Deepener) para identificar modulos shallow que merecem deepening antes de escrever teste.
TDD opera dentro de uma vertical slice. Sequencia:
/to-issues quebra feature em vertical slicesNAO tentar TDD cross-slice — comportamento de slice X nao deve depender de teste de slice Y.
Apos conclusao:
/build: pode ativar TDD se task descrita como "TDD" ou "test-first"Para deep dives consultar:
docs/skill-guides/tdd-deep-modules.md (a criar conforme demanda) — adaptacao de tdd/deep-modules.mddocs/skill-guides/tdd-interface-design.md — interface design para testabilidadedocs/skill-guides/tdd-mocking.md — quando mockar (raramente) e comodocs/skill-guides/tdd-refactoring.md — refactor checklist apos GREEN