@spec-wave/cli 0.30.0 → 0.33.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.
@@ -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|qa|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.
@@ -256,9 +260,14 @@ Sem flags. Roda um checklist de diagnóstico no repositório atual: token GitHub
256
260
  ### `@spec-wave/cli order <feature>` — ordem de execução das Stories (comando LOCAL)
257
261
  | Flag/Arg | Tipo | Descrição |
258
262
  |----------|------|-----------|
259
- | `<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. |
260
269
 
261
- > **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.
262
271
 
263
272
  ### `@spec-wave/cli preflight --milestone <nome>` — confere tudo ANTES de gerar as specs (comando LOCAL)
264
273
  | Flag/Arg | Tipo | Descrição |
@@ -297,6 +306,19 @@ Sem flags. Roda um checklist de diagnóstico no repositório atual: token GitHub
297
306
 
298
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).
299
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
+
300
322
  ### `@spec-wave/cli task <start|done> <n>` — transições de Task no board (comando LOCAL)
301
323
  | Flag/Arg | Tipo | Descrição |
302
324
  |----------|------|-----------|
@@ -472,186 +494,351 @@ O `validate` também recusa documento com sinal objetivo de corte (bloco de cód
472
494
 
473
495
  ## Sub-comandos
474
496
 
475
- ### `/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.
502
+
503
+ | Flag | Descrição |
504
+ |------|-----------|
505
+ | `--json` | Saída JSON (`{"initialized":bool, ..., "skill":{...}}`) para parsing programático. |
506
+
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.
476
519
 
477
- Mostra se o repositório atual foi configurado com o spec-wave.
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**)
478
523
 
479
- **Passos:**
480
- 1. Execute: `npx @spec-wave/cli@latest info`
481
- 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.
482
- 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?"
483
- - Se sim siga o fluxo de `/spec-wave setup`.
484
- - Se não → encerre sem alterar nada.
485
- 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.
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}]}`.
486
531
 
487
532
  ---
488
533
 
489
- ### `/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. |
490
552
 
491
- 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.
553
+ #### Passos
492
554
 
493
- **Passos:**
494
- 1. **Sempre comece com `--dry-run`** para inspecionar o que está desatualizado sem alterar nada:
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.
556
+
557
+ 2. **Descubra o repositório alvo:**
495
558
  ```bash
496
- 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 `!`):
497
566
  ```
498
- 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.
499
- 3. **Pergunte como os arquivos do repo devem sair** — e prefira o Pull Request:
567
+ !gh auth refresh --scopes project,repo,workflow
568
+ ```
569
+
570
+ 5. **(Opcional) Pré-visualize:**
500
571
  ```bash
501
- npx @spec-wave/cli@latest update --yes --branch # 1 commit atômico + PR (recomendado)
502
- npx @spec-wave/cli@latest update --yes # commits diretos na branch default
572
+ npx @spec-wave/cli@latest init --repo <owner/repo> --dry-run
503
573
  ```
504
- - Escopos podem ser limitados com `--skip-skill`, `--skip-config`, `--skip-repo`.
505
- - **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.
506
- - **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`.
507
- - **Nos dois modos**, as **labels** são aplicadas direto na base (metadado do repositório, não versionável) e nunca entram no PR.
508
- - **`.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 só locais. A skill é gravada em disco de qualquer forma, para o agente já pegar a versão nova.
509
- 4. Se a skill foi atualizada, oriente recarregar/reiniciar o agente para pegar a nova versão.
574
+
575
+ 6. **Execute:**
576
+ ```bash
577
+ npx @spec-wave/cli@latest init --repo <owner/repo> --project-title "<título>"
578
+ ```
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.
510
592
 
511
593
  ---
512
594
 
513
- ### `/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.
514
600
 
515
- 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. |
516
612
 
