spec-first-copilot 0.7.0 → 0.8.0-beta.2

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.
@@ -1,358 +1,450 @@
1
- # TRD — {{NOME}}
2
- ## Technical Requirements Document
3
-
4
- > **Artefato gerado pela IA** a partir do processamento de insumos técnicos em `workspace/Input/{{NOME}}/`.
5
- > Este é um dos dois docs source do pipeline SFW (peer do PRD).
6
- > O TRD é aprovado pelo **dev / tech lead** — contém todas as decisões técnicas da feature.
7
- > Depois de aprovado, alimenta `/sf-merge-docs` (docs/ cross-feature) e `/sf-design` (specs/).
8
-
9
- ---
10
-
11
- ## Meta
12
-
13
- | Campo | Valor |
14
- |-------|-------|
15
- | Scope | `{{NOME}}` |
16
- | Status | `em extração` → `aguardando aprovação (dev)` → `aprovado` |
17
- | Insumos processados | {{LISTA_INSUMOS}} |
18
- | Gerado em | |
19
- | Aprovado em | |
20
- | Aprovado por | {{nome do dev}} |
21
-
22
- ---
23
-
24
- <!--
25
- =============================================================================
26
- INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
27
- =============================================================================
28
-
29
- QUANDO USAR: Gerado pelo /sf-extract (chamado via /sf-start).
30
- QUEM GERA: Agent Tech-Analyzer (Opus) a partir dos outputs dos Readers (Sonnet).
31
-
32
- PAR COM PRD: o TRD é peer do PRD. Ambos podem coexistir (caso mais comum),
33
- ou o scope pode ter só um dos dois:
34
- - Scope puro-produto (raro): só PRD, sem TRD
35
- - Scope puro-técnico (bootstrap de infra, mudança de stack): só TRD, sem PRD
36
- - Scope misto (maioria): ambos
37
-
38
- REGRA DE OURO: o Analyzer decide qual(is) gerar baseado nos insumos. Não existe
39
- "TRD empty" — se insumos não trazem conteúdo técnico, simplesmente não gera TRD.
40
- Filtragem é responsabilidade do Analyzer + rastreada em §11 Rastreabilidade.
41
-
42
- ZERO OVERLAP COM PRD:
43
- - Jornadas de usuário, atores, RNs de negócio, UI → PRD
44
- - Stack, schema, endpoints, validações de schema, deploy, ADRs → TRD
45
- - Integrações externas: PRD descreve POR QUÊ; TRD descreve COMO
46
- - Validações: PRD descreve regras de domínio; TRD descreve validações de formato
47
-
48
- COMO GERAR:
49
- 1. Readers (Sonnet) leem cada arquivo do Input/ individualmente e catalogam por seção
50
- 2. Tech-Analyzer (Opus) recebe outputs e:
51
- a. Consolida conteúdo técnico em visão unificada
52
- b. Organiza por área (§Sistema + §Backend + §Frontend + §DB + §Infra)
53
- c. Cruza com `docs/` (se existir) pra evitar decisões contraditórias
54
- d. Identifica ambiguidades técnicas (ex: "qual DB?", "sync ou async?")
55
- 3. Consultar `docs/` ANTES de marcar ambiguidade — se `docs/architecture.md` já
56
- define stack, não perguntar de novo. Marcar "resolvido em docs/X §Y"
57
- 4. Registrar DE QUAL insumo veio cada informação (rastreabilidade §11)
58
-
59
- GATES POR ÁREA:
60
- Cada seção §Área tem GATE: SIM/NÃO.
61
- - GATE=SIM: feature toca essa área → preencher completo
62
- - GATE=NÃO: feature não toca → escrever "N/A — feature não toca esta área" e pular
63
- Em first-run (bootstrap), §Sistema é SEMPRE GATE=SIM (baseline completo).
64
-
65
- ARQUIVOS DE INFRA:
66
- TRD §Infra inclui docker-compose, Dockerfile, CI/CD scripts, env vars esperadas.
67
- Mas não inclui arquivo de infra em si — só a DECISÃO. Arquivos reais viram tasks
68
- no /sf-plan.
69
-
70
- RELAÇÃO COM ADRs:
71
- §9 Decisões Técnicas tem ADR-NNN com justificativa e alternativas. Esses ADRs
72
- são sincronizados em docs/decisions.md via /sf-merge-docs após aprovação.
73
-
74
- RE-GERAÇÃO:
75
- - Merge ADITIVO com TRD existente (novos insumos não apagam decisões já aprovadas)
76
- - Seções modificadas marcadas com <!-- ATUALIZADO: re-extração ISO_DATE -->
77
- - IDs de ADR continuam sequência existente
78
- - Se user quiser recomeçar do zero: deletar TRD.md + .extract-log.md manualmente
79
-
80
- =============================================================================
81
- -->
82
-
83
- ## 1. §Sistema
84
-
85
- > **GATE**: SIM / NÃO
86
- > Baseline técnico da feature. Em first-run, preenche-se completo (é a base
87
- > de todo o projeto). Em features subsequentes, preenche APENAS o que MUDA.
88
-
89
- ### 1.1 Stack
90
-
91
- | Camada | Tecnologia | Versão | Justificativa breve |
92
- |--------|-----------|--------|---------------------|
93
- | | | | |
94
-
95
- ### 1.2 Arquitetura (C4 Nível 2)
96
-
97
- ```
98
- <!-- Representação textual dos containers e suas conexões -->
99
- <!-- Formato: [Container] --protocolo--> [Container] -->
100
- ```
101
-
102
- | Container | Tecnologia | Responsabilidade | Porta | Comunicação |
103
- |-----------|-----------|-----------------|-------|-------------|
104
- | | | | | |
105
-
106
- ### 1.3 Ambientes
107
-
108
- | Ambiente | URL | Banco | Branch |
109
- |----------|-----|-------|--------|
110
- | Local | | | qualquer |
111
- | Staging | | | develop |
112
- | Produção | | | main |
113
-
114
- ### 1.4 Deploy baseline
115
-
116
- | Aspecto | Decisão |
117
- |---------|---------|
118
- | Plataforma | |
119
- | Estratégia | rolling / blue-green / canary |
120
- | Build | |
121
-
122
- ### 1.5 Segurança baseline
123
-
124
- - Autenticação: <!-- JWT/OAuth2/Session --> (detalhes em §7)
125
- - CORS: <!-- config geral -->
126
- - TLS: <!-- versão mínima -->
127
- - Secrets: <!-- onde e como -->
128
-
129
- ---
130
-
131
- ## 2. §Área-Backend
132
-
133
- > **GATE**: SIM / NÃO
134
-
135
- ### 2.1 Endpoints
136
-
137
- | Método | Rota | Auth | Responsabilidade |
138
- |--------|------|------|------------------|
139
- | | | | |
140
-
141
- ### 2.2 Services / Camadas
142
-
143
- | Service | Responsabilidade | Depende de |
144
- |---------|------------------|------------|
145
- | | | |
146
-
147
- ### 2.3 Validações de entrada (schema)
148
-
149
- > Formato/tipo/obrigatoriedade de campos — antes da lógica de negócio.
150
-
151
- | Endpoint | Campo | Tipo | Obrigatório | Restrição | Erro |
152
- |----------|-------|------|-------------|-----------|------|
153
- | | | | | | |
154
-
155
- ### 2.4 Libs e dependências principais
156
-
157
- | Pacote | Versão | Para quê |
158
- |--------|--------|----------|
159
- | | | |
160
-
161
- ---
162
-
163
- ## 3. §Área-Frontend
164
-
165
- > **GATE**: SIM / NÃO
166
-
167
- ### 3.1 Rotas
168
-
169
- | Rota | Tela | Guard | Descrição |
170
- |------|------|-------|-----------|
171
- | | | | |
172
-
173
- ### 3.2 Componentes principais
174
-
175
- | Componente | Responsabilidade | Props principais |
176
- |------------|------------------|------------------|
177
- | | | |
178
-
179
- ### 3.3 State management
180
-
181
- | Aspecto | Decisão |
182
- |---------|---------|
183
- | Server state | <!-- TanStack Query / SWR / RTK Query --> |
184
- | Client state | <!-- Context / Zustand / Redux --> |
185
- | Forms | <!-- React Hook Form / Formik --> |
186
-
187
- ### 3.4 Design system
188
-
189
- - <!-- Tailwind / MUI / Fusion / custom -->
190
-
191
- ---
192
-
193
- ## 4. §Área-DB
194
-
195
- > **GATE**: SIM / NÃO
196
-
197
- ### 4.1 Schema
198
-
199
- ```sql
200
- -- Entidades desta feature ou alterações em tabelas existentes
201
- ```
202
-
203
- ### 4.2 Índices e constraints
204
-
205
- | Nome | Tabela | Colunas | Tipo | Justificativa |
206
- |------|--------|---------|------|---------------|
207
- | | | | btree / unique / gin / EXCLUDE | |
208
-
209
- ### 4.3 Migrations
210
-
211
- | # | Arquivo | Descrição | Rollback? |
212
- |---|---------|-----------|-----------|
213
- | 001 | | | Sim/Não |
214
-
215
- ### 4.4 Convenções (se diferem de docs/domain.md)
216
-
217
- - <!-- Apenas o que é particular a esta feature -->
218
-
219
- ---
220
-
221
- ## 5. §Área-Infra
222
-
223
- > **GATE**: SIM / NÃO
224
-
225
- ### 5.1 Containers
226
-
227
- - <!-- docker-compose.dev (só dependências: postgres, redis, etc.) -->
228
- - <!-- Dockerfiles pra CI/prod se aplicável -->
229
-
230
- ### 5.2 CI/CD
231
-
232
- | Etapa | Ferramenta | Trigger |
233
- |-------|-----------|---------|
234
- | Lint | | push |
235
- | Test | | push |
236
- | Build | | push em main/develop |
237
- | Deploy staging | | push em develop |
238
- | Deploy prod | | tag / manual |
239
-
240
- ### 5.3 Variáveis de ambiente
241
-
242
- | Variável | Obrigatória | Ambientes | Exemplo |
243
- |----------|-------------|-----------|---------|
244
- | | Sim/Não | | |
245
-
246
- ### 5.4 Monitoramento
247
-
248
- | Aspecto | Ferramenta | O que monitora |
249
- |---------|-----------|----------------|
250
- | Logs | | |
251
- | Métricas| | |
252
- | Alertas | | |
253
-
254
- ---
255
-
256
- ## 6. Integrações Externas
257
-
258
- > Sistemas terceiros consumidos ou notificados. Timeout + Retry + Fallback são OBRIGATÓRIOS.
259
-
260
- | Sistema | Direção | Protocolo | Timeout | Retry | Fallback |
261
- |---------|---------|-----------|---------|-------|----------|
262
- | | envia/recebe/ambos | REST/gRPC/webhook | | | |
263
-
264
- ---
265
-
266
- ## 7. Segurança Detalhada
267
-
268
- ### 7.1 Autenticação
269
-
270
- | Aspecto | Implementação |
271
- |---------|--------------|
272
- | Método | JWT / OAuth2 / Session |
273
- | Expiração access | |
274
- | Refresh token | |
275
- | Hash de senha | bcrypt rounds N / argon2 |
276
-
277
- ### 7.2 Autorização
278
-
279
- | Aspecto | Decisão |
280
- |---------|---------|
281
- | Tipo | RBAC / ABAC / RBAC+ABAC |
282
- | Onde é verificado | Middleware / Decorator / Service |
283
-
284
- #### Papéis e permissões
285
-
286
- | Papel | Herda de | Permissões desta feature |
287
- |-------|----------|--------------------------|
288
- | | | |
289
-
290
- ### 7.3 LGPD / Privacidade (se aplicável)
291
-
292
- | Dado | Base legal | Retenção | Criptografado? |
293
- |------|-----------|----------|----------------|
294
- | | | | |
295
-
296
- ### 7.4 Rate limiting
297
-
298
- | Categoria | Limite | Janela | Resposta |
299
- |-----------|--------|--------|----------|
300
- | | | | 429 + Retry-After |
301
-
302
- ---
303
-
304
- ## 8. Estratégia de Testes
305
-
306
- | Nível | Framework | Escopo | Quando roda |
307
- |-------|-----------|--------|-------------|
308
- | Unit | | lógica isolada | por task |
309
- | Integration | | request DB response | por fase |
310
- | E2E | | jornadas completas | por feature |
311
-
312
- ---
313
-
314
- ## 9. Decisões Técnicas (ADRs)
315
-
316
- > Cada ADR é imutável após aceita. Sincronizada em docs/decisions.md via /sf-merge-docs.
317
-
318
- ### ADR-001: {{Título}}
319
- - **Status**: proposta | aceita | substituída por ADR-XXX | descartada
320
- - **Data**: YYYY-MM-DD
321
- - **Contexto**: <!-- Por que essa decisão foi necessária? -->
322
- - **Decisão**: <!-- O que decidimos? -->
323
- - **Alternativas consideradas**:
324
- 1. <!-- Alternativa A rejeitada porque... -->
325
- 2. <!-- Alternativa B — rejeitada porque... -->
326
- - **Consequências**:
327
- - Positivas: <!-- -->
328
- - Negativas: <!-- -->
329
- - Riscos: <!-- -->
330
-
331
- ---
332
-
333
- ## 10. Ambiguidades Técnicas
334
-
335
- > ⚠️ **BLOQUEANTE** — `/sf-design` NÃO avança enquanto houver linha com `Resposta`
336
- > vazia E `Resolvido em docs/` vazio.
337
- >
338
- > **Como responder** (ver `.github/skills/sf-extract/SKILL.md` → "Como responder ambiguidades"):
339
- > preencher a coluna `Resposta` direto nesta tabela e rodar `/sf-design` de novo.
340
-
341
- | ID | Pergunta | Contexto | Fonte | Consultei docs/? | Resposta | Resolvido em docs/ |
342
- |----|----------|----------|-------|------------------|----------|--------------------|
343
- | AMB-TRD-001 | ⚠️ | | | sim / não / ausente | (aguardando) | — |
344
-
345
- ---
346
-
347
- ## 11. Rastreabilidade
348
-
349
- > Mapa de qual insumo originou qual seção. Permite auditoria da extração.
350
-
351
- | Insumo | Tipo | Seções alimentadas |
352
- |--------|------|--------------------|
353
- | `{{arquivo}}` | {{tipo}} | §1.1, §1.2, §2.1, §9 (ADR-001) |
354
-
355
- ---
356
-
357
- > **Próximo passo**: Após aprovação do dev (campo `trd_aprovado: true` no
358
- > `.context.md`), este TRD alimenta `/sf-design` (specs/) + `/sf-merge-docs` (docs/).
1
+ # TRD — {{NOME}}
2
+ ## Technical Requirements Document
3
+
4
+ > **Artefato gerado pela IA** a partir do processamento de insumos técnicos em `workspace/Input/{{NOME}}/`.
5
+ > Este é um dos dois docs source do pipeline SFW (peer do PRD).
6
+ > O TRD é aprovado pelo **dev / tech lead** — contém todas as decisões técnicas da feature.
7
+ > Depois de aprovado, alimenta `/sf-merge-docs` (docs/ cross-feature) e `/sf-design` (specs/).
8
+
9
+ ---
10
+
11
+ ## Meta
12
+
13
+ | Campo | Valor |
14
+ |-------|-------|
15
+ | Scope | `{{NOME}}` |
16
+ | Status | `em extração` → `aguardando aprovação (dev)` → `aprovado` |
17
+ | Insumos processados | {{LISTA_INSUMOS}} |
18
+ | Gerado em | |
19
+ | Aprovado em | |
20
+ | Aprovado por | {{nome do dev}} |
21
+
22
+ ---
23
+
24
+ <!--
25
+ =============================================================================
26
+ INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
27
+ =============================================================================
28
+
29
+ QUANDO USAR: Gerado pelo /sf-extract (chamado via /sf-start).
30
+ QUEM GERA: Agent Tech-Analyzer (Opus) a partir dos outputs dos Readers (Sonnet).
31
+
32
+ PAR COM PRD: o TRD é peer do PRD. Ambos podem coexistir (caso mais comum),
33
+ ou o scope pode ter só um dos dois:
34
+ - Scope puro-produto (raro): só PRD, sem TRD
35
+ - Scope puro-técnico (bootstrap de infra, mudança de stack): só TRD, sem PRD
36
+ - Scope misto (maioria): ambos
37
+
38
+ REGRA DE OURO: o Analyzer decide qual(is) gerar baseado nos insumos. Não existe
39
+ "TRD empty" — se insumos não trazem conteúdo técnico, simplesmente não gera TRD.
40
+ Filtragem é responsabilidade do Analyzer + rastreada em §11 Rastreabilidade.
41
+
42
+ ZERO OVERLAP COM PRD:
43
+ - Jornadas de usuário, atores, RNs de negócio, UI → PRD
44
+ - Stack, schema, endpoints, validações de schema, deploy, ADRs → TRD
45
+ - Integrações externas: PRD descreve POR QUÊ; TRD descreve COMO
46
+ - Validações: PRD descreve regras de domínio; TRD descreve validações de formato
47
+
48
+ COMO GERAR:
49
+ 1. Readers (Sonnet) leem cada arquivo do Input/ individualmente e catalogam por seção
50
+ 2. Tech-Analyzer (Opus) recebe outputs e:
51
+ a. Consolida conteúdo técnico em visão unificada
52
+ b. Organiza por área (§Sistema + §Backend + §Frontend + §DB + §Infra)
53
+ c. Cruza com `docs/` (se existir) pra evitar decisões contraditórias
54
+ d. Identifica ambiguidades técnicas (ex: "qual DB?", "sync ou async?")
55
+ 3. Consultar `docs/` ANTES de marcar ambiguidade — se `docs/architecture.md` já
56
+ define stack, não perguntar de novo. Marcar "resolvido em docs/X §Y"
57
+ 4. Registrar DE QUAL insumo veio cada informação (rastreabilidade §11)
58
+
59
+ GATES POR ÁREA:
60
+ Cada seção §Área tem GATE: SIM/NÃO.
61
+ - GATE=SIM: feature toca essa área → preencher completo
62
+ - GATE=NÃO: feature não toca → escrever "N/A — feature não toca esta área" e pular
63
+ Em first-run (bootstrap), §Sistema é SEMPRE GATE=SIM (baseline completo).
64
+
65
+ ARQUIVOS DE INFRA:
66
+ TRD §Infra inclui docker-compose, Dockerfile, CI/CD scripts, env vars esperadas.
67
+ Mas não inclui arquivo de infra em si — só a DECISÃO. Arquivos reais viram tasks
68
+ no /sf-plan.
69
+
70
+ RELAÇÃO COM ADRs:
71
+ §9 Decisões Técnicas tem ADR-NNN com justificativa e alternativas. Esses ADRs
72
+ são sincronizados em docs/decisions.md via /sf-merge-docs após aprovação.
73
+
74
+ RE-GERAÇÃO:
75
+ - Merge ADITIVO com TRD existente (novos insumos não apagam decisões já aprovadas)
76
+ - Seções modificadas marcadas com <!-- ATUALIZADO: re-extração ISO_DATE -->
77
+ - IDs de ADR continuam sequência existente
78
+ - Se user quiser recomeçar do zero: deletar TRD.md + .extract-log.md manualmente
79
+
80
+ =============================================================================
81
+ -->
82
+
83
+ ## 1. §Sistema
84
+
85
+ > **GATE**: SIM / NÃO
86
+ > Baseline técnico da feature. Em first-run, preenche-se completo (é a base
87
+ > de todo o projeto). Em features subsequentes, preenche APENAS o que MUDA.
88
+
89
+ ### 1.1 Stack
90
+
91
+ | Camada | Tecnologia | Versão | Justificativa breve |
92
+ |--------|-----------|--------|---------------------|
93
+ | | | | |
94
+
95
+ ### 1.2 Arquitetura (C4 Nível 2)
96
+
97
+ ```
98
+ <!-- Representação textual dos containers e suas conexões -->
99
+ <!-- Formato: [Container] --protocolo--> [Container] -->
100
+ ```
101
+
102
+ | Container | Tecnologia | Responsabilidade | Porta | Comunicação |
103
+ |-----------|-----------|-----------------|-------|-------------|
104
+ | | | | | |
105
+
106
+ ### 1.3 Ambientes
107
+
108
+ | Ambiente | URL | Banco | Branch |
109
+ |----------|-----|-------|--------|
110
+ | Local | | | qualquer |
111
+ | Staging | | | develop |
112
+ | Produção | | | main |
113
+
114
+ ### 1.4 Deploy baseline
115
+
116
+ | Aspecto | Decisão |
117
+ |---------|---------|
118
+ | Plataforma | |
119
+ | Estratégia | rolling / blue-green / canary |
120
+ | Build | |
121
+
122
+ ### 1.5 Segurança baseline
123
+
124
+ - Autenticação: <!-- JWT/OAuth2/Session --> (detalhes em §7)
125
+ - CORS: <!-- config geral -->
126
+ - TLS: <!-- versão mínima -->
127
+ - Secrets: <!-- onde e como -->
128
+
129
+ ### 1.6 Padrões Observados
130
+
131
+ > **Obrigatório quando `tipo: onboard` em `.context.md`**. Em scopes normais é opcional
132
+ > — preenchido apenas se o time já tem convenções tribais não documentadas em `docs/conventions.md`.
133
+ > Coders de features futuras consultam ESTA seção antes de implementar — devem
134
+ > SEGUIR os padrões existentes, não propor mudanças.
135
+ >
136
+ > **Snippets reais do código** (não pseudo-código). Cite arquivo+linha quando aplicável.
137
+ > Quando padrões divergem internamente, documente o **mais frequente** como padrão
138
+ > e cite divergências sem julgar (ex: "3 controllers seguem X, 1 segue Y").
139
+
140
+ #### 1.6.1 Estrutura de pastas
141
+
142
+ ```
143
+ <!-- snippet real do tree -->
144
+ ```
145
+
146
+ | Camada | Onde mora | Convenção de nome |
147
+ |--------|-----------|-------------------|
148
+ | | | |
149
+
150
+ #### 1.6.2 Naming
151
+
152
+ | Tipo | Padrão observado | Exemplo do código |
153
+ |------|------------------|-------------------|
154
+ | Classe / módulo | | |
155
+ | Função / método | | |
156
+ | Arquivo | | |
157
+ | Variável | | |
158
+ | Constante | | |
159
+
160
+ #### 1.6.3 Error handling
161
+
162
+ ```
163
+ <!-- snippet real mostrando como erros são tratados (try/catch, Result, exceptions, errors) -->
164
+ ```
165
+
166
+ | Aspecto | Padrão | Onde ver |
167
+ |---------|--------|----------|
168
+ | Captura | | |
169
+ | Propagação | | |
170
+ | Resposta HTTP de erro | | |
171
+ | Logging do erro | | |
172
+
173
+ #### 1.6.4 Validação
174
+
175
+ ```
176
+ <!-- snippet real de validação de input -->
177
+ ```
178
+
179
+ | Camada | Como valida | Lib/framework |
180
+ |--------|-------------|---------------|
181
+ | HTTP | | |
182
+ | Domain | | |
183
+ | DB | | |
184
+
185
+ #### 1.6.5 Testes
186
+
187
+ ```
188
+ <!-- snippet real de teste (nomenclatura, estrutura AAA/given-when-then) -->
189
+ ```
190
+
191
+ | Aspecto | Padrão observado |
192
+ |---------|------------------|
193
+ | Framework | |
194
+ | Localização dos testes | |
195
+ | Naming dos arquivos de teste | |
196
+ | Naming dos métodos de teste | |
197
+ | Mock / stub | |
198
+ | Coverage observada | |
199
+
200
+ #### 1.6.6 Logging
201
+
202
+ ```
203
+ <!-- snippet real de log estruturado -->
204
+ ```
205
+
206
+ | Aspecto | Padrão |
207
+ |---------|--------|
208
+ | Lib | |
209
+ | Níveis usados | |
210
+ | Formato (json/text) | |
211
+ | Campos padrão | |
212
+
213
+ #### 1.6.7 Divergências internas observadas
214
+
215
+ > Quando o código tem mais de um padrão pra mesma coisa. Sem julgar — apenas documentar.
216
+
217
+ | Tema | Padrão dominante | Divergência | Onde ver |
218
+ |------|------------------|-------------|----------|
219
+ | | | | |
220
+
221
+ ---
222
+
223
+ ## 2. §Área-Backend
224
+
225
+ > **GATE**: SIM / NÃO
226
+
227
+ ### 2.1 Endpoints
228
+
229
+ | Método | Rota | Auth | Responsabilidade |
230
+ |--------|------|------|------------------|
231
+ | | | | |
232
+
233
+ ### 2.2 Services / Camadas
234
+
235
+ | Service | Responsabilidade | Depende de |
236
+ |---------|------------------|------------|
237
+ | | | |
238
+
239
+ ### 2.3 Validações de entrada (schema)
240
+
241
+ > Formato/tipo/obrigatoriedade de campos — antes da lógica de negócio.
242
+
243
+ | Endpoint | Campo | Tipo | Obrigatório | Restrição | Erro |
244
+ |----------|-------|------|-------------|-----------|------|
245
+ | | | | | | |
246
+
247
+ ### 2.4 Libs e dependências principais
248
+
249
+ | Pacote | Versão | Para quê |
250
+ |--------|--------|----------|
251
+ | | | |
252
+
253
+ ---
254
+
255
+ ## 3. §Área-Frontend
256
+
257
+ > **GATE**: SIM / NÃO
258
+
259
+ ### 3.1 Rotas
260
+
261
+ | Rota | Tela | Guard | Descrição |
262
+ |------|------|-------|-----------|
263
+ | | | | |
264
+
265
+ ### 3.2 Componentes principais
266
+
267
+ | Componente | Responsabilidade | Props principais |
268
+ |------------|------------------|------------------|
269
+ | | | |
270
+
271
+ ### 3.3 State management
272
+
273
+ | Aspecto | Decisão |
274
+ |---------|---------|
275
+ | Server state | <!-- TanStack Query / SWR / RTK Query --> |
276
+ | Client state | <!-- Context / Zustand / Redux --> |
277
+ | Forms | <!-- React Hook Form / Formik --> |
278
+
279
+ ### 3.4 Design system
280
+
281
+ - <!-- Tailwind / MUI / Fusion / custom -->
282
+
283
+ ---
284
+
285
+ ## 4. §Área-DB
286
+
287
+ > **GATE**: SIM / NÃO
288
+
289
+ ### 4.1 Schema
290
+
291
+ ```sql
292
+ -- Entidades desta feature ou alterações em tabelas existentes
293
+ ```
294
+
295
+ ### 4.2 Índices e constraints
296
+
297
+ | Nome | Tabela | Colunas | Tipo | Justificativa |
298
+ |------|--------|---------|------|---------------|
299
+ | | | | btree / unique / gin / EXCLUDE | |
300
+
301
+ ### 4.3 Migrations
302
+
303
+ | # | Arquivo | Descrição | Rollback? |
304
+ |---|---------|-----------|-----------|
305
+ | 001 | | | Sim/Não |
306
+
307
+ ### 4.4 Convenções (se diferem de docs/domain.md)
308
+
309
+ - <!-- Apenas o que é particular a esta feature -->
310
+
311
+ ---
312
+
313
+ ## 5. §Área-Infra
314
+
315
+ > **GATE**: SIM / NÃO
316
+
317
+ ### 5.1 Containers
318
+
319
+ - <!-- docker-compose.dev (só dependências: postgres, redis, etc.) -->
320
+ - <!-- Dockerfiles pra CI/prod se aplicável -->
321
+
322
+ ### 5.2 CI/CD
323
+
324
+ | Etapa | Ferramenta | Trigger |
325
+ |-------|-----------|---------|
326
+ | Lint | | push |
327
+ | Test | | push |
328
+ | Build | | push em main/develop |
329
+ | Deploy staging | | push em develop |
330
+ | Deploy prod | | tag / manual |
331
+
332
+ ### 5.3 Variáveis de ambiente
333
+
334
+ | Variável | Obrigatória | Ambientes | Exemplo |
335
+ |----------|-------------|-----------|---------|
336
+ | | Sim/Não | | |
337
+
338
+ ### 5.4 Monitoramento
339
+
340
+ | Aspecto | Ferramenta | O que monitora |
341
+ |---------|-----------|----------------|
342
+ | Logs | | |
343
+ | Métricas| | |
344
+ | Alertas | | |
345
+
346
+ ---
347
+
348
+ ## 6. Integrações Externas
349
+
350
+ > Sistemas terceiros consumidos ou notificados. Timeout + Retry + Fallback são OBRIGATÓRIOS.
351
+
352
+ | Sistema | Direção | Protocolo | Timeout | Retry | Fallback |
353
+ |---------|---------|-----------|---------|-------|----------|
354
+ | | envia/recebe/ambos | REST/gRPC/webhook | | | |
355
+
356
+ ---
357
+
358
+ ## 7. Segurança Detalhada
359
+
360
+ ### 7.1 Autenticação
361
+
362
+ | Aspecto | Implementação |
363
+ |---------|--------------|
364
+ | Método | JWT / OAuth2 / Session |
365
+ | Expiração access | |
366
+ | Refresh token | |
367
+ | Hash de senha | bcrypt rounds N / argon2 |
368
+
369
+ ### 7.2 Autorização
370
+
371
+ | Aspecto | Decisão |
372
+ |---------|---------|
373
+ | Tipo | RBAC / ABAC / RBAC+ABAC |
374
+ | Onde é verificado | Middleware / Decorator / Service |
375
+
376
+ #### Papéis e permissões
377
+
378
+ | Papel | Herda de | Permissões desta feature |
379
+ |-------|----------|--------------------------|
380
+ | | | |
381
+
382
+ ### 7.3 LGPD / Privacidade (se aplicável)
383
+
384
+ | Dado | Base legal | Retenção | Criptografado? |
385
+ |------|-----------|----------|----------------|
386
+ | | | | |
387
+
388
+ ### 7.4 Rate limiting
389
+
390
+ | Categoria | Limite | Janela | Resposta |
391
+ |-----------|--------|--------|----------|
392
+ | | | | 429 + Retry-After |
393
+
394
+ ---
395
+
396
+ ## 8. Estratégia de Testes
397
+
398
+ | Nível | Framework | Escopo | Quando roda |
399
+ |-------|-----------|--------|-------------|
400
+ | Unit | | lógica isolada | por task |
401
+ | Integration | | request → DB → response | por fase |
402
+ | E2E | | jornadas completas | por feature |
403
+
404
+ ---
405
+
406
+ ## 9. Decisões Técnicas (ADRs)
407
+
408
+ > Cada ADR é imutável após aceita. Sincronizada em docs/decisions.md via /sf-merge-docs.
409
+
410
+ ### ADR-001: {{Título}}
411
+ - **Status**: proposta | aceita | substituída por ADR-XXX | descartada
412
+ - **Data**: YYYY-MM-DD
413
+ - **Contexto**: <!-- Por que essa decisão foi necessária? -->
414
+ - **Decisão**: <!-- O que decidimos? -->
415
+ - **Alternativas consideradas**:
416
+ 1. <!-- Alternativa A — rejeitada porque... -->
417
+ 2. <!-- Alternativa B — rejeitada porque... -->
418
+ - **Consequências**:
419
+ - Positivas: <!-- -->
420
+ - Negativas: <!-- -->
421
+ - Riscos: <!-- -->
422
+
423
+ ---
424
+
425
+ ## 10. Ambiguidades Técnicas
426
+
427
+ > ⚠️ **BLOQUEANTE** — `/sf-design` NÃO avança enquanto houver linha com `Resposta`
428
+ > vazia E `Resolvido em docs/` vazio.
429
+ >
430
+ > **Como responder** (ver `.github/skills/sf-extract/SKILL.md` → "Como responder ambiguidades"):
431
+ > preencher a coluna `Resposta` direto nesta tabela e rodar `/sf-design` de novo.
432
+
433
+ | ID | Pergunta | Contexto | Fonte | Consultei docs/? | Resposta | Resolvido em docs/ |
434
+ |----|----------|----------|-------|------------------|----------|--------------------|
435
+ | AMB-TRD-001 | ⚠️ | | | sim / não / ausente | (aguardando) | — |
436
+
437
+ ---
438
+
439
+ ## 11. Rastreabilidade
440
+
441
+ > Mapa de qual insumo originou qual seção. Permite auditoria da extração.
442
+
443
+ | Insumo | Tipo | Seções alimentadas |
444
+ |--------|------|--------------------|
445
+ | `{{arquivo}}` | {{tipo}} | §1.1, §1.2, §2.1, §9 (ADR-001) |
446
+
447
+ ---
448
+
449
+ > **Próximo passo**: Após aprovação do dev (campo `trd_aprovado: true` no
450
+ > `.context.md`), este TRD alimenta `/sf-design` (specs/) + `/sf-merge-docs` (docs/).