@spec-wave/cli 0.15.0 → 0.16.1
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 -5
- 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-graphql.mjs +23 -1
- package/src/api/github-rest.mjs +8 -0
- package/src/commands/bug.mjs +8 -0
- package/src/commands/code-review.mjs +45 -4
- package/src/commands/decompose.mjs +22 -72
- 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 +19 -44
- package/src/commands/generate-spec.mjs +18 -46
- 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 +171 -5
- package/src/commands/triage.mjs +174 -0
- package/src/commands/update.mjs +16 -3
- 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/flow-run.mjs +145 -0
- package/src/lib/implement-board.mjs +12 -1
- package/src/lib/plugin-skills.mjs +122 -0
- package/src/lib/project-root.mjs +9 -2
- 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 +117 -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 +58 -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 +55 -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 +158 -0
- package/src/templates/skill/SKILL.md +54 -4
- 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,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,55 @@
|
|
|
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 escreva o `spec.md` à mão.** Quem gera é o spec-wave — pelo Action ou pela CLI local. É isso que garante que o arquivo seja commitado e referenciado na issue. Exceção: revisar/melhorar um `spec.md` já gerado (aí sim use Edit).
|
|
13
|
+
|
|
14
|
+
## Dois modos, mesmo resultado
|
|
15
|
+
|
|
16
|
+
| Modo | Como acionar | Quando |
|
|
17
|
+
|------|--------------|--------|
|
|
18
|
+
| **Action** | aplicar a label `spec-wave:spec` | fluxo assíncrono; roda no CI, você acompanha pela issue |
|
|
19
|
+
| **Local** | `npx @spec-wave/cli@latest generate-spec --issue-number <n>` | você quer o documento **agora**, nesta sessão, e iterar em cima dele |
|
|
20
|
+
|
|
21
|
+
O modo é detectado pelo ambiente — fora do Actions, a CLI roda em modo local automaticamente. Os dois geram o arquivo, commitam, dão push, 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).
|
|
22
|
+
|
|
23
|
+
> Local exige a chave de IA no seu ambiente (`OPENROUTER_API_KEY` ou `ANTHROPIC_API_KEY`) e um `.spec-wave.json` no repositório. O provider `anthropic` **só** funciona local — no Action ele precisaria do Claude Code como subprocesso, que o runner não tem.
|
|
24
|
+
|
|
25
|
+
**Contexto:** leia `.spec-wave.json` (Read). Ausente → skill **setup**.
|
|
26
|
+
|
|
27
|
+
## Passos
|
|
28
|
+
|
|
29
|
+
1. **Confirme que a issue é uma Feature.**
|
|
30
|
+
|
|
31
|
+
> **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.
|
|
32
|
+
|
|
33
|
+
2. **Escolha o modo** (veja a tabela acima) e acione:
|
|
34
|
+
|
|
35
|
+
**Local** — resultado nesta sessão:
|
|
36
|
+
```bash
|
|
37
|
+
npx @spec-wave/cli@latest generate-spec --issue-number <número>
|
|
38
|
+
```
|
|
39
|
+
O comando imprime `Modo de execução: local`, gera, commita e faz push.
|
|
40
|
+
|
|
41
|
+
**Action** — assíncrono:
|
|
42
|
+
```bash
|
|
43
|
+
gh issue edit <número> --add-label "spec-wave:spec"
|
|
44
|
+
```
|
|
45
|
+
Informe: "Label `spec-wave:spec` adicionada. O Action `generate-spec.yml` vai gerar o `spec.md`. Acompanhe em Actions → Generate Spec."
|
|
46
|
+
|
|
47
|
+
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`.
|
|
48
|
+
|
|
49
|
+
5. **Próximo passo:** o plano técnico — mova para **📋 Plan** e use a skill **plan**.
|
|
50
|
+
|
|
51
|
+
## Se falhar
|
|
52
|
+
|
|
53
|
+
- **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.
|
|
54
|
+
- **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.
|
|
55
|
+
- 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,158 @@
|
|
|
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 escreva `spec.md` ou `plan.md` à mão.** Quem gera é o spec-wave — e ele roda de **dois modos**, com o mesmo resultado:
|
|
31
|
+
- **Action:** aplique a label de gatilho (`spec-wave:spec`, `spec-wave:plan`, `spec-wave:decompose`);
|
|
32
|
+
- **Local:** `npx @spec-wave/cli@latest generate-spec|generate-plan|decompose --issue-number <n>` na sua sessão.
|
|
33
|
+
|
|
34
|
+
O modo é detectado pelo ambiente (`GITHUB_ACTIONS`), sem flag. Os dois geram, commitam, fazem push, comentam na issue e sincronizam o board — o board é a fonte de verdade independentemente de onde rodou. Local exige a chave de IA no seu ambiente e um `.spec-wave.json`. Exceção à regra: revisar/melhorar um documento já gerado.
|
|
35
|
+
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).
|
|
36
|
+
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`.
|
|
37
|
+
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.
|
|
38
|
+
|
|
39
|
+
## Fluxo Kanban
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
📥 Backlog → 🐞 Triagem → 🎯 Priorizado → 📋 Spec → 📋 Plan → ✅ Ready
|
|
43
|
+
→ 🚧 Desenvolvimento → 👀 Code Review
|
|
44
|
+
→ 🧪 QA → 📋 Homologação → 🚀 Deploy → 🎉 Done
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Cada artefato percorre só um trecho — e **nasce numa Etapa diferente**:
|
|
48
|
+
|
|
49
|
+
| Artefato | Nasce em | Percorre | Observações |
|
|
50
|
+
|----------|----------|----------|-------------|
|
|
51
|
+
| **Initiative / Epic** | 📥 Backlog | — | Agrupadores; acompanham os filhos. |
|
|
52
|
+
| **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á. |
|
|
53
|
+
| **Story** | **✅ Ready** (via `decompose-apply`) | 🚧 Desenvolvimento → 👀 Code Review → 🧪 QA → 📋 Homologação → 🎉 Done | Nunca nasce em Backlog. |
|
|
54
|
+
| **Task** | **✅ Ready** (via `decompose-apply`) | 🚧 Desenvolvimento → 🎉 Done | Não passa por Code Review, QA nem Homologação. |
|
|
55
|
+
| **RFC** | 📥 Backlog | decompõe direto em **Tasks** | Não usa spec/plan. |
|
|
56
|
+
| **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. |
|
|
57
|
+
| **Spike** | 📥 Backlog | **movido só à mão pelo usuário** | Nunca avance a Etapa de um Spike por conta própria. |
|
|
58
|
+
|
|
59
|
+
## Labels
|
|
60
|
+
|
|
61
|
+
**Gatilho** (você pode aplicar):
|
|
62
|
+
|
|
63
|
+
| Label | Dispara | Resultado |
|
|
64
|
+
|-------|---------|-----------|
|
|
65
|
+
| `spec-wave:spec` | `generate-spec.yml` | `spec.md` — especificação funcional (1º) |
|
|
66
|
+
| `spec-wave:plan` | `generate-plan.yml` | `plan.md` — plano técnico (2º, usa a spec) |
|
|
67
|
+
| `spec-wave:ready` | `validate.yml` | valida os dois documentos |
|
|
68
|
+
| `spec-wave:decompose` | `decompose.yml` | gera ou **re-critica** o rascunho `decomposition.md`. **Não cria issue nenhuma.** |
|
|
69
|
+
| `spec-wave:decompose-apply` | `decompose.yml` (modo aplicação) | cria as Stories/Tasks a partir do rascunho revisado |
|
|
70
|
+
|
|
71
|
+
**Estado** (gravadas pelas automações — **não** as adicione):
|
|
72
|
+
|
|
73
|
+
- `spec-wave:decompose-ready` → rascunho passou pela crítica, espera revisão humana
|
|
74
|
+
- `spec-wave:critique-failed` → contradições **graves**; **bloqueia** o `ready` até ser removida
|
|
75
|
+
- `spec-wave:needs-human` → a crítica reprovou N vezes (default 3); **para o fluxo**
|
|
76
|
+
- `spec-wave:decomposed` → guard de idempotência; o `decompose` pula enquanto existir
|
|
77
|
+
|
|
78
|
+
**Modificadora** (você pode aplicar):
|
|
79
|
+
|
|
80
|
+
- `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.
|
|
81
|
+
|
|
82
|
+
## Crítica adversarial (comentário 🔎)
|
|
83
|
+
|
|
84
|
+
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**.
|
|
85
|
+
|
|
86
|
+
**A remediação depende de ONDE reprovou — são superfícies diferentes:**
|
|
87
|
+
|
|
88
|
+
| Reprovou depois de | O que corrigir | Como retomar |
|
|
89
|
+
|--------------------|----------------|--------------|
|
|
90
|
+
| `generate-plan` | `plan.md` (ou a `spec.md` que o embasa) | corrija/regere → remova `critique-failed` → reaplique `spec-wave:ready` |
|
|
91
|
+
| `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) |
|
|
92
|
+
|
|
93
|
+
> ⚠️ 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.
|
|
94
|
+
|
|
95
|
+
- Grave no `decompose` → **nada é criado** e o Action **falha (exit 1)**.
|
|
96
|
+
- Menor → não bloqueia; trate como revisão de qualidade.
|
|
97
|
+
- **Escalada:** tentativa 2 usa `ai.escalationModel`. Ao atingir `ai.maxCritiqueAttempts` (default 3), aplica `needs-human` e **para**. Para retomar, remova **as duas** labels.
|
|
98
|
+
- Crítica limpa remove `critique-failed` e zera o contador.
|
|
99
|
+
|
|
100
|
+
## Modelo de IA (`ai` no `.spec-wave.json`)
|
|
101
|
+
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"ai": {
|
|
105
|
+
"provider": "anthropic",
|
|
106
|
+
"model": "claude-sonnet-4-6",
|
|
107
|
+
"models": { "plan": "claude-opus-4-1", "critique": "claude-opus-4-1" },
|
|
108
|
+
"escalationModel": "claude-opus-5",
|
|
109
|
+
"maxCritiqueAttempts": 3,
|
|
110
|
+
"modelAliases": { "opus": "claude-opus-5" },
|
|
111
|
+
"maxTokens": 32768,
|
|
112
|
+
"maxTokensByAction": { "spec": 49152 }
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**Precedência:** `SPEC_WAVE_MODEL` (env) → label `spec-wave:model:<apelido>` → escalada da crítica → `ai.models[ação]` → `ai.model` → default do provider.
|
|
118
|
+
|
|
119
|
+
**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.
|
|
120
|
+
|
|
121
|
+
## Arquivos gerados
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
docs/
|
|
125
|
+
features/<slug>/
|
|
126
|
+
spec.md ← spec-wave:spec (1º)
|
|
127
|
+
plan.md ← spec-wave:plan (2º)
|
|
128
|
+
decomposition.md ← spec-wave:decompose (3º) — rascunho REVISÁVEL;
|
|
129
|
+
as issues só nascem com spec-wave:decompose-apply
|
|
130
|
+
rfcs/<slug>/
|
|
131
|
+
decomposition.md ← mesmo papel, com "## Task N" (RFC não usa spec/plan)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
O slug vem do **título**: `[FEATURE] Cadastro de Pedidos com PIX` → `cadastro-de-pedidos-com-pix`.
|
|
135
|
+
|
|
136
|
+
> ⚠️ 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.
|
|
137
|
+
|
|
138
|
+
## Roteamento
|
|
139
|
+
|
|
140
|
+
| O usuário quer | Skill |
|
|
141
|
+
|----------------|-------|
|
|
142
|
+
| configurar o repo | `setup` |
|
|
143
|
+
| ver se está configurado | `info` |
|
|
144
|
+
| diagnosticar erro / 404 ao criar issue | `doctor` |
|
|
145
|
+
| atualizar skill/config/workflows | `update` |
|
|
146
|
+
| criar Initiative/Epic/Feature/Bug/Spike/RFC | `issue` |
|
|
147
|
+
| gerar a especificação funcional | `spec` |
|
|
148
|
+
| gerar o plano técnico | `plan` |
|
|
149
|
+
| validar spec+plan | `ready` |
|
|
150
|
+
| quebrar em Stories/Tasks | `decompose` |
|
|
151
|
+
| implementar | `implement` |
|
|
152
|
+
| ver ordem das Stories | `order` |
|
|
153
|
+
| mover Task | `task` |
|
|
154
|
+
| mandar Story para review | `story` |
|
|
155
|
+
| mover qualquer item | `move` |
|
|
156
|
+
| escrever um RFC | `rfc` |
|
|
157
|
+
| auditar e corrigir um PR | `fix-pr` |
|
|
158
|
+
| remover a configuração | `uninstall` |
|