---
id: spec-write-spec
agent: pm
title: Escrever a spec formal (spec pipeline — fase 4)
inputs: ['docs/specs/{slug}/requirements.md', complexity.json e research.md (se existirem)]
outputs: ['docs/specs/{slug}/spec.md formal', cada afirmação rastreada a FR-*/NFR-*/CON-*/achado]
elicit: false
modes: [interactive, yolo]
---

# Escrever a spec formal (spec pipeline — fase 4)

**Objetivo:** gerar a spec formal a partir dos requisitos elicitados — um documento onde **toda
afirmação rastreia** a um FR-*/NFR-*/CON-* ou achado de pesquisa, pronto para a crítica do @qa.

**Pré-condições:**
- `requirements.md` existe e está completo (saída de `spec-gather-requirements`). Se há requisito órfão
  ou ambiguidade não resolvida, **pare** e volte à fase de gather.
- Se o @architect classificou a complexidade (`complexity.json`), respeito o conjunto de fases dele
  (SIMPLE pula pesquisa). Se houver `research.md`, ele é fonte válida de rastro.

## Passos

1. **Carregue os requisitos** (`requirements.md`) e, se existirem, a avaliação de complexidade e a
   pesquisa. Estes são as **únicas** fontes válidas de conteúdo da spec.
2. **Escreva a spec** a partir de `templates/spec-tmpl.md`: contexto/problema, comportamento esperado,
   critérios de aceite, requisitos cobertos, não-escopo, riscos.
3. **Gate Constitucional (Art. IV — No Invention):** para CADA afirmação da spec, anote o rastro ao
   `FR-*`/`NFR-*`/`CON-*` ou ao achado de pesquisa que a origina. **Afirmação sem rastro não entra** —
   ou viro pergunta, ou removo. Nada de feature "porque seria legal".
4. **Verifique cobertura:** todo FR/NFR/CON do requirements.md está endereçado na spec (coberto ou
   explicitamente diferido). Lacuna vira nota, não invenção.
5. **Salve em `docs/specs/{slug}/spec.md`** e roteie para a **crítica do @qa** (fase de critique). A
   crítica e o plano de implementação **não são meus** — sigo o fluxo (@qa critica, @architect planeja).

## Critério de pronto (DoD)

- [ ] Toda afirmação da spec rastreia a um `FR-*`/`NFR-*`/`CON-*` ou achado (Gate Art. IV cumprido)
- [ ] Todo requisito do `requirements.md` está coberto ou explicitamente diferido
- [ ] Critérios de aceite verificáveis e não-escopo explícito
- [ ] Spec salva em `docs/specs/{slug}/spec.md` e roteada ao @qa para crítica

## Falha / recuperação

- **Quero afirmar algo sem rastro** → o Gate Art. IV bloqueia; removo a afirmação ou viro pergunta ao
  stakeholder/@analyst.
- **requirements.md tem ambiguidade não resolvida** → volto à fase `spec-gather-requirements`; não
  resolvo a ambiguidade inventando.
- **A crítica do @qa reprova (NEEDS_REVISION)** → reviso a spec conforme o feedback e devolvo; não pulo
  a crítica nem decido a aprovação por conta própria.
