spec-first-claude 0.6.0-beta.9 → 0.7.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.
Files changed (55) hide show
  1. package/README.md +251 -166
  2. package/bin/cli.js +70 -70
  3. package/lib/init.js +92 -92
  4. package/lib/update.js +133 -133
  5. package/package.json +1 -1
  6. package/templates/.ai/memory/napkin.md +68 -68
  7. package/templates/.claude/CHANGELOG.md +550 -429
  8. package/templates/.claude/adapters/SETUP.md +314 -314
  9. package/templates/.claude/adapters/confluence.md +295 -295
  10. package/templates/.claude/adapters/errors.md +234 -234
  11. package/templates/.claude/adapters/filesystem.md +353 -353
  12. package/templates/.claude/adapters/interface.md +301 -301
  13. package/templates/.claude/adapters/naming.md +241 -241
  14. package/templates/.claude/adapters/registry.md +244 -244
  15. package/templates/.claude/agents/backend-coder.md +14 -14
  16. package/templates/.claude/agents/db-coder.md +165 -165
  17. package/templates/.claude/agents/doc-writer.md +66 -53
  18. package/templates/.claude/agents/frontend-coder.md +5 -5
  19. package/templates/.claude/agents/infra-coder.md +3 -3
  20. package/templates/.claude/agents/reviewer.md +6 -6
  21. package/templates/.claude/agents/security-reviewer.md +153 -153
  22. package/templates/.claude/commands/design.md +160 -216
  23. package/templates/.claude/commands/dev.md +194 -189
  24. package/templates/.claude/commands/discovery.md +414 -414
  25. package/templates/.claude/commands/extract.md +224 -249
  26. package/templates/.claude/commands/load.md +295 -295
  27. package/templates/.claude/commands/mcp.md +385 -385
  28. package/templates/.claude/commands/merge-docs.md +151 -100
  29. package/templates/.claude/commands/plan.md +151 -128
  30. package/templates/.claude/commands/publish.md +143 -143
  31. package/templates/.claude/commands/session-finish.md +83 -83
  32. package/templates/.claude/commands/sfw-start.md +191 -145
  33. package/templates/.claude/rules.md +229 -229
  34. package/templates/.claude/scripts/bootstrap-confluence.js +289 -223
  35. package/templates/.claude/templates/estrutura/apiContracts.template.md +160 -159
  36. package/templates/.claude/templates/estrutura/architecture.template.md +169 -168
  37. package/templates/.claude/templates/estrutura/conventions.template.md +214 -212
  38. package/templates/.claude/templates/estrutura/decisions.template.md +107 -107
  39. package/templates/.claude/templates/estrutura/domain.template.md +161 -160
  40. package/templates/.claude/templates/feature/PRD.template.md +135 -142
  41. package/templates/.claude/templates/feature/Progresso.template.md +141 -141
  42. package/templates/.claude/templates/feature/TRD.template.md +358 -0
  43. package/templates/.claude/templates/feature/context.template.md +89 -48
  44. package/templates/.claude/templates/feature/extract-log.template.md +49 -39
  45. package/templates/.claude/templates/feature/projetos.template.yaml +79 -79
  46. package/templates/.claude/templates/global/progresso_global.template.md +59 -57
  47. package/templates/.claude/templates/specs/brief.template.md +66 -59
  48. package/templates/.claude/templates/specs/contracts.template.md +147 -141
  49. package/templates/.claude/templates/specs/scenarios.template.md +125 -117
  50. package/templates/.claude/templates/specs/tasks.template.md +65 -63
  51. package/templates/CLAUDE.md +272 -268
  52. package/templates/_gitignore +35 -35
  53. package/templates/sfw.config.yml.example +147 -147
  54. package/templates/.claude/templates/feature/backlog-extraido.template.md +0 -156
  55. package/templates/.claude/templates/feature/sdd.template.md +0 -559
