to-spec
Propósito
Converter o entendimento consolidado em CONTEXT.md e DOMAIN.md em uma especificação executável — escopo, não-escopo, comportamento esperado com critérios de aceitação verificáveis, casos de erro, dependências e riscos — na granularidade de uma spec por unidade entregável.
Quando usar
- Uma unidade entregável está pronta para ser especificada antes de
implement. - Um
implementem andamento encontrou desvio de escopo e voltou: a spec precisa ser revisada ou uma nova precisa ser criada. - Um handoff exige que o trabalho pendente fique especificado para outro agente executar.
Quando NÃO usar
- Não existem
CONTEXT.mdeDOMAIN.mdvigentes — rodegrill-with-docsedomain-modelingprimeiro. Spec sem lastro especifica suposição. - A mudança é trivial e mecânica (typo, ajuste de texto) e o operador dispensou spec explicitamente.
- O que se quer é registrar uma decisão, não um comportamento — o instrumento é um ADR ou documento de decisão, não uma spec.
Entradas
projects/<slug>/CONTEXT.mdeprojects/<slug>/DOMAIN.mdvigentes.- A unidade entregável pretendida, em 1 frase.
- As specs já existentes em
projects/<slug>/specs/, para numeração e para checagem de sobreposição.
Processo
- Verifique as pré-condições.
CONTEXT.mdeDOMAIN.mdvigentes. Se a unidade a especificar depende de lacuna registrada no contexto, a spec não pode nascer: volte paragrill-with-docsou registre a dependência como bloqueio. - Recorte a unidade entregável. Uma spec descreve algo entregável e verificável em uma frente de
implement. Se o recorte não cabe, divida em specs menores e explicite a ordem entre elas. - Numere e nomeie.
NNNé o maior número existente emprojects/<slug>/specs/mais um, com três dígitos; o título é curto e em kebab-case. Números não são reutilizados nem preenchem buracos. - Escreva escopo e não-escopo. O não-escopo é lista explícita do que um leitor razoável poderia supor incluído e não está. Não-escopo vazio é sinal de recorte mal feito.
- Especifique o comportamento esperado. Para cada comportamento, um ou mais critérios de aceitação VERIFICÁVEIS: ação ou comando concreto, e resultado observável esperado. "Funciona corretamente" não é critério; "a rota responde 400 com mensagem contendo X" é.
- Especifique os casos de erro. Entrada inválida, estado inesperado, falha de dependência externa — e o comportamento esperado em cada um. Caso de erro sem comportamento definido é decisão empurrada para o improviso do implementador.
- Liste as dependências. O que precisa existir ou estar decidido antes da implementação. Dependência que exige escrita fora da raiz do Shizune ou mudança de ambiente é marcada
[AUTORIZAÇÃO]— só o operador libera. - Registre riscos e aberturas. O que pode invalidar a spec, o que ficou deliberadamente em aberto e quem decide.
- Rastreie para o domínio. Cada requisito referencia a entidade, invariante ou transição do
DOMAIN.mdque o sustenta. Requisito que contradiz um invariante exige decisão registrada — nunca contradição silenciosa. - Escreva a spec no destino indicado na seção Saída, seguindo o template. Frontmatter v2 obrigatório.
Saída
- Artefato: especificação executável de uma unidade entregável.
- Destino:
projects/<slug>/specs/spec-NNN-<titulo>.md(a partir da raiz do Shizune). - Template: templates/spec.md.
- Spec superada por revisão vai para
archive/do projeto — nada é apagado (ADR-015).
Critérios de conclusão
projects/<slug>/specs/spec-NNN-<titulo>.mdexiste, com frontmatter v2, numeração sequencial correta e statusvigente.- Todo critério de aceitação é verificável por um agente sem interpretação subjetiva: há ação concreta e resultado observável esperado.
- O não-escopo é explícito e não vazio (ou a vacuidade está justificada).
- Todo caso de erro relevante tem comportamento esperado definido.
- Toda dependência está listada; as que exigem autorização do operador estão marcadas
[AUTORIZAÇÃO]. - Todo requisito rastreia para o
DOMAIN.md; nenhum contradiz invariante sem decisão registrada. - Nenhum número de negócio aparece como fato sem fonte — números não medidos são hipóteses a validar e estão marcados como tal.
Anti-padrões
- Spec guarda-chuva. Vários entregáveis em uma spec só: impossível dar por concluída, impossível auditar.
- Critério subjetivo. "Deve ser rápido", "deve funcionar bem" — critérios que dois leitores avaliam de formas diferentes não são critérios.
- Especificar a implementação em vez do comportamento. Ditar estrutura interna de código onde bastava definir o observável, amarrando o implementador sem ganho de verificabilidade. (Restrições reais de stack e arquitetura, quando existem no contexto, entram como dependências ou requisitos — com fonte.)
- Caminho feliz apenas. Spec sem casos de erro terceiriza as decisões difíceis para o momento errado.
- Contradição silenciosa. Requisito que viola invariante do
DOMAIN.mdsem registrar a decisão de mudá-lo. - Escopo elástico. Reabrir e ampliar a spec durante o
implementem vez de criar spec nova — o desvio deixa de ser rastreável.