517
- **Passos:**
518
- 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.
519
- 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`.
520
- 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.
521
- 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ê).
522
- 5. **(Opcional) Pré-visualize** antes de aplicar: `npx @spec-wave/cli@latest init --repo <owner/repo> --dry-run`.
523
- 6. **Execute com os parâmetros coletados:**
613
+ #### Passos
614
+
615
+ 1. **Sempre comece com `--dry-run`:**
524
616
  ```bash
525
- npx @spec-wave/cli@latest init --repo <owner/repo> --project-title "<título>"
617
+ npx @spec-wave/cli@latest update --dry-run
618
+ ```
619
+
620
+ 2. Mostre ao usuário o resumo por categoria (skill / config / arquivos do repo / labels). Se **nada** divergiu, informe que já está tudo na versão atual e encerre.
621
+
622
+ 3. Com a aprovação, aplique — e **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
526
626
  ```
527
- Use `--skip-project` / `--skip-labels` / `--skip-files` **apenas** para re-rodar uma fase específica que falhou antes.
528
- 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.
529
- 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`.
530
- 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`.
627
+ Limite o escopo com `--skip-skill`, `--skip-config` ou `--skip-repo` se o usuário 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
+ ```
646
+
647
+ ---
648
+
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 `✗`.
679
+
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.
531
694
 
532
695
  ---
533
696
 
534
- ### `/spec-wave issue <tipo> <descrição>` · `/spec-wave initiative <descrição>` · `/spec-wave feature <descrição>`
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`. |
717
+
718
+ Atalhos: `initiative` (raiz, sem `--parent`) e `feature` — mesmas flags, `--type` fixo.
719
+
720
+ #### Hierarquia
535
721
 
536
- Crie um work item tipado (Initiative/Epic/Feature/Story/Task/...) 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*).
722
+ `Initiative Epic Feature Story Task`. Use `--parent <n>` para pendurar no nível acima.
537
723
 
538
- **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.
724
+ #### Passos
539
725
 
540
- > **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.
726
+ 1. **Colete com o usuário:** tipo, título (sem prefixo), descrição e o número da issue **pai**, se houver.
541
727
 
542
- **Passos:**
543
- 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.
544
- 2. Execute o comando com os parâmetros coletados (inclua **apenas** as flags que o usuário forneceu):
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:
545
731
  ```bash
546
732
  npx @spec-wave/cli@latest issue \
547
733
  --type "<tipo>" \
548
734
  --title "<título>" \
549
735
  --body "<descrição>" \
550
- --area "<área>" \ # opcional — omita se o usuário não informou
551
- --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
552
738
  --parent "<número-do-pai>" # opcional
553
739
  ```
554
- Para Features, pode usar o atalho `npx @spec-wave/cli@latest feature --title ...` (equivale a `--type feature`).
555
- 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).
556
- **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.
557
- 3. Informe o número criado e o vínculo com o pai (se houver).
558
- 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`.
559
741
 
560
- ---
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
561
747
 
562
- ### `/spec-wave uninstall`
748
+ ⚠️ **A Etapa inicial é sempre 📥 Backlog, para qualquer `--type`.** Correto para Initiative, Epic, Feature, RFC, Bug e Spike.
563
749
 
564
- 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.
565
751
 
566
- **Passos:**
567
- 1. Confirme com o usuário que ele quer remover (a ação remove labels e faz commits removendo os workflows).
568
- 2. Mostre antes o que será removido com `npx @spec-wave/cli@latest uninstall --dry-run`.
569
- 3. Execute `npx @spec-wave/cli@latest uninstall` (a CLI pede confirmação; use `--yes` só se o usuário já confirmou).
570
- 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.
571
753
 
572
754
  ---
573
755
 
574
- ### `/spec-wave spec <número-da-issue>`
756
+ ### `/spec-wave spec` — especificação funcional (1º documento)
575
757
 
576
- 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.
577
759
 
578
- > **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).
579
761
 
580
- **Passos:**
581
- 1. Confirme que a issue é uma **Feature** (spec/plan não se aplicam a Spike/RFC/Bug).
582
- 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:
583
790
  ```bash
