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
|
@@ -1,372 +1,372 @@
|
|
|
1
|
-
# SDD — {{NOME}}
|
|
2
|
-
|
|
3
|
-
> **Software Design Document** — Fonte de verdade para implementação.
|
|
4
|
-
> Gerado a partir do PRD.md (features) ou TRD.md (setup).
|
|
5
|
-
> O Coder lê APENAS este documento + task específica.
|
|
6
|
-
> Se não está no SDD, não será implementado.
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## Meta
|
|
11
|
-
|
|
12
|
-
| Campo | Valor |
|
|
13
|
-
|-------|-------|
|
|
14
|
-
| Nome | `{{NOME}}` |
|
|
15
|
-
| Tipo | `{{feature|setup}}` |
|
|
16
|
-
| Documento de origem | `
|
|
17
|
-
| Status | `rascunho` → `em revisão` → `aprovado` → `em dev` → `concluído` |
|
|
18
|
-
| Autor | /design |
|
|
19
|
-
| Criado em | |
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
<!--
|
|
24
|
-
=============================================================================
|
|
25
|
-
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
26
|
-
=============================================================================
|
|
27
|
-
|
|
28
|
-
QUANDO USAR: Gerado pelo /design após PRD (features) ou TRD (setup) aprovado.
|
|
29
|
-
QUEM GERA: Agent Architect (Opus).
|
|
30
|
-
|
|
31
|
-
COMO GERAR:
|
|
32
|
-
1. Ler APENAS o PRD.md ou TRD.md aprovado — NUNCA ler PM diretamente
|
|
33
|
-
2. Ler docs/
|
|
34
|
-
3. Traduzir requisitos (O QUE) em design técnico (COMO)
|
|
35
|
-
4. Manter rastreabilidade: cada item referencia o PRD/TRD (§X, RN-xxx)
|
|
36
|
-
5. Ser AUTOCONTIDO: o Coder não consulta PRD, TRD, PM, ou qualquer outro doc
|
|
37
|
-
|
|
38
|
-
PRINCÍPIOS:
|
|
39
|
-
- Conciso mas completo — se o Coder precisar de algo que não está aqui, o SDD está incompleto
|
|
40
|
-
- Contratos detalhados (request/response com schemas reais)
|
|
41
|
-
- Fluxos de dados como sequências textuais (não diagramas)
|
|
42
|
-
- Critérios de aceite em Given/When/Then (testáveis)
|
|
43
|
-
- Delta Specs obrigatório (o que muda no sistema global)
|
|
44
|
-
|
|
45
|
-
SEÇÕES: 11 seções fixas + Rastreabilidade. Não pular nenhuma.
|
|
46
|
-
Se uma seção não se aplica, escrever "N/A — [motivo]"
|
|
47
|
-
|
|
48
|
-
AUTENTICAÇÃO E AUTORIZAÇÃO (OBRIGATÓRIO):
|
|
49
|
-
- Em features: §5 (Endpoints) DEVE definir auth/authz para CADA endpoint:
|
|
50
|
-
- Autenticação: Bearer token, API Key, ou "público" (explícito)
|
|
51
|
-
- Autorização: quais roles/permissões acessam (ex: admin, user, owner)
|
|
52
|
-
- Se o PRD não definiu auth → usar o padrão de docs/
|
|
53
|
-
- Se não há padrão definido → PARAR e perguntar ao usuário
|
|
54
|
-
- Em setup: §7 Segurança do TRD define o mecanismo global (JWT, OAuth, etc.)
|
|
55
|
-
O SDD deve refletir isso em §2 Decisões de Design
|
|
56
|
-
|
|
57
|
-
SETUP vs FEATURE:
|
|
58
|
-
- Em setup (tipo=setup), várias seções serão N/A (§4 Regras, §5 Endpoints, §6 Telas, §7 Fluxos, §8 Integrações)
|
|
59
|
-
Isso é NORMAL — setup foca em §1 Visão, §2 Decisões, §3 Modelo, §9 Aceite, §11 Delta
|
|
60
|
-
- Em features (tipo=feature), todas seções devem ser preenchidas quando aplicáveis
|
|
61
|
-
- A tabela de Rastreabilidade muda: "PRD Seção → SDD Seção" para features, "TRD Seção → SDD Seção" para setup
|
|
62
|
-
|
|
63
|
-
=============================================================================
|
|
64
|
-
-->
|
|
65
|
-
|
|
66
|
-
## 1. Visão Geral
|
|
67
|
-
|
|
68
|
-
### O que é
|
|
69
|
-
<!-- 2-3 frases: feature, público-alvo, problema que resolve -->
|
|
70
|
-
|
|
71
|
-
### Escopo
|
|
72
|
-
<!-- Limites claros: o que ENTRA e o que FICA DE FORA -->
|
|
73
|
-
|
|
74
|
-
### Premissas
|
|
75
|
-
- [ ] <!-- Ex: Usuário já está autenticado ao acessar esta feature -->
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
## 2. Decisões de Design
|
|
80
|
-
|
|
81
|
-
> Mini-ADRs inline — cada decisão técnica relevante com justificativa.
|
|
82
|
-
> Referência: [
|
|
83
|
-
|
|
84
|
-
| # | Decisão | Justificativa | Alternativa descartada |
|
|
85
|
-
|---|---------|---------------|------------------------|
|
|
86
|
-
| 1 | | | |
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
## 3. Modelo de Dados
|
|
91
|
-
|
|
92
|
-
> Modelo completo para implementação. Tipos e constraints são obrigatórios.
|
|
93
|
-
|
|
94
|
-
### 3.1 Entidades
|
|
95
|
-
|
|
96
|
-
#### `{{nome_tabela}}`
|
|
97
|
-
|
|
98
|
-
| Campo | Tipo | Null? | Default | Constraint | Descrição |
|
|
99
|
-
|-------|------|-------|---------|------------|-----------|
|
|
100
|
-
| `id` | `UUID` | NOT NULL | `gen_random_uuid()` | PK | |
|
|
101
|
-
| `created_at` | `TIMESTAMPTZ` | NOT NULL | `NOW()` | | |
|
|
102
|
-
|
|
103
|
-
**Relações**:
|
|
104
|
-
- `tabela.campo` → `outra_tabela.campo` (FK, ON DELETE CASCADE)
|
|
105
|
-
|
|
106
|
-
**Índices**:
|
|
107
|
-
- `idx_tabela_campo` — tipo (btree/gin/gist) — justificativa
|
|
108
|
-
|
|
109
|
-
### 3.2 Migrations necessárias
|
|
110
|
-
|
|
111
|
-
| Ordem | Descrição | Dependência |
|
|
112
|
-
|-------|-----------|-------------|
|
|
113
|
-
| 1 | | nenhuma |
|
|
114
|
-
|
|
115
|
-
---
|
|
116
|
-
|
|
117
|
-
## 4. Regras de Negócio e Validações
|
|
118
|
-
|
|
119
|
-
> Cada regra rastreável ao PRD (coluna Ref). Cada validação com mensagem de erro.
|
|
120
|
-
> O Coder implementa EXATAMENTE o que está aqui — sem inferir regras extras.
|
|
121
|
-
|
|
122
|
-
### 4.1 Regras de Negócio
|
|
123
|
-
|
|
124
|
-
| ID | Regra | Onde aplica | Ref PRD |
|
|
125
|
-
|----|-------|-------------|---------|
|
|
126
|
-
| RN-001 | | back / front / banco | PRD §5 RN-001 |
|
|
127
|
-
|
|
128
|
-
### 4.2 Validações de Campos
|
|
129
|
-
|
|
130
|
-
| Campo | Validação | Obrigatório | Mensagem de erro |
|
|
131
|
-
|-------|-----------|-------------|-----------------|
|
|
132
|
-
| | | | |
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## 5. API — Endpoints
|
|
137
|
-
|
|
138
|
-
> Contratos completos. O Coder implementa exatamente estes schemas.
|
|
139
|
-
|
|
140
|
-
### `{{METHOD}} {{/api/v1/recurso}}` — {{Descrição}}
|
|
141
|
-
|
|
142
|
-
**Descrição**: {{o que faz}}
|
|
143
|
-
**Regras**: {{RN-xxx, RN-xxx}}
|
|
144
|
-
**Autenticação**: {{público | Bearer token | API Key}} — se não público, justificar
|
|
145
|
-
**Autorização**: {{roles permitidos: admin, user, owner}} — OBRIGATÓRIO se autenticado
|
|
146
|
-
**Rate Limit**: {{N req/min ou N/A}} — considerar para endpoints públicos/sensíveis
|
|
147
|
-
|
|
148
|
-
**Request Body**:
|
|
149
|
-
```json
|
|
150
|
-
{
|
|
151
|
-
"campo": "tipo (required|optional, validações)"
|
|
152
|
-
}
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
**Response {{STATUS}}**:
|
|
156
|
-
```json
|
|
157
|
-
{
|
|
158
|
-
"campo": "tipo"
|
|
159
|
-
}
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
**Erros**:
|
|
163
|
-
| Status | Código | Quando |
|
|
164
|
-
|--------|--------|--------|
|
|
165
|
-
| 401 | `UNAUTHORIZED` | Token ausente ou inválido |
|
|
166
|
-
| 403 | `FORBIDDEN` | Sem permissão para este recurso |
|
|
167
|
-
| 400 | `VALIDATION_ERROR` | Campos inválidos |
|
|
168
|
-
|
|
169
|
-
<!-- Repetir bloco para cada endpoint -->
|
|
170
|
-
|
|
171
|
-
> **Regra de Auth**: Todo endpoint DEVE ter Autenticação e Autorização definidos explicitamente.
|
|
172
|
-
> Se público, escrever "público" — nunca omitir. Erros 401/403 são obrigatórios em endpoints autenticados.
|
|
173
|
-
|
|
174
|
-
---
|
|
175
|
-
|
|
176
|
-
## 6. Componentes e Telas
|
|
177
|
-
|
|
178
|
-
> Cada tela com seus componentes, estados e comportamentos.
|
|
179
|
-
|
|
180
|
-
### Tela: {{Nome}}
|
|
181
|
-
|
|
182
|
-
| Propriedade | Valor |
|
|
183
|
-
|-------------|-------|
|
|
184
|
-
| **Rota** | `{{/rota}}` |
|
|
185
|
-
| **Permissão** | {{roles}} |
|
|
186
|
-
| **Estado inicial** | {{descrição}} |
|
|
187
|
-
|
|
188
|
-
**Componentes**:
|
|
189
|
-
| Componente | Tipo | Comportamento |
|
|
190
|
-
|------------|------|---------------|
|
|
191
|
-
| | | |
|
|
192
|
-
|
|
193
|
-
**Estados**:
|
|
194
|
-
| Estado | Gatilho | Efeito visual |
|
|
195
|
-
|--------|---------|---------------|
|
|
196
|
-
| loading | requisição em andamento | skeleton/spinner |
|
|
197
|
-
| empty | lista vazia | mensagem |
|
|
198
|
-
| error | falha na API | toast + retry |
|
|
199
|
-
|
|
200
|
-
<!-- Repetir bloco para cada tela -->
|
|
201
|
-
|
|
202
|
-
---
|
|
203
|
-
|
|
204
|
-
## 7. Fluxos de Dados
|
|
205
|
-
|
|
206
|
-
> Sequências de operações para cada funcionalidade principal.
|
|
207
|
-
> O Coder segue estes fluxos como guia de implementação.
|
|
208
|
-
|
|
209
|
-
### Fluxo: {{Nome}} (fluxo principal)
|
|
210
|
-
|
|
211
|
-
```
|
|
212
|
-
Usuário {{ação}} → [front] {{passo}} → [back] {{passo}}
|
|
213
|
-
→ [back] {{passo}}
|
|
214
|
-
→ [back] retorna {{response}}
|
|
215
|
-
→ [front] {{feedback}}
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
### Fluxo: {{Nome}} (fluxo de erro)
|
|
219
|
-
|
|
220
|
-
```
|
|
221
|
-
{{sequência do erro}}
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
<!-- Adicionar fluxos para cada funcionalidade -->
|
|
225
|
-
|
|
226
|
-
---
|
|
227
|
-
|
|
228
|
-
## 8. Integrações Externas
|
|
229
|
-
|
|
230
|
-
> Serviços de terceiros ou outros módulos do sistema.
|
|
231
|
-
|
|
232
|
-
| Serviço | Protocolo | Quando | Timeout | Retry | Fallback |
|
|
233
|
-
|---------|-----------|--------|---------|-------|----------|
|
|
234
|
-
| | | | | | |
|
|
235
|
-
|
|
236
|
-
### Contrato: {{Nome do Serviço}}
|
|
237
|
-
|
|
238
|
-
**Request**: `{{METHOD}} {{URL}}`
|
|
239
|
-
```json
|
|
240
|
-
{ }
|
|
241
|
-
```
|
|
242
|
-
**Response esperada**:
|
|
243
|
-
```json
|
|
244
|
-
{ }
|
|
245
|
-
```
|
|
246
|
-
**Tratamento de falha**: <!-- O que acontece se o serviço estiver fora -->
|
|
247
|
-
|
|
248
|
-
---
|
|
249
|
-
|
|
250
|
-
## 9. Estratégia de Testes
|
|
251
|
-
|
|
252
|
-
> Define O QUE testar, COMO testar, ONDE ficam os testes e QUANDO rodar.
|
|
253
|
-
> O Coder implementa testes junto com o código — não é etapa separada.
|
|
254
|
-
|
|
255
|
-
### 9.1 Testes por área
|
|
256
|
-
|
|
257
|
-
| Área | Tipo | Framework | Comando | O que cobre |
|
|
258
|
-
|------|------|-----------|---------|-------------|
|
|
259
|
-
| BACK | Unit | <!-- xUnit/Jest/pytest --> | <!-- dotnet test --> | Services, validações RN-*, regras de negócio |
|
|
260
|
-
| BACK | Integration | <!-- WebApplicationFactory/Supertest --> | <!-- dotnet test --filter Integration --> | Endpoints completos (request → response) |
|
|
261
|
-
| FRONT | Unit | <!-- React Testing Library --> | <!-- npm test --> | Componentes com lógica, hooks customizados |
|
|
262
|
-
| FRONT | E2E | <!-- Playwright --> | <!-- npx playwright test --> | Jornadas do §4 / fluxos do §7 |
|
|
263
|
-
| BANCO | Migration | <!-- EF migrations/Knex --> | <!-- dotnet ef database update --> | Migration roda + rollback sem erro |
|
|
264
|
-
|
|
265
|
-
### 9.2 Estrutura de testes
|
|
266
|
-
|
|
267
|
-
```
|
|
268
|
-
<!-- Adaptar à stack do projeto. Exemplo: -->
|
|
269
|
-
backend/
|
|
270
|
-
├── tests/
|
|
271
|
-
│ ├── Unit/ ← services, validações
|
|
272
|
-
│ ├── Integration/ ← endpoints (in-memory ou testcontainers)
|
|
273
|
-
│ └── Fixtures/ ← dados de teste
|
|
274
|
-
frontend/
|
|
275
|
-
├── tests/
|
|
276
|
-
│ ├── components/ ← unit (testing library)
|
|
277
|
-
│ └── e2e/ ← playwright (jornadas completas)
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
### 9.3 Critérios de Aceite
|
|
281
|
-
|
|
282
|
-
> Cenários testáveis em formato Given/When/Then.
|
|
283
|
-
> Cada CA mapeia para pelo menos 1 teste automatizado.
|
|
284
|
-
|
|
285
|
-
#### CA-001: {{Título do cenário}}
|
|
286
|
-
|
|
287
|
-
```gherkin
|
|
288
|
-
Given {{pré-condição}}
|
|
289
|
-
When {{ação do usuário}}
|
|
290
|
-
Then {{resultado esperado}}
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
<!-- Adicionar CA-NNN para cada cenário relevante -->
|
|
294
|
-
|
|
295
|
-
| CA | Tipo de teste | Arquivo de teste |
|
|
296
|
-
|----|--------------|-----------------|
|
|
297
|
-
| CA-001 | integration | `tests/Integration/{{Teste}}.cs` |
|
|
298
|
-
| CA-002 | e2e | `tests/e2e/{{teste}}.spec.ts` |
|
|
299
|
-
|
|
300
|
-
### 9.4 Métricas de Sucesso
|
|
301
|
-
|
|
302
|
-
| Métrica | Threshold | Como medir |
|
|
303
|
-
|---------|-----------|------------|
|
|
304
|
-
| | | |
|
|
305
|
-
|
|
306
|
-
---
|
|
307
|
-
|
|
308
|
-
## 10. Fora de Escopo
|
|
309
|
-
|
|
310
|
-
> Lista explícita — evita scope creep durante implementação.
|
|
311
|
-
|
|
312
|
-
| # | Item | Motivo | Quando entra |
|
|
313
|
-
|---|------|--------|--------------|
|
|
314
|
-
| 1 | | | |
|
|
315
|
-
|
|
316
|
-
---
|
|
317
|
-
|
|
318
|
-
## 11. Delta Specs
|
|
319
|
-
|
|
320
|
-
> O que muda no sistema global com esta feature.
|
|
321
|
-
> Pós `/dev`: estas deltas são mergeadas nos docs de `docs
|
|
322
|
-
|
|
323
|
-
### ADDED
|
|
324
|
-
<!-- Novos: tabelas, endpoints, componentes, regras, permissões -->
|
|
325
|
-
-
|
|
326
|
-
|
|
327
|
-
### MODIFIED
|
|
328
|
-
<!-- Alterações em funcionalidades/docs existentes -->
|
|
329
|
-
-
|
|
330
|
-
|
|
331
|
-
### REMOVED
|
|
332
|
-
<!-- Funcionalidades ou comportamentos que deixam de existir -->
|
|
333
|
-
-
|
|
334
|
-
|
|
335
|
-
---
|
|
336
|
-
|
|
337
|
-
## Rastreabilidade Origem → SDD
|
|
338
|
-
|
|
339
|
-
> Mapa rápido de referência cruzada. Garante que nenhum requisito foi perdido.
|
|
340
|
-
|
|
341
|
-
### Para features (PRD → SDD):
|
|
342
|
-
|
|
343
|
-
| PRD Seção | SDD Seção | Notas |
|
|
344
|
-
|-----------|-----------|-------|
|
|
345
|
-
| §3 Entidades | §3 Modelo de Dados | Tipos e constraints detalhados |
|
|
346
|
-
| §4 Jornadas | §7 Fluxos de Dados | Traduzidas em sequências técnicas |
|
|
347
|
-
| §5 Regras (RN-xxx) | §4 Regras e Validações | Mantém mesmos IDs |
|
|
348
|
-
| §6 Validações | §4.2 Validações de Campos | Com mensagens de erro |
|
|
349
|
-
| §7 Telas | §6 Componentes e Telas | Com estados e comportamentos |
|
|
350
|
-
| §8 Integrações | §8 Integrações Externas | Com contratos detalhados |
|
|
351
|
-
| §9 Erros | §5 Endpoints (Erros) | Mapeados por endpoint |
|
|
352
|
-
| §10 Não-Funcionais | §9 Métricas de Sucesso | Thresholds mensuráveis |
|
|
353
|
-
| §12 Fora de Escopo | §10 Fora de Escopo | Mantido igual |
|
|
354
|
-
|
|
355
|
-
### Para setup (TRD → SDD):
|
|
356
|
-
|
|
357
|
-
| TRD Seção | SDD Seção | Notas |
|
|
358
|
-
|-----------|-----------|-------|
|
|
359
|
-
| §1 Visão | §1 Visão Geral | Escopo do setup |
|
|
360
|
-
| §2 Stack | §2 Decisões de Design | Justificativas expandidas |
|
|
361
|
-
| §3 Arquitetura | §2 Decisões de Design | Padrões arquiteturais |
|
|
362
|
-
| §4 Modelo de Dados | §3 Modelo de Dados | Tipos exatos, constraints, índices |
|
|
363
|
-
| §5 API | §5 (N/A em setup) | Convenções no TRD, endpoints nas features |
|
|
364
|
-
| §6 Infra | §1 Escopo | Infra base |
|
|
365
|
-
| §7 Segurança | §2 Decisões + §3 | JWT, tabela usuarios |
|
|
366
|
-
| §8 Módulos | §10 Fora de Escopo | Módulos futuros |
|
|
367
|
-
|
|
368
|
-
---
|
|
369
|
-
|
|
370
|
-
> **Regra**: Este SDD é a **única fonte de verdade** para implementação.
|
|
371
|
-
> O Coder não consulta PRD, TRD, PM, ou qualquer outro documento.
|
|
372
|
-
> Qualquer alteração pós-aprovação deve ser refletida aqui primeiro.
|
|
1
|
+
# SDD — {{NOME}}
|
|
2
|
+
|
|
3
|
+
> **Software Design Document** — Fonte de verdade para implementação.
|
|
4
|
+
> Gerado a partir do PRD.md (features) ou TRD.md (setup).
|
|
5
|
+
> O Coder lê APENAS este documento + task específica.
|
|
6
|
+
> Se não está no SDD, não será implementado.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Meta
|
|
11
|
+
|
|
12
|
+
| Campo | Valor |
|
|
13
|
+
|-------|-------|
|
|
14
|
+
| Nome | `{{NOME}}` |
|
|
15
|
+
| Tipo | `{{feature|setup}}` |
|
|
16
|
+
| Documento de origem | `workspace/Output/{{NOME}}/{{PRD|TRD}}.md` |
|
|
17
|
+
| Status | `rascunho` → `em revisão` → `aprovado` → `em dev` → `concluído` |
|
|
18
|
+
| Autor | /design |
|
|
19
|
+
| Criado em | |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
<!--
|
|
24
|
+
=============================================================================
|
|
25
|
+
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
26
|
+
=============================================================================
|
|
27
|
+
|
|
28
|
+
QUANDO USAR: Gerado pelo /design após PRD (features) ou TRD (setup) aprovado.
|
|
29
|
+
QUEM GERA: Agent Architect (Opus).
|
|
30
|
+
|
|
31
|
+
COMO GERAR:
|
|
32
|
+
1. Ler APENAS o PRD.md ou TRD.md aprovado — NUNCA ler PM diretamente
|
|
33
|
+
2. Ler docs/ para contexto de stack, API, modelo de dados
|
|
34
|
+
3. Traduzir requisitos (O QUE) em design técnico (COMO)
|
|
35
|
+
4. Manter rastreabilidade: cada item referencia o PRD/TRD (§X, RN-xxx)
|
|
36
|
+
5. Ser AUTOCONTIDO: o Coder não consulta PRD, TRD, PM, ou qualquer outro doc
|
|
37
|
+
|
|
38
|
+
PRINCÍPIOS:
|
|
39
|
+
- Conciso mas completo — se o Coder precisar de algo que não está aqui, o SDD está incompleto
|
|
40
|
+
- Contratos detalhados (request/response com schemas reais)
|
|
41
|
+
- Fluxos de dados como sequências textuais (não diagramas)
|
|
42
|
+
- Critérios de aceite em Given/When/Then (testáveis)
|
|
43
|
+
- Delta Specs obrigatório (o que muda no sistema global)
|
|
44
|
+
|
|
45
|
+
SEÇÕES: 11 seções fixas + Rastreabilidade. Não pular nenhuma.
|
|
46
|
+
Se uma seção não se aplica, escrever "N/A — [motivo]"
|
|
47
|
+
|
|
48
|
+
AUTENTICAÇÃO E AUTORIZAÇÃO (OBRIGATÓRIO):
|
|
49
|
+
- Em features: §5 (Endpoints) DEVE definir auth/authz para CADA endpoint:
|
|
50
|
+
- Autenticação: Bearer token, API Key, ou "público" (explícito)
|
|
51
|
+
- Autorização: quais roles/permissões acessam (ex: admin, user, owner)
|
|
52
|
+
- Se o PRD não definiu auth → usar o padrão de docs/conventions.md (seção Autenticação)
|
|
53
|
+
- Se não há padrão definido → PARAR e perguntar ao usuário
|
|
54
|
+
- Em setup: §7 Segurança do TRD define o mecanismo global (JWT, OAuth, etc.)
|
|
55
|
+
O SDD deve refletir isso em §2 Decisões de Design
|
|
56
|
+
|
|
57
|
+
SETUP vs FEATURE:
|
|
58
|
+
- Em setup (tipo=setup), várias seções serão N/A (§4 Regras, §5 Endpoints, §6 Telas, §7 Fluxos, §8 Integrações)
|
|
59
|
+
Isso é NORMAL — setup foca em §1 Visão, §2 Decisões, §3 Modelo, §9 Aceite, §11 Delta
|
|
60
|
+
- Em features (tipo=feature), todas seções devem ser preenchidas quando aplicáveis
|
|
61
|
+
- A tabela de Rastreabilidade muda: "PRD Seção → SDD Seção" para features, "TRD Seção → SDD Seção" para setup
|
|
62
|
+
|
|
63
|
+
=============================================================================
|
|
64
|
+
-->
|
|
65
|
+
|
|
66
|
+
## 1. Visão Geral
|
|
67
|
+
|
|
68
|
+
### O que é
|
|
69
|
+
<!-- 2-3 frases: feature, público-alvo, problema que resolve -->
|
|
70
|
+
|
|
71
|
+
### Escopo
|
|
72
|
+
<!-- Limites claros: o que ENTRA e o que FICA DE FORA -->
|
|
73
|
+
|
|
74
|
+
### Premissas
|
|
75
|
+
- [ ] <!-- Ex: Usuário já está autenticado ao acessar esta feature -->
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 2. Decisões de Design
|
|
80
|
+
|
|
81
|
+
> Mini-ADRs inline — cada decisão técnica relevante com justificativa.
|
|
82
|
+
> Referência: [decisions.md](../../../docs/decisions.md) para decisões globais.
|
|
83
|
+
|
|
84
|
+
| # | Decisão | Justificativa | Alternativa descartada |
|
|
85
|
+
|---|---------|---------------|------------------------|
|
|
86
|
+
| 1 | | | |
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 3. Modelo de Dados
|
|
91
|
+
|
|
92
|
+
> Modelo completo para implementação. Tipos e constraints são obrigatórios.
|
|
93
|
+
|
|
94
|
+
### 3.1 Entidades
|
|
95
|
+
|
|
96
|
+
#### `{{nome_tabela}}`
|
|
97
|
+
|
|
98
|
+
| Campo | Tipo | Null? | Default | Constraint | Descrição |
|
|
99
|
+
|-------|------|-------|---------|------------|-----------|
|
|
100
|
+
| `id` | `UUID` | NOT NULL | `gen_random_uuid()` | PK | |
|
|
101
|
+
| `created_at` | `TIMESTAMPTZ` | NOT NULL | `NOW()` | | |
|
|
102
|
+
|
|
103
|
+
**Relações**:
|
|
104
|
+
- `tabela.campo` → `outra_tabela.campo` (FK, ON DELETE CASCADE)
|
|
105
|
+
|
|
106
|
+
**Índices**:
|
|
107
|
+
- `idx_tabela_campo` — tipo (btree/gin/gist) — justificativa
|
|
108
|
+
|
|
109
|
+
### 3.2 Migrations necessárias
|
|
110
|
+
|
|
111
|
+
| Ordem | Descrição | Dependência |
|
|
112
|
+
|-------|-----------|-------------|
|
|
113
|
+
| 1 | | nenhuma |
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 4. Regras de Negócio e Validações
|
|
118
|
+
|
|
119
|
+
> Cada regra rastreável ao PRD (coluna Ref). Cada validação com mensagem de erro.
|
|
120
|
+
> O Coder implementa EXATAMENTE o que está aqui — sem inferir regras extras.
|
|
121
|
+
|
|
122
|
+
### 4.1 Regras de Negócio
|
|
123
|
+
|
|
124
|
+
| ID | Regra | Onde aplica | Ref PRD |
|
|
125
|
+
|----|-------|-------------|---------|
|
|
126
|
+
| RN-001 | | back / front / banco | PRD §5 RN-001 |
|
|
127
|
+
|
|
128
|
+
### 4.2 Validações de Campos
|
|
129
|
+
|
|
130
|
+
| Campo | Validação | Obrigatório | Mensagem de erro |
|
|
131
|
+
|-------|-----------|-------------|-----------------|
|
|
132
|
+
| | | | |
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 5. API — Endpoints
|
|
137
|
+
|
|
138
|
+
> Contratos completos. O Coder implementa exatamente estes schemas.
|
|
139
|
+
|
|
140
|
+
### `{{METHOD}} {{/api/v1/recurso}}` — {{Descrição}}
|
|
141
|
+
|
|
142
|
+
**Descrição**: {{o que faz}}
|
|
143
|
+
**Regras**: {{RN-xxx, RN-xxx}}
|
|
144
|
+
**Autenticação**: {{público | Bearer token | API Key}} — se não público, justificar
|
|
145
|
+
**Autorização**: {{roles permitidos: admin, user, owner}} — OBRIGATÓRIO se autenticado
|
|
146
|
+
**Rate Limit**: {{N req/min ou N/A}} — considerar para endpoints públicos/sensíveis
|
|
147
|
+
|
|
148
|
+
**Request Body**:
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"campo": "tipo (required|optional, validações)"
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**Response {{STATUS}}**:
|
|
156
|
+
```json
|
|
157
|
+
{
|
|
158
|
+
"campo": "tipo"
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Erros**:
|
|
163
|
+
| Status | Código | Quando |
|
|
164
|
+
|--------|--------|--------|
|
|
165
|
+
| 401 | `UNAUTHORIZED` | Token ausente ou inválido |
|
|
166
|
+
| 403 | `FORBIDDEN` | Sem permissão para este recurso |
|
|
167
|
+
| 400 | `VALIDATION_ERROR` | Campos inválidos |
|
|
168
|
+
|
|
169
|
+
<!-- Repetir bloco para cada endpoint -->
|
|
170
|
+
|
|
171
|
+
> **Regra de Auth**: Todo endpoint DEVE ter Autenticação e Autorização definidos explicitamente.
|
|
172
|
+
> Se público, escrever "público" — nunca omitir. Erros 401/403 são obrigatórios em endpoints autenticados.
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## 6. Componentes e Telas
|
|
177
|
+
|
|
178
|
+
> Cada tela com seus componentes, estados e comportamentos.
|
|
179
|
+
|
|
180
|
+
### Tela: {{Nome}}
|
|
181
|
+
|
|
182
|
+
| Propriedade | Valor |
|
|
183
|
+
|-------------|-------|
|
|
184
|
+
| **Rota** | `{{/rota}}` |
|
|
185
|
+
| **Permissão** | {{roles}} |
|
|
186
|
+
| **Estado inicial** | {{descrição}} |
|
|
187
|
+
|
|
188
|
+
**Componentes**:
|
|
189
|
+
| Componente | Tipo | Comportamento |
|
|
190
|
+
|------------|------|---------------|
|
|
191
|
+
| | | |
|
|
192
|
+
|
|
193
|
+
**Estados**:
|
|
194
|
+
| Estado | Gatilho | Efeito visual |
|
|
195
|
+
|--------|---------|---------------|
|
|
196
|
+
| loading | requisição em andamento | skeleton/spinner |
|
|
197
|
+
| empty | lista vazia | mensagem |
|
|
198
|
+
| error | falha na API | toast + retry |
|
|
199
|
+
|
|
200
|
+
<!-- Repetir bloco para cada tela -->
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## 7. Fluxos de Dados
|
|
205
|
+
|
|
206
|
+
> Sequências de operações para cada funcionalidade principal.
|
|
207
|
+
> O Coder segue estes fluxos como guia de implementação.
|
|
208
|
+
|
|
209
|
+
### Fluxo: {{Nome}} (fluxo principal)
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
Usuário {{ação}} → [front] {{passo}} → [back] {{passo}}
|
|
213
|
+
→ [back] {{passo}}
|
|
214
|
+
→ [back] retorna {{response}}
|
|
215
|
+
→ [front] {{feedback}}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Fluxo: {{Nome}} (fluxo de erro)
|
|
219
|
+
|
|
220
|
+
```
|
|
221
|
+
{{sequência do erro}}
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
<!-- Adicionar fluxos para cada funcionalidade -->
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## 8. Integrações Externas
|
|
229
|
+
|
|
230
|
+
> Serviços de terceiros ou outros módulos do sistema.
|
|
231
|
+
|
|
232
|
+
| Serviço | Protocolo | Quando | Timeout | Retry | Fallback |
|
|
233
|
+
|---------|-----------|--------|---------|-------|----------|
|
|
234
|
+
| | | | | | |
|
|
235
|
+
|
|
236
|
+
### Contrato: {{Nome do Serviço}}
|
|
237
|
+
|
|
238
|
+
**Request**: `{{METHOD}} {{URL}}`
|
|
239
|
+
```json
|
|
240
|
+
{ }
|
|
241
|
+
```
|
|
242
|
+
**Response esperada**:
|
|
243
|
+
```json
|
|
244
|
+
{ }
|
|
245
|
+
```
|
|
246
|
+
**Tratamento de falha**: <!-- O que acontece se o serviço estiver fora -->
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## 9. Estratégia de Testes
|
|
251
|
+
|
|
252
|
+
> Define O QUE testar, COMO testar, ONDE ficam os testes e QUANDO rodar.
|
|
253
|
+
> O Coder implementa testes junto com o código — não é etapa separada.
|
|
254
|
+
|
|
255
|
+
### 9.1 Testes por área
|
|
256
|
+
|
|
257
|
+
| Área | Tipo | Framework | Comando | O que cobre |
|
|
258
|
+
|------|------|-----------|---------|-------------|
|
|
259
|
+
| BACK | Unit | <!-- xUnit/Jest/pytest --> | <!-- dotnet test --> | Services, validações RN-*, regras de negócio |
|
|
260
|
+
| BACK | Integration | <!-- WebApplicationFactory/Supertest --> | <!-- dotnet test --filter Integration --> | Endpoints completos (request → response) |
|
|
261
|
+
| FRONT | Unit | <!-- React Testing Library --> | <!-- npm test --> | Componentes com lógica, hooks customizados |
|
|
262
|
+
| FRONT | E2E | <!-- Playwright --> | <!-- npx playwright test --> | Jornadas do §4 / fluxos do §7 |
|
|
263
|
+
| BANCO | Migration | <!-- EF migrations/Knex --> | <!-- dotnet ef database update --> | Migration roda + rollback sem erro |
|
|
264
|
+
|
|
265
|
+
### 9.2 Estrutura de testes
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
<!-- Adaptar à stack do projeto. Exemplo: -->
|
|
269
|
+
backend/
|
|
270
|
+
├── tests/
|
|
271
|
+
│ ├── Unit/ ← services, validações
|
|
272
|
+
│ ├── Integration/ ← endpoints (in-memory ou testcontainers)
|
|
273
|
+
│ └── Fixtures/ ← dados de teste
|
|
274
|
+
frontend/
|
|
275
|
+
├── tests/
|
|
276
|
+
│ ├── components/ ← unit (testing library)
|
|
277
|
+
│ └── e2e/ ← playwright (jornadas completas)
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### 9.3 Critérios de Aceite
|
|
281
|
+
|
|
282
|
+
> Cenários testáveis em formato Given/When/Then.
|
|
283
|
+
> Cada CA mapeia para pelo menos 1 teste automatizado.
|
|
284
|
+
|
|
285
|
+
#### CA-001: {{Título do cenário}}
|
|
286
|
+
|
|
287
|
+
```gherkin
|
|
288
|
+
Given {{pré-condição}}
|
|
289
|
+
When {{ação do usuário}}
|
|
290
|
+
Then {{resultado esperado}}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
<!-- Adicionar CA-NNN para cada cenário relevante -->
|
|
294
|
+
|
|
295
|
+
| CA | Tipo de teste | Arquivo de teste |
|
|
296
|
+
|----|--------------|-----------------|
|
|
297
|
+
| CA-001 | integration | `tests/Integration/{{Teste}}.cs` |
|
|
298
|
+
| CA-002 | e2e | `tests/e2e/{{teste}}.spec.ts` |
|
|
299
|
+
|
|
300
|
+
### 9.4 Métricas de Sucesso
|
|
301
|
+
|
|
302
|
+
| Métrica | Threshold | Como medir |
|
|
303
|
+
|---------|-----------|------------|
|
|
304
|
+
| | | |
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
## 10. Fora de Escopo
|
|
309
|
+
|
|
310
|
+
> Lista explícita — evita scope creep durante implementação.
|
|
311
|
+
|
|
312
|
+
| # | Item | Motivo | Quando entra |
|
|
313
|
+
|---|------|--------|--------------|
|
|
314
|
+
| 1 | | | |
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
## 11. Delta Specs
|
|
319
|
+
|
|
320
|
+
> O que muda no sistema global com esta feature.
|
|
321
|
+
> Pós `/dev`: estas deltas são mergeadas nos docs de `docs/`.
|
|
322
|
+
|
|
323
|
+
### ADDED
|
|
324
|
+
<!-- Novos: tabelas, endpoints, componentes, regras, permissões -->
|
|
325
|
+
-
|
|
326
|
+
|
|
327
|
+
### MODIFIED
|
|
328
|
+
<!-- Alterações em funcionalidades/docs existentes -->
|
|
329
|
+
-
|
|
330
|
+
|
|
331
|
+
### REMOVED
|
|
332
|
+
<!-- Funcionalidades ou comportamentos que deixam de existir -->
|
|
333
|
+
-
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## Rastreabilidade Origem → SDD
|
|
338
|
+
|
|
339
|
+
> Mapa rápido de referência cruzada. Garante que nenhum requisito foi perdido.
|
|
340
|
+
|
|
341
|
+
### Para features (PRD → SDD):
|
|
342
|
+
|
|
343
|
+
| PRD Seção | SDD Seção | Notas |
|
|
344
|
+
|-----------|-----------|-------|
|
|
345
|
+
| §3 Entidades | §3 Modelo de Dados | Tipos e constraints detalhados |
|
|
346
|
+
| §4 Jornadas | §7 Fluxos de Dados | Traduzidas em sequências técnicas |
|
|
347
|
+
| §5 Regras (RN-xxx) | §4 Regras e Validações | Mantém mesmos IDs |
|
|
348
|
+
| §6 Validações | §4.2 Validações de Campos | Com mensagens de erro |
|
|
349
|
+
| §7 Telas | §6 Componentes e Telas | Com estados e comportamentos |
|
|
350
|
+
| §8 Integrações | §8 Integrações Externas | Com contratos detalhados |
|
|
351
|
+
| §9 Erros | §5 Endpoints (Erros) | Mapeados por endpoint |
|
|
352
|
+
| §10 Não-Funcionais | §9 Métricas de Sucesso | Thresholds mensuráveis |
|
|
353
|
+
| §12 Fora de Escopo | §10 Fora de Escopo | Mantido igual |
|
|
354
|
+
|
|
355
|
+
### Para setup (TRD → SDD):
|
|
356
|
+
|
|
357
|
+
| TRD Seção | SDD Seção | Notas |
|
|
358
|
+
|-----------|-----------|-------|
|
|
359
|
+
| §1 Visão | §1 Visão Geral | Escopo do setup |
|
|
360
|
+
| §2 Stack | §2 Decisões de Design | Justificativas expandidas |
|
|
361
|
+
| §3 Arquitetura | §2 Decisões de Design | Padrões arquiteturais |
|
|
362
|
+
| §4 Modelo de Dados | §3 Modelo de Dados | Tipos exatos, constraints, índices |
|
|
363
|
+
| §5 API | §5 (N/A em setup) | Convenções no TRD, endpoints nas features |
|
|
364
|
+
| §6 Infra | §1 Escopo | Infra base |
|
|
365
|
+
| §7 Segurança | §2 Decisões + §3 | JWT, tabela usuarios |
|
|
366
|
+
| §8 Módulos | §10 Fora de Escopo | Módulos futuros |
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
> **Regra**: Este SDD é a **única fonte de verdade** para implementação.
|
|
371
|
+
> O Coder não consulta PRD, TRD, PM, ou qualquer outro documento.
|
|
372
|
+
> Qualquer alteração pós-aprovação deve ser refletida aqui primeiro.
|