@spec-wave/cli 0.5.7 → 0.5.9

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.
@@ -0,0 +1,520 @@
1
+ ---
2
+ name: spec-wave
3
+ description: "Use when the user wants to set up a spec-driven GitHub workflow, create a Feature issue, generate spec.md or plan.md, decompose a Feature into Stories/Tasks, write RFC documentation, or audit and fix a Pull Request. Implements the RFC-001 workflow with GitHub Projects v2, labels, and AI-powered GitHub Actions."
4
+ argument-hint: "[info|setup|issue|feature|spec|plan|ready|decompose|implement|uninstall|rfc|fix-pr] [target]"
5
+ user-invocable: true
6
+ allowed-tools:
7
+ - Bash(npx @spec-wave/cli *)
8
+ - Bash(gh issue *)
9
+ - Bash(gh project *)
10
+ - Bash(gh repo view *)
11
+ - Bash(gh auth status)
12
+ - Bash(gh pr *)
13
+ - Bash(gh api *)
14
+ - Bash(git add *)
15
+ - Bash(git commit *)
16
+ - Bash(git push *)
17
+ - Bash(git checkout *)
18
+ - Read
19
+ - Edit
20
+ - Write
21
+ - Agent
22
+ ---
23
+
24
+ # spec-wave Skill
25
+
26
+ Este skill guia o usuário pelo fluxo spec-driven definido no RFC-001.
27
+
28
+ > **Antes de responder a qualquer sub-comando**, leia o arquivo `rfc/rfc-integrate-spec-kit-into-kanban.md` se ele existir no diretório atual, para embasar suas respostas no processo real da equipe.
29
+
30
+ > **Verifique se esta skill está atualizada:** logo no topo deste arquivo há um banner `spec-wave skill vX.Y.Z` (inserido na instalação). Compare com `npx @spec-wave/cli --version`. Se a CLI for **mais recente**, esta skill está desatualizada — avise o usuário e sugira rodar `npx @spec-wave/cli install-skill --force` para atualizá-la (a skill é uma cópia estática e **não** acompanha o `npx` sozinha). Se o banner estiver ausente, a skill foi instalada por uma versão antiga: sugira a mesma atualização.
31
+
32
+ ---
33
+
34
+ ## Detecção de configuração (faça isto primeiro, sempre)
35
+
36
+ Antes de qualquer sub-comando, leia o arquivo `.spec-wave.json` na raiz do repositório atual (use o tool Read). Esse arquivo é gravado pelo `npx @spec-wave/cli init` e é a fonte de estado persistente entre sessões.
37
+
38
+ - **Se existir**, o spec-wave já foi configurado. Use seus campos para contextualizar as respostas, sem perguntar de novo:
39
+ - `owner`/`repo` → repositório alvo dos comandos `gh`
40
+ - `project.url` / `project.title` → o GitHub Project a referenciar
41
+ - `version` → versão da CLI usada no `init` (compare com `npx @spec-wave/cli --version`; se divergir, sugira `npx @spec-wave/cli refresh --config` para atualizar o arquivo, ou re-rodar o `init` para atualizar workflows/labels)
42
+ - `initializedAt` → quando foi configurado
43
+ Não rode `/spec-wave setup` de novo a menos que o usuário peça explicitamente.
44
+ - **Se não existir**, o repositório provavelmente ainda não foi configurado. Sugira começar por `/spec-wave setup`.
45
+
46
+ Exemplo de `.spec-wave.json`:
47
+ ```json
48
+ {
49
+ "version": "0.1.0",
50
+ "owner": "acme",
51
+ "repo": "loja",
52
+ "project": {
53
+ "title": "loja — Spec Wave",
54
+ "url": "https://github.com/users/acme/projects/5",
55
+ "id": "PVT_..."
56
+ },
57
+ "initializedAt": "2026-06-18T13:40:00.000Z"
58
+ }
59
+ ```
60
+
61
+ ---
62
+
63
+ ## Regra fundamental
64
+
65
+ **Nunca gere `spec.md` ou `plan.md` diretamente.** Sempre acione a label correspondente e deixe o GitHub Action gerar o arquivo. Isso garante que o arquivo seja commitado no repositório e referenciado na issue.
66
+
67
+ Exceção: se o usuário pedir explicitamente para revisar ou melhorar um documento já gerado, use o Write tool para editar o arquivo local.
68
+
69
+ ---
70
+
71
+ ## Fluxo Kanban
72
+
73
+ ```
74
+ 📥 Backlog → 🎯 Priorizado → 📋 Spec → 📋 Plan → ✅ Ready
75
+ → 📋 Backlog Técnico → 🚧 Desenvolvimento → 👀 Code Review
76
+ → 🧪 QA → 📋 Homologação → 🚀 Deploy → 🎉 Done
77
+ ```
78
+
79
+ Labels de gatilho:
80
+ - `spec-wave:spec` → dispara `generate-spec.yml` → gera `spec.md` (especificação funcional, primeiro)
81
+ - `spec-wave:plan` → dispara `generate-plan.yml` → gera `plan.md` (plano técnico, a partir da spec)
82
+ - `spec-wave:ready` → dispara `validate.yml` → valida ambos os arquivos
83
+ - `spec-wave:decompose` → dispara `decompose.yml` → gera Stories e Tasks
84
+
85
+ A etapa **🚧 Desenvolvimento** é coberta pelo comando **local** `npx @spec-wave/cli implement <número>` (não é uma label/Action): lê uma Story ou Task e aciona o spec-kit para implementar. Veja `/spec-wave implement`.
86
+
87
+ ---
88
+
89
+ ## Referência da CLI (conheça os parâmetros ANTES de executar)
90
+
91
+ Esta skill é um **wrapper** da CLI `@spec-wave/cli`, sempre invocada como `npx @spec-wave/cli <comando>`. Regra de ouro: **nunca rode um comando sem os parâmetros que ele aceita** esperando que ele pergunte — colete os valores com o usuário e passe via flags. Em especial, **`init` sem `--repo` abre um wizard interativo (@clack/prompts) que a skill NÃO consegue dirigir** — sempre passe `--repo`.
92
+
93
+ ### `@spec-wave/cli init` — configura o repositório
94
+ | Flag | Tipo | Descrição |
95
+ |------|------|-----------|
96
+ | `--repo <owner/repo>` | string | Repositório alvo. **Passe SEMPRE** para evitar o wizard interativo. |
97
+ | `--project-title <title>` | string | Nome do GitHub Project. Padrão: `<repo> — Spec Wave`. |
98
+ | `--skip-project` | flag | Pula a criação do Project (use ao re-rodar se já existe). |
99
+ | `--skip-labels` | flag | Pula a criação das labels. |
100
+ | `--skip-files` | flag | Pula a criação dos workflows + issue templates. |
101
+ | `--dry-run` | flag | Simula a configuração sem alterar nada. |
102
+
103
+ ### `@spec-wave/cli issue` — cria um work item tipado, opcionalmente como sub-issue, e adiciona ao board
104
+ | Flag | Tipo | Descrição |
105
+ |------|------|-----------|
106
+ | `--title <title>` | string (obrigatório) | Título, **sem** o prefixo de tipo (a CLI adiciona, ex.: `[STORY]`). |
107
+ | `--type <type>` | string | `initiative`, `epic`, `feature`, `story`, `task`, `bug`, `spike` ou `rfc`. Default: `feature`. |
108
+ | `--parent <n>` | string | Número da issue pai — cria como **sub-issue** dela (relação nativa do GitHub). |
109
+ | `--body <text>` | string | Descrição. |
110
+ | `--priority <p>` | string | **Opcional.** `P0`, `P1`, `P2` ou `P3`. Omita se o usuário não pediu — a prioridade fica `null` (sem prioridade). Nunca atribua por conta própria. |
111
+ | `--area <area>` | string | `Frontend`, `Backend`, `Mobile`, `Infra`, `DevOps` ou `Data`. |
112
+
113
+ > Faz tudo: cria a issue (label de tipo — e de prioridade **apenas se `--priority` for informado**), vincula ao parent como sub-issue, adiciona ao Project e define os campos **Etapa = 📥 Backlog**, **Work Item Type**, **Area** e, **só se informada, Priority**. Grava `Parent: #N` no corpo. Lê o Project do `.spec-wave.json`. **Não use `gh issue create` direto** — ele não adiciona ao board nem vincula o parent.
114
+
115
+ ### `@spec-wave/cli initiative` — atalho de `issue --type initiative`
116
+ Cria o nó raiz da hierarquia (agrupa Epics). Mesmas flags do `issue` exceto `--type` (fixo em `initiative`) e `--parent` (Initiative é raiz, não tem pai).
117
+
118
+ ### `@spec-wave/cli feature` — atalho de `issue --type feature`
119
+ Mesmas flags do `issue` (exceto `--type`, fixo em `feature`). Mantido para o fluxo do RFC-001.
120
+
121
+ ### `@spec-wave/cli uninstall` — remove a configuração (mantém o Project)
122
+ | Flag | Tipo | Descrição |
123
+ |------|------|-----------|
124
+ | `--repo <owner/repo>` | string | Repositório (default: lê do `.spec-wave.json`). |
125
+ | `--skip-labels` | flag | Não remove as labels. |
126
+ | `--skip-files` | flag | Não remove os arquivos `.github`. |
127
+ | `--keep-config` | flag | Mantém o `.spec-wave.json` local. |
128
+ | `--dry-run` | flag | Mostra o que seria removido sem alterar nada. |
129
+ | `--yes` | flag | Não pede confirmação. |
130
+
131
+ > Remove labels + arquivos `.github` + `.spec-wave.json`. **NUNCA apaga o GitHub Project** (preserva o histórico do board) — o usuário deve excluí-lo manualmente se quiser.
132
+
133
+ ### `@spec-wave/cli info` — status de configuração do repo atual
134
+ | Flag | Tipo | Descrição |
135
+ |------|------|-----------|
136
+ | `--json` | flag | Saída JSON (`{"initialized":bool, ...}`) para parsing programático. |
137
+
138
+ ### `@spec-wave/cli refresh` — atualiza o `.spec-wave.json` local
139
+ | Flag | Tipo | Descrição |
140
+ |------|------|-----------|
141
+ | `--config` | flag | Re-consulta o GitHub Project e reescreve o `.spec-wave.json` (IDs do campo Etapa, opções, number, versão da CLI). |
142
+
143
+ > Use quando o `.spec-wave.json` estiver desatualizado: repos inicializados por uma versão antiga (sem `etapaFieldId`/`stageOptions`), Project renomeado, ou versão da CLI divergente. Escreve no arquivo **local** — faça commit depois.
144
+
145
+ ### `@spec-wave/cli generate-plan` · `generate-spec` · `validate` · `decompose`
146
+ | Flag | Tipo | Descrição |
147
+ |------|------|-----------|
148
+ | `--issue-number <n>` | string (obrigatório) | Número da issue no GitHub. |
149
+
150
+ > ⚠️ Esses quatro comandos são executados pelos **GitHub Actions** (disparados por labels), **não** pela skill diretamente. Veja a *Regra fundamental*: para gerar plan/spec/decompor, adicione a **label** correspondente — não rode o comando à mão (a não ser para debug local).
151
+
152
+ ### `@spec-wave/cli implement` — aciona o spec-kit para uma Story ou Task (comando LOCAL)
153
+ | Flag/Arg | Tipo | Descrição |
154
+ |----------|------|-----------|
155
+ | `<issue>` | string (obrigatório) | Número da issue (Story ou Task), ex.: `12` ou `#12`. Argumento posicional. |
156
+ | `--feature-dir <path>` | string | Caminho `docs/features/<slug>` para anexar `spec.md`/`plan.md` como contexto (sobrescreve a resolução automática). |
157
+ | `--dry-run` | flag | Monta o contexto e imprime o comando do spec-kit **sem executar**. |
158
+
159
+ > Diferente dos quatro acima, `implement` roda **localmente** (lê `.spec-wave.json`, como `issue`), não por Action. Detecta o tipo da issue: **Story** → coleta todas as Tasks (sub-issues) e aciona o spec-kit uma única vez; **Task** → só aquela task. Monta o contexto em `.spec-wave/implement-<n>.md` e chama o comando configurado em `specKit.command` (no `.spec-wave.json`) ou na env `SPEC_WAVE_IMPLEMENT_CMD`. Placeholders disponíveis no template: `{tasksFile} {specFile} {planFile} {issue} {type} {title}`. Se nada estiver configurado, ele apenas monta o contexto e mostra como configurar (não executa). O contexto inclui instruções para o agente implementar as Tasks **sequencialmente, uma por vez**: mover a task para **🚧 Desenvolvimento** só ao iniciá-la e para **🎉 Done** ao concluí-la, antes de passar para a próxima (nunca todas em "in progress" ao mesmo tempo). **Ao concluir toda a Story**: fazer o commit, abrir o PR e mover a **Feature** e a **Story** para **👀 Code Review** (as Tasks permanecem em 🎉 Done).
160
+
161
+ ---
162
+
163
+ ## Sub-comandos
164
+
165
+ ### `/spec-wave info`
166
+
167
+ Mostra se o repositório atual já foi configurado com o spec-wave.
168
+
169
+ **Passos:**
170
+ 1. Execute: `npx @spec-wave/cli info`
171
+ 2. **Se o repositório estiver inicializado**, o comando mostra os dados do `.spec-wave.json` (owner/repo, project, versão da CLI, data). Apresente essas informações ao usuário.
172
+ 3. **Se NÃO estiver inicializado**, pergunte ao usuário: "Este repositório ainda não foi configurado com o spec-wave. Quer rodar o `init` agora?"
173
+ - Se sim → siga o fluxo de `/spec-wave setup`.
174
+ - Se não → encerre sem alterar nada.
175
+
176
+ ---
177
+
178
+ ### `/spec-wave setup`
179
+
180
+ Configura o spec-wave no repositório. Você dirige o `init` com flags — **nunca rode `npx @spec-wave/cli init` sem `--repo`** (abre o wizard interativo que você não controla).
181
+
182
+ **Passos:**
183
+ 1. **Já configurado?** Leia `.spec-wave.json` (ou rode `npx @spec-wave/cli info`). Se existir, avise (mostre `project.url` e `version`) e confirme com o usuário antes de reconfigurar.
184
+ 2. **Descubra o repositório alvo** (parâmetro `--repo`): rode `gh repo view --json nameWithOwner -q .nameWithOwner` para obter `owner/repo` do repo atual. Confirme com o usuário; se não houver remote, pergunte o `owner/repo`.
185
+ 3. **Pergunte o título do Project** (parâmetro `--project-title`). Ofereça o default `<repo> — Spec Wave` e aceite-o se o usuário não tiver preferência.
186
+ 4. **Cheque o auth:** `gh auth status`. Se faltarem os escopos `project,repo,workflow`, oriente o usuário a rodar ele mesmo `gh auth refresh --scopes project,repo,workflow` (comando interativo — o usuário executa, não você).
187
+ 5. **(Opcional) Pré-visualize** antes de aplicar: `npx @spec-wave/cli init --repo <owner/repo> --dry-run`.
188
+ 6. **Execute com os parâmetros coletados:**
189
+ ```bash
190
+ npx @spec-wave/cli init --repo <owner/repo> --project-title "<título>"
191
+ ```
192
+ Use `--skip-project` / `--skip-labels` / `--skip-files` **apenas** para re-rodar uma fase específica que falhou antes.
193
+ 7. O `init` cria o Project, as labels, os workflows, um **scaffold de `.github/config/tech_context.yml`** (só se ainda não existir) e grava `.spec-wave.json`. Oriente o usuário a fazer `git pull` para trazer os arquivos ao checkout local.
194
+ 8. **Adapte o `tech_context.yml`**: o scaffold vem com dados de exemplo. Ofereça ajustá-lo à stack real do repo seguindo a seção **Tech Context** (perto do comando `/spec-wave plan`) — isso melhora muito a qualidade do `plan.md`.
195
+ 9. Instrua o usuário a adicionar a chave de IA como secret no repositório (Settings → Secrets → Actions): `ANTHROPIC_API_KEY` (Anthropic) ou `OPENROUTER_API_KEY` (OpenRouter), conforme o provider escolhido no `init`.
196
+
197
+ ---
198
+
199
+ ### `/spec-wave issue <tipo> <descrição>` · `/spec-wave initiative <descrição>` · `/spec-wave feature <descrição>`
200
+
201
+ Crie um work item tipado (Initiative/Epic/Feature/Story/Task/...) já adicionado ao board em **📥 Backlog**, opcionalmente como sub-issue de um parent.
202
+
203
+ **Hierarquia típica:** Initiative → Epic → Feature → Story → Task. A **Initiative** é o nó raiz e agrupa Epics. Use `--parent <n>` para criar como sub-issue do nível acima (ex.: um Epic filho de uma Initiative, ou uma Story filha de uma Feature). O GitHub mostra o parent na issue filha e vice-versa; a CLI ainda grava `Parent: #N` no corpo.
204
+
205
+ **Passos:**
206
+ 1. Pergunte ao usuário: tipo (initiative/epic/feature/story/task/...), título (sem prefixo), descrição e se há uma issue **pai** (número). **Prioridade e área são opcionais**: só as inclua se o usuário pedir explicitamente. **Nunca atribua uma prioridade por conta própria** — se o usuário não informou, **omita `--priority`** e a prioridade fica `null` (sem prioridade) no board.
207
+ 2. Execute o comando com os parâmetros coletados (inclua **apenas** as flags que o usuário forneceu):
208
+ ```bash
209
+ npx @spec-wave/cli issue \
210
+ --type "<tipo>" \
211
+ --title "<título>" \
212
+ --body "<descrição>" \
213
+ --area "<área>" \ # opcional — omita se o usuário não informou
214
+ --priority "<prioridade>" \ # opcional — só se o usuário pediu; caso contrário OMITA (prioridade fica null)
215
+ --parent "<número-do-pai>" # opcional
216
+ ```
217
+ Para Features, pode usar o atalho `npx @spec-wave/cli feature --title ...` (equivale a `--type feature`).
218
+ A CLI cria a issue (label de tipo — e de prioridade **apenas se `--priority` for informado**), vincula como sub-issue do parent, adiciona ao Project e define Etapa = 📥 Backlog + Work Item Type + Area (+ Priority só se informada). **Não use `gh issue create`** (não adiciona ao board nem vincula o parent).
219
+ 3. Informe o número criado e o vínculo com o pai (se houver).
220
+ 4. Para Features: "Quando quiser iniciar, mova para **📋 Spec** e use `/spec-wave spec <número>` para gerar a especificação funcional (o plano técnico vem depois)".
221
+
222
+ ---
223
+
224
+ ### `/spec-wave uninstall`
225
+
226
+ Remove a configuração do spec-wave do repositório (labels, arquivos `.github`, `.spec-wave.json`). **Não apaga o GitHub Project.**
227
+
228
+ **Passos:**
229
+ 1. Confirme com o usuário que ele quer remover (a ação remove labels e faz commits removendo os workflows).
230
+ 2. Mostre antes o que será removido com `npx @spec-wave/cli uninstall --dry-run`.
231
+ 3. Execute `npx @spec-wave/cli uninstall` (a CLI pede confirmação; use `--yes` só se o usuário já confirmou).
232
+ 4. Lembre o usuário de excluir o **GitHub Project** manualmente, se desejar — a CLI não o apaga de propósito.
233
+
234
+ ---
235
+
236
+ ### `/spec-wave spec <número-da-issue>`
237
+
238
+ Inicia a geração da **especificação funcional** para uma Feature. É o **primeiro** passo do ciclo de documentos (antes do plano técnico).
239
+
240
+ **Passos:**
241
+ 1. Adicione a label de gatilho:
242
+ ```bash
243
+ gh issue edit <número> --add-label "spec-wave:spec"
244
+ ```
245
+ 2. Informe: "Label `spec-wave:spec` adicionada. O GitHub Action `generate-spec.yml` irá gerar o `spec.md` automaticamente."
246
+ 3. Após a conclusão, ofereça revisar o spec.md gerado em `docs/features/<slug>/spec.md`.
247
+ 4. Próximo passo: gerar o plano técnico — mova para **📋 Plan** e use `/spec-wave plan <número>`.
248
+
249
+ ---
250
+
251
+ ### `/spec-wave plan <número-da-issue>`
252
+
253
+ Inicia a geração do **plano técnico** para uma Feature, derivado da especificação. É o **segundo** passo (a spec deve existir antes).
254
+
255
+ O plano técnico segue o schema do RFC-002 §3.2: **Estratégia Técnica** (com Matriz de Rastreabilidade), **Detalhamento da Implementação**, **Segurança e Conformidade**, **Estratégia de Testes** e **Rollback e Monitoramento**. O agente usa o `tech_context` do repositório (`.github/config/tech_context.yml` + versões de pacote e migrations recentes) para embasar o plano e usar APENAS as tecnologias declaradas. Para desvios pontuais, adicione uma seção `## Tech Override` no corpo da issue (RFC-002 §4.3).
256
+
257
+ **Passos:**
258
+ 1. Verifique se `spec.md` já existe em `docs/features/<slug>/` (o plano usa a especificação funcional como contexto). Se não existir, gere a spec primeiro com `/spec-wave spec <número>`.
259
+ 2. **Garanta o `tech_context`** (a qualidade do plano depende disso). Verifique se `.github/config/tech_context.yml` existe no repo (use Read). **Se não existir, ajude a criar AGORA** seguindo a seção **Tech Context** abaixo (logo após este comando) — e garanta que esteja **commitado e pushado** antes de adicionar a label (o Action lê o arquivo do repositório, não do seu disco local).
260
+ 3. Adicione a label de gatilho:
261
+ ```bash
262
+ gh issue edit <número> --add-label "spec-wave:plan"
263
+ ```
264
+ 4. Informe: "Label `spec-wave:plan` adicionada. O GitHub Action `generate-plan.yml` irá gerar o `plan.md` automaticamente. Acompanhe em: Actions → Generate Plan."
265
+ 5. Após a conclusão (cheque comentários na issue ou aguarde confirmação do usuário), ofereça revisar o plan.md gerado em `docs/features/<slug>/plan.md`.
266
+ 6. Próximo passo: validar a Feature — mova para **✅ Ready** e use `/spec-wave ready <número>`.
267
+
268
+ ---
269
+
270
+ ### Tech Context (`.github/config/tech_context.yml`)
271
+
272
+ Fonte de verdade estática da stack do sistema (RFC-002 §4). O `generate-plan` lê este arquivo para embasar o plano técnico e usar **APENAS** as tecnologias/serviços nele declarados — sem ele, o plano fica genérico e pode inventar APIs inexistentes. O `npx @spec-wave/cli init` gera um **scaffold de exemplo** que **deve ser adaptado** à stack real. Use este fluxo quando o arquivo estiver ausente ou desatualizado.
273
+
274
+ **Como ajudar a criar (quando não existir):**
275
+
276
+ 1. **Confirme a ausência:** tente `Read .github/config/tech_context.yml`. Se já existir, apenas confirme com o usuário se reflete a stack atual e pule para o fim.
277
+ 2. **Detecte a stack** lendo os arquivos do repositório (use Read; não invente):
278
+ - `package.json` → backend/frontend e libs (ex.: `@nestjs/core`, `next`, `react`, `@prisma/client`, `express`).
279
+ - `pom.xml` / `build.gradle` (Java), `requirements.txt` / `pyproject.toml` (Python), `go.mod` (Go).
280
+ - `prisma/schema.prisma` ou pasta `migrations/` → tabelas e colunas para `database_schemas`.
281
+ - `Dockerfile` / `docker-compose.yml` / charts Helm → `infra`.
282
+ - Procure papéis/roles (enum de RBAC) no código para `security.rbac_roles`.
283
+ 3. **Rascunhe** o YAML seguindo EXATAMENTE este schema (preencha só o que conseguir confirmar; deixe `# TODO` no que faltar — não invente):
284
+ ```yaml
285
+ system_info:
286
+ name: "<nome do sistema>"
287
+ stack:
288
+ backend: "<ex.: Node.js (NestJS v11)>"
289
+ frontend: "<ex.: Next.js 16 (React 19)>"
290
+ database: "<ex.: PostgreSQL (Prisma 5)>"
291
+ infra: "<ex.: Docker / Kubernetes>"
292
+ architecture: "<ex.: Monorepo Nx / Microservices>"
293
+ security:
294
+ auth_protocol: "<ex.: JWT>"
295
+ rbac_roles: ["ADMIN", "..."]
296
+ database_schemas:
297
+ - table: "<tabela>"
298
+ columns: "<col1, col2, ...>"
299
+ existing_services:
300
+ - name: "<serviço>"
301
+ endpoint: "<caminho>"
302
+ auth: "<ex.: JWT, mTLS>"
303
+ internal_libraries:
304
+ - "<lib interna>"
305
+ ```
306
+ 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).
307
+ 5. **Grave** com Write em `.github/config/tech_context.yml`.
308
+ 6. **Oriente a commitar e pushar** antes de seguir (o Action lê do repo). Sugira ao usuário rodar, via prefixo `!`:
309
+ ```bash
310
+ !git add .github/config/tech_context.yml && git commit -m "chore: tech_context.yml [spec-wave]" && git push
311
+ ```
312
+
313
+ **Desvios pontuais:** para uma Feature específica usar algo fora do padrão (ex.: "usar DynamoDB só aqui"), oriente a adicionar uma seção `## Tech Override` no corpo da issue, com um bloco YAML que será mesclado (deep-merge) sobre o `tech_context.yml`:
314
+
315
+ ````markdown
316
+ ## Tech Override
317
+ ```yaml
318
+ system_info:
319
+ stack:
320
+ database: "DynamoDB"
321
+ ```
322
+ ````
323
+
324
+ ---
325
+
326
+ ### `/spec-wave ready <número-da-issue>`
327
+
328
+ Valida que spec.md e plan.md estão completos e a Feature pode avançar.
329
+
330
+ **Passos:**
331
+ 1. Adicione a label de validação:
332
+ ```bash
333
+ gh issue edit <número> --add-label "spec-wave:ready"
334
+ ```
335
+ 2. Informe: "Validação iniciada. O workflow verificará se spec.md e plan.md contêm todas as seções obrigatórias."
336
+ 3. Se a validação falhar, o workflow comentará os problemas na issue e adicionará automaticamente `spec-wave:spec`. Informe o usuário para corrigir e tentar novamente.
337
+ 4. Se passar, oriente: "Feature validada! Mova o card para **✅ Ready** e depois para **📋 Backlog Técnico** para iniciar a decomposição."
338
+
339
+ ---
340
+
341
+ ### `/spec-wave decompose <número-da-issue>`
342
+
343
+ Decompõe uma Feature em Stories e Tasks automaticamente.
344
+
345
+ **Passos:**
346
+ 1. Confirme que a Feature está em **✅ Ready** (spec.md e plan.md validados)
347
+ 2. Adicione a label de decomposição:
348
+ ```bash
349
+ gh issue edit <número> --add-label "spec-wave:decompose"
350
+ ```
351
+ 3. Informe: "Decomposição iniciada. O workflow gerará Stories e Tasks baseados em spec.md e plan.md."
352
+ 4. Após a conclusão, as issues filhas aparecerão como comentário na Feature pai.
353
+
354
+ ---
355
+
356
+ ### `/spec-wave implement <número-da-issue>`
357
+
358
+ Aciona o spec-kit para implementar uma **Story** (todas as suas Tasks) ou uma **Task** isolada. Comando **local** (etapa 🚧 Desenvolvimento) — não usa label/Action.
359
+
360
+ **Pré-requisitos:** o repositório atual precisa estar inicializado (`.spec-wave.json` presente) e a issue deve ser do tipo Story ou Task. Para executar de fato (fora do `--dry-run`), o spec-kit precisa estar configurado via `specKit.command` no `.spec-wave.json` ou a env `SPEC_WAVE_IMPLEMENT_CMD`.
361
+
362
+ **Passos:**
363
+ 1. Confirme que há `.spec-wave.json` no repo (senão, oriente `/spec-wave setup`).
364
+ 2. **Sempre comece com `--dry-run`** para inspecionar o que será feito — detecção do tipo, lista de Tasks coletadas (no caso de Story) e o comando do spec-kit que seria executado:
365
+ ```bash
366
+ npx @spec-wave/cli implement <número> --dry-run
367
+ ```
368
+ 3. Mostre ao usuário o contexto montado em `.spec-wave/implement-<número>.md` e o comando. Esse arquivo contém as **instruções de execução sequencial**: implemente as Tasks **uma por vez** — mova a task para **🚧 Desenvolvimento** só ao iniciá-la e para **🎉 Done** ao concluí-la, antes de passar para a próxima. **Nunca** coloque várias tasks em "in progress" ao mesmo tempo.
369
+ 4. **Se você (agente) for implementar diretamente** (sem `specKit.command`): siga o contexto task por task, na ordem listada, respeitando o ciclo In Progress → implementar → Done de cada task antes da seguinte. Atualize o campo "Etapa" do item no board via `gh`. **Ao concluir toda a Story**: faça o commit, abra o PR e mova a **Feature** e a **Story** para **👀 Code Review** (as Tasks ficam em 🎉 Done).
370
+ 5. Se o usuário aprovar e o spec-kit estiver configurado, rode sem `--dry-run`:
371
+ ```bash
372
+ npx @spec-wave/cli implement <número>
373
+ ```
374
+ - Se o spec-kit **não** estiver configurado, o comando só monta o contexto e mostra como configurar (`specKit.command` / `SPEC_WAVE_IMPLEMENT_CMD`). Ajude o usuário a definir o template (placeholders: `{tasksFile} {specFile} {planFile} {issue} {type} {title}`).
375
+ - Use `--feature-dir docs/features/<slug>` se a resolução automática da Feature falhar (a skill avisa com warning) e você quiser anexar `spec.md`/`plan.md` como contexto.
376
+ 6. Se a issue **não** for Story nem Task (ex.: Feature, Bug), o comando recusa — oriente o usuário: Features se decompõem (`/spec-wave decompose`); implemente as Stories/Tasks resultantes.
377
+ 7. Ao final (Story implementada, commit feito, PR aberto e Feature/Story em **👀 Code Review**): confirme o resultado com o usuário e oriente a revisão do PR.
378
+
379
+ ---
380
+
381
+ ### `/spec-wave rfc <tópico>`
382
+
383
+ Crie um documento RFC seguindo a estrutura do RFC-001.
384
+
385
+ **Passos:**
386
+ 1. Entreviste o usuário sobre: objetivo, problema atual, solução proposta, princípios, stakeholders afetados
387
+ 2. Escreva o RFC em português com as seções:
388
+ - 1. Objetivo
389
+ - 2. Princípios
390
+ - 3. Papéis e Responsabilidades
391
+ - 4. Estrutura de Trabalho
392
+ - 5. Fluxo de Trabalho
393
+ - 6. Automação
394
+ - 7. Métricas
395
+ - 8. Riscos e Mitigações
396
+ 3. Salve em `rfc/rfc-<slug-do-tópico>.md` usando o Write tool
397
+ 4. Crie uma issue de RFC:
398
+ ```bash
399
+ gh issue create --title "[RFC] <título>" --label "[RFC]"
400
+ ```
401
+
402
+ ---
403
+
404
+ ### `/spec-wave fix-pr <número-do-pr>`
405
+
406
+ Audita um Pull Request e corrige automaticamente os problemas encontrados — segurança, arquitetura, infraestrutura e qualidade de código. Cada fix vira um commit separado no branch do PR. Cada review comment recebe uma resposta com o hash do commit.
407
+
408
+ **Pré-requisitos:** `.spec-wave.json` deve existir (para resolver `owner/repo`). Token com permissão de push no branch do PR.
409
+
410
+ **Passos:**
411
+
412
+ 1. **Resolver contexto**
413
+ - Leia `.spec-wave.json` para obter `owner` e `repo`.
414
+ - Confirme o número do PR com o usuário se não vier como argumento.
415
+
416
+ 2. **Coletar dados do PR**
417
+ ```bash
418
+ gh pr view <número> --json number,title,headRefName,body,changedFiles
419
+ gh pr diff <número>
420
+ gh api repos/<owner>/<repo>/pulls/<número>/comments
421
+ gh api repos/<owner>/<repo>/pulls/<número>/reviews
422
+ ```
423
+ - Liste todos os arquivos alterados.
424
+ - Colete todos os review comments (inline) e reviews gerais.
425
+
426
+ 3. **Fazer checkout no branch do PR**
427
+ ```bash
428
+ gh pr checkout <número>
429
+ ```
430
+
431
+ 4. **Varredura de problemas** — para cada categoria abaixo, leia os arquivos alterados e identifique issues:
432
+
433
+ | Categoria | O que procurar |
434
+ |-----------|----------------|
435
+ | **Segurança** | Credenciais hardcoded, secrets/API keys expostas, configs inseguras, injeção SQL/XSS |
436
+ | **Arquitetura** | Dependências circulares, exports faltando, wiring incompleto, violações de camada |
437
+ | **Infraestrutura** | OIDC mal configurado, IAM permissivo demais, Dockerfile sem usuário não-root, state remoto ausente |
438
+ | **Qualidade** | sync-over-async, validação ausente, operações não idempotentes, error handling ausente |
439
+
440
+ Se não houver review comments manuais, use o agente `caveman:cavecrew-reviewer` para detecção automatizada:
441
+ ```
442
+ Agent(caveman:cavecrew-reviewer) → diff do PR + arquivos alterados
443
+ ```
444
+
445
+ 5. **Para cada problema encontrado:**
446
+ a. Leia o(s) arquivo(s) afetado(s) com Read
447
+ b. Aplique o fix com Edit
448
+ c. Faça commit separado:
449
+ ```bash
450
+ git add <arquivo>
451
+ git commit -m "fix: <problema> (issue #<N>)
452
+
453
+ <causa raiz>
454
+
455
+ Solution: <descrição do fix>"
456
+ ```
457
+ d. Push ao branch do PR:
458
+ ```bash
459
+ git push
460
+ ```
461
+
462
+ 6. **Responder aos review comments** — para cada comment inline do PR:
463
+ ```bash
464
+ gh api repos/<owner>/<repo>/pulls/<número>/comments/<comment-id>/replies \
465
+ -f body="✅ **FIXED** — commit **<HASH>**
466
+
467
+ \`\`\`<linguagem>
468
+ <trecho corrigido>
469
+ \`\`\`
470
+
471
+ <explicação do fix>"
472
+ ```
473
+
474
+ 7. **Comentário de sumário no PR**
475
+ ```bash
476
+ gh pr comment <número> --body "<sumário>"
477
+ ```
478
+ Formato do sumário:
479
+ ```
480
+ ## 🔍 PR Audit — Spec Wave
481
+
482
+ ### Problemas encontrados e corrigidos
483
+
484
+ | # | Severidade | Categoria | Problema | Commit |
485
+ |---|-----------|-----------|---------|--------|
486
+ | 1 | 🔴 Critical | Segurança | Credencial hardcoded em config.js | abc1234 |
487
+ | 2 | 🟡 Medium | Qualidade | Operação não idempotente em createOrder | def5678 |
488
+
489
+ ### Commits criados
490
+ - `abc1234` fix: credencial hardcoded removida (issue #1)
491
+ - `def5678` fix: idempotency key adicionada em createOrder (issue #2)
492
+
493
+ **Total:** <N> problema(s) encontrado(s) e corrigido(s).
494
+ ```
495
+
496
+ **Output esperado:**
497
+ - Lista de issues (severidade + impacto)
498
+ - Lista de commits criados (hash + mensagem)
499
+ - Confirmação de replies postadas nos review comments
500
+ - Estado final do PR
501
+
502
+ **Severidade:**
503
+ - 🔴 Critical — segurança, dados expostos, falha em produção
504
+ - 🟠 High — bug que afeta usuários, arquitetura quebrada
505
+ - 🟡 Medium — qualidade, manutenibilidade, performance
506
+ - 🔵 Low — estilo, naming, comentários
507
+
508
+ ---
509
+
510
+ ## Estrutura de arquivos gerados
511
+
512
+ ```
513
+ docs/
514
+ features/
515
+ <slug-da-feature>/
516
+ spec.md ← gerado pelo GitHub Action quando spec-wave:spec é adicionado (1º)
517
+ plan.md ← gerado pelo GitHub Action quando spec-wave:plan é adicionado (2º, usa a spec)
518
+ ```
519
+
520
+ O slug é gerado a partir do título da issue: `[FEATURE] Cadastro de Pedidos com PIX` → `cadastro-de-pedidos-com-pix`