584
791
  gh issue edit <número> --add-label "spec-wave:spec"
585
792
  ```
586
- 3. Informe: "Label `spec-wave:spec` adicionada. O GitHub Action `generate-spec.yml` irá gerar o `spec.md` automaticamente."
587
- 4. Após a conclusão, ofereça revisar o spec.md gerado em `docs/features/<slug>/spec.md`.
588
- 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`).
589
804
 
590
805
  ---
591
806
 
592
- ### `/spec-wave plan <número-da-issue>`
807
+ ### `/spec-wave plan` — plano técnico (2º documento)
593
808
 
594
- 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.
595
810
 
596
- 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.
597
812
 
598
- **Passos:**
599
- 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>`.
600
- 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).
601
- 3. Adicione a label de gatilho:
602
- ```bash
603
- gh issue edit <número> --add-label "spec-wave:plan"
604
- ```
605
- 4. Informe: "Label `spec-wave:plan` adicionada. O GitHub Action `generate-plan.yml` irá gerar o `plan.md` automaticamente. Acompanhe em: Actions → Generate Plan."
606
- 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`.
607
- 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.
608
814
 
609
- ---
815
+ **Contexto:** leia `.spec-wave.json` (Read). Ausente → skill **setup**.
610
816
 
611
- ### 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.
612
818
 
613
- 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
614
820
 
615
- **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**).
616
822
 
617
- 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.
618
- 2. **Detecte a stack** lendo os arquivos do repositório (use Read; não invente):
619
- - `package.json` backend/frontend e libs (ex.: `@nestjs/core`, `next`, `react`, `@prisma/client`, `express`).
620
- - `pom.xml` / `build.gradle` (Java), `requirements.txt` / `pyproject.toml` (Python), `go.mod` (Go).
621
- - `prisma/schema.prisma` ou pasta `migrations/` → tabelas e colunas para `database_schemas`.
622
- - `Dockerfile` / `docker-compose.yml` / charts Helm → `infra`.
623
- - Procure papéis/roles (enum de RBAC) no código para `security.rbac_roles`.
624
- 3. **Rascunhe** o YAML seguindo EXATAMENTE este schema (preencha só o que conseguir confirmar; deixe `# TODO` no que faltar — não invente):
625
- ```yaml
626
- system_info:
627
- name: "<nome do sistema>"
628
- stack:
629
- backend: "<ex.: Node.js (NestJS v11)>"
630
- frontend: "<ex.: Next.js 16 (React 19)>"
631
- database: "<ex.: PostgreSQL (Prisma 5)>"
632
- infra: "<ex.: Docker / Kubernetes>"
633
- architecture: "<ex.: Monorepo Nx / Microservices>"
634
- security:
635
- auth_protocol: "<ex.: JWT>"
636
- rbac_roles: ["ADMIN", "..."]
637
- database_schemas:
638
- - table: "<tabela>"
639
- columns: "<col1, col2, ...>"
640
- existing_services:
641
- - name: "<serviço>"
642
- endpoint: "<caminho>"
643
- auth: "<ex.: JWT, mTLS>"
644
- internal_libraries:
645
- - "<lib interna>"
646
- ```
647
- 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).
648
- 5. **Grave** com Write em `.github/config/tech_context.yml`.
649
- 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:
650
826
  ```bash
651
- !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"
652
831
  ```
653
832
 
654
- **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`:
655
842
 
656
843
  ````markdown
657
844
  ## Tech Override
@@ -662,283 +849,742 @@ system_info:
662
849
  ```
663
850
  ````
664
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
+
665
869
  ---
666
870
 
667
- ### `/spec-wave ready <número-da-issue>`
871
+ ### `/spec-wave ready` — valida spec + plan
872
+
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.
874
+
875
+ Verifica se `spec.md` e `plan.md` contêm todas as seções obrigatórias e se não há sinal de truncamento.
668
876
 
