spec-first-copilot 0.7.0-beta.1 → 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.
- package/README.md +252 -167
- package/bin/cli.js +70 -70
- package/lib/init.js +92 -92
- package/lib/update.js +132 -132
- package/package.json +1 -1
- package/templates/.ai/memory/napkin.md +68 -68
- package/templates/.github/CHANGELOG.md +560 -533
- package/templates/.github/adapters/SETUP.md +314 -314
- package/templates/.github/adapters/confluence.md +295 -295
- package/templates/.github/adapters/errors.md +234 -234
- package/templates/.github/adapters/filesystem.md +353 -353
- package/templates/.github/adapters/interface.md +301 -301
- package/templates/.github/adapters/naming.md +241 -241
- package/templates/.github/adapters/registry.md +244 -244
- 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 +66 -66
- 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 +272 -272
- package/templates/.github/instructions/docs.instructions.md +147 -145
- package/templates/.github/instructions/sensitive-files.instructions.md +32 -32
- package/templates/.github/rules.md +229 -229
- package/templates/.github/scripts/bootstrap-confluence.js +289 -289
- package/templates/.github/skills/sf-design/SKILL.md +161 -161
- package/templates/.github/skills/sf-dev/SKILL.md +204 -204
- package/templates/.github/skills/sf-discovery/SKILL.md +415 -415
- package/templates/.github/skills/sf-extract/SKILL.md +225 -225
- package/templates/.github/skills/sf-load/SKILL.md +296 -296
- package/templates/.github/skills/sf-mcp/SKILL.md +386 -386
- package/templates/.github/skills/sf-merge-docs/SKILL.md +152 -152
- package/templates/.github/skills/sf-plan/SKILL.md +152 -152
- package/templates/.github/skills/sf-publish/SKILL.md +144 -144
- package/templates/.github/skills/sf-session-finish/SKILL.md +93 -93
- package/templates/.github/skills/sf-start/SKILL.md +192 -192
- package/templates/.github/templates/estrutura/apiContracts.template.md +160 -159
- package/templates/.github/templates/estrutura/architecture.template.md +169 -168
- package/templates/.github/templates/estrutura/conventions.template.md +214 -212
- package/templates/.github/templates/estrutura/decisions.template.md +107 -107
- package/templates/.github/templates/estrutura/domain.template.md +161 -160
- package/templates/.github/templates/feature/PRD.template.md +279 -279
- package/templates/.github/templates/feature/Progresso.template.md +141 -141
- package/templates/.github/templates/feature/TRD.template.md +358 -358
- package/templates/.github/templates/feature/context.template.md +89 -89
- package/templates/.github/templates/feature/extract-log.template.md +49 -49
- package/templates/.github/templates/feature/projetos.template.yaml +79 -79
- package/templates/.github/templates/global/progresso_global.template.md +59 -57
- package/templates/.github/templates/specs/brief.template.md +66 -66
- package/templates/.github/templates/specs/contracts.template.md +147 -147
- package/templates/.github/templates/specs/scenarios.template.md +125 -125
- package/templates/.github/templates/specs/tasks.template.md +65 -65
- package/templates/_gitignore +35 -35
- package/templates/sfw.config.yml.example +147 -147
|
@@ -1,161 +1,161 @@
|
|
|
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. Vá 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 já 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).
|
|
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. Vá 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 já 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).
|