@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,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-wave-implement
|
|
3
|
+
description: "Use para implementar trabalho do spec-wave na etapa 🚧 Desenvolvimento — uma Feature inteira (todas as Stories pendentes, em ordem de dependência), uma Story (todas as suas Tasks) ou uma Task isolada. Monta o contexto e aciona o spec-kit; se não houver spec-kit configurado, você mesmo implementa seguindo o contexto. Gatilhos: 'implementar a feature 12', 'começar a story 34', 'fazer a task 56', 'rodar o implement'. Comando LOCAL — não usa label nem Action."
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Bash(npx @spec-wave/cli@latest *)
|
|
6
|
+
- Bash(gh issue *)
|
|
7
|
+
- Bash(gh pr *)
|
|
8
|
+
- Bash(git add *)
|
|
9
|
+
- Bash(git commit *)
|
|
10
|
+
- Bash(git push *)
|
|
11
|
+
- Bash(git checkout *)
|
|
12
|
+
- Read
|
|
13
|
+
- Edit
|
|
14
|
+
- Write
|
|
15
|
+
- Glob
|
|
16
|
+
- Grep
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# spec-wave implement — etapa 🚧 Desenvolvimento
|
|
20
|
+
|
|
21
|
+
Comando **local** (lê o `.spec-wave.json`, como o `issue`), **não** disparado por label/Action.
|
|
22
|
+
|
|
23
|
+
| Flag/Arg | Descrição |
|
|
24
|
+
|----------|-----------|
|
|
25
|
+
| `<issue>` | **Obrigatório**, posicional. Número da Feature, Story ou Task (`12` ou `#12`). |
|
|
26
|
+
| `--feature-dir <path>` | Caminho `docs/features/<slug>` para anexar `spec.md`/`plan.md` (sobrescreve a resolução automática). |
|
|
27
|
+
| `--dry-run` | Monta o contexto e imprime o comando **sem executar** e **sem escrever nada no GitHub**. |
|
|
28
|
+
|
|
29
|
+
**Pré-requisitos:** `.spec-wave.json` presente (senão → skill **setup**) e a issue ser Feature, Story ou Task. Para executar de fato, o spec-kit precisa estar configurado em `specKit.command` (no `.spec-wave.json`) ou na env `SPEC_WAVE_IMPLEMENT_CMD`.
|
|
30
|
+
|
|
31
|
+
## Como o comando se comporta por tipo
|
|
32
|
+
|
|
33
|
+
| Tipo | Comportamento |
|
|
34
|
+
|------|---------------|
|
|
35
|
+
| **Feature** | Lista as Stories (sub-issues), **ordena topologicamente** pelas dependências, **pula as já em 👀 Code Review ou além** (listadas no contexto como "não tocar") e monta **um único** contexto com todas as pendentes, cada uma com suas Tasks. Aciona o spec-kit **uma vez**. |
|
|
36
|
+
| **Story** | Coleta todas as Tasks (sub-issues) e aciona o spec-kit uma única vez. |
|
|
37
|
+
| **Task** | Só aquela task. |
|
|
38
|
+
|
|
39
|
+
**Abortos no modo Feature:** ciclo de dependências entre Stories pendentes → **exit 1** (corrija as linhas `Depende de:`; veja a skill **order**). Story pendente **sem Tasks** → aborta pedindo decomposição. Todas implementadas → encerra sem acionar o spec-kit.
|
|
40
|
+
|
|
41
|
+
**Bug** → modo próprio (RFC-004): sem tasks e sem spec/plan, o contexto impõe quatro fases — reproduzir → causa raiz → fix mínimo → teste de regressão. O `bug.md`, quando existe, entra como **hipótese a confirmar** (foi escrito por IA sem executar código), não como fato. O Bug vai sozinho para 👀 Code Review ao abrir o PR: não arrasta a Feature-pai.
|
|
42
|
+
|
|
43
|
+
Outros tipos (Spike, Epic) → o comando **recusa**.
|
|
44
|
+
|
|
45
|
+
## Passos
|
|
46
|
+
|
|
47
|
+
1. Confirme que há `.spec-wave.json` no repo.
|
|
48
|
+
|
|
49
|
+
2. **Sempre comece com `--dry-run`:**
|
|
50
|
+
```bash
|
|
51
|
+
npx @spec-wave/cli@latest implement <número> --dry-run
|
|
52
|
+
```
|
|
53
|
+
Inspecione: detecção do tipo, Tasks coletadas (Story) ou ordem/puladas/ciclos (Feature), e o comando do spec-kit que seria executado.
|
|
54
|
+
|
|
55
|
+
3. Mostre ao usuário o contexto montado em `.spec-wave/implement-<número>.md`. Ele inclui os comentários da issue, um **digest do código recente**, um **aviso de dependências pendentes** quando aplicável, e as instruções de execução sequencial.
|
|
56
|
+
|
|
57
|
+
4. **Se o spec-kit estiver configurado** e o usuário aprovar, rode sem `--dry-run`:
|
|
58
|
+
```bash
|
|
59
|
+
npx @spec-wave/cli@latest implement <número>
|
|
60
|
+
```
|
|
61
|
+
Se **não** estiver configurado, o comando só monta o contexto e mostra como configurar. Ajude a definir o template — placeholders disponíveis: `{tasksFile} {specFile} {planFile} {issue} {type} {title}`.
|
|
62
|
+
|
|
63
|
+
Use `--feature-dir docs/features/<slug>` se a resolução automática falhar e você quiser anexar `spec.md`/`plan.md`.
|
|
64
|
+
|
|
65
|
+
5. **Se você (agente) for implementar diretamente**, siga o protocolo abaixo.
|
|
66
|
+
|
|
67
|
+
6. Ao final, confirme o resultado com o usuário e oriente a revisão dos PRs.
|
|
68
|
+
|
|
69
|
+
## Protocolo de execução (obrigatório)
|
|
70
|
+
|
|
71
|
+
**Uma Task por vez.** Nunca deixe duas Tasks com Status "In Progress" ao mesmo tempo.
|
|
72
|
+
|
|
73
|
+
Para cada Task, **prefira os comandos da CLI a mutações GraphQL/`gh` manuais** — eles embutem as regras do board (Etapa nunca retrocede; uma Task In Progress por vez):
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npx @spec-wave/cli@latest task start <n> # Etapa 🚧 Desenvolvimento + Status In Progress
|
|
77
|
+
# ... implementa ...
|
|
78
|
+
npx @spec-wave/cli@latest task done <n> # Etapa 🎉 Done + Status Done
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Ao concluir toda a Story:** faça o commit, abra o PR e mova a Story:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
npx @spec-wave/cli@latest story review <n> # Etapa 👀 Code Review, Status Todo
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**A Feature só avança** para 👀 Code Review quando **TODAS** as suas Stories já estiverem lá. Enquanto houver Story pendente, deixe a Feature em 🚧 Desenvolvimento. No modo Feature isso acontece dentro da mesma execução.
|
|
88
|
+
|
|
89
|
+
**No modo Feature**, siga o contexto Story a Story, **na ordem listada**: implemente as Tasks, depois commit + PR + `story review`; só então passe à próxima Story.
|
|
90
|
+
|
|
91
|
+
> **Aviso de dependência pendente** no contexto (a issue depende de outra não concluída, via `Depende de: #N` ou *blocked by*) → **confirme com o usuário** antes de seguir fora de ordem.
|
|
92
|
+
|
|
93
|
+
Lembre: a **Etapa só avança**, nunca volta; o **Status** mede o progresso dentro da etapa.
|
|
94
|
+
|
|
95
|
+
## Quando não dá para implementar
|
|
96
|
+
|
|
97
|
+
| Situação | Saída |
|
|
98
|
+
|----------|-------|
|
|
99
|
+
| Feature **sem Stories** | Rode a skill **decompose** primeiro |
|
|
100
|
+
| **Ciclo de dependências** | Corrija as linhas `Depende de:` — veja a skill **order** |
|
|
101
|
+
| Issue é Spike/Epic | O comando recusa; use a skill **move** para mexer no board |
|
|
102
|
+
| Bug sem `bug.md` | Segue assim mesmo, com aviso — a investigação inteira fica com o executor. Para gerar o documento antes, use a skill **bug**. |
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-wave-info
|
|
3
|
+
description: "Use quando o usuário perguntar se o repositório atual já está configurado com spec-wave, qual GitHub Project está vinculado, qual versão da CLI foi usada no init, ou se a skill instalada está atualizada. Gatilhos: 'o spec-wave está configurado aqui?', 'qual o board deste repo?', 'status do spec-wave'. Para um diagnóstico completo de auth e workflows use a skill doctor."
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Bash(npx @spec-wave/cli@latest *)
|
|
6
|
+
- Read
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# spec-wave info — status de configuração
|
|
10
|
+
|
|
11
|
+
Mostra se o repositório atual foi configurado e valida a skill instalada.
|
|
12
|
+
|
|
13
|
+
| Flag | Descrição |
|
|
14
|
+
|------|-----------|
|
|
15
|
+
| `--json` | Saída JSON (`{"initialized":bool, ..., "skill":{...}}`) para parsing programático. |
|
|
16
|
+
|
|
17
|
+
## Passos
|
|
18
|
+
|
|
19
|
+
1. Execute:
|
|
20
|
+
```bash
|
|
21
|
+
npx @spec-wave/cli@latest info
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
2. **Se inicializado**, apresente ao usuário os dados do `.spec-wave.json`: `owner/repo`, `project.title` + `project.url`, `version` da CLI e `initializedAt`.
|
|
25
|
+
|
|
26
|
+
3. **Se NÃO inicializado**, pergunte: "Este repositório ainda não foi configurado com o spec-wave. Quer rodar o `init` agora?"
|
|
27
|
+
- Sim → use a skill **setup**.
|
|
28
|
+
- Não → encerre sem alterar nada.
|
|
29
|
+
|
|
30
|
+
4. **Se a saída indicar skill pendente** (aviso "Skill pendente de instalação/atualização" ou, no `--json`, `skill.installNeeded: true`), ofereça resolver:
|
|
31
|
+
- skill `ausente` → `npx @spec-wave/cli@latest install-skill`
|
|
32
|
+
- skill `desatualizada` → `npx @spec-wave/cli@latest update` (skill **update**)
|
|
33
|
+
|
|
34
|
+
Lembre de recarregar o agente depois.
|
|
35
|
+
|
|
36
|
+
5. Se a `version` do arquivo divergir de `npx @spec-wave/cli@latest --version`, sugira `npx @spec-wave/cli@latest refresh --config` (reescreve o `.spec-wave.json` com os dados atuais do Project) ou a skill **update**.
|
|
37
|
+
|
|
38
|
+
## O que o comando valida além do arquivo
|
|
39
|
+
|
|
40
|
+
Para cada agente de código detectado no diretório, compara a cópia instalada da skill com a versão empacotada na CLI — uma cópia **global** atualizada também conta. No `--json`, o campo `skill` traz `{agentsDetected, installNeeded, pending:[{agent, reason, path}]}`.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-wave-issue
|
|
3
|
+
description: "Use para criar um work item tipado no spec-wave — Initiative, Epic, Feature, Bug, Spike ou RFC — já adicionado ao GitHub Project com Etapa, Work Item Type e Area. Gatilhos: 'criar uma feature', 'nova initiative', 'abrir um epic', 'registrar um bug no board', 'criar issue do spec-wave'. NÃO use para Story ou Task (nascem do decompose — skill decompose) e nunca use gh issue create."
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Bash(npx @spec-wave/cli@latest *)
|
|
6
|
+
- Bash(gh issue *)
|
|
7
|
+
- Read
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# spec-wave issue — cria um work item no board
|
|
11
|
+
|
|
12
|
+
Faz tudo de uma vez: cria a issue com a label de tipo, vincula ao parent como **sub-issue** nativa do GitHub, adiciona ao Project e define os campos **Etapa**, **Work Item Type**, **Area** e — só se informada — **Priority**. Grava `Parent: #N` no corpo.
|
|
13
|
+
|
|
14
|
+
> **Nunca use `gh issue create`.** Ele não adiciona ao board nem vincula o parent: a issue fica sem Etapa e some de todas as telas da UI.
|
|
15
|
+
|
|
16
|
+
**Contexto:** leia `.spec-wave.json` (Read) para confirmar que o repo está configurado. Ausente → skill **setup**.
|
|
17
|
+
|
|
18
|
+
## Flags
|
|
19
|
+
|
|
20
|
+
| Flag | Tipo | Descrição |
|
|
21
|
+
|------|------|-----------|
|
|
22
|
+
| `--title <title>` | **obrigatório** | Título **sem** o prefixo de tipo — a CLI adiciona (`[FEATURE]`, `[STORY]`…). |
|
|
23
|
+
| `--type <type>` | string | `initiative`, `epic`, `feature`, `story`, `task`, `bug`, `spike`, `rfc`. Default: `feature`. |
|
|
24
|
+
| `--parent <n>` | string | Número da issue pai — cria como sub-issue dela. |
|
|
25
|
+
| `--body <text>` | string | Descrição. |
|
|
26
|
+
| `--priority <p>` | string | **Opcional.** `P0`–`P3`. **Omita** se o usuário não pediu. |
|
|
27
|
+
| `--area <area>` | string | `Frontend`, `Backend`, `Mobile`, `Infra`, `DevOps`, `Data`. |
|
|
28
|
+
|
|
29
|
+
Atalhos: `initiative` (raiz, sem `--parent`) e `feature` — mesmas flags, `--type` fixo.
|
|
30
|
+
|
|
31
|
+
## Hierarquia
|
|
32
|
+
|
|
33
|
+
`Initiative → Epic → Feature → Story → Task`. Use `--parent <n>` para pendurar no nível acima.
|
|
34
|
+
|
|
35
|
+
## Passos
|
|
36
|
+
|
|
37
|
+
1. **Colete com o usuário:** tipo, título (sem prefixo), descrição e o número da issue **pai**, se houver.
|
|
38
|
+
|
|
39
|
+
> **Prioridade e área são opcionais.** Só inclua se o usuário pedir explicitamente. **Nunca atribua uma prioridade por conta própria** — omitindo `--priority`, a prioridade fica `null` (sem prioridade) no board.
|
|
40
|
+
|
|
41
|
+
2. **Execute** com **apenas** as flags que o usuário forneceu:
|
|
42
|
+
```bash
|
|
43
|
+
npx @spec-wave/cli@latest issue \
|
|
44
|
+
--type "<tipo>" \
|
|
45
|
+
--title "<título>" \
|
|
46
|
+
--body "<descrição>" \
|
|
47
|
+
--area "<área>" \ # opcional
|
|
48
|
+
--priority "<prioridade>" \ # opcional — se o usuário não pediu, OMITA
|
|
49
|
+
--parent "<número-do-pai>" # opcional
|
|
50
|
+
```
|
|
51
|
+
Para Features, o atalho `npx @spec-wave/cli@latest feature --title ...` equivale a `--type feature`.
|
|
52
|
+
|
|
53
|
+
3. Informe o número criado e o vínculo com o pai.
|
|
54
|
+
|
|
55
|
+
4. Para Features, aponte o próximo passo: mover para **📋 Spec** e usar a skill **spec** para gerar a especificação funcional (o plano técnico vem depois).
|
|
56
|
+
|
|
57
|
+
## Cuidados por tipo
|
|
58
|
+
|
|
59
|
+
⚠️ **A Etapa inicial é sempre 📥 Backlog, para qualquer `--type`.** Correto para Initiative, Epic, Feature, RFC, Bug e Spike.
|
|
60
|
+
|
|
61
|
+
**Story e Task:** está errado para elas — pertencem a ✅ Ready. O caminho normal é a skill **decompose**. Se o usuário insistir numa Story/Task avulsa: crie **com `--parent <n>`** e, logo em seguida, avance para ✅ Ready (skill **move**), explicando por que o passo extra é necessário — senão o item fica invisível na UI.
|
|
62
|
+
|
|
63
|
+
**Spike:** entra em 📥 Backlog e o **usuário** o move à mão pelas etapas. Nunca avance a Etapa de um Spike por conta própria.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-wave-move
|
|
3
|
+
description: "Use para mover qualquer item do board spec-wave — Feature, Story, Task, Bug ou RFC — para uma Etapa, quando task start|done e story review não cobrem o movimento (ex.: mover uma Feature para Homologação ou Deploy). Gatilhos: 'mover a feature 12 para homologação', 'passar para deploy', 'avançar o card'. Prefira este comando a gh api graphql manual: a Etapa nunca retrocede, e isso é regra do fluxo, não limitação."
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Bash(npx @spec-wave/cli@latest *)
|
|
6
|
+
- Read
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# spec-wave move — move qualquer item do board
|
|
10
|
+
|
|
11
|
+
Comando **local**:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npx @spec-wave/cli@latest move <n> <etapa> [--status <valor>]
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
| Flag/Arg | Descrição |
|
|
18
|
+
|----------|-----------|
|
|
19
|
+
| `<n>` | **Obrigatório.** Número da issue, ex.: `8` ou `#8`. |
|
|
20
|
+
| `<etapa>` | **Obrigatório.** Etapa de destino — com ou sem emoji, sem acento, em qualquer caixa: `"code review"`, `"Homologação"`, `"🎉 Done"`. |
|
|
21
|
+
| `--status <valor>` | Status no destino: `Todo`, `In Progress` ou `Done`. Default: `Todo`. |
|
|
22
|
+
|
|
23
|
+
**Contexto:** leia `.spec-wave.json` (Read). Ausente → skill **setup**.
|
|
24
|
+
|
|
25
|
+
## Etapas válidas
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
📥 Backlog → 🐞 Triagem → 🎯 Priorizado → 📋 Spec → 📋 Plan → ✅ Ready
|
|
29
|
+
→ 🚧 Desenvolvimento → 👀 Code Review
|
|
30
|
+
→ 🧪 QA → 📋 Homologação → 🚀 Deploy → 🎉 Done
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Guardas embutidas
|
|
34
|
+
|
|
35
|
+
- **A Etapa nunca retrocede.** Se o item já estiver adiante, o comando informa a Etapa atual e **não faz nada**. **Não existe escape hatch** para retroceder — é a regra do fluxo.
|
|
36
|
+
- **Spike é recusado** — a Etapa de um Spike é movida à mão pelo usuário. Nunca a avance por conta própria.
|
|
37
|
+
- **Nome ambíguo é recusado** listando as candidatas (`"p"` casa com Priorizado e Plan). Seja específico.
|
|
38
|
+
|
|
39
|
+
## Passos
|
|
40
|
+
|
|
41
|
+
1. Confirme o número da issue e a Etapa de destino com o usuário.
|
|
42
|
+
2. Rode o comando. Passe `--status` se o item já deve entrar na etapa em andamento ou concluído.
|
|
43
|
+
3. Se o comando recusar por Etapa já adiante, apenas informe a Etapa atual — não tente contornar via `gh api graphql`.
|
|
44
|
+
4. Se recusar por ambiguidade, escolha entre as candidatas listadas e rode de novo.
|
|
45
|
+
|
|
46
|
+
## Quando preferir outra skill
|
|
47
|
+
|
|
48
|
+
| Caso | Skill |
|
|
49
|
+
|------|-------|
|
|
50
|
+
| Task iniciando ou concluindo | **task** (`start` / `done`) |
|
|
51
|
+
| Story indo para Code Review | **story** (`review`) |
|
|
52
|
+
| Feature avançando após todas as Stories em review, ou indo para QA/Homologação/Deploy | **move** (esta) |
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-wave-order
|
|
3
|
+
description: "Use para descobrir em que ordem as Stories de uma Feature do spec-wave devem ser implementadas, segundo as dependências declaradas (Depende de: #N e a relação nativa blocked by). Também detecta ciclos de dependência e Stories fora de ordem. Gatilhos: 'qual story implementar primeiro', 'ordem das stories da feature 12', 'tem ciclo de dependência?'. Use antes da skill implement."
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Bash(npx @spec-wave/cli@latest *)
|
|
6
|
+
- Read
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# spec-wave order — ordem topológica das Stories
|
|
10
|
+
|
|
11
|
+
Comando **local**:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npx @spec-wave/cli@latest order <feature>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
| Arg | Descrição |
|
|
18
|
+
|-----|-----------|
|
|
19
|
+
| `<feature>` | Número da issue da **Feature**, ex.: `12` ou `#12`. Posicional, obrigatório. |
|
|
20
|
+
|
|
21
|
+
**Contexto:** leia `.spec-wave.json` (Read). Ausente → skill **setup**.
|
|
22
|
+
|
|
23
|
+
## O que a saída traz
|
|
24
|
+
|
|
25
|
+
- As Stories da Feature em **ordem topológica** pelas dependências — a linha `Depende de: #N` no corpo **mesclada** com a relação nativa *blocked by* do GitHub
|
|
26
|
+
- A **Etapa atual** de cada Story no board
|
|
27
|
+
- Avisos de **ciclo de dependência** — essas Stories ficam **fora da ordem**; corrija as linhas `Depende de:`
|
|
28
|
+
- Avisos de **dependência fora de ordem** — Story já em 🚧 Desenvolvimento ou além dependendo de outra que não está em 🎉 Done
|
|
29
|
+
|
|
30
|
+
## Passos
|
|
31
|
+
|
|
32
|
+
1. Rode o comando para a Feature.
|
|
33
|
+
2. Apresente a ordem ao usuário, marcando o que já está concluído e o que está pendente.
|
|
34
|
+
3. **Se houver ciclo**, isso é bloqueante para a skill **implement** no modo Feature (o comando aborta com exit 1). Ajude a quebrar o ciclo editando as linhas `Depende de:` nos corpos das Stories.
|
|
35
|
+
4. **Se houver dependência fora de ordem**, aponte o risco ao usuário antes de seguir.
|
|
36
|
+
5. Com a ordem clara, siga para a skill **implement**.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-wave-plan
|
|
3
|
+
description: "Use para iniciar a geração do plano técnico (plan.md) de uma Feature do spec-wave — o SEGUNDO documento, derivado da spec.md. Aplica a label spec-wave:plan e deixa o GitHub Action gerar. Também cobre a criação e manutenção do .github/config/tech_context.yml, de que a qualidade do plano depende. Gatilhos: 'gerar o plano técnico', 'criar o plan.md da feature 12', 'configurar o tech_context'. Só vale para Features."
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Bash(gh issue *)
|
|
6
|
+
- Bash(npx @spec-wave/cli@latest *)
|
|
7
|
+
- Read
|
|
8
|
+
- Write
|
|
9
|
+
- Glob
|
|
10
|
+
- Grep
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# spec-wave plan — plano técnico (2º documento)
|
|
14
|
+
|
|
15
|
+
> **Regra fundamental: nunca escreva o `plan.md` à mão.** Quem gera é o spec-wave — pelo Action ou pela CLI local. Exceção: revisar/melhorar um plano já gerado.
|
|
16
|
+
|
|
17
|
+
**Dois modos, mesmo resultado.** `npx @spec-wave/cli@latest generate-plan --issue-number <n>` roda **agora**, nesta sessão; a label `spec-wave:plan` roda no Action. O modo é detectado pelo ambiente. Ambos geram, commitam, fazem push, criticam e comentam na issue. Local exige a chave de IA no seu ambiente. Veja a skill **spec** para a tabela completa.
|
|
18
|
+
|
|
19
|
+
**Contexto:** leia `.spec-wave.json` (Read). Ausente → skill **setup**.
|
|
20
|
+
|
|
21
|
+
O plano segue o schema do **RFC-002 §3.2**: **Estratégia Técnica** (com Matriz de Rastreabilidade), **Detalhamento da Implementação**, **Segurança e Conformidade**, **Estratégia de Testes** e **Rollback e Monitoramento**. O agente usa o `tech_context` do repositório (`.github/config/tech_context.yml` + versões de pacote e migrations recentes) para embasar o plano e usar **APENAS** as tecnologias declaradas.
|
|
22
|
+
|
|
23
|
+
## Passos
|
|
24
|
+
|
|
25
|
+
1. **A spec existe?** Verifique `docs/features/<slug>/spec.md` — o plano usa a especificação funcional como contexto. Se não existir, gere a spec primeiro (skill **spec**).
|
|
26
|
+
|
|
27
|
+
2. **Garanta o `tech_context`.** Verifique se `.github/config/tech_context.yml` existe (Read). **Se não existir, ajude a criar AGORA** — o passo a passo está em `reference/tech-context.md`, ao lado deste arquivo. Garanta que esteja **commitado e pushado** antes de aplicar a label: o Action lê o arquivo do repositório, não do seu disco local.
|
|
28
|
+
|
|
29
|
+
3. **Acione**, no modo escolhido:
|
|
30
|
+
```bash
|
|
31
|
+
# local — resultado nesta sessão
|
|
32
|
+
npx @spec-wave/cli@latest generate-plan --issue-number <número>
|
|
33
|
+
# ou Action — assíncrono
|
|
34
|
+
gh issue edit <número> --add-label "spec-wave:plan"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
4. Informe: "Label `spec-wave:plan` adicionada. O Action `generate-plan.yml` vai gerar o `plan.md`. Acompanhe em Actions → Generate Plan."
|
|
38
|
+
|
|
39
|
+
5. Quando concluir, ofereça revisar `docs/features/<slug>/plan.md`.
|
|
40
|
+
|
|
41
|
+
6. **Próximo passo:** validar a Feature — mova para **✅ Ready** e use a skill **ready**.
|
|
42
|
+
|
|
43
|
+
## Desvios pontuais (`## Tech Override`)
|
|
44
|
+
|
|
45
|
+
Para uma Feature específica usar algo fora do padrão, oriente a adicionar no **corpo da issue** uma seção com um bloco YAML que será mesclado (deep-merge) sobre o `tech_context.yml`:
|
|
46
|
+
|
|
47
|
+
````markdown
|
|
48
|
+
## Tech Override
|
|
49
|
+
```yaml
|
|
50
|
+
system_info:
|
|
51
|
+
stack:
|
|
52
|
+
database: "DynamoDB"
|
|
53
|
+
```
|
|
54
|
+
````
|
|
55
|
+
|
|
56
|
+
## Se falhar
|
|
57
|
+
|
|
58
|
+
Depois do `generate-plan` roda a **crítica adversarial**, que vira um comentário 🔎 na issue. Se ela apontar findings **graves**, a issue recebe `spec-wave:critique-failed` — corrija o **`plan.md`** (ou a `spec.md` que o embasa), commite, remova a label e reaplique `spec-wave:ready`. Detalhes na skill **workflow**.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: critique-plan
|
|
3
|
+
action: critique
|
|
4
|
+
description: Critério da crítica adversarial do plan.md contra o spec.md, as regras de negócio e o tech_context.
|
|
5
|
+
tools: [Read, Glob, Grep]
|
|
6
|
+
maxTurns: 20
|
|
7
|
+
verifiers: 3
|
|
8
|
+
lenses:
|
|
9
|
+
- "contradição — o plano decide algo que a spec proíbe, inverte ou já decidiu de outro jeito?"
|
|
10
|
+
- "fronteira técnica — o plano usa alguma tecnologia, serviço ou API fora do tech_context declarado?"
|
|
11
|
+
- "rastreabilidade — existe mudança de banco, endpoint ou componente de UI que não referencia nenhum Critério de Aceite?"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Crítica adversarial do plan.md
|
|
15
|
+
|
|
16
|
+
Você audita o `plan.md` contra o `spec.md`, as regras de negócio e o `tech_context` fornecidos. Seu papel é encontrar problemas, não elogiar.
|
|
17
|
+
|
|
18
|
+
Procure decisões técnicas que contradizem ou ignoram requisitos da spec, e tecnologias/serviços fora do tech_context.
|
|
19
|
+
|
|
20
|
+
## O que caracteriza um achado
|
|
21
|
+
|
|
22
|
+
- **Contradições diretas** entre os documentos.
|
|
23
|
+
- **Inversões de requisito** — ex.: a spec exige consentimento ANTES de persistir e o plano persiste antes de pedir consentimento.
|
|
24
|
+
- **Violações de restrição explícita** — minimização de dados (LGPD), limites de retenção, campos proibidos.
|
|
25
|
+
- **Itens que contradizem ou ignoram a spec**.
|
|
26
|
+
- **Rastreabilidade quebrada** — mudança de banco, endpoint de API ou componente de UI que não referencia nenhum Critério de Aceite.
|
|
27
|
+
- **Tecnologia fora da fronteira** — qualquer serviço, biblioteca ou API que não esteja no tech_context nem seja definido no próprio plano.
|
|
28
|
+
|
|
29
|
+
<!-- requires-tools -->
|
|
30
|
+
## Como verificar
|
|
31
|
+
|
|
32
|
+
Você tem `Read`, `Glob` e `Grep`. Não confie na descrição que o plano faz do repositório — abra os arquivos que ele cita. Um plano que afirma estender `PedidoService` quando esse arquivo não existe tem um achado, e só a leitura revela isso.
|
|
33
|
+
<!-- /requires-tools -->
|
|
34
|
+
## Barra de rigor
|
|
35
|
+
|
|
36
|
+
NÃO invente problemas. Se os documentos estiverem consistentes, diga isso — uma auditoria limpa é um resultado legítimo e frequente.
|
|
37
|
+
|
|
38
|
+
O inverso também vale: "não consegui confirmar" é uma refutação, não uma aprovação. Se você não conseguiu verificar uma afirmação que importa, trate-a como refutada e diga o que faltou.
|
|
39
|
+
|
|
40
|
+
## Consequência
|
|
41
|
+
|
|
42
|
+
Um achado marcado como **grave** aplica a label `spec-wave:critique-failed`, que bloqueia o `spec-wave:ready` até correção. Um achado **menor** é reportado na issue sem bloquear.
|
|
43
|
+
|
|
44
|
+
Calibre com isso em mente: um achado grave custa o tempo de um humano. Reserve-o para contradição real com a spec, o tech_context ou uma regra explícita — não para preferência de estilo.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plan
|
|
3
|
+
action: plan
|
|
4
|
+
description: Gera o plano técnico (plan.md) de uma Feature a partir do spec.md e do tech_context.
|
|
5
|
+
tools: [Read, Glob, Grep]
|
|
6
|
+
maxTurns: 30
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Geração de plan.md
|
|
10
|
+
|
|
11
|
+
Você é um Tech Lead experiente. Gere um plano técnico (plan.md) completo e detalhado, baseado ESTRITAMENTE no spec.md fornecido.
|
|
12
|
+
|
|
13
|
+
## Entrada
|
|
14
|
+
|
|
15
|
+
Você recebe um payload JSON com:
|
|
16
|
+
|
|
17
|
+
- `spec_content` — o spec.md já gerado (ou um aviso de que ainda não existe)
|
|
18
|
+
- `feature_title` / `feature_description` — título e corpo da issue
|
|
19
|
+
- `tech_context.static` — o stack declarado em `.github/config/tech_context.yml`
|
|
20
|
+
- `tech_context.dynamic` — o que foi detectado no repositório
|
|
21
|
+
- `tech_context.overrides` — ajustes declarados no corpo da issue
|
|
22
|
+
|
|
23
|
+
<!-- requires-tools -->
|
|
24
|
+
## Exploração antes de escrever
|
|
25
|
+
|
|
26
|
+
Você tem `Read`, `Glob` e `Grep` no repositório de destino. Use-os: localize os módulos, endpoints, migrations e componentes que esta Feature vai tocar, e ancore o plano nos **caminhos e nomes reais** que encontrar. Um plano que cita `src/services/pedido.ts` porque leu o arquivo vale muito mais que um que inventa `PedidoService`.
|
|
27
|
+
|
|
28
|
+
O `tech_context` continua sendo a fronteira do que você pode propor — explorar o repositório serve para ser preciso dentro dela, não para ampliá-la.
|
|
29
|
+
<!-- /requires-tools -->
|
|
30
|
+
## Estrutura obrigatória
|
|
31
|
+
|
|
32
|
+
O plano deve conter EXATAMENTE estas seções em português, nesta ordem:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
# Estratégia Técnica
|
|
36
|
+
- Abordagem Arquitetural, Decisões-Chave e uma Matriz de Rastreabilidade (tabela)
|
|
37
|
+
ligando cada Critério de Aceite do spec a um componente técnico.
|
|
38
|
+
# Detalhamento da Implementação
|
|
39
|
+
- Abra a seção com um diagrama de sequência Mermaid (bloco ```mermaid iniciado com
|
|
40
|
+
sequenceDiagram) do fluxo principal ponta a ponta, com os componentes técnicos
|
|
41
|
+
reais como participants (frontend, endpoints/controllers, services, banco de
|
|
42
|
+
dados, filas). Use APENAS componentes do tech_context ou definidos neste plano;
|
|
43
|
+
rotule as mensagens com os caminhos de endpoint e nomes de método reais, em
|
|
44
|
+
português.
|
|
45
|
+
- Subseções: ## Backend, ## Banco de Dados, ## Frontend, ## Infraestrutura.
|
|
46
|
+
# Segurança e Conformidade
|
|
47
|
+
# Estratégia de Testes
|
|
48
|
+
- Unitários, Integração e E2E.
|
|
49
|
+
# Rollback e Monitoramento
|
|
50
|
+
- Plano de Rollback, Métricas Observadas e Alertas.
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Regras OBRIGATÓRIAS
|
|
54
|
+
|
|
55
|
+
- TODA mudança de banco, endpoint de API ou componente de UI DEVE referenciar um Critério de Aceite específico do spec.md (rastreabilidade).
|
|
56
|
+
- Use APENAS as tecnologias e serviços listados no tech_context fornecido. Não invente APIs ou serviços inexistentes.
|
|
57
|
+
- Forneça detalhes acionáveis: caminhos exatos de endpoints, nomes de DTOs, constraints de banco.
|
|
58
|
+
- Escreva em português (pt-BR). Não use caracteres de outros alfabetos (CJK, cirílico, árabe, tailandês).
|
|
59
|
+
- O arquivo deve conter APENAS o conteúdo do plan.md — nada de preâmbulo, comentário sobre o processo ou resumo do que você fez.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Tech Context (`.github/config/tech_context.yml`)
|
|
2
|
+
|
|
3
|
+
Fonte de verdade **estática** da stack do sistema (RFC-002 §4). O `generate-plan` lê este arquivo para embasar o plano técnico e usar **APENAS** as tecnologias e serviços nele declarados — sem ele, o plano fica genérico e pode inventar APIs inexistentes.
|
|
4
|
+
|
|
5
|
+
O `npx @spec-wave/cli@latest init` gera um **scaffold de exemplo** que **deve ser adaptado** à stack real. Use este fluxo quando o arquivo estiver ausente ou desatualizado.
|
|
6
|
+
|
|
7
|
+
## Como ajudar a criar
|
|
8
|
+
|
|
9
|
+
1. **Confirme a ausência:** tente `Read .github/config/tech_context.yml`. Se já existir, confirme com o usuário se reflete a stack atual e pule para o fim.
|
|
10
|
+
|
|
11
|
+
2. **Detecte a stack lendo os arquivos do repositório** (use Read — **não invente**):
|
|
12
|
+
|
|
13
|
+
| Arquivo | O que extrair |
|
|
14
|
+
|---------|---------------|
|
|
15
|
+
| `package.json` | backend/frontend e libs (`@nestjs/core`, `next`, `react`, `@prisma/client`, `express`) |
|
|
16
|
+
| `pom.xml` / `build.gradle` | stack Java |
|
|
17
|
+
| `requirements.txt` / `pyproject.toml` | stack Python |
|
|
18
|
+
| `go.mod` | stack Go |
|
|
19
|
+
| `prisma/schema.prisma` ou `migrations/` | tabelas e colunas para `database_schemas` |
|
|
20
|
+
| `Dockerfile` / `docker-compose.yml` / charts Helm | `infra` |
|
|
21
|
+
| enums de RBAC no código | `security.rbac_roles` |
|
|
22
|
+
|
|
23
|
+
3. **Rascunhe** o YAML seguindo EXATAMENTE este schema. Preencha só o que conseguir confirmar; deixe `# TODO` no que faltar:
|
|
24
|
+
|
|
25
|
+
```yaml
|
|
26
|
+
system_info:
|
|
27
|
+
name: "<nome do sistema>"
|
|
28
|
+
stack:
|
|
29
|
+
backend: "<ex.: Node.js (NestJS v11)>"
|
|
30
|
+
frontend: "<ex.: Next.js 16 (React 19)>"
|
|
31
|
+
database: "<ex.: PostgreSQL (Prisma 5)>"
|
|
32
|
+
infra: "<ex.: Docker / Kubernetes>"
|
|
33
|
+
architecture: "<ex.: Monorepo Nx / Microservices>"
|
|
34
|
+
security:
|
|
35
|
+
auth_protocol: "<ex.: JWT>"
|
|
36
|
+
rbac_roles: ["ADMIN", "..."]
|
|
37
|
+
database_schemas:
|
|
38
|
+
- table: "<tabela>"
|
|
39
|
+
columns: "<col1, col2, ...>"
|
|
40
|
+
existing_services:
|
|
41
|
+
- name: "<serviço>"
|
|
42
|
+
endpoint: "<caminho>"
|
|
43
|
+
auth: "<ex.: JWT, mTLS>"
|
|
44
|
+
internal_libraries:
|
|
45
|
+
- "<lib interna>"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
4. **Mostre o rascunho ao usuário e peça confirmação/ajustes** antes de gravar — ele conhece serviços internos e roles que o código pode não revelar.
|
|
49
|
+
|
|
50
|
+
5. **Grave** com Write em `.github/config/tech_context.yml`.
|
|
51
|
+
|
|
52
|
+
6. **Oriente a commitar e pushar antes de seguir** — o Action lê do repositório, não do disco local. Sugira ao usuário rodar, via prefixo `!`:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
!git add .github/config/tech_context.yml && git commit -m "chore: tech_context.yml [spec-wave]" && git push
|
|
56
|
+
```
|
|
@@ -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.
|