Executar TDD orientado pelo BDD da especificação
Preparação obrigatória
Antes de executar esta skill, carregue obrigatoriamente $specsfy-setup na
raiz do projeto. Em handoff automático, carregue-o de novo antes desta etapa.
Reutilize a raiz confirmada na conversa e não prossiga se o setup apontar uma
pendência.
Modo de interação
Modo de interação: perguntas.
Antes de formular qualquer pergunta, leia e aplique o
Contrato de perguntas numeradas de .specsfy/Spec.md.
Leia o BDD como referência e converta o comportamento especificado em testes TDD executáveis e evidência rastreável. O Gherkin ajuda o usuário e o agente a entender contexto, ação e resultado; ele próprio não é uma suíte de testes.
Proteção obrigatória do banco
Antes de executar qualquer teste focal, suíte ou regressão, confira o comando e o ambiente:
node .agents/skills/specsfy-setup/scripts/check_database_safety.mjs \
--project <raiz> --command "<comando-de-teste>"
Em Laravel, a conferência exige .env.testing, APP_ENV=testing e um banco
explicitamente diferente do banco de desenvolvimento registrado no .env.
Não execute nenhum teste enquanto o resultado for PENDING. Corrija o ambiente
de testes, repita a conferência e prossiga somente depois de SAFE.
Trate IGNORED como descarte obrigatório do comando. Não execute, não adapte
com --force e não peça autorização para rodar migrate:fresh,
migrate:refresh, migrate:reset, migrate:rollback, db:wipe,
schema:drop, prisma migrate reset, DROP DATABASE, DROP SCHEMA,
DROP TABLE, TRUNCATE ou equivalentes. Não use RefreshDatabase nem
DatabaseMigrations; em Laravel, prefira DatabaseTransactions e factories
que criem somente os registros usados pelo caso.
Orquestrar a conversa
Ao concluir esta etapa ou detectar trabalho de outra etapa, anuncie
Pendência detectada: <descrição> — ação: resolvendo nesta etapa e resolva-a
quando pertencer ao próprio escopo. Quando houver troca de responsabilidade,
anuncie Transição automática: $specsfy-06-tdd-bdd → $<destino> — motivo: <motivo> — resultado esperado: <resultado> e carregue imediatamente a skill de
destino, sem pedir confirmação nem repetir o comando. Continue na mesma
conversa. Depois de uma correção necessária a esta etapa, anuncie Retomada automática: $<destino> → $specsfy-06-tdd-bdd — pendência resolvida: <resultado> e retome-a imediatamente. Reavalie o estado após cada handoff para
evitar ciclos. Não peça confirmação para o handoff; ações sensíveis continuam
exigindo autorização específica.
Escolher o modo
prepare: antes da implementação, criar o próximo teste/scenario e provar RED sem escrever código de produção.cycle: executar RED → GREEN → REFACTOR para uma fatia explicitamente escolhida.verify: executar suites e auditar rastreabilidade sem criar comportamento novo.
Se o usuário não indicar o modo, use prepare quando a seção 14 ainda não estiver em execução e cycle quando houver uma tarefa ativa.
Preparar
- Leia
specs/<estado>/<NNNN>-<slug>/spec.md, testes e configuração do projeto. - Exija
Formato: Specsfy/2.0eDefinition Gate: Passed. No modoprepare, useStatus: DefinedePlan Gate: Pending; nos modoscycleeverify, useStatus: PlannedouImplementing. - Selecione uma fatia vertical pequena: um
ACGherkin e seusFR/NFR. - Resolva o runner de testes pela stack antes de escrever testes:
- projeto PHP (
composer.jsonouartisan), inclusive PHP + Node: use Pest; - projeto Node sem PHP: pergunte ao usuário qual runner adotar antes de instalar ou configurar; recomende Vitest por padrão;
- outra stack: preserve o runner de testes existente ou pergunte quando não houver decisão reproduzível.
- projeto PHP (
- Confira o ambiente e o comando com
check_database_safety.mjs. Se o estado não forSAFE, não execute teste algum e mantenha a etapa pendente. - Em Node, considere a decisão materializada quando
package.jsonexpuser o scripttest:tdd; não escolha nem instale dependência silenciosamente. - Leia
references/test-levels.mdpara escolher o nível mais baixo que ainda prova o comportamento.
Usar o BDD para escrever TDD
- Use o bloco Gherkin do
ACemspec.mdcomo contrato de referência sem mudar seu significado. - Não crie, copie nem execute arquivos
.featureou step definitions. Os termos Given/When/Then permanecem apenas naspec.md. - Em PHP, escreva o teste TDD com Pest em
tests/Feature/outests/Unit/, no menor nível que prova o comportamento. Marque cada caso executável, imediatamente junto à sua definição, com:
// SPECSFY: US-001 FR-001 AC-001
- Em Node, depois da resposta do usuário, escreva o teste TDD no runner
escolhido e use
SPECSFY: US-001 FR-001 AC-001. - Materialize no mínimo três casos TDD distintos para a feature inteira e para
cada
US,FReNFR: caminho feliz, regra/variação crítica e falha ou limite material. Um único marcadorSPECSFY:compartilhado pelo arquivo conta como um caso, mesmo que o arquivo contenha vários testes. - Cubra cada
ACcom ao menos um caso TDD, sem multiplicar casos equivalentes. - Escolha unidade, integração, contrato ou browser conforme a fronteira descrita pelo BDD; não crie uma segunda suíte apenas para rotulá-la como BDD.
- Não use mocks para remover justamente a fronteira que o cenário pretende provar.
Ciclo obrigatório
RED
- Leia o BDD de referência e escreva o menor teste TDD que prova o
ACe seus requisitos. - Execute o teste TDD; nunca execute Gherkin.
- Confirme falha pelo comportamento ausente ou incorreto.
- Se falhar por sintaxe, fixture, importação ou ambiente, corrija o teste e repita.
- Se passar antes da mudança, o teste não demonstra o gap: refine-o ou prove que a funcionalidade já existe.
No modo prepare, pare após o RED válido, registre evidência e conclua o
checklist da tarefa [TEST] correspondente. Não
altere Plan Gate; anuncie e retorne automaticamente para
$specsfy-05-tasks, que valida todos os predecessores antes de promover a
spec para Planned.
Registre a linha correspondente na tabela Evidência RED-GREEN-REFACTOR com o RED observado.
GREEN
No modo cycle, escreva o mínimo de código de produção que satisfaça o cenário. Execute primeiro o teste focal e depois a suite relacionada. Não generalize antes de haver um exemplo que exija generalização.
Atualize a mesma linha de evidência com o GREEN observado.
REFACTOR
Com tudo verde, elimine duplicação e melhore nomes/estrutura sem alterar comportamento. Execute novamente as suites relacionadas. Registre o comando de regressão na seção 11 e a evidência na matriz da seção 12.
Auditar rastreabilidade
Execute:
node .agents/skills/specsfy-06-tdd-bdd/scripts/check_traceability.mjs specs/<estado>/<NNNN>-<slug>/spec.md .
Trate como gap cada feature, US, FR ou NFR com menos de três casos TDD e
cada AC sem ao menos um caso. Para NFR verificado manualmente ou por
observabilidade, cite a evidência sem dispensar os três casos automatizáveis;
quando necessário, ajuste --kinds sem remover IDs aplicáveis.
Em specs com Evidence Contract: 1, acrescente --full-chain para exigir
US/FR/NFR/AC → teste → tarefa → evidência.
Durante execução, mantenha Delivery Gate: In Progress e atualize o
Gate do Ato III — Entrega da seção 13. Use Passed somente quando não houver
gap obrigatório, todas as tarefas estiverem concluídas e a Definition of Done
estiver comprovada.
Disciplina sob pressão
| Tentação | Regra |
|---|---|
| “É uma mudança pequena.” | Mudanças pequenas recebem testes pequenos; tamanho não substitui RED. |
| “O código já está pronto.” | Escreva um teste de caracterização; não altere produção para fabricar RED. Para comportamento novo, escolha um caso ainda não atendido. |
| “O prazo permite pular RED.” | Sem falha observada não há prova de que o teste protege o requisito. |
| “O líder autorizou.” | Autoridade pode mudar escopo, não transformar ausência de evidência em TDD. |
| “Testar depois é equivalente.” | Test-first guia o contrato e prova sensibilidade antes da implementação. |
Em uma tarefa de teste, atualize PREP, EXECUTE, VERIFY, VISUAL,
EVIDENCE e IMPROVE conforme cada etapa acontecer. O item VISUAL também é
obrigatório para confirmar se o teste toca uma interface; quando não tocar,
registre Não aplicável e o motivo. Não marque o pai como concluído sem
arquivo, marcador, RED válido, comando/evidência e revisão do processo.
Não escreva código de produção antes que o predecessor TDD informado pelo BDD
da mesma fatia esteja concluído e com RED registrado na spec.
Auditar QA
Depois de executar os runners pertencentes ao repositório, registre Passed ou
a falha na coluna Evidência da seção 12 e audite:
node .agents/skills/specsfy-06-tdd-bdd/scripts/verify_acceptance.mjs \
specs/<estado>/<NNNN>-<slug>/spec.md .
O auditor não executa comandos extraídos de Markdown. AC manual exige método,
responsável e evidência; AC sem resultado impede Delivery Gate: Passed.
Quando houver atestação do runner, repita com --attestation PATH: o auditor
exige exatamente o check acceptance:<slug> aprovado, detail JSON válido e
cobertura de todos os ACs. Texto Passed isolado não substitui essa prova.
Relatar evidência
Informe a fatia, IDs cobertos, arquivo do teste, comando RED, causa da falha, comando GREEN quando aplicável, suite de regressão e gaps de rastreabilidade.
Especialistas sob demanda
Leia references/specialists.md quando o runner, boundary ou oráculo de teste for específico de uma tecnologia. O especialista complementa; esta skill preserva RED/GREEN e rastreabilidade.