spec-first-copilot 0.1.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 (45) hide show
  1. package/bin/cli.js +52 -0
  2. package/package.json +25 -0
  3. package/templates/.ai/memory/napkin.md +68 -0
  4. package/templates/.github/agents/backend-coder.md +215 -0
  5. package/templates/.github/agents/db-coder.md +165 -0
  6. package/templates/.github/agents/doc-writer.md +51 -0
  7. package/templates/.github/agents/frontend-coder.md +222 -0
  8. package/templates/.github/agents/infra-coder.md +341 -0
  9. package/templates/.github/agents/reviewer.md +99 -0
  10. package/templates/.github/agents/security-reviewer.md +153 -0
  11. package/templates/.github/copilot-instructions.md +176 -0
  12. package/templates/.github/instructions/docs.instructions.md +123 -0
  13. package/templates/.github/instructions/sensitive-files.instructions.md +32 -0
  14. package/templates/.github/skills/sf-design/SKILL.md +181 -0
  15. package/templates/.github/skills/sf-dev/SKILL.md +326 -0
  16. package/templates/.github/skills/sf-discovery/SKILL.md +405 -0
  17. package/templates/.github/skills/sf-extract/SKILL.md +284 -0
  18. package/templates/.github/skills/sf-feature/SKILL.md +130 -0
  19. package/templates/.github/skills/sf-merge-delta/SKILL.md +142 -0
  20. package/templates/.github/skills/sf-pausar/SKILL.md +120 -0
  21. package/templates/.github/skills/sf-plan/SKILL.md +178 -0
  22. package/templates/.github/skills/sf-setup-projeto/SKILL.md +123 -0
  23. package/templates/docs/Desenvolvimento/.gitkeep +0 -0
  24. package/templates/docs/Desenvolvimento/rules.md +229 -0
  25. package/templates/docs/Estrutura/.gitkeep +0 -0
  26. package/templates/docs/PM/.gitkeep +0 -0
  27. package/templates/docs/PM/setup_projeto/.gitkeep +0 -0
  28. package/templates/docs/_templates/estrutura/ADRs.template.md +91 -0
  29. package/templates/docs/_templates/estrutura/API.template.md +144 -0
  30. package/templates/docs/_templates/estrutura/Arquitetura.template.md +82 -0
  31. package/templates/docs/_templates/estrutura/Infraestrutura.template.md +104 -0
  32. package/templates/docs/_templates/estrutura/Modelo_Dados.template.md +99 -0
  33. package/templates/docs/_templates/estrutura/Seguranca.template.md +138 -0
  34. package/templates/docs/_templates/estrutura/Stack.template.md +78 -0
  35. package/templates/docs/_templates/estrutura/Visao.template.md +82 -0
  36. package/templates/docs/_templates/feature/PRD.template.md +256 -0
  37. package/templates/docs/_templates/feature/Progresso.template.md +136 -0
  38. package/templates/docs/_templates/feature/TRD.template.md +200 -0
  39. package/templates/docs/_templates/feature/backlog-extraido.template.md +154 -0
  40. package/templates/docs/_templates/feature/context.template.md +42 -0
  41. package/templates/docs/_templates/feature/extract-log.template.md +38 -0
  42. package/templates/docs/_templates/feature/projetos.template.yaml +73 -0
  43. package/templates/docs/_templates/feature/sdd.template.md +372 -0
  44. package/templates/docs/_templates/feature/tasks.template.md +115 -0
  45. package/templates/docs/_templates/global/progresso_global.template.md +57 -0
