@spec-wave/cli 0.14.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +1 -0
  2. package/bin/spec-wave.mjs +44 -2
  3. package/package.json +8 -2
  4. package/src/agent/anthropic-agent.mjs +337 -0
  5. package/src/agent/errors.mjs +33 -0
  6. package/src/agent/index.mjs +108 -0
  7. package/src/agent/openrouter-agent.mjs +378 -0
  8. package/src/agent/run-types.mjs +59 -0
  9. package/src/agent/telemetry.mjs +54 -0
  10. package/src/agent/tools.mjs +452 -0
  11. package/src/agent/tracing.mjs +106 -0
  12. package/src/api/github-rest.mjs +206 -2
  13. package/src/commands/bug.mjs +8 -0
  14. package/src/commands/code-review.mjs +45 -4
  15. package/src/commands/decompose.mjs +11 -49
  16. package/src/commands/dev-agent.mjs +3 -3
  17. package/src/commands/doctor.mjs +77 -6
  18. package/src/commands/generate-bug.mjs +195 -0
  19. package/src/commands/generate-plan.mjs +6 -20
  20. package/src/commands/generate-spec.mjs +6 -22
  21. package/src/commands/implement.mjs +105 -2
  22. package/src/commands/init.mjs +3 -3
  23. package/src/commands/install-skill.mjs +72 -16
  24. package/src/commands/issue.mjs +9 -7
  25. package/src/commands/move.mjs +11 -1
  26. package/src/commands/qa.mjs +23 -2
  27. package/src/commands/refresh.mjs +145 -5
  28. package/src/commands/triage.mjs +174 -0
  29. package/src/commands/update.mjs +352 -62
  30. package/src/commands/validate.mjs +82 -10
  31. package/src/config.mjs +159 -1
  32. package/src/lib/bug-context.mjs +160 -0
  33. package/src/lib/bug-doc.mjs +51 -0
  34. package/src/lib/bug-triage.mjs +81 -0
  35. package/src/lib/claude.mjs +71 -254
  36. package/src/lib/critique.mjs +43 -30
  37. package/src/lib/implement-board.mjs +12 -1
  38. package/src/lib/plugin-skills.mjs +122 -0
  39. package/src/lib/pr-branch.mjs +267 -0
  40. package/src/lib/prompt-loader.mjs +257 -0
  41. package/src/lib/skill-file.mjs +35 -0
  42. package/src/plugin/.claude-plugin/plugin.json +20 -0
  43. package/src/plugin/README.md +73 -0
  44. package/src/plugin/skills/bug/SKILL.md +60 -0
  45. package/src/plugin/skills/bug/model-prompt.critique.md +48 -0
  46. package/src/plugin/skills/bug/model-prompt.md +74 -0
  47. package/src/plugin/skills/decompose/SKILL.md +111 -0
  48. package/src/plugin/skills/decompose/model-prompt.critique.md +46 -0
  49. package/src/plugin/skills/decompose/model-prompt.feature.md +69 -0
  50. package/src/plugin/skills/decompose/model-prompt.rfc.md +52 -0
  51. package/src/plugin/skills/doctor/SKILL.md +51 -0
  52. package/src/plugin/skills/fix-pr/SKILL.md +130 -0
  53. package/src/plugin/skills/implement/SKILL.md +102 -0
  54. package/src/plugin/skills/info/SKILL.md +40 -0
  55. package/src/plugin/skills/issue/SKILL.md +63 -0
  56. package/src/plugin/skills/move/SKILL.md +52 -0
  57. package/src/plugin/skills/order/SKILL.md +36 -0
  58. package/src/plugin/skills/plan/SKILL.md +53 -0
  59. package/src/plugin/skills/plan/model-prompt.critique.md +44 -0
  60. package/src/plugin/skills/plan/model-prompt.md +59 -0
  61. package/src/plugin/skills/plan/reference/tech-context.md +56 -0
  62. package/src/plugin/skills/ready/SKILL.md +44 -0
  63. package/src/plugin/skills/rfc/SKILL.md +47 -0
  64. package/src/plugin/skills/setup/SKILL.md +67 -0
  65. package/src/plugin/skills/spec/SKILL.md +37 -0
  66. package/src/plugin/skills/spec/model-prompt.md +61 -0
  67. package/src/plugin/skills/story/SKILL.md +49 -0
  68. package/src/plugin/skills/task/SKILL.md +41 -0
  69. package/src/plugin/skills/triage/SKILL.md +52 -0
  70. package/src/plugin/skills/uninstall/SKILL.md +43 -0
  71. package/src/plugin/skills/update/SKILL.md +51 -0
  72. package/src/plugin/skills/workflow/SKILL.md +154 -0
  73. package/src/templates/skill/SKILL.md +69 -7
  74. package/src/templates/workflows/generate-bug.yml +36 -0
  75. package/src/templates/workflows/validate.yml +2 -1
  76. package/src/ui/wizard.mjs +5 -2
