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,159 +1,160 @@
1
- # Contratos de API
2
-
3
- > Padrões de endpoint, convenções de rotas, paginação, filtros, respostas de erro
4
- > e catálogo global. Contratos HTTP do sistema.
5
- > Autenticação detalhada e códigos de erro do domínio vivem em conventions.md.
6
-
7
- ---
8
-
9
- <!--
10
- =============================================================================
11
- INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
12
- =============================================================================
13
-
14
- PAPEL: Síntese das convenções globais de API + catálogo de endpoints cross-feature.
15
- Fonte única pra "como são as rotas, paginação, erros neste projeto?".
16
- Features novas consultam este doc; novos endpoints entram no catálogo via /sf-merge-docs.
17
-
18
- ORIGEM (first-run, via /sf-design):
19
- - SDD §3.6 Convenções de API → "Padrão Geral" + "Convenções de Rotas" + "Paginação" + "Filtros" + "Respostas de Erro"
20
- - SDD §4.1 Endpoints (se houver em first-run, ex: health check, auth) → "Catálogo"
21
-
22
- ATUALIZAÇÃO (feature): /sf-merge-docs aplica SDD §11 ADDED/MODIFIED/REMOVED
23
- quando feature adiciona endpoints (do SDD §4.1) ao catálogo.
24
-
25
- COMO GERAR (first-run):
26
- 1. Ler SDD §3.6 Convenções de API — estilo, formato, versionamento, paginação, erros
27
- 2. Padrão geral e convenções são FIXOS após first-run definidos uma vez
28
- 3. Catálogo de endpoints é DINÂMICO cresce a cada feature via /sf-merge-docs
29
- 4. Formatos de paginação, filtro e resposta de erro são FIXOS
30
-
31
- O QUE NÃO VAI AQUI:
32
- - Autenticação detalhada (hash, refresh, fluxo) → conventions.md
33
- - Autorização, roles, matriz de permissões → conventions.md
34
- - Códigos de erro do domínio → conventions.md
35
- - Rate limiting → conventions.md
36
- - CORS → conventions.md
37
-
38
- REGRAS:
39
- - Convenções são LEI — todo SDD §5 (endpoints) deve seguir
40
- - Catálogo atualizado a cada /sf-merge-docs
41
- - Mudanças em convenções (raro) devem gerar registro em decisions.md
42
-
43
- =============================================================================
44
- -->
45
-
46
- ## Padrão Geral
47
-
48
- | Aspecto | Padrão |
49
- |---------|--------|
50
- | Estilo | <!-- REST / GraphQL / gRPC --> |
51
- | Formato | <!-- JSON / Protobuf --> |
52
- | Versionamento | <!-- /api/v1/ no path? Header? --> |
53
- | Content-Type | <!-- application/json --> |
54
- | Encoding | <!-- UTF-8 --> |
55
-
56
- > **Autenticação**: definida em [conventions.md → Autenticação](./conventions.md#autenticação).
57
-
58
- ## Convenções de Rotas
59
-
60
- | Operação | Método | Rota | Exemplo |
61
- |----------|--------|------|---------|
62
- | Listar | GET | `/api/v1/{recurso}` | |
63
- | Detalhar | GET | `/api/v1/{recurso}/:id` | |
64
- | Criar | POST | `/api/v1/{recurso}` | |
65
- | Atualizar completo | PUT | `/api/v1/{recurso}/:id` | |
66
- | Atualizar parcial | PATCH | `/api/v1/{recurso}/:id` | |
67
- | Remover/Inativar | DELETE | `/api/v1/{recurso}/:id` | |
68
-
69
- ### Convenções de nomenclatura
70
-
71
- | Regra | Exemplo |
72
- |-------|---------|
73
- | Recursos no plural, kebab-case | `/api/v1/order-items` |
74
- | Ações não-CRUD como sub-recurso | `/api/v1/users/:id/activate` |
75
- | Filtros via query params | `/api/v1/users?status=active` |
76
- | Relações aninhadas (max 2 níveis) | `/api/v1/users/:id/orders` |
77
-
78
- ## Paginação
79
-
80
- ```json
81
- {
82
- "data": [],
83
- "meta": {
84
- "page": 1,
85
- "per_page": 20,
86
- "total": 0,
87
- "total_pages": 0
88
- }
89
- }
90
- ```
91
-
92
- Query params: `?page=1&per_page=20&sort=campo&order=asc`
93
-
94
- | Parâmetro | Default | Máximo | Descrição |
95
- |-----------|---------|--------|-----------|
96
- | `page` | 1 | — | Página atual |
97
- | `per_page` | 20 | <!-- Ex: 100 --> | Itens por página |
98
- | `sort` | | | Campo para ordenação |
99
- | `order` | `asc` | — | `asc` ou `desc` |
100
-
101
- ## Filtros
102
-
103
- Query params: `?busca=termo&campo=valor`
104
-
105
- | Tipo de filtro | Formato | Exemplo |
106
- |----------------|---------|---------|
107
- | Igualdade | `?campo=valor` | `?status=ativo` |
108
- | Busca textual | `?busca=termo` | `?busca=joao` |
109
- | Range de data | `?de=YYYY-MM-DD&ate=YYYY-MM-DD` | `?de=2026-01-01&ate=2026-12-31` |
110
- | Múltiplos valores | `?campo=a,b,c` | `?status=ativo,pendente` |
111
-
112
- ## Respostas de Erro
113
-
114
- ```json
115
- {
116
- "error": {
117
- "code": "ERROR_CODE",
118
- "message": "Mensagem legível para o usuário",
119
- "details": [
120
- { "field": "campo", "message": "Detalhe do erro" }
121
- ]
122
- }
123
- }
124
- ```
125
-
126
- ### Códigos HTTP
127
-
128
- | Código | Quando usar | Exemplo |
129
- |--------|-------------|---------|
130
- | 200 | Sucesso (GET, PUT, PATCH) | Recurso retornado/atualizado |
131
- | 201 | Criado com sucesso (POST) | Recurso criado, retorna o objeto |
132
- | 204 | Sucesso sem conteúdo (DELETE) | Recurso removido |
133
- | 400 | Dados inválidos (formato) | JSON malformado |
134
- | 401 | Não autenticado | Token ausente ou expirado |
135
- | 403 | Sem permissão | Papel sem acesso ao recurso |
136
- | 404 | Recurso não encontrado | ID inexistente |
137
- | 409 | Conflito (duplicidade) | Email cadastrado |
138
- | 422 | Validação de negócio falhou | CPF inválido, regra RN-XXX violada |
139
- | 429 | Rate limit excedido | Muitas requisições |
140
- | 500 | Erro interno | Bug não tratado |
141
-
142
- > **Códigos de erro do domínio**: definidos em [conventions.md → Códigos de Erro do Domínio](./conventions.md#códigos-de-erro-do-domínio).
143
-
144
- ## Catálogo de Endpoints
145
-
146
- > Atualizado a cada feature via /sf-merge-docs. Visão consolidada de todas as APIs.
147
- > Pra detalhe de um endpoint específico (request/response schemas), ver SDD §4.1 do scope: `workspace/Output/{scope}/sdd.md`.
148
-
149
- | Método | Rota | Feature | Descrição |
150
- |--------|------|---------|-----------|
151
- | | | | |
152
-
153
- ---
154
-
155
- ## Changelog
156
-
157
- | Data | Feature | Tipo | Descrição |
158
- |------|---------|------|-----------|
159
- | | | | |
1
+ # Contratos de API
2
+
3
+ > Padrões de endpoint, convenções de rotas, paginação, filtros, respostas de erro
4
+ > e catálogo global. Contratos HTTP do sistema.
5
+ > Autenticação detalhada e códigos de erro do domínio vivem em conventions.md.
6
+
7
+ ---
8
+
9
+ <!--
10
+ =============================================================================
11
+ INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
12
+ =============================================================================
13
+
14
+ PAPEL: Síntese das convenções globais de API + catálogo de endpoints cross-feature.
15
+ Fonte única pra "como são as rotas, paginação, erros neste projeto?".
16
+ Features novas consultam este doc; novos endpoints entram no catálogo via /sf-merge-docs.
17
+
18
+ ORIGEM (first-run, via /sf-design):
19
+ - TRD §2 §Área-Backend (convenções de rota) → "Padrão Geral" + "Convenções de Rotas" + "Paginação" + "Filtros" + "Respostas de Erro"
20
+ - TRD §2.1 Endpoints (se houver em first-run, ex: health check, auth) → "Catálogo"
21
+
22
+ ATUALIZAÇÃO (feature): /sf-merge-docs faz diff semântico PRD+TRD ↔ docs/
23
+ e aplica ADDED/MODIFIED/REMOVED quando feature adiciona endpoints
24
+ (do TRD §2.1) ao catálogo.
25
+
26
+ COMO GERAR (first-run):
27
+ 1. Ler TRD §2 §Área-Backend estilo, formato, versionamento, paginação, erros
28
+ 2. Padrão geral e convenções são FIXOS após first-run definidos uma vez
29
+ 3. Catálogo de endpoints é DINÂMICO cresce a cada feature via /sf-merge-docs
30
+ 4. Formatos de paginação, filtro e resposta de erro são FIXOS
31
+
32
+ O QUE NÃO VAI AQUI:
33
+ - Autenticação detalhada (hash, refresh, fluxo) → conventions.md
34
+ - Autorização, roles, matriz de permissões → conventions.md
35
+ - Códigos de erro do domínio → conventions.md
36
+ - Rate limiting → conventions.md
37
+ - CORS → conventions.md
38
+
39
+ REGRAS:
40
+ - Convenções são LEI todo TRD §2.1 (endpoints) deve seguir
41
+ - Catálogo atualizado a cada /sf-merge-docs
42
+ - Mudanças em convenções (raro) devem gerar registro em decisions.md
43
+
44
+ =============================================================================
45
+ -->
46
+
47
+ ## Padrão Geral
48
+
49
+ | Aspecto | Padrão |
50
+ |---------|--------|
51
+ | Estilo | <!-- REST / GraphQL / gRPC --> |
52
+ | Formato | <!-- JSON / Protobuf --> |
53
+ | Versionamento | <!-- /api/v1/ no path? Header? --> |
54
+ | Content-Type | <!-- application/json --> |
55
+ | Encoding | <!-- UTF-8 --> |
56
+
57
+ > **Autenticação**: definida em [conventions.md → Autenticação](./conventions.md#autenticação).
58
+
59
+ ## Convenções de Rotas
60
+
61
+ | Operação | Método | Rota | Exemplo |
62
+ |----------|--------|------|---------|
63
+ | Listar | GET | `/api/v1/{recurso}` | |
64
+ | Detalhar | GET | `/api/v1/{recurso}/:id` | |
65
+ | Criar | POST | `/api/v1/{recurso}` | |
66
+ | Atualizar completo | PUT | `/api/v1/{recurso}/:id` | |
67
+ | Atualizar parcial | PATCH | `/api/v1/{recurso}/:id` | |
68
+ | Remover/Inativar | DELETE | `/api/v1/{recurso}/:id` | |
69
+
70
+ ### Convenções de nomenclatura
71
+
72
+ | Regra | Exemplo |
73
+ |-------|---------|
74
+ | Recursos no plural, kebab-case | `/api/v1/order-items` |
75
+ | Ações não-CRUD como sub-recurso | `/api/v1/users/:id/activate` |
76
+ | Filtros via query params | `/api/v1/users?status=active` |
77
+ | Relações aninhadas (max 2 níveis) | `/api/v1/users/:id/orders` |
78
+
79
+ ## Paginação
80
+
81
+ ```json
82
+ {
83
+ "data": [],
84
+ "meta": {
85
+ "page": 1,
86
+ "per_page": 20,
87
+ "total": 0,
88
+ "total_pages": 0
89
+ }
90
+ }
91
+ ```
92
+
93
+ Query params: `?page=1&per_page=20&sort=campo&order=asc`
94
+
95
+ | Parâmetro | Default | Máximo | Descrição |
96
+ |-----------|---------|--------|-----------|
97
+ | `page` | 1 | | Página atual |
98
+ | `per_page` | 20 | <!-- Ex: 100 --> | Itens por página |
99
+ | `sort` | | — | Campo para ordenação |
100
+ | `order` | `asc` | — | `asc` ou `desc` |
101
+
102
+ ## Filtros
103
+
104
+ Query params: `?busca=termo&campo=valor`
105
+
106
+ | Tipo de filtro | Formato | Exemplo |
107
+ |----------------|---------|---------|
108
+ | Igualdade | `?campo=valor` | `?status=ativo` |
109
+ | Busca textual | `?busca=termo` | `?busca=joao` |
110
+ | Range de data | `?de=YYYY-MM-DD&ate=YYYY-MM-DD` | `?de=2026-01-01&ate=2026-12-31` |
111
+ | Múltiplos valores | `?campo=a,b,c` | `?status=ativo,pendente` |
112
+
113
+ ## Respostas de Erro
114
+
115
+ ```json
116
+ {
117
+ "error": {
118
+ "code": "ERROR_CODE",
119
+ "message": "Mensagem legível para o usuário",
120
+ "details": [
121
+ { "field": "campo", "message": "Detalhe do erro" }
122
+ ]
123
+ }
124
+ }
125
+ ```
126
+
127
+ ### Códigos HTTP
128
+
129
+ | Código | Quando usar | Exemplo |
130
+ |--------|-------------|---------|
131
+ | 200 | Sucesso (GET, PUT, PATCH) | Recurso retornado/atualizado |
132
+ | 201 | Criado com sucesso (POST) | Recurso criado, retorna o objeto |
133
+ | 204 | Sucesso sem conteúdo (DELETE) | Recurso removido |
134
+ | 400 | Dados inválidos (formato) | JSON malformado |
135
+ | 401 | Não autenticado | Token ausente ou expirado |
136
+ | 403 | Sem permissão | Papel sem acesso ao recurso |
137
+ | 404 | Recurso não encontrado | ID inexistente |
138
+ | 409 | Conflito (duplicidade) | Email cadastrado |
139
+ | 422 | Validação de negócio falhou | CPF inválido, regra RN-XXX violada |
140
+ | 429 | Rate limit excedido | Muitas requisições |
141
+ | 500 | Erro interno | Bug não tratado |
142
+
143
+ > **Códigos de erro do domínio**: definidos em [conventions.md → Códigos de Erro do Domínio](./conventions.md#códigos-de-erro-do-domínio).
144
+
145
+ ## Catálogo de Endpoints
146
+
147
+ > Atualizado a cada feature via /sf-merge-docs. Visão consolidada de todas as APIs.
148
+ > Pra detalhe de um endpoint específico (request/response schemas), ver TRD §2.1 do scope: `workspace/Output/{scope}/TRD.md` ou `specs/{scope}/contracts.md`.
149
+
150
+ | Método | Rota | Feature | Descrição |
151
+ |--------|------|---------|-----------|
152
+ | | | | |
153
+
154
+ ---
155
+
156
+ ## Changelog
157
+
158
+ | Data | Feature | Tipo | Descrição |
159
+ |------|---------|------|-----------|
160
+ | | | | |