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,141 +1,147 @@
1
- # Contracts — {{NOME}}
2
-
3
- > Contratos executáveis da feature: modelo de dados, API, integrações e regras de negócio.
4
- > Gerado pelo /sf-design a partir do SDD. NUNCA editado manualmente.
5
-
6
- ---
7
-
8
- <!--
9
- =============================================================================
10
- INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
11
- =============================================================================
12
-
13
- ORIGEM: /sf-design — projeção do SDD §Área-DB (dados) + §Área-Backend (endpoints/regras)
14
- + §Área-* (integrações externas). Complementa (não repete) docs/apiContracts.md.
15
- ATUALIZAÇÃO: Sempre regenerado junto com o SDD. NUNCA editado manualmente.
16
-
17
- REGRA DE OURO: Se algo aqui diverge do SDD, o SDD vence. Re-rode /sf-design.
18
-
19
- DISTINÇÃO CRÍTICA (3 camadas):
20
- - Camada 1 Schema de DADOS: estrutura do banco (tabela, coluna, tipo, constraint DB)
21
- → vira migration SQL
22
- seção "Dados"
23
- - Camada 2 — VALIDAÇÃO DE ENTRADA: restrição de formato/tipo do request
24
- → verificada ANTES da lógica de negócio, no DTO/model via anotações
25
- ex: "email é string, obrigatório, formato válido, max 255 chars"
26
- seção "Validações de Entrada"
27
- - Camada 3 — REGRA DE NEGÓCIO: invariante do domínio, envolve estado
28
- verificada NO SERVIÇO, pós-schema pós-validação
29
- ex: "email não pode estar cadastrado em outra conta ativa"
30
- seção "Regras de Negócio"
31
-
32
- Essas três camadas não se sobrepõem. Regras em uma camada não aparecem na outra.
33
-
34
- CONVENÇÕES GLOBAIS: NÃO duplicar aqui o que já está em docs/apiContracts.md
35
- (paginação, HTTP codes genéricos, formato de erro, convenções de rota). Apenas referenciar.
36
- Colocar aqui apenas o que é ESPECÍFICO desta feature.
37
-
38
- PARA CODERS:
39
- - Campos de dados: tipos EXATOS do banco (varchar(255), não "string")
40
- - Requests/responses JSON: completos, com todos os campos nomeados
41
- - Regras de negócio: RN-NNN com enforcement point explícito
42
- - Integrações: timeout + retry + fallback obrigatórios
43
-
44
- =============================================================================
45
- -->
46
-
47
- ## Dados
48
-
49
- <!-- Entidades tocadas por esta feature. Dois casos:
50
- A) Tabela nova → usar subseção "Tabelas novas"
51
- B) Alteração em tabela existente → usar subseção "Alterações"
52
- Se nenhum dos dois: omitir seção Dados inteira. -->
53
-
54
- ### Tabelas novas
55
-
56
- #### {{tabela}}
57
-
58
- > {{descrição em 1 linha}}
59
-
60
- | Coluna | Tipo | Nullable | Default | Constraint | Descrição |
61
- |--------|------|----------|---------|------------|-----------|
62
- | | | | | | |
63
-
64
- **Relações:**
65
- - `campo_id` → `tabela_ref(id)` ON DELETE RESTRICT / CASCADE / SET NULL
66
-
67
- **Índices:**
68
- - `idx_{{tabela}}_{{campo}}` em `(campo)` — justificativa (qual query usa)
69
-
70
- ### Alterações em tabelas existentes
71
-
72
- <!-- Uma subseção por tabela alterada. Listar apenas o que MUDA. -->
73
-
74
- #### {{tabela_existente}}
75
-
76
- | Operação | Coluna / Índice | Detalhe |
77
- |----------|-----------------|---------|
78
- | ADD COLUMN | `nome_coluna` | tipo + constraint + default |
79
- | ALTER COLUMN | `nome_coluna` | o que muda (tipo, nullable, default) |
80
- | DROP COLUMN | `nome_coluna` | justificativa + impacto em dados |
81
- | ADD INDEX | `idx_nome` | colunas + justificativa |
82
- | ADD FK | `campo_id` | referência + ON DELETE |
83
-
84
- ## Validações de Entrada (schema)
85
-
86
- <!-- Restrições de formato/tipo verificadas ANTES da lógica de negócio.
87
- Viram anotações/atributos de validação no DTO/model de request.
88
- NÃO são regras de negócio (que consultam estado). Se não há endpoint, omitir. -->
89
-
90
- | Endpoint | Campo | Tipo | Obrigatório | Restrição de formato | Mensagem de erro |
91
- |----------|-------|------|-------------|----------------------|------------------|
92
- | | | | | | |
93
-
94
- ## API
95
-
96
- <!-- Convenções globais (rota, paginação, HTTP codes, formato de erro): ver docs/apiContracts.md.
97
- Documentar aqui apenas contratos ESPECÍFICOS desta feature.
98
- Se feature backend sem HTTP exposto (worker/job) ou frontend-only: omitir seção. -->
99
-
100
- ### {{MÉTODO}} {{rota}}
101
-
102
- **Auth**: <!-- Bearer / público / papel mínimo exigido -->
103
- **Rate limit**: <!-- categoria (ver docs/conventions.md) -->
104
-
105
- **Request:**
106
- ```json
107
- {
108
- }
109
- ```
110
-
111
- **Response 200:**
112
- ```json
113
- {
114
- }
115
- ```
116
-
117
- **Erros específicos desta feature:**
118
- | Status | Código de domínio | Quando |
119
- |--------|------------------|--------|
120
- | 422 | | RN-NNN violada |
121
- | 409 | | |
122
-
123
- ## Integrações Externas
124
-
125
- <!-- Sistemas terceiros que esta feature consome ou notifica.
126
- Se não houver: omitir seção. -->
127
-
128
- | Sistema | Direção | Protocolo | Timeout | Retry | Fallback |
129
- |---------|---------|-----------|---------|-------|----------|
130
- | | | | | | |
131
-
132
- ## Regras de Negócio
133
-
134
- <!-- Invariantes do domínio que envolvem estado (banco, cache, contexto).
135
- Distintas de validação de entrada — estas são executadas no serviço, pós-schema.
136
- Enforcement point = onde a regra é verificada no código (service, middleware, DB constraint). -->
137
-
138
- | ID | Regra | Enforcement point | Código de erro |
139
- |----|-------|------------------|----------------|
140
- | RN-001 | | service / db constraint / middleware | |
141
- | RN-002 | | | |
1
+ # Contracts — {{NOME}}
2
+
3
+ > Contratos executáveis da feature: modelo de dados, API, integrações e regras de negócio.
4
+ > Gerado pelo /sf-design a partir de PRD + TRD. NUNCA editado manualmente.
5
+
6
+ ---
7
+
8
+ <!--
9
+ =============================================================================
10
+ INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
11
+ =============================================================================
12
+
13
+ ORIGEM: /sf-design — projeção combinada:
14
+ - TRD §4 §Área-DB (schema, índices) seção "Dados"
15
+ - TRD §2.3 Validações de entrada (schema) seção "Validações de Entrada"
16
+ - TRD §2.1 Endpoints + §6 Integrações Externas → seção "API" e "Integrações"
17
+ - PRD §5 Regras de Negócio seção "Regras de Negócio" (enforcement point vem do TRD)
18
+ Complementa (não repete) docs/apiContracts.md.
19
+
20
+ ATUALIZAÇÃO: Sempre regenerado junto com os specs. NUNCA editado manualmente.
21
+
22
+ REGRA DE OURO: Se algo aqui diverge de PRD ou TRD, os docs source vencem.
23
+ Re-rode /sf-design.
24
+
25
+ DISTINÇÃO CRÍTICA (3 camadas):
26
+ - Camada 1 — Schema de DADOS: estrutura do banco (tabela, coluna, tipo, constraint DB)
27
+ vira migration SQL
28
+ seção "Dados"
29
+ - Camada 2 VALIDAÇÃO DE ENTRADA: restrição de formato/tipo do request
30
+ verificada ANTES da lógica de negócio, no DTO/model via anotações
31
+ → ex: "email é string, obrigatório, formato válido, max 255 chars"
32
+ seção "Validações de Entrada"
33
+ - Camada 3 — REGRA DE NEGÓCIO: invariante do domínio, envolve estado
34
+ verificada NO SERVIÇO, pós-schema pós-validação
35
+ ex: "email não pode estar cadastrado em outra conta ativa"
36
+ seção "Regras de Negócio"
37
+
38
+ Essas três camadas não se sobrepõem. Regras em uma camada não aparecem na outra.
39
+
40
+ CONVENÇÕES GLOBAIS: NÃO duplicar aqui o que já está em docs/apiContracts.md
41
+ (paginação, HTTP codes genéricos, formato de erro, convenções de rota). Apenas referenciar.
42
+ Colocar aqui apenas o que é ESPECÍFICO desta feature.
43
+
44
+ PARA CODERS:
45
+ - Campos de dados: tipos EXATOS do banco (varchar(255), não "string")
46
+ - Requests/responses JSON: completos, com todos os campos nomeados
47
+ - Regras de negócio: RN-NNN com enforcement point explícito
48
+ - Integrações: timeout + retry + fallback obrigatórios
49
+
50
+ =============================================================================
51
+ -->
52
+
53
+ ## Dados
54
+
55
+ <!-- Entidades tocadas por esta feature. Dois casos:
56
+ A) Tabela nova → usar subseção "Tabelas novas"
57
+ B) Alteração em tabela existente → usar subseção "Alterações"
58
+ Se nenhum dos dois: omitir seção Dados inteira. -->
59
+
60
+ ### Tabelas novas
61
+
62
+ #### {{tabela}}
63
+
64
+ > {{descrição em 1 linha}}
65
+
66
+ | Coluna | Tipo | Nullable | Default | Constraint | Descrição |
67
+ |--------|------|----------|---------|------------|-----------|
68
+ | | | | | | |
69
+
70
+ **Relações:**
71
+ - `campo_id` → `tabela_ref(id)` ON DELETE RESTRICT / CASCADE / SET NULL
72
+
73
+ **Índices:**
74
+ - `idx_{{tabela}}_{{campo}}` em `(campo)` — justificativa (qual query usa)
75
+
76
+ ### Alterações em tabelas existentes
77
+
78
+ <!-- Uma subseção por tabela alterada. Listar apenas o que MUDA. -->
79
+
80
+ #### {{tabela_existente}}
81
+
82
+ | Operação | Coluna / Índice | Detalhe |
83
+ |----------|-----------------|---------|
84
+ | ADD COLUMN | `nome_coluna` | tipo + constraint + default |
85
+ | ALTER COLUMN | `nome_coluna` | o que muda (tipo, nullable, default) |
86
+ | DROP COLUMN | `nome_coluna` | justificativa + impacto em dados |
87
+ | ADD INDEX | `idx_nome` | colunas + justificativa |
88
+ | ADD FK | `campo_id` | referência + ON DELETE |
89
+
90
+ ## Validações de Entrada (schema)
91
+
92
+ <!-- Restrições de formato/tipo verificadas ANTES da lógica de negócio.
93
+ Viram anotações/atributos de validação no DTO/model de request.
94
+ NÃO são regras de negócio (que consultam estado). Se não há endpoint, omitir. -->
95
+
96
+ | Endpoint | Campo | Tipo | Obrigatório | Restrição de formato | Mensagem de erro |
97
+ |----------|-------|------|-------------|----------------------|------------------|
98
+ | | | | | | |
99
+
100
+ ## API
101
+
102
+ <!-- Convenções globais (rota, paginação, HTTP codes, formato de erro): ver docs/apiContracts.md.
103
+ Documentar aqui apenas contratos ESPECÍFICOS desta feature.
104
+ Se feature backend sem HTTP exposto (worker/job) ou frontend-only: omitir seção. -->
105
+
106
+ ### {{MÉTODO}} {{rota}}
107
+
108
+ **Auth**: <!-- Bearer / público / papel mínimo exigido -->
109
+ **Rate limit**: <!-- categoria (ver docs/conventions.md) -->
110
+
111
+ **Request:**
112
+ ```json
113
+ {
114
+ }
115
+ ```
116
+
117
+ **Response 200:**
118
+ ```json
119
+ {
120
+ }
121
+ ```
122
+
123
+ **Erros específicos desta feature:**
124
+ | Status | Código de domínio | Quando |
125
+ |--------|------------------|--------|
126
+ | 422 | | RN-NNN violada |
127
+ | 409 | | |
128
+
129
+ ## Integrações Externas
130
+
131
+ <!-- Sistemas terceiros que esta feature consome ou notifica.
132
+ Se não houver: omitir seção. -->
133
+
134
+ | Sistema | Direção | Protocolo | Timeout | Retry | Fallback |
135
+ |---------|---------|-----------|---------|-------|----------|
136
+ | | | | | | |
137
+
138
+ ## Regras de Negócio
139
+
140
+ <!-- Invariantes do domínio que envolvem estado (banco, cache, contexto).
141
+ Distintas de validação de entrada — estas são executadas no serviço, pós-schema.
142
+ Enforcement point = onde a regra é verificada no código (service, middleware, DB constraint). -->
143
+
144
+ | ID | Regra | Enforcement point | Código de erro |
145
+ |----|-------|------------------|----------------|
146
+ | RN-001 | | service / db constraint / middleware | |
147
+ | RN-002 | | | |
@@ -1,117 +1,125 @@
1
- # Scenarios — {{NOME}}
2
-
3
- > Critérios de aceite + fluxos + estados de UI. Fonte de verdade para o Reviewer.
4
- > Gerado pelo /sf-design a partir do SDD. NUNCA editado manualmente.
5
-
6
- ---
7
-
8
- <!--
9
- =============================================================================
10
- INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
11
- =============================================================================
12
-
13
- ORIGEM: /sf-design — projeção do SDD §Área-Backend (fluxos/validações) + §Área-Frontend
14
- (telas/componentes) + §9 Estratégia de Testes + Critérios de Aceite.
15
- ATUALIZAÇÃO: Sempre regenerado junto com o SDD. NUNCA editado manualmente.
16
-
17
- REGRA DE OURO: Se algo aqui diverge do SDD, o SDD vence. Re-rode /sf-design.
18
-
19
- TERMINOLOGIA (dois níveis de pré-condição):
20
- - PRÉ-CONDIÇÕES GLOBAIS (seção no topo): estado que aplica a TODOS os cenários abaixo.
21
- Ex: "sistema populado com seed", "usuário X existe em papel Y".
22
- - PRÉ-CONDIÇÃO DO CA (dentro do CA): estado ADICIONAL específico daquele CA.
23
- Ex: "produto com estoque = 0" em CA que testa venda sem estoque.
24
-
25
- REGRAS DE PREENCHIMENTO:
26
- - 1 CA = 1 regra de negócio testável (não agrupar múltiplas regras num CA)
27
- - Cada CA DEVE ter um teste mapeado — sem teste = CA inválido
28
- - Fluxos de erro têm seção própria não esconder em "Caminhos de erro" do happy path
29
- - Cada linha de "Fluxos de Erro" referencia o CA correspondente (coluna Ref CA)
30
- - Feature sem frontend: seção UI/Componentes = "N/A — backend-only"
31
- - Pré-condição = estado do banco/sistema, não input do usuário (input fica no When)
32
- - Estratégia de testes NÃO redefine frameworks — referencia docs/architecture.md
33
-
34
- PARA O REVIEWER:
35
- - Validar que cada CA-NNN tem teste executável correspondente
36
- - Usar esta tabela de estados como checklist de UI
37
- - Fluxos de erro são obrigatórios no happy path test suite (não opcionais)
38
-
39
- =============================================================================
40
- -->
41
-
42
- ## Pré-condições Globais
43
-
44
- <!-- Estado do sistema ANTES de executar os cenários abaixo. Aplicam a TODOS.
45
- Exemplos: quais registros precisam existir no banco, qual papel está autenticado,
46
- quais flags de feature estão ativas. Se não houver: "Estado limpo — sem pré-condições." -->
47
-
48
- | Condição | Valor esperado |
49
- |----------|---------------|
50
- | | |
51
-
52
- ## Fluxos Happy Path
53
-
54
- <!-- 1 fluxo por entregável principal. Formato linear: quem faz o quê e qual resultado.
55
- Nível suficiente para coder implementar e reviewer validar — sem narrativa extra. -->
56
-
57
- ### Fluxo: {{nome}}
58
-
59
- | Passo | Ator | Ação / Request | Resultado / Response |
60
- |-------|------|---------------|----------------------|
61
- | 1 | | | |
62
- | 2 | | | |
63
-
64
- ## Fluxos — Erro e Edge Cases
65
-
66
- <!-- Desvios do happy path. Cada linha = 1 scenario testável.
67
- Não omitir: são obrigatórios nos testes de integração.
68
- Ref CA aponta pro CA detalhado abaixo que cobre este erro. -->
69
-
70
- | Cenário | Pré-condição | Ação | Resposta esperada | HTTP / Código | Ref CA |
71
- |---------|-------------|------|-------------------|---------------|--------|
72
- | | | | | | |
73
-
74
- ## UI / Componentes
75
-
76
- <!-- Se backend-only: escrever "N/A feature sem frontend." e pular esta seção. -->
77
-
78
- ### {{componente}}
79
-
80
- | Estado | Gatilho | O que exibe | Dado / Mensagem |
81
- |--------|---------|-------------|-----------------|
82
- | loading | | skeleton / spinner | — |
83
- | empty | | | |
84
- | error | | mensagem de erro | código ou texto |
85
- | success | | | |
86
-
87
- ## Critérios de Aceite
88
-
89
- <!-- 1 CA = 1 regra de negócio testável. Given/When/Then em 1 linha cada.
90
- Pré-condição = estado do sistema ADICIONAL às pré-condições globais (não repetir). -->
91
-
92
- ### CA-001: {{título da regra imperativo curto}}
93
-
94
- - **Pré-condição**: <!-- estado adicional às globais. Ex: "produto com estoque = 0" -->
95
- - **Given**: <!-- contexto do ator -->
96
- - **When**: <!-- ação executada -->
97
- - **Then**: <!-- resultado observável e verificável -->
98
- - **Teste**: `unit|integration|e2e` `caminho/do/arquivo_test.ext`
99
-
100
- ### CA-002: {{título}}
101
-
102
- - **Pré-condição**:
103
- - **Given**:
104
- - **When**:
105
- - **Then**:
106
- - **Teste**:
107
-
108
- ## Estratégia de Testes
109
-
110
- <!-- NÃO redefinir frameworks — usar os definidos em docs/architecture.md.
111
- Descrever escopo e cobertura esperada para esta feature. -->
112
-
113
- | Nível | Escopo nesta feature | Quando roda | Responsável |
114
- |-------|----------------------|-------------|-------------|
115
- | Unit | lógica de negócio isolada (serviços, validadores) | por task | coder |
116
- | Integration | fluxo request → DB → response | por fase | coder |
117
- | E2E | CAs críticos end-to-end | por feature | coder (escreve) + reviewer (valida) |
1
+ # Scenarios — {{NOME}}
2
+
3
+ > Critérios de aceite + fluxos + estados de UI. Fonte de verdade para o Reviewer.
4
+ > Gerado pelo /sf-design a partir de PRD + TRD. NUNCA editado manualmente.
5
+
6
+ ---
7
+
8
+ <!--
9
+ =============================================================================
10
+ INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
11
+ =============================================================================
12
+
13
+ ORIGEM: /sf-design — projeção combinada:
14
+ - PRD §3 Jornadas Fluxos Happy Path
15
+ - PRD §8 Cenários de Sucesso/Erro Fluxos de Erro e Edge Cases
16
+ - PRD §7 Telas/Fluxos UI → UI / Componentes (high-level)
17
+ - PRD §5 RNs + §6 Validações de Domínio Critérios de Aceite (Given/When/Then)
18
+ - TRD §3 §Área-Frontend → detalhes de estados de UI (loading/empty/error/success)
19
+ - TRD §8 Estratégia de Testes → Estratégia de Testes
20
+ Critérios de Aceite ficam aqui (especiarias derivadas de RNs + jornadas).
21
+
22
+ ATUALIZAÇÃO: Sempre regenerado junto com os specs. NUNCA editado manualmente.
23
+
24
+ REGRA DE OURO: Se algo aqui diverge de PRD ou TRD, os docs source vencem.
25
+ Re-rode /sf-design.
26
+
27
+ TERMINOLOGIA (dois níveis de pré-condição):
28
+ - PRÉ-CONDIÇÕES GLOBAIS (seção no topo): estado que aplica a TODOS os cenários abaixo.
29
+ Ex: "sistema populado com seed", "usuário X existe em papel Y".
30
+ - PRÉ-CONDIÇÃO DO CA (dentro do CA): estado ADICIONAL específico daquele CA.
31
+ Ex: "produto com estoque = 0" em CA que testa venda sem estoque.
32
+
33
+ REGRAS DE PREENCHIMENTO:
34
+ - 1 CA = 1 regra de negócio testável (não agrupar múltiplas regras num CA)
35
+ - Cada CA DEVE ter um teste mapeado — sem teste = CA inválido
36
+ - Fluxos de erro têm seção própria não esconder em "Caminhos de erro" do happy path
37
+ - Cada linha de "Fluxos de Erro" referencia o CA correspondente (coluna Ref CA)
38
+ - Feature sem frontend: seção UI/Componentes = "N/A — backend-only"
39
+ - Pré-condição = estado do banco/sistema, não input do usuário (input fica no When)
40
+ - Estratégia de testes NÃO redefine frameworks — referencia docs/architecture.md
41
+
42
+ PARA O REVIEWER:
43
+ - Validar que cada CA-NNN tem teste executável correspondente
44
+ - Usar esta tabela de estados como checklist de UI
45
+ - Fluxos de erro são obrigatórios no happy path test suite (não opcionais)
46
+
47
+ =============================================================================
48
+ -->
49
+
50
+ ## Pré-condições Globais
51
+
52
+ <!-- Estado do sistema ANTES de executar os cenários abaixo. Aplicam a TODOS.
53
+ Exemplos: quais registros precisam existir no banco, qual papel está autenticado,
54
+ quais flags de feature estão ativas. Se não houver: "Estado limpo sem pré-condições." -->
55
+
56
+ | Condição | Valor esperado |
57
+ |----------|---------------|
58
+ | | |
59
+
60
+ ## Fluxos — Happy Path
61
+
62
+ <!-- 1 fluxo por entregável principal. Formato linear: quem faz o quê e qual resultado.
63
+ Nível suficiente para coder implementar e reviewer validar — sem narrativa extra. -->
64
+
65
+ ### Fluxo: {{nome}}
66
+
67
+ | Passo | Ator | Ação / Request | Resultado / Response |
68
+ |-------|------|---------------|----------------------|
69
+ | 1 | | | |
70
+ | 2 | | | |
71
+
72
+ ## Fluxos — Erro e Edge Cases
73
+
74
+ <!-- Desvios do happy path. Cada linha = 1 scenario testável.
75
+ Não omitir: são obrigatórios nos testes de integração.
76
+ Ref CA aponta pro CA detalhado abaixo que cobre este erro. -->
77
+
78
+ | Cenário | Pré-condição | Ação | Resposta esperada | HTTP / Código | Ref CA |
79
+ |---------|-------------|------|-------------------|---------------|--------|
80
+ | | | | | | |
81
+
82
+ ## UI / Componentes
83
+
84
+ <!-- Se backend-only: escrever "N/A feature sem frontend." e pular esta seção. -->
85
+
86
+ ### {{componente}}
87
+
88
+ | Estado | Gatilho | O que exibe | Dado / Mensagem |
89
+ |--------|---------|-------------|-----------------|
90
+ | loading | | skeleton / spinner | |
91
+ | empty | | | |
92
+ | error | | mensagem de erro | código ou texto |
93
+ | success | | | |
94
+
95
+ ## Critérios de Aceite
96
+
97
+ <!-- 1 CA = 1 regra de negócio testável. Given/When/Then em 1 linha cada.
98
+ Pré-condição = estado do sistema ADICIONAL às pré-condições globais (não repetir). -->
99
+
100
+ ### CA-001: {{título da regra — imperativo curto}}
101
+
102
+ - **Pré-condição**: <!-- estado adicional às globais. Ex: "produto com estoque = 0" -->
103
+ - **Given**: <!-- contexto do ator -->
104
+ - **When**: <!-- ação executada -->
105
+ - **Then**: <!-- resultado observável e verificável -->
106
+ - **Teste**: `unit|integration|e2e` — `caminho/do/arquivo_test.ext`
107
+
108
+ ### CA-002: {{título}}
109
+
110
+ - **Pré-condição**:
111
+ - **Given**:
112
+ - **When**:
113
+ - **Then**:
114
+ - **Teste**:
115
+
116
+ ## Estratégia de Testes
117
+
118
+ <!-- NÃO redefinir frameworks — usar os definidos em docs/architecture.md.
119
+ Descrever escopo e cobertura esperada para esta feature. -->
120
+
121
+ | Nível | Escopo nesta feature | Quando roda | Responsável |
122
+ |-------|----------------------|-------------|-------------|
123
+ | Unit | lógica de negócio isolada (serviços, validadores) | por task | coder |
124
+ | Integration | fluxo request → DB → response | por fase | coder |
125
+ | E2E | CAs críticos end-to-end | por feature | coder (escreve) + reviewer (valida) |