spec-first-copilot 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 (57) hide show
  1. package/README.md +252 -167
  2. package/bin/cli.js +70 -70
  3. package/lib/init.js +92 -92
  4. package/lib/update.js +132 -132
  5. package/package.json +1 -1
  6. package/templates/.ai/memory/napkin.md +68 -68
  7. package/templates/.github/CHANGELOG.md +121 -0
  8. package/templates/.github/adapters/SETUP.md +314 -314
  9. package/templates/.github/adapters/confluence.md +295 -295
  10. package/templates/.github/adapters/errors.md +234 -234
  11. package/templates/.github/adapters/filesystem.md +353 -353
  12. package/templates/.github/adapters/interface.md +301 -301
  13. package/templates/.github/adapters/naming.md +241 -241
  14. package/templates/.github/adapters/registry.md +244 -244
  15. package/templates/.github/agents/backend-coder.md +14 -14
  16. package/templates/.github/agents/db-coder.md +165 -165
  17. package/templates/.github/agents/doc-writer.md +66 -53
  18. package/templates/.github/agents/frontend-coder.md +5 -5
  19. package/templates/.github/agents/infra-coder.md +341 -341
  20. package/templates/.github/agents/reviewer.md +6 -6
  21. package/templates/.github/agents/security-reviewer.md +153 -153
  22. package/templates/.github/copilot-instructions.md +272 -262
  23. package/templates/.github/instructions/docs.instructions.md +147 -145
  24. package/templates/.github/instructions/sensitive-files.instructions.md +32 -32
  25. package/templates/.github/rules.md +229 -229
  26. package/templates/.github/scripts/bootstrap-confluence.js +289 -223
  27. package/templates/.github/skills/sf-design/SKILL.md +161 -216
  28. package/templates/.github/skills/sf-dev/SKILL.md +204 -351
  29. package/templates/.github/skills/sf-discovery/SKILL.md +415 -414
  30. package/templates/.github/skills/sf-extract/SKILL.md +225 -249
  31. package/templates/.github/skills/sf-load/SKILL.md +296 -295
  32. package/templates/.github/skills/sf-mcp/SKILL.md +386 -385
  33. package/templates/.github/skills/sf-merge-docs/SKILL.md +152 -100
  34. package/templates/.github/skills/sf-plan/SKILL.md +152 -128
  35. package/templates/.github/skills/sf-publish/SKILL.md +144 -143
  36. package/templates/.github/skills/sf-session-finish/SKILL.md +93 -120
  37. package/templates/.github/skills/sf-start/SKILL.md +192 -145
  38. package/templates/.github/templates/estrutura/apiContracts.template.md +160 -159
  39. package/templates/.github/templates/estrutura/architecture.template.md +169 -168
  40. package/templates/.github/templates/estrutura/conventions.template.md +214 -212
  41. package/templates/.github/templates/estrutura/decisions.template.md +107 -107
  42. package/templates/.github/templates/estrutura/domain.template.md +161 -160
  43. package/templates/.github/templates/feature/PRD.template.md +279 -286
  44. package/templates/.github/templates/feature/Progresso.template.md +141 -141
  45. package/templates/.github/templates/feature/TRD.template.md +358 -0
  46. package/templates/.github/templates/feature/context.template.md +89 -48
  47. package/templates/.github/templates/feature/extract-log.template.md +49 -39
  48. package/templates/.github/templates/feature/projetos.template.yaml +79 -79
  49. package/templates/.github/templates/global/progresso_global.template.md +59 -57
  50. package/templates/.github/templates/specs/brief.template.md +66 -59
  51. package/templates/.github/templates/specs/contracts.template.md +147 -141
  52. package/templates/.github/templates/specs/scenarios.template.md +125 -117
  53. package/templates/.github/templates/specs/tasks.template.md +65 -63
  54. package/templates/_gitignore +35 -35
  55. package/templates/sfw.config.yml.example +147 -147
  56. package/templates/.github/templates/feature/backlog-extraido.template.md +0 -156
  57. package/templates/.github/templates/feature/sdd.template.md +0 -559