669
- Valida que spec.md e plan.md estão completos e a Feature pode avançar.
877
+ **Contexto:** leia `.spec-wave.json` (Read). Ausente skill **setup**.
670
878
 
671
- **Passos:**
672
- 1. Adicione a label de validação:
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:
673
884
  ```bash
674
885
  gh issue edit <número> --add-label "spec-wave:ready"
675
886
  ```
676
- 2. Informe: "Validação iniciada. O workflow verificará se spec.md e plan.md contêm todas as seções obrigatórias."
677
- 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.
678
- 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`).
679
- 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.
680
908
 
681
909
  ---
682
910
 
683
- ### `/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
+ ```
684
937
 
685
- Decompõe em **duas etapas**, com um rascunho revisável no meio (veja *Decomposição em duas etapas*). Aplica-se a **dois tipos**:
686
- - **Feature** → **Stories** (cada uma com suas **Tasks**), a partir de `spec.md` + `plan.md`.
687
- - **RFC** → **Tasks diretamente** (sem Stories), a partir da descrição do RFC.
938
+ #### Passos
688
939
 
689
- 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.
690
941
 
691
- **Passos:**
692
- 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).
693
- 2. **Etapa 1 — gerar o rascunho:**
942
+ 2. **Etapa 1 — gerar o rascunho**, no modo que preferir (mesmo resultado; o modo é detectado pelo ambiente):
694
943
  ```bash
944
+ # local — resultado nesta sessão
945
+ npx @spec-wave/cli@latest decompose --issue-number <número>
946
+ # ou Action — assíncrono
695
947
  gh issue edit <número> --add-label "spec-wave:decompose"
696
948
  ```
697
949
  Informe: "Rascunho iniciado — vai abrir um Pull Request com o `decomposition.md` e passar pela crítica. **Nenhuma issue é criada nesta etapa.**"
698
- 3. Quando o Action terminar, leia o comentário na issue:
699
- - **`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.
700
- - **`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.
701
- - **`spec-wave:needs-human`** a crítica esgotou as tentativas. Pare e envolva o usuário: as duas labels precisam sair à mão.
702
- 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:
703
960
  ```bash
961
+ # local
962
+ npx @spec-wave/cli@latest decompose --issue-number <número> --apply
963
+ # ou Action
704
964
  gh issue edit <número> --add-label "spec-wave:decompose-apply"
705
965
  ```
706
966
  Aplicar essa label **é** a aprovação humana — não há nova crítica.
707
- 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.
708
- 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*.
709
967
 
710
- > **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*).
711
1019
 
712
1020
  ---
713
1021
 
714
- ### `/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`.
715
1035
 
716
- 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
717
1037
 
718
- **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. |
719
1043
 
720
- **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.
721
1045
 
722
- **Passos:**
723
- 1. Confirme que há `.spec-wave.json` no repo (senão, oriente `/spec-wave setup`).
724
- 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`:**
725
1055
  ```bash
726
1056
  npx @spec-wave/cli@latest implement <número> --dry-run
727
1057
  ```
728
- 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.
729
- 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.
730
- 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`:
731
1063
  ```bash
732
1064
  npx @spec-wave/cli@latest implement <número>
733
1065
  ```
734
- - 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}`).
735
- - 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.
736
- 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`).
737
- 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).
738
1207
 
739
1208
  ---
740
1209
 
741
- ### `/spec-wave rfc <tópico>`
742
-
743
- Crie um documento RFC seguindo a estrutura do RFC-001.
744
-
745
- **Passos:**
746
- 1. Entreviste o usuário sobre: objetivo, problema atual, solução proposta, princípios, stakeholders afetados
747
- 2. Escreva o RFC em português com as seções:
748
- - 1. Objetivo
749
- - 2. Princípios
750
- - 3. Papéis e Responsabilidades
751
- - 4. Estrutura de Trabalho
752
- - 5. Fluxo de Trabalho
753
- - 6. Automação
754
- - 7. Métricas
755
- - 8. Riscos e Mitigações
756
- 3. Salve em `rfc/rfc-<slug-do-tópico>.md` usando o Write tool
757
- 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:
758
1231
  ```bash
