spec-first-copilot 0.7.0-beta.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) 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 +560 -533
  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 +215 -215
  16. package/templates/.github/agents/db-coder.md +165 -165
  17. package/templates/.github/agents/doc-writer.md +66 -66
  18. package/templates/.github/agents/frontend-coder.md +222 -222
  19. package/templates/.github/agents/infra-coder.md +341 -341
  20. package/templates/.github/agents/reviewer.md +99 -99
  21. package/templates/.github/agents/security-reviewer.md +153 -153
  22. package/templates/.github/copilot-instructions.md +272 -272
  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 -289
  27. package/templates/.github/skills/sf-design/SKILL.md +161 -161
  28. package/templates/.github/skills/sf-dev/SKILL.md +204 -204
  29. package/templates/.github/skills/sf-discovery/SKILL.md +415 -415
  30. package/templates/.github/skills/sf-extract/SKILL.md +225 -225
  31. package/templates/.github/skills/sf-load/SKILL.md +296 -296
  32. package/templates/.github/skills/sf-mcp/SKILL.md +386 -386
  33. package/templates/.github/skills/sf-merge-docs/SKILL.md +152 -152
  34. package/templates/.github/skills/sf-plan/SKILL.md +152 -152
  35. package/templates/.github/skills/sf-publish/SKILL.md +144 -144
  36. package/templates/.github/skills/sf-session-finish/SKILL.md +93 -93
  37. package/templates/.github/skills/sf-start/SKILL.md +192 -192
  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 -279
  44. package/templates/.github/templates/feature/Progresso.template.md +141 -141
  45. package/templates/.github/templates/feature/TRD.template.md +358 -358
  46. package/templates/.github/templates/feature/context.template.md +89 -89
  47. package/templates/.github/templates/feature/extract-log.template.md +49 -49
  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 -66
  51. package/templates/.github/templates/specs/contracts.template.md +147 -147
  52. package/templates/.github/templates/specs/scenarios.template.md +125 -125
  53. package/templates/.github/templates/specs/tasks.template.md +65 -65
  54. package/templates/_gitignore +35 -35
  55. package/templates/sfw.config.yml.example +147 -147
@@ -1,66 +1,66 @@
1
- # Brief — {{NOME}}
2
-
3
- > Contexto da feature para o coder: por quê, o quê e onde.
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 de:
14
- - PRD §1 Contexto e Motivação → Problema / Solução
15
- - PRD §10 Fora de Escopo → Escopo (seção Fora)
16
- - PRD §11 Fases de Entrega (visão geral) → Escopo (seção Dentro)
17
- - TRD §1.1 Stack + §1.2 Arquitetura → Serviços tocados + Decisões principais
18
- - TRD §9 ADRs (resumo) → Decisões principais
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
- O brief é o "por quê + o quê + onde" destilado. O coder lê ANTES de abrir contracts.md.
26
- Sem narrativa longa — bullets objetivos. Código NÃO é derivado daqui.
27
-
28
- SOBRE "Serviços tocados":
29
- - Listar os repos de projetos.yaml que esta feature modifica
30
- - Incluir a área (BACK/FRONT/DB/INFRA) por serviço
31
- - Se first-run (setup), listar todos os repos que serão CRIADOS
32
-
33
- =============================================================================
34
- -->
35
-
36
- ## Problema
37
-
38
- <!-- 2-3 frases. O que está faltando ou quebrado que esta feature resolve. -->
39
-
40
- ## Solução
41
-
42
- <!-- High level: como estamos resolvendo. Sem design técnico — isso está em contracts.md. -->
43
-
44
- ## Serviços tocados
45
-
46
- <!-- Quais repos (de projetos.yaml) esta feature toca e em quais áreas. -->
47
-
48
- | Repo | Áreas | Tipo de mudança |
49
- |------|-------|-----------------|
50
- | | | nova funcionalidade / alteração / infra |
51
-
52
- ## Escopo
53
-
54
- ### Dentro
55
- -
56
-
57
- ### Fora
58
- -
59
-
60
- ## Decisões principais
61
-
62
- <!-- Mini-ADRs inline — só decisões específicas desta feature, não as globais de docs/decisions.md. -->
63
-
64
- | # | Decisão | Justificativa |
65
- |---|---------|---------------|
66
- | 1 | | |
1
+ # Brief — {{NOME}}
2
+
3
+ > Contexto da feature para o coder: por quê, o quê e onde.
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 de:
14
+ - PRD §1 Contexto e Motivação → Problema / Solução
15
+ - PRD §10 Fora de Escopo → Escopo (seção Fora)
16
+ - PRD §11 Fases de Entrega (visão geral) → Escopo (seção Dentro)
17
+ - TRD §1.1 Stack + §1.2 Arquitetura → Serviços tocados + Decisões principais
18
+ - TRD §9 ADRs (resumo) → Decisões principais
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
+ O brief é o "por quê + o quê + onde" destilado. O coder lê ANTES de abrir contracts.md.
26
+ Sem narrativa longa — bullets objetivos. Código NÃO é derivado daqui.
27
+
28
+ SOBRE "Serviços tocados":
29
+ - Listar os repos de projetos.yaml que esta feature modifica
30
+ - Incluir a área (BACK/FRONT/DB/INFRA) por serviço
31
+ - Se first-run (setup), listar todos os repos que serão CRIADOS
32
+
33
+ =============================================================================
34
+ -->
35
+
36
+ ## Problema
37
+
38
+ <!-- 2-3 frases. O que está faltando ou quebrado que esta feature resolve. -->
39
+
40
+ ## Solução
41
+
42
+ <!-- High level: como estamos resolvendo. Sem design técnico — isso está em contracts.md. -->
43
+
44
+ ## Serviços tocados
45
+
46
+ <!-- Quais repos (de projetos.yaml) esta feature toca e em quais áreas. -->
47
+
48
+ | Repo | Áreas | Tipo de mudança |
49
+ |------|-------|-----------------|
50
+ | | | nova funcionalidade / alteração / infra |
51
+
52
+ ## Escopo
53
+
54
+ ### Dentro
55
+ -
56
+
57
+ ### Fora
58
+ -
59
+
60
+ ## Decisões principais
61
+
62
+ <!-- Mini-ADRs inline — só decisões específicas desta feature, não as globais de docs/decisions.md. -->
63
+
64
+ | # | Decisão | Justificativa |
65
+ |---|---------|---------------|
66
+ | 1 | | |
@@ -1,147 +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 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
+ # 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 | | | |