@@ -1,216 +1,161 @@
1
- # /sf-design $ARGUMENTS
2
-
3
- Skill atômica de design. Lê PRD aprovado + chunks tech do extract-log e gera SDD.
4
- `$ARGUMENTS` = nome do scope (ex: `app_barbearia`, `feat_cadastro_cliente`).
5
-
6
- Em **first-run** (docs/ ausente): popula SDD §Sistema completo + cria docs/ + projetos.yaml.
7
- Em **feature** (docs/ existe): popula SDD das áreas tocadas + §11 Delta Specs pro /sf-merge-docs.
8
-
9
- ## Agente: Architect (Opus)
10
-
11
- Técnico e preciso. Gera contratos completos. Toda decisão tem justificativa.
12
-
13
- ## Pré-condições
14
-
15
- | # | Validação | Se falhar |
16
- |---|-----------|-----------|
17
- | 1 | `$ARGUMENTS` informado | Parar |
18
- | 2 | `.context.md` existe com status `extract_done` ou `approved` | Se anterior → "Rode /sf-extract $ARGUMENTS primeiro". Se posterior → "SDD já gerado" |
19
- | 3 | `workspace/Output/$ARGUMENTS/PRD.md` existe | Parar → "Rode /sf-extract $ARGUMENTS primeiro" |
20
- | 4 | `.extract-log.md` existe (pra consumir tech chunks) | Parar "/sf-extract não gerou extract-log" |
21
-
22
- Note: **não validar** presença de `docs/`ausência é válida (first_run).
23
-
24
- ## Passos
25
-
26
- ### 1. Carregar contexto
27
-
28
- - `.context.md` → `first_run`, `prd_empty`
29
- - `workspace/Output/$ARGUMENTS/PRD.md` (pode estar empty)
30
- - `workspace/Output/$ARGUMENTS/.extract-log.md` → seção "Tech chunks" pra §Sistema e áreas tech
31
- - `docs/` se existir (feature mode: usa como baseline pra §Sistema; não preenche subseções que não mudam)
32
- - `workspace/Output/$ARGUMENTS/sf-discovery.md` se existir
33
- - `.github/rules.md`
34
- - Template `.github/templates/sf-feature/sdd.template.md`
35
-
36
- ### 2. Checkpoint de aprovação
37
-
38
- Se status é `extract_done`:
39
- - Perguntar: "O PRD foi revisado e está aprovado? (s/n)"
40
- - Se PRD é `empty: true`: perguntar "Os chunks tech do extract-log estão revisados?"
41
- - Se SIM → atualizar `.context.md` para `approved` → continuar
42
- - Se NÃO → parar
43
-
44
- ### 3. Verificar ambiguidades pendentes
45
-
46
- - Ler §14 do PRD (Ambiguidades)
47
- - Filtrar: as SEM resposta do usuário E SEM marcador "resolvido em docs/..."
48
- - Se restou alguma PARAR, listar pendentes em formato:
49
-
50
- ```
51
- Ambiguidades pendentes em PRD §14:
52
-
53
- AMB-001: {pergunta}
54
- AMB-003: {pergunta}
55
-
56
- Como responder:
57
- 1. Abra workspace/Output/$ARGUMENTS/PRD.md
58
- 2. até §14 e preencha a coluna `Resposta` em cada linha pendente
59
- 3. Salve e rode /sf-design $ARGUMENTS de novo
60
-
61
- Mais detalhes em .github/skills/sf-extract/SKILL.md "Como responder ambiguidades".
62
- ```
63
-
64
- ### 4. Branch first-run vs feature
65
-
66
- Ler `first_run` do `.context.md`.
67
-
68
- #### Branch A — first_run = true (bootstrap)
69
-
70
- SDD §Sistema deve ser preenchido COMPLETO (todas 7 subseções).
71
- SDD §Área-X: popular todas as áreas aplicáveis (scaffolding inicial baseline).
72
- §11 Delta Specs: TUDO em ADDED (docs/ nasce a partir daqui).
73
-
74
- #### Branch B first_run = false (feature/incremento)
75
-
76
- SDD §Sistema: popular APENAS subseções que esta feature MUDA.
77
- Se feature não altera stack/arquitetura/etc → marcar §Sistema como "N/A feature não altera baseline".
78
- SDD §Área-X: popular apenas áreas tocadas (GATE=SIM); resto marca N/A.
79
- §11 Delta Specs: ADDED/MODIFIED/REMOVED refletindo impacto cross-feature.
80
-
81
- ### 5. Gerar SDD
82
-
83
- Usar template `.github/templates/sf-feature/sdd.template.md`:
84
-
85
- **Meta**: preencher `first_run`, `PRD empty`, `áreas tocadas`.
86
-
87
- **Seções obrigatórias** (seguir template v3):
88
- - §1 Visão Geral escopo claro
89
- - §2 Decisões de Design mini-ADRs com justificativa + origem (PRD §X ou extract-log §Y)
90
- - §3 §Sistema 7 subseções gateáveis (ver Branch A/B)
91
- - §4 §Área-Backend com GATE SIM/NÃO
92
- - §5 §Área-Frontend — com GATE SIM/NÃO
93
- - §6 §Área-DB com GATE SIM/NÃO
94
- - §7 §Área-Infra — com GATE SIM/NÃO
95
- - §8 Fluxos de Dados cross-area
96
- - §9 Estratégia de Testes (áreas tocadas)
97
- - §10 Fora de Escopo
98
- - §11 Delta Specs ADDED/MODIFIED/REMOVED (OBRIGATÓRIO, mesmo vazio)
99
- - §12 Ambiguidades Pendentes (com coluna "Consultei docs/?")
100
- - Rastreabilidade PRD → SDD + extract-log chunks → SDD
101
-
102
- **Regra auth em endpoints**: todo endpoint em §4.1 DEVE ter Autenticação e Autorização explícitas.
103
- Se não coberto pelo PRD → consultar `docs/conventions.md §Autenticação`.
104
- Se ausente → ambiguidade em §12.
105
-
106
- ### 6. Gerar `docs/` (APENAS first_run)
107
-
108
- > Este passo executa quando `first_run = true`.
109
-
110
- Ler SDD §Sistema e popular 5 arquivos em `docs/` usando os templates de `.github/templates/estrutura/`:
111
-
112
- | Doc gerado | Fontes (SDD) |
113
- |-----------|--------------|
114
- | `architecture.md` | §3.1 Stack + §3.2 Arquitetura + §3.3 Ambientes + §3.4 Infra |
115
- | `domain.md` | PRD §1+§2+§8 (se não-empty) + SDD §6 §Área-DB + §3.2 |
116
- | `conventions.md` | §3.5 Segurança + §3.4 Infra (env vars) + §3.6 API + §3.7 Monitoring |
117
- | `apiContracts.md` | §3.6 Convenções de API + §4.1 Endpoints (se first-run tem) |
118
- | `decisions.md` | §2 Decisões de Design (transcrever como ADR-001, ADR-002...) |
119
-
120
- Regras:
121
- - Ler templatepreencher TODAS as seções com dados do SDD
122
- - Remover bloco `<!-- INSTRUÇÕES -->` do doc gerado
123
- - Changelog inicia vazio
124
- - Se SDD não tem dados pra uma seção → marcar "A definir"
125
- - `decisions.md` é preenchido com ADRs extraídos do SDD §2
126
-
127
- ### 7. Gerar `projetos.yaml` (APENAS first_run)
128
-
129
- Mapeia arquitetura do SDD §3.2 pra repositórios independentes.
130
- Cada serviço = 1 repo. Repos serão criados/clonados pelo `/sf-dev` (INFRA-001).
131
-
132
- 1. Identificar serviços separados no SDD §3.2 Containers (api, worker, web, mobile, etc.)
133
- 2. Perguntar ao usuário:
134
- - Organização/usuário do GitHub (ex: `empresa`)
135
- - Nome base do projeto (ex: `meu-projeto`)
136
- - Se algum repo já existe (pra clonar em vez de criar)
137
- 3. Gerar `projetos.yaml` na raiz usando template `.github/templates/sf-feature/projetos.template.yaml`
138
- 4. Mapear áreas de task para repos:
139
- - BACK → api (ou worker, se separado)
140
- - DB api (se usa migrations) ou repo próprio
141
- - FRONT → web
142
- - INFRA → todos (cross-repo)
143
- 5. Validar: cada área DEVE mapear pra exatamente 1 repo
144
-
145
- **Regra**: Se SDD define API e Worker como containers separados, DEVEM ser repos separados. Nunca juntar serviços que o SDD definiu como distintos.
146
-
147
- ### 8. Projetar SDD em `specs/$ARGUMENTS/` (sempre)
148
-
149
- Após gerar/atualizar o SDD, criar/sobrescrever os 4 arquivos em `specs/$ARGUMENTS/`
150
- como projeções pro coder agent consumir:
151
-
152
- | Arquivo | Projeção de | Inclui |
153
- |---------|-------------|--------|
154
- | `brief.md` | SDD §1 + §2 + §10 | Problema, Solução, Serviços tocados (de projetos.yaml), Escopo, Decisões |
155
- | `contracts.md` | SDD §3 + §4 + §5 + §6 + §7 (§Sistema + áreas tocadas) | Dados (schema/constraints), Validações de Entrada (separadas de RN), API, Integrações, RN com enforcement point |
156
- | `scenarios.md` | SDD §5.2 + §8 + §9 (fluxos + CAs) | Pré-condições de estado, Fluxos happy path, Fluxos de erro (seção própria), UI por componente, CAs com Pré-condição + Given/When/Then + Teste |
157
- | `tasks.md` | stub (preenchido pelo `/sf-plan`) | — |
158
-
159
- Regras:
160
- - Projeções são REGENERÁVEISao re-rodar `/sf-design`, sobrescreve
161
- - NUNCA editar direto em `specs/` SDD é a fonte
162
- - Templates em `.github/templates/specs/`
163
- - Coders e Reviewer leem daqui, NUNCA do SDD direto
164
-
165
- ### 9. Atualizar `.context.md`
166
-
167
- ```yaml
168
- status: "design_done"
169
- areas_tocadas: [BACK, DB] # derivado dos GATEs do SDD
170
- ultima_skill: "/sf-design"
171
- atualizado_em: "{{ISO_DATETIME}}"
172
- ```
173
-
174
- ### 10. Publicar SDD no backend (OBRIGATÓRIO quando config existe)
175
-
176
- **Este passo NÃO é opcional**. Tomar decisão baseada em arquivo:
177
-
178
- | Detecção | Ação |
179
- |----------|------|
180
- | `sfw.config.yml` NÃO existe | Pular silenciosamente. Registrar no output: "publish: skipped (no sfw.config.yml)" |
181
- | `sfw.config.yml` existe | **Chamar `/sf-publish $ARGUMENTS SDD`** — sem condicional. Execute. |
182
-
183
- `/sf-publish` respeita `mode` de cada target. Ver `.github/skills/sf-publish/SKILL.md`.
184
-
185
- ### 11. Saída obrigatória
186
-
187
- Antes de terminar, a skill DEVE reportar:
188
-
189
- ```
190
- /sf-design $ARGUMENTS — completo (first_run={true|false})
191
-
192
- Artefatos locais:
193
- - workspace/Output/$ARGUMENTS/sdd.md
194
- - specs/$ARGUMENTS/{brief,contracts,scenarios}.md
195
- {se first_run: + docs/*.md (5 arquivos) + projetos.yaml}
196
-
197
- Áreas tocadas: [{lista do Meta do SDD}]
198
-
199
- Publish:
200
- - {target-name}: {CREATED|UPDATED|SKIPPED|CONFLICT|ERROR} — ver .ai/sf-publish-log.md
201
- OU
202
- - SKIPPED (no sfw.config.yml)
203
-
204
- Próximo passo:
205
- /sf-plan $ARGUMENTS ← gerar tasks por área
206
- ```
207
-
208
- Se `/sf-publish` retornou ERROR, a skill NÃO falha — artefato local está salvo.
209
-
210
- ## Notas
211
-
212
- - **first_run é imutável** — vem do `.context.md` criado pelo `/sf-start`
213
- - Em first_run, `docs/` é criado **depois** do SDD (passo 6) — SDD §3 §Sistema é a fonte
214
- - `projetos.yaml` é gerado uma única vez (first_run) — features podem atualizá-lo se adicionarem novo serviço (via `/sf-merge-docs`? ou edição manual — decidir se virar dor)
215
- - `/sf-merge-docs` é chamado automaticamente pelo `/sf-dev` ao final (não aqui)
216
- - Se user re-roda `/sf-design` numa feature após `/sf-merge-docs`, o `docs/` pode ter info nova que entra como baseline consulting (loop de refino)
1
+
2
+ # /sf-design $ARGUMENTS
3
+
4
+ Skill atômica de design. Consome PRD + TRD aprovados e gera **`docs/` + `specs/{nome}/` + `projetos.yaml`** (este último em first-run).
5
+ `$ARGUMENTS` = nome do scope (ex: `app_barbearia`, `feat_cadastro_cliente`).
6
+
7
+ Em **first-run** (docs/ ausente): cria docs/ a partir do PRD+TRD + projetos.yaml + specs/.
8
+ Em **feature** (docs/ existe): não cria docs/ (vem pelo /sf-merge-docs depois do /sf-dev) + gera apenas specs/ do scope atual.
9
+
10
+ ## Agente: Architect (Opus)
11
+
12
+ Técnico e preciso. Deriva projeções a partir dos docs source sem reinventar decisões.
13
+
14
+ ## Pré-condições
15
+
16
+ | # | Validação | Se falhar |
17
+ |---|-----------|-----------|
18
+ | 1 | `$ARGUMENTS` informado | Parar |
19
+ | 2 | `.context.md` existe com status `extract_done` ou posterior | Se anterior → "/sf-extract $ARGUMENTS primeiro" |
20
+ | 3 | Se `prd_existe=true`: `PRD.md` existe E `prd_aprovado=true` | Parar, listar ambiguidades pendentes (ver bloco abaixo) |
21
+ | 4 | Se `trd_existe=true`: `TRD.md` existe E `trd_aprovado=true` | Parar, listar ambiguidades pendentes |
22
+ | 5 | Pelo menos um dos 2 existe e está aprovado | Parar → "Extração falhou nenhum doc aprovado" |
23
+
24
+ Quando parar por ambiguidade:
25
+
26
+ ```
27
+ Ambiguidades pendentes em PRD §12 / TRD §10:
28
+
29
+ AMB-PRD-001: {pergunta}
30
+ AMB-TRD-002: {pergunta}
31
+
32
+ Como responder:
33
+ 1. Abra workspace/Output/$ARGUMENTS/PRD.md (ou TRD.md)
34
+ 2. até §Ambiguidades e preencha a coluna `Resposta`
35
+ 3. Marque prd_aprovado=true (ou trd_aprovado=true) em .context.md
36
+ 4. Rode /sf-design $ARGUMENTS de novo
37
+
38
+ Mais detalhes em .github/skills/sf-extract/SKILL.md → "Como responder ambiguidades".
39
+ ```
40
+
41
+ ## Passos
42
+
43
+ ### 1. Carregar contexto
44
+
45
+ - `.context.md` → `first_run`, `prd_existe`, `trd_existe`, `areas_tocadas` (vazio, vai popular)
46
+ - `workspace/Output/$ARGUMENTS/PRD.md` (se `prd_existe=true`)
47
+ - `workspace/Output/$ARGUMENTS/TRD.md` (se `trd_existe=true`)
48
+ - `docs/` (se existir feature mode): baseline cross-feature
49
+ - `discovery.md` (se existir): análise prévia
50
+ - `.github/rules.md`
51
+ - Templates:
52
+ - `.github/templates/specs/{brief,contracts,scenarios}.template.md`
53
+ - `.github/templates/estrutura/*.template.md` (só se first-run)
54
+ - `.github/templates/feature/projetos.template.yaml` (só se first-run)
55
+
56
+ ### 2. Determinar áreas tocadas
57
+
58
+ Ler GATEs do TRD §2-§5 (se TRD existe). Áreas marcadas como `GATE: SIM` vão pra
59
+ `.context.md areas_tocadas: [...]`.
60
+
61
+ Se TRD não existe (scope puro-produto, raro): `areas_tocadas = []`; `/sf-plan` vai
62
+ gerar só tasks de frontend com base no PRD §7.
63
+
64
+ ### 3. Branch first-run vs feature
65
+
66
+ Ler `first_run` do `.context.md`.
67
+
68
+ #### Branch A — first_run = true (bootstrap)
69
+
70
+ 1. **Gerar `docs/`** (5 arquivos em `docs/` na raiz do projeto):
71
+
72
+ | Doc gerado | Fontes |
73
+ |-----------|--------|
74
+ | `architecture.md` | TRD §1.1 Stack + §1.2 Arquitetura + §1.3 Ambientes + §1.4 Deploy + §5 §Área-Infra |
75
+ | `domain.md` | PRD §1 Contexto + §2 Atores + §3 Jornadas (resumo) + TRD §4 §Área-DB |
76
+ | `conventions.md` | TRD §1.5 Segurança baseline + §7 Segurança detalhada + §5.3 Env vars + §5.4 Monitoramento |
77
+ | `apiContracts.md` | TRD §2.1 Endpoints + convenções de rota inferidas |
78
+ | `decisions.md` | TRD §9 ADRs (transcritas como ADR-001, ADR-002... imutáveis) |
79
+
80
+ Regras:
81
+ - Ler template → preencher TODAS as seções com dados do PRD/TRD
82
+ - Remover bloco `<!-- INSTRUÇÕES -->` do doc gerado
83
+ - Changelog inicia vazio
84
+ - Se PRD ou TRD não tem dados pra uma seção → "A definir" (não deixar vazio)
85
+
86
+ 2. **Gerar `projetos.yaml`** na raiz:
87
+
88
+ - Identificar serviços separados no TRD §1.2 Containers (api, worker, web, etc.)
89
+ - Perguntar ao usuário: organização GitHub, nome base, se algum repo existe
90
+ - Mapear áreas repos (API+DB costumam ir juntos; Frontend separado)
91
+ - Validar: cada área em `areas_tocadas` tem repo correspondente
92
+
93
+ 3. **Gerar `specs/$ARGUMENTS/`** (passo 4 abaixo, comum a first-run e feature)
94
+
95
+ #### Branch B first_run = false (feature)
96
+
97
+ 1. **Não toca em `docs/`** (isso é trabalho do /sf-merge-docs após /sf-dev)
98
+ 2. **Não gera `projetos.yaml`** (já existe do first-run)
99
+ 3. **Gera apenas `specs/$ARGUMENTS/`**
100
+
101
+ ### 4. Gerar `specs/$ARGUMENTS/` (sempre)
102
+
103
+ Criar/sobrescrever os 4 arquivos em `specs/$ARGUMENTS/`:
104
+
105
+ | Arquivo | Projeção de | Conteúdo |
106
+ |---------|-------------|----------|
107
+ | `brief.md` | PRD §1 + §10 + §11 + TRD §1 | Problema, Solução, Serviços tocados (de projetos.yaml), Escopo (Dentro/Fora), Decisões principais (ADRs resumidas) |
108
+ | `contracts.md` | TRD §4 + §2.3 + §2.1 + §6 + PRD §5 | Dados (schema), Validações de Entrada, API (endpoints específicos), Integrações externas, Regras de Negócio com enforcement point |
109
+ | `scenarios.md` | PRD §3 + §8 + §7 + TRD §8 | Pré-condições globais, Fluxos happy path, Fluxos de erro (com Ref CA), UI por componente, CAs com Given/When/Then, Estratégia de testes |
110
+ | `tasks.md` | stub | (preenchido pelo `/sf-plan`) |
111
+
112
+ Regras:
113
+ - Projeções são **REGENERÁVEIS** — ao re-rodar `/sf-design`, sobrescreve
114
+ - NUNCA editar direto em `specs/` PRD/TRD são as fontes
115
+ - Templates em `.github/templates/specs/`
116
+ - Coders e Reviewer leem daqui, NUNCA de PRD/TRD direto
117
+
118
+ ### 5. Validação de consistência
119
+
120
+ Antes de terminar, verificar:
121
+ - Cada RN do PRD §5 aparece em `contracts.md Regras de Negócio` com enforcement point
122
+ - Cada endpoint do TRD §2.1 aparece em `contracts.md → API`
123
+ - Cada CA em `scenarios.md` mapeia pra pelo menos 1 RN ou 1 jornada
124
+ - Áreas em `areas_tocadas` têm entries em `contracts.md` e `scenarios.md`
125
+
126
+ Divergências → alertar no output, sem falhar.
127
+
128
+ ### 6. Atualizar `.context.md`
129
+
130
+ ```yaml
131
+ status: "design_done"
132
+ areas_tocadas: [BACK, DB, ...] # derivado do passo 2
133
+ ultima_skill: "/sf-design"
134
+ atualizado_em: "{{ISO_DATETIME}}"
135
+ ```
136
+
137
+ ### 7. Saída obrigatória
138
+
139
+ ```
140
+ /sf-design $ARGUMENTS completo ({{first-run | feature}})
141
+
142
+ Artefatos:
143
+ - specs/$ARGUMENTS/brief.md
144
+ - specs/$ARGUMENTS/contracts.md
145
+ - specs/$ARGUMENTS/scenarios.md
146
+ - specs/$ARGUMENTS/tasks.md (stub — será preenchido por /sf-plan)
147
+ (se first-run:)
148
+ - docs/architecture.md, domain.md, conventions.md, apiContracts.md, decisions.md
149
+ - projetos.yaml
150
+
151
+ Áreas tocadas: [BACK, DB, FRONT, INFRA]
152
+ Validação: {{N issues / passed}}
153
+
154
+ Próximo passo: /sf-plan $ARGUMENTS
155
+ ```
156
+
157
+ ## Regra de ouro
158
+
159
+ - `/sf-design` NUNCA reinventa decisões. Apenas projeta PRD+TRD pra formatos consumíveis.
160
+ - Se precisa de uma decisão nova que não está no PRD ou TRD: é ambiguidade voltar pra `/sf-extract` com novo insumo.
161
+ - Divergências entre PRD e TRD: **PRD vence em produto, TRD vence em técnica** (não há overlap por design).