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.
- package/README.md +38 -30
- package/lib/init.js +2 -2
- package/package.json +31 -23
- package/templates/.ai/memory/napkin.md +1 -1
- package/templates/.github/agents/db-coder.md +1 -1
- package/templates/.github/agents/doc-writer.md +12 -15
- package/templates/.github/agents/security-reviewer.md +1 -1
- package/templates/.github/copilot-instructions.md +61 -43
- package/templates/.github/instructions/docs.instructions.md +12 -12
- package/templates/.github/instructions/sensitive-files.instructions.md +10 -10
- package/templates/{docs/Desenvolvimento → .github}/rules.md +2 -2
- package/templates/.github/skills/sf-design/SKILL.md +26 -27
- package/templates/.github/skills/sf-dev/SKILL.md +30 -7
- package/templates/.github/skills/sf-discovery/SKILL.md +405 -405
- package/templates/.github/skills/sf-extract/SKILL.md +9 -9
- package/templates/.github/skills/sf-feature/SKILL.md +21 -21
- package/templates/.github/skills/sf-merge-delta/SKILL.md +21 -18
- package/templates/.github/skills/sf-plan/SKILL.md +8 -8
- package/templates/.github/skills/{sf-pausar → sf-session-finish}/SKILL.md +10 -10
- package/templates/.github/skills/sf-setup-projeto/SKILL.md +20 -20
- package/templates/{docs/_templates/estrutura/API.template.md → .github/templates/estrutura/apiContracts.template.md} +24 -17
- package/templates/.github/templates/estrutura/architecture.template.md +158 -0
- package/templates/{docs/_templates/estrutura/Seguranca.template.md → .github/templates/estrutura/conventions.template.md} +74 -10
- package/templates/{docs/_templates/estrutura/ADRs.template.md → .github/templates/estrutura/decisions.template.md} +21 -13
- package/templates/.github/templates/estrutura/domain.template.md +148 -0
- package/templates/{docs/_templates → .github/templates}/feature/PRD.template.md +256 -256
- package/templates/{docs/_templates → .github/templates}/feature/Progresso.template.md +2 -2
- package/templates/{docs/_templates → .github/templates}/feature/TRD.template.md +204 -200
- package/templates/{docs/_templates → .github/templates}/feature/context.template.md +1 -1
- package/templates/{docs/_templates → .github/templates}/feature/projetos.template.yaml +1 -1
- package/templates/{docs/_templates → .github/templates}/feature/sdd.template.md +372 -372
- package/templates/{docs/_templates → .github/templates}/feature/tasks.template.md +115 -115
- package/templates/docs/_templates/estrutura/Arquitetura.template.md +0 -82
- package/templates/docs/_templates/estrutura/Infraestrutura.template.md +0 -104
- package/templates/docs/_templates/estrutura/Modelo_Dados.template.md +0 -99
- package/templates/docs/_templates/estrutura/Stack.template.md +0 -78
- package/templates/docs/_templates/estrutura/Visao.template.md +0 -82
- /package/templates/{docs/_templates → .github/templates}/feature/backlog-extraido.template.md +0 -0
- /package/templates/{docs/_templates → .github/templates}/feature/extract-log.template.md +0 -0
- /package/templates/{docs/_templates → .github/templates}/global/progresso_global.template.md +0 -0
- /package/templates/docs/{Desenvolvimento/.gitkeep → .gitkeep} +0 -0
- /package/templates/{docs/Estrutura → workspace/Input}/.gitkeep +0 -0
- /package/templates/{docs/PM → workspace/Input/setup_projeto}/.gitkeep +0 -0
- /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 | `
|
|
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
|
|
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
|
|
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/
|
|
65
|
+
### 3. Gerar docs/ (APENAS para setup)
|
|
66
66
|
|
|
67
|
-
> Este passo só executa quando tipo=setup. Para features, docs/
|
|
67
|
+
> Este passo só executa quando tipo=setup. Para features, docs/ já existe.
|
|
68
68
|
|
|
69
|
-
Ler TRD e gerar os
|
|
69
|
+
Ler TRD e gerar os 5 docs de `docs/` usando os templates correspondentes:
|
|
70
70
|
|
|
71
|
-
|
|
|
72
|
-
|
|
73
|
-
| §
|
|
74
|
-
| §
|
|
75
|
-
| §
|
|
76
|
-
| §
|
|
77
|
-
| §
|
|
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
|
-
-
|
|
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
|
|
116
|
-
- Ler
|
|
117
|
-
- Carregar template
|
|
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 +
|
|
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 +
|
|
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/
|
|
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.
|
|
146
|
-
Após gerar SDD §2,
|
|
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
|
|
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/
|
|
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 |
|
|
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? →
|
|
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 +
|
|
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.
|
|
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
|
|
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
|
-
-
|
|
335
|
+
- Merge-delta aplicado automaticamente (features) — docs/ atualizado
|
|
313
336
|
|
|
314
337
|
## Erros
|
|
315
338
|
|