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,559 +0,0 @@
1
- # SDD — {{NOME}}
2
-
3
- > **Software Design Document** — fonte de verdade técnica pro escopo `{{NOME}}`.
4
- > Gerado pelo `/sf-design` a partir do PRD (se existir) + chunks tech do `/sf-extract`.
5
- > O Coder lê APENAS este documento + `specs/{{NOME}}/` e seu task específica.
6
- > Se não está aqui, não será implementado.
7
- >
8
- > **Sobre o tamanho do template**: o SDD tem 12 seções para cobrir o range completo
9
- > (app simples → sistema distribuído com 5 serviços). Escopo pequeno preenche 3-4
10
- > seções e marca as outras como "N/A" ou "não se aplica" — isso é **esperado**.
11
- > Áreas não tocadas (§4-§7) usam `GATE: NÃO` e ficam vazias. Não inflar conteúdo
12
- > pra preencher seção vazia — "N/A" é resposta válida.
13
-
14
- ---
15
-
16
- ## Meta
17
-
18
- | Campo | Valor |
19
- |-------|-------|
20
- | Scope | `{{NOME}}` |
21
- | PRD | `workspace/Output/{{NOME}}/PRD.md` — `empty: {{true\|false}}` (sem aspas, bool) |
22
- | First-run | `{{true\|false}}` — true quando `docs/` não existia antes desta execução |
23
- | Áreas tocadas | `[BACK?, FRONT?, DB?, INFRA?]` |
24
- | Status | `rascunho` → `em revisão` → `aprovado` → `em dev` → `concluído` |
25
- | Autor | `/sf-design` |
26
- | Criado em | |
27
- | Ambiguidades pendentes | `{{N}}` — ver §12 |
28
-
29
- ---
30
-
31
- <!--
32
- =============================================================================
33
- INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
34
- =============================================================================
35
-
36
- QUANDO USAR: Gerado pelo /sf-design após checkpoint de aprovação do PRD.
37
- QUEM GERA: Agent Architect (Opus).
38
-
39
- ENTRADAS:
40
- 1. `workspace/Output/{{NOME}}/PRD.md` — pode ter `empty: true` em first-run puro-técnico
41
- 2. `workspace/Output/{{NOME}}/.extract-log.md` — chunks tech categorizados pelo /sf-extract
42
- 3. `docs/` — se existir (não é first-run), usar como baseline; referenciar em vez de duplicar
43
- 4. `workspace/Input/{{NOME}}/` — consulta adicional apenas pra desambiguação
44
-
45
- BRANCH FIRST-RUN vs FEATURE:
46
- - `docs/` AUSENTE → first-run:
47
- - Preencher §3 §Sistema COMPLETO (todas subseções)
48
- - Preencher §Área-X de todas as áreas aplicáveis (scaffolding inicial)
49
- - §11 Delta Specs: TUDO em ADDED (docs/ nasce a partir daqui via /sf-merge-docs)
50
- - `docs/` EXISTE → feature:
51
- - §3 §Sistema: só subseções que a feature MUDA (ex: nova env var → só §3.3)
52
- - §Área-X: só áreas tocadas (outras ficam N/A — não remover, deixar vazia com "N/A: feature não toca esta área")
53
- - §11 Delta Specs: ADDED/MODIFIED/REMOVED refletindo impacto cross-feature
54
-
55
- GATE DE SEÇÃO (obrigatório):
56
- Cada §Área-X começa com um bloco GATE:
57
- > **GATE**: BACK tocada? [SIM|NÃO]
58
- > Se NÃO, toda a seção vira "N/A — feature não toca backend" e passar.
59
- Coder SÓ lê §Área-X quando GATE = SIM.
60
-
61
- RASTREABILIDADE:
62
- - Cada §Área-X referencia PRD §X ou "no-PRD" (origem: extract tech chunks)
63
- - Cada decisão em §2 referencia item do PRD ou chunk do extract-log
64
- - Se §Sistema é preenchida em feature, cada subseção diz "mudança em docs/X §Y"
65
-
66
- AMBIGUIDADES:
67
- - §12 lista ambiguidades não resolvidas — BLOQUEANTE pro /sf-design concluir
68
- - Analyzer consulta `docs/` ANTES de marcar ambiguidade: se a resposta existe
69
- (ex: auth já documentada em `docs/conventions.md`), marcar como "resolvido em
70
- docs/conventions.md §Autenticação" e NÃO perguntar
71
- - Ambiguidades reais só surgem se (a) docs/ ausente, (b) assunto novo,
72
- (c) insumo contradiz docs/
73
-
74
- DELTA SPECS:
75
- - §11 é a ÚNICA seção lida pelo /sf-merge-docs
76
- - Formato ADDED/MODIFIED/REMOVED (inspirado OpenSpec)
77
- - Cada entry referencia arquivo-alvo: `docs/conventions.md §Monitoramento`
78
- - Sem §11, docs/ não atualiza — é obrigatório (mesmo vazio com "nenhuma mudança")
79
-
80
- =============================================================================
81
- -->
82
-
83
- ## 1. Visão Geral
84
-
85
- ### O que é
86
- <!-- 2-3 frases: o que este scope entrega, ligação com produto -->
87
-
88
- ### Escopo técnico
89
- <!-- Limites: o que ENTRA (áreas tocadas, integrações) e o que FICA DE FORA -->
90
-
91
- ### Premissas
92
- - [ ] <!-- Ex: Usuário já está autenticado (contexto global) -->
93
-
94
- ### Referência PRD
95
- <!-- Se PRD existe: "Ver PRD.md §2 Jornadas, §5 Regras" -->
96
- <!-- Se PRD empty: "PRD empty — scope puro-técnico (first-run de infra)" -->
97
-
98
- ---
99
-
100
- ## 2. Decisões de Design
101
-
102
- > Mini-ADRs inline — decisões técnicas deste scope com justificativa.
103
- > Decisões globais persistentes vão em `docs/decisions.md` via §11 Delta Specs.
104
-
105
- | # | Decisão | Justificativa | Alternativa descartada | Origem |
106
- |---|---------|---------------|------------------------|--------|
107
- | 1 | | | | PRD §X / extract-log §Y |
108
-
109
- ---
110
-
111
- ## 3. §Sistema
112
-
113
- > **GATE**: Preencher completo em first-run. Em feature, preencher APENAS
114
- > subseções que a feature MODIFICA (mudanças propagam pra `docs/` via §11).
115
- > Se nada muda no sistema, marcar: "N/A — feature não altera baseline".
116
-
117
- ### 3.1 Stack
118
-
119
- | Camada | Tecnologia | Versão | Justificativa |
120
- |--------|-----------|--------|---------------|
121
- | Backend | | | |
122
- | Frontend | | | |
123
- | Banco | | | |
124
- | Infra | | | |
125
-
126
- **Ferramentas auxiliares**:
127
- - <!-- build, lint, formatter, CI runner -->
128
-
129
- ### 3.2 Arquitetura
130
-
131
- **Containers lógicos**:
132
-
133
- | Container | Tecnologia | Responsabilidade | Porta |
134
- |-----------|-----------|------------------|-------|
135
- | | | | |
136
-
137
- **Padrões de comunicação**:
138
- - <!-- REST síncrono, event-driven, gRPC, etc. -->
139
-
140
- **Padrões de design adotados**:
141
- - <!-- Clean Arch, Hexagonal, CQRS, etc. -->
142
-
143
- ### 3.3 Ambientes
144
-
145
- | Ambiente | Propósito | URL pattern | Deploy trigger |
146
- |----------|-----------|-------------|----------------|
147
- | dev | | `*.dev.internal` | push em feature |
148
- | staging | | `staging.*` | merge em main |
149
- | prod | | `www.*` | tag release |
150
-
151
- **Variáveis de ambiente baseline**:
152
-
153
- | Var | Dev | Staging | Prod | Descrição |
154
- |-----|-----|---------|------|-----------|
155
- | | | | | |
156
-
157
- ### 3.4 Infraestrutura
158
-
159
- | Aspecto | Decisão |
160
- |---------|---------|
161
- | Hospedagem | |
162
- | Orquestração | <!-- Docker Compose / K8s / ECS / etc. --> |
163
- | CI/CD | <!-- GitHub Actions / GitLab CI / Jenkins --> |
164
- | Containerização | |
165
- | Registry | |
166
-
167
- **Dev local** (convenção SFW: docker-compose = só dependências; apps rodam direto):
168
- - Serviços no docker-compose: <!-- PostgreSQL, Redis, RabbitMQ --> (apenas infra)
169
- - Apps (API, Worker, Web): rodam com `dotnet run`, `npm run dev`, etc.
170
- - Motivo: hot reload, debug breakpoints, performance I/O
171
-
172
- ### 3.5 Segurança
173
-
174
- | Aspecto | Decisão | Referência |
175
- |---------|---------|-----------|
176
- | Autenticação | <!-- JWT/OAuth2/session --> | |
177
- | Autorização | <!-- RBAC/ABAC + fluxo --> | |
178
- | Secrets | <!-- Vault/AWS SSM/.env gitignored --> | |
179
- | CORS | | |
180
- | Rate limiting | | |
181
- | LGPD | | |
182
- | Auditoria | | |
183
-
184
- ### 3.6 Convenções de API
185
-
186
- | Aspecto | Convenção |
187
- |---------|-----------|
188
- | Estilo | <!-- REST / GraphQL / RPC --> |
189
- | Formato | <!-- JSON / JSON:API --> |
190
- | Versionamento | <!-- /v1/, header, none --> |
191
- | Paginação | <!-- cursor / offset --> |
192
- | Erros | <!-- RFC 7807 / custom envelope --> |
193
- | Documentação | <!-- OpenAPI 3.1 / GraphQL Schema --> |
194
-
195
- ### 3.7 Monitoramento
196
-
197
- | Aspecto | Ferramenta | Alvo |
198
- |---------|-----------|------|
199
- | Logs | <!-- Serilog/Pino + Datadog/ELK --> | |
200
- | Métricas | <!-- Prometheus/Datadog --> | |
201
- | Tracing | <!-- OpenTelemetry --> | |
202
- | Alertas | | |
203
-
204
- ---
205
-
206
- ## 4. §Área-Backend
207
-
208
- > **GATE**: Feature toca backend? `[SIM|NÃO]`
209
- > Se NÃO → marcar toda a seção "N/A — feature não toca backend" e pular.
210
-
211
- ### 4.1 Endpoints
212
-
213
- > Contratos completos. O Coder implementa exatamente estes schemas.
214
-
215
- ### `{{METHOD}} {{/api/v1/recurso}}` — {{Descrição}}
216
-
217
- **Descrição**: <!-- o que faz -->
218
- **Regras**: <!-- RN-001, RN-002 (do PRD §5) -->
219
- **Autenticação**: <!-- público | Bearer token | API Key --> — se não público, justificar
220
- **Autorização**: <!-- roles permitidos: admin, user, owner --> — OBRIGATÓRIO se autenticado
221
- **Rate Limit**: <!-- N req/min ou N/A -->
222
-
223
- **Request Body**:
224
- ```json
225
- {
226
- "campo": "tipo (required|optional, validações)"
227
- }
228
- ```
229
-
230
- **Response {{STATUS}}**:
231
- ```json
232
- {
233
- "campo": "tipo"
234
- }
235
- ```
236
-
237
- **Erros**:
238
-
239
- | Status | Código | Quando |
240
- |--------|--------|--------|
241
- | 401 | `UNAUTHORIZED` | Token ausente ou inválido |
242
- | 403 | `FORBIDDEN` | Sem permissão para este recurso |
243
- | 400 | `VALIDATION_ERROR` | Campos inválidos |
244
-
245
- <!-- Repetir bloco para cada endpoint -->
246
-
247
- > **Regra**: todo endpoint DEVE ter Autenticação e Autorização explícitas.
248
- > Se público, escrever "público" — nunca omitir.
249
-
250
- ### 4.2 Regras de Negócio e Validações
251
-
252
- | ID | Regra | Onde aplica | Ref PRD |
253
- |----|-------|-------------|---------|
254
- | RN-001 | | back / front / banco | PRD §5 RN-001 |
255
-
256
- **Validações de campo** (mensagens de erro obrigatórias):
257
-
258
- | Campo | Validação | Obrigatório | Mensagem de erro |
259
- |-------|-----------|-------------|------------------|
260
- | | | | |
261
-
262
- ### 4.3 Integrações Externas
263
-
264
- | Serviço | Protocolo | Quando | Timeout | Retry | Fallback |
265
- |---------|-----------|--------|---------|-------|----------|
266
- | | | | | | |
267
-
268
- **Contrato por integração**:
269
-
270
- #### `{{Nome do Serviço}}`
271
-
272
- **Request**: `{{METHOD}} {{URL}}`
273
- ```json
274
- { }
275
- ```
276
-
277
- **Response esperada**:
278
- ```json
279
- { }
280
- ```
281
-
282
- **Tratamento de falha**: <!-- circuit breaker / retry exponencial / fallback -->
283
-
284
- ---
285
-
286
- ## 5. §Área-Frontend
287
-
288
- > **GATE**: Feature toca frontend? `[SIM|NÃO]`
289
- > Se NÃO → marcar "N/A — feature não toca frontend" e pular.
290
-
291
- ### 5.1 Telas e Componentes
292
-
293
- #### Tela: {{Nome}}
294
-
295
- | Propriedade | Valor |
296
- |-------------|-------|
297
- | Rota | `{{/rota}}` |
298
- | Permissão | {{roles}} |
299
- | Estado inicial | |
300
-
301
- **Componentes**:
302
-
303
- | Componente | Tipo | Comportamento |
304
- |------------|------|---------------|
305
- | | | |
306
-
307
- **Estados**:
308
-
309
- | Estado | Gatilho | Efeito visual |
310
- |--------|---------|---------------|
311
- | loading | requisição em andamento | skeleton/spinner |
312
- | empty | lista vazia | mensagem |
313
- | error | falha na API | toast + retry |
314
-
315
- <!-- Repetir bloco para cada tela -->
316
-
317
- ### 5.2 Fluxos de Usuário
318
-
319
- > Referência às jornadas do PRD — aqui traduzidas em passos técnicos front-back.
320
-
321
- #### Fluxo: {{Nome}} (ref PRD §4 Jornada X)
322
-
323
- ```
324
- Usuário {{ação}} → [front] {{passo}} → [back] {{passo}}
325
- → [back] retorna {{response}}
326
- → [front] {{feedback}}
327
- ```
328
-
329
- ### 5.3 Estados globais
330
-
331
- <!-- Context/Store/Redux — o que vive fora do componente -->
332
-
333
- ---
334
-
335
- ## 6. §Área-DB
336
-
337
- > **GATE**: Feature toca banco? `[SIM|NÃO]`
338
- > Se NÃO → marcar "N/A — feature não toca banco" e pular.
339
-
340
- ### 6.1 Entidades
341
-
342
- #### `{{nome_tabela}}`
343
-
344
- | Campo | Tipo | Null? | Default | Constraint | Descrição |
345
- |-------|------|-------|---------|------------|-----------|
346
- | `id` | `UUID` | NOT NULL | `gen_random_uuid()` | PK | |
347
- | `created_at` | `TIMESTAMPTZ` | NOT NULL | `NOW()` | | |
348
-
349
- **Relações**:
350
- - `tabela.campo` → `outra_tabela.campo` (FK, ON DELETE CASCADE)
351
-
352
- **Índices**:
353
- - `idx_tabela_campo` — tipo (btree/gin/gist) — justificativa
354
-
355
- ### 6.2 Migrations
356
-
357
- | Ordem | Descrição | Dependência | Reversível? |
358
- |-------|-----------|-------------|-------------|
359
- | 1 | | nenhuma | sim |
360
-
361
- ### 6.3 Políticas de Dados
362
-
363
- | Aspecto | Decisão |
364
- |---------|---------|
365
- | Retenção | <!-- dados ficam indefinidamente / TTL N dias --> |
366
- | Backup | |
367
- | Seed inicial | |
368
-
369
- ---
370
-
371
- ## 7. §Área-Infra
372
-
373
- > **GATE**: Feature toca infra (docker, CI, deploy, env)? `[SIM|NÃO]`
374
- > Se NÃO → marcar "N/A — feature não toca infra" e pular.
375
-
376
- ### 7.1 Mudanças em orquestração
377
-
378
- **docker-compose.yml** (dev):
379
- <!-- Novos serviços de infra apenas (apps rodam direto, ver §3.4) -->
380
-
381
- **CI/CD**:
382
- <!-- Novos steps, jobs, ou workflows -->
383
-
384
- **Deploy**:
385
- <!-- Mudanças no processo de deploy -->
386
-
387
- ### 7.2 Novas dependências
388
-
389
- | Tipo | Nome | Versão | Justificativa |
390
- |------|------|--------|---------------|
391
- | pacote npm | | | |
392
- | pacote NuGet | | | |
393
-
394
- ### 7.3 Novas variáveis de ambiente
395
-
396
- | Var | Dev | Staging | Prod | Descrição | Sensível? |
397
- |-----|-----|---------|------|-----------|-----------|
398
- | | | | | | |
399
-
400
- ---
401
-
402
- ## 8. Fluxos de Dados (cross-area)
403
-
404
- > Sequências que atravessam múltiplas áreas. O Coder segue como guia integrativo.
405
-
406
- ### Fluxo: {{Nome}} (principal)
407
-
408
- ```
409
- Usuário {{ação}}
410
- → [front] {{componente}} dispara {{chamada}}
411
- → [back] {{endpoint}} valida + executa {{regra}}
412
- → [db] {{query/insert}}
413
- → [back] retorna {{response}}
414
- → [front] atualiza {{estado}}
415
- ```
416
-
417
- ### Fluxo: {{Nome}} (erro)
418
-
419
- ```
420
- {{sequência do fallback}}
421
- ```
422
-
423
- ---
424
-
425
- ## 9. Estratégia de Testes
426
-
427
- > O Coder implementa testes junto com o código — não é etapa separada.
428
-
429
- ### 9.1 Testes por área (apenas áreas tocadas)
430
-
431
- | Área | Tipo | Framework | Comando | O que cobre |
432
- |------|------|-----------|---------|-------------|
433
- | BACK | Unit | | | Services, validações RN-*, regras de negócio |
434
- | BACK | Integration | | | Endpoints completos (request → response) |
435
- | FRONT | Unit | | | Componentes com lógica, hooks customizados |
436
- | FRONT | E2E | | | Jornadas do §5.2 / fluxos do §8 |
437
- | DB | Migration | | | Migration roda + rollback sem erro |
438
-
439
- ### 9.2 Estrutura de testes
440
-
441
- ```
442
- <!-- Adaptar à stack. Exemplo: -->
443
- backend/
444
- ├── tests/
445
- │ ├── Unit/ ← services, validações
446
- │ ├── Integration/ ← endpoints (in-memory ou testcontainers)
447
- │ └── Fixtures/ ← dados de teste
448
- frontend/
449
- └── tests/
450
- ├── components/ ← unit (testing library)
451
- └── e2e/ ← playwright (jornadas completas)
452
- ```
453
-
454
- ### 9.3 Critérios de Aceite
455
-
456
- > Given/When/Then testável. Cada CA mapeia pelo menos 1 teste automatizado.
457
-
458
- #### CA-001: {{Título}}
459
-
460
- ```gherkin
461
- Given {{pré-condição}}
462
- When {{ação do usuário}}
463
- Then {{resultado esperado}}
464
- ```
465
-
466
- | CA | Tipo de teste | Arquivo |
467
- |----|---------------|---------|
468
- | CA-001 | integration | `tests/Integration/{{Teste}}.cs` |
469
- | CA-002 | e2e | `tests/e2e/{{teste}}.spec.ts` |
470
-
471
- ### 9.4 Métricas
472
-
473
- | Métrica | Threshold | Como medir |
474
- |---------|-----------|------------|
475
- | Cobertura (linhas) | >= 70% | coverlet / vitest |
476
- | Cobertura (branches) | >= 60% | |
477
- | Tempo suite unit | < 30s | |
478
-
479
- ---
480
-
481
- ## 10. Fora de Escopo
482
-
483
- > Lista explícita — evita scope creep durante implementação.
484
-
485
- | # | Item | Motivo | Quando entra |
486
- |---|------|--------|--------------|
487
- | 1 | | | |
488
-
489
- ---
490
-
491
- ## 11. Delta Specs
492
-
493
- > **ÚNICA seção lida pelo `/sf-merge-docs`.** Mantém `docs/` sincronizado com estado do sistema.
494
- > Formato inspirado no OpenSpec: ADDED/MODIFIED/REMOVED.
495
- > Sempre referenciar arquivo-alvo em `docs/`.
496
- > Obrigatório mesmo vazio (marcar "nenhuma mudança").
497
-
498
- ### ADDED
499
- <!-- Novos: endpoints, tabelas, componentes, regras, permissões, env vars, ADRs -->
500
- - `docs/apiContracts.md §Catálogo` — novo endpoint `POST /api/v1/users`
501
- - `docs/domain.md §Entidades` — nova tabela `users`
502
- - `docs/decisions.md` — ADR-NNN: escolha de JWT vs session
503
-
504
- ### MODIFIED
505
- <!-- Alterações em funcionalidades/docs existentes -->
506
- - `docs/conventions.md §Autenticação` — expansão do fluxo JWT com refresh token
507
-
508
- ### REMOVED
509
- <!-- Funcionalidades ou comportamentos que deixam de existir -->
510
- -
511
-
512
- ---
513
-
514
- ## 12. Ambiguidades Pendentes
515
-
516
- > ⚠️ **BLOQUEANTE** — `/sf-plan` não conclui com ambiguidades abertas.
517
- > Architect consultou `docs/` antes de listar — itens aqui são genuínos.
518
- > IDs começam em `AMB-NNN`, continuando a sequência iniciada no PRD §14 (se houver).
519
-
520
- | ID | Pergunta | Contexto | Consultei `docs/`? | Resposta |
521
- |----|----------|----------|--------------------|-----------|
522
- | AMB-001 | | | sim / não / docs ausente | (aguardando) |
523
-
524
- ---
525
-
526
- ## Rastreabilidade
527
-
528
- > Mapa cruzado PRD/sf-extract → SDD. Garante que nenhum requisito foi perdido.
529
-
530
- ### PRD → SDD
531
-
532
- | PRD Seção | SDD Seção |
533
- |-----------|-----------|
534
- | §1 Visão | §1 Visão Geral |
535
- | §2 Jornadas | §5.2 Fluxos de Usuário |
536
- | §3 Entidades | §6.1 Entidades |
537
- | §4 Regras (RN-*) | §4.2 Regras + §5.1 (validação UI) |
538
- | §5 Validações | §4.2 Validações |
539
- | §6 Telas | §5.1 Telas e Componentes |
540
- | §7 Integrações | §4.3 Integrações Externas |
541
- | §8 Erros | §4.1 Endpoints (Erros) |
542
- | §9 Não-Funcionais | §9.4 Métricas |
543
- | §10 Fora de Escopo | §10 Fora de Escopo |
544
-
545
- ### Chunks tech → SDD (PRD empty ou complementar)
546
-
547
- | Chunk em `.extract-log.md` | SDD Seção |
548
- |----------------------------|-----------|
549
- | tech: stack | §3.1 Stack |
550
- | tech: arquitetura | §3.2 Arquitetura |
551
- | tech: schema SQL | §6.1 Entidades |
552
- | tech: segurança | §3.5 Segurança |
553
- | tech: infra | §3.4 Infra |
554
-
555
- ---
556
-
557
- > **Regra**: este SDD é a fonte de verdade do scope `{{NOME}}`.
558
- > Coder não consulta PRD, extract-log, PM, ou outro doc — lê SDD + `specs/{{NOME}}/` + task.
559
- > Alterações pós-aprovação: editar SDD, re-rodar `/sf-design` se grande, ou atualizar §11 delta + `/sf-merge-docs` se cross-feature.