spec-first-copilot 0.3.0 → 0.5.0-beta.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.
- package/README.md +38 -30
- package/lib/init.js +2 -2
- package/package.json +31 -23
- package/templates/.ai/memory/napkin.md +1 -1
- package/templates/.github/agents/db-coder.md +1 -1
- package/templates/.github/agents/doc-writer.md +12 -15
- package/templates/.github/agents/security-reviewer.md +1 -1
- package/templates/.github/copilot-instructions.md +61 -43
- package/templates/.github/instructions/docs.instructions.md +12 -12
- package/templates/.github/instructions/sensitive-files.instructions.md +10 -10
- package/templates/{docs/Desenvolvimento → .github}/rules.md +2 -2
- package/templates/.github/skills/sf-design/SKILL.md +26 -27
- package/templates/.github/skills/sf-dev/SKILL.md +30 -7
- package/templates/.github/skills/sf-discovery/SKILL.md +405 -405
- package/templates/.github/skills/sf-extract/SKILL.md +9 -9
- package/templates/.github/skills/sf-feature/SKILL.md +21 -21
- package/templates/.github/skills/sf-merge-delta/SKILL.md +21 -18
- package/templates/.github/skills/sf-plan/SKILL.md +8 -8
- package/templates/.github/skills/{sf-pausar → sf-session-finish}/SKILL.md +10 -10
- package/templates/.github/skills/sf-setup-projeto/SKILL.md +20 -20
- package/templates/{docs/_templates/estrutura/API.template.md → .github/templates/estrutura/apiContracts.template.md} +24 -17
- package/templates/.github/templates/estrutura/architecture.template.md +158 -0
- package/templates/{docs/_templates/estrutura/Seguranca.template.md → .github/templates/estrutura/conventions.template.md} +74 -10
- package/templates/{docs/_templates/estrutura/ADRs.template.md → .github/templates/estrutura/decisions.template.md} +21 -13
- package/templates/.github/templates/estrutura/domain.template.md +148 -0
- package/templates/{docs/_templates → .github/templates}/feature/PRD.template.md +256 -256
- package/templates/{docs/_templates → .github/templates}/feature/Progresso.template.md +2 -2
- package/templates/{docs/_templates → .github/templates}/feature/TRD.template.md +204 -200
- package/templates/{docs/_templates → .github/templates}/feature/context.template.md +1 -1
- package/templates/{docs/_templates → .github/templates}/feature/projetos.template.yaml +1 -1
- package/templates/{docs/_templates → .github/templates}/feature/sdd.template.md +372 -372
- package/templates/{docs/_templates → .github/templates}/feature/tasks.template.md +115 -115
- package/templates/docs/_templates/estrutura/Arquitetura.template.md +0 -82
- package/templates/docs/_templates/estrutura/Infraestrutura.template.md +0 -104
- package/templates/docs/_templates/estrutura/Modelo_Dados.template.md +0 -99
- package/templates/docs/_templates/estrutura/Stack.template.md +0 -78
- package/templates/docs/_templates/estrutura/Visao.template.md +0 -82
- /package/templates/{docs/_templates → .github/templates}/feature/backlog-extraido.template.md +0 -0
- /package/templates/{docs/_templates → .github/templates}/feature/extract-log.template.md +0 -0
- /package/templates/{docs/_templates → .github/templates}/global/progresso_global.template.md +0 -0
- /package/templates/docs/{Desenvolvimento/.gitkeep → .gitkeep} +0 -0
- /package/templates/{docs/Estrutura → workspace/Input}/.gitkeep +0 -0
- /package/templates/{docs/PM → workspace/Input/setup_projeto}/.gitkeep +0 -0
- /package/templates/{docs/PM/setup_projeto → workspace/Output}/.gitkeep +0 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Arquitetura
|
|
2
|
+
|
|
3
|
+
> Arquitetura do sistema: containers, componentes, stack tecnológica, ambientes e deploy.
|
|
4
|
+
> C4 Níveis 2-3 + camadas da stack + infraestrutura de runtime.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!--
|
|
9
|
+
=============================================================================
|
|
10
|
+
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
11
|
+
=============================================================================
|
|
12
|
+
|
|
13
|
+
ORIGEM: Gerado pelo /setup-projeto a partir do TRD §2 (Stack), §3 (Arquitetura)
|
|
14
|
+
e §6 (Infraestrutura — ambientes, deploy, CI/CD, rollback).
|
|
15
|
+
ATUALIZAÇÃO: /merge-delta quando features adicionam containers, componentes,
|
|
16
|
+
dependências de stack ou mudam ambientes/deploy.
|
|
17
|
+
|
|
18
|
+
COMO GERAR:
|
|
19
|
+
1. Ler TRD §3 (Arquitetura) — containers, padrões de comunicação, padrões de design
|
|
20
|
+
2. Ler TRD §2 (Stack) — tecnologias por camada, versões
|
|
21
|
+
3. Ler TRD §6 (Infraestrutura) — ambientes, deploy, CI/CD, rollback
|
|
22
|
+
4. Montar diagrama C4 Nível 2 mostrando TODOS os containers e conexões
|
|
23
|
+
5. Para cada container relevante, listar componentes internos (C4 Nível 3)
|
|
24
|
+
6. Documentar stack principal com versões EXATAS (não "latest")
|
|
25
|
+
7. Documentar ambientes (URLs, bancos, branches) e pipeline CI/CD concreto
|
|
26
|
+
|
|
27
|
+
O QUE NÃO VAI AQUI:
|
|
28
|
+
- Variáveis de ambiente → conventions.md
|
|
29
|
+
- Monitoramento e observabilidade → conventions.md
|
|
30
|
+
- Segurança (auth, CORS, rate limiting) → conventions.md
|
|
31
|
+
- Alternativas descartadas de stack → conventions.md
|
|
32
|
+
- Entidades e modelo de dados → domain.md
|
|
33
|
+
|
|
34
|
+
REGRAS:
|
|
35
|
+
- Versões fixadas (18.3.1, não ^18.0.0)
|
|
36
|
+
- Cada container tem: tecnologia, responsabilidade, porta, tipo de comunicação
|
|
37
|
+
- Padrões de design precisam de justificativa (não apenas nome)
|
|
38
|
+
- Pipeline CI/CD deve ser concreto — passos reais e ferramentas
|
|
39
|
+
- Rollback strategy obrigatória — "como voltar se der errado?"
|
|
40
|
+
|
|
41
|
+
=============================================================================
|
|
42
|
+
-->
|
|
43
|
+
|
|
44
|
+
## Diagrama de Containers (C4 Nível 2)
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
<!-- Representação textual dos containers e suas conexões -->
|
|
48
|
+
<!-- Usar formato: [Container] --protocolo--> [Container] -->
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Containers
|
|
52
|
+
|
|
53
|
+
| Container | Tecnologia | Responsabilidade | Porta | Comunicação |
|
|
54
|
+
|-----------|-----------|-----------------|-------|-------------|
|
|
55
|
+
| | | | | |
|
|
56
|
+
|
|
57
|
+
## Componentes Principais (C4 Nível 3)
|
|
58
|
+
|
|
59
|
+
<!-- Repetir esta seção para cada container que tenha componentes internos relevantes -->
|
|
60
|
+
|
|
61
|
+
### {{Container}}
|
|
62
|
+
|
|
63
|
+
| Componente | Responsabilidade | Dependências internas | Dependências externas |
|
|
64
|
+
|------------|-----------------|----------------------|----------------------|
|
|
65
|
+
| | | | |
|
|
66
|
+
|
|
67
|
+
## Padrões de Comunicação
|
|
68
|
+
|
|
69
|
+
### Síncrona (request/response)
|
|
70
|
+
|
|
71
|
+
| De | Para | Protocolo | Formato | Observações |
|
|
72
|
+
|----|------|-----------|---------|-------------|
|
|
73
|
+
| | | | | |
|
|
74
|
+
|
|
75
|
+
### Assíncrona (eventos/filas)
|
|
76
|
+
|
|
77
|
+
| Produtor | Tópico/Fila | Consumer | Formato | Garantia |
|
|
78
|
+
|----------|-------------|----------|---------|----------|
|
|
79
|
+
| | | | | at-least-once / exactly-once |
|
|
80
|
+
|
|
81
|
+
## Padrões de Design Adotados
|
|
82
|
+
|
|
83
|
+
| Padrão | Onde é usado | Justificativa | Ref decisão |
|
|
84
|
+
|--------|-------------|---------------|-------------|
|
|
85
|
+
| | | | |
|
|
86
|
+
|
|
87
|
+
## Stack Principal
|
|
88
|
+
|
|
89
|
+
| Camada | Tecnologia | Versão | Justificativa |
|
|
90
|
+
|--------|-----------|--------|---------------|
|
|
91
|
+
| Frontend | | | |
|
|
92
|
+
| Backend | | | |
|
|
93
|
+
| Banco de Dados | | | |
|
|
94
|
+
| ORM/Query Builder | | | |
|
|
95
|
+
| Autenticação | | | |
|
|
96
|
+
| Testes | | | |
|
|
97
|
+
| CI/CD | | | |
|
|
98
|
+
|
|
99
|
+
<!-- Adicionar camadas conforme necessidade: Mobile, Cache, Fila, Monitoramento, etc. -->
|
|
100
|
+
|
|
101
|
+
## Bibliotecas e Dependências por Camada
|
|
102
|
+
|
|
103
|
+
<!-- Repetir bloco para cada camada com dependências relevantes -->
|
|
104
|
+
|
|
105
|
+
### {{Camada}}
|
|
106
|
+
|
|
107
|
+
| Pacote | Versão | Para quê |
|
|
108
|
+
|--------|--------|----------|
|
|
109
|
+
| | | |
|
|
110
|
+
|
|
111
|
+
## Ambientes
|
|
112
|
+
|
|
113
|
+
| Ambiente | URL | Banco | Propósito | Branch |
|
|
114
|
+
|----------|-----|-------|-----------|--------|
|
|
115
|
+
| Local | `localhost:{{PORT}}` | local | Desenvolvimento | qualquer |
|
|
116
|
+
| Staging | | | Testes e homologação | develop |
|
|
117
|
+
| Produção | | | Usuários finais | main |
|
|
118
|
+
|
|
119
|
+
## Deploy
|
|
120
|
+
|
|
121
|
+
### Estratégia
|
|
122
|
+
|
|
123
|
+
| Aspecto | Decisão |
|
|
124
|
+
|---------|---------|
|
|
125
|
+
| Plataforma | <!-- Docker? Serverless? VPS? Cloud provider? --> |
|
|
126
|
+
| Orquestração | <!-- Kubernetes? ECS? PM2? --> |
|
|
127
|
+
| Build | <!-- Docker multi-stage? Build nativo? --> |
|
|
128
|
+
| Estratégia de deploy | <!-- Rolling? Blue-green? Canary? --> |
|
|
129
|
+
|
|
130
|
+
### Pipeline CI/CD
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
push → lint → test → build → deploy(staging) → aprovação → deploy(prod)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
| Etapa | Ferramenta | Trigger | Timeout |
|
|
137
|
+
|-------|-----------|---------|---------|
|
|
138
|
+
| Lint | <!-- eslint, ruff --> | push | |
|
|
139
|
+
| Testes | <!-- jest, pytest --> | push | |
|
|
140
|
+
| Build | <!-- docker build --> | push em main/develop | |
|
|
141
|
+
| Deploy staging | <!-- CD tool --> | push em develop | |
|
|
142
|
+
| Deploy produção | <!-- CD tool --> | aprovação manual | |
|
|
143
|
+
|
|
144
|
+
### Rollback
|
|
145
|
+
|
|
146
|
+
| Cenário | Procedimento | Responsável |
|
|
147
|
+
|---------|-------------|-------------|
|
|
148
|
+
| Bug em produção | <!-- Reverter deploy? Hotfix? --> | |
|
|
149
|
+
| Migration com erro | <!-- Rollback da migration? --> | |
|
|
150
|
+
| Serviço externo fora | <!-- Fallback? Circuit breaker? --> | |
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Changelog
|
|
155
|
+
|
|
156
|
+
| Data | Feature | Tipo | Descrição |
|
|
157
|
+
|------|---------|------|-----------|
|
|
158
|
+
| | | | |
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Convenções
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Regras transversais do sistema: autenticação, autorização, CORS, rate limiting,
|
|
4
|
+
> LGPD, auditoria, variáveis de ambiente, monitoramento, códigos de erro de domínio
|
|
5
|
+
> e versionamento de dependências. Padrões que todo código segue.
|
|
4
6
|
|
|
5
7
|
---
|
|
6
8
|
|
|
@@ -9,15 +11,27 @@
|
|
|
9
11
|
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
10
12
|
=============================================================================
|
|
11
13
|
|
|
12
|
-
ORIGEM: Gerado pelo /setup-projeto a partir do TRD §7
|
|
13
|
-
|
|
14
|
+
ORIGEM: Gerado pelo /setup-projeto a partir do TRD §7 (Segurança),
|
|
15
|
+
§6 (Infra — env vars, domínios, monitoramento), §5 (API — códigos de erro
|
|
16
|
+
de domínio) e §2 (Stack — alternativas descartadas, versionamento).
|
|
17
|
+
ATUALIZAÇÃO: /merge-delta quando features adicionam permissões, papéis,
|
|
18
|
+
dados pessoais, variáveis de ambiente, códigos de erro ou alteram políticas.
|
|
14
19
|
|
|
15
20
|
COMO GERAR:
|
|
16
21
|
1. Ler TRD §7 (Segurança) — autenticação, autorização, CORS, LGPD
|
|
17
|
-
2.
|
|
18
|
-
3.
|
|
19
|
-
4.
|
|
20
|
-
5.
|
|
22
|
+
2. Ler TRD §6 (Infra) — variáveis de ambiente, domínios, monitoramento
|
|
23
|
+
3. Ler TRD §5 (API) — códigos de erro do domínio (reutilizáveis)
|
|
24
|
+
4. Ler TRD §2 (Stack) — alternativas descartadas e versionamento de dependências
|
|
25
|
+
5. Autenticação: método, expiração, hash, refresh strategy
|
|
26
|
+
6. Autorização: papéis e matriz de permissões (RBAC/ABAC)
|
|
27
|
+
7. LGPD: mapear TODOS dados pessoais com base legal específica
|
|
28
|
+
8. Auditoria: O QUE é logado, ONDE, POR QUANTO TEMPO
|
|
29
|
+
9. Variáveis de ambiente: NUNCA valores reais, só exemplos
|
|
30
|
+
|
|
31
|
+
O QUE NÃO VAI AQUI:
|
|
32
|
+
- Rotas, paginação, filtros, catálogo de endpoints → apiContracts.md
|
|
33
|
+
- Containers, ambientes, deploy → architecture.md
|
|
34
|
+
- Entidades, tabelas → domain.md
|
|
21
35
|
|
|
22
36
|
REGRAS:
|
|
23
37
|
- Matriz de permissões é DINÂMICA — cresce a cada feature (via merge-delta)
|
|
@@ -25,7 +39,8 @@ REGRAS:
|
|
|
25
39
|
- Nunca armazenar senhas em texto plano (hash obrigatório)
|
|
26
40
|
- Secrets nunca no código — sempre variáveis de ambiente
|
|
27
41
|
- Rate limiting obrigatório em endpoints públicos (login, registro)
|
|
28
|
-
- Auditoria obrigatória para operações destrutivas
|
|
42
|
+
- Auditoria obrigatória para operações destrutivas
|
|
43
|
+
- Códigos de erro do domínio são globais — reutilizáveis por múltiplos endpoints
|
|
29
44
|
|
|
30
45
|
=============================================================================
|
|
31
46
|
-->
|
|
@@ -105,7 +120,7 @@ REGRAS:
|
|
|
105
120
|
|
|
106
121
|
| Direito | Implementação | Endpoint/Fluxo |
|
|
107
122
|
|---------|--------------|----------------|
|
|
108
|
-
| Acesso aos dados | |
|
|
123
|
+
| Acesso aos dados | | |
|
|
109
124
|
| Correção | | |
|
|
110
125
|
| Exclusão (right to be forgotten) | | <!-- Soft delete? Hard delete? Anonimização? --> |
|
|
111
126
|
| Portabilidade | | <!-- Formato de exportação? --> |
|
|
@@ -129,6 +144,55 @@ REGRAS:
|
|
|
129
144
|
| Dados sensíveis em repouso | <!-- Criptografia? Quais campos? --> |
|
|
130
145
|
| Backup | <!-- Criptografado? Frequência? --> |
|
|
131
146
|
|
|
147
|
+
## Variáveis de Ambiente
|
|
148
|
+
|
|
149
|
+
> NUNCA colocar valores reais aqui. Apenas nomes, descrição e exemplos.
|
|
150
|
+
|
|
151
|
+
| Variável | Ambientes | Obrigatória | Descrição | Exemplo |
|
|
152
|
+
|----------|-----------|-------------|-----------|---------|
|
|
153
|
+
| `DATABASE_URL` | todos | sim | Conexão com banco | `postgres://user:pass@host:5432/db` |
|
|
154
|
+
| `JWT_SECRET` | todos | sim | Chave de assinatura JWT | `sua-chave-secreta-aqui` |
|
|
155
|
+
| `NODE_ENV` | todos | sim | Ambiente atual | `development` / `production` |
|
|
156
|
+
|
|
157
|
+
## Domínios e DNS
|
|
158
|
+
|
|
159
|
+
| Domínio | Aponta para | Certificado | Gerenciado por |
|
|
160
|
+
|---------|-------------|-------------|----------------|
|
|
161
|
+
| | | <!-- Let's Encrypt? AWS ACM? --> | |
|
|
162
|
+
|
|
163
|
+
## Monitoramento e Observabilidade
|
|
164
|
+
|
|
165
|
+
| Aspecto | Ferramenta | O que monitora |
|
|
166
|
+
|---------|-----------|----------------|
|
|
167
|
+
| Logs | <!-- Ex: CloudWatch, Datadog --> | |
|
|
168
|
+
| APM | <!-- Ex: New Relic, Sentry --> | |
|
|
169
|
+
| Uptime | <!-- Ex: Pingdom, UptimeRobot --> | |
|
|
170
|
+
| Alertas | <!-- Ex: PagerDuty, Slack --> | |
|
|
171
|
+
|
|
172
|
+
## Códigos de Erro do Domínio
|
|
173
|
+
|
|
174
|
+
> Códigos reutilizáveis por múltiplos endpoints. Novos códigos são adicionados via /merge-delta.
|
|
175
|
+
|
|
176
|
+
| Código | Descrição | HTTP padrão |
|
|
177
|
+
|--------|-----------|-------------|
|
|
178
|
+
| <!-- Ex: DUPLICATE_EMAIL --> | <!-- Email já cadastrado --> | <!-- 409 --> |
|
|
179
|
+
|
|
180
|
+
## Alternativas Tecnológicas Descartadas
|
|
181
|
+
|
|
182
|
+
> Decisões já tomadas. Se alguém perguntar "por que não usamos X?", a resposta está aqui.
|
|
183
|
+
|
|
184
|
+
| Tecnologia escolhida | Alternativa considerada | Por que descartamos | Ref decisão |
|
|
185
|
+
|----------------------|------------------------|---------------------|-------------|
|
|
186
|
+
| | | | |
|
|
187
|
+
|
|
188
|
+
## Convenções de Versionamento de Dependências
|
|
189
|
+
|
|
190
|
+
| Aspecto | Convenção |
|
|
191
|
+
|---------|-----------|
|
|
192
|
+
| Versionamento | <!-- Semver? Pinned? --> |
|
|
193
|
+
| Lock files | <!-- package-lock.json? yarn.lock? --> |
|
|
194
|
+
| Atualização | <!-- Dependabot? Manual? Periodicidade? --> |
|
|
195
|
+
|
|
132
196
|
---
|
|
133
197
|
|
|
134
198
|
## Changelog
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Decisões — Architecture Decision Records
|
|
2
2
|
|
|
3
3
|
> Registro de decisões arquiteturais com contexto, alternativas e consequências.
|
|
4
4
|
> Cada decisão é imutável após aceita. Novas decisões podem substituir anteriores.
|
|
@@ -10,33 +10,33 @@
|
|
|
10
10
|
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
11
11
|
=============================================================================
|
|
12
12
|
|
|
13
|
-
ORIGEM: Criado pelo /setup-projeto com
|
|
14
|
-
ATUALIZAÇÃO: Novas
|
|
15
|
-
- /setup-projeto define stack e arquitetura (
|
|
13
|
+
ORIGEM: Criado pelo /setup-projeto com decisões iniciais (stack, arquitetura base).
|
|
14
|
+
ATUALIZAÇÃO: Novas decisões adicionadas quando:
|
|
15
|
+
- /setup-projeto define stack e arquitetura (decisões iniciais)
|
|
16
16
|
- /design gera SDD §2 com decisões de design significativas
|
|
17
|
-
- /merge-delta detecta mudança de stack ou padrão
|
|
17
|
+
- /merge-delta detecta mudança de stack ou padrão arquitetural
|
|
18
18
|
- Usuário toma decisão que impacta arquitetura
|
|
19
19
|
|
|
20
20
|
COMO GERAR:
|
|
21
|
-
1. Para cada decisão significativa, criar
|
|
21
|
+
1. Para cada decisão significativa, criar registro com TODOS os campos
|
|
22
22
|
2. Contexto: POR QUE essa decisão foi necessária (não apenas "precisávamos")
|
|
23
23
|
3. Alternativas: OBRIGATÓRIO listar ao menos 1 alternativa (com motivo da rejeição)
|
|
24
24
|
4. Consequências: o que MUDA por causa da decisão (positivo E negativo)
|
|
25
25
|
|
|
26
26
|
REGRAS:
|
|
27
27
|
- IDs sequenciais: ADR-001, ADR-002... nunca reutilizar
|
|
28
|
-
- NUNCA editar
|
|
28
|
+
- NUNCA editar decisão com status "aceita" — criar nova com "substituída por ADR-XXX"
|
|
29
29
|
- Status "proposta" = ainda em discussão, não implementar até aceitar
|
|
30
|
-
- Toda mudança de stack, banco, framework DEVE ter
|
|
31
|
-
-
|
|
30
|
+
- Toda mudança de stack, banco, framework DEVE ter registro aqui
|
|
31
|
+
- Decisões são APPEND-ONLY — histórico importa
|
|
32
32
|
|
|
33
|
-
QUANDO CRIAR
|
|
33
|
+
QUANDO CRIAR:
|
|
34
34
|
- Escolha de tecnologia/framework
|
|
35
35
|
- Mudança de padrão de design
|
|
36
36
|
- Decisão de infra (cloud provider, DB engine)
|
|
37
37
|
- Trade-off significativo (performance vs simplicidade, etc.)
|
|
38
38
|
|
|
39
|
-
QUANDO NÃO CRIAR
|
|
39
|
+
QUANDO NÃO CRIAR:
|
|
40
40
|
- Escolha de nome de variável
|
|
41
41
|
- Implementação seguindo padrão já definido
|
|
42
42
|
- Bug fix
|
|
@@ -53,7 +53,7 @@ QUANDO NÃO CRIAR ADR:
|
|
|
53
53
|
|
|
54
54
|
## Formato
|
|
55
55
|
|
|
56
|
-
Cada
|
|
56
|
+
Cada decisão segue este modelo:
|
|
57
57
|
|
|
58
58
|
```markdown
|
|
59
59
|
### ADR-NNN: Título da Decisão
|
|
@@ -88,4 +88,12 @@ Cada ADR segue este modelo:
|
|
|
88
88
|
|
|
89
89
|
---
|
|
90
90
|
|
|
91
|
-
> **Regra**:
|
|
91
|
+
> **Regra**: Decisões aceitas são imutáveis. Para reverter, criar nova decisão com status "substituída por ADR-XXX" na original.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Changelog
|
|
96
|
+
|
|
97
|
+
| Data | Feature | Tipo | Descrição |
|
|
98
|
+
|------|---------|------|-----------|
|
|
99
|
+
| | | | |
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Domínio
|
|
2
|
+
|
|
3
|
+
> Visão de negócio + modelo de dados.
|
|
4
|
+
> O que o sistema é, quem usa, com o que integra, quais entidades existem e como se relacionam.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<!--
|
|
9
|
+
=============================================================================
|
|
10
|
+
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
11
|
+
=============================================================================
|
|
12
|
+
|
|
13
|
+
ORIGEM: Gerado pelo /setup-projeto a partir do TRD §1 (Visão) e §4 (Modelo de Dados Base).
|
|
14
|
+
ATUALIZAÇÃO: /merge-delta quando features adicionam/alteram tabelas, entidades,
|
|
15
|
+
atores, integrações externas ou termos de domínio.
|
|
16
|
+
|
|
17
|
+
COMO GERAR:
|
|
18
|
+
1. Ler TRD §1 (Visão do Sistema) — contexto, atores, integrações
|
|
19
|
+
2. Ler TRD §4 (Modelo de Dados Base) — tabelas iniciais, convenções
|
|
20
|
+
3. Descrever o sistema em 2-3 frases objetivas (O QUE, PARA QUEM, QUAL PROBLEMA)
|
|
21
|
+
4. Listar TODOS os atores com permissões gerais (o que PODE e o que NÃO pode)
|
|
22
|
+
5. Listar TODAS as integrações externas com direção explícita
|
|
23
|
+
6. Gerar diagrama ER textual com TODAS as relações
|
|
24
|
+
7. Catálogo de tabelas com tipos EXATOS do banco (varchar(255), não "string")
|
|
25
|
+
8. Glossário (DDD ubiquitous language) é obrigatório
|
|
26
|
+
|
|
27
|
+
O QUE NÃO VAI AQUI:
|
|
28
|
+
- Roadmap de módulos → vive no backlog faseado, não no Estrutura
|
|
29
|
+
- Containers, stack, deploy → architecture.md
|
|
30
|
+
- Autorização, LGPD, auditoria → conventions.md
|
|
31
|
+
|
|
32
|
+
REGRAS:
|
|
33
|
+
- Atores devem ter permissões gerais claras
|
|
34
|
+
- Integrações devem ter direção explícita (envia/recebe/ambos)
|
|
35
|
+
- Toda FK define ON DELETE/ON UPDATE
|
|
36
|
+
- Índices precisam de justificativa (query que justifica)
|
|
37
|
+
- Convenções de nomenclatura são LEI — SDDs seguem à risca
|
|
38
|
+
- Glossário não é opcional — termos ambíguos geram bugs
|
|
39
|
+
|
|
40
|
+
=============================================================================
|
|
41
|
+
-->
|
|
42
|
+
|
|
43
|
+
## O que é este sistema?
|
|
44
|
+
|
|
45
|
+
<!-- Descrição em 2-3 frases. O que ele faz, para quem, qual problema resolve. -->
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
## Usuários e Papéis
|
|
49
|
+
|
|
50
|
+
| Papel | O que faz | O que NÃO pode fazer | Nível de acesso |
|
|
51
|
+
|-------|-----------|----------------------|-----------------|
|
|
52
|
+
| | | | |
|
|
53
|
+
|
|
54
|
+
## Integrações Externas
|
|
55
|
+
|
|
56
|
+
| Sistema/Serviço | Tipo (API/Webhook/Arquivo/Fila) | Direção (Envia/Recebe/Ambos) | Descrição | SLA/Disponibilidade |
|
|
57
|
+
|-----------------|--------------------------------|------------------------------|-----------|---------------------|
|
|
58
|
+
| | | | | |
|
|
59
|
+
|
|
60
|
+
## Restrições e Premissas
|
|
61
|
+
|
|
62
|
+
### Restrições técnicas
|
|
63
|
+
-
|
|
64
|
+
|
|
65
|
+
### Restrições de negócio
|
|
66
|
+
-
|
|
67
|
+
|
|
68
|
+
### Premissas
|
|
69
|
+
-
|
|
70
|
+
|
|
71
|
+
## Glossário
|
|
72
|
+
|
|
73
|
+
> Termos do domínio usados em todo o projeto. Linguagem ubíqua (DDD).
|
|
74
|
+
|
|
75
|
+
| Termo | Definição | Exemplo de uso |
|
|
76
|
+
|-------|-----------|----------------|
|
|
77
|
+
| | | |
|
|
78
|
+
|
|
79
|
+
## Modelo de Dados
|
|
80
|
+
|
|
81
|
+
### Diagrama ER
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
<!-- Representação textual do ER -->
|
|
85
|
+
<!-- Formato: [tabela_a] 1---N [tabela_b] (campo_fk) -->
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Convenções de Nomenclatura
|
|
89
|
+
|
|
90
|
+
| Elemento | Convenção | Exemplo |
|
|
91
|
+
|----------|-----------|---------|
|
|
92
|
+
| Tabelas | snake_case, plural | `clientes`, `pedidos` |
|
|
93
|
+
| Colunas | snake_case | `nome_completo`, `criado_em` |
|
|
94
|
+
| PKs | `id` (UUID ou SERIAL) | `id UUID PRIMARY KEY DEFAULT gen_random_uuid()` |
|
|
95
|
+
| FKs | `{tabela_singular}_id` | `cliente_id`, `cidade_id` |
|
|
96
|
+
| Índices | `idx_{tabela}_{colunas}` | `idx_clientes_cpf` |
|
|
97
|
+
| Unique | `uq_{tabela}_{colunas}` | `uq_clientes_email` |
|
|
98
|
+
| Timestamps | `criado_em`, `atualizado_em` | `TIMESTAMPTZ NOT NULL DEFAULT now()` |
|
|
99
|
+
| Soft delete | `ativo` (boolean) | `ativo BOOLEAN DEFAULT true` |
|
|
100
|
+
| Auditoria | `criado_por`, `atualizado_por` | `UUID REFERENCES usuarios(id)` |
|
|
101
|
+
|
|
102
|
+
### Catálogo de Tabelas
|
|
103
|
+
|
|
104
|
+
<!-- Repetir bloco para cada tabela -->
|
|
105
|
+
|
|
106
|
+
#### {{tabela}}
|
|
107
|
+
|
|
108
|
+
> Descrição breve da tabela.
|
|
109
|
+
|
|
110
|
+
| Coluna | Tipo | Nullable | Default | Constraint | Descrição |
|
|
111
|
+
|--------|------|----------|---------|------------|-----------|
|
|
112
|
+
| | | | | | |
|
|
113
|
+
|
|
114
|
+
**Relações:**
|
|
115
|
+
- `campo_id` → `tabela_ref(id)` — ON DELETE CASCADE / SET NULL / RESTRICT
|
|
116
|
+
|
|
117
|
+
**Índices:**
|
|
118
|
+
|
|
119
|
+
| Nome | Colunas | Tipo | Justificativa |
|
|
120
|
+
|------|---------|------|---------------|
|
|
121
|
+
| | | btree / unique / gin | <!-- Qual query justifica este índice? --> |
|
|
122
|
+
|
|
123
|
+
### Estratégia de Migrations
|
|
124
|
+
|
|
125
|
+
| Aspecto | Convenção |
|
|
126
|
+
|---------|-----------|
|
|
127
|
+
| Ferramenta | <!-- Ex: knex, prisma, flyway, alembic, EF Core --> |
|
|
128
|
+
| Nomenclatura | <!-- Ex: 001_create_tabela.sql, YYYYMMDD_descricao --> |
|
|
129
|
+
| Rollback | <!-- Toda migration TEM rollback? Testado como? --> |
|
|
130
|
+
| Execução | <!-- Sequencial? Transacional? --> |
|
|
131
|
+
| Dados existentes | <!-- Como lidar com migrations em tabelas com dados? --> |
|
|
132
|
+
|
|
133
|
+
### Regras Globais de Dados
|
|
134
|
+
|
|
135
|
+
| Regra | Descrição |
|
|
136
|
+
|-------|-----------|
|
|
137
|
+
| Soft delete | <!-- Todas as tabelas usam? Quais exceções? --> |
|
|
138
|
+
| Auditoria | <!-- criado_por/atualizado_por em todas? --> |
|
|
139
|
+
| Timestamps | <!-- criado_em/atualizado_em obrigatórios? --> |
|
|
140
|
+
| Encoding | <!-- UTF-8? Collation? --> |
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Changelog
|
|
145
|
+
|
|
146
|
+
| Data | Feature | Tipo | Descrição |
|
|
147
|
+
|------|---------|------|-----------|
|
|
148
|
+
| | | | |
|