package/README.md CHANGED
@@ -1,166 +1,251 @@
1
- # spec-first-claude
2
-
3
- Kit completo para desenvolvimento **spec-first** com [Claude Code](https://claude.ai/code). A IA segue um pipeline disciplinado — da especificacao ao codigo — com checkpoints humanos e rastreabilidade ponta a ponta.
4
-
5
- ## O que e spec-first?
6
-
7
- Em vez de pedir pra IA "cria um CRUD de usuarios", voce fornece insumos brutos (docs, SQLs, rascunhos) e a IA:
8
-
9
- 1. **Extrai** requisitos estruturados (PRD)
10
- 2. **Espera sua aprovacao** (checkpoint humano)
11
- 3. **Gera design tecnico** (SDD) — fonte unica de verdade
12
- 4. **Planeja tasks** com dependencias e fases
13
- 5. **Implementa** com agentes especializados por area + security review
14
- 6. **Atualiza docs** automaticamente (delta specs)
15
-
16
- Resultado: codigo previsivel, seguro e rastreavel.
17
-
18
- ## Pre-requisitos
19
-
20
- - **Node.js** 18+
21
- - **Git** instalado
22
- - **Claude Code** instalado e configurado
23
-
24
- ### Windows (PowerShell)
25
-
26
- Se encontrar erro de script nao assinado ao rodar o CLI, execute:
27
-
28
- ```powershell
29
- Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
30
- ```
31
-
32
- ## Instalacao
33
-
34
- ```bash
35
- npm i -g spec-first-claude
36
- ```
37
-
38
- ## Uso
39
-
40
- ```bash
41
- spec-first-claude init --name=MeuProjeto
42
- ```
43
-
44
- Isso cria a pasta `MeuProjeto/` com toda a estrutura pronta:
45
-
46
- ```
47
- MeuProjeto/
48
- ├── .ai/memory/napkin.md <- Memoria persistente do projeto
49
- ├── .claude/ <- AI OPERATIONAL CONFIG
50
- │ ├── rules.md <- Regras de desenvolvimento
51
- │ ├── CHANGELOG.md <- Historico do framework
52
- │ ├── templates/ <- Templates do workflow
53
- │ │ ├── feature/ <- PRD, SDD, context, extract-log, Progresso, backlog, projetos.yaml
54
- │ │ ├── specs/ <- brief, contracts, scenarios, tasks (projecoes pro agent)
55
- │ │ ├── estrutura/ <- 5 templates de sintese cross-feature
56
- │ │ └── global/ <- Progresso global
57
- │ ├── adapters/ <- SourceAdapter + ConfluenceAdapter + FilesystemAdapter
58
- │ ├── commands/ <- 11 commands do workflow
59
- │ │ ├── mcp.md
60
- │ │ ├── load.md
61
- │ │ ├── publish.md
62
- │ │ ├── sfw-start.md <- entrada unica (substitui setup-projeto + feature)
63
- │ │ ├── discovery.md
64
- │ │ ├── extract.md
65
- │ │ ├── design.md
66
- │ │ ├── plan.md
67
- │ │ ├── dev.md
68
- │ │ ├── merge-docs.md <- renomeado de merge-delta
69
- │ │ └── session-finish.md
70
- │ └── agents/ <- 7 agentes especializados
71
- │ ├── backend-coder.md <- .NET 8 / C#
72
- │ ├── frontend-coder.md <- React
73
- │ ├── db-coder.md <- PostgreSQL
74
- │ ├── infra-coder.md <- Docker
75
- │ ├── doc-writer.md <- Documentacao
76
- │ ├── reviewer.md <- Code review
77
- │ └── security-reviewer.md <- Auditoria de seguranca
78
- ├── docs/ <- SINTESE CROSS-FEATURE (atualizada pelo /merge-docs)
79
- │ ├── architecture.md <- Containers, stack, ambientes, deploy
80
- │ ├── domain.md <- Visao de negocio + modelo de dados
81
- │ ├── conventions.md <- Auth, authz, LGPD, env vars, monitoramento
82
- │ ├── apiContracts.md <- Rotas, paginacao, erros, catalogo de endpoints
83
- │ └── decisions.md <- ADRs (append-only)
84
- ├── specs/ <- AGENT CONTRACTS (projecoes do SDD pro coder)
85
- │ └── {nome}/
86
- │ ├── brief.md <- Problema/Solucao (SDD §1+§2+§10)
87
- │ ├── contracts.md <- Sistema + Áreas tocadas (SDD §3-§7)
88
- │ ├── scenarios.md <- Fluxos/UI/CAs (SDD §5.2+§8+§9)
89
- │ └── tasks.md <- Tabela unica com coluna Area
90
- ├── workspace/ <- TEAM CONTENT
91
- │ ├── Input/ <- Jogue seus insumos aqui (nome livre)
92
- │ │ └── {nome}/ <- ex: app_barbearia, feat_login
93
- │ └── Output/ <- Docs narrativos pro humano (PRD, SDD, Progresso)
94
- ├── sfw.config.yml.example <- Manifesto de adapters (input/output)
95
- ├── CLAUDE.md <- Regras globais pro agente
96
- └── .gitignore
97
- ```
98
-
99
- ## Como comecar
100
-
101
- 1. Crie o projeto:
102
- ```bash
103
- spec-first-claude init --name=MeuProjeto
104
- cd MeuProjeto
105
- ```
106
-
107
- 2. Jogue seus insumos em `workspace/Input/<nome>/` qualquer formato.
108
- `<nome>` é livre: `app_barbearia`, `bootstrap`, `feat_login`, `bug_checkout`, etc.
109
- - `.md`, `.txt` (descricoes, requisitos, decisoes)
110
- - `.sql` (modelagem de banco)
111
- - `.csv`, `.xml`, `.html` (dados, configs)
112
- - `.png`, `.jpg`, `.pdf` (telas, diagramas)
113
-
114
- 3. Abra o Claude Code e rode:
115
- ```
116
- /sfw-start <nome>
117
- ```
118
-
119
- 4. O pipeline comeca. A IA detecta automaticamente se e first-run (docs/ ausente)
120
- ou feature (docs/ ja existe). Nao ha comandos diferentes pra setup vs feature.
121
-
122
- - Extrai PRD dos seus insumos (pode ser empty em scopes puro-tecnicos)
123
- - Para e pede sua aprovacao
124
- - Depois voce roda `/design`, `/plan`, `/dev` na sequencia
125
-
126
- ## Pipeline completo
127
-
128
- ```
129
- workspace/Input/<nome>/ (seus arquivos)
130
- |
131
- v
132
- /sfw-start <nome> --> /extract --> PRD (voce revisa e aprova)
133
- |
134
- v
135
- /design --> SDD + docs/ (first-run: cria 5 arquivos)
136
- (feature: gera só §Área-X + §11 delta)
137
- |
138
- v
139
- /plan --> tasks + Progresso.md
140
- |
141
- v
142
- /dev --> codigo nos repos
143
- + /merge-docs automatico
144
- (aplica §11 em docs/)
145
- ```
146
-
147
- Mesmo comando pra bootstrap e feature — `first_run` e derivado da ausencia/presenca de `docs/`.
148
-
149
- ## Opcoes do CLI
150
-
151
- ```
152
- spec-first-claude init --name=<nome> [--target=<caminho>]
153
- ```
154
-
155
- | Opcao | Descricao |
156
- |-------|-----------|
157
- | `--name` | Nome do projeto (obrigatorio) |
158
- | `--target` | Diretorio destino (default: `./<nome>`) |
159
-
160
- ## Links
161
-
162
- - [Repositorio](https://github.com/gustavomaritan-labs/spec-first-workflow)
163
-
164
- ## Licenca
165
-
166
- MIT
1
+ # spec-first-claude
2
+
3
+ [![npm version](https://img.shields.io/npm/v/spec-first-claude.svg)](https://www.npmjs.com/package/spec-first-claude)
4
+ [![license](https://img.shields.io/npm/l/spec-first-claude.svg)](https://github.com/gustavomaritan-labs/spec-first-workflow/blob/main/LICENSE)
5
+ [![node](https://img.shields.io/node/v/spec-first-claude.svg)](https://nodejs.org)
6
+
7
+ Kit completo de desenvolvimento **spec-first** para [Claude Code](https://claude.ai/code).
8
+ Pipeline disciplinado do insumo bruto ao código — com checkpoints humanos,
9
+ agents especializados por área, security review e rastreabilidade ponta a ponta.
10
+
11
+ > **v0.7.0 (estável)**TRD ressuscitado como peer do PRD, aprovação por persona,
12
+ > SDD eliminado. Ver [CHANGELOG](templates/.claude/CHANGELOG.md) para detalhes da migração v3→v4.
13
+
14
+ ---
15
+
16
+ ## Conteúdo
17
+
18
+ - [Pra quem é isso](#pra-quem-é-isso)
19
+ - [O que você ganha](#o-que-você-ganha)
20
+ - [Instalação](#instalação)
21
+ - [Estrutura gerada](#estrutura-gerada)
22
+ - [Pipeline passo a passo](#pipeline-passo-a-passo)
23
+ - [Commands disponíveis](#commands-disponíveis)
24
+ - [Agents especializados](#agents-especializados)
25
+ - [Backends plugáveis (adapters)](#backends-plugáveis-adapters)
26
+ - [Troubleshooting](#troubleshooting)
27
+ - [Links](#links)
28
+
29
+ ---
30
+
31
+ ## Pra quem é isso
32
+
33
+ Você gerencia projetos onde PMs/POs entregam requisitos em formatos
34
+ heterogêneos (docs no Confluence, SQLs de modelagem, wireframes, notas
35
+ dispersas) e quer que o desenvolvimento assistido por IA siga um processo
36
+ previsível. Sem "a IA adivinhou" — com specs aprovadas antes de uma linha
37
+ de código.
38
+
39
+ **Use-cases cobertos**:
40
+ - Bootstrap de projeto novo (define stack + arquitetura + primeiras features)
41
+ - Features novas em projeto existente (merge aditivo em docs cross-feature)
42
+ - Bugs e tasks técnicas (mesmo pipeline, escopo menor)
43
+ - Times multi-dev (contratos firmes via `specs/` + `projetos.yaml`)
44
+
45
+ ## O que você ganha
46
+
47
+ | Benefício | Como entrega |
48
+ |-----------|--------------|
49
+ | **Spec-first rígido** | Nenhum código sem PRD/TRD aprovados + `specs/` gerado |
50
+ | **Dois revisores, dois docs** | PM aprova PRD (produto), dev aprova TRD (técnico) |
51
+ | **Rastreabilidade total** | Cada RN, ADR, endpoint, task aponta pro insumo-fonte via hash SHA-256 |
52
+ | **Security by default** | Security Reviewer audita 6 categorias pós-dev (Auth, AuthZ, Injeção, PII, Headers, Banco) |
53
+ | **Backend-agnóstico** | Rode local (filesystem) ou sincronize com Confluence via MCP |
54
+ | **Multi-repo nativo** | `projetos.yaml` mapeia serviços repos; cada repo com branch/PR próprio |
55
+ | **Entregáveis contínuos** | Features obrigatoriamente faseadas (P1/P2/P3) nunca "tudo ou nada" |
56
+ | **Re-executável** | Toda skill pode rodar de novo; hashes detectam incremental |
57
+
58
+ ## Instalação
59
+
60
+ ```bash
61
+ npm i -g spec-first-claude
62
+ ```
63
+
64
+ **Pré-requisitos**: Node.js 18+, Git, [Claude Code](https://claude.ai/code) instalado.
65
+
66
+ **Windows (PowerShell)** — se o CLI não rodar por política de execução:
67
+ ```powershell
68
+ Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
69
+ ```
70
+
71
+ ## Primeiros passos
72
+
73
+ ```bash
74
+ # 1. Criar o projeto
75
+ spec-first-claude init --name=MeuProjeto
76
+ cd MeuProjeto
77
+
78
+ # 2. Jogar insumos brutos (qualquer formato)
79
+ # em workspace/Input/<nome>/
80
+ # Ex: workspace/Input/app_barbearia/visao.md + modelo.sql + decisoes.md
81
+
82
+ # 3. Abrir com Claude Code e iniciar o pipeline
83
+ # /sfw-start app_barbearia
84
+ ```
85
+
86
+ **Opções do CLI**:
87
+
88
+ | Opção | Descrição |
89
+ |-------|-----------|
90
+ | `--name` | Nome do projeto (obrigatório) |
91
+ | `--target` | Diretório destino (default: `./<name>`) |
92
+
93
+ ## Estrutura gerada
94
+
95
+ ```
96
+ MeuProjeto/
97
+ ├── .ai/memory/napkin.md <- Memória persistente (curada continuamente)
98
+ ├── .claude/ <- AI OPERATIONAL CONFIG
99
+ │ ├── rules.md <- Regras invioláveis + quality gate
100
+ │ ├── CHANGELOG.md <- Histórico do framework
101
+ │ ├── templates/ <- 17 templates do workflow
102
+ │ ├── feature/ <- PRD, TRD, context, extract-log, Progresso, projetos.yaml
103
+ │ ├── specs/ <- brief, contracts, scenarios, tasks (projeções pro coder)
104
+ │ ├── estrutura/ <- 5 docs cross-feature (architecture, domain, conventions, apiContracts, decisions)
105
+ │ └── global/ <- progresso_global
106
+ │ ├── adapters/ <- SourceAdapter interface + 2 implementations built-in
107
+ │ ├── commands/ <- 11 slash commands (ver tabela abaixo)
108
+ └── agents/ <- 7 perfis especializados (ver tabela abaixo)
109
+ ├── docs/ <- SÍNTESE CROSS-FEATURE (atualizada pelo /merge-docs)
110
+ ├── architecture.md <- Containers C4 + stack + ambientes + deploy
111
+ ├── domain.md <- Visão de negócio + modelo de dados consolidado
112
+ ├── conventions.md <- Auth, authz, LGPD, env vars, códigos de erro, monitoramento
113
+ │ ├── apiContracts.md <- Convenções de API + catálogo de endpoints
114
+ │ └── decisions.md <- ADRs (append-only)
115
+ ├── specs/ <- AGENT CONTRACTS (projeções de PRD+TRD pro coder)
116
+ └── {scope}/
117
+ │ ├── brief.md <- Problema/Solução
118
+ │ ├── contracts.md <- Sistema + áreas tocadas (schema, endpoints, integrações, RNs)
119
+ │ ├── scenarios.md <- Jornadas + CAs + estratégia de testes
120
+ │ └── tasks.md <- Tabela única com coluna Área (gerado pelo /plan)
121
+ ├── workspace/ <- TEAM CONTENT
122
+ ├── Input/ <- Insumos brutos (QUALQUER formato nunca modificar)
123
+ │ └── {scope}/ <- Nome livre (app_barbearia, feat_login, bug_checkout)
124
+ └── Output/ <- Docs narrativos pro humano
125
+ │ └── {scope}/
126
+ │ ├── PRD.md <- Requirements de produto (se insumos têm produto)
127
+ │ ├── TRD.md <- Requirements técnicos (se insumos têm técnica)
128
+ │ ├── Progresso.md <- Tracking de execução
129
+ │ └── .context.md <- Estado da pipeline (YAML)
130
+ ├── projetos/ <- Repos de código (gitignored, cada um com .git)
131
+ ├── projetos.yaml <- Manifesto de repos (gerado no first-run)
132
+ ├── sfw.config.yml.example <- Manifesto de adapters (input/output)
133
+ ├── CLAUDE.md <- Meta-regras pro agente
134
+ └── .gitignore
135
+ ```
136
+
137
+ **Três zonas, zero ambiguidade**:
138
+ - `.claude/` + `.ai/` → config operacional + memória (time edita raro)
139
+ - `docs/` → síntese cross-feature (atualizada pelo `/merge-docs`)
140
+ - `workspace/` → content compartilhável (Input = time, Output = workflow)
141
+
142
+ ## Pipeline passo a passo
143
+
144
+ ```
145
+ workspace/Input/<scope>/ (seus arquivos)
146
+
147
+
148
+ /sfw-start <scope> ──▶ /load ──▶ /discovery ──▶ /extract
149
+
150
+
151
+ PRD + TRD gerados
152
+
153
+ ┌──────── CHECKPOINT DUPLO ────────┐
154
+ │ PM aprova PRD | dev aprova TRD │
155
+ └──────────────────────────────────┘
156
+
157
+
158
+ /design ──▶ specs/ (sempre)
159
+ docs/ + projetos.yaml (first-run)
160
+
161
+
162
+ /plan ──▶ tasks.md + Progresso.md
163
+
164
+
165
+ /dev ──▶ código nos repos
166
+ + Security Review
167
+ + /merge-docs automático
168
+ (diff PRD+TRD ↔ docs/)
169
+ ```
170
+
171
+ Mesmo comando pra bootstrap e feature — `first_run` é derivado da
172
+ ausência/presença de `docs/`.
173
+
174
+ **Apresentação visual**: abra
175
+ [`apresentacao.html`](https://github.com/gustavomaritan-labs/spec-first-workflow/blob/main/packages/apresentacao.html)
176
+ pra ver o fluxo completo com personas, artefatos e adapters.
177
+
178
+ ## Commands disponíveis
179
+
180
+ | Command | Tipo | Função |
181
+ |---------|------|--------|
182
+ | `/mcp <provider>` | Setup | Configura backend externo (Confluence). Cria `.mcp.json` + `sfw.config.yml` |
183
+ | `/load <scope>` | Utilitária | Puxa Input do backend (incremental via hash) |
184
+ | `/publish <scope> <tipo>` | Utilitária | Publica PRD/TRD/Progresso nos targets. Auto-chamada por extract/plan |
185
+ | `/sfw-start <scope>` | Orquestrador | Entrada única. Cria `.context.md`, chama `/load` + `/discovery` + `/extract` |
186
+ | `/discovery <path>` | Atômica | Análise profunda prévia dos insumos (obrigatório em v4) |
187
+ | `/extract <scope>` | Atômica | Gera PRD e/ou TRD conforme conteúdo dos insumos |
188
+ | `/design <scope>` | Atômica | PRD+TRD aprovados → `specs/`. First-run também cria `docs/` + `projetos.yaml` |
189
+ | `/plan <scope>` | Atômica | Lê PRD + TRD + specs/ → tasks por área + Progresso.md |
190
+ | `/dev <scope>` | Atômica | Implementa tasks com loop (implement → test → review). Merge-docs automático no fim |
191
+ | `/merge-docs <scope>` | Atômica | Diff semântico PRD+TRD ↔ docs/ → atualiza síntese cross-feature |
192
+ | `/session-finish` | Utilitária | Encerra sessão: salva estado, atualiza napkin, gera retomada.md |
193
+
194
+ ## Agents especializados
195
+
196
+ | Agent | Área | Stack padrão | Modelo |
197
+ |-------|------|--------------|--------|
198
+ | Backend Coder | BACK | .NET 8 / C# (editável) | Sonnet (S/M) · Opus (L) |
199
+ | Frontend Coder | FRONT | React + Fusion (editável) | Sonnet (S/M) · Opus (L) |
200
+ | DB Coder | DB | PostgreSQL 16 (editável) | Sonnet (S/M) · Opus (L) |
201
+ | Infra Coder | INFRA | Docker | Sonnet (S/M) · Opus (L) |
202
+ | Doc Writer | DOC | — | Sonnet |
203
+ | Reviewer | Todas | — (quality gate) | Sonnet |
204
+ | Security Reviewer | Todas | — (gate pós-dev) | Opus |
205
+
206
+ Perfis em `.claude/agents/` — editáveis pelo time pra ajustar stack
207
+ específica do projeto (ex: Node.js em vez de .NET, Angular em vez de React).
208
+
209
+ ## Backends plugáveis (adapters)
210
+
211
+ Arquitetura de **adapter layer** via `sfw.config.yml`. Skills não conhecem
212
+ Confluence ou filesystem — chamam uma interface padrão. Novos backends
213
+ entram como plugins sem tocar o pipeline.
214
+
215
+ **Built-in**:
216
+ - **`FilesystemAdapter`** — zero dependência externa. Ideal pra times
217
+ offline, testes automatizados (mock natural), ou diretório compartilhado.
218
+ - **`ConfluenceAdapter`** — via MCP Atlassian. Conflict detection client-side.
219
+ PM edita Input no Confluence, agent auto-publica Output (PRD/TRD/Progresso)
220
+ após cada skill.
221
+
222
+ **Roadmap**: `NotionAdapter`, `JIRAAdapter`, `SharePointAdapter`,
223
+ `GitHubIssuesAdapter` (formalizados quando surgir 3º caso real).
224
+
225
+ Setup do Confluence:
226
+ ```
227
+ /mcp confluence
228
+ ```
229
+ Guia o setup interativo (space key, parent IDs, credenciais gitignored).
230
+
231
+ ## Troubleshooting
232
+
233
+ | Problema | Solução |
234
+ |----------|---------|
235
+ | `/sfw-start` reclama que pasta Input está vazia | Verifique que há pelo menos 1 arquivo em `workspace/Input/<scope>/` |
236
+ | Pipeline trava em ambiguidade | PRD §12 ou TRD §10 têm linhas sem resposta. Preencher coluna "Resposta" e rodar `/design` de novo |
237
+ | PM quer mudar algo depois do PRD aprovado | Criar `workspace/Input/<scope>/ajustes_v1.md` e rodar `/extract` → merge aditivo preserva IDs |
238
+ | `/publish` não envia TRD pro Confluence | Verificar `publishes: [PRD, TRD, Progresso]` no `sfw.config.yml` |
239
+ | Coder pede algo que não está nas specs/ | Não é bug — é feature. Significa que spec ficou incompleto. Completar via `/extract` e re-rodar `/design` |
240
+ | Security Review bloqueia merge | CRÍTICO/ALTO são bloqueantes. MÉDIO/BAIXO são recomendações. Ver `agents/security-reviewer.md` |
241
+
242
+ ## Links
243
+
244
+ - **Repositório**: [gustavomaritan-labs/spec-first-workflow](https://github.com/gustavomaritan-labs/spec-first-workflow)
245
+ - **Kit Copilot** (equivalente pra GitHub Copilot): [spec-first-copilot](https://www.npmjs.com/package/spec-first-copilot)
246
+ - **Apresentação do pipeline**: [apresentacao.html](https://github.com/gustavomaritan-labs/spec-first-workflow/blob/main/packages/apresentacao.html)
247
+ - **Issues**: [github.com/.../issues](https://github.com/gustavomaritan-labs/spec-first-workflow/issues)
248
+
249
+ ## Licença
250
+
251
+ MIT © [Gustavo Maritan](https://github.com/GustavoMaritan)
package/bin/cli.js CHANGED
@@ -1,70 +1,70 @@
1
- #!/usr/bin/env node
2
-
3
- const path = require('path');
4
- const { init } = require('../lib/init');
5
- const { update } = require('../lib/update');
6
-
7
- const args = process.argv.slice(2);
8
- const command = args[0];
9
-
10
- function printUsage() {
11
- console.log('Uso:');
12
- console.log(' spec-first-claude init --name=<nome-do-projeto> [--target=<caminho>]');
13
- console.log(' spec-first-claude update [--target=<caminho>] [--force]');
14
- console.log('');
15
- console.log('Comandos:');
16
- console.log(' init Cria um novo projeto spec-first');
17
- console.log(' update Atualiza projeto existente com arquivos novos do framework');
18
- console.log(' (adiciona faltantes, atualiza commands/adapters/agents/templates)');
19
- console.log('');
20
- console.log('Opções:');
21
- console.log(' --name=<nome> Nome do projeto (obrigatório no init)');
22
- console.log(' --target=<path> Diretório destino (default: ./<nome> no init, cwd no update)');
23
- console.log(' --force Força atualizar TODOS arquivos, não só os do framework (cuidado)');
24
- }
25
-
26
- function parseArgs(args) {
27
- const parsed = { flags: [] };
28
- for (const arg of args) {
29
- const match = arg.match(/^--(\w+)=(.+)$/);
30
- if (match) {
31
- parsed[match[1]] = match[2];
32
- } else if (arg.startsWith('--')) {
33
- parsed.flags.push(arg.slice(2));
34
- }
35
- }
36
- return parsed;
37
- }
38
-
39
- if (command === 'init') {
40
- const opts = parseArgs(args.slice(1));
41
-
42
- if (!opts.name) {
43
- console.error('Erro: --name é obrigatório.\n');
44
- printUsage();
45
- process.exit(1);
46
- }
47
-
48
- const templatesDir = path.join(__dirname, '..', 'templates');
49
-
50
- init({
51
- name: opts.name,
52
- templatesDir,
53
- targetDir: opts.target || undefined,
54
- });
55
- } else if (command === 'update') {
56
- const opts = parseArgs(args.slice(1));
57
- const templatesDir = path.join(__dirname, '..', 'templates');
58
-
59
- update({
60
- templatesDir,
61
- targetDir: opts.target || undefined,
62
- force: opts.flags.includes('force'),
63
- });
64
- } else {
65
- printUsage();
66
- if (command) {
67
- console.error(`\nComando desconhecido: "${command}"`);
68
- }
69
- process.exit(command ? 1 : 0);
70
- }
1
+ #!/usr/bin/env node
2
+
3
+ const path = require('path');
4
+ const { init } = require('../lib/init');
5
+ const { update } = require('../lib/update');
6
+
7
+ const args = process.argv.slice(2);
8
+ const command = args[0];
9
+
10
+ function printUsage() {
11
+ console.log('Uso:');
12
+ console.log(' spec-first-claude init --name=<nome-do-projeto> [--target=<caminho>]');
13
+ console.log(' spec-first-claude update [--target=<caminho>] [--force]');
14
+ console.log('');
15
+ console.log('Comandos:');
16
+ console.log(' init Cria um novo projeto spec-first');
17
+ console.log(' update Atualiza projeto existente com arquivos novos do framework');
18
+ console.log(' (adiciona faltantes, atualiza commands/adapters/agents/templates)');
19
+ console.log('');
20
+ console.log('Opções:');
21
+ console.log(' --name=<nome> Nome do projeto (obrigatório no init)');
22
+ console.log(' --target=<path> Diretório destino (default: ./<nome> no init, cwd no update)');
23
+ console.log(' --force Força atualizar TODOS arquivos, não só os do framework (cuidado)');
24
+ }
25
+
26
+ function parseArgs(args) {
27
+ const parsed = { flags: [] };
28
+ for (const arg of args) {
29
+ const match = arg.match(/^--(\w+)=(.+)$/);
30
+ if (match) {
31
+ parsed[match[1]] = match[2];
32
+ } else if (arg.startsWith('--')) {
33
+ parsed.flags.push(arg.slice(2));
34
+ }
35
+ }
36
+ return parsed;
37
+ }
38
+
39
+ if (command === 'init') {
40
+ const opts = parseArgs(args.slice(1));
41
+
42
+ if (!opts.name) {
43
+ console.error('Erro: --name é obrigatório.\n');
44
+ printUsage();
45
+ process.exit(1);
46
+ }
47
+
48
+ const templatesDir = path.join(__dirname, '..', 'templates');
49
+
50
+ init({
51
+ name: opts.name,
52
+ templatesDir,
53
+ targetDir: opts.target || undefined,
54
+ });
55
+ } else if (command === 'update') {
56
+ const opts = parseArgs(args.slice(1));
57
+ const templatesDir = path.join(__dirname, '..', 'templates');
58
+
59
+ update({
60
+ templatesDir,
61
+ targetDir: opts.target || undefined,
62
+ force: opts.flags.includes('force'),
63
+ });
64
+ } else {
65
+ printUsage();
66
+ if (command) {
67
+ console.error(`\nComando desconhecido: "${command}"`);
68
+ }
69
+ process.exit(command ? 1 : 0);
70
+ }