759
- gh issue create --title "[RFC] <título>" --label "[RFC]"
1232
+ gh issue edit <número> --add-label "spec-wave:bug"
760
1233
  ```
761
1234
 
762
- ---
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."
763
1236
 
764
- ### `/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`.
765
1238
 
766
- 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.
767
1240
 
768
- > **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`.
769
1242
 
770
- **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
771
1244
 
772
- **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). |
773
1250
 
774
- 1. Confirme que a issue é do tipo **Bug** (para outros tipos o Action pula, remove a label e comenta).
775
- 2. `gh issue edit <n> --add-label "spec-wave:bug"`
776
- 3. Avise: o Action `generate-bug.yml` gera o arquivo e abre um Pull Request com ele.
777
- 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.
778
- 5. Validar: `spec-wave:ready` → confere as seis seções e aplica `spec-wave:bug-approved`.
1251
+ #### As seis seções
779
1252
 
780
- **Seções obrigatórias** (o validador as compara byte a byte — não renomeie ao editar):
781
1253
  `Reprodução` · `Esperado e Obtido` · `Impacto e Severidade` · `Causa Raiz` · `Escopo do Fix` · `Teste de Regressão`
782
1254
 
783
- **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.
784
1256
 
785
- **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
786
1258
 
787
- **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`).
788
1263
 
789
1264
  ---
790
1265
 
791
- ### `/spec-wave triage <accept|reject|duplicate> <número>`
1266
+ ### `/spec-wave triage` o desfecho da triagem
792
1267
 
793
- 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.
794
1271
 
795
1272
  ```bash
796
1273
  npx @spec-wave/cli@latest triage accept 42
797
- npx @spec-wave/cli@latest triage accept 42 --severity P1 # reclassifica ao aceitar
798
- 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"
799
1276
  npx @spec-wave/cli@latest triage duplicate 42 --of 17
800
1277
  ```
801
1278
 
802
- - **accept** Ready, com a label `spec-wave:triaged`.
803
- - **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`.
804
- - `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.** |
805
1284
 
806
- **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.
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.
807
1286
 
808
- 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**.
1287
+ #### O portão de aceite
809
1288
 
810
- ---
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. |
811
1293
 
812
- ### `/spec-wave qa <número-da-issue>`
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.
813
1295
 
814
- A etapa **🧪 QA**: plano por Feature + execução local com veredito. Duas metades, nesta ordem obrigatória:
1296
+ #### Se o aceite for recusado
815
1297
 
816
- **1. Gerar/criticar o plano (Feature):**
817
- ```bash
818
- gh issue edit <feature> --add-label "spec-wave:qa"
819
- ```
820
- - Arquivo ausente → gera `docs/features/<slug>/qa-plan.md` via IA (publicado em PR). Arquivo presente valida + critica **COMO ESTÁ** (edições manuais preservadas). Regerar do zero = apagar o arquivo e reaplicar.
821
- - Requer `spec.md` + `plan.md` na base. Limpo → `spec-wave:qa-ready`; grave → `critique-failed`.
822
- - **Só em Feature** — numa Story o Action comenta apontando a Feature-pai; Bug usa o `Teste de Regressão` do `bug.md`.
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
823
1305
 
824
- **2. Revisar o plano e executar (sempre local, SEMPRE `--dry-run` primeiro):**
825
1306
  ```bash
