@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.
- package/README.md +1 -0
- package/bin/spec-wave.mjs +44 -2
- package/package.json +8 -2
- package/src/agent/anthropic-agent.mjs +337 -0
- package/src/agent/errors.mjs +33 -0
- package/src/agent/index.mjs +108 -0
- package/src/agent/openrouter-agent.mjs +378 -0
- package/src/agent/run-types.mjs +59 -0
- package/src/agent/telemetry.mjs +54 -0
- package/src/agent/tools.mjs +452 -0
- package/src/agent/tracing.mjs +106 -0
- package/src/api/github-rest.mjs +206 -2
- package/src/commands/bug.mjs +8 -0
- package/src/commands/code-review.mjs +45 -4
- package/src/commands/decompose.mjs +11 -49
- package/src/commands/dev-agent.mjs +3 -3
- package/src/commands/doctor.mjs +77 -6
- package/src/commands/generate-bug.mjs +195 -0
- package/src/commands/generate-plan.mjs +6 -20
- package/src/commands/generate-spec.mjs +6 -22
- package/src/commands/implement.mjs +105 -2
- package/src/commands/init.mjs +3 -3
- package/src/commands/install-skill.mjs +72 -16
- package/src/commands/issue.mjs +9 -7
- package/src/commands/move.mjs +11 -1
- package/src/commands/qa.mjs +23 -2
- package/src/commands/refresh.mjs +145 -5
- package/src/commands/triage.mjs +174 -0
- package/src/commands/update.mjs +352 -62
- package/src/commands/validate.mjs +82 -10
- package/src/config.mjs +159 -1
- package/src/lib/bug-context.mjs +160 -0
- package/src/lib/bug-doc.mjs +51 -0
- package/src/lib/bug-triage.mjs +81 -0
- package/src/lib/claude.mjs +71 -254
- package/src/lib/critique.mjs +43 -30
- package/src/lib/implement-board.mjs +12 -1
- package/src/lib/plugin-skills.mjs +122 -0
- package/src/lib/pr-branch.mjs +267 -0
- package/src/lib/prompt-loader.mjs +257 -0
- package/src/lib/skill-file.mjs +35 -0
- package/src/plugin/.claude-plugin/plugin.json +20 -0
- package/src/plugin/README.md +73 -0
- package/src/plugin/skills/bug/SKILL.md +60 -0
- package/src/plugin/skills/bug/model-prompt.critique.md +48 -0
- package/src/plugin/skills/bug/model-prompt.md +74 -0
- package/src/plugin/skills/decompose/SKILL.md +111 -0
- package/src/plugin/skills/decompose/model-prompt.critique.md +46 -0
- package/src/plugin/skills/decompose/model-prompt.feature.md +69 -0
- package/src/plugin/skills/decompose/model-prompt.rfc.md +52 -0
- package/src/plugin/skills/doctor/SKILL.md +51 -0
- package/src/plugin/skills/fix-pr/SKILL.md +130 -0
- package/src/plugin/skills/implement/SKILL.md +102 -0
- package/src/plugin/skills/info/SKILL.md +40 -0
- package/src/plugin/skills/issue/SKILL.md +63 -0
- package/src/plugin/skills/move/SKILL.md +52 -0
- package/src/plugin/skills/order/SKILL.md +36 -0
- package/src/plugin/skills/plan/SKILL.md +53 -0
- package/src/plugin/skills/plan/model-prompt.critique.md +44 -0
- package/src/plugin/skills/plan/model-prompt.md +59 -0
- package/src/plugin/skills/plan/reference/tech-context.md +56 -0
- package/src/plugin/skills/ready/SKILL.md +44 -0
- package/src/plugin/skills/rfc/SKILL.md +47 -0
- package/src/plugin/skills/setup/SKILL.md +67 -0
- package/src/plugin/skills/spec/SKILL.md +37 -0
- package/src/plugin/skills/spec/model-prompt.md +61 -0
- package/src/plugin/skills/story/SKILL.md +49 -0
- package/src/plugin/skills/task/SKILL.md +41 -0
- package/src/plugin/skills/triage/SKILL.md +52 -0
- package/src/plugin/skills/uninstall/SKILL.md +43 -0
- package/src/plugin/skills/update/SKILL.md +51 -0
- package/src/plugin/skills/workflow/SKILL.md +154 -0
- package/src/templates/skill/SKILL.md +69 -7
- package/src/templates/workflows/generate-bug.yml +36 -0
- package/src/templates/workflows/validate.yml +2 -1
- 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` |
|