spec-first-copilot 0.3.0 → 0.5.0-beta.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 (44) hide show
  1. package/README.md +38 -30
  2. package/lib/init.js +2 -2
  3. package/package.json +31 -23
  4. package/templates/.ai/memory/napkin.md +1 -1
  5. package/templates/.github/agents/db-coder.md +1 -1
  6. package/templates/.github/agents/doc-writer.md +12 -15
  7. package/templates/.github/agents/security-reviewer.md +1 -1
  8. package/templates/.github/copilot-instructions.md +61 -43
  9. package/templates/.github/instructions/docs.instructions.md +12 -12
  10. package/templates/.github/instructions/sensitive-files.instructions.md +10 -10
  11. package/templates/{docs/Desenvolvimento → .github}/rules.md +2 -2
  12. package/templates/.github/skills/sf-design/SKILL.md +26 -27
  13. package/templates/.github/skills/sf-dev/SKILL.md +30 -7
  14. package/templates/.github/skills/sf-discovery/SKILL.md +405 -405
  15. package/templates/.github/skills/sf-extract/SKILL.md +9 -9
  16. package/templates/.github/skills/sf-feature/SKILL.md +21 -21
  17. package/templates/.github/skills/sf-merge-delta/SKILL.md +21 -18
  18. package/templates/.github/skills/sf-plan/SKILL.md +8 -8
  19. package/templates/.github/skills/{sf-pausar → sf-session-finish}/SKILL.md +10 -10
  20. package/templates/.github/skills/sf-setup-projeto/SKILL.md +20 -20
  21. package/templates/{docs/_templates/estrutura/API.template.md → .github/templates/estrutura/apiContracts.template.md} +24 -17
  22. package/templates/.github/templates/estrutura/architecture.template.md +158 -0
  23. package/templates/{docs/_templates/estrutura/Seguranca.template.md → .github/templates/estrutura/conventions.template.md} +74 -10
  24. package/templates/{docs/_templates/estrutura/ADRs.template.md → .github/templates/estrutura/decisions.template.md} +21 -13
  25. package/templates/.github/templates/estrutura/domain.template.md +148 -0
  26. package/templates/{docs/_templates → .github/templates}/feature/PRD.template.md +256 -256
  27. package/templates/{docs/_templates → .github/templates}/feature/Progresso.template.md +2 -2
  28. package/templates/{docs/_templates → .github/templates}/feature/TRD.template.md +204 -200
  29. package/templates/{docs/_templates → .github/templates}/feature/context.template.md +1 -1
  30. package/templates/{docs/_templates → .github/templates}/feature/projetos.template.yaml +1 -1
  31. package/templates/{docs/_templates → .github/templates}/feature/sdd.template.md +372 -372
  32. package/templates/{docs/_templates → .github/templates}/feature/tasks.template.md +115 -115
  33. package/templates/docs/_templates/estrutura/Arquitetura.template.md +0 -82
  34. package/templates/docs/_templates/estrutura/Infraestrutura.template.md +0 -104
  35. package/templates/docs/_templates/estrutura/Modelo_Dados.template.md +0 -99
  36. package/templates/docs/_templates/estrutura/Stack.template.md +0 -78
  37. package/templates/docs/_templates/estrutura/Visao.template.md +0 -82
  38. /package/templates/{docs/_templates → .github/templates}/feature/backlog-extraido.template.md +0 -0
  39. /package/templates/{docs/_templates → .github/templates}/feature/extract-log.template.md +0 -0
  40. /package/templates/{docs/_templates → .github/templates}/global/progresso_global.template.md +0 -0
  41. /package/templates/docs/{Desenvolvimento/.gitkeep → .gitkeep} +0 -0
  42. /package/templates/{docs/Estrutura → workspace/Input}/.gitkeep +0 -0
  43. /package/templates/{docs/PM → workspace/Input/setup_projeto}/.gitkeep +0 -0
  44. /package/templates/{docs/PM/setup_projeto → workspace/Output}/.gitkeep +0 -0
@@ -39,10 +39,10 @@ Exemplo: `/sf-design feat_cadastro_cliente`
39
39
  | # | Validação | Se falhar |