@@ -0,0 +1,44 @@
1
+ ---
2
+ name: spec-wave-ready
3
+ description: "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."
4
+ allowed-tools:
5
+ - Bash(gh issue *)
6
+ - Bash(npx @spec-wave/cli@latest *)
7
+ - Read
8
+ ---
9
+
10
+ # spec-wave ready — valida spec + plan
11
+
12
+ Verifica se `spec.md` e `plan.md` contêm todas as seções obrigatórias e se não há sinal de truncamento.
13
+
14
+ **Contexto:** leia `.spec-wave.json` (Read). Ausente → skill **setup**.
15
+
16
+ ## Passos
17
+
18
+ 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.
19
+
20
+ 2. Adicione a label:
21
+ ```bash
22
+ gh issue edit <número> --add-label "spec-wave:ready"
23
+ ```
24
+
25
+ 3. Informe: "Validação iniciada. O workflow verifica se `spec.md` e `plan.md` contêm todas as seções obrigatórias."
26
+
27
+ 4. **Se a validação falhar por conteúdo**, o workflow comenta os problemas na issue e adiciona automaticamente `spec-wave:spec`. Oriente o usuário a corrigir e tentar de novo.
28
+
29
+ 5. **Se passar:** "Feature validada! Mova o card para **✅ Ready** e use a skill **decompose** para gerar o **rascunho** das Stories — nada é criado ainda."
30
+
31
+ ## Portões humanos
32
+
33
+ Estas labels **bloqueiam** a validação e **não** devolvem a Feature para a etapa de spec:
34
+
35
+ | Label | O que aconteceu | Como sair |
36
+ |-------|-----------------|-----------|
37
+ | `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` |
38
+ | `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 |
39
+
40
+ > **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**.
41
+
42
+ ## Rede de segurança contra truncamento
43
+
44
+ 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.
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: spec-wave-rfc
3
+ description: "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)."
4
+ allowed-tools:
5
+ - Bash(npx @spec-wave/cli@latest *)
6
+ - Read
7
+ - Write
8
+ - Glob
9
+ ---
10
+
11
+ # spec-wave rfc — documento de processo
12
+
13
+ RFCs são escritos em **português do Brasil** e vivem em `rfc/`.
14
+
15
+ **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.
16
+
17
+ ## Passos
18
+
19
+ 1. **Entreviste o usuário** sobre: objetivo, problema atual, solução proposta, princípios, stakeholders afetados. Não invente contexto organizacional.
20
+
21
+ 2. **Escreva o RFC** com estas seções:
22
+
23
+ 1. Objetivo
24
+ 2. Princípios
25
+ 3. Papéis e Responsabilidades
26
+ 4. Estrutura de Trabalho
27
+ 5. Fluxo de Trabalho
28
+ 6. Automação
29
+ 7. Métricas
30
+ 8. Riscos e Mitigações
31
+
32
+ 3. **Salve** com Write em `rfc/rfc-<slug-do-tópico>.md`.
33
+
34
+ 4. **Crie a issue de RFC no board** — use a CLI, não `gh issue create` (que não adiciona ao Project):
35
+ ```bash
36
+ npx @spec-wave/cli@latest issue --type rfc \
37
+ --title "<título sem prefixo>" \
38
+ --body "<resumo + link para rfc/rfc-<slug>.md>"
39
+ ```
40
+ A issue nasce em **📥 Backlog**.
41
+
42
+ 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`.
43
+
44
+ ## Cuidados
45
+
46
+ - 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.
47
+ - Se o repositório já tiver um RFC sobre o mesmo assunto, proponha **emendar** o existente em vez de criar um concorrente.
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: spec-wave-setup
3
+ description: "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)."
4
+ allowed-tools:
5
+ - Bash(npx @spec-wave/cli@latest *)
6
+ - Bash(gh repo view *)
7
+ - Bash(gh auth status)
8
+ - Read
9
+ - Write
10
+ ---
11
+
12
+ # spec-wave setup — configura o repositório
13
+
14
+ 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**.
15
+
16
+ ## Flags do `init`
17
+
18
+ | Flag | Tipo | Descrição |
19
+ |------|------|-----------|
20
+ | `--repo <owner/repo>` | string | Repositório alvo. **Passe SEMPRE.** |
21
+ | `--project-title <title>` | string | Nome do Project. Default: `<repo> — Spec Wave`. |
22
+ | `--provider <provider>` | string | `anthropic` ou `openrouter`. |
23
+ | `--model <model>` | string | Modelo dos workflows (ex.: `anthropic/claude-3.7-sonnet`). |
24
+ | `--skip-project` | flag | Pula a criação do Project (re-rodar quando já existe). |
25
+ | `--skip-labels` | flag | Pula as labels. |
26
+ | `--skip-files` | flag | Pula workflows + issue templates. |
27
+ | `--dry-run` | flag | Simula sem alterar nada. |
28
+
29
+ ## Passos
30
+
31
+ 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.
32
+
33
+ 2. **Descubra o repositório alvo:**
34
+ ```bash
35
+ gh repo view --json nameWithOwner -q .nameWithOwner
36
+ ```
37
+ Confirme com o usuário. Sem remote, pergunte o `owner/repo`.
38
+
39
+ 3. **Título do Project:** ofereça o default `<repo> — Spec Wave` e aceite-o se não houver preferência.
40
+
41
+ 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 `!`):
42
+ ```
43
+ !gh auth refresh --scopes project,repo,workflow
44
+ ```
45
+
46
+ 5. **(Opcional) Pré-visualize:**
47
+ ```bash
48
+ npx @spec-wave/cli@latest init --repo <owner/repo> --dry-run
49
+ ```
50
+
51
+ 6. **Execute:**
52
+ ```bash
53
+ npx @spec-wave/cli@latest init --repo <owner/repo> --project-title "<título>"
54
+ ```
55
+ Use `--skip-project` / `--skip-labels` / `--skip-files` **apenas** para re-rodar uma fase que falhou antes.
56
+
57
+ 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.
58
+
59
+ 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 skill **plan** (`reference/tech-context.md`).
60
+
61
+ 9. **Secret de IA:** instrua a adicionar em Settings → Secrets → Actions a chave do provider escolhido: `ANTHROPIC_API_KEY` (Anthropic) ou `OPENROUTER_API_KEY` (OpenRouter).
62
+
63
+ 10. **Próximo passo:** criar a primeira Feature — skill **issue**.
64
+
65
+ ## Depois
66
+
67
+ Rode a skill **doctor** para confirmar auth, escopos, config de IA e workflows antes de começar a trabalhar.
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: spec-wave-spec
3
+ description: "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 e commitar o arquivo. 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."
4
+ allowed-tools:
5
+ - Bash(gh issue *)
6
+ - Bash(npx @spec-wave/cli@latest *)
7
+ - Read
8
+ ---
9
+
10
+ # spec-wave spec — especificação funcional (1º documento)
11
+
12
+ > **Regra fundamental: nunca gere o `spec.md` você mesmo.** Aplique a label e deixe o Action gerar — é isso que garante que o arquivo seja commitado no repositório e referenciado na issue. Exceção: revisar/melhorar um `spec.md` já gerado (aí sim use Edit no arquivo local).
13
+
14
+ **Contexto:** leia `.spec-wave.json` (Read). Ausente → skill **setup**.
15
+
16
+ ## Passos
17
+
18
+ 1. **Confirme que a issue é uma Feature.**
19
+
20
+ > **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.
21
+
22
+ 2. Adicione a label de gatilho:
23
+ ```bash
24
+ gh issue edit <número> --add-label "spec-wave:spec"
25
+ ```
26
+
27
+ 3. Informe ao usuário: "Label `spec-wave:spec` adicionada. O Action `generate-spec.yml` vai gerar o `spec.md` automaticamente. Acompanhe em Actions → Generate Spec."
28
+
29
+ 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`.
30
+
31
+ 5. **Próximo passo:** o plano técnico — mova para **📋 Plan** e use a skill **plan**.
32
+
33
+ ## Se falhar
34
+
35
+ - **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.
36
+ - **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.
37
+ - Para reprocessar num modelo mais forte só nesta issue, aplique também `spec-wave:model:<apelido>` (o apelido precisa existir em `ai.modelAliases`).
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: spec
3
+ action: spec
4
+ description: Gera a especificação funcional (spec.md) de uma Feature a partir da issue do GitHub.
5
+ tools: [Read, Glob, Grep]
6
+ maxTurns: 30
7
+ ---
8
+
9
+ # Geração de spec.md
10
+
11
+ Você é um Product Manager experiente. Gere uma especificação funcional (spec.md) completa para a Feature descrita pelo usuário.
12
+
13
+ ## Entrada
14
+
15
+ Você recebe um payload JSON com:
16
+
17
+ - `metadata.feature_title` — título da issue
18
+ - `metadata.feature_description` — corpo da issue
19
+ - `metadata.labels` — labels aplicadas
20
+ - `business_input.raw` — a entrada de negócio bruta
21
+
22
+ <!-- requires-tools -->
23
+ ## Exploração antes de escrever
24
+
25
+ Você tem `Read`, `Glob` e `Grep` no repositório de destino. Antes de escrever qualquer seção, procure o que já existe: specs de features vizinhas em `docs/features/`, modelos de domínio, endpoints e telas relacionados. Uma spec ancorada no que o sistema já faz vale mais que uma escrita no vácuo.
26
+
27
+ Isso **não** autoriza inventar regras a partir do código: o código mostra o que existe, não o que o negócio quer. Continue marcando lacunas de negócio com `[TODO: requer esclarecimento do PO]`.
28
+ <!-- /requires-tools -->
29
+
30
+ ## Estrutura obrigatória
31
+
32
+ O spec deve conter EXATAMENTE estas seções em português, nesta ordem:
33
+
34
+ ```
35
+ # Visão Geral
36
+ - Objetivo, Personas e Critérios de Sucesso como bullets.
37
+ # Regras de Negócio
38
+ # Fluxos
39
+ - Subseções: ## Fluxo Principal (Happy Path), ## Fluxos Alternativos, ## Cenários de Erro.
40
+ - O Fluxo Principal DEVE conter, além da descrição passo a passo, um diagrama de
41
+ sequência Mermaid (bloco ```mermaid iniciado com sequenceDiagram) mostrando a
42
+ interação entre as personas (actor) e o sistema (participant). Rotule mensagens
43
+ e notas em português.
44
+ - Cubra os Fluxos Alternativos e Cenários de Erro relevantes no mesmo diagrama
45
+ usando blocos alt/opt/break — ou, se ficarem complexos, em um segundo diagrama
46
+ na subseção correspondente.
47
+ # Critérios de Aceite
48
+ - OBRIGATORIAMENTE no formato Gherkin, dentro de um bloco ```gherkin com
49
+ Given/When/Then. Um cenário por critério.
50
+ # Dependências
51
+ - Subdivida em Internas e Externas.
52
+ # Requisitos Não-Funcionais
53
+ - Performance, Segurança e Usabilidade.
54
+ ```
55
+
56
+ ## Regras
57
+
58
+ - NÃO invente regras de negócio. Se faltar informação, marque explicitamente com `[TODO: requer esclarecimento do PO]`.
59
+ - Seja específico e detalhado em cada seção.
60
+ - Escreva em português (pt-BR). Não use caracteres de outros alfabetos (CJK, cirílico, árabe, tailandês).
61
+ - O arquivo deve conter APENAS o conteúdo do spec.md — nada de preâmbulo, comentário sobre o processo ou resumo do que você fez.
@@ -0,0 +1,49 @@
1
+ ---
2
+ name: spec-wave-story
3
+ description: "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."
4
+ allowed-tools:
5
+ - Bash(npx @spec-wave/cli@latest *)
6
+ - Bash(gh pr *)
7
+ - Read
8
+ ---
9
+
10
+ # spec-wave story — move a Story para Code Review
11
+
12
+ Comando **local**:
13
+
14
+ ```bash
15
+ npx @spec-wave/cli@latest story review <n>
16
+ ```
17
+
18
+ | Arg | Descrição |
19
+ |-----|-----------|
20
+ | `<action>` | `review` — única ação hoje. |
21
+ | `<n>` | Número da issue da **Story**, ex.: `12` ou `#12`. |
22
+
23
+ **Contexto:** leia `.spec-wave.json` (Read). Ausente → skill **setup**.
24
+
25
+ ## O que ele faz
26
+
27
+ Avança a Story para a Etapa **👀 Code Review** com Status **Todo** — o Status reinicia ao trocar de etapa.
28
+
29
+ Mesma guarda do `task`: a **Etapa nunca retrocede**. Se a Story já estiver em Code Review ou adiante, o comando apenas informa a Etapa atual.
30
+
31
+ ## Quando usar
32
+
33
+ No fim da implementação de uma Story, **depois** de:
34
+
35
+ 1. Todas as Tasks da Story em 🎉 Done (skill **task**)
36
+ 2. Commit feito
37
+ 3. PR aberto
38
+
39
+ Só então:
40
+
41
+ ```bash
42
+ npx @spec-wave/cli@latest story review <n>
43
+ ```
44
+
45
+ ## Depois
46
+
47
+ A **Feature** só avança para 👀 Code Review quando **TODAS** as suas Stories já estiverem lá. Enquanto houver Story pendente, a Feature fica em 🚧 Desenvolvimento — não a mova antes.
48
+
49
+ Para mover a Feature (ou qualquer item) quando chegar a hora, use a skill **move**.
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: spec-wave-task
3
+ description: "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."
4
+ allowed-tools:
5
+ - Bash(npx @spec-wave/cli@latest *)
6
+ - Read
7
+ ---
8
+
9
+ # spec-wave task — transições de Task no board
10
+
11
+ Comando **local**:
12
+
13
+ ```bash
14
+ npx @spec-wave/cli@latest task start <n>
15
+ npx @spec-wave/cli@latest task done <n>
16
+ ```
17
+
18
+ | Arg | Descrição |
19
+ |-----|-----------|
20
+ | `<action>` | `start` → Etapa 🚧 Desenvolvimento + Status **In Progress**. `done` → Etapa 🎉 Done + Status **Done**. |
21
+ | `<n>` | Número da issue da **Task**, ex.: `12` ou `#12`. |
22
+
23
+ **Contexto:** leia `.spec-wave.json` (Read). Ausente → skill **setup**.
24
+
25
+ ## Por que usar este comando
26
+
27
+ Ele embute as regras do fluxo que uma mutação manual não tem:
28
+
29
+ - **A Etapa nunca retrocede** — se a Task já estiver adiante, só o Status é ajustado.
30
+ - **Uma única Task "In Progress" por vez** dentro da mesma Story — `start` **recusa** e aponta a Task em andamento se houver outra irmã em In Progress.
31
+
32
+ > Task **não** passa por Code Review, QA nem Homologação. O ciclo dela é só `start` → `done`.
33
+
34
+ ## Passos
35
+
36
+ 1. Identifique o número da Task e a ação pretendida.
37
+ 2. Rode o comando.
38
+ 3. Se `start` recusar por já haver uma Task irmã em In Progress, mostre ao usuário qual é e conclua-a antes (`task done <outra>`) — não contorne a regra manualmente.
39
+ 4. Quando **todas** as Tasks da Story estiverem em 🎉 Done, faça commit + PR e mova a Story com a skill **story**.
40
+
41
+ Para mover um item que **não** é Task, ou para uma etapa que estes dois verbos não cobrem, use a skill **move**.
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: spec-wave-triage
3
+ description: "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."
4
+ allowed-tools:
5
+ - Bash(npx @spec-wave/cli@latest *)
6
+ - Bash(gh issue *)
7
+ - Read
8
+ ---
9
+
10
+ # spec-wave triage — o desfecho da triagem
11
+
12
+ 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.
13
+
14
+ ```bash
15
+ npx @spec-wave/cli@latest triage accept 42
16
+ npx @spec-wave/cli@latest triage accept 42 --severity P1
17
+ npx @spec-wave/cli@latest triage reject 42 --reason "comportamento esperado, documentado em X"
18
+ npx @spec-wave/cli@latest triage duplicate 42 --of 17
19
+ ```
20
+
21
+ | Ação | Efeito |
22
+ |---|---|
23
+ | `accept` | → **✅ Ready** (fila técnica), label `spec-wave:triaged`. `--severity` reclassifica **trocando** a label, nunca acumulando. |
24
+ | `reject` | Fecha a issue com `spec-wave:wont-fix`. **`--reason` é obrigatório.** |
25
+ | `duplicate` | Fecha com `spec-wave:duplicate` e comenta **nas duas** issues. **`--of` é obrigatório.** |
26
+
27
+ > `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.
28
+
29
+ ## O portão de aceite
30
+
31
+ | Severidade | Exige `bug.md` validado? |
32
+ |---|---|
33
+ | **P0 / P1** | Não — esperar o documento custa mais que investigar durante a correção. |
34
+ | **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. |
35
+
36
+ `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.
37
+
38
+ ## Se o aceite for recusado
39
+
40
+ O comando diz qual portão barrou. Os caminhos:
41
+
42
+ - **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.
43
+ - **`spec-wave:critique-failed`** → corrija o `bug.md`, commite, remova a label.
44
+ - **`spec-wave:needs-human`** → uma pessoa precisa revisar antes de remover.
45
+
46
+ ## Criar um Bug
47
+
48
+ ```bash
49
+ npx @spec-wave/cli@latest bug --title "Duplicidade de pedidos no PIX" --parent 17 --priority P2
50
+ ```
51
+
52
+ Nasce em **🐞 Triagem** — ou direto em **✅ Ready** se for **P0**.
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: spec-wave-uninstall
3
+ description: "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."
4
+ allowed-tools:
5
+ - Bash(npx @spec-wave/cli@latest *)
6
+ - Read
7
+ ---
8
+
9
+ # spec-wave uninstall — remove a configuração
10
+
11
+ Remove labels + arquivos `.github` + `.spec-wave.json`. **NUNCA apaga o GitHub Project** — isso preserva o histórico do board de propósito.
12
+
13
+ | Flag | Descrição |
14
+ |------|-----------|
15
+ | `--repo <owner/repo>` | Repositório. Default: lê do `.spec-wave.json`. |
16
+ | `--skip-labels` | Não remove as labels. |
17
+ | `--skip-files` | Não remove os arquivos `.github`. |
18
+ | `--keep-config` | Mantém o `.spec-wave.json` local. |
19
+ | `--dry-run` | Mostra o que seria removido sem alterar nada. |
20
+ | `--yes` | Não pede confirmação. |
21
+
22
+ ## Passos
23
+
24
+ 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.
25
+
26
+ 2. **Mostre antes o que será removido:**
27
+ ```bash
28
+ npx @spec-wave/cli@latest uninstall --dry-run
29
+ ```
30
+
31
+ 3. Execute:
32
+ ```bash
33
+ npx @spec-wave/cli@latest uninstall
34
+ ```
35
+ A CLI pede confirmação própria. Use `--yes` **apenas** se o usuário já confirmou explicitamente.
36
+
37
+ 4. **Lembre o usuário** de excluir o **GitHub Project** manualmente, se desejar — a CLI não o apaga.
38
+
39
+ ## Observações
40
+
41
+ - Remover as labels não desfaz o histórico das issues; elas continuam no board com suas Etapas.
42
+ - Os documentos gerados em `docs/features/` e `docs/rfcs/` **não** são removidos.
43
+ - Para apenas atualizar uma instalação existente (em vez de removê-la), use a skill **update**.
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: spec-wave-update
3
+ description: "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."
4
+ allowed-tools:
5
+ - Bash(npx @spec-wave/cli@latest *)
6
+ - Read
7
+ ---
8
+
9
+ # spec-wave update — traz tudo para a versão atual
10
+
11
+ 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.
12
+
13
+ | Flag | Descrição |
14
+ |------|-----------|
15
+ | `--global` | Verifica a skill no escopo do usuário (padrão: projeto). |
16
+ | `--skip-skill` | Não verifica/atualiza a skill instalada. |
17
+ | `--skip-config` | Não verifica/atualiza o `.spec-wave.json`. |
18
+ | `--skip-repo` | Não verifica/atualiza workflows e labels do repo. |
19
+ | `--dry-run` | Mostra o que seria atualizado sem alterar nada. |
20
+ | `--yes` | Aplica sem pedir confirmação. |
21
+
22
+ ## Passos
23
+
24
+ 1. **Sempre comece com `--dry-run`:**
25
+ ```bash
26
+ npx @spec-wave/cli@latest update --dry-run
27
+ ```
28
+
29
+ 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.
30
+
31
+ 3. Com a aprovação, aplique:
32
+ ```bash
33
+ npx @spec-wave/cli@latest update --yes
34
+ ```
35
+ Limite o escopo com `--skip-skill`, `--skip-config` ou `--skip-repo` se o usuário só quiser parte.
36
+
37
+ 4. **Onde cada coisa aterrissa:**
38
+ - **arquivos do repo** (workflows, labels) → commitados no remoto pelo comando
39
+ - **`.spec-wave.json`** → arquivo **local**; lembre o usuário de commitá-lo
40
+
41
+ 5. Se a skill foi atualizada, oriente a **recarregar/reiniciar o agente** para pegar a nova versão.
42
+
43
+ ## Por que isso é necessário
44
+
45
+ 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.
46
+
47
+ Para atualizar **só a skill**, sem tocar em config e repo:
48
+
49
+ ```bash
50
+ npx @spec-wave/cli@latest install-skill --force
51
+ ```
@@ -0,0 +1,154 @@
1
+ ---
2
+ name: spec-wave-workflow
3
+ description: "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, implement, order, task, story, move, doctor, update, info, uninstall, rfc, fix-pr)."
4
+ allowed-tools:
5
+ - Bash(npx @spec-wave/cli@latest *)
6
+ - Bash(gh issue *)
7
+ - Bash(gh api *)
8
+ - Read
9
+ - Glob
10
+ - Grep
11
+ ---
12
+
13
+ # spec-wave — mapa do fluxo
14
+
15
+ Referência do processo RFC-001. Use para orientar; para **agir**, chame a skill do comando.
16
+
17
+ > Se existir `rfc/rfc-integrate-spec-kit-into-kanban.md` no repositório, leia-o: é o processo real da equipe e vence esta referência.
18
+
19
+ ## Contexto obrigatório
20
+
21
+ Leia `.spec-wave.json` na raiz do repositório (Read) antes de qualquer coisa.
22
+
23
+ - **Existe** → o repo já está configurado. Use `owner`/`repo` nos comandos `gh` e `project.url` nas referências ao board. Não repita perguntas já respondidas por esse arquivo.
24
+ - **Não existe** → o repo não foi configurado. Direcione para a skill **setup** e pare.
25
+
26
+ Toda a CLI é invocada como `npx @spec-wave/cli@latest <comando>`.
27
+
28
+ ## Regras fundamentais
29
+
30
+ 1. **Nunca gere `spec.md` ou `plan.md` você mesmo.** Aplique a label de gatilho e deixe o Action gerar e commitar. Exceção: revisar/melhorar um documento já gerado.
31
+ 2. **Nunca crie Story ou Task avulsa.** Elas nascem do `decompose`, já em **✅ Ready** e vinculadas ao pai. Criadas à mão caem em 📥 Backlog e **não aparecem em tela nenhuma** da UI (o inbox do PM lista Features, a tela do Dev lê 🚧 Desenvolvimento, a fila do TL lê ✅ Ready).
32
+ 3. **Nunca use `gh issue create`** para work items — não adiciona ao Project, a issue fica sem Etapa e some das telas. Use `npx @spec-wave/cli@latest issue`.
33
+ 4. **A Etapa só avança, nunca retrocede.** O campo **Status** (Todo / In Progress / Done) mede o progresso *dentro* da Etapa e reinicia a cada avanço. Prefira `move`, `task start|done` e `story review` a mutações GraphQL manuais — os comandos embutem essas regras.
34
+
35
+ ## Fluxo Kanban
36
+
37
+ ```
38
+ 📥 Backlog → 🐞 Triagem → 🎯 Priorizado → 📋 Spec → 📋 Plan → ✅ Ready
39
+ → 🚧 Desenvolvimento → 👀 Code Review
40
+ → 🧪 QA → 📋 Homologação → 🚀 Deploy → 🎉 Done
41
+ ```
42
+
43
+ Cada artefato percorre só um trecho — e **nasce numa Etapa diferente**:
44
+
45
+ | Artefato | Nasce em | Percorre | Observações |
46
+ |----------|----------|----------|-------------|
47
+ | **Initiative / Epic** | 📥 Backlog | — | Agrupadores; acompanham os filhos. |
48
+ | **Feature** | 📥 Backlog | 🎯 Priorizado → 📋 Spec → 📋 Plan → ✅ Ready → 🚧 Desenvolvimento → 👀 Code Review → 🧪 QA → 📋 Homologação → 🚀 Deploy → 🎉 Done | Fica parada em ✅ Ready esperando um dev. Só avança para Code Review quando **TODAS** as Stories já estiverem lá. |
49
+ | **Story** | **✅ Ready** (via `decompose-apply`) | 🚧 Desenvolvimento → 👀 Code Review → 🧪 QA → 📋 Homologação → 🎉 Done | Nunca nasce em Backlog. |
50
+ | **Task** | **✅ Ready** (via `decompose-apply`) | 🚧 Desenvolvimento → 🎉 Done | Não passa por Code Review, QA nem Homologação. |
51
+ | **RFC** | 📥 Backlog | decompõe direto em **Tasks** | Não usa spec/plan. |
52
+ | **Bug** | **🐞 Triagem** (reportado) ou **✅ Ready** (achado em QA/UAT/review) | ✅ Ready → 🚧 Desenvolvimento → 👀 Code Review → 🧪 QA → 🚀 Deploy → 🎉 Done | Não passa por Priorizado, Spec, Plan nem Homologação. Bug P0 nasce direto em ✅ Ready. |
53
+ | **Spike** | 📥 Backlog | **movido só à mão pelo usuário** | Nunca avance a Etapa de um Spike por conta própria. |
54
+
55
+ ## Labels
56
+
57
+ **Gatilho** (você pode aplicar):
58
+
59
+ | Label | Dispara | Resultado |
60
+ |-------|---------|-----------|
61
+ | `spec-wave:spec` | `generate-spec.yml` | `spec.md` — especificação funcional (1º) |
62
+ | `spec-wave:plan` | `generate-plan.yml` | `plan.md` — plano técnico (2º, usa a spec) |
63
+ | `spec-wave:ready` | `validate.yml` | valida os dois documentos |
64
+ | `spec-wave:decompose` | `decompose.yml` | gera ou **re-critica** o rascunho `decomposition.md`. **Não cria issue nenhuma.** |
65
+ | `spec-wave:decompose-apply` | `decompose.yml` (modo aplicação) | cria as Stories/Tasks a partir do rascunho revisado |
66
+
67
+ **Estado** (gravadas pelas automações — **não** as adicione):
68
+
69
+ - `spec-wave:decompose-ready` → rascunho passou pela crítica, espera revisão humana
70
+ - `spec-wave:critique-failed` → contradições **graves**; **bloqueia** o `ready` até ser removida
71
+ - `spec-wave:needs-human` → a crítica reprovou N vezes (default 3); **para o fluxo**
72
+ - `spec-wave:decomposed` → guard de idempotência; o `decompose` pula enquanto existir
73
+
74
+ **Modificadora** (você pode aplicar):
75
+
76
+ - `spec-wave:model:<apelido>` → força um modelo **naquela execução**, resolvido por `ai.modelAliases` no `.spec-wave.json`. Duas dessas na mesma issue = ambíguo, nenhuma vale.
77
+
78
+ ## Crítica adversarial (comentário 🔎)
79
+
80
+ Depois do `generate-plan` e **antes** de qualquer issue nascer no `decompose`, um segundo agente audita o artefato procurando contradições com a spec, o plan e o `tech_context`. A saída é validada por schema (`severity` só aceita `grave` ou `menor`); payload fora do contrato **falha alto**.
81
+
82
+ **A remediação depende de ONDE reprovou — são superfícies diferentes:**
83
+
84
+ | Reprovou depois de | O que corrigir | Como retomar |
85
+ |--------------------|----------------|--------------|
86
+ | `generate-plan` | `plan.md` (ou a `spec.md` que o embasa) | corrija/regere → remova `critique-failed` → reaplique `spec-wave:ready` |
87
+ | `decompose` | **`decomposition.md`** — os achados citam `Story N` / `Task N.M`, títulos **desse arquivo** | edite e commite → remova `critique-failed` → reaplique `spec-wave:decompose` (critica o arquivo como está, sem regerar) |
88
+
89
+ > ⚠️ No `decompose` os achados são sobre as **Stories propostas**, não sobre o `plan.md`. Corrigir o plan não muda o rascunho já gravado.
90
+
91
+ - Grave no `decompose` → **nada é criado** e o Action **falha (exit 1)**.
92
+ - Menor → não bloqueia; trate como revisão de qualidade.
93
+ - **Escalada:** tentativa 2 usa `ai.escalationModel`. Ao atingir `ai.maxCritiqueAttempts` (default 3), aplica `needs-human` e **para**. Para retomar, remova **as duas** labels.
94
+ - Crítica limpa remove `critique-failed` e zera o contador.
95
+
96
+ ## Modelo de IA (`ai` no `.spec-wave.json`)
97
+
98
+ ```json
99
+ {
100
+ "ai": {
101
+ "provider": "anthropic",
102
+ "model": "claude-sonnet-4-6",
103
+ "models": { "plan": "claude-opus-4-1", "critique": "claude-opus-4-1" },
104
+ "escalationModel": "claude-opus-5",
105
+ "maxCritiqueAttempts": 3,
106
+ "modelAliases": { "opus": "claude-opus-5" },
107
+ "maxTokens": 32768,
108
+ "maxTokensByAction": { "spec": 49152 }
109
+ }
110
+ }
111
+ ```
112
+
113
+ **Precedência:** `SPEC_WAVE_MODEL` (env) → label `spec-wave:model:<apelido>` → escalada da crítica → `ai.models[ação]` → `ai.model` → default do provider.
114
+
115
+ **Teto de saída:** quando a saída não cabe, a geração **FALHA e nada é gravado** (um documento cortado passaria na validação de seções e valeria menos que documento nenhum). Saídas: aumentar `ai.maxTokens` ou reduzir o corpo da issue. Modelos com raciocínio gastam parte do teto pensando.
116
+
117
+ ## Arquivos gerados
118
+
119
+ ```
120
+ docs/
121
+ features/<slug>/
122
+ spec.md ← spec-wave:spec (1º)
123
+ plan.md ← spec-wave:plan (2º)
124
+ decomposition.md ← spec-wave:decompose (3º) — rascunho REVISÁVEL;
125
+ as issues só nascem com spec-wave:decompose-apply
126
+ rfcs/<slug>/
127
+ decomposition.md ← mesmo papel, com "## Task N" (RFC não usa spec/plan)
128
+ ```
129
+
130
+ O slug vem do **título**: `[FEATURE] Cadastro de Pedidos com PIX` → `cadastro-de-pedidos-com-pix`.
131
+
132
+ > ⚠️ 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.
133
+
134
+ ## Roteamento
135
+
136
+ | O usuário quer | Skill |
137
+ |----------------|-------|
138
+ | configurar o repo | `setup` |
139
+ | ver se está configurado | `info` |
140
+ | diagnosticar erro / 404 ao criar issue | `doctor` |
141
+ | atualizar skill/config/workflows | `update` |
142
+ | criar Initiative/Epic/Feature/Bug/Spike/RFC | `issue` |
143
+ | gerar a especificação funcional | `spec` |
144
+ | gerar o plano técnico | `plan` |
145
+ | validar spec+plan | `ready` |
146
+ | quebrar em Stories/Tasks | `decompose` |
147
+ | implementar | `implement` |
148
+ | ver ordem das Stories | `order` |
149
+ | mover Task | `task` |
150
+ | mandar Story para review | `story` |
151
+ | mover qualquer item | `move` |
152
+ | escrever um RFC | `rfc` |
153
+ | auditar e corrigir um PR | `fix-pr` |
154
+ | remover a configuração | `uninstall` |