@@ -0,0 +1,229 @@
1
+ # Regras de Desenvolvimento
2
+
3
+ > Regras que todos os agentes de desenvolvimento devem seguir.
4
+ > Lido pelo Coder/Senior Coder e Reviewer antes de cada task.
5
+ > Aplicado globalmente a todas as features.
6
+
7
+ ---
8
+
9
+ <!--
10
+ =============================================================================
11
+ INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
12
+ =============================================================================
13
+
14
+ QUANDO LER: Toda vez que /dev executar uma task. Obrigatório.
15
+ QUEM LÊ: Coder, Senior Coder e Reviewer.
16
+ COMO USAR: Regras aqui são LEI — não são sugestões. Violações reprovam a task no quality gate.
17
+
18
+ PERSONALIZAÇÃO: Este arquivo é editado manualmente pelo time.
19
+ As regras abaixo são o padrão do framework. O time pode:
20
+ - Adicionar regras específicas da stack
21
+ - Remover regras que não se aplicam
22
+ - Ajustar convenções ao projeto
23
+
24
+ =============================================================================
25
+ -->
26
+
27
+ ## Regras Invioláveis
28
+
29
+ 1. **Spec-first**: Nenhuma task pode ser executada sem SDD aprovado
30
+ 2. **SDD é a fonte**: O coder lê APENAS o SDD + task — nunca consulta PRD ou PM diretamente
31
+ 3. **Um commit por task**: Cada task gera exatamente 1 commit
32
+ 4. **Sem invenção**: Se o SDD não especifica, o coder NÃO assume — para e reporta
33
+ 5. **Entregáveis contínuos**: Toda feature é faseada em entregáveis incrementais. Cada fase entrega valor ao usuário e pode ir para produção independentemente. Nunca "tudo ou nada" — sempre "pequeno e constante"
34
+ 6. **Nunca na main**: Todo código é desenvolvido em branch própria. Merge apenas via PR aprovado pelo usuário
35
+
36
+ ## Convenções de Código
37
+
38
+ ### Padrão geral
39
+ - Todo código segue as convenções de `docs/Estrutura/Stack.md`
40
+ - Nomes em inglês (código) — documentação em português
41
+ - Sem código morto (comentado) — se não usa, apaga
42
+ - Sem secrets hardcoded — sempre variáveis de ambiente
43
+
44
+ ### Backend
45
+ - Testes obrigatórios: mínimo happy path + 1 cenário de erro
46
+ - Validação de input na borda (controller/handler) — não no service
47
+ - Erros de negócio: usar códigos definidos em `docs/Estrutura/API.md`
48
+ - Tipos explícitos (sem `any`, `object`, `dynamic` genéricos)
49
+
50
+ ### Frontend
51
+ - Componentes tipados com props documentadas
52
+ - Estados explícitos: loading, empty, error, success
53
+ - Sem lógica de negócio no componente — delegar para hooks/services
54
+
55
+ ### Banco de dados
56
+ - Toda migration tem rollback testado
57
+ - Execução sequencial — nunca pular migrations
58
+ - Seeds apenas para ambiente de desenvolvimento
59
+
60
+ ## Convenções de Git
61
+
62
+ > **Escopo**: Estas regras se aplicam aos **repositórios em `projetos/`** (api, web, worker, etc.).
63
+ > O projeto-base em si é o orquestrador — specs e docs ficam aqui, código fica nos repos.
64
+
65
+ ### Commits
66
+ ```
67
+ tipo(TASK-ID): descrição curta
68
+
69
+ Corpo opcional com detalhes.
70
+
71
+ Refs: feat_cadastro_cliente
72
+ ```
73
+
74
+ | Tipo | Quando usar |
75
+ |------|-------------|
76
+ | `feat` | Nova funcionalidade |
77
+ | `fix` | Correção de bug |
78
+ | `refactor` | Mudança sem alterar comportamento |
79
+ | `test` | Adição/alteração de testes |
80
+ | `docs` | Documentação |
81
+ | `chore` | Configuração, build, CI |
82
+
83
+ ### Branches
84
+ ```
85
+ feature/feat_cadastro_cliente
86
+ feature/feat_mvp_fase1
87
+ bugfix/bug_cpf_duplicado
88
+ task/task_otimizar_listagem
89
+ ```
90
+
91
+ | Regra | Descrição |
92
+ |-------|-----------|
93
+ | Base | Sempre a partir de `main` atualizada (origin) |
94
+ | Merge | Via Pull Request aprovado pelo usuário — NUNCA merge automático |
95
+ | Conflitos | Resolver antes de mergear — nunca force push em branch compartilhada |
96
+
97
+ ### Git Workflow (5 passos obrigatórios)
98
+
99
+ O /dev DEVE seguir este fluxo para CADA fase de entrega:
100
+
101
+ #### Passo 1 — Antes de codar
102
+ ```bash
103
+ # Verificar working tree limpo
104
+ git status
105
+ # Se há mudanças pendentes → sugerir commit ou stash antes de prosseguir
106
+ # NUNCA começar a codar com working tree sujo
107
+ ```
108
+
109
+ #### Passo 2 — Criar branch
110
+ ```bash
111
+ # Atualizar main a partir do remote
112
+ git checkout main
113
+ git pull origin main
114
+
115
+ # Criar branch para a fase
116
+ git checkout -b feature/{nome}_fase{N}
117
+ # Ex: feature/feat_mvp_fase1
118
+ ```
119
+ - Branch criada no **repo do serviço** (projetos/api, projetos/web, etc.)
120
+ - Se a fase afeta múltiplos repos → branch com mesmo nome em cada um
121
+ - NUNCA desenvolver direto na main
122
+
123
+ #### Passo 3 — Ao terminar a fase
124
+ ```bash
125
+ # Atualizar Progresso.md com status da fase
126
+ # Push da branch
127
+ git push origin feature/{nome}_fase{N}
128
+
129
+ # Abrir PR com template detalhado (ver seção abaixo)
130
+ gh pr create --title "..." --body "..."
131
+ ```
132
+ - Deixar ambiente local **rodando** (docker compose up + dotnet run + npm run dev)
133
+ - Informar ao usuário que o ambiente está ON para testes manuais
134
+
135
+ #### Passo 4 — Aguardar aprovação
136
+ ```
137
+ ⏸️ PARAR e aguardar.
138
+ - O usuário revisa o PR, testa manualmente o ambiente local
139
+ - Merge é MANUAL — o agente NUNCA faz merge
140
+ - Se o usuário pedir ajustes → corrigir na mesma branch, push, atualizar PR
141
+ ```
142
+
143
+ #### Passo 5 — Após merge (quando usuário confirmar)
144
+ ```bash
145
+ # Atualizar main local
146
+ git checkout main
147
+ git pull origin main
148
+
149
+ # Limpar branches mergeadas
150
+ git branch -d feature/{nome}_fase{N}
151
+ git remote prune origin
152
+ ```
153
+
154
+ ### Template de Pull Request
155
+
156
+ Todo PR aberto pelo /dev DEVE seguir este formato:
157
+
158
+ ```markdown
159
+ ## Fase {N} — {Nome da fase}
160
+
161
+ ### O que foi entregue
162
+ - [ ] {Entregável 1 da fase}
163
+ - [ ] {Entregável 2 da fase}
164
+
165
+ ### Tasks concluídas
166
+ | Task | Descrição | Testes |
167
+ |------|-----------|--------|
168
+ | BACK-001 | Criar endpoint X | ✅ unit + integration |
169
+ | BANCO-001 | Migration tabela Y | ✅ rollback testado |
170
+ | FRONT-001 | Tela de cadastro | ✅ unit |
171
+
172
+ ### Testes
173
+ - ✅ Unit tests passando ({N}/{N})
174
+ - ✅ Integration tests passando ({N}/{N})
175
+ - ✅ Security Review aprovado
176
+ - ⬜ E2E (aguardando teste manual do usuário)
177
+
178
+ ### Como testar manualmente
179
+ 1. Ambiente já está rodando em:
180
+ - API: http://localhost:8080
181
+ - Web: http://localhost:3000
182
+ - Banco: localhost:5432
183
+ 2. Fluxo para testar:
184
+ - {Passo 1 do teste manual}
185
+ - {Passo 2 do teste manual}
186
+ - {Resultado esperado}
187
+
188
+ ### Observações
189
+ - {Decisões tomadas, trade-offs, pontos de atenção}
190
+ ```
191
+
192
+ ## Quality Gate (por task)
193
+
194
+ > Checklist obrigatório. O Reviewer valida TODOS os itens antes de aprovar.
195
+
196
+ - [ ] Código compila sem erros
197
+ - [ ] Testes passam (se aplicável à task)
198
+ - [ ] Lint limpo (sem warnings não justificados)
199
+ - [ ] Critérios de aceite da task atendidos (ref SDD §9)
200
+ - [ ] Sem TODOs no código sem justificativa
201
+ - [ ] Sem secrets hardcoded
202
+ - [ ] Commit segue convenção: `tipo(TASK-ID): descrição`
203
+ - [ ] Arquivos listados na task foram os únicos modificados (sem side effects)
204
+
205
+ ## Regras por Stack
206
+
207
+ > Seção opcional. Adicionar regras específicas da tecnologia escolhida.
208
+ > Exemplos abaixo — remover/ajustar conforme o projeto.
209
+
210
+ <!--
211
+ ### Node.js / TypeScript
212
+ - ESLint + Prettier como formatador
213
+ - Strict mode no tsconfig
214
+ - Path aliases configurados (@/modules, @/shared)
215
+
216
+ ### Python
217
+ - Ruff como linter/formatter
218
+ - Type hints obrigatórios (mypy strict)
219
+ - Virtual environment (venv ou poetry)
220
+
221
+ ### React / Next.js
222
+ - Server Components por padrão, Client Components só quando necessário
223
+ - Zustand ou Context para estado global (não Redux)
224
+ - Tailwind CSS para estilos
225
+ -->
226
+
227
+ ---
228
+
229
+ > **Atualização**: Editado manualmente pelo time. Aplicado globalmente a todas as features.
File without changes
File without changes
File without changes
@@ -0,0 +1,91 @@
1
+ # ADRs — Architecture Decision Records
2
+
3
+ > Registro de decisões arquiteturais com contexto, alternativas e consequências.
4
+ > Cada decisão é imutável após aceita. Novas decisões podem substituir anteriores.
5
+
6
+ ---
7
+
8
+ <!--
9
+ =============================================================================
10
+ INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
11
+ =============================================================================
12
+
13
+ ORIGEM: Criado pelo /setup-projeto com ADRs iniciais (stack, arquitetura base).
14
+ ATUALIZAÇÃO: Novas ADRs adicionadas quando:
15
+ - /setup-projeto define stack e arquitetura (ADRs iniciais)
16
+ - /design gera SDD §2 com decisões de design significativas
17
+ - /merge-delta detecta mudança de stack ou padrão
18
+ - Usuário toma decisão que impacta arquitetura
19
+
20
+ COMO GERAR:
21
+ 1. Para cada decisão significativa, criar ADR com TODOS os campos
22
+ 2. Contexto: POR QUE essa decisão foi necessária (não apenas "precisávamos")
23
+ 3. Alternativas: OBRIGATÓRIO listar ao menos 1 alternativa (com motivo da rejeição)
24
+ 4. Consequências: o que MUDA por causa da decisão (positivo E negativo)
25
+
26
+ REGRAS:
27
+ - IDs sequenciais: ADR-001, ADR-002... nunca reutilizar
28
+ - NUNCA editar ADR com status "aceita" — criar nova com "substituída por ADR-XXX"
29
+ - Status "proposta" = ainda em discussão, não implementar até aceitar
30
+ - Toda mudança de stack, banco, framework DEVE ter ADR
31
+ - ADRs são APPEND-ONLY — histórico importa
32
+
33
+ QUANDO CRIAR ADR:
34
+ - Escolha de tecnologia/framework
35
+ - Mudança de padrão de design
36
+ - Decisão de infra (cloud provider, DB engine)
37
+ - Trade-off significativo (performance vs simplicidade, etc.)
38
+
39
+ QUANDO NÃO CRIAR ADR:
40
+ - Escolha de nome de variável
41
+ - Implementação seguindo padrão já definido
42
+ - Bug fix
43
+ - Refactor sem mudança de interface
44
+
45
+ =============================================================================
46
+ -->
47
+
48
+ ## Índice
49
+
50
+ | ADR | Título | Status | Data |
51
+ |-----|--------|--------|------|
52
+ | ADR-001 | {{Título}} | proposta / aceita / substituída / descartada | |
53
+
54
+ ## Formato
55
+
56
+ Cada ADR segue este modelo:
57
+
58
+ ```markdown
59
+ ### ADR-NNN: Título da Decisão
60
+ - **Status**: proposta | aceita | substituída por ADR-XXX | descartada
61
+ - **Data**: YYYY-MM-DD
62
+ - **Contexto**: Por que essa decisão foi necessária?
63
+ - **Decisão**: O que decidimos?
64
+ - **Alternativas consideradas**:
65
+ 1. Alternativa A — rejeitada porque...
66
+ 2. Alternativa B — rejeitada porque...
67
+ - **Consequências**:
68
+ - Positivas: ...
69
+ - Negativas: ...
70
+ - Riscos: ...
71
+ ```
72
+
73
+ ---
74
+
75
+ ## Decisões
76
+
77
+ ### ADR-001: {{Título}}
78
+ - **Status**: aceita
79
+ - **Data**:
80
+ - **Contexto**:
81
+ - **Decisão**:
82
+ - **Alternativas consideradas**:
83
+ 1. —
84
+ - **Consequências**:
85
+ - Positivas:
86
+ - Negativas:
87
+ - Riscos:
88
+
89
+ ---
90
+
91
+ > **Regra**: ADRs aceitas são imutáveis. Para reverter uma decisão, crie nova ADR com status "substituída por ADR-XXX" na ADR original.
@@ -0,0 +1,144 @@
1
+ # Convenções de API
2
+
3
+ > Padrões globais para todas as APIs do sistema: versionamento, autenticação, paginação, erros.
4
+
5
+ ---
6
+
7
+ <!--
8
+ =============================================================================
9
+ INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
10
+ =============================================================================
11
+
12
+ ORIGEM: Gerado pelo /setup-projeto a partir do TRD §5.
13
+ ATUALIZAÇÃO: /merge-delta quando features adicionam endpoints (Delta Specs do SDD §5 e §11).
14
+
15
+ COMO GERAR:
16
+ 1. Ler TRD §5 (Convenções de API) — padrão geral, versionamento, autenticação
17
+ 2. Padrão geral e convenções são FIXOS após setup — definidos uma vez
18
+ 3. Catálogo de endpoints é DINÂMICO — cresce a cada feature
19
+ 4. Formatos de paginação, filtro e erro são FIXOS — toda API segue
20
+
21
+ REGRAS:
22
+ - Convenções são LEI — todo SDD §5 (endpoints) deve seguir estes padrões
23
+ - Catálogo de endpoints atualizado a cada merge-delta
24
+ - Mudanças em convenções (raro) devem gerar ADR
25
+ - Rate limiting definido por categoria de endpoint, não individual
26
+
27
+ =============================================================================
28
+ -->
29
+
30
+ ## Padrão Geral
31
+
32
+ | Aspecto | Padrão |
33
+ |---------|--------|
34
+ | Estilo | <!-- REST / GraphQL / gRPC --> |
35
+ | Formato | <!-- JSON / Protobuf --> |
36
+ | Versionamento | <!-- /api/v1/ no path? Header? --> |
37
+ | Autenticação | <!-- Bearer JWT? API Key? --> |
38
+ | Content-Type | <!-- application/json --> |
39
+ | Encoding | <!-- UTF-8 --> |
40
+
41
+ ## Convenções de Rotas
42
+
43
+ | Operação | Método | Rota | Exemplo |
44
+ |----------|--------|------|---------|
45
+ | Listar | GET | `/api/v1/{recurso}` | |
46
+ | Detalhar | GET | `/api/v1/{recurso}/:id` | |
47
+ | Criar | POST | `/api/v1/{recurso}` | |
48
+ | Atualizar completo | PUT | `/api/v1/{recurso}/:id` | |
49
+ | Atualizar parcial | PATCH | `/api/v1/{recurso}/:id` | |
50
+ | Remover/Inativar | DELETE | `/api/v1/{recurso}/:id` | |
51
+
52
+ ### Convenções de nomenclatura
53
+ | Regra | Exemplo |
54
+ |-------|---------|
55
+ | Recursos no plural, kebab-case | `/api/v1/order-items` |
56
+ | Ações não-CRUD como sub-recurso | `/api/v1/users/:id/activate` |
57
+ | Filtros via query params | `/api/v1/users?status=active` |
58
+ | Relações aninhadas (max 2 níveis) | `/api/v1/users/:id/orders` |
59
+
60
+ ## Paginação
61
+
62
+ ```json
63
+ {
64
+ "data": [],
65
+ "meta": {
66
+ "page": 1,
67
+ "per_page": 20,
68
+ "total": 0,
69
+ "total_pages": 0
70
+ }
71
+ }
72
+ ```
73
+
74
+ Query params: `?page=1&per_page=20&sort=campo&order=asc`
75
+
76
+ | Parâmetro | Default | Máximo | Descrição |
77
+ |-----------|---------|--------|-----------|
78
+ | `page` | 1 | — | Página atual |
79
+ | `per_page` | 20 | <!-- Ex: 100 --> | Itens por página |
80
+ | `sort` | — | — | Campo para ordenação |
81
+ | `order` | `asc` | — | `asc` ou `desc` |
82
+
83
+ ## Filtros
84
+
85
+ Query params: `?busca=termo&campo=valor`
86
+
87
+ | Tipo de filtro | Formato | Exemplo |
88
+ |----------------|---------|---------|
89
+ | Igualdade | `?campo=valor` | `?status=ativo` |
90
+ | Busca textual | `?busca=termo` | `?busca=joao` |
91
+ | Range de data | `?de=YYYY-MM-DD&ate=YYYY-MM-DD` | `?de=2026-01-01&ate=2026-12-31` |
92
+ | Múltiplos valores | `?campo=a,b,c` | `?status=ativo,pendente` |
93
+
94
+ ## Respostas de Erro
95
+
96
+ ```json
97
+ {
98
+ "error": {
99
+ "code": "ERROR_CODE",
100
+ "message": "Mensagem legível para o usuário",
101
+ "details": [
102
+ { "field": "campo", "message": "Detalhe do erro" }
103
+ ]
104
+ }
105
+ }
106
+ ```
107
+
108
+ ### Códigos HTTP
109
+
110
+ | Código | Quando usar | Exemplo |
111
+ |--------|-------------|---------|
112
+ | 200 | Sucesso (GET, PUT, PATCH) | Recurso retornado/atualizado |
113
+ | 201 | Criado com sucesso (POST) | Recurso criado, retorna o objeto |
114
+ | 204 | Sucesso sem conteúdo (DELETE) | Recurso removido |
115
+ | 400 | Dados inválidos (formato) | JSON malformado |
116
+ | 401 | Não autenticado | Token ausente ou expirado |
117
+ | 403 | Sem permissão | Papel sem acesso ao recurso |
118
+ | 404 | Recurso não encontrado | ID inexistente |
119
+ | 409 | Conflito (duplicidade) | Email já cadastrado |
120
+ | 422 | Validação de negócio falhou | CPF inválido, regra RN-XXX violada |
121
+ | 429 | Rate limit excedido | Muitas requisições |
122
+ | 500 | Erro interno | Bug não tratado |
123
+
124
+ ### Códigos de erro do domínio
125
+
126
+ | Código | Descrição | HTTP |
127
+ |--------|-----------|------|
128
+ | <!-- Ex: DUPLICATE_EMAIL --> | <!-- Email já cadastrado --> | <!-- 409 --> |
129
+
130
+ ## Catálogo de Endpoints
131
+
132
+ > Atualizado a cada feature via /merge-delta. Visão consolidada de todas as APIs.
133
+
134
+ | Método | Rota | Feature | Descrição |
135
+ |--------|------|---------|-----------|
136
+ | | | | |
137
+
138
+ ---
139
+
140
+ ## Changelog
141
+
142
+ | Data | Feature | Tipo | Descrição |
143
+ |------|---------|------|-----------|
144
+ | | | | |
@@ -0,0 +1,82 @@
1
+ # Arquitetura
2
+
3
+ > C4 Níveis 2-3 — Containers, componentes, comunicação e padrões adotados.
4
+
5
+ ---
6
+
7
+ <!--
8
+ =============================================================================
9
+ INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
10
+ =============================================================================
11
+
12
+ ORIGEM: Gerado pelo /setup-projeto a partir do TRD §3.
13
+ ATUALIZAÇÃO: /merge-delta quando features adicionam containers, componentes significativos ou novos padrões.
14
+
15
+ COMO GERAR:
16
+ 1. Ler TRD §3 (Arquitetura) — containers, padrões de comunicação, padrões de design
17
+ 2. Ler Stack.md — tecnologias já definidas para cada container
18
+ 3. Criar diagrama textual C4 Nível 2 (containers e suas conexões)
19
+ 4. Para cada container: listar componentes internos (C4 Nível 3)
20
+ 5. Documentar padrões de comunicação (sync/async, protocolos)
21
+ 6. Documentar padrões de design com justificativa
22
+
23
+ REGRAS:
24
+ - Diagrama deve mostrar TODOS os containers e suas conexões
25
+ - Cada container deve ter: tecnologia, responsabilidade, porta
26
+ - Padrões de design precisam de justificativa (não apenas nome)
27
+ - Se o sistema usa filas/eventos: documentar tópicos e consumers
28
+ - Componentes são internos ao container — não confundir com containers
29
+
30
+ =============================================================================
31
+ -->
32
+
33
+ ## Diagrama de Containers (C4 Nível 2)
34
+
35
+ ```
36
+ <!-- Representação textual dos containers e suas conexões -->
37
+ <!-- Usar formato: [Container] --protocolo--> [Container] -->
38
+ ```
39
+
40
+ ## Containers
41
+
42
+ | Container | Tecnologia | Responsabilidade | Porta | Comunicação |
43
+ |-----------|-----------|-----------------|-------|-------------|
44
+ | | | | | |
45
+
46
+ ## Componentes Principais (C4 Nível 3)
47
+
48
+ <!-- Repetir esta seção para cada container que tenha componentes internos relevantes -->
49
+
50
+ ### {{Container}}
51
+
52
+ | Componente | Responsabilidade | Dependências internas | Dependências externas |
53
+ |------------|-----------------|----------------------|----------------------|
54
+ | | | | |
55
+
56
+ ## Padrões de Comunicação
57
+
58
+ ### Síncrona (request/response)
59
+
60
+ | De | Para | Protocolo | Formato | Observações |
61
+ |----|------|-----------|---------|-------------|
62
+ | | | | | |
63
+
64
+ ### Assíncrona (eventos/filas)
65
+
66
+ | Produtor | Tópico/Fila | Consumer | Formato | Garantia |
67
+ |----------|-------------|----------|---------|----------|
68
+ | | | | | at-least-once / exactly-once |
69
+
70
+ ## Padrões de Design Adotados
71
+
72
+ | Padrão | Onde é usado | Justificativa | Ref ADR |
73
+ |--------|-------------|---------------|---------|
74
+ | | | | |
75
+
76
+ ---
77
+
78
+ ## Changelog
79
+
80
+ | Data | Feature | Tipo | Descrição |
81
+ |------|---------|------|-----------|
82
+ | | | | |
@@ -0,0 +1,104 @@
1
+ # Infraestrutura
2
+
3
+ > Ambientes, deploy, CI/CD, variáveis de ambiente, domínios e estratégia de rollback.
4
+
5
+ ---
6
+
7
+ <!--
8
+ =============================================================================
9
+ INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
10
+ =============================================================================
11
+
12
+ ORIGEM: Gerado pelo /setup-projeto a partir do TRD §6.
13
+ ATUALIZAÇÃO: /merge-delta quando features adicionam variáveis de ambiente, serviços ou mudam infra.
14
+
15
+ COMO GERAR:
16
+ 1. Ler TRD §6 (Infraestrutura) — ambientes, deploy, CI/CD
17
+ 2. Listar TODOS os ambientes com URLs e propósitos
18
+ 3. Pipeline CI/CD deve ser concreto (passos reais, não genéricos)
19
+ 4. Variáveis de ambiente: NUNCA colocar valores reais (só exemplos)
20
+ 5. Estratégia de rollback é OBRIGATÓRIA
21
+
22
+ REGRAS:
23
+ - Variáveis de ambiente com valores reais NÃO vão pro repositório
24
+ - Cada variável precisa de descrição (não só o nome)
25
+ - Pipeline CI/CD deve ter passos claros e ferramentas definidas
26
+ - Rollback strategy obrigatória — "como voltar se der errado?"
27
+ - Novas variáveis adicionadas via merge-delta devem entrar na tabela
28
+
29
+ =============================================================================
30
+ -->
31
+
32
+ ## Ambientes
33
+
34
+ | Ambiente | URL | Banco | Propósito | Branch |
35
+ |----------|-----|-------|-----------|--------|
36
+ | Local | `localhost:{{PORT}}` | local | Desenvolvimento | qualquer |
37
+ | Staging | | | Testes e homologação | develop |
38
+ | Produção | | | Usuários finais | main |
39
+
40
+ ## Deploy
41
+
42
+ ### Estratégia
43
+
44
+ | Aspecto | Decisão |
45
+ |---------|---------|
46
+ | Plataforma | <!-- Docker? Serverless? VPS? Cloud provider? --> |
47
+ | Orquestração | <!-- Kubernetes? ECS? PM2? --> |
48
+ | Build | <!-- Docker multi-stage? Build nativo? --> |
49
+ | Estratégia de deploy | <!-- Rolling? Blue-green? Canary? --> |
50
+
51
+ ### Pipeline CI/CD
52
+
53
+ ```
54
+ push → lint → test → build → deploy(staging) → aprovação → deploy(prod)
55
+ ```
56
+
57
+ | Etapa | Ferramenta | Trigger | Timeout |
58
+ |-------|-----------|---------|---------|
59
+ | Lint | <!-- eslint, ruff --> | push | |
60
+ | Testes | <!-- jest, pytest --> | push | |
61
+ | Build | <!-- docker build --> | push em main/develop | |
62
+ | Deploy staging | <!-- CD tool --> | push em develop | |
63
+ | Deploy produção | <!-- CD tool --> | aprovação manual | |
64
+
65
+ ### Rollback
66
+
67
+ | Cenário | Procedimento | Responsável |
68
+ |---------|-------------|-------------|
69
+ | Bug em produção | <!-- Reverter deploy? Hotfix? --> | |
70
+ | Migration com erro | <!-- Rollback da migration? --> | |
71
+ | Serviço externo fora | <!-- Fallback? Circuit breaker? --> | |
72
+
73
+ ## Variáveis de Ambiente
74
+
75
+ > NUNCA colocar valores reais aqui. Apenas nomes, descrição e exemplos.
76
+
77
+ | Variável | Ambientes | Obrigatória | Descrição | Exemplo |
78
+ |----------|-----------|-------------|-----------|---------|
79
+ | `DATABASE_URL` | todos | sim | Conexão com banco | `postgres://user:pass@host:5432/db` |
80
+ | `JWT_SECRET` | todos | sim | Chave de assinatura JWT | `sua-chave-secreta-aqui` |
81
+ | `NODE_ENV` | todos | sim | Ambiente atual | `development` / `production` |
82
+
83
+ ## Domínios e DNS
84
+
85
+ | Domínio | Aponta para | Certificado | Gerenciado por |
86
+ |---------|-------------|-------------|----------------|
87
+ | | | <!-- Let's Encrypt? AWS ACM? --> | |
88
+
89
+ ## Monitoramento e Observabilidade
90
+
91
+ | Aspecto | Ferramenta | O que monitora |
92
+ |---------|-----------|----------------|
93
+ | Logs | <!-- Ex: CloudWatch, Datadog --> | |
94
+ | APM | <!-- Ex: New Relic, Sentry --> | |
95
+ | Uptime | <!-- Ex: Pingdom, UptimeRobot --> | |
96
+ | Alertas | <!-- Ex: PagerDuty, Slack --> | |
97
+
98
+ ---
99
+
100
+ ## Changelog
101
+
102
+ | Data | Feature | Tipo | Descrição |
103
+ |------|---------|------|-----------|
104
+ | | | | |