40
40
  |---|-----------|-----------|
41
41
  | 1 | Argumento `nome` foi informado | Parar → "Informe o nome. Ex: /sf-design feat_cadastro_cliente" |
42
- | 2 | `docs/Desenvolvimento/{nome}/.context.md` existe | Parar → "Execute /sf-feature {nome} ou /sf-setup-projeto primeiro" |
42
+ | 2 | `workspace/Output/{nome}/.context.md` existe | Parar → "Execute /sf-feature {nome} ou /sf-setup-projeto primeiro" |
43
43
  | 3 | Status é `extract_done` ou `approved` | Se anterior → "Execute /sf-extract primeiro". Se posterior → "SDD já foi gerado (status: {status})" |
44
44
  | 4 | PRD.md ou TRD.md existe na pasta | Parar → "Documento de extração não encontrado. Execute /sf-extract {nome}" |
45
- | 5 | `docs/Estrutura/` está populado (para features) | Parar → "Execute /sf-setup-projeto primeiro" (não aplica para tipo=setup) |
45
+ | 5 | `docs/` está populado (para features) | Parar → "Execute /sf-setup-projeto primeiro" (não aplica para tipo=setup) |
46
46
 
47
47
  ## Passos
48
48
 
@@ -50,7 +50,7 @@ Exemplo: `/sf-design feat_cadastro_cliente`
50
50
  Se status é `extract_done` (não `approved`):