826
- npx @spec-wave/cli@latest qa <issue> --dry-run # cenários-alvo + comando; zero escrita no GitHub
827
- npx @spec-wave/cli@latest qa <issue> # executa e dá o veredito
1307
+ npx @spec-wave/cli@latest bug --title "Duplicidade de pedidos no PIX" --parent 17 --priority P2
828
1308
  ```
829
- - A revisão do plano é o **portão humano** (D-QA4): sem `qa-ready` na Feature o comando recusa — porque o verde avança a Etapa **sozinho** (D-QA3).
830
- - Regras de edição do plano: seções `## Cenário N — Story #X` (posição manda, não o número escrito), `**Critério:**`/`**Esperado:**` obrigatórios.
831
- - Desfechos: **verde** → `qa-approved`, Story → 📋 Homologação, Bug → 🚀 Deploy (D-QA6), 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, milestone herdado) com `bug.md` **determinístico commitado pelo comando e `bug-approved` aplicada** — exceção explícita à Regra fundamental: reprodução, esperado/obtido e regressão são a execução observada, e regenerar por IA só alucina; **não** aplique `spec-wave:bug` nesses Bugs. **Inconclusivo** (`blocked` sem `fail`) → nada move, nenhum Bug, exit 1.
832
- - Re-teste após o fix: `npx @spec-wave/cli@latest qa <story> --only <cenário>` — não duplica Bug (comenta no existente).
833
- - **PROIBIDO corrigir código durante a execução** — QA não conserta; alterar o código invalida o veredito.
834
1309
 
835
- Sem `qa.command` no `.spec-wave.json` (nem `SPEC_WAVE_QA_CMD`), o comando monta o contexto em `.spec-wave/qa-<n>.md` e orienta configure como no `specKit.command` do implement.
1310
+ Nasce em **🐞 Triagem** ou direto em **✅ Ready** se for **P0**.
836
1311
 
837
1312
  ---
838
1313
 
839
- ### `/spec-wave fix-pr <número-do-pr>`
1314
+ ### `/spec-wave rfc` — documento de processo
840
1315
 
841
- 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).
842
1317
 
843
- **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/`.
844
1319
 
845
- **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.
846
1321
 
847
- 1. **Resolver contexto**
848
- - Leia `.spec-wave.json` para obter `owner` e `repo`.
849
- - Confirme o número do PR com o usuário se não vier como argumento.
1322
+ #### Passos
850
1323
 
851
- 2. **Coletar dados do PR**
852
- ```bash
853
- gh pr view <número> --json number,title,headRefName,body,changedFiles
854
- gh pr diff <número>
855
- gh api repos/<owner>/<repo>/pulls/<número>/comments
856
- gh api repos/<owner>/<repo>/pulls/<número>/reviews
857
- ```
858
- - Liste todos os arquivos alterados.
859
- - 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.
860
1325
 
861
- 3. **Fazer checkout no branch do PR**
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
1336
+
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):
862
1340
  ```bash
863
- 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>"
864
1344
  ```
1345
+ A issue nasce em **📥 Backlog**.
865
1346
 
866
- 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`.
867
1348
 
868
- | Categoria | O que procurar |
869
- |-----------|----------------|
870
- | **Segurança** | Credenciais hardcoded, secrets/API keys expostas, configs inseguras, injeção SQL/XSS |
871
- | **Arquitetura** | Dependências circulares, exports faltando, wiring incompleto, violações de camada |
872
- | **Infraestrutura** | OIDC mal configurado, IAM permissivo demais, Dockerfile sem usuário não-root, state remoto ausente |
873
- | **Qualidade** | sync-over-async, validação ausente, operações não idempotentes, error handling ausente |
1349
+ #### Cuidados
874
1350
 
875
- Se não houver review comments manuais, use o agente `caveman:cavecrew-reviewer` para detecção automatizada:
876
- ```
877
- Agent(caveman:cavecrew-reviewer) → diff do PR + arquivos alterados
878
- ```
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.
879
1353
 
