@spec-wave/cli 0.14.0 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/bin/spec-wave.mjs +44 -2
- package/package.json +8 -2
- package/src/agent/anthropic-agent.mjs +337 -0
- package/src/agent/errors.mjs +33 -0
- package/src/agent/index.mjs +108 -0
- package/src/agent/openrouter-agent.mjs +378 -0
- package/src/agent/run-types.mjs +59 -0
- package/src/agent/telemetry.mjs +54 -0
- package/src/agent/tools.mjs +452 -0
- package/src/agent/tracing.mjs +106 -0
- package/src/api/github-rest.mjs +206 -2
- package/src/commands/bug.mjs +8 -0
- package/src/commands/code-review.mjs +45 -4
- package/src/commands/decompose.mjs +11 -49
- package/src/commands/dev-agent.mjs +3 -3
- package/src/commands/doctor.mjs +77 -6
- package/src/commands/generate-bug.mjs +195 -0
- package/src/commands/generate-plan.mjs +6 -20
- package/src/commands/generate-spec.mjs +6 -22
- package/src/commands/implement.mjs +105 -2
- package/src/commands/init.mjs +3 -3
- package/src/commands/install-skill.mjs +72 -16
- package/src/commands/issue.mjs +9 -7
- package/src/commands/move.mjs +11 -1
- package/src/commands/qa.mjs +23 -2
- package/src/commands/refresh.mjs +145 -5
- package/src/commands/triage.mjs +174 -0
- package/src/commands/update.mjs +352 -62
- package/src/commands/validate.mjs +82 -10
- package/src/config.mjs +159 -1
- package/src/lib/bug-context.mjs +160 -0
- package/src/lib/bug-doc.mjs +51 -0
- package/src/lib/bug-triage.mjs +81 -0
- package/src/lib/claude.mjs +71 -254
- package/src/lib/critique.mjs +43 -30
- package/src/lib/implement-board.mjs +12 -1
- package/src/lib/plugin-skills.mjs +122 -0
- package/src/lib/pr-branch.mjs +267 -0
- package/src/lib/prompt-loader.mjs +257 -0
- package/src/lib/skill-file.mjs +35 -0
- package/src/plugin/.claude-plugin/plugin.json +20 -0
- package/src/plugin/README.md +73 -0
- package/src/plugin/skills/bug/SKILL.md +60 -0
- package/src/plugin/skills/bug/model-prompt.critique.md +48 -0
- package/src/plugin/skills/bug/model-prompt.md +74 -0
- package/src/plugin/skills/decompose/SKILL.md +111 -0
- package/src/plugin/skills/decompose/model-prompt.critique.md +46 -0
- package/src/plugin/skills/decompose/model-prompt.feature.md +69 -0
- package/src/plugin/skills/decompose/model-prompt.rfc.md +52 -0
- package/src/plugin/skills/doctor/SKILL.md +51 -0
- package/src/plugin/skills/fix-pr/SKILL.md +130 -0
- package/src/plugin/skills/implement/SKILL.md +102 -0
- package/src/plugin/skills/info/SKILL.md +40 -0
- package/src/plugin/skills/issue/SKILL.md +63 -0
- package/src/plugin/skills/move/SKILL.md +52 -0
- package/src/plugin/skills/order/SKILL.md +36 -0
- package/src/plugin/skills/plan/SKILL.md +53 -0
- package/src/plugin/skills/plan/model-prompt.critique.md +44 -0
- package/src/plugin/skills/plan/model-prompt.md +59 -0
- package/src/plugin/skills/plan/reference/tech-context.md +56 -0
- package/src/plugin/skills/ready/SKILL.md +44 -0
- package/src/plugin/skills/rfc/SKILL.md +47 -0
- package/src/plugin/skills/setup/SKILL.md +67 -0
- package/src/plugin/skills/spec/SKILL.md +37 -0
- package/src/plugin/skills/spec/model-prompt.md +61 -0
- package/src/plugin/skills/story/SKILL.md +49 -0
- package/src/plugin/skills/task/SKILL.md +41 -0
- package/src/plugin/skills/triage/SKILL.md +52 -0
- package/src/plugin/skills/uninstall/SKILL.md +43 -0
- package/src/plugin/skills/update/SKILL.md +51 -0
- package/src/plugin/skills/workflow/SKILL.md +154 -0
- package/src/templates/skill/SKILL.md +69 -7
- package/src/templates/workflows/generate-bug.yml +36 -0
- package/src/templates/workflows/validate.yml +2 -1
- package/src/ui/wizard.mjs +5 -2
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spec-wave-fix-pr
|
|
3
|
+
description: "Use para auditar um Pull Request e corrigir os problemas encontrados — segurança, arquitetura, infraestrutura e qualidade — gerando um commit separado por fix, respondendo cada review comment com o hash do commit e postando um sumário no PR. Gatilhos: 'auditar o PR 42', 'corrigir os comentários de review', 'fix-pr 42', 'resolver os apontamentos do PR'."
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Bash(gh pr *)
|
|
6
|
+
- Bash(gh api *)
|
|
7
|
+
- Bash(git add *)
|
|
8
|
+
- Bash(git commit *)
|
|
9
|
+
- Bash(git push *)
|
|
10
|
+
- Bash(git checkout *)
|
|
11
|
+
- Read
|
|
12
|
+
- Edit
|
|
13
|
+
- Glob
|
|
14
|
+
- Grep
|
|
15
|
+
- Agent
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# spec-wave fix-pr — auditoria e correção de PR
|
|
19
|
+
|
|
20
|
+
Cada fix vira um **commit separado** no branch do PR. Cada review comment recebe uma **resposta com o hash do commit**.
|
|
21
|
+
|
|
22
|
+
**Pré-requisitos:** `.spec-wave.json` deve existir (para resolver `owner/repo`). Token com permissão de push no branch do PR.
|
|
23
|
+
|
|
24
|
+
## Passos
|
|
25
|
+
|
|
26
|
+
### 1. Resolver contexto
|
|
27
|
+
|
|
28
|
+
Leia `.spec-wave.json` para obter `owner` e `repo`. Confirme o número do PR com o usuário se não vier como argumento.
|
|
29
|
+
|
|
30
|
+
### 2. Coletar dados do PR
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
gh pr view <número> --json number,title,headRefName,body,changedFiles
|
|
34
|
+
gh pr diff <número>
|
|
35
|
+
gh api repos/<owner>/<repo>/pulls/<número>/comments
|
|
36
|
+
gh api repos/<owner>/<repo>/pulls/<número>/reviews
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Liste todos os arquivos alterados e colete os review comments (inline) e reviews gerais.
|
|
40
|
+
|
|
41
|
+
### 3. Checkout do branch
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
gh pr checkout <número>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 4. Varredura de problemas
|
|
48
|
+
|
|
49
|
+
Para cada categoria, leia os arquivos alterados e identifique issues:
|
|
50
|
+
|
|
51
|
+
| Categoria | O que procurar |
|
|
52
|
+
|-----------|----------------|
|
|
53
|
+
| **Segurança** | Credenciais hardcoded, secrets/API keys expostas, configs inseguras, injeção SQL/XSS |
|
|
54
|
+
| **Arquitetura** | Dependências circulares, exports faltando, wiring incompleto, violações de camada |
|
|
55
|
+
| **Infraestrutura** | OIDC mal configurado, IAM permissivo demais, Dockerfile sem usuário não-root, state remoto ausente |
|
|
56
|
+
| **Qualidade** | sync-over-async, validação ausente, operações não idempotentes, error handling ausente |
|
|
57
|
+
|
|
58
|
+
Se não houver review comments manuais, use um agente de review para detecção automatizada sobre o diff + arquivos alterados.
|
|
59
|
+
|
|
60
|
+
### 5. Corrigir, um commit por problema
|
|
61
|
+
|
|
62
|
+
Para cada problema: leia o arquivo (Read), aplique o fix (Edit), e commite isoladamente:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
git add <arquivo>
|
|
66
|
+
git commit -m "fix: <problema> (issue #<N>)
|
|
67
|
+
|
|
68
|
+
<causa raiz>
|
|
69
|
+
|
|
70
|
+
Solution: <descrição do fix>"
|
|
71
|
+
git push
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 6. Responder aos review comments
|
|
75
|
+
|
|
76
|
+
Para cada comment inline:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
gh api repos/<owner>/<repo>/pulls/<número>/comments/<comment-id>/replies \
|
|
80
|
+
-f body="✅ **FIXED** — commit **<HASH>**
|
|
81
|
+
|
|
82
|
+
\`\`\`<linguagem>
|
|
83
|
+
<trecho corrigido>
|
|
84
|
+
\`\`\`
|
|
85
|
+
|
|
86
|
+
<explicação do fix>"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 7. Sumário no PR
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
gh pr comment <número> --body "<sumário>"
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Formato:
|
|
96
|
+
|
|
97
|
+
```markdown
|
|
98
|
+
## 🔍 PR Audit — Spec Wave
|
|
99
|
+
|
|
100
|
+
### Problemas encontrados e corrigidos
|
|
101
|
+
|
|
102
|
+
| # | Severidade | Categoria | Problema | Commit |
|
|
103
|
+
|---|-----------|-----------|---------|--------|
|
|
104
|
+
| 1 | 🔴 Critical | Segurança | Credencial hardcoded em config.js | abc1234 |
|
|
105
|
+
| 2 | 🟡 Medium | Qualidade | Operação não idempotente em createOrder | def5678 |
|
|
106
|
+
|
|
107
|
+
### Commits criados
|
|
108
|
+
- `abc1234` fix: credencial hardcoded removida (issue #1)
|
|
109
|
+
- `def5678` fix: idempotency key adicionada em createOrder (issue #2)
|
|
110
|
+
|
|
111
|
+
**Total:** <N> problema(s) encontrado(s) e corrigido(s).
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Severidade
|
|
115
|
+
|
|
116
|
+
| Nível | Critério |
|
|
117
|
+
|-------|----------|
|
|
118
|
+
| 🔴 Critical | Segurança, dados expostos, falha em produção |
|
|
119
|
+
| 🟠 High | Bug que afeta usuários, arquitetura quebrada |
|
|
120
|
+
| 🟡 Medium | Qualidade, manutenibilidade, performance |
|
|
121
|
+
| 🔵 Low | Estilo, naming, comentários |
|
|
122
|
+
|
|
123
|
+
## Output esperado
|
|
124
|
+
|
|
125
|
+
- Lista de issues (severidade + impacto)
|
|
126
|
+
- Lista de commits criados (hash + mensagem)
|
|
127
|
+
- Confirmação das replies postadas nos review comments
|
|
128
|
+
- Estado final do PR
|
|
129
|
+
|
|
130
|
+
> Reporte fielmente: se um problema foi encontrado mas **não** corrigido (fora de escopo, exige decisão do usuário), diga isso explicitamente no sumário em vez de omitir.
|
|
@@ -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,53 @@
|
|
|
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 gere o `plan.md` você mesmo.** Aplique a label e deixe o Action gerar e commitar. Exceção: revisar/melhorar um plano já gerado.
|
|
16
|
+
|
|
17
|
+
**Contexto:** leia `.spec-wave.json` (Read). Ausente → skill **setup**.
|
|
18
|
+
|
|
19
|
+
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.
|
|
20
|
+
|
|
21
|
+
## Passos
|
|
22
|
+
|
|
23
|
+
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**).
|
|
24
|
+
|
|
25
|
+
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.
|
|
26
|
+
|
|
27
|
+
3. Adicione a label de gatilho:
|
|
28
|
+
```bash
|
|
29
|
+
gh issue edit <número> --add-label "spec-wave:plan"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
4. Informe: "Label `spec-wave:plan` adicionada. O Action `generate-plan.yml` vai gerar o `plan.md`. Acompanhe em Actions → Generate Plan."
|
|
33
|
+
|
|
34
|
+
5. Quando concluir, ofereça revisar `docs/features/<slug>/plan.md`.
|
|
35
|
+
|
|
36
|
+
6. **Próximo passo:** validar a Feature — mova para **✅ Ready** e use a skill **ready**.
|
|
37
|
+
|
|
38
|
+
## Desvios pontuais (`## Tech Override`)
|
|
39
|
+
|
|
40
|
+
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`:
|
|
41
|
+
|
|
42
|
+
````markdown
|
|
43
|
+
## Tech Override
|
|
44
|
+
```yaml
|
|
45
|
+
system_info:
|
|
46
|
+
stack:
|
|
47
|
+
database: "DynamoDB"
|
|
48
|
+
```
|
|
49
|
+
````
|
|
50
|
+
|
|
51
|
+
## Se falhar
|
|
52
|
+
|
|
53
|
+
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
|
+
```
|