51
51
  ```
52
52
  Pergunta ao usuário:
53
- "O {PRD/TRD} em docs/Desenvolvimento/{nome}/ foi revisado e está aprovado? (s/n)"
53
+ "O {PRD/TRD} em workspace/Output/{nome}/ foi revisado e está aprovado? (s/n)"
54
54
 
55
55
  Se SIM → atualizar .context.md status: approved → continuar
56
56
  Se NÃO → parar → "Revise o documento e chame /sf-design {nome} quando estiver pronto"
@@ -62,29 +62,27 @@ Ler seção de ambiguidades do PRD (§13) ou TRD (§9):
62
62
  - Listar as ambiguidades pendentes
63
63
  - Instruir: "Responda as ambiguidades no documento e chame /sf-design {nome} novamente"
64
64
 
65
- ### 3. Gerar docs/Estrutura/ (APENAS para setup)
65
+ ### 3. Gerar docs/ (APENAS para setup)
66
66
 
67
- > Este passo só executa quando tipo=setup. Para features, docs/Estrutura/ já existe.
67
+ > Este passo só executa quando tipo=setup. Para features, docs/ já existe.
68
68
 
69
- Ler TRD e gerar os 8 docs de `docs/Estrutura/` usando os templates correspondentes:
69
+ Ler TRD e gerar os 5 docs de `docs/` usando os templates correspondentes:
70
70
 
71
- | TRD Seção | Doc gerado | Template |
72
- |-----------|-----------|---------|
73
- | §1 Visão + §8 Módulos | Visao.md | `_templates/estrutura/Visao.template.md` |
74
- | §2 Stack | Stack.md | `_templates/estrutura/Stack.template.md` |
75
- | §3 Arquitetura | Arquitetura.md | `_templates/estrutura/Arquitetura.template.md` |
76
- | §4 Modelo de Dados | Modelo_Dados.md | `_templates/estrutura/Modelo_Dados.template.md` |
77
- | §5 API | API.md | `_templates/estrutura/API.template.md` |
78
- | §6 Infra | Infraestrutura.md | `_templates/estrutura/Infraestrutura.template.md` |
79
- | §7 Segurança | Seguranca.md | `_templates/estrutura/Seguranca.template.md` |
80
- | SDD §2 (após gerar) | ADRs.md | `_templates/estrutura/ADRs.template.md` |
71
+ | Doc gerado | Fontes (TRD) | Template |
72
+ |-----------|--------------|---------|
73
+ | architecture.md | §3 Arquitetura + §2 Stack + §6 Infra (ambientes, deploy, CI/CD, rollback) | `.github/templates/estrutura/architecture.template.md` |
74
+ | domain.md | §1 Visão + §4 Modelo de Dados | `.github/templates/estrutura/domain.template.md` |
75
+ | conventions.md | §7 Segurança + §6 Infra (env vars, domínios, monitoramento) + §5 API (códigos de erro de domínio) + §2 Stack (alternativas, versionamento) | `.github/templates/estrutura/conventions.template.md` |
76
+ | apiContracts.md | §5 API (padrão geral, rotas, paginação, filtros, erros, catálogo) | `.github/templates/estrutura/apiContracts.template.md` |
77
+ | decisions.md | SDD §2 Decisões (após gerar) + decisões iniciais de stack/arquitetura | `.github/templates/estrutura/decisions.template.md` |
81
78
 
82
79
  Regras:
83
80
  - Ler template → preencher TODAS seções com dados do TRD
84
81
  - Remover bloco `<!-- INSTRUÇÕES -->` do doc gerado
85
82
  - Changelog inicia vazio (primeira geração)
86
83
  - Se TRD não tem dados pra uma seção → marcar "A definir"
87
- - ADRs.md é gerado APÓS o SDD (usa §2 Decisões de Design)
84
+ - decisions.md é gerado APÓS o SDD (usa §2 Decisões de Design como ponto de partida)
85
+ - TRD §8 Módulos NÃO vira doc de Estrutura — vai para backlog faseado
88
86
 
89
87
  ### 3b. Gerar `projetos.yaml` (APENAS para setup)
90
88
 
@@ -112,9 +110,9 @@ Nunca juntar serviços que o TRD definiu como distintos.
112
110
 
113
111
  ### 4. Carregar contexto
114
112
  - Ler PRD.md ou TRD.md completo (conforme `.context.md`)
115
- - Ler `docs/Estrutura/` completo (agora já populado, mesmo no setup)
116
- - Ler `docs/Desenvolvimento/rules.md` (convenções de desenvolvimento)
117
- - Carregar template `docs/_templates/feature/sdd.template.md`
113
+ - Ler `docs/` completo (agora já populado, mesmo no setup)
114
+ - Ler `.github/rules.md` (convenções de desenvolvimento)
115
+ - Carregar template `.github/templates/feature/sdd.template.md`
118
116
 
119
117
  ### 5. Gerar SDD
120
118
  Produzir `sdd.md` com as 11 seções obrigatórias:
@@ -123,15 +121,15 @@ Produzir `sdd.md` com as 11 seções obrigatórias:
123
121
  |-------|----------|-----------------|
124
122
  | §1 Visão geral | O que, escopo, premissas | PRD §1 / TRD §1 |
125
123
  | §2 Decisões de design | Mini-ADRs com justificativa | Arquitetura + análise do agente |
126
- | §3 Modelo de dados | Entidades com tipos exatos, constraints, migrations | PRD §3 + Modelo_Dados.md |
124
+ | §3 Modelo de dados | Entidades com tipos exatos, constraints, migrations | PRD §3 + domain.md |
127
125
  | §4 Regras e validações | Ref PRD §5 RN-NNN, mensagens de erro | PRD §5 + §6 |
128
- | §5 Endpoints API | Contratos completos: request/response JSON, status codes | PRD §4 + API.md |
126
+ | §5 Endpoints API | Contratos completos: request/response JSON, status codes | PRD §4 + apiContracts.md |
129
127
  | §6 Componentes e telas | Estados (loading/empty/error), componentes, comportamentos | PRD §7 |
130
128
  | §7 Fluxos de dados | Sequências usuário→front→back, caminhos de erro | PRD §4 + §9 |
131
129
  | §8 Integrações externas | Protocolo, timeout, retry, fallback | PRD §8 |
132
130
  | §9 Estratégia de testes | Framework, estrutura, CAs mapeados a testes | PRD §4 + §10 |
133
131
  | §10 Fora do escopo | Lista explícita do que NÃO será feito | PRD §12 |
134
- | §11 Delta Specs | ADDED/MODIFIED/REMOVED para merge em docs/Estrutura/ | Análise do agente |
132
+ | §11 Delta Specs | ADDED/MODIFIED/REMOVED para merge em docs/ | Análise do agente |
135
133
 
136
134
  **Regras de geração:**
137
135
  1. SDD deve ser **auto-contido** — o coder lê APENAS o SDD + task, nunca PRD/PM
@@ -142,8 +140,9 @@ Produzir `sdd.md` com as 11 seções obrigatórias:
142
140
  6. Critérios de aceite testáveis — Given/When/Then, não frases vagas
143
141
  7. Delta Specs sempre preenchida, mesmo que vazia (ADDED: nenhum)
144
142
 
145
- ### 6. Gerar ADRs.md (setup — complemento do passo 3)
146
- Após gerar SDD §2, criar ADRs.md com as decisões iniciais de arquitetura.
143
+ ### 6. Complementar decisions.md (setup — complemento do passo 3)
144
+ Após gerar SDD §2, popular `decisions.md` com as decisões iniciais de arquitetura
145
+ (stack principal, padrões de design, trade-offs significativos).
147
146
 
148
147
  ### 7. Atualizar `.context.md`
149
148
  ```yaml
