@spec-wave/cli 0.29.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/package.json +5 -3
  2. package/protocol/qa-result.v1.json +62 -0
  3. package/protocol/qa-trail-report.v1.json +113 -0
  4. package/src/api/github-graphql.mjs +6 -1
  5. package/src/api/github-rest.mjs +21 -0
  6. package/src/cli.mjs +114 -9
  7. package/src/commands/decompose.mjs +29 -3
  8. package/src/commands/doctor.mjs +183 -3
  9. package/src/commands/generate-qa-plan.mjs +421 -0
  10. package/src/commands/implement.mjs +56 -44
  11. package/src/commands/merge.mjs +43 -14
  12. package/src/commands/order.mjs +350 -96
  13. package/src/commands/qa-lead.mjs +748 -0
  14. package/src/commands/qa-run.mjs +892 -0
  15. package/src/commands/run.mjs +5 -1
  16. package/src/config.mjs +32 -1
  17. package/src/lib/artifact-pr.mjs +2 -0
  18. package/src/lib/artifact-publish.mjs +5 -2
  19. package/src/lib/board.mjs +14 -0
  20. package/src/lib/critique.mjs +38 -9
  21. package/src/lib/decomposition-doc.mjs +5 -1
  22. package/src/lib/dependency-map.mjs +300 -0
  23. package/src/lib/doc-paths.mjs +9 -2
  24. package/src/lib/git-retry.mjs +82 -0
  25. package/src/lib/net-cache.mjs +142 -0
  26. package/src/lib/next-step.mjs +15 -3
  27. package/src/lib/qa-exec.mjs +335 -0
  28. package/src/lib/qa-lead-backend.mjs +213 -0
  29. package/src/lib/qa-lead.mjs +627 -0
  30. package/src/lib/qa-plan-doc.mjs +340 -0
  31. package/src/lib/qa-report.mjs +396 -0
  32. package/src/lib/skill-compose.mjs +234 -0
  33. package/src/lib/story-graph.mjs +256 -0
  34. package/src/plugin/.claude-plugin/plugin.json +1 -1
  35. package/src/plugin/skills/merge/SKILL.md +1 -0
  36. package/src/plugin/skills/order/SKILL.md +21 -5
  37. package/src/plugin/skills/qa/SKILL.md +107 -0
  38. package/src/plugin/skills/qa/model-prompt.critique.md +44 -0
  39. package/src/plugin/skills/qa/model-prompt.md +68 -0
  40. package/src/plugin/skills/qa-executor/SKILL.md +76 -0
  41. package/src/plugin/skills/qa-lead/SKILL.md +89 -0
  42. package/src/templates/skill/SKILL.md +981 -279
  43. package/src/templates/skill/core.md +584 -0
  44. package/src/templates/workflows/generate-qa-plan.yml +64 -0
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: spec-wave
3
3
  description: "Use when the user wants to set up a spec-driven GitHub workflow, create a Feature issue, generate spec.md or plan.md, decompose a Feature into Stories/Tasks, write RFC documentation, or audit and fix a Pull Request. Implements the RFC-001 workflow with GitHub Projects v2, labels, and AI-powered GitHub Actions."
4
- argument-hint: "[info|setup|update|doctor|preflight|audit|issue|feature|spec|plan|ready|decompose|order|implement|merge|task|story|move|uninstall|rfc|bug|triage|fix-pr] [target]"
4
+ argument-hint: "[info|setup|update|doctor|preflight|audit|issue|feature|spec|plan|ready|decompose|order|implement|merge|qa|qa-lead|task|story|move|uninstall|rfc|bug|triage|fix-pr] [target]"
5
5
  user-invocable: true
6
6
  allowed-tools:
7
7
  - Bash(npx @spec-wave/cli@latest *)
@@ -22,6 +22,10 @@ allowed-tools:
22
22
  - Agent
23
23
  ---
24
24
 