880
- 5. **Para cada problema encontrado:**
881
- a. Leia o(s) arquivo(s) afetado(s) com Read
882
- b. Aplique o fix com Edit
883
- c. Faça commit separado:
884
- ```bash
885
- git add <arquivo>
886
- git commit -m "fix: <problema> (issue #<N>)
1354
+ ---
887
1355
 
888
- <causa raiz>
1356
+ ### `/spec-wave fix-pr` — auditoria e correção de PR
889
1357
 
890
- Solution: <descrição do fix>"
891
- ```
892
- d. Push ao branch do PR:
893
- ```bash
894
- git push
895
- ```
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'.
896
1359
 
897
- 6. **Responder aos review comments** para cada comment inline do PR:
898
- ```bash
899
- gh api repos/<owner>/<repo>/pulls/<número>/comments/<comment-id>/replies \
900
- -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**.
901
1361
 
902
- \`\`\`<linguagem>
903
- <trecho corrigido>
904
- \`\`\`
1362
+ **Pré-requisitos:** `.spec-wave.json` deve existir (para resolver `owner/repo`). Token com permissão de push no branch do PR.
905
1363
 
906
- <explicação do fix>"
907
- ```
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.
908
1369
 
909
- 7. **Comentário de sumário no PR**
1370
+ ##### 2. Coletar dados do PR
1371
+
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:**
910
1494
  ```bash
911
- gh pr comment <número> --body "<sumário>"
1495
+ npx @spec-wave/cli@latest uninstall --dry-run
912
1496
  ```
913
- Formato do sumário:
1497
+
1498
+ 3. Execute:
1499
+ ```bash
1500
+ npx @spec-wave/cli@latest uninstall
914
1501
  ```
915
- ## 🔍 PR Audit Spec Wave
1502
+ A CLI pede confirmação própria. Use `--yes` **apenas** se o usuário já confirmou explicitamente.
1503
+
1504
+ 4. **Lembre o usuário** de excluir o **GitHub Project** manualmente, se desejar — a CLI não o apaga.
916
1505
 
917
- ### Problemas encontrados e corrigidos
1506
+ #### Observações
918
1507
 
919
- | # | Severidade | Categoria | Problema | Commit |
920
- |---|-----------|-----------|---------|--------|
921
- | 1 | 🔴 Critical | Segurança | Credencial hardcoded em config.js | abc1234 |
922
- | 2 | 🟡 Medium | Qualidade | Operação não idempotente em createOrder | def5678 |
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**.
923
1511
 
924
- ### Commits criados
925
- - `abc1234` fix: credencial hardcoded removida (issue #1)
926
- - `def5678` fix: idempotency key adicionada em createOrder (issue #2)
1512
+ ---
927
1513
 
928
- **Total:** <N> problema(s) encontrado(s) e corrigido(s).
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
929
1576
  ```
930
1577
 
931
- **Output esperado:**
932
- - Lista de issues (severidade + impacto)
933
- - Lista de commits criados (hash + mensagem)
934
- - Confirmação de replies postadas nos review comments
935
- - 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`:
936
1579
 
937
- **Severidade:**
938
- - 🔴 Critical — segurança, dados expostos, falha em produção
939
- - 🟠 High — bug que afeta usuários, arquitetura quebrada
940
- - 🟡 Medium — qualidade, manutenibilidade, performance
941
- - 🔵 Low — estilo, naming, comentários
1580
+ ````markdown
1581
+ ## Tech Override
1582
+ ```yaml
1583
+ system_info:
1584
+ stack:
1585
+ database: "DynamoDB"
1586
+ ```
1587
+ ````
942
1588
 
943
1589
  ---
944
1590
 
@@ -957,9 +1603,18 @@ docs/
957
1603
  com a Feature já em 🧪 QA). Um cenário por critério de
958
1604
  aceite, seções "## Cenário N — Story #X"; executado
959
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
960
1610
  rfcs/
961
1611
  <slug-do-rfc>/
962
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
963
1618
  ```
964
1619
 
965
1620
  O slug é gerado a partir do título da issue: `[FEATURE] Cadastro de Pedidos com PIX` → `cadastro-de-pedidos-com-pix`