@@ -160,7 +159,7 @@ atualizado_em: "{{ISO_DATETIME}}"
160
159
  |---------|-----------|
161
160
  | `sdd.md` | Especificação técnica completa e auto-contida |
162
161
  | `projetos.yaml` | (setup) Manifesto de repos — mapeamento serviço → repo → áreas |
163
- | `docs/Estrutura/*.md` | (setup) 8 docs globais preenchidos do TRD |
162
+ | `docs/*.md` | (setup) 5 docs globais preenchidos do TRD (architecture, domain, conventions, apiContracts, decisions) |
164
163
  | `.context.md` | Atualizado: `approved` → `design_done` |
165
164
 
166
165
  ## Pós-condições
@@ -177,5 +176,5 @@ atualizado_em: "{{ISO_DATETIME}}"
177
176
  | Status posterior a approved | Informar que SDD já foi gerado |
178
177
  | Ambiguidades pendentes no PRD/TRD | Parar, listar ambiguidades |
179
178
  | PRD/TRD não encontrado | Parar, sugerir /sf-extract |
180
- | docs/Estrutura/ vazio (em features) | Parar, sugerir /sf-setup-projeto |
179
+ | docs/ vazio (em features) | Parar, sugerir /sf-setup-projeto |
181
180
  | Informação insuficiente no PRD/TRD para gerar seção | NÃO inventar — marcar seção como incompleta, reportar ao usuário |
@@ -51,7 +51,7 @@ O agente é selecionado pelo prefixo da task: `BANCO-*` → DB Coder, `BACK-*`
51
51
  | 2 | `.context.md` existe com status `plan_done` ou `dev_in_progress` | Se anterior → "Execute /sf-plan {nome} primeiro" |
52
52
  | 3 | `*_tasks.md` e `Progresso.md` existem | Parar → "Tasks não encontradas. Execute /sf-plan {nome}" |
53
53
  | 4 | `sdd.md` existe | Parar → "SDD não encontrado" |
54
- | 5 | `docs/Desenvolvimento/rules.md` existe | Parar → "rules.md não encontrado" |
54
+ | 5 | `.github/rules.md` existe | Parar → "rules.md não encontrado" |
55
55
  | 6 | `projetos.yaml` existe na raiz | Parar → "Execute /sf-design primeiro (gera projetos.yaml)" |
56
56
  | 7 | Infra local rodando (`docker compose ps` → containers healthy) | Parar → "Suba a infra primeiro: `docker compose up -d` e aguarde healthy" |
57
57
 
@@ -115,7 +115,17 @@ O agente é selecionado pelo prefixo da task: `BANCO-*` → DB Coder, `BACK-*`
115
115
  │ ║ ║
116
116
  │ ║ 1. Rodar testes E2E (SDD §9.3 CAs) ║
117
117
  │ ║ → Falhou? Identificar task → fix → loop ║