25
+ <!-- GERADO por scripts/generate-skill.mjs a partir de core.md + src/plugin/skills/*/SKILL.md.
26
+ NÃO edite este arquivo à mão: edite o core.md (visão de conjunto) ou a skill do
27
+ comando no plugin, e rode `npm run skill:gen`. -->
28
+
25
29
  # spec-wave Skill
26
30
 
27
31
  Este skill guia o usuário pelo fluxo spec-driven definido no RFC-001.
@@ -126,6 +130,7 @@ Labels de gatilho:
126
130
  - `spec-wave:decompose` → dispara `decompose.yml` → gera (ou **re-critica**) o **rascunho** em `decomposition.md`. **Não cria issue nenhuma.**
127
131
  - `spec-wave:decompose-apply` → dispara o mesmo workflow em modo aplicação → cria as Stories e Tasks **a partir do rascunho revisado**
128
132
  - `spec-wave:bug` → dispara `generate-bug.yml` → gera `docs/bugs/<slug>/bug.md` (só para issues `[BUG]`)
133
+ - `spec-wave:qa` → dispara `generate-qa-plan.yml` → gera (ou **re-critica COMO ESTÁ**) o plano de QA em `docs/features/<slug>/qa-plan.md`. **Só em Feature** (o plano é por Feature; numa Story o Action aponta a Feature-pai). A **execução** é sempre local: `npx @spec-wave/cli@latest qa <issue>`.
129
134
 
130
135
  Labels de **estado** (gravadas pelas automações — **não** são gatilhos, não as adicione por conta própria):
131
136
  - `spec-wave:decompose-ready` → o rascunho da decomposição passou pela crítica e espera **revisão humana**; aplique `spec-wave:decompose-apply` para criar as issues
@@ -133,12 +138,16 @@ Labels de **estado** (gravadas pelas automações — **não** são gatilhos, n
133
138
  - `spec-wave:needs-human` → a crítica reprovou N vezes seguidas (default 3); **para o fluxo** até uma pessoa revisar e remover a label
134
139
  - `spec-wave:decomposed` → a Feature/RFC já foi decomposta; o `decompose` pula silenciosamente enquanto ela existir (veja *Guard de idempotência* abaixo)
135
140
  - `spec-wave:bug-approved` → o `bug.md` passou na validação das seis seções obrigatórias
141
+ - `spec-wave:qa-ready` → o `qa-plan.md` passou na validação + crítica e espera **revisão humana** — é o pré-requisito de `qa <issue>` (o veredito verde avança a Etapa sozinho, então o portão humano é a revisão do plano). ⚠️ Não confunda com `spec-wave:ready` (gatilho da validação de spec/plan).
142
+ - `spec-wave:qa-approved` → a execução do QA passou. Aplicada na Story (e na Feature, quando todas as Stories passarem).
136
143
 
137
144
  Label **modificadora** (esta você pode aplicar):
138
145
  - `spec-wave:model:<apelido>` → força um modelo específico **naquela execução**, resolvido por `ai.modelAliases` no `.spec-wave.json`. Serve para reprocessar um caso difícil num modelo mais forte sem editar a configuração do repositório inteiro. Duas dessas labels na mesma issue = ambíguo, nenhuma vale.
139
146
 
140
147
  A etapa **🚧 Desenvolvimento** é coberta pelo comando **local** `npx @spec-wave/cli@latest implement <número>` (não é uma label/Action): lê uma **Feature** (todas as Stories pendentes, em ordem de dependência), uma Story ou uma Task e aciona o spec-kit para implementar. Veja `/spec-wave implement`.
141
148
 
149
+ A etapa **🧪 QA** tem artefato e comando próprios: a label `spec-wave:qa` gera o `qa-plan.md` (validado + criticado → `spec-wave:qa-ready`), e a **execução é sempre local** — `npx @spec-wave/cli@latest qa <issue>` roda os cenários contra o checkout. Verde: `qa-approved` + Story → 📋 Homologação (Bug → 🚀 Deploy, sem Homologação). Vermelho: **um Bug por cenário reprovado**, já com `bug.md` commitado. Inconclusivo (`blocked` sem `fail`): nada move, nenhum Bug. Veja `/spec-wave qa`.
150
+
142
151
  ---
143
152
 
144
153
  ## Referência da CLI (conheça os parâmetros ANTES de executar)
@@ -251,9 +260,14 @@ Sem flags. Roda um checklist de diagnóstico no repositório atual: token GitHub
251
260
  ### `@spec-wave/cli order <feature>` — ordem de execução das Stories (comando LOCAL)
252
261
  | Flag/Arg | Tipo | Descrição |
253
262
  |----------|------|-----------|
254
- | `<feature>` | string (obrigatório) | Número da issue da **Feature**, ex.: `12` ou `#12`. Argumento posicional. |
263
+ | `<feature>` | string (opcional) | Número da issue da **Feature**, ex.: `12` ou `#12`. Omitido: o mapa de todas as Features com trabalho. |
264
+ | `--milestone <ref>` | string | No mapa sem argumento: só as Features da milestone (número ou título). |
265
+ | `--json` | boolean | Saída JSON **estável** (sem ANSI) — o formato para agentes/scripts consumirem a ordem. |
266
+ | `--remote` | boolean | Une também o blocked_by da API (1 chamada por Story) — pega arestas criadas SÓ pela UI. |
267
+ | `--refresh` | boolean | Ignora o cache local e reconsulta a API. |
268
+ | `--sync` | boolean | Grava as dependências VIVAS (body + blocked_by) de volta no `decomposition.md` e regenera o `dependency-map.json`, com commit local escopado. |
255
269
 
256
- > **Sem argumento**, monta o mapa de TODAS as Features abertas fora de 🎉 Done num grafo só (conjunto vindo do board), com a Feature de cada Story ao lado — nesse escopo a dependência entre Features entra na ordenação. Com `<feature>`, lista as Stories da Feature em **ordem topológica** pelas dependências (linha `Depende de: #N` no corpo + relação nativa *blocked by*, mescladas), com a Etapa atual de cada uma no board. Dependências para **fora da Feature** não entram na ordenação (não há como saber onde a Story de outra Feature entra nesta sequência), mas aparecem em **"Bloqueadas por fora desta Feature"**, com o estado de cada bloqueadora. Avisa sobre **ciclos de dependência** (essas Stories ficam fora da ordem — corrija as linhas `Depende de`), sobre **dependências fora de ordem** (Story já em Desenvolvimento+ dependendo de outra que não está Done) e sobre **milestone divergente** (Story sem milestone ou em milestone diferente do da Feature — órfã de toda visão de release; sem milestone na Feature, nada é comparado). Use antes de escolher qual Story implementar, e logo após o `decompose --apply` como detector do pós-apply.
270
+ > **Sem argumento**, monta o mapa de TODAS as Features abertas fora de 🎉 Done num grafo só (conjunto vindo do board), com a Feature de cada Story ao lado — nesse escopo a dependência entre Features entra na ordenação. Com `<feature>`, lista as Stories da Feature em **ordem topológica** pelas dependências, com a Etapa atual de cada uma no board. As **arestas** vêm de fontes LOCAIS — `dependency-map.json` (escrito pelo `decompose --apply`), `decomposition.md` aplicado e linha `Depende de: #N` do corpo **zero chamada de API por Story**; `--remote` acrescenta o *blocked by* nativo. A **Etapa** vem de um snapshot único do board, cacheado por `cache.ttlSec` do `.spec-wave.json` (default 600s; env `SPEC_WAVE_CACHE_TTL`; `0` desliga), com a idade impressa quando servido do cache. Dependências para **fora da Feature** não entram na ordenação (não há como saber onde a Story de outra Feature entra nesta sequência), mas aparecem em **"Bloqueadas por fora desta Feature"**, com o estado de cada bloqueadora. Avisa sobre **ciclos de dependência** (essas Stories ficam fora da ordem — corrija as linhas `Depende de`), sobre **dependências fora de ordem** (Story já em Desenvolvimento+ dependendo de outra que não está Done) e sobre **milestone divergente** (Story sem milestone ou em milestone diferente do da Feature — órfã de toda visão de release; sem milestone na Feature, nada é comparado). Use antes de escolher qual Story implementar, e logo após o `decompose --apply` como detector do pós-apply.
257
271
 
258
272
  ### `@spec-wave/cli preflight --milestone <nome>` — confere tudo ANTES de gerar as specs (comando LOCAL)
259
273
  | Flag/Arg | Tipo | Descrição |
@@ -281,6 +295,30 @@ Sem flags. Roda um checklist de diagnóstico no repositório atual: token GitHub
281
295
 
282
296
  > O `implement` empilha os PRs (cada um baseado no anterior) e o merge da pilha é **ordem-dependente**: `--delete-branch` no primeiro PR fecha o segundo. Este comando encapsula a sequência segura — para cada PR na ordem topológica das Stories: reaponta a base para a default, mergeia com **merge commit**, atualiza o board (**merge move até 🧪 QA**) e **só no fim** apaga as branches. **PR em rascunho bloqueia o plano inteiro** (marcar pronto é a revisão humana — o comando não pula isso). Rodar de novo **retoma**: PR mergeado sai do plano. Use após a revisão, em vez de mergear à mão com `gh`.
283
297
 
298
+ ### `@spec-wave/cli qa <issue>` — executa o plano de QA localmente (e `qa --pr-number <n>` no Action)
299
+ | Flag/Arg | Tipo | Descrição |
300
+ |----------|------|-----------|
301
+ | `<issue>` | string | Número da **Feature** (todos os cenários das Stories ainda sem `qa-approved`), **Story** (os cenários dela) ou **Bug** (a seção `Teste de Regressão` do `bug.md`). |
302
+ | `--only <n[,m]>` | string | Só o(s) cenário(s) indicado(s) — número **posicional** no plano. O restante herda o veredito do último relatório. |
303
+ | `--severity <p>` | string | Severidade dos Bugs abertos na reprova: `P0`–`P3` (default: `qa.defaultBugPriority` ou `P2`). |
304
+ | `--dry-run` | boolean | Monta o contexto e imprime cenários + comando. **Zero escrita no GitHub.** |
305
+ | `--pr-number <n>` | string | Modo Action (mutuamente exclusivo com `<issue>`): move a Feature/Bug do PR aprovado/mergeado para 🧪 QA. |
306
+
307
+ > **Pré-requisitos:** Feature dona do plano com `spec-wave:qa-ready` (portão humano — D-QA4), item já em 🧪 QA (o comando **não promove**; Etapa posterior = informa e sai 0), executor em `qa.command` no `.spec-wave.json` (ou `SPEC_WAVE_QA_CMD`) — sem ele, só monta o contexto. **Sempre `--dry-run` primeiro.** Desfechos: verde → `qa-approved` + Story para 📋 Homologação (Bug → 🚀 Deploy; Feature quando TODAS as Stories liberarem; **Bug filho aberto segura a Story mesmo verde**); vermelho → 1 Bug por cenário reprovado (filho da Story, ✅ Ready, `bug.md` determinístico commitado — exceção documentada à regra do `spec-wave:bug`), exit 1; `blocked` sem `fail` → inconclusivo: nada move, nenhum Bug, exit 1. Re-teste após o fix: `qa <story> --only <cenário>` (não duplica Bug — comenta no existente).
308
+
309
+ ### `@spec-wave/cli qa-lead <plan|run|report> <milestone>` — orquestra o QA de uma TRILHA (comando LOCAL)
310
+ | Flag/Arg | Tipo | Descrição |
311
+ |----------|------|-----------|
312
+ | `<acao>` | string (obrigatório) | `plan` (prepara os planos e PARA no portão humano), `run` (executa o ciclo em containers paralelos) ou `report` (reimprime um ciclo já gravado). |
313
+ | `<milestone>` | string (obrigatório) | Milestone da trilha, por **número ou título** — trilha = milestone (D-QAL1). |
314
+ | `--watch` | boolean | No `plan`: acompanha os planos disparados até resolverem (teto `qa.lead.planWaitTimeoutMin`; estourar relata as pendentes e sai 1). |
315
+ | `--only <features>` | string | No `run`: sub-trilha explícita, ex.: `--only 318,320` (decisão humana declarada, não relaxamento do portão). |
316
+ | `--max-cycles <n>` | string | No `run`: teto de ciclos (default: `qa.lead.maxCycles`, 3). |
317
+ | `--cycle <n>` | string | No `report`: qual ciclo imprimir (default: o último). |
318
+ | `--dry-run` | boolean | Classifica/planeja e imprime — **nenhuma label, zero container, zero escrita**. |
319
+
320
+ > Duas fases separadas (D-QAL2): o `plan` aplica `spec-wave:qa` nas Features sem plano e **para** — o humano revisa os `qa-plan.md`; o `run` só inicia com a trilha inteira em `qa-ready` (recusa listando as pendentes). O `run` faz preflight global, despacha até `qa.lead.maxParallel` containers (um ambiente isolado por Feature — `qa.lead.container.image` obrigatória), coleta os comentários de veredito e grava `docs/qa/<slug-milestone>/cycle-<n>/{report.md,report.json}` + um **bloco delimitado** na descrição do milestone (substituído a cada ciclo, preservando as Release Notes). Ciclo N+1 só se um Bug fechou ou um bloqueio caiu (D-QAL7); teto de 3 ciclos. O Lead **não** aplica label de estado, **não** move card e **não** abre issue — toda mutação de board é do `qa` dentro dos containers.
321
+
284
322
  ### `@spec-wave/cli task <start|done> <n>` — transições de Task no board (comando LOCAL)
285
323
  | Flag/Arg | Tipo | Descrição |
286
324
  |----------|------|-----------|
@@ -456,186 +494,351 @@ O `validate` também recusa documento com sinal objetivo de corte (bloco de cód
456
494
 
457
495
  ## Sub-comandos
458
496
 
459
- ### `/spec-wave info`
497
+ ### `/spec-wave info` — status de configuração
498
+
499
+ > **Quando usar:** Use quando o usuário perguntar se o repositório atual já está configurado com spec-wave, qual GitHub Project está vinculado, qual versão da CLI foi usada no init, ou se a skill instalada está atualizada. Gatilhos: 'o spec-wave está configurado aqui?', 'qual o board deste repo?', 'status do spec-wave'. Para um diagnóstico completo de auth e workflows use a skill doctor.
500
+
501
+ Mostra se o repositório atual foi configurado e valida a skill instalada.
460
502
 
461
- Mostra se o repositório atual já foi configurado com o spec-wave.
503
+ | Flag | Descrição |
504
+ |------|-----------|
505
+ | `--json` | Saída JSON (`{"initialized":bool, ..., "skill":{...}}`) para parsing programático. |
462
506
 
463
- **Passos:**
464
- 1. Execute: `npx @spec-wave/cli@latest info`
465
- 2. **Se o repositório estiver inicializado**, o comando mostra os dados do `.spec-wave.json` (owner/repo, project, versão da CLI, data). Apresente essas informações ao usuário.
466
- 3. **Se NÃO estiver inicializado**, pergunte ao usuário: "Este repositório ainda não foi configurado com o spec-wave. Quer rodar o `init` agora?"
467
- - Se sim → siga o fluxo de `/spec-wave setup`.
468
- - Se não → encerre sem alterar nada.
469
- 4. **Se a saída indicar skill pendente** (aviso "Skill pendente de instalação/atualização" ou, no `--json`, `skill.installNeeded: true`), pergunte ao usuário se quer instalar/atualizar agora: skill `ausente` → `npx @spec-wave/cli@latest install-skill`; skill `desatualizada` → `npx @spec-wave/cli@latest update` (atualiza tudo que ficou para trás). Lembre-o de recarregar o agente depois.
507
+ #### Passos
508
+
509
+ 1. Execute:
510
+ ```bash
511
+ npx @spec-wave/cli@latest info
512
+ ```
513
+
514
+ 2. **Se inicializado**, apresente ao usuário os dados do `.spec-wave.json`: `owner/repo`, `project.title` + `project.url`, `version` da CLI e `initializedAt`.
515
+
516
+ 3. **Se NÃO inicializado**, pergunte: "Este repositório ainda não foi configurado com o spec-wave. Quer rodar o `init` agora?"
517
+ - Sim → use a skill **setup**.
518
+ - Não → encerre sem alterar nada.
519
+
520
+ 4. **Se a saída indicar skill pendente** (aviso "Skill pendente de instalação/atualização" ou, no `--json`, `skill.installNeeded: true`), ofereça resolver:
521
+ - skill `ausente` → `npx @spec-wave/cli@latest install-skill`
522
+ - skill `desatualizada` → `npx @spec-wave/cli@latest update` (skill **update**)
523
+
524
+ Lembre de recarregar o agente depois.
525
+
526
+ 5. Se a `version` do arquivo divergir de `npx @spec-wave/cli@latest --version`, sugira `npx @spec-wave/cli@latest refresh --config` (reescreve o `.spec-wave.json` com os dados atuais do Project) ou a skill **update**.
527
+
528
+ #### O que o comando valida além do arquivo
529
+
530
+ Para cada agente de código detectado no diretório, compara a cópia instalada da skill com a versão empacotada na CLI — uma cópia **global** atualizada também conta. No `--json`, o campo `skill` traz `{agentsDetected, installNeeded, pending:[{agent, reason, path}]}`.
470
531
 
471
532
  ---
472
533
 
473
- ### `/spec-wave update`
534
+ ### `/spec-wave setup` — configura o repositório
535
+
536
+ > **Quando usar:** Use quando o usuário quiser configurar o spec-wave num repositório GitHub pela primeira vez — criar o GitHub Project (Projects v2), as labels de gatilho, os workflows de Action, os issue templates e o .spec-wave.json. Gatilhos: 'configurar spec-wave', 'inicializar spec-wave', 'rodar o init', 'setup do board'. Não use para atualizar uma instalação existente (skill update) nem para diagnosticar (skill doctor).
537
+
538
+ Você dirige o `init` **com flags**. Nunca rode `npx @spec-wave/cli@latest init` sem `--repo`: sem ele a CLI abre um wizard interativo (`@clack/prompts`) que você **não consegue dirigir**.
539
+
540
+ #### Flags do `init`
541
+
542
+ | Flag | Tipo | Descrição |
543
+ |------|------|-----------|
544
+ | `--repo <owner/repo>` | string | Repositório alvo. **Passe SEMPRE.** |
545
+ | `--project-title <title>` | string | Nome do Project. Default: `<repo> — Spec Wave`. |
546
+ | `--provider <provider>` | string | `anthropic` ou `openrouter`. |
547
+ | `--model <model>` | string | Modelo dos workflows (ex.: `anthropic/claude-3.7-sonnet`). |
548
+ | `--skip-project` | flag | Pula a criação do Project (re-rodar quando já existe). |
549
+ | `--skip-labels` | flag | Pula as labels. |
550
+ | `--skip-files` | flag | Pula workflows + issue templates. |
551
+ | `--dry-run` | flag | Simula sem alterar nada. |
552
+
553
+ #### Passos
474
554
 
475
- Traz tudo para a versão atual da CLI, atualizando **só o que mudou**: a skill instalada, o `.spec-wave.json` local e os workflows/labels do repo.
555
+ 1. **Já configurado?** Leia `.spec-wave.json` (Read) ou rode `npx @spec-wave/cli@latest info`. Se existir, mostre `project.url` e `version` e **confirme com o usuário** antes de reconfigurar.
476
556
 
477
- **Passos:**
478
- 1. **Sempre comece com `--dry-run`** para inspecionar o que está desatualizado sem alterar nada:
557
+ 2. **Descubra o repositório alvo:**
479
558
  ```bash
480
- npx @spec-wave/cli@latest update --dry-run
559
+ gh repo view --json nameWithOwner -q .nameWithOwner
560
+ ```
561
+ Confirme com o usuário. Sem remote, pergunte o `owner/repo`.
562
+
563
+ 3. **Título do Project:** ofereça o default `<repo> — Spec Wave` e aceite-o se não houver preferência.
564
+
565
+ 4. **Cheque o auth:** `gh auth status`. Faltando os escopos `project,repo,workflow`, oriente o usuário a rodar **ele mesmo** (comando interativo — sugira o prefixo `!`):
566
+ ```
567
+ !gh auth refresh --scopes project,repo,workflow
568
+ ```
569
+
570
+ 5. **(Opcional) Pré-visualize:**
571
+ ```bash
572
+ npx @spec-wave/cli@latest init --repo <owner/repo> --dry-run
481
573
  ```
482
- 2. Mostre ao usuário o resumo (skill / config / arquivos do repo / labels que divergiram). Se **nada** estiver desatualizado, informe que já está tudo na versão atual e encerre.
483
- 3. **Pergunte como os arquivos do repo devem sair** — e prefira o Pull Request:
574
+
575
+ 6. **Execute:**
484
576
  ```bash
485
- npx @spec-wave/cli@latest update --yes --branch # 1 commit atômico + PR (recomendado)
486
- npx @spec-wave/cli@latest update --yes # commits diretos na branch default
577
+ npx @spec-wave/cli@latest init --repo <owner/repo> --project-title "<título>"
487
578
  ```
488
- - Escopos podem ser limitados com `--skip-skill`, `--skip-config`, `--skip-repo`.
489
- - **Com `--branch`:** os arquivos do repo vão em **um único commit** numa branch nova e um PR é aberto — nada é escrito na branch default. Passe o link do PR ao usuário e lembre que o merge é dele. Exige `pull_requests: write` no token.
490
- - **Sem `--branch`:** cada arquivo é um commit direto na branch default. Em repositório com **proteção de branch** isso falha no meio e deixa parte aplicada nesses casos use `--branch`.
491
- - **Nos dois modos**, as **labels** são aplicadas direto na base (metadado do repositório, não versionável) e nunca entram no PR.
492
- - **`.spec-wave.json` e skill:** com `--branch`, cada um entra no PR se o repositório **já o versiona** (o comando consulta a base, arquivo a arquivo); se não versiona, segue apenas local e o usuário precisa commitá-lo — ou use `--config-in-pr` / `--skill-in-pr` para passar a versioná-lo. Sem `--branch`, os dois são sempre locais. A skill é gravada em disco de qualquer forma, para o agente já pegar a versão nova.
493
- 4. Se a skill foi atualizada, oriente recarregar/reiniciar o agente para pegar a nova versão.
579
+ Use `--skip-project` / `--skip-labels` / `--skip-files` **apenas** para re-rodar uma fase que falhou antes.
580
+
581
+ 7. O `init` cria o Project, as labels, os workflows, um **scaffold de `.github/config/tech_context.yml`** (só se ainda não existir) e grava o `.spec-wave.json`. Oriente o usuário a fazer `git pull` para trazer os arquivos ao checkout local.
582
+
583
+ 8. **Adapte o `tech_context.yml`** o scaffold vem com dados de exemplo e a qualidade do `plan.md` depende dele. Ofereça ajustá-lo agora; o passo a passo está na seção **Tech Context** deste documento.
584
+
585
+ 9. **Secret de IA:** instrua a adicionar em Settings → Secrets → Actions a credencial do provider escolhido: `ANTHROPIC_API_KEY` (Anthropic), `CLAUDE_CODE_OAUTH_TOKEN` (assinatura Claude Pro/Max — gere com `claude setup-token`) ou `OPENROUTER_API_KEY` (OpenRouter).
586
+
587
+ 10. **Próximo passo:** criar a primeira Feature — skill **issue**.
588
+
589
+ #### Depois
590
+
591
+ Rode a skill **doctor** para confirmar auth, escopos, config de IA e workflows antes de começar a trabalhar.
494
592
 
495
593
  ---
496
594
 
497
- ### `/spec-wave setup`
595
+ ### `/spec-wave update` — traz tudo para a versão atual
596
+
597
+ > **Quando usar:** Use depois de atualizar a CLI @spec-wave/cli, ou quando a skill instalada, o .spec-wave.json e os workflows/labels do repositório ficaram para trás da versão atual. Detecta e atualiza SÓ o que divergiu. Gatilhos: 'atualizar spec-wave', 'a skill está desatualizada', 'os workflows estão velhos', 'update do spec-wave'. Para configurar do zero use a skill setup; para remover, uninstall.
598
+
599
+ Atualiza **somente o que divergiu** da versão da CLI: a **skill** instalada (por agente), o **`.spec-wave.json`** local e os **workflows/labels** do repositório.
498
600
 
499
- Configura o spec-wave no repositório. Você dirige o `init` com flags — **nunca rode `npx @spec-wave/cli@latest init` sem `--repo`** (abre o wizard interativo que você não controla).
601
+ | Flag | Descrição |
602
+ |------|-----------|
603
+ | `--global` | Verifica a skill no escopo do usuário (padrão: projeto). |
604
+ | `--skip-skill` | Não verifica/atualiza a skill instalada. |
605
+ | `--skip-config` | Não verifica/atualiza o `.spec-wave.json`. |
606
+ | `--skip-repo` | Não verifica/atualiza workflows e labels do repo. |
607
+ | `--branch [nome]` | Envia os arquivos do repo como **Pull Request** numa branch, em um único commit (sem valor: `spec-wave/update-v<versão>`). |
608
+ | `--config-in-pr` / `--no-config-in-pr` | Força incluir/excluir o `.spec-wave.json` do PR. |
609
+ | `--skill-in-pr` / `--no-skill-in-pr` | Força incluir/excluir a skill dos agentes do PR. |
610
+ | `--dry-run` | Mostra o que seria atualizado sem alterar nada. |
611
+ | `--yes` | Aplica sem pedir confirmação. |
500
612
 
501
- **Passos:**
502
- 1. **Já configurado?** Leia `.spec-wave.json` (ou rode `npx @spec-wave/cli@latest info`). Se existir, avise (mostre `project.url` e `version`) e confirme com o usuário antes de reconfigurar.
503
- 2. **Descubra o repositório alvo** (parâmetro `--repo`): rode `gh repo view --json nameWithOwner -q .nameWithOwner` para obter `owner/repo` do repo atual. Confirme com o usuário; se não houver remote, pergunte o `owner/repo`.
504
- 3. **Pergunte o título do Project** (parâmetro `--project-title`). Ofereça o default `<repo> — Spec Wave` e aceite-o se o usuário não tiver preferência.
505
- 4. **Cheque o auth:** `gh auth status`. Se faltarem os escopos `project,repo,workflow`, oriente o usuário a rodar ele mesmo `gh auth refresh --scopes project,repo,workflow` (comando interativo — o usuário executa, não você).
506
- 5. **(Opcional) Pré-visualize** antes de aplicar: `npx @spec-wave/cli@latest init --repo <owner/repo> --dry-run`.
507
- 6. **Execute com os parâmetros coletados:**
613
+ #### Passos
614
+
615
+ 1. **Sempre comece com `--dry-run`:**
508
616
  ```bash
509
- npx @spec-wave/cli@latest init --repo <owner/repo> --project-title "<título>"
617
+ npx @spec-wave/cli@latest update --dry-run
510
618
  ```
511
- Use `--skip-project` / `--skip-labels` / `--skip-files` **apenas** para re-rodar uma fase específica que falhou antes.
512
- 7. O `init` cria o Project, as labels, os workflows, um **scaffold de `.github/config/tech_context.yml`** (só se ainda não existir) e grava `.spec-wave.json`. Oriente o usuário a fazer `git pull` para trazer os arquivos ao checkout local.
513
- 8. **Adapte o `tech_context.yml`**: o scaffold vem com dados de exemplo. Ofereça ajustá-lo à stack real do repo seguindo a seção **Tech Context** (perto do comando `/spec-wave plan`) — isso melhora muito a qualidade do `plan.md`.
514
- 9. Instrua o usuário a adicionar a credencial de IA como secret no repositório (Settings → Secrets → Actions): `ANTHROPIC_API_KEY` (Anthropic), `CLAUDE_CODE_OAUTH_TOKEN` (assinatura Claude Pro/Max gere com `claude setup-token`) ou `OPENROUTER_API_KEY` (OpenRouter), conforme o provider escolhido no `init`.
619
+
620
+ 2. Mostre ao usuário o resumo por categoria (skill / config / arquivos do repo / labels). Se **nada** divergiu, informe que está tudo na versão atual e encerre.
621
+
622
+ 3. Com a aprovação, apliquee **prefira o Pull Request**:
623
+ ```bash
624
+ npx @spec-wave/cli@latest update --yes --branch # 1 commit atômico + PR (recomendado)
625
+ npx @spec-wave/cli@latest update --yes # commits diretos na branch default
626
+ ```
627
+ Limite o escopo com `--skip-skill`, `--skip-config` ou `--skip-repo` se o usuário só quiser parte.
628
+
629
+ 4. **Onde cada coisa aterrissa:**
630
+ - **workflows e templates de issue** → no PR (com `--branch`) ou commitados direto na branch default
631
+ - **labels** → sempre direto na base: são metadado do repositório, não há como versioná-las
632
+ - **`.spec-wave.json` e a skill** → o comando **consulta a base** e vai pelo mesmo caminho do arquivo: se o repositório já versiona aquele caminho, a atualização entra no PR; se não versiona, fica só local e o usuário precisa commitá-la. Force com `--config-in-pr` / `--skill-in-pr` se o projeto quiser passar a versionar.
633
+ - a skill é gravada em disco nos dois casos — é a cópia que o agente carrega
634
+
635
+ 5. Se a skill foi atualizada, oriente a **recarregar/reiniciar o agente** para pegar a nova versão.
636
+
637
+ #### Por que isso é necessário
638
+
639
+ A skill instalada é uma **cópia estática** — ela não acompanha o `npx @spec-wave/cli@latest` sozinha. Se o banner de versão no topo do arquivo instalado for menor que `npx @spec-wave/cli@latest --version` (ou estiver ausente), está desatualizada.
640
+
641
+ Para atualizar **só a skill**, sem tocar em config e repo:
642
+
643
+ ```bash
644
+ npx @spec-wave/cli@latest install-skill --force
645
+ ```
515
646
 
516
647
  ---
517
648
 
518
- ### `/spec-wave issue <tipo> <descrição>` · `/spec-wave initiative <descrição>` · `/spec-wave feature <descrição>`
649
+ ### `/spec-wave doctor` preflight de auth e configuração
650
+
651
+ > **Quando usar:** Use como PRIMEIRO passo de troubleshooting do spec-wave: erro 404 ao criar issues, comando falhando sem motivo claro, board com colunas estranhas, Action que não roda, dúvida sobre token/escopos ou sobre qual modelo de IA está configurado. Também no início de uma sessão de trabalho. Gatilhos: 'spec-wave está com erro', 'não consigo criar issue', 'diagnosticar spec-wave', 'rodar o doctor'. Prefira esta skill a depurar gh api na mão.
652
+
653
+ Comando **local**, sem flags:
654
+
655
+ ```bash
656
+ npx @spec-wave/cli@latest doctor
657
+ ```
658
+
659
+ #### O que ele checa
660
+
661
+ - **Token GitHub** e a fonte dele; **escopos** (`repo`, `project`, `workflow`), com degradação para checks funcionais em fine-grained PATs
662
+ - **Conta ativa do `gh`** vs. o owner do repositório
663
+ - **`.spec-wave.json`**: campos presentes e sincronia com o Project real
664
+ - **Acesso ao repositório**
665
+ - **Configuração de IA**: provider, modelo, `ai.models`, escalada da crítica, apelidos de modelo, teto de saída e os secrets do Actions
666
+ - **Higiene do board e das labels**: colunas fora do fluxo canônico, labels `spec-wave:*` descontinuadas ou ausentes
667
+ - **spec-kit**: `specKit.command` / env `SPEC_WAVE_IMPLEMENT_CMD` — se ausente, sugere exemplos por agente (Claude Code, opencode, Codex, Copilot CLI, Kiro CLI, Qwen Code)
668
+ - **Workflows**: presença + **versão da CLI fixada** (não `@latest`)
669
+
670
+ #### Como ler a saída
671
+
672
+ | Símbolo | Significado |
673
+ |---------|-------------|
674
+ | `✓` | ok |
675
+ | `✗` | problema confirmado |
676
+ | `!` | não verificável (best-effort — falha de rede nunca derruba o doctor) |
677
+
678
+ **Exit 1** se houver algum `✗`.
519
679
 
520
- Crie um work item tipado (Initiative/Epic/Feature/Story/Task/...) já adicionado ao board, opcionalmente como sub-issue de um parent. A Etapa inicial é **📥 Backlog** — correta para Initiative, Epic, Feature, RFC, Bug e Spike. **Story e Task não devem ser criadas por aqui** (nascem do `decompose`, em ✅ Ready — veja a *Regra fundamental*).
680
+ #### Passos
681
+
682
+ 1. Rode o comando.
683
+ 2. Para cada `✗`, explique a causa ao usuário e proponha a correção concreta:
684
+ - escopo faltando → o usuário roda `!gh auth refresh --scopes project,repo,workflow` (interativo, ele executa)
685
+ - `.spec-wave.json` dessincronizado → `npx @spec-wave/cli@latest refresh --config`
686
+ - workflows/labels divergentes → skill **update**
687
+ - secret de IA ausente → Settings → Secrets → Actions (`ANTHROPIC_API_KEY`, `CLAUDE_CODE_OAUTH_TOKEN` ou `OPENROUTER_API_KEY`, conforme o provider)
688
+ - modo de execução divergente (config diz `local` e a variável `SPEC_WAVE_EXECUTION` não está setada, ou vice-versa) → `npx @spec-wave/cli@latest mode local|actions` — veja a skill **run**
689
+ - `specKit.command` ausente → configure antes de usar a skill **implement**
690
+ 3. Trate `!` como "não deu para verificar", não como falha.
691
+ 4. Se tudo passar e o problema original persistir, aí sim investigue a superfície específica (Action, issue, board).
692
+
693
+ > **404 ao criar issues** é o caso clássico: quase sempre token sem acesso ao repo/org — e o doctor aponta exatamente isso.
694
+
695
+ ---
696
+
697
+ ### `/spec-wave issue` — cria um work item no board
698
+
699
+ > **Quando usar:** Use para criar um work item tipado no spec-wave — Initiative, Epic, Feature, Bug, Spike ou RFC — já adicionado ao GitHub Project com Etapa, Work Item Type e Area. Gatilhos: 'criar uma feature', 'nova initiative', 'abrir um epic', 'registrar um bug no board', 'criar issue do spec-wave'. NÃO use para Story ou Task (nascem do decompose — skill decompose) e nunca use gh issue create.
700
+
701
+ Faz tudo de uma vez: cria a issue com a label de tipo, vincula ao parent como **sub-issue** nativa do GitHub, adiciona ao Project e define os campos **Etapa**, **Work Item Type**, **Area** e — só se informada — **Priority**. Grava `Parent: #N` no corpo.
702
+
703
+ > **Nunca use `gh issue create`.** Ele não adiciona ao board nem vincula o parent: a issue fica sem Etapa e some de todas as telas da UI.
704
+
705
+ **Contexto:** leia `.spec-wave.json` (Read) para confirmar que o repo está configurado. Ausente → skill **setup**.
706
+
707
+ #### Flags
708
+
709
+ | Flag | Tipo | Descrição |
710
+ |------|------|-----------|
711
+ | `--title <title>` | **obrigatório** | Título **sem** o prefixo de tipo — a CLI adiciona (`[FEATURE]`, `[STORY]`…). |
712
+ | `--type <type>` | string | `initiative`, `epic`, `feature`, `story`, `task`, `bug`, `spike`, `rfc`. Default: `feature`. |
713
+ | `--parent <n>` | string | Número da issue pai — cria como sub-issue dela. |
714
+ | `--body <text>` | string | Descrição. |
715
+ | `--priority <p>` | string | **Opcional.** `P0`–`P3`. **Omita** se o usuário não pediu. |
716
+ | `--area <area>` | string | `Frontend`, `Backend`, `Mobile`, `Infra`, `DevOps`, `Data`. |
521
717
 
522
- **Hierarquia típica:** Initiative → Epic → Feature → Story → Task. A **Initiative** é o nó raiz e agrupa Epics. Use `--parent <n>` para criar como sub-issue do nível acima (ex.: um Epic filho de uma Initiative, ou uma Story filha de uma Feature). O GitHub mostra o parent na issue filha e vice-versa; a CLI ainda grava `Parent: #N` no corpo.
718
+ Atalhos: `initiative` (raiz, sem `--parent`) e `feature` mesmas flags, `--type` fixo.
523
719
 
524
- > **Spike é movido manualmente:** o spec-wave **nunca** avança a Etapa de um Spike automaticamente (nem no `implement`, nem nas Actions de Code Review/QA). O Spike entra no board em 📥 Backlog e o **usuário** o move à mão pelas etapas. Não mova a Etapa de um Spike por conta própria — a não ser que o usuário peça explicitamente.
720
+ #### Hierarquia
525
721
 
526
- **Passos:**
527
- 1. Pergunte ao usuário: tipo (initiative/epic/feature/story/task/...), título (sem prefixo), descrição e se há uma issue **pai** (número). **Prioridade e área são opcionais**: só as inclua se o usuário pedir explicitamente. **Nunca atribua uma prioridade por conta própria** — se o usuário não informou, **omita `--priority`** e a prioridade fica `null` (sem prioridade) no board.
528
- 2. Execute o comando com os parâmetros coletados (inclua **apenas** as flags que o usuário forneceu):
722
+ `Initiative → Epic → Feature → Story → Task`. Use `--parent <n>` para pendurar no nível acima.
723
+
724
+ #### Passos
725
+
726
+ 1. **Colete com o usuário:** tipo, título (sem prefixo), descrição e o número da issue **pai**, se houver.
727
+
728
+ > **Prioridade e área são opcionais.** Só inclua se o usuário pedir explicitamente. **Nunca atribua uma prioridade por conta própria** — omitindo `--priority`, a prioridade fica `null` (sem prioridade) no board.
729
+
730
+ 2. **Execute** com **apenas** as flags que o usuário forneceu:
529
731
  ```bash
530
732
  npx @spec-wave/cli@latest issue \
531
733
  --type "<tipo>" \
532
734
  --title "<título>" \
533
735
  --body "<descrição>" \
534
- --area "<área>" \ # opcional — omita se o usuário não informou
535
- --priority "<prioridade>" \ # opcional — se o usuário pediu; caso contrário OMITA (prioridade fica null)
736
+ --area "<área>" \ # opcional
737
+ --priority "<prioridade>" \ # opcional — se o usuário não pediu, OMITA
536
738
  --parent "<número-do-pai>" # opcional
537
739
  ```
538
- Para Features, pode usar o atalho `npx @spec-wave/cli@latest feature --title ...` (equivale a `--type feature`).
539
- A CLI cria a issue (label de tipo — e de prioridade **apenas se `--priority` for informado**), vincula como sub-issue do parent, adiciona ao Project e define Etapa = 📥 Backlog + Work Item Type + Area (+ Priority só se informada). **Não use `gh issue create`** (não adiciona ao board nem vincula o parent).
540
- **Se o tipo for `story` ou `task`**, avise o usuário que o caminho normal é o `decompose` e, se ele confirmar mesmo assim, avance a Etapa para ✅ Ready depois de criar — senão o item fica invisível na UI.
541
- 3. Informe o número criado e o vínculo com o pai (se houver).
542
- 4. Para Features: "Quando quiser iniciar, mova para **📋 Spec** e use `/spec-wave spec <número>` para gerar a especificação funcional (o plano técnico vem depois)".
740
+ Para Features, o atalho `npx @spec-wave/cli@latest feature --title ...` equivale a `--type feature`.
543
741
 
544
- ---
742
+ 3. Informe o número criado e o vínculo com o pai.
743
+
744
+ 4. Para Features, aponte o próximo passo: mover para **📋 Spec** e usar a skill **spec** para gerar a especificação funcional (o plano técnico vem depois).
745
+
746
+ #### Cuidados por tipo
545
747
 
546
- ### `/spec-wave uninstall`
748
+ ⚠️ **A Etapa inicial é sempre 📥 Backlog, para qualquer `--type`.** Correto para Initiative, Epic, Feature, RFC, Bug e Spike.
547
749
 
548
- Remove a configuração do spec-wave do repositório (labels, arquivos `.github`, `.spec-wave.json`). **Não apaga o GitHub Project.**
750
+ **Story e Task:** está errado para elas — pertencem a Ready. O caminho normal é a skill **decompose**. Se o usuário insistir numa Story/Task avulsa: crie **com `--parent <n>`** e, logo em seguida, avance para ✅ Ready (skill **move**), explicando por que o passo extra é necessário — senão o item fica invisível na UI.
549
751
 
550
- **Passos:**
551
- 1. Confirme com o usuário que ele quer remover (a ação remove labels e faz commits removendo os workflows).
552
- 2. Mostre antes o que será removido com `npx @spec-wave/cli@latest uninstall --dry-run`.
553
- 3. Execute `npx @spec-wave/cli@latest uninstall` (a CLI pede confirmação; use `--yes` só se o usuário já confirmou).
554
- 4. Lembre o usuário de excluir o **GitHub Project** manualmente, se desejar — a CLI não o apaga de propósito.
752
+ **Spike:** entra em 📥 Backlog e o **usuário** o move à mão pelas etapas. Nunca avance a Etapa de um Spike por conta própria.
555
753
 
556
754
  ---
557
755
 
558
- ### `/spec-wave spec <número-da-issue>`
756
+ ### `/spec-wave spec` — especificação funcional (1º documento)
559
757
 
560
- Inicia a geração da **especificação funcional** para uma Feature. É o **primeiro** passo do ciclo de documentos (antes do plano técnico).
758
+ > **Quando usar:** Use para iniciar a geração da especificação funcional (spec.md) de uma Feature do spec-wave — o PRIMEIRO documento do ciclo, antes do plano técnico. Aplica a label spec-wave:spec e deixa o GitHub Action gerar o arquivo e abrir um Pull Request. Gatilhos: 'gerar a spec da feature 12', 'criar especificação funcional', 'rodar o spec-wave:spec'. Só vale para Features — Spike, RFC e Bug não usam spec.
561
759
 
562
- > **Apenas Features.** spec/plan **não** são gerados para **Spike, RFC ou Bug** se a label for adicionada a um desses, o Action pula a geração, remove a label e comenta. Não use `/spec-wave spec|plan` nesses tipos.
760
+ > **Regra fundamental: nunca escreva o `spec.md` à mão.** Quem gera é o spec-wavepelo Action ou pela CLI local. É isso que garante que o arquivo chegue à main por Pull Request e seja referenciado na issue. Exceção: revisar/melhorar um `spec.md` gerado (aí sim use Edit).
563
761
 
564
- **Passos:**
565
- 1. Confirme que a issue é uma **Feature** (spec/plan não se aplicam a Spike/RFC/Bug).
566
- 2. Adicione a label de gatilho:
762
+ #### Dois modos, mesmo resultado
763
+
764
+ | Modo | Como acionar | Quando |
765
+ |------|--------------|--------|
766
+ | **Action** | aplicar a label `spec-wave:spec` | fluxo assíncrono; roda no CI, você acompanha pela issue |
767
+ | **Local** | `npx @spec-wave/cli@latest generate-spec --issue-number <n>` | você quer o documento **agora**, nesta sessão, e iterar em cima dele |
768
+
769
+ O modo é detectado pelo ambiente — fora do Actions, a CLI roda em modo local automaticamente. Os dois geram o arquivo, abrem um **Pull Request** com ele, comentam na issue e removem a label de gatilho. **Pergunte ao usuário qual ele quer** se não estiver claro; na dúvida numa sessão interativa, prefira o local (o resultado aparece em segundos, em vez de exigir acompanhar o Action).
770
+
771
+ > Local exige a credencial de IA no seu ambiente (`OPENROUTER_API_KEY`, `ANTHROPIC_API_KEY` ou o login do Claude Code, se o provider for `claude-oauth`) e um `.spec-wave.json` no repositório. Para conduzir o fluxo inteiro sem gastar minutos de Actions, veja a skill **run**.
772
+
773
+ **Contexto:** leia `.spec-wave.json` (Read). Ausente → skill **setup**.
774
+
775
+ #### Passos
776
+
777
+ 1. **Confirme que a issue é uma Feature.**
778
+
779
+ > **Apenas Features.** Para **Spike, RFC e Bug** o Action **pula** a geração, remove a label e comenta. Não use esta skill nesses tipos.
780
+
781
+ 2. **Escolha o modo** (veja a tabela acima) e acione:
782
+
783
+ **Local** — resultado nesta sessão:
784
+ ```bash
785
+ npx @spec-wave/cli@latest generate-spec --issue-number <número>
786
+ ```
787
+ O comando imprime `Modo de execução: local`, gera e abre o Pull Request. Nada é gravado no seu clone — o documento vive no PR até o merge.
788
+
789
+ **Action** — assíncrono:
567
790
  ```bash
568
791
  gh issue edit <número> --add-label "spec-wave:spec"
569
792
  ```
570
- 3. Informe: "Label `spec-wave:spec` adicionada. O GitHub Action `generate-spec.yml` irá gerar o `spec.md` automaticamente."
571
- 4. Após a conclusão, ofereça revisar o spec.md gerado em `docs/features/<slug>/spec.md`.
572
- 5. Próximo passo: gerar o plano técnico mova para **📋 Plan** e use `/spec-wave plan <número>`.
793
+ Informe: "Label `spec-wave:spec` adicionada. O Action `generate-spec.yml` vai gerar o `spec.md`. Acompanhe em Actions → Generate Spec."
794
+
795
+ 4. Quando concluir, ofereça revisar o arquivo em `docs/features/<slug>/spec.md`. O slug vem do título: `[FEATURE] Cadastro de Pedidos com PIX` → `cadastro-de-pedidos-com-pix`.
796
+
797
+ 5. **Próximo passo:** o plano técnico — mova para **📋 Plan** e use a skill **plan**.
798
+
799
+ #### Se falhar
800
+
801
+ - **Comentário 🔎 de crítica com `spec-wave:critique-failed`** → corrija o `spec.md` (ou o corpo da issue que o embasa), commite, remova a label e reaplique o gatilho.
802
+ - **Erro de teto de tokens** → a geração **falha e nada é gravado** (um documento cortado no meio valeria menos que documento nenhum). Aumente `ai.maxTokens` no `.spec-wave.json` ou reduza o corpo da issue; depois re-aplique a label.
803
+ - Para reprocessar num modelo mais forte só nesta issue, aplique também `spec-wave:model:<apelido>` (o apelido precisa existir em `ai.modelAliases`).
573
804
 
574
805
  ---
575
806
 
576
- ### `/spec-wave plan <número-da-issue>`
807
+ ### `/spec-wave plan` — plano técnico (2º documento)
577
808
 
578
- Inicia a geração do **plano técnico** para uma Feature, derivado da especificação. É o **segundo** passo (a spec deve existir antes).
809
+ > **Quando usar:** Use para iniciar a geração do plano técnico (plan.md) de uma Feature do spec-wave — o SEGUNDO documento, derivado da spec.md. Aplica a label spec-wave:plan e deixa o GitHub Action gerar. Também cobre a criação e manutenção do .github/config/tech_context.yml, de que a qualidade do plano depende. Gatilhos: 'gerar o plano técnico', 'criar o plan.md da feature 12', 'configurar o tech_context'. Só vale para Features.
579
810
 
580
- O plano técnico segue o schema do RFC-002 §3.2: **Estratégia Técnica** (com Matriz de Rastreabilidade), **Detalhamento da Implementação**, **Segurança e Conformidade**, **Estratégia de Testes** e **Rollback e Monitoramento**. O agente usa o `tech_context` do repositório (`.github/config/tech_context.yml` + versões de pacote e migrations recentes) para embasar o plano e usar APENAS as tecnologias declaradas. Para desvios pontuais, adicione uma seção `## Tech Override` no corpo da issue (RFC-002 §4.3).
811
+ > **Regra fundamental: nunca escreva o `plan.md` à mão.** Quem gera é o spec-wave pelo Action ou pela CLI local. Exceção: revisar/melhorar um plano gerado.
581
812
 
582
- **Passos:**
583
- 1. Verifique se `spec.md` já existe em `docs/features/<slug>/` (o plano usa a especificação funcional como contexto). Se não existir, gere a spec primeiro com `/spec-wave spec <número>`.
584
- 2. **Garanta o `tech_context`** (a qualidade do plano depende disso). Verifique se `.github/config/tech_context.yml` existe no repo (use Read). **Se não existir, ajude a criar AGORA** seguindo a seção **Tech Context** abaixo (logo após este comando) — e garanta que esteja **commitado e pushado** antes de adicionar a label (o Action lê o arquivo do repositório, não do seu disco local).
585
- 3. Adicione a label de gatilho:
586
- ```bash
587
- gh issue edit <número> --add-label "spec-wave:plan"
588
- ```
589
- 4. Informe: "Label `spec-wave:plan` adicionada. O GitHub Action `generate-plan.yml` irá gerar o `plan.md` automaticamente. Acompanhe em: Actions → Generate Plan."
590
- 5. Após a conclusão (cheque comentários na issue ou aguarde confirmação do usuário), ofereça revisar o plan.md gerado em `docs/features/<slug>/plan.md`.
591
- 6. Próximo passo: validar a Feature — mova para **✅ Ready** e use `/spec-wave ready <número>`.
813
+ **Dois modos, mesmo resultado.** `npx @spec-wave/cli@latest generate-plan --issue-number <n>` roda **agora**, nesta sessão; a label `spec-wave:plan` roda no Action. O modo é detectado pelo ambiente. Ambos geram, abrem um **Pull Request**, criticam e comentam na issue. Local exige a chave de IA no seu ambiente. Veja a skill **spec** para a tabela completa.
592
814
 
593
- ---
815
+ **Contexto:** leia `.spec-wave.json` (Read). Ausente → skill **setup**.
594
816
 
595
- ### Tech Context (`.github/config/tech_context.yml`)
817
+ O plano segue o schema do **RFC-002 §3.2**: **Estratégia Técnica** (com Matriz de Rastreabilidade), **Detalhamento da Implementação**, **Segurança e Conformidade**, **Estratégia de Testes** e **Rollback e Monitoramento**. O agente usa o `tech_context` do repositório (`.github/config/tech_context.yml` + versões de pacote e migrations recentes) para embasar o plano e usar **APENAS** as tecnologias declaradas.
596
818
 
597
- Fonte de verdade estática da stack do sistema (RFC-002 §4). O `generate-plan` lê este arquivo para embasar o plano técnico e usar **APENAS** as tecnologias/serviços nele declarados — sem ele, o plano fica genérico e pode inventar APIs inexistentes. O `npx @spec-wave/cli@latest init` gera um **scaffold de exemplo** que **deve ser adaptado** à stack real. Use este fluxo quando o arquivo estiver ausente ou desatualizado.
819
+ #### Passos
598
820
 
599
- **Como ajudar a criar (quando não existir):**
821
+ 1. **A spec existe?** Verifique `docs/features/<slug>/spec.md` — o plano usa a especificação funcional como contexto. Se não existir, gere a spec primeiro (skill **spec**).
600
822
 
601
- 1. **Confirme a ausência:** tente `Read .github/config/tech_context.yml`. Se existir, apenas confirme com o usuário se reflete a stack atual e pule para o fim.
602
- 2. **Detecte a stack** lendo os arquivos do repositório (use Read; não invente):
603
- - `package.json` backend/frontend e libs (ex.: `@nestjs/core`, `next`, `react`, `@prisma/client`, `express`).
604
- - `pom.xml` / `build.gradle` (Java), `requirements.txt` / `pyproject.toml` (Python), `go.mod` (Go).
605
- - `prisma/schema.prisma` ou pasta `migrations/` → tabelas e colunas para `database_schemas`.
606
- - `Dockerfile` / `docker-compose.yml` / charts Helm → `infra`.
607
- - Procure papéis/roles (enum de RBAC) no código para `security.rbac_roles`.
608
- 3. **Rascunhe** o YAML seguindo EXATAMENTE este schema (preencha só o que conseguir confirmar; deixe `# TODO` no que faltar — não invente):
609
- ```yaml
610
- system_info:
611
- name: "<nome do sistema>"
612
- stack:
613
- backend: "<ex.: Node.js (NestJS v11)>"
614
- frontend: "<ex.: Next.js 16 (React 19)>"
615
- database: "<ex.: PostgreSQL (Prisma 5)>"
616
- infra: "<ex.: Docker / Kubernetes>"
617
- architecture: "<ex.: Monorepo Nx / Microservices>"
618
- security:
619
- auth_protocol: "<ex.: JWT>"
620
- rbac_roles: ["ADMIN", "..."]
621
- database_schemas:
622
- - table: "<tabela>"
623
- columns: "<col1, col2, ...>"
624
- existing_services:
625
- - name: "<serviço>"
626
- endpoint: "<caminho>"
627
- auth: "<ex.: JWT, mTLS>"
628
- internal_libraries:
629
- - "<lib interna>"
630
- ```
631
- 4. **Mostre o rascunho ao usuário e peça confirmação/ajustes** antes de gravar (ele conhece serviços internos e roles que o código pode não revelar).
632
- 5. **Grave** com Write em `.github/config/tech_context.yml`.
633
- 6. **Oriente a commitar e pushar** antes de seguir (o Action lê do repo). Sugira ao usuário rodar, via prefixo `!`:
823
+ 2. **Garanta o `tech_context`.** Verifique se `.github/config/tech_context.yml` existe (Read). **Se não existir, ajude a criar AGORA** o passo a passo está na seção **Tech Context** deste documento. Garanta que esteja **commitado e pushado** antes de aplicar a label: o Action lê o arquivo do repositório, não do seu disco local.
824
+
825
+ 3. **Acione**, no modo escolhido:
634
826
  ```bash
635
- !git add .github/config/tech_context.yml && git commit -m "chore: tech_context.yml [spec-wave]" && git push
827
+ # local resultado nesta sessão
828
+ npx @spec-wave/cli@latest generate-plan --issue-number <número>
829
+ # ou Action — assíncrono
830
+ gh issue edit <número> --add-label "spec-wave:plan"
636
831
  ```
637
832
 
638
- **Desvios pontuais:** para uma Feature específica usar algo fora do padrão (ex.: "usar DynamoDB aqui"), oriente a adicionar uma seção `## Tech Override` no corpo da issue, com um bloco YAML que será mesclado (deep-merge) sobre o `tech_context.yml`:
833
+ 4. Informe: "Label `spec-wave:plan` adicionada. O Action `generate-plan.yml` vai gerar o `plan.md`. Acompanhe em Actions Generate Plan."
834
+
835
+ 5. Quando concluir, ofereça revisar `docs/features/<slug>/plan.md`.
836
+
837
+ 6. **Próximo passo:** validar a Feature — mova para **✅ Ready** e use a skill **ready**.
838
+
839
+ #### Desvios pontuais (`## Tech Override`)
840
+
841
+ Para uma Feature específica usar algo fora do padrão, oriente a adicionar no **corpo da issue** uma seção com um bloco YAML que será mesclado (deep-merge) sobre o `tech_context.yml`:
639
842
 
640
843
  ````markdown
641
844
  ## Tech Override
@@ -646,256 +849,742 @@ system_info:
646
849
  ```
647
850
  ````
648
851
 
852
+ #### Se falhar
853
+
854
+ Depois do `generate-plan` roda a **crítica adversarial**, que vira um comentário 🔎 na issue. Se ela apontar findings **graves**, a issue recebe `spec-wave:critique-failed` — corrija o **`plan.md`** (ou a `spec.md` que o embasa), commite, remova a label e reaplique `spec-wave:ready`. Detalhes na skill **workflow**.
855
+
856
+ #### Criticar sem regerar
857
+
858
+ Corrigir o documento à mão **não é desvio** — é o que o fluxo pede quando a crítica reprova. Para rodar a crítica de novo sobre o texto corrigido, **nunca** reaplique `spec-wave:plan`: ele regenera o `plan.md` do zero e descarta a correção.
859
+
860
+ | Situação | Comando |
861
+ |----------|---------|
862
+ | Quero a crítica oficial de novo, na issue | label `spec-wave:critique` (ou `critique --issue-number <n>`) |
863
+ | Quero só saber como está, enquanto edito | `npx @spec-wave/cli@latest critique --file docs/features/<slug>/plan.md` |
864
+
865
+ O `--file` **não** comenta na issue, **não** aplica label e **não** consome tentativa da crítica — é consulta, não portão. Aceita `spec.md`, `plan.md`, `decomposition.md` e `bug.md` (o tipo sai do nome do arquivo; use `--kind` para forçar). Com `--fail-on-grave` ele sai com código 1, para usar em script.
866
+
867
+ Um finding **grave** só bloqueia se vier com citação literal do trecho e não se auto-refutar; os que não passam nesse teste aparecem como **↘️ Rebaixados** no comentário, com o motivo — visíveis, mas sem travar o fluxo.
868
+
649
869
  ---
650
870
 
651
- ### `/spec-wave ready <número-da-issue>`
871
+ ### `/spec-wave ready` — valida spec + plan
652
872
 
653
- Valida que spec.md e plan.md estão completos e a Feature pode avançar.
873
+ > **Quando usar:** Use para validar que spec.md e plan.md de uma Feature do spec-wave estão completos e ela pode avançar para ✅ Ready. Aplica a label spec-wave:ready, que dispara o Action validate.yml. Gatilhos: 'validar a feature 12', 'a spec e o plano estão prontos?', 'mover para Ready'. Também explica os portões humanos critique-failed e needs-human, que bloqueiam a validação.
654
874
 
655
- **Passos:**
656
- 1. Adicione a label de validação:
875
+ Verifica se `spec.md` e `plan.md` contêm todas as seções obrigatórias e se não há sinal de truncamento.
876
+
877
+ **Contexto:** leia `.spec-wave.json` (Read). Ausente → skill **setup**.
878
+
879
+ #### Passos
880
+
881
+ 1. **Cheque os portões humanos ANTES de aplicar a label.** Se a issue tiver `spec-wave:critique-failed` ou `spec-wave:needs-human`, a validação **falha de imediato** — veja *Portões humanos* abaixo e resolva primeiro.
882
+
883
+ 2. Adicione a label:
657
884
  ```bash
658
885
  gh issue edit <número> --add-label "spec-wave:ready"
659
886
  ```
660
- 2. Informe: "Validação iniciada. O workflow verificará se spec.md e plan.md contêm todas as seções obrigatórias."
661
- 3. Se a validação falhar, o workflow comentará os problemas na issue e **não aplicará label de gatilho nenhuma**. Informe o usuário para corrigir e reaplicar `spec-wave:ready`. Falha por título de seção vem com "encontrei X, esperava Y" renomear resolve. `spec-wave:spec` se o documento precisar ser REGERADO: ela **sobrescreve** o `spec.md` revisado.
662
- 4. **Se a issue tiver `spec-wave:critique-failed` ou `spec-wave:needs-human`**, a validação falha de imediato — são portões humanos: a crítica apontou contradições graves (comentário 🔎 na issue) ou esgotou as tentativas. Nesses casos a Feature **não** é devolvida para a etapa de spec; siga o fluxo da seção *Crítica adversarial* (corrigir a superfície certa → remover a label → re-aplicar `spec-wave:ready`).
663
- 5. Se passar, oriente: "Feature validada! Mova o card para **✅ Ready** e use `/spec-wave decompose <número>` para gerar o **rascunho** das Stories (nada é criado ainda)."
887
+
888
+ 3. Informe: "Validação iniciada. O workflow verifica se `spec.md` e `plan.md` contêm todas as seções obrigatórias."
889
+
890
+ 4. **Se a validação falhar por conteúdo**, o workflow comenta os problemas na issue e **não aplica nenhuma label de gatilho**. Oriente o usuário a corrigir e reaplicar `spec-wave:ready`. Quando o problema é o título de uma seção, o comentário já diz qual título encontrou e qual esperava — renomear resolve. Só sugira `spec-wave:spec` se o documento precisar mesmo ser REGERADO: essa label **sobrescreve** o `spec.md`, inclusive o que foi revisado à mão.
891
+
892
+ 5. **Se passar:** "Feature validada! Mova o card para **✅ Ready** e use a skill **decompose** para gerar o **rascunho** das Stories — nada é criado ainda."
893
+
894
+ #### Portões humanos
895
+
896
+ Estas labels **bloqueiam** a validação e **não** devolvem a Feature para a etapa de spec:
897
+
898
+ | Label | O que aconteceu | Como sair |
899
+ |-------|-----------------|-----------|
900
+ | `spec-wave:critique-failed` | A crítica adversarial apontou contradições **graves** (comentário 🔎 na issue) | Corrija a superfície certa, commite, remova a label, reaplique `spec-wave:ready` |
901
+ | `spec-wave:needs-human` | A crítica reprovou N vezes seguidas (default 3) e o fluxo parou | Uma pessoa revisa e remove **as duas** labels à mão |
902
+
903
+ > **Qual superfície corrigir?** Se a crítica reprovou depois do `generate-plan`, corrija o **`plan.md`** (ou a `spec.md` que o embasa). Se reprovou no `decompose`, corrija o **`decomposition.md`** — os achados citam `Story N` / `Task N.M`, que são títulos daquele arquivo. Detalhes na skill **workflow**.
904
+
905
+ #### Rede de segurança contra truncamento
906
+
907
+ O `validate` também recusa documento com sinal objetivo de corte — bloco de código não fechado, parêntese aberto na última linha. Vale para documento editado à mão ou gerado por versão antiga da CLI.
664
908
 
665
909
  ---
666
910
 
667
- ### `/spec-wave decompose <número-da-issue>`
911
+ ### `/spec-wave decompose` — decomposição em duas etapas
912
+
913
+ > **Quando usar:** Use para quebrar uma Feature em Stories+Tasks, ou um RFC em Tasks, no spec-wave. São DUAS etapas com um rascunho revisável no meio: spec-wave:decompose gera/critica o decomposition.md sem criar nada, e spec-wave:decompose-apply cria as issues a partir do rascunho aprovado. Gatilhos: 'decompor a feature 12', 'gerar as stories', 'quebrar em tasks', 'aplicar a decomposição', 'o decompose falhou na crítica'. Também cobre re-decompose e o guard de idempotência.
914
+
915
+ Aplica-se a **dois tipos**:
916
+
917
+ - **Feature** → **Stories** (cada uma com suas **Tasks**), a partir de `spec.md` + `plan.md`
918
+ - **RFC** → **Tasks diretamente** (sem Stories), a partir da descrição
919
+
920
+ Para qualquer outro tipo (Spike, Bug, Story, Task…) o Action **recusa** e comenta.
921
+
922
+ **Contexto:** leia `.spec-wave.json` (Read). Ausente → skill **setup**.
923
+
924
+ #### O modelo mental
925
+
926
+ ```
927
+ spec-wave:decompose
928
+ ├─ decomposition.md ausente → gera via IA → abre Pull Request → critica
929
+ └─ decomposition.md presente → critica o arquivo COMO ESTÁ (preserva suas edições)
930
+ ├─ grave → +critique-failed, comentário citando Story N / Task N.M, exit 1
931
+ └─ limpo → +decompose-ready, comentário "revise e aplique"
932
+
933
+ spec-wave:decompose-apply
934
+ └─ lê decomposition.md → cria Stories/Tasks → board → +decomposed
935
+ (sem nova crítica: aplicar a label É a aprovação humana)
936
+ ```
668
937
 
669
- Decompõe em **duas etapas**, com um rascunho revisável no meio (veja *Decomposição em duas etapas*). Aplica-se a **dois tipos**:
670
- - **Feature** → **Stories** (cada uma com suas **Tasks**), a partir de `spec.md` + `plan.md`.
671
- - **RFC** → **Tasks diretamente** (sem Stories), a partir da descrição do RFC.
938
+ #### Passos
672
939
 
673
- Para qualquer outro tipo (Spike, Bug, Story, Task, …) o Action **recusa** e comenta.
940
+ 1. **Pré-requisito.** Feature: confirme que está em **✅ Ready** (spec e plan validados skill **ready**). RFC: basta a descrição estar completa.
674
941
 
675
- **Passos:**
676
- 1. Para **Feature**: confirme que está em **✅ Ready** (spec.md e plan.md validados). Para **RFC**: basta a descrição estar completa (RFC não usa spec/plan).
677
- 2. **Etapa 1 — gerar o rascunho:**
942
+ 2. **Etapa 1 — gerar o rascunho**, no modo que preferir (mesmo resultado; o modo é detectado pelo ambiente):
678
943
  ```bash
944
+ # local — resultado nesta sessão
945
+ npx @spec-wave/cli@latest decompose --issue-number <número>
946
+ # ou Action — assíncrono
679
947
  gh issue edit <número> --add-label "spec-wave:decompose"
680
948
  ```
681
949
  Informe: "Rascunho iniciado — vai abrir um Pull Request com o `decomposition.md` e passar pela crítica. **Nenhuma issue é criada nesta etapa.**"
682
- 3. Quando o Action terminar, leia o comentário na issue:
683
- - **`spec-wave:decompose-ready`** → o rascunho passou pela crítica. **Leia o `decomposition.md`** e mostre ao usuário o que será criado (Stories, Tasks, dependências). Ofereça editar o arquivo antes de aplicar.
684
- - **`spec-wave:critique-failed`** → o Action **falhou (exit 1)** e nada foi criado. Os achados citam `Story N` / `Task N.M` do `decomposition.md`. **Corrija esse arquivo** (não o `plan.md`) no Pull Request e reaplique `spec-wave:decompose` — o arquivo é criticado como está, sem ser regerado.
685
- - **`spec-wave:needs-human`** a crítica esgotou as tentativas. Pare e envolva o usuário: as duas labels precisam sair à mão.
686
- 4. **Etapa 2 — aplicar o rascunho aprovado** (só depois da revisão):
950
+
951
+ 3. **Leia o resultado** quando o Action terminar:
952
+
953
+ | Label resultante | O que fazer |
954
+ |------------------|-------------|
955
+ | `spec-wave:decompose-ready` | Passou na crítica. **Leia o `decomposition.md`** e mostre ao usuário o que será criado (Stories, Tasks, dependências). Ofereça editar antes de aplicar. |
956
+ | `spec-wave:critique-failed` | O Action **falhou (exit 1)** e nada foi criado. Os achados citam `Story N` / `Task N.M`. **Corrija o `decomposition.md`** — não o `plan.md` — **no Pull Request** e reaplique `spec-wave:decompose` (o arquivo é criticado como está, sem ser regerado, venha ele do PR ou da base). |
957
+ | `spec-wave:needs-human` | A crítica esgotou as tentativas. **Pare** e envolva o usuário: as duas labels precisam sair à mão. |
958
+
959
+ 4. **Etapa 2 — aplicar o rascunho aprovado**, só depois da revisão:
687
960
  ```bash
961
+ # local
962
+ npx @spec-wave/cli@latest decompose --issue-number <número> --apply
963
+ # ou Action
688
964
  gh issue edit <número> --add-label "spec-wave:decompose-apply"
689
965
  ```
690
966
  Aplicar essa label **é** a aprovação humana — não há nova crítica.
691
- 5. Após a aplicação, as issues filhas aparecem como comentário na issue pai. A issue pai e as Stories/Tasks criadas entram no board na Etapa **✅ Ready** (Status Todo; a Etapa nunca retrocede — itens já adiante não são tocados). As Stories trazem a linha `Depende de: #N` (+ relação *blocked by*) — use `npx @spec-wave/cli@latest order <número>` para ver a ordem de execução. Se a issue pai tiver **milestone**, as filhas nascem nele; sem milestone no pai, nascem sem.
692
- 6. A issue recebe a label `spec-wave:decomposed` (guard de idempotência): rodar de novo **não** duplica as issues. Para forçar um re-decompose, siga a seção *Guard de idempotência*.
693
967
 
694
- > **Nunca pule a etapa 1** aplicando `spec-wave:decompose-apply` direto: sem `decomposition.md` o Action falha pedindo o rascunho.
968
+ 5. Após a aplicação, as issues filhas aparecem como comentário na issue pai. Pai e filhas entram no board em **✅ Ready** (Status Todo; a Etapa nunca retrocede — itens já adiante não são tocados). As Stories trazem `Depende de: #N` use a skill **order** para ver a ordem de execução. Se a issue pai tiver **milestone**, as filhas nascem nele (a entrega da Story pertence à release da Feature); sem milestone no pai, nascem sem.
969
+
970
+ 6. A issue recebe `spec-wave:decomposed` (guard de idempotência): rodar de novo **não** duplica as issues.
971
+
972
+ > **Nunca pule a etapa 1** aplicando `spec-wave:decompose-apply` direto — sem `decomposition.md` o Action falha pedindo o rascunho.
973
+
974
+ #### O arquivo `decomposition.md`
975
+
976
+ Fica em `docs/features/<slug>/decomposition.md` (Feature) ou `docs/rfcs/<slug>/decomposition.md` (RFC):
977
+
978
+ ```markdown
979
+ # Decomposição — [FEATURE] Cadastro de Pedidos
980
+ <!-- spec-wave:decomposition v1 issue=360 kind=stories -->
981
+
982
+ ## Story 1 — visualizar meus pedidos
983
+
984
+ **User story:** Como cliente, quero visualizar meus pedidos, para acompanhar entregas
985
+ **Depende de:** —
986
+
987
+ Descrição complementar (contexto, critérios de aceite).
988
+
989
+ ### Task 1.1 — criar endpoint GET /pedidos
990
+
991
+ Corpo técnico.
992
+ ```
993
+
994
+ **Ao editar à mão:**
995
+
996
+ - a **posição** manda, não o número escrito — inserir uma Story no meio sem renumerar funciona
997
+ - `**Depende de:**` aceita **irmãs** (`Story 1, Story 3`, 1-based, só para trás — apontar para si mesma ou para frente é **erro**, não filtro silencioso) e **issues de outras Features** (`#412`, que precisam JÁ existir); as duas formas convivem na mesma linha (`Story 1, #412`), e `—` significa nenhuma
998
+ - o corpo aceita markdown livre (`## Backend`, cercas de código) — só `## Story N` e `### Task N.M` são estrutura
999
+ - **para gerar outro rascunho do zero:** feche o Pull Request e apague a branch `spec-wave/<n>-decompose` (ou apague o arquivo, se já foi mergeado) e reaplique `spec-wave:decompose`
1000
+
1001
+ > ⚠️ O slug vem do **título**. Renomear a Feature entre o rascunho e o apply muda o diretório e órfã o `decomposition.md` — o apply reclama que não achou o rascunho.
1002
+
1003
+ #### Guard de idempotência (`spec-wave:decomposed`)
1004
+
1005
+ O evento `labeled` pode redisparar (re-add da label, retry de runner). Para não duplicar issues, o `decompose` **pula** quando a issue já tem `spec-wave:decomposed` **ou** já tem sub-issues do tipo-alvo (`[STORY]` para Feature, `[TASK]` para RFC). A label é gravada ao **aplicar**. Os workflows ainda usam `concurrency` por issue.
1006
+
1007
+ A `spec-wave:decompose-ready` **não** entra nesse guard — é estado de rascunho pendente, não de decomposição feita.
1008
+
1009
+ **Para forçar um re-decompose:**
1010
+
1011
+ ```bash
1012
+ gh issue edit <n> --remove-label "spec-wave:decomposed"
1013
+ ```
1014
+ Depois **apague/feche as sub-issues antigas** (senão a detecção por sub-issues pula de novo), apague o `decomposition.md` se quiser um rascunho novo, e re-adicione `spec-wave:decompose`.
1015
+
1016
+ #### Dependências entre Stories
1017
+
1018
+ O `decompose` grava `Depende de: #N, #M` no corpo das Stories e cria a relação nativa *blocked by* — para irmãs e para as issues de outras Features referenciadas com `#N` no rascunho (a issue precisa existir: o apply reprova o rascunho ANTES de criar qualquer coisa se não conseguir lê-la). Isso alimenta as skills **order** e **implement**. **Não apague essa linha** ao editar o corpo de uma Story; para mudar dependências, edite a linha (e/ou a relação *blocked by*).
695
1019
 
696
1020
  ---
697
1021
 
698
- ### `/spec-wave implement <número-da-issue>`
1022
+ ### `/spec-wave implement` — etapa 🚧 Desenvolvimento
1023
+
1024
+ > **Quando usar:** Use para implementar trabalho do spec-wave na etapa 🚧 Desenvolvimento — uma Feature inteira (todas as Stories pendentes, em ordem de dependência), uma Story (todas as suas Tasks) ou uma Task isolada. Monta o contexto e aciona o spec-kit; se não houver spec-kit configurado, você mesmo implementa seguindo o contexto. Gatilhos: 'implementar a feature 12', 'começar a story 34', 'fazer a task 56', 'rodar o implement'. Comando LOCAL — não usa label nem Action.
1025
+
1026
+ Comando **local** (lê o `.spec-wave.json`, como o `issue`), **não** disparado por label/Action.
1027
+
1028
+ | Flag/Arg | Descrição |
1029
+ |----------|-----------|
1030
+ | `<issue>` | **Obrigatório**, posicional. Número da Feature, Story ou Task (`12` ou `#12`). |
1031
+ | `--feature-dir <path>` | Caminho `docs/features/<slug>` para anexar `spec.md`/`plan.md` (sobrescreve a resolução automática). |
1032
+ | `--dry-run` | Monta o contexto e imprime o comando **sem executar** e **sem escrever nada no GitHub**. |
1033
+
1034
+ **Pré-requisitos:** `.spec-wave.json` presente (senão → skill **setup**) e a issue ser Feature, Story ou Task. Para executar de fato, o spec-kit precisa estar configurado em `specKit.command` (no `.spec-wave.json`) ou na env `SPEC_WAVE_IMPLEMENT_CMD`.
699
1035
 
700
- Aciona o spec-kit para implementar uma **Feature** (todas as Stories pendentes, em ordem de dependência), uma **Story** (todas as suas Tasks) ou uma **Task** isolada. Comando **local** (etapa 🚧 Desenvolvimento) — não usa label/Action.
1036
+ #### Como o comando se comporta por tipo
701
1037
 
702
- **Pré-requisitos:** o repositório atual precisa estar inicializado (`.spec-wave.json` presente) e a issue deve ser do tipo Feature, Story ou Task. Para executar de fato (fora do `--dry-run`), o spec-kit precisa estar configurado via `specKit.command` no `.spec-wave.json` ou a env `SPEC_WAVE_IMPLEMENT_CMD`.
1038
+ | Tipo | Comportamento |
1039
+ |------|---------------|
1040
+ | **Feature** | Lista as Stories (sub-issues), **ordena topologicamente** pelas dependências, **pula as já em 👀 Code Review ou além** (listadas no contexto como "não tocar") e monta **um único** contexto com todas as pendentes, cada uma com suas Tasks. Aciona o spec-kit **uma vez**. |
1041
+ | **Story** | Coleta todas as Tasks (sub-issues) e aciona o spec-kit uma única vez. |
1042
+ | **Task** | Só aquela task. |
703
1043
 
704
- **Modo Feature:** o comando avalia as Stories da Feature ordena topologicamente pelas dependências (`Depende de:` + *blocked by*), consulta a Etapa de cada uma no board e **pula as já implementadas** (👀 Code Review ou além). O contexto único (`.spec-wave/implement-<feature>.md`) traz as pendentes em ordem, cada uma com suas Tasks. **Ciclo de dependências entre Stories pendentes → o comando aborta** (corrija as linhas `Depende de:`; use `npx @spec-wave/cli@latest order <feature>` para visualizar). Story pendente sem Tasks → aborta pedindo decomposição. Todas implementadas → encerra sem acionar o spec-kit.
1044
+ **Abortos no modo Feature:** ciclo de dependências entre Stories pendentes → **exit 1** (corrija as linhas `Depende de:`; veja a skill **order**). Story pendente **sem Tasks** → aborta pedindo decomposição. Todas implementadas → encerra sem acionar o spec-kit.
705
1045
 
706
- **Passos:**
707
- 1. Confirme que há `.spec-wave.json` no repo (senão, oriente `/spec-wave setup`).
708
- 2. **Sempre comece com `--dry-run`** para inspecionar o que será feito — detecção do tipo, lista de Tasks coletadas (Story) ou a ordem/puladas/ciclos das Stories (Feature) e o comando do spec-kit que seria executado:
1046
+ **Bug** → modo próprio (RFC-004): sem tasks e sem spec/plan, o contexto impõe quatro fases — reproduzir → causa raiz → fix mínimo → teste de regressão. O `bug.md`, quando existe, entra como **hipótese a confirmar** (foi escrito por IA sem executar código), não como fato. O Bug vai sozinho para 👀 Code Review ao abrir o PR: não arrasta a Feature-pai.
1047
+
1048
+ Outros tipos (Spike, Epic) o comando **recusa**.
1049
+
1050
+ #### Passos
1051
+
1052
+ 1. Confirme que há `.spec-wave.json` no repo.
1053
+
1054
+ 2. **Sempre comece com `--dry-run`:**
709
1055
  ```bash
710
1056
  npx @spec-wave/cli@latest implement <número> --dry-run
711
1057
  ```
712
- 3. Mostre ao usuário o contexto montado em `.spec-wave/implement-<número>.md` e o comando. Esse arquivo contém as **instruções de execução sequencial**: implemente as Tasks **uma por vez** — mova a task para **🚧 Desenvolvimento** só ao iniciá-la e para **🎉 Done** ao concluí-la, antes de passar para a próxima. **Nunca** coloque várias tasks em "in progress" ao mesmo tempo.
713
- 4. **Se você (agente) for implementar diretamente** (sem `specKit.command`): siga o contexto task por task. Para cada task: `npx @spec-wave/cli@latest task start <n>` ao iniciar (Etapa 🚧 Desenvolvimento + Status In Progress) e `npx @spec-wave/cli@latest task done <n>` ao concluir (Etapa 🎉 Done + Status Done) — **prefira esses comandos a mutações GraphQL/`gh` manuais**: eles embutem as regras do board (Etapa nunca retrocede; uma task In Progress por vez). Se o contexto trouxer **aviso de dependência pendente** (a issue depende de outra não concluída), confirme com o usuário antes de seguir. **Ao concluir toda a Story**: faça o commit, abra o PR e mova a Story com `npx @spec-wave/cli@latest story review <n>` (Etapa 👀 Code Review, Status → Todo) — as Tasks já estão em 🎉 Done. A **Feature só avança** quando **TODAS as suas Stories** já estiverem em Code Review — se houver Story pendente, deixe a Feature em 🚧 Desenvolvimento. Lembre: Etapa só avança (nunca volta); Status é o progresso dentro da etapa.
714
- 5. Se o usuário aprovar e o spec-kit estiver configurado, rode sem `--dry-run`:
1058
+ Inspecione: detecção do tipo, Tasks coletadas (Story) ou ordem/puladas/ciclos (Feature), e o comando do spec-kit que seria executado.
1059
+
1060
+ 3. Mostre ao usuário o contexto montado em `.spec-wave/implement-<número>.md`. Ele inclui os comentários da issue, um **digest do código recente**, um **aviso de dependências pendentes** quando aplicável, e as instruções de execução sequencial.
1061
+
1062
+ 4. **Se o spec-kit estiver configurado** e o usuário aprovar, rode sem `--dry-run`:
715
1063
  ```bash
716
1064
  npx @spec-wave/cli@latest implement <número>
717
1065
  ```
718
- - Se o spec-kit **não** estiver configurado, o comando só monta o contexto e mostra como configurar (`specKit.command` / `SPEC_WAVE_IMPLEMENT_CMD`). Ajude o usuário a definir o template (placeholders: `{tasksFile} {specFile} {planFile} {issue} {type} {title}`).
719
- - Use `--feature-dir docs/features/<slug>` se a resolução automática da Feature falhar (a skill avisa com warning) e você quiser anexar `spec.md`/`plan.md` como contexto.
720
- 6. **No modo Feature**, siga o contexto Story a Story, na ordem listada: para cada Story pendente, implemente as Tasks com `task start`/`task done`, depois commit + PR + `npx @spec-wave/cli@latest story review <n>`; só então passe à próxima Story. **Bug** tem modo próprio (RFC-004): sem tasks e sem spec/plan, com quatro fases — reproduzir → causa raiz → fix mínimo → teste de regressão — e o `bug.md` entrando como hipótese a confirmar. Se a issue não for Feature, Story, Task nem Bug (ex.: Spike, Epic), o comando recusa. Feature **sem Stories** → rode `/spec-wave decompose` primeiro. **Ciclo de dependências** → corrija as linhas `Depende de:` (veja `spec-wave order`).
721
- 7. Ao final (Tasks em **🎉 Done**, Story em **👀 Code Review**; a Feature só vai para Code Review quando a última Story concluir — no modo Feature, isso acontece dentro da mesma execução): confirme o resultado com o usuário e oriente a revisão dos PRs. **Avise que os PRs estão empilhados** e que o merge é ordem-dependente: depois da revisão (PRs marcados prontos), o caminho é `npx @spec-wave/cli@latest merge <feature>` — nunca `gh pr merge --delete-branch` à mão em PR de pilha.
1066
+ Se **não** estiver configurado, o comando só monta o contexto e mostra como configurar. Ajude a definir o template placeholders disponíveis: `{tasksFile} {specFile} {planFile} {issue} {type} {title}`.
1067
+
1068
+ Use `--feature-dir docs/features/<slug>` se a resolução automática falhar e você quiser anexar `spec.md`/`plan.md`.
1069
+
1070
+ 5. **Se você (agente) for implementar diretamente**, siga o protocolo abaixo.
1071
+
1072
+ 6. Ao final, confirme o resultado com o usuário e oriente a revisão dos PRs.
1073
+
1074
+ #### Protocolo de execução (obrigatório)
1075
+
1076
+ **Uma Task por vez.** Nunca deixe duas Tasks com Status "In Progress" ao mesmo tempo.
1077
+
1078
+ Para cada Task, **prefira os comandos da CLI a mutações GraphQL/`gh` manuais** — eles embutem as regras do board (Etapa nunca retrocede; uma Task In Progress por vez):
1079
+
1080
+ ```bash
1081
+ npx @spec-wave/cli@latest task start <n> # Etapa 🚧 Desenvolvimento + Status In Progress
1082
+ # ... implementa ...
1083
+ npx @spec-wave/cli@latest task done <n> # Etapa 🎉 Done + Status Done
1084
+ ```
1085
+
1086
+ **Ao concluir toda a Story:** faça o commit, abra o PR e mova a Story:
1087
+
1088
+ ```bash
1089
+ npx @spec-wave/cli@latest story review <n> # Etapa 👀 Code Review, Status Todo
1090
+ ```
1091
+
1092
+ **A Feature só avança** para 👀 Code Review quando **TODAS** as suas Stories já estiverem lá. Enquanto houver Story pendente, deixe a Feature em 🚧 Desenvolvimento. No modo Feature isso acontece dentro da mesma execução.
1093
+
1094
+ **No modo Feature**, siga o contexto Story a Story, **na ordem listada**: implemente as Tasks, depois commit + PR + `story review`; só então passe à próxima Story.
1095
+
1096
+ > **Aviso de dependência pendente** no contexto (a issue depende de outra não concluída, via `Depende de: #N` ou *blocked by*) → **confirme com o usuário** antes de seguir fora de ordem.
1097
+
1098
+ Lembre: a **Etapa só avança**, nunca volta; o **Status** mede o progresso dentro da etapa.
1099
+
1100
+ #### Quando não dá para implementar
1101
+
1102
+ | Situação | Saída |
1103
+ |----------|-------|
1104
+ | Feature **sem Stories** | Rode a skill **decompose** primeiro |
1105
+ | **Ciclo de dependências** | Corrija as linhas `Depende de:` — veja a skill **order** |
1106
+ | Issue é Spike/Epic | O comando recusa; use a skill **move** para mexer no board |
1107
+ | Bug sem `bug.md` | Segue assim mesmo, com aviso — a investigação inteira fica com o executor. Para gerar o documento antes, use a skill **bug**. |
1108
+
1109
+ ---
1110
+
1111
+ ### `/spec-wave qa` — etapa 🧪 QA
1112
+
1113
+ > **Quando usar:** Use para a etapa 🧪 QA do spec-wave — gerar o plano de QA de uma Feature (label spec-wave:qa → qa-plan.md), revisá-lo, e EXECUTAR os cenários localmente com `spec-wave qa <issue>` (Feature, Story ou Bug). Verde move o board sozinho; vermelho abre um Bug por cenário reprovado. Gatilhos: 'rodar o QA', 'validar a feature 12', 'gerar o plano de QA', 'testar a story 34', 're-testar o cenário 2'.
1114
+
1115
+ Duas metades, em ordem obrigatória:
1116
+
1117
+ 1. **Gerar o plano** (label + Action): `spec-wave:qa` na **Feature** → o Action gera `docs/features/<slug>/qa-plan.md`, valida, critica e aplica `spec-wave:qa-ready`.
1118
+ 2. **Executar** (sempre local): `npx @spec-wave/cli@latest qa <issue>` roda os cenários contra o checkout e emite o veredito.
1119
+
1120
+ **Nunca rode o `qa` sem a `spec-wave:qa-ready` na Feature** — o comando recusa, e o motivo é de desenho (D-QA3/D-QA4): o veredito **verde avança a Etapa sozinho, sem confirmação humana**, então o portão humano é a **revisão do plano**, antes de executar.
1121
+
1122
+ #### 0. Detecção de configuração (antes de qualquer coisa)
1123
+
1124
+ Confirme que existe `.spec-wave.json` no repositório (senão → skill **setup**). Para executar de fato, o comando do executor precisa estar em `qa.command` no `.spec-wave.json` (ou na env `SPEC_WAVE_QA_CMD`, que tem precedência):
1125
+
1126
+ ```json
1127
+ {
1128
+ "qa": {
1129
+ "command": "claude -p \"Execute o QA descrito em {contextFile}\"",
1130
+ "setup": "npm ci && npm run build",
1131
+ "env": { "BASE_URL": "http://localhost:3000" },
1132
+ "defaultBugPriority": "P2"
1133
+ }
1134
+ }
1135
+ ```
1136
+
1137
+ Placeholders: `{contextFile} {qaPlanFile} {specFile} {issue} {type} {title}`. Sem `qa.command`, o comando monta o contexto, imprime como configurar e **não executa** — não é erro.
1138
+
1139
+ #### 1. Gerar o plano (Feature)
1140
+
1141
+ ```bash
1142
+ gh issue edit <feature> --add-label "spec-wave:qa"
1143
+ ```
1144
+
1145
+ - **Só em Feature** (D-QA1: o plano é por Feature, arquivo único, seções `## Cenário N — Story #X`). Numa Story o Action comenta apontando a Feature-pai; num Bug, não se aplica (ver §5).
1146
+ - Arquivo **ausente** → gera via IA e publica em Pull Request. Arquivo **presente** → valida + critica **COMO ESTÁ** (edições manuais são preservadas — mesma semântica do decompose). Para regerar do zero: apague o arquivo e reaplique a label.
1147
+ - Requer `spec.md` e `plan.md` já na base.
1148
+ - Desfechos: limpo → `spec-wave:qa-ready` + comentário com o resumo; grave → `spec-wave:critique-failed`; reprovas repetidas → `spec-wave:needs-human`.
1149
+
1150
+ #### 2. Revisar e editar o qa-plan.md (o portão humano)
1151
+
1152
+ Leia o plano com o usuário ANTES de executar. Regras do arquivo:
1153
+
1154
+ - A estrutura é só `## Cenário N — Story #X`; o corpo aceita markdown livre.
1155
+ - **A posição manda, não o número escrito** — inserir um cenário no meio sem renumerar funciona.
1156
+ - `Story #X` é obrigatório e precisa ser sub-issue da Feature.
1157
+ - `**Critério:**` e `**Esperado:**` são obrigatórios; `**Pré-condições:**` e `**Passos:**` opcionais.
1158
+ - Depois de editar, reaplique `spec-wave:qa` para uma nova crítica (o arquivo NÃO é regerado).
1159
+
1160
+ > ⚠️ O slug vem do **título** da Feature. Renomeá-la depois da geração órfã o arquivo — o comando falha citando o slug órfão.
1161
+
1162
+ #### 3. Executar — SEMPRE `--dry-run` primeiro
1163
+
1164
+ ```bash
1165
+ npx @spec-wave/cli@latest qa <issue> --dry-run # mostra cenários-alvo e o comando; ZERO escrita no GitHub
1166
+ npx @spec-wave/cli@latest qa <issue> # executa de fato
1167
+ ```
1168
+
1169
+ Mostre ao usuário o contexto montado em `.spec-wave/qa-<n>.md` antes de rodar sem `--dry-run`.
1170
+
1171
+ Alvos: `qa <feature>` roda todos os cenários das Stories ainda sem `qa-approved`; `qa <story>` só os daquela Story; `qa <bug>` o Teste de Regressão do `bug.md`; `--only <n[,m]>` filtra por número posicional.
1172
+
1173
+ **PROIBIDO corrigir código durante a execução.** QA não conserta: cenário reprovado vira Bug, e alterar o código no meio invalida o veredito. Se você for o executor (via `qa.command`), siga a skill **qa-executor** e as instruções do contexto à risca — um cenário por vez, evidência bruta, `blocked` (nunca `fail`) com o `blockedReason` do enum para o que não pôde rodar.
1174
+
1175
+ Para validar uma **trilha inteira** (todas as Features de um milestone, em containers paralelos), use a skill **qa-lead** — o `qa` continua sendo a unidade que ela orquestra.
1176
+
1177
+ #### 4. Os três desfechos
1178
+
1179
+ | Veredito | O que aconteceu | O que fazer |
1180
+ |---|---|---|
1181
+ | ✅ **verde** (todos pass) | `qa-approved` aplicada; Story → 📋 Homologação; Feature move quando TODAS as Stories liberarem; Bug → 🚀 Deploy | Nada — o board já andou. Se a Story tinha **Bug filho aberto**, ela NÃO avança (guarda dura): feche o Bug primeiro. |
1182
+ | ❌ **vermelho** (algum fail) | 1 Bug por cenário reprovado (filho da Story dona, ✅ Ready, `bug.md` commitado, `bug-approved` aplicada); item fica em 🧪 QA; exit 1 | Corrija os Bugs (skill **implement**) e re-teste (§6). |
1183
+ | ⚪ **inconclusivo** (blocked, sem fail) | Ambiente quebrado não é defeito: nada move, nenhum Bug; exit 1 | Destrave o ambiente (seed, serviço fora do ar) e rode de novo. |
1184
+
1185
+ #### 5. Bug — exceção documentada (§2.1 da spec)
1186
+
1187
+ O QA de um **Bug** usa a seção `Teste de Regressão` do próprio `bug.md` (não há qa-plan). Verde move o Bug para **🚀 Deploy** (D-QA6 — Bug não passa por Homologação).
1188
+
1189
+ E quando um cenário reprova, o `bug.md` do Bug novo **é escrito pelo comando, sem IA e sem a label `spec-wave:bug`** — exceção explícita à regra "nunca escreva o bug.md à mão": a reprodução, o esperado/obtido e o teste de regressão já existem e são determinísticos (são o cenário + a saída real). O arquivo é commitado e a `spec-wave:bug-approved` aplicada pelo próprio comando. **Não** aplique `spec-wave:bug` nesses Bugs — regeraria por IA um documento que registra uma execução observada.
1190
+
1191
+ #### 6. Ciclo de re-teste
1192
+
1193
+ 1. Fix do Bug (skill **implement**, PR, merge).
1194
+ 2. Re-teste só o cenário: `npx @spec-wave/cli@latest qa <story> --only <cenário>`.
1195
+ 3. O comando NÃO duplica Bug: se o cenário reprovar de novo, ele comenta no Bug existente (marcador `spec-wave:qa-origin`).
1196
+ 4. Verde com o Bug ainda aberto não avança a Story — feche o Bug (o fix mergeado + regressão verde justificam) e rode o `qa` de novo.
1197
+
1198
+ #### Recusas que você vai encontrar (e o que significam)
1199
+
1200
+ - Sem `.spec-wave.json` → rode a skill **setup**.
1201
+ - `spec-wave:qa` ainda na issue → geração em voo; aguarde o Action.
1202
+ - `critique-failed`/`needs-human` → portão humano da crítica; corrija o documento apontado.
1203
+ - Feature sem `qa-ready` → gere/critique o plano primeiro (§1).
1204
+ - Etapa **anterior** a 🧪 QA → o `qa` não promove item; quem move até QA é o merge (`spec-wave merge` / `run --pr`).
1205
+ - Etapa **posterior** → informa e sai 0 (a Etapa nunca retrocede).
1206
+ - Nenhum cenário casando com a Story → plano desatualizado (re-decompose criou Stories novas) ou Feature renomeada (slug órfão).
722
1207
 
723
1208
  ---
724
1209
 
725
- ### `/spec-wave rfc <tópico>`
726
-
727
- Crie um documento RFC seguindo a estrutura do RFC-001.
728
-
729
- **Passos:**
730
- 1. Entreviste o usuário sobre: objetivo, problema atual, solução proposta, princípios, stakeholders afetados
731
- 2. Escreva o RFC em português com as seções:
732
- - 1. Objetivo
733
- - 2. Princípios
734
- - 3. Papéis e Responsabilidades
735
- - 4. Estrutura de Trabalho
736
- - 5. Fluxo de Trabalho
737
- - 6. Automação
738
- - 7. Métricas
739
- - 8. Riscos e Mitigações
740
- 3. Salve em `rfc/rfc-<slug-do-tópico>.md` usando o Write tool
741
- 4. Crie uma issue de RFC:
1210
+ ### `/spec-wave bug` — o documento do defeito
1211
+
1212
+ > **Quando usar:** Use para gerar o bug.md de um defeito do spec-wave — reprodução, causa raiz, escopo do fix e teste de regressão. Aplica a label spec-wave:bug e deixa o GitHub Action gerar o arquivo em docs/bugs/<slug>/ e abrir um Pull Request. Gatilhos: 'gerar o bug.md da issue 42', 'documentar a causa raiz do bug', 'rodar o spec-wave:bug'. Só vale para issues do tipo Bug — Feature usa spec/plan.
1213
+
1214
+ > **Regra fundamental: nunca escreva o `bug.md` você mesmo.** Aplique a label e deixe o Action gerar — é isso que garante que o arquivo chegue à main por Pull Request e seja referenciado na issue. Exceção: revisar/melhorar um `bug.md` já gerado (aí sim use Edit no arquivo local).
1215
+
1216
+ **Contexto:** leia `.spec-wave.json` (Read). Ausente skill **setup**.
1217
+
1218
+ #### Por que existe
1219
+
1220
+ Um Bug **não** gera `spec.md` + `plan.md`. Esses documentos pedem visão geral funcional, critérios de aceite, requisitos não-funcionais e plano de rollback — peso desproporcional para um defeito.
1221
+
1222
+ O `bug.md` tem seis seções e uma finalidade: permitir que outra pessoa (ou o dev-agent) **reproduza, entenda e corrija** o defeito, com prova de que corrigiu.
1223
+
1224
+ #### Passos
1225
+
1226
+ 1. **Confirme que a issue é do tipo Bug.**
1227
+
1228
+ > **Apenas Bug.** Para qualquer outro tipo o Action **pula** a geração, remove a label e comenta.
1229
+
1230
+ 2. Adicione a label de gatilho:
742
1231
  ```bash
743
- gh issue create --title "[RFC] <título>" --label "[RFC]"
1232
+ gh issue edit <número> --add-label "spec-wave:bug"
744
1233
  ```
745
1234
 
746
- ---
1235
+ 3. Informe ao usuário: "Label `spec-wave:bug` adicionada. O Action `generate-bug.yml` vai gerar o `bug.md` automaticamente. Acompanhe em Actions → Generate Bug."
747
1236
 
748
- ### `/spec-wave bug <número-da-issue>`
1237
+ 4. Quando concluir, ofereça revisar `docs/bugs/<slug>/bug.md`. O slug vem do título: `[BUG] Duplicidade de pedidos no PIX` → `duplicidade-de-pedidos-no-pix`.
749
1238
 
750
- Gera o **`bug.md`** de um defeito: `docs/bugs/<slug>/bug.md`, com reprodução, causa raiz, escopo do fix e teste de regressão.
1239
+ Concentre a revisão em **duas seções**: **Causa Raiz** e **Teste de Regressão**. São elas que decidem se a correção ataca o defeito ou o sintoma o resto do documento é contexto.
751
1240
 
752
- > **Nunca escreva o `bug.md` à mão.** Aplique a label e deixe o Action gerar é isso que garante o arquivo commitado e referenciado na issue.
1241
+ 5. **Validar:** aplique `spec-wave:ready`. O Action confere as seis seções obrigatórias e aplica `spec-wave:bug-approved`.
753
1242
 
754
- **Por que não spec/plan:** um Bug não gera especificação funcional nem plano técnico. Esses documentos pedem critérios de aceite, requisitos não-funcionais e plano de rollback — peso desproporcional para um defeito. O `bug.md` tem seis seções e uma finalidade: permitir que outra pessoa (ou o dev-agent) reproduza, entenda e corrija, com prova de que corrigiu.
1243
+ #### Quando é obrigatório
755
1244
 
756
- **Passos:**
1245
+ | Severidade | `bug.md` |
1246
+ |---|---|
1247
+ | **P0** | Opcional — o fix não espera documento. Documente depois, se valer. |
1248
+ | **P1** | Recomendado. |
1249
+ | **P2 / P3** | **Obrigatório** antes de o bug entrar na fila técnica (✅ Ready). |
757
1250
 
758
- 1. Confirme que a issue é do tipo **Bug** (para outros tipos o Action pula, remove a label e comenta).
759
- 2. `gh issue edit <n> --add-label "spec-wave:bug"`
760
- 3. Avise: o Action `generate-bug.yml` gera o arquivo e abre um Pull Request com ele.
761
- 4. Ofereça revisar **duas seções**: **Causa Raiz** e **Teste de Regressão**. São elas que decidem se a correção ataca o defeito ou o sintoma.
762
- 5. Validar: `spec-wave:ready` → confere as seis seções e aplica `spec-wave:bug-approved`.
1251
+ #### As seis seções
763
1252
 
764
- **Seções obrigatórias** (o validador as compara byte a byte — não renomeie ao editar):
765
1253
  `Reprodução` · `Esperado e Obtido` · `Impacto e Severidade` · `Causa Raiz` · `Escopo do Fix` · `Teste de Regressão`
766
1254
 
767
- **Quando é obrigatório:** **P0** dispensa (o fix não espera documento); **P1** recomendado; **P2/P3** obrigatório antes de o bug entrar na fila técnica (✅ Ready).
1255
+ O validador procura estes títulos byte a byte se alguém renomear uma seção ao editar o arquivo, o `spec-wave:ready` reprova.
768
1256
 
769
- **Se a crítica reprovar** (`spec-wave:critique-failed`), os três alvos mais comuns são: a causa raiz não explica todos os sintomas relatados; o escopo do fix é maior que a causa (refatoração pegando carona); o teste de regressão passaria mesmo sem o fix.
1257
+ #### Se falhar
770
1258
 
771
- **Relato insuficiente** produz "Causa raiz não determinada" com hipóteses isso é o comportamento correto, não falha. Leve as perguntas a quem reportou, acrescente as respostas **como comentário na issue** e reaplique `spec-wave:bug`: os comentários entram no próximo payload.
1259
+ - **Comentário 🔎 de crítica com `spec-wave:critique-failed`** → a crítica adversarial achou problema grave. Os três alvos mais comuns: a causa raiz não explica todos os sintomas relatados; o escopo do fix é maior que a causa (refatoração pegando carona); o teste de regressão passaria mesmo sem o fix. Corrija o `bug.md`, commite, remova a label e reaplique `spec-wave:bug`.
1260
+ - **`spec-wave:needs-human`** → a crítica reprovou N vezes seguidas e o fluxo está **parado**. Uma pessoa precisa revisar e remover a label.
1261
+ - **Relato insuficiente** → o `bug.md` sai com "Causa raiz não determinada" e uma lista de hipóteses. Isso é comportamento correto, não falha: leve as perguntas a quem reportou, acrescente as respostas como comentário na issue e reaplique `spec-wave:bug` — os comentários entram no próximo payload.
1262
+ - Para reprocessar num modelo mais forte só nesta issue, aplique também `spec-wave:model:<apelido>` (o apelido precisa existir em `ai.modelAliases`).
772
1263
 
773
1264
  ---
774
1265
 
775
- ### `/spec-wave triage <accept|reject|duplicate> <número>`
1266
+ ### `/spec-wave triage` o desfecho da triagem
776
1267
 
777
- Desfecho da triagem de um Bug (RFC-004 §4.1) o mesmo que a tela de Bugs do PM oferece, pelo terminal.
1268
+ > **Quando usar:** Use para dar o desfecho da triagem de um Bug do spec-wave: aceitar para a fila técnica, rejeitar, ou marcar como duplicata. Gatilhos: 'aceitar o bug 42', 'rejeitar esse bug', 'marcar como duplicata da 17', 'triar os bugs'. Só vale para issues do tipo Bug.
1269
+
1270
+ A triagem decide **uma** coisa: isto vira trabalho, e com que urgência? Daí as três saídas — e nenhuma delas ser "editar". Corrigir o relato é conversa na issue.
778
1271
 
779
1272
  ```bash
780
1273
  npx @spec-wave/cli@latest triage accept 42
781
- npx @spec-wave/cli@latest triage accept 42 --severity P1 # reclassifica ao aceitar
782
- npx @spec-wave/cli@latest triage reject 42 --reason "comportamento esperado"
1274
+ npx @spec-wave/cli@latest triage accept 42 --severity P1
1275
+ npx @spec-wave/cli@latest triage reject 42 --reason "comportamento esperado, documentado em X"
783
1276
  npx @spec-wave/cli@latest triage duplicate 42 --of 17
784
1277
  ```
785
1278
 
786
- - **accept** Ready, com a label `spec-wave:triaged`.
787
- - **reject** e **duplicate** → **fecham** a issue e **não mexem na Etapa**: ela nunca retrocede, e um bug rejeitado não avançou para lugar nenhum. Quem o tira das filas é o estado `closed`.
788
- - `duplicate` comenta **nas duas** issues — sem isso, quem acompanha a original não fica sabendo que outro relato.
1279
+ | Ação | Efeito |
1280
+ |---|---|
1281
+ | `accept` | **✅ Ready** (fila técnica), label `spec-wave:triaged`. `--severity` reclassifica **trocando** a label, nunca acumulando. |
1282
+ | `reject` | Fecha a issue com `spec-wave:wont-fix`. **`--reason` é obrigatório.** |
1283
+ | `duplicate` | Fecha com `spec-wave:duplicate` e comenta **nas duas** issues. **`--of` é obrigatório.** |
1284
+
1285
+ > `reject` e `duplicate` **não mexem na Etapa**. Ela nunca retrocede, e um bug rejeitado não avançou para lugar nenhum — quem o tira das filas é o estado `closed` da issue.
1286
+
1287
+ #### O portão de aceite
1288
+
1289
+ | Severidade | Exige `bug.md` validado? |
1290
+ |---|---|
1291
+ | **P0 / P1** | Não — esperar o documento custa mais que investigar durante a correção. |
1292
+ | **P2 / P3** | **Sim** (`spec-wave:bug-approved`). Um bug sem causa raiz investigada empurra a investigação para o dev, e é aí que "corrigir o sintoma" acontece. |
1293
+
1294
+ `spec-wave:critique-failed` e `spec-wave:needs-human` bloqueiam **qualquer** severidade, P0 inclusive: aceitar um bug cujo documento foi reprovado é exatamente o que o portão existe para evitar.
789
1295
 
790
- **Portão de aceite:** **P2/P3** exigem o `bug.md` validado (`spec-wave:bug-approved`) antes da fila. **P0/P1** dispensam — esperar o documento custa mais que investigar durante a correção. E `spec-wave:critique-failed` ou `spec-wave:needs-human` bloqueiam **qualquer** severidade: aceitar um bug cujo documento foi reprovado é justamente o que o portão existe para evitar.
1296
+ #### Se o aceite for recusado
791
1297
 
792
- Para criar um Bug: `npx @spec-wave/cli@latest bug --title "..." [--parent <n>] [--priority P2]`. Ele nasce em **🐞 Triagem** — ou direto em **✅ Ready** se for **P0**.
1298
+ O comando diz qual portão barrou. Os caminhos:
1299
+
1300
+ - **Falta o `bug.md`** → skill **bug** (aplica `spec-wave:bug`), depois `spec-wave:ready` para validar. Ou `--severity P1`, se for de fato urgente — mas isso é reclassificar o defeito, não contornar o portão.
1301
+ - **`spec-wave:critique-failed`** → corrija o `bug.md`, commite, remova a label.
1302
+ - **`spec-wave:needs-human`** → uma pessoa precisa revisar antes de remover.
1303
+
1304
+ #### Criar um Bug
1305
+
1306
+ ```bash
1307
+ npx @spec-wave/cli@latest bug --title "Duplicidade de pedidos no PIX" --parent 17 --priority P2
1308
+ ```
1309
+
1310
+ Nasce em **🐞 Triagem** — ou direto em **✅ Ready** se for **P0**.
793
1311
 
794
1312
  ---
795
1313
 
796
- ### `/spec-wave fix-pr <número-do-pr>`
1314
+ ### `/spec-wave rfc` — documento de processo
797
1315
 
798
- Audita um Pull Request e corrige automaticamente os problemas encontrados segurança, arquitetura, infraestrutura e qualidade de código. Cada fix vira um commit separado no branch do PR. Cada review comment recebe uma resposta com o hash do commit.
1316
+ > **Quando usar:** Use para escrever um documento RFC de processo seguindo a estrutura do RFC-001 do spec-wave e registrá-lo como issue no board. Gatilhos: 'escrever um RFC', 'documentar esse processo como RFC', 'criar um RFC sobre X'. RFC não usa spec nem plan depois de escrito, ele decompõe direto em Tasks (skill decompose).
799
1317
 
800
- **Pré-requisitos:** `.spec-wave.json` deve existir (para resolver `owner/repo`). Token com permissão de push no branch do PR.
1318
+ RFCs são escritos em **português do Brasil** e vivem em `rfc/`.
801
1319
 
802
- **Passos:**
1320
+ **Contexto:** leia `.spec-wave.json` (Read). Ausente → skill **setup**. Se já existirem RFCs em `rfc/`, leia um deles antes de escrever — o estilo da equipe vence este template.
803
1321
 
804
- 1. **Resolver contexto**
805
- - Leia `.spec-wave.json` para obter `owner` e `repo`.
806
- - Confirme o número do PR com o usuário se não vier como argumento.
1322
+ #### Passos
807
1323
 
808
- 2. **Coletar dados do PR**
809
- ```bash
810
- gh pr view <número> --json number,title,headRefName,body,changedFiles
811
- gh pr diff <número>
812
- gh api repos/<owner>/<repo>/pulls/<número>/comments
813
- gh api repos/<owner>/<repo>/pulls/<número>/reviews
814
- ```
815
- - Liste todos os arquivos alterados.
816
- - Colete todos os review comments (inline) e reviews gerais.
1324
+ 1. **Entreviste o usuário** sobre: objetivo, problema atual, solução proposta, princípios, stakeholders afetados. Não invente contexto organizacional.
1325
+
1326
+ 2. **Escreva o RFC** com estas seções:
1327
+
1328
+ 1. Objetivo
1329
+ 2. Princípios
1330
+ 3. Papéis e Responsabilidades
1331
+ 4. Estrutura de Trabalho
1332
+ 5. Fluxo de Trabalho
1333
+ 6. Automação
1334
+ 7. Métricas
1335
+ 8. Riscos e Mitigações
817
1336
 
818
- 3. **Fazer checkout no branch do PR**
1337
+ 3. **Salve** com Write em `rfc/rfc-<slug-do-tópico>.md`.
1338
+
1339
+ 4. **Crie a issue de RFC no board** — use a CLI, não `gh issue create` (que não adiciona ao Project):
819
1340
  ```bash
820
- gh pr checkout <número>
1341
+ npx @spec-wave/cli@latest issue --type rfc \
1342
+ --title "<título sem prefixo>" \
1343
+ --body "<resumo + link para rfc/rfc-<slug>.md>"
821
1344
  ```
1345
+ A issue nasce em **📥 Backlog**.
822
1346
 
823
- 4. **Varredura de problemas** para cada categoria abaixo, leia os arquivos alterados e identifique issues:
1347
+ 5. **Próximo passo:** um RFC **não** usa `spec.md` nem `plan.md`. Quando a descrição estiver completa, ele decompõe **direto em Tasks** use a skill **decompose**, que grava o rascunho em `docs/rfcs/<slug>/decomposition.md`.
824
1348
 
825
- | Categoria | O que procurar |
826
- |-----------|----------------|
827
- | **Segurança** | Credenciais hardcoded, secrets/API keys expostas, configs inseguras, injeção SQL/XSS |
828
- | **Arquitetura** | Dependências circulares, exports faltando, wiring incompleto, violações de camada |
829
- | **Infraestrutura** | OIDC mal configurado, IAM permissivo demais, Dockerfile sem usuário não-root, state remoto ausente |
830
- | **Qualidade** | sync-over-async, validação ausente, operações não idempotentes, error handling ausente |
1349
+ #### Cuidados
831
1350
 
832
- Se não houver review comments manuais, use o agente `caveman:cavecrew-reviewer` para detecção automatizada:
833
- ```
834
- Agent(caveman:cavecrew-reviewer) → diff do PR + arquivos alterados
835
- ```
1351
+ - Peça confirmação do rascunho antes de gravar: o usuário conhece papéis, times e restrições que o repositório não revela.
1352
+ - Se o repositório já tiver um RFC sobre o mesmo assunto, proponha **emendar** o existente em vez de criar um concorrente.
836
1353
 
837
- 5. **Para cada problema encontrado:**
838
- a. Leia o(s) arquivo(s) afetado(s) com Read
839
- b. Aplique o fix com Edit
840
- c. Faça commit separado:
841
- ```bash
842
- git add <arquivo>
843
- git commit -m "fix: <problema> (issue #<N>)
1354
+ ---
844
1355
 
845
- <causa raiz>
1356
+ ### `/spec-wave fix-pr` — auditoria e correção de PR
846
1357
 
847
- Solution: <descrição do fix>"
848
- ```
849
- d. Push ao branch do PR:
850
- ```bash
851
- git push
852
- ```
1358
+ > **Quando usar:** Use para auditar um Pull Request e corrigir os problemas encontrados — segurança, arquitetura, infraestrutura e qualidade — gerando um commit separado por fix, respondendo cada review comment com o hash do commit e postando um sumário no PR. Gatilhos: 'auditar o PR 42', 'corrigir os comentários de review', 'fix-pr 42', 'resolver os apontamentos do PR'.
853
1359
 
854
- 6. **Responder aos review comments** para cada comment inline do PR:
855
- ```bash
856
- gh api repos/<owner>/<repo>/pulls/<número>/comments/<comment-id>/replies \
857
- -f body="✅ **FIXED** — commit **<HASH>**
1360
+ Cada fix vira um **commit separado** no branch do PR. Cada review comment recebe uma **resposta com o hash do commit**.
858
1361
 
859
- \`\`\`<linguagem>
860
- <trecho corrigido>
861
- \`\`\`
1362
+ **Pré-requisitos:** `.spec-wave.json` deve existir (para resolver `owner/repo`). Token com permissão de push no branch do PR.
862
1363
 
863
- <explicação do fix>"
864
- ```
1364
+ #### Passos
1365
+
1366
+ ##### 1. Resolver contexto
1367
+
1368
+ Leia `.spec-wave.json` para obter `owner` e `repo`. Confirme o número do PR com o usuário se não vier como argumento.
1369
+
1370
+ ##### 2. Coletar dados do PR
865
1371
 
866
- 7. **Comentário de sumário no PR**
1372
+ ```bash
1373
+ gh pr view <número> --json number,title,headRefName,body,changedFiles
1374
+ gh pr diff <número>
1375
+ gh api repos/<owner>/<repo>/pulls/<número>/comments
1376
+ gh api repos/<owner>/<repo>/pulls/<número>/reviews
1377
+ ```
1378
+
1379
+ Liste todos os arquivos alterados e colete os review comments (inline) e reviews gerais.
1380
+
1381
+ ##### 3. Checkout do branch
1382
+
1383
+ ```bash
1384
+ gh pr checkout <número>
1385
+ ```
1386
+
1387
+ ##### 4. Varredura de problemas
1388
+
1389
+ Para cada categoria, leia os arquivos alterados e identifique issues:
1390
+
1391
+ | Categoria | O que procurar |
1392
+ |-----------|----------------|
1393
+ | **Segurança** | Credenciais hardcoded, secrets/API keys expostas, configs inseguras, injeção SQL/XSS |
1394
+ | **Arquitetura** | Dependências circulares, exports faltando, wiring incompleto, violações de camada |
1395
+ | **Infraestrutura** | OIDC mal configurado, IAM permissivo demais, Dockerfile sem usuário não-root, state remoto ausente |
1396
+ | **Qualidade** | sync-over-async, validação ausente, operações não idempotentes, error handling ausente |
1397
+
1398
+ Se não houver review comments manuais, use um agente de review para detecção automatizada sobre o diff + arquivos alterados.
1399
+
1400
+ ##### 5. Corrigir, um commit por problema
1401
+
1402
+ Para cada problema: leia o arquivo (Read), aplique o fix (Edit), e commite isoladamente:
1403
+
1404
+ ```bash
1405
+ git add <arquivo>
1406
+ git commit -m "fix: <problema> (issue #<N>)
1407
+
1408
+ <causa raiz>
1409
+
1410
+ Solution: <descrição do fix>"
1411
+ git push
1412
+ ```
1413
+
1414
+ ##### 6. Responder aos review comments
1415
+
1416
+ Para cada comment inline:
1417
+
1418
+ ```bash
1419
+ gh api repos/<owner>/<repo>/pulls/<número>/comments/<comment-id>/replies \
1420
+ -f body="✅ **FIXED** — commit **<HASH>**
1421
+
1422
+ \`\`\`<linguagem>
1423
+ <trecho corrigido>
1424
+ \`\`\`
1425
+
1426
+ <explicação do fix>"
1427
+ ```
1428
+
1429
+ ##### 7. Sumário no PR
1430
+
1431
+ ```bash
1432
+ gh pr comment <número> --body "<sumário>"
1433
+ ```
1434
+
1435
+ Formato:
1436
+
1437
+ ```markdown
1438
+ ## 🔍 PR Audit — Spec Wave
1439
+
1440
+ ### Problemas encontrados e corrigidos
1441
+
1442
+ | # | Severidade | Categoria | Problema | Commit |
1443
+ |---|-----------|-----------|---------|--------|
1444
+ | 1 | 🔴 Critical | Segurança | Credencial hardcoded em config.js | abc1234 |
1445
+ | 2 | 🟡 Medium | Qualidade | Operação não idempotente em createOrder | def5678 |
1446
+
1447
+ ### Commits criados
1448
+ - `abc1234` fix: credencial hardcoded removida (issue #1)
1449
+ - `def5678` fix: idempotency key adicionada em createOrder (issue #2)
1450
+
1451
+ **Total:** <N> problema(s) encontrado(s) e corrigido(s).
1452
+ ```
1453
+
1454
+ #### Severidade
1455
+
1456
+ | Nível | Critério |
1457
+ |-------|----------|
1458
+ | 🔴 Critical | Segurança, dados expostos, falha em produção |
1459
+ | 🟠 High | Bug que afeta usuários, arquitetura quebrada |
1460
+ | 🟡 Medium | Qualidade, manutenibilidade, performance |
1461
+ | 🔵 Low | Estilo, naming, comentários |
1462
+
1463
+ #### Output esperado
1464
+
1465
+ - Lista de issues (severidade + impacto)
1466
+ - Lista de commits criados (hash + mensagem)
1467
+ - Confirmação das replies postadas nos review comments
1468
+ - Estado final do PR
1469
+
1470
+ > Reporte fielmente: se um problema foi encontrado mas **não** corrigido (fora de escopo, exige decisão do usuário), diga isso explicitamente no sumário em vez de omitir.
1471
+
1472
+ ---
1473
+
1474
+ ### `/spec-wave uninstall` — remove a configuração
1475
+
1476
+ > **Quando usar:** Use quando o usuário quiser remover a configuração do spec-wave de um repositório: labels, arquivos .github (workflows e issue templates) e o .spec-wave.json. Gatilhos: 'remover o spec-wave', 'desinstalar spec-wave deste repo', 'limpar as labels do spec-wave'. O GitHub Project NUNCA é apagado — o usuário decide isso à mão.
1477
+
1478
+ Remove labels + arquivos `.github` + `.spec-wave.json`. **NUNCA apaga o GitHub Project** — isso preserva o histórico do board de propósito.
1479
+
1480
+ | Flag | Descrição |
1481
+ |------|-----------|
1482
+ | `--repo <owner/repo>` | Repositório. Default: lê do `.spec-wave.json`. |
1483
+ | `--skip-labels` | Não remove as labels. |
1484
+ | `--skip-files` | Não remove os arquivos `.github`. |
1485
+ | `--keep-config` | Mantém o `.spec-wave.json` local. |
1486
+ | `--dry-run` | Mostra o que seria removido sem alterar nada. |
1487
+ | `--yes` | Não pede confirmação. |
1488
+
1489
+ #### Passos
1490
+
1491
+ 1. **Confirme com o usuário.** A ação remove labels e faz **commits removendo os workflows** do repositório remoto. Deixe claro que issues e o Project permanecem.
1492
+
1493
+ 2. **Mostre antes o que será removido:**
867
1494
  ```bash
868
- gh pr comment <número> --body "<sumário>"
1495
+ npx @spec-wave/cli@latest uninstall --dry-run
869
1496
  ```
870
- Formato do sumário:
1497
+
1498
+ 3. Execute:
1499
+ ```bash
1500
+ npx @spec-wave/cli@latest uninstall
871
1501
  ```
872
- ## 🔍 PR Audit Spec Wave
1502
+ A CLI pede confirmação própria. Use `--yes` **apenas** se o usuário já confirmou explicitamente.
873
1503
 
874
- ### Problemas encontrados e corrigidos
1504
+ 4. **Lembre o usuário** de excluir o **GitHub Project** manualmente, se desejar — a CLI não o apaga.
875
1505
 
876
- | # | Severidade | Categoria | Problema | Commit |
877
- |---|-----------|-----------|---------|--------|
878
- | 1 | 🔴 Critical | Segurança | Credencial hardcoded em config.js | abc1234 |
879
- | 2 | 🟡 Medium | Qualidade | Operação não idempotente em createOrder | def5678 |
1506
+ #### Observações
880
1507
 
881
- ### Commits criados
882
- - `abc1234` fix: credencial hardcoded removida (issue #1)
883
- - `def5678` fix: idempotency key adicionada em createOrder (issue #2)
1508
+ - Remover as labels não desfaz o histórico das issues; elas continuam no board com suas Etapas.
1509
+ - Os documentos gerados em `docs/features/` e `docs/rfcs/` **não** são removidos.
1510
+ - Para apenas atualizar uma instalação existente (em vez de removê-la), use a skill **update**.
884
1511
 
885
- **Total:** <N> problema(s) encontrado(s) e corrigido(s).
1512
+ ---
1513
+
1514
+ ### Outras skills (fluxos e utilitários)
1515
+
1516
+ Cada uma existe como skill dedicada do plugin (`/spec-wave:<nome>`) — e os
1517
+ utilitários de board estão flag a flag na *Referência da CLI* acima. Rode
1518
+ `npx @spec-wave/cli@latest <comando> --help` para os parâmetros.
1519
+
1520
+ - **`workflow`** — Use quando a pergunta for sobre o fluxo spec-wave como um todo — qual é a próxima etapa de uma issue, o que cada coluna do Kanban significa, quais labels disparam quais Actions, como funciona a crítica adversarial, ou quando o usuário pedir spec-wave sem dizer qual comando. É o mapa do processo RFC-001; para executar uma ação específica, use a skill do comando correspondente (setup, issue, spec, plan, ready, decompose, run, bug, triage, implement, order, task, story, move, doctor, update, info, uninstall, rfc, fix-pr); para conduzir um trecho inteiro do fluxo de uma vez, preparar-feature (uma Feature até Ready) ou preparar-specs (as specs de uma milestone).
1521
+ - **`preparar-feature`** — Use para conduzir uma Feature do spec-wave pelo trecho que vai da spec pronta até ✅ Ready com as Stories e Tasks criadas no board: gera o plan.md, trata a crítica adversarial, valida, move a etapa, decompõe e confere o resultado. Gatilhos: 'gerar o plano', 'preparar a feature 12', 'deixar pronta para o dev', 'levar até ready', 'decompor a feature', 'roda o plan da #12'. Use mesmo quando o usuário nomear só um passo — os passos têm armadilhas encadeadas que só fazem sentido tratadas juntas. Para as specs de uma milestone inteira use preparar-specs; para um passo isolado e sem supervisão, as skills plan, ready ou decompose.
1522
+ - **`preparar-specs`** — Use para gerar o spec.md de TODAS as Features de uma milestone de uma vez: confere o ambiente antes de gastar modelo, gera, valida a estrutura, revisa o conjunto procurando contradições ENTRE as specs, mergeia os PRs e move as issues para 📋 Spec. Gatilhos: 'gera as specs da v06', 'roda os specs da milestone X', 'quero todas as features da v05.2 especificadas', 'gera as specs que faltam', 'quais features estão sem spec?', 'preciso das specs prontas antes de gerar os planos'. NÃO use para uma Feature isolada — aí é a skill spec (um passo) ou preparar-feature (a Feature inteira, até Ready).
1523
+ - **`audit`** — Use para auditar as specs de uma milestone COMO CONJUNTO, depois de geradas: dependência que ninguém cria, bloqueante em milestone posterior, ciclo entre Features, sobreposição com código já existente — e, com --critique, contradições semânticas entre as specs. Gatilhos: 'audita as specs da v06', 'as dependências da milestone fecham?', 'tem contradição entre as specs?', 'roda a auditoria antes dos planos'. NÃO use para criticar um documento de uma Feature — isso é o passo critique do fluxo normal.
1524
+ - **`order`** — Use para descobrir em que ordem as Stories de uma Feature do spec-wave devem ser implementadas, segundo as dependências declaradas (Depende de: #N e a relação nativa blocked by). Também detecta ciclos de dependência e Stories fora de ordem. Gatilhos: 'qual story implementar primeiro', 'ordem das stories da feature 12', 'tem ciclo de dependência?'. Use antes da skill implement.
1525
+ - **`merge`** — Use para mergear os PRs empilhados das Stories de uma Feature do spec-wave, na ordem das dependências, movendo o board até 🧪 QA. Gatilhos: 'mergeia os PRs da feature 12', 'integra as stories', 'os PRs estão revisados, pode mergear', 'qual a ordem de merge?'. Use DEPOIS da revisão humana (PRs marcados como prontos). NÃO mergeie PRs de pilha à mão com --delete-branch — é o que fecha o PR dependente.
1526
+ - **`run`** — Use para conduzir o fluxo do spec-wave LOCALMENTE, sem gastar minutos de GitHub Actions: `spec-wave run <issue>` executa nesta máquina o passo que a label dispararia (spec, plan, crítica, validate, decompose, apply) e `spec-wave mode local|actions` alterna entre os dois mundos. Gatilhos: 'rodar o spec-wave local', 'qual o próximo passo da issue 12', 'sem gastar Actions', 'desligar os workflows', 'trocar para execução local'.
1527
+ - **`qa-lead`** — Use para orquestrar o QA de uma TRILHA inteira (milestone) do spec-wave — preparar os planos de todas as Features (`qa-lead plan`), executar o ciclo com containers paralelos (`qa-lead run`) e consultar relatórios de ciclo (`qa-lead report`). Gatilhos: 'rodar o QA do milestone', 'QA da release', 'trilha de QA', 'relatório de QA do ciclo'.
1528
+ - **`qa-executor`** — Use quando você for o agente EXECUTOR de QA do spec-wave — acionado via `qa.command` com um contexto `.spec-wave/qa-<n>.md`. Executa os cenários um a um, registra evidência bruta e grava o veredito em `.spec-wave/qa-result-<n>.json`. NUNCA corrige código nem escreve no GitHub. Gatilhos: 'execute o QA descrito em', contexto de QA do spec-wave, arquivo qa-<n>.md.
1529
+ - **`task`** — Use para iniciar ou concluir uma Task do spec-wave no board: task start move para 🚧 Desenvolvimento com Status In Progress, task done move para 🎉 Done. Gatilhos: 'comecei a task 56', 'terminei a task 56', 'marcar task como feita'. Prefira sempre este comando a mexer no board via GraphQL ou gh — ele embute a regra de uma única Task In Progress por Story.
1530
+ - **`story`** — Use para mandar uma Story do spec-wave para 👀 Code Review depois de implementar todas as suas Tasks e abrir o PR. Gatilhos: 'terminei a story 34', 'mandar a story para review', 'story pronta para code review'. Prefira este comando a mutações GraphQL manuais no board.
1531
+ - **`move`** — Use para mover qualquer item do board spec-wave — Feature, Story, Task, Bug ou RFC — para uma Etapa, quando task start|done e story review não cobrem o movimento (ex.: mover uma Feature para Homologação ou Deploy). Gatilhos: 'mover a feature 12 para homologação', 'passar para deploy', 'avançar o card'. Prefira este comando a gh api graphql manual: a Etapa nunca retrocede, e isso é regra do fluxo, não limitação.
1532
+
1533
+ ---
1534
+
1535
+ ## Tech Context (`.github/config/tech_context.yml`)
1536
+
1537
+ Fonte de verdade estática da stack do sistema (RFC-002 §4). O `generate-plan` lê este arquivo para embasar o plano técnico e usar **APENAS** as tecnologias/serviços nele declarados — sem ele, o plano fica genérico e pode inventar APIs inexistentes. O `npx @spec-wave/cli@latest init` gera um **scaffold de exemplo** que **deve ser adaptado** à stack real. Use este fluxo quando o arquivo estiver ausente ou desatualizado.
1538
+
1539
+ **Como ajudar a criar (quando não existir):**
1540
+
1541
+ 1. **Confirme a ausência:** tente `Read .github/config/tech_context.yml`. Se já existir, apenas confirme com o usuário se reflete a stack atual e pule para o fim.
1542
+ 2. **Detecte a stack** lendo os arquivos do repositório (use Read; não invente):
1543
+ - `package.json` → backend/frontend e libs (ex.: `@nestjs/core`, `next`, `react`, `@prisma/client`, `express`).
1544
+ - `pom.xml` / `build.gradle` (Java), `requirements.txt` / `pyproject.toml` (Python), `go.mod` (Go).
1545
+ - `prisma/schema.prisma` ou pasta `migrations/` → tabelas e colunas para `database_schemas`.
1546
+ - `Dockerfile` / `docker-compose.yml` / charts Helm → `infra`.
1547
+ - Procure papéis/roles (enum de RBAC) no código para `security.rbac_roles`.
1548
+ 3. **Rascunhe** o YAML seguindo EXATAMENTE este schema (preencha só o que conseguir confirmar; deixe `# TODO` no que faltar — não invente):
1549
+ ```yaml
1550
+ system_info:
1551
+ name: "<nome do sistema>"
1552
+ stack:
1553
+ backend: "<ex.: Node.js (NestJS v11)>"
1554
+ frontend: "<ex.: Next.js 16 (React 19)>"
1555
+ database: "<ex.: PostgreSQL (Prisma 5)>"
1556
+ infra: "<ex.: Docker / Kubernetes>"
1557
+ architecture: "<ex.: Monorepo Nx / Microservices>"
1558
+ security:
1559
+ auth_protocol: "<ex.: JWT>"
1560
+ rbac_roles: ["ADMIN", "..."]
1561
+ database_schemas:
1562
+ - table: "<tabela>"
1563
+ columns: "<col1, col2, ...>"
1564
+ existing_services:
1565
+ - name: "<serviço>"
1566
+ endpoint: "<caminho>"
1567
+ auth: "<ex.: JWT, mTLS>"
1568
+ internal_libraries:
1569
+ - "<lib interna>"
1570
+ ```
1571
+ 4. **Mostre o rascunho ao usuário e peça confirmação/ajustes** antes de gravar (ele conhece serviços internos e roles que o código pode não revelar).
1572
+ 5. **Grave** com Write em `.github/config/tech_context.yml`.
1573
+ 6. **Oriente a commitar e pushar** antes de seguir (o Action lê do repo). Sugira ao usuário rodar, via prefixo `!`:
1574
+ ```bash
1575
+ !git add .github/config/tech_context.yml && git commit -m "chore: tech_context.yml [spec-wave]" && git push
886
1576
  ```
887
1577
 
888
- **Output esperado:**
889
- - Lista de issues (severidade + impacto)
890
- - Lista de commits criados (hash + mensagem)
891
- - Confirmação de replies postadas nos review comments
892
- - Estado final do PR
1578
+ **Desvios pontuais:** para uma Feature específica usar algo fora do padrão (ex.: "usar DynamoDB só aqui"), oriente a adicionar uma seção `## Tech Override` no corpo da issue, com um bloco YAML que será mesclado (deep-merge) sobre o `tech_context.yml`:
893
1579
 
894
- **Severidade:**
895
- - 🔴 Critical — segurança, dados expostos, falha em produção
896
- - 🟠 High — bug que afeta usuários, arquitetura quebrada
897
- - 🟡 Medium — qualidade, manutenibilidade, performance
898
- - 🔵 Low — estilo, naming, comentários
1580
+ ````markdown
1581
+ ## Tech Override
1582
+ ```yaml
1583
+ system_info:
1584
+ stack:
1585
+ database: "DynamoDB"
1586
+ ```
1587
+ ````
899
1588
 
900
1589
  ---
901
1590
 
@@ -910,9 +1599,22 @@ docs/
910
1599
  decomposition.md ← rascunho gerado quando spec-wave:decompose é adicionado (3º).
911
1600
  REVISÁVEL e EDITÁVEL à mão; as issues só nascem com
912
1601
  spec-wave:decompose-apply
1602
+ qa-plan.md ← plano de QA gerado quando spec-wave:qa é adicionado (4º,
1603
+ com a Feature já em 🧪 QA). Um cenário por critério de
1604
+ aceite, seções "## Cenário N — Story #X"; executado
1605
+ localmente por `spec-wave qa <issue>`
1606
+ dependency-map.json ← grafo de dependências das Stories PRÉ-COMPUTADO,
1607
+ escrito pelo decompose --apply e atualizado por
1608
+ `order --sync`. É o que deixa order/implement/merge
1609
+ consultarem a ordem sem pagar a API por Story
913
1610
  rfcs/
914
1611
  <slug-do-rfc>/
915
1612
  decomposition.md ← mesmo papel, com "## Task N" (RFC não usa spec/plan)
1613
+ qa/
1614
+ <slug-da-milestone>/
1615
+ cycle-<n>/
1616
+ report.md ← relatório do ciclo N da trilha de QA (qa-lead run)
1617
+ report.json ← o mesmo ciclo, no schema protocol/qa-trail-report.v1.json
916
1618
  ```
917
1619
 
918
1620
  O slug é gerado a partir do título da issue: `[FEATURE] Cadastro de Pedidos com PIX` → `cadastro-de-pedidos-com-pix`