spec-first-copilot 0.4.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 +156 -148
- package/bin/cli.js +52 -52
- package/lib/init.js +89 -89
- package/package.json +11 -4
- package/templates/.ai/memory/napkin.md +68 -68
- package/templates/.github/agents/backend-coder.md +215 -215
- package/templates/.github/agents/db-coder.md +165 -165
- package/templates/.github/agents/doc-writer.md +48 -51
- package/templates/.github/agents/frontend-coder.md +222 -222
- package/templates/.github/agents/infra-coder.md +341 -341
- package/templates/.github/agents/reviewer.md +99 -99
- package/templates/.github/agents/security-reviewer.md +153 -153
- package/templates/.github/copilot-instructions.md +194 -175
- package/templates/.github/instructions/docs.instructions.md +123 -123
- package/templates/.github/instructions/sensitive-files.instructions.md +32 -32
- package/templates/{docs/Desenvolvimento → .github}/rules.md +229 -229
- package/templates/.github/skills/sf-design/SKILL.md +180 -181
- package/templates/.github/skills/sf-dev/SKILL.md +349 -349
- package/templates/.github/skills/sf-discovery/SKILL.md +405 -405
- package/templates/.github/skills/sf-extract/SKILL.md +284 -284
- package/templates/.github/skills/sf-feature/SKILL.md +130 -130
- package/templates/.github/skills/sf-merge-delta/SKILL.md +145 -142
- package/templates/.github/skills/sf-plan/SKILL.md +178 -178
- package/templates/.github/skills/sf-session-finish/SKILL.md +120 -120
- package/templates/.github/skills/sf-setup-projeto/SKILL.md +123 -123
- package/templates/{docs/_templates/estrutura/API.template.md → .github/templates/estrutura/apiContracts.template.md} +151 -144
- package/templates/.github/templates/estrutura/architecture.template.md +158 -0
- package/templates/{docs/_templates/estrutura/Seguranca.template.md → .github/templates/estrutura/conventions.template.md} +202 -138
- package/templates/{docs/_templates/estrutura/ADRs.template.md → .github/templates/estrutura/decisions.template.md} +99 -91
- 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 +136 -136
- package/templates/{docs/_templates → .github/templates}/feature/TRD.template.md +204 -200
- package/templates/{docs/_templates → .github/templates}/feature/backlog-extraido.template.md +154 -154
- package/templates/{docs/_templates → .github/templates}/feature/context.template.md +42 -42
- package/templates/{docs/_templates → .github/templates}/feature/extract-log.template.md +38 -38
- package/templates/{docs/_templates → .github/templates}/feature/projetos.template.yaml +73 -73
- 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 → .github/templates}/global/progresso_global.template.md +57 -57
- 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/{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
|
@@ -1,181 +1,180 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sf-design
|
|
3
|
-
description: |
|
|
4
|
-
Design técnico. Gera SDD a partir do PRD/TRD aprovado.
|
|
5
|
-
Trigger: /sf-design
|
|
6
|
-
author: GustavoMaritan
|
|
7
|
-
version: 1.0.0
|
|
8
|
-
date: 2026-04-08
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# Skill: /sf-design
|
|
12
|
-
|
|
13
|
-
> Skill atômica de design técnico. Lê PRD/TRD aprovado e gera SDD.
|
|
14
|
-
> Responsável pelo checkpoint de aprovação do documento de extração.
|
|
15
|
-
|
|
16
|
-
## Tipo
|
|
17
|
-
Atômica — Single-agent
|
|
18
|
-
|
|
19
|
-
## Uso
|
|
20
|
-
```
|
|
21
|
-
/sf-design <nome>
|
|
22
|
-
```
|
|
23
|
-
Exemplo: `/sf-design feat_cadastro_cliente`
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## Agente
|
|
28
|
-
|
|
29
|
-
| Campo | Valor |
|
|
30
|
-
|-------|-------|
|
|
31
|
-
| **Papel** | Arquiteto de software — transforma requisitos aprovados em especificação técnica implementável |
|
|
32
|
-
| **Modelo** | Opus |
|
|
33
|
-
| **Comportamento** | Técnico e preciso. Gera contratos completos (JSON schemas, SQL DDL, componentes com estados). Toda decisão tem justificativa. Se o PRD/TRD tem gaps, não inventa — para e reporta. |
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## Pré-condições
|
|
38
|
-
|
|
39
|
-
| # | Validação | Se falhar |
|
|
40
|
-
|---|-----------|-----------|
|
|
41
|
-
| 1 | Argumento `nome` foi informado | Parar → "Informe o nome. Ex: /sf-design feat_cadastro_cliente" |
|
|
42
|
-
| 2 | `
|
|
43
|
-
| 3 | Status é `extract_done` ou `approved` | Se anterior → "Execute /sf-extract primeiro". Se posterior → "SDD já foi gerado (status: {status})" |
|
|
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
|
|
46
|
-
|
|
47
|
-
## Passos
|
|
48
|
-
|
|
49
|
-
### 1. Checkpoint de aprovação
|
|
50
|
-
Se status é `extract_done` (não `approved`):
|
|
51
|
-
```
|
|
52
|
-
Pergunta ao usuário:
|
|
53
|
-
"O {PRD/TRD} em
|
|
54
|
-
|
|
55
|
-
Se SIM → atualizar .context.md status: approved → continuar
|
|
56
|
-
Se NÃO → parar → "Revise o documento e chame /sf-design {nome} quando estiver pronto"
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### 2. Verificar ambiguidades
|
|
60
|
-
Ler seção de ambiguidades do PRD (§13) ou TRD (§9):
|
|
61
|
-
- Se há perguntas sem resposta → **PARAR**
|
|
62
|
-
- Listar as ambiguidades pendentes
|
|
63
|
-
- Instruir: "Responda as ambiguidades no documento e chame /sf-design {nome} novamente"
|
|
64
|
-
|
|
65
|
-
### 3. Gerar docs/
|
|
66
|
-
|
|
67
|
-
> Este passo só executa quando tipo=setup. Para features, docs/
|
|
68
|
-
|
|
69
|
-
Ler TRD e gerar os
|
|
70
|
-
|
|
71
|
-
|
|
|
72
|
-
|
|
73
|
-
| §
|
|
74
|
-
| §
|
|
75
|
-
| §
|
|
76
|
-
| §
|
|
77
|
-
| §
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
-
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
- Ler
|
|
115
|
-
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
|
123
|
-
|
|
124
|
-
| §
|
|
125
|
-
| §
|
|
126
|
-
| §
|
|
127
|
-
| §
|
|
128
|
-
| §
|
|
129
|
-
| §
|
|
130
|
-
| §
|
|
131
|
-
| §
|
|
132
|
-
| §
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
| `
|
|
162
|
-
| `
|
|
163
|
-
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
-
|
|
168
|
-
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
|
176
|
-
| Status
|
|
177
|
-
|
|
|
178
|
-
|
|
|
179
|
-
|
|
|
180
|
-
|
|
|
181
|
-
| Informação insuficiente no PRD/TRD para gerar seção | NÃO inventar — marcar seção como incompleta, reportar ao usuário |
|
|
1
|
+
---
|
|
2
|
+
name: sf-design
|
|
3
|
+
description: |
|
|
4
|
+
Design técnico. Gera SDD a partir do PRD/TRD aprovado.
|
|
5
|
+
Trigger: /sf-design
|
|
6
|
+
author: GustavoMaritan
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
date: 2026-04-08
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Skill: /sf-design
|
|
12
|
+
|
|
13
|
+
> Skill atômica de design técnico. Lê PRD/TRD aprovado e gera SDD.
|
|
14
|
+
> Responsável pelo checkpoint de aprovação do documento de extração.
|
|
15
|
+
|
|
16
|
+
## Tipo
|
|
17
|
+
Atômica — Single-agent
|
|
18
|
+
|
|
19
|
+
## Uso
|
|
20
|
+
```
|
|
21
|
+
/sf-design <nome>
|
|
22
|
+
```
|
|
23
|
+
Exemplo: `/sf-design feat_cadastro_cliente`
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Agente
|
|
28
|
+
|
|
29
|
+
| Campo | Valor |
|
|
30
|
+
|-------|-------|
|
|
31
|
+
| **Papel** | Arquiteto de software — transforma requisitos aprovados em especificação técnica implementável |
|
|
32
|
+
| **Modelo** | Opus |
|
|
33
|
+
| **Comportamento** | Técnico e preciso. Gera contratos completos (JSON schemas, SQL DDL, componentes com estados). Toda decisão tem justificativa. Se o PRD/TRD tem gaps, não inventa — para e reporta. |
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Pré-condições
|
|
38
|
+
|
|
39
|
+
| # | Validação | Se falhar |
|
|
40
|
+
|---|-----------|-----------|
|
|
41
|
+
| 1 | Argumento `nome` foi informado | Parar → "Informe o nome. Ex: /sf-design feat_cadastro_cliente" |
|
|
42
|
+
| 2 | `workspace/Output/{nome}/.context.md` existe | Parar → "Execute /sf-feature {nome} ou /sf-setup-projeto primeiro" |
|
|
43
|
+
| 3 | Status é `extract_done` ou `approved` | Se anterior → "Execute /sf-extract primeiro". Se posterior → "SDD já foi gerado (status: {status})" |
|
|
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/` está populado (para features) | Parar → "Execute /sf-setup-projeto primeiro" (não aplica para tipo=setup) |
|
|
46
|
+
|
|
47
|
+
## Passos
|
|
48
|
+
|
|
49
|
+
### 1. Checkpoint de aprovação
|
|
50
|
+
Se status é `extract_done` (não `approved`):
|
|
51
|
+
```
|
|
52
|
+
Pergunta ao usuário:
|
|
53
|
+
"O {PRD/TRD} em workspace/Output/{nome}/ foi revisado e está aprovado? (s/n)"
|
|
54
|
+
|
|
55
|
+
Se SIM → atualizar .context.md status: approved → continuar
|
|
56
|
+
Se NÃO → parar → "Revise o documento e chame /sf-design {nome} quando estiver pronto"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 2. Verificar ambiguidades
|
|
60
|
+
Ler seção de ambiguidades do PRD (§13) ou TRD (§9):
|
|
61
|
+
- Se há perguntas sem resposta → **PARAR**
|
|
62
|
+
- Listar as ambiguidades pendentes
|
|
63
|
+
- Instruir: "Responda as ambiguidades no documento e chame /sf-design {nome} novamente"
|
|
64
|
+
|
|
65
|
+
### 3. Gerar docs/ (APENAS para setup)
|
|
66
|
+
|
|
67
|
+
> Este passo só executa quando tipo=setup. Para features, docs/ já existe.
|
|
68
|
+
|
|
69
|
+
Ler TRD e gerar os 5 docs de `docs/` usando os templates correspondentes:
|
|
70
|
+
|
|
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` |
|
|
78
|
+
|
|
79
|
+
Regras:
|
|
80
|
+
- Ler template → preencher TODAS seções com dados do TRD
|
|
81
|
+
- Remover bloco `<!-- INSTRUÇÕES -->` do doc gerado
|
|
82
|
+
- Changelog inicia vazio (primeira geração)
|
|
83
|
+
- Se TRD não tem dados pra uma seção → marcar "A definir"
|
|
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
|
|
86
|
+
|
|
87
|
+
### 3b. Gerar `projetos.yaml` (APENAS para setup)
|
|
88
|
+
|
|
89
|
+
> Mapeia a arquitetura do TRD §3 para repositórios independentes.
|
|
90
|
+
> Cada serviço = 1 repo. Os repos serão criados/clonados pelo /sf-dev (INFRA-001).
|
|
91
|
+
|
|
92
|
+
Ler TRD §3 (Arquitetura) e §6 (Infra) para identificar os serviços:
|
|
93
|
+
|
|
94
|
+
1. Identificar serviços separados (api, worker, web, mobile, etc.)
|
|
95
|
+
2. Perguntar ao usuário:
|
|
96
|
+
- Organização/usuário do GitHub (ex: `empresa`)
|
|
97
|
+
- Nome base do projeto (ex: `meu-projeto`)
|
|
98
|
+
- Se algum repo já existe (para clonar em vez de criar)
|
|
99
|
+
3. Gerar `projetos.yaml` na raiz usando template `projetos.template.yaml`
|
|
100
|
+
4. Mapear áreas de task para repos:
|
|
101
|
+
- BACK → api (ou worker, se separado)
|
|
102
|
+
- BANCO → api (se usa EF migrations) ou repo próprio
|
|
103
|
+
- FRONT → web
|
|
104
|
+
- MOBILE → mobile
|
|
105
|
+
- INFRA → todos (cross-repo)
|
|
106
|
+
5. Validar: cada área DEVE mapear para exatamente 1 repo
|
|
107
|
+
|
|
108
|
+
**Regra**: Se o TRD indica API e Worker como serviços separados, DEVEM ser repos separados.
|
|
109
|
+
Nunca juntar serviços que o TRD definiu como distintos.
|
|
110
|
+
|
|
111
|
+
### 4. Carregar contexto
|
|
112
|
+
- Ler PRD.md ou TRD.md completo (conforme `.context.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`
|
|
116
|
+
|
|
117
|
+
### 5. Gerar SDD
|
|
118
|
+
Produzir `sdd.md` com as 11 seções obrigatórias:
|
|
119
|
+
|
|
120
|
+
| Seção | Conteúdo | Fonte principal |
|
|
121
|
+
|-------|----------|-----------------|
|
|
122
|
+
| §1 Visão geral | O que, escopo, premissas | PRD §1 / TRD §1 |
|
|
123
|
+
| §2 Decisões de design | Mini-ADRs com justificativa | Arquitetura + análise do agente |
|
|
124
|
+
| §3 Modelo de dados | Entidades com tipos exatos, constraints, migrations | PRD §3 + domain.md |
|
|
125
|
+
| §4 Regras e validações | Ref PRD §5 RN-NNN, mensagens de erro | PRD §5 + §6 |
|
|
126
|
+
| §5 Endpoints API | Contratos completos: request/response JSON, status codes | PRD §4 + apiContracts.md |
|
|
127
|
+
| §6 Componentes e telas | Estados (loading/empty/error), componentes, comportamentos | PRD §7 |
|
|
128
|
+
| §7 Fluxos de dados | Sequências usuário→front→back, caminhos de erro | PRD §4 + §9 |
|
|
129
|
+
| §8 Integrações externas | Protocolo, timeout, retry, fallback | PRD §8 |
|
|
130
|
+
| §9 Estratégia de testes | Framework, estrutura, CAs mapeados a testes | PRD §4 + §10 |
|
|
131
|
+
| §10 Fora do escopo | Lista explícita do que NÃO será feito | PRD §12 |
|
|
132
|
+
| §11 Delta Specs | ADDED/MODIFIED/REMOVED para merge em docs/ | Análise do agente |
|
|
133
|
+
|
|
134
|
+
**Regras de geração:**
|
|
135
|
+
1. SDD deve ser **auto-contido** — o coder lê APENAS o SDD + task, nunca PRD/PM
|
|
136
|
+
2. Toda regra/entidade referencia seção do PRD/TRD (rastreabilidade)
|
|
137
|
+
3. Seções não aplicáveis marcadas `N/A — [motivo]` (ex: §6 em setup sem UI)
|
|
138
|
+
4. Contratos de API com JSON schema completo (request, response, erros)
|
|
139
|
+
5. Modelo de dados com tipos exatos, não genéricos (varchar(255), não "string")
|
|
140
|
+
6. Critérios de aceite testáveis — Given/When/Then, não frases vagas
|
|
141
|
+
7. Delta Specs sempre preenchida, mesmo que vazia (ADDED: nenhum)
|
|
142
|
+
|
|
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).
|
|
146
|
+
|
|
147
|
+
### 7. Atualizar `.context.md`
|
|
148
|
+
```yaml
|
|
149
|
+
status: "design_done"
|
|
150
|
+
ultima_skill: "/sf-design"
|
|
151
|
+
atualizado_em: "{{ISO_DATETIME}}"
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Saídas
|
|
157
|
+
|
|
158
|
+
| Arquivo | Descrição |
|
|
159
|
+
|---------|-----------|
|
|
160
|
+
| `sdd.md` | Especificação técnica completa e auto-contida |
|
|
161
|
+
| `projetos.yaml` | (setup) Manifesto de repos — mapeamento serviço → repo → áreas |
|
|
162
|
+
| `docs/*.md` | (setup) 5 docs globais preenchidos do TRD (architecture, domain, conventions, apiContracts, decisions) |
|
|
163
|
+
| `.context.md` | Atualizado: `approved` → `design_done` |
|
|
164
|
+
|
|
165
|
+
## Pós-condições
|
|
166
|
+
- SDD é fonte única de verdade para implementação
|
|
167
|
+
- Toda informação para implementar está no SDD — nenhuma consulta externa necessária
|
|
168
|
+
- Rastreabilidade: SDD → PRD/TRD → insumos
|
|
169
|
+
|
|
170
|
+
## Erros
|
|
171
|
+
|
|
172
|
+
| Erro | Ação |
|
|
173
|
+
|------|------|
|
|
174
|
+
| Nome não informado | Parar, mostrar exemplo |
|
|
175
|
+
| Status anterior a extract_done | Parar, sugerir /sf-extract |
|
|
176
|
+
| Status posterior a approved | Informar que SDD já foi gerado |
|
|
177
|
+
| Ambiguidades pendentes no PRD/TRD | Parar, listar ambiguidades |
|
|
178
|
+
| PRD/TRD não encontrado | Parar, sugerir /sf-extract |
|
|
179
|
+
| docs/ vazio (em features) | Parar, sugerir /sf-setup-projeto |
|
|
180
|
+
| Informação insuficiente no PRD/TRD para gerar seção | NÃO inventar — marcar seção como incompleta, reportar ao usuário |
|