118
- │ ║ 2. Todos CAs passam? → dev_done ✅
118
+ │ ║ 2. Todos CAs passam? → prosseguir
119
+ │ ╚═══════════════════════════════════════════════╝
120
+ │ ↓ (E2E aprovado, só features)
121
+ │ ╔═══════════════════════════════════════════════╗
122
+ │ ║ MERGE-DELTA (automático, só features) ║
123
+ │ ║ ║
124
+ │ ║ 1. Ler SDD §11 (Delta Specs) ║
125
+ │ ║ 2. Aplicar ADDED/MODIFIED/REMOVED em ║
126
+ │ ║ docs/ ║
127
+ │ ║ 3. Registrar changelog em cada doc alterado ║
128
+ │ ║ 4. dev_done ✅ ║
119
129
  │ ╚═══════════════════════════════════════════════╝
120
130
  ```
121
131
 
@@ -209,7 +219,7 @@ Ao concluir todas tasks de uma fase:
209
219
 
210
220
  ### 5. Security Review (cross-area)
211
221
  Ao concluir todas tasks de todas áreas, ANTES dos testes E2E:
212
- - Spawn Security Reviewer (Opus) com: todo código produzido + SDD §5 + Seguranca.md
222
+ - Spawn Security Reviewer (Opus) com: todo código produzido + SDD §5 + conventions.md
213
223
  - Audita 6 categorias: Auth, AuthZ, Injeção, Dados Sensíveis, Headers, Banco
214
224
  - Se findings CRÍTICO ou ALTO:
215
225
  - Identificar área responsável (BACK, FRONT, BANCO, INFRA)
@@ -226,7 +236,7 @@ Ao concluir security review com aprovação:
226
236
  - Mapear pra task/área responsável
227
237
  - Criar fix inline (não cria nova task)
228
238
  - Rodar E2E de novo
229
- - Se passou → dev_done
239
+ - Se passou → prosseguir para merge-delta (features) ou dev_done (setup)
230
240
 
231
241
  ### 7. Finalizar fase — PR + ambiente ON
232
242
  Ao concluir todos testes da fase:
@@ -258,11 +268,24 @@ git branch -d feature/{nome}_fase{N}
258
268
  git remote prune origin
259
269
  ```
260
270
 
261
- ### 9. Atualizar `.context.md`
271
+ ### 9. Merge-Delta automático (só features)
272
+
273
+ Após E2E aprovado, SE `.context.md` tipo = `feature`:
274
+ 1. Ler SDD §11 (seção Delta Specs: ADDED/MODIFIED/REMOVED)
275
+ 2. Para cada delta, mapear para o doc de `docs/` correspondente
276
+ 3. Aplicar as mudanças (adicionar, modificar ou remover seções)
277
+ 4. Registrar changelog em cada doc alterado: `| {{DATA}} | {{NOME}} | {{TIPO}} | {{DESCRIÇÃO}} |`
278
+ 5. Validar consistência cross-doc (ex: endpoint no apiContracts.md referencia tabela no domain.md)
279
+
280
+ Se tipo = `setup` → pular (docs/ já foi criado pelo /design).
281
+
282
+ > O `/sf-merge-delta` continua existindo como skill atômica para re-execução manual se necessário.
283
+
284
+ ### 10. Atualizar `.context.md`
262
285
  ```yaml
263
286
  status: "dev_in_progress" # durante execução
264
287
  # ou
265
- status: "dev_done" # todas fases + integration + security + E2E passaram
288
+ status: "dev_done" # todas fases + integration + security + E2E + merge-delta
266
289
  ultima_skill: "/sf-dev"
267
290
  atualizado_em: "{{ISO_DATETIME}}"
268
291
  ```
@@ -309,7 +332,7 @@ Ação necessária: revisar SDD ou intervir manualmente.
309
332
  - Integration tests passam por fase
310
333
  - Security Review aprovado (zero findings CRÍTICO/ALTO)
311
334
  - E2E tests passam por feature (todos CAs do SDD §9.3)
312
- - Pronto para `/merge-delta` (se feature) ou conclusão (se setup)
335
+ - Merge-delta aplicado automaticamente (features) docs/ atualizado
313
336
 
314
337
  ## Erros
315
338