spec-first-copilot 0.2.0 → 0.4.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 +148 -148
- package/bin/cli.js +52 -52
- package/lib/init.js +89 -93
- package/package.json +24 -23
- package/templates/.ai/memory/napkin.md +68 -68
- package/templates/.github/agents/backend-coder.md +215 -215
- package/templates/.github/agents/db-coder.md +165 -165
- package/templates/.github/agents/doc-writer.md +51 -51
- package/templates/.github/agents/frontend-coder.md +222 -222
- package/templates/.github/agents/infra-coder.md +341 -341
- package/templates/.github/agents/reviewer.md +99 -99
- package/templates/.github/agents/security-reviewer.md +153 -153
- package/templates/.github/copilot-instructions.md +175 -176
- package/templates/.github/instructions/docs.instructions.md +123 -123
- package/templates/.github/instructions/sensitive-files.instructions.md +32 -32
- package/templates/.github/skills/sf-design/SKILL.md +181 -181
- package/templates/.github/skills/sf-dev/SKILL.md +349 -326
- package/templates/.github/skills/sf-extract/SKILL.md +284 -284
- package/templates/.github/skills/sf-feature/SKILL.md +130 -130
- package/templates/.github/skills/sf-merge-delta/SKILL.md +142 -142
- package/templates/.github/skills/sf-plan/SKILL.md +178 -178
- package/templates/.github/skills/{sf-pausar → sf-session-finish}/SKILL.md +120 -120
- package/templates/.github/skills/sf-setup-projeto/SKILL.md +123 -123
- package/templates/docs/Desenvolvimento/rules.md +229 -229
- package/templates/docs/_templates/estrutura/ADRs.template.md +91 -91
- package/templates/docs/_templates/estrutura/API.template.md +144 -144
- package/templates/docs/_templates/estrutura/Arquitetura.template.md +82 -82
- package/templates/docs/_templates/estrutura/Infraestrutura.template.md +104 -104
- package/templates/docs/_templates/estrutura/Modelo_Dados.template.md +99 -99
- package/templates/docs/_templates/estrutura/Seguranca.template.md +138 -138
- package/templates/docs/_templates/estrutura/Stack.template.md +78 -78
- package/templates/docs/_templates/estrutura/Visao.template.md +82 -82
- package/templates/docs/_templates/feature/Progresso.template.md +136 -136
- package/templates/docs/_templates/feature/backlog-extraido.template.md +154 -154
- package/templates/docs/_templates/feature/context.template.md +42 -42
- package/templates/docs/_templates/feature/extract-log.template.md +38 -38
- package/templates/docs/_templates/feature/projetos.template.yaml +73 -73
- package/templates/docs/_templates/global/progresso_global.template.md +57 -57
|
@@ -1,99 +1,99 @@
|
|
|
1
|
-
# Modelo de Dados
|
|
2
|
-
|
|
3
|
-
> Schema completo, relações, índices, convenções de nomenclatura e estratégia de migrations.
|
|
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 §4.
|
|
13
|
-
ATUALIZAÇÃO: /merge-delta a cada feature que adiciona/altera tabelas (Delta Specs do SDD §3 e §11).
|
|
14
|
-
|
|
15
|
-
COMO GERAR:
|
|
16
|
-
1. Ler TRD §4 (Modelo de Dados Base) — tabelas iniciais, convenções
|
|
17
|
-
2. Gerar diagrama ER textual com TODAS as relações
|
|
18
|
-
3. Para cada tabela: campos com tipos EXATOS (varchar(255), não "string")
|
|
19
|
-
4. Convenções de nomenclatura são FIXAS após setup — não mudam por feature
|
|
20
|
-
5. Estratégia de migrations deve ser concreta (ferramenta, naming, rollback)
|
|
21
|
-
|
|
22
|
-
REGRAS:
|
|
23
|
-
- Tipos devem ser do banco escolhido (PostgreSQL, MySQL, etc.), não genéricos
|
|
24
|
-
- Toda FK deve ter ON DELETE/ON UPDATE definido
|
|
25
|
-
- Índices precisam de justificativa (query que justifica)
|
|
26
|
-
- Convenções definidas aqui são LEI — SDDs e tasks seguem à risca
|
|
27
|
-
- Diagrama ER deve ser atualizado a cada merge-delta
|
|
28
|
-
|
|
29
|
-
=============================================================================
|
|
30
|
-
-->
|
|
31
|
-
|
|
32
|
-
## Diagrama ER
|
|
33
|
-
|
|
34
|
-
```
|
|
35
|
-
<!-- Representação textual do ER -->
|
|
36
|
-
<!-- Formato: [tabela_a] 1---N [tabela_b] (campo_fk) -->
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
## Convenções de Nomenclatura
|
|
40
|
-
|
|
41
|
-
| Elemento | Convenção | Exemplo |
|
|
42
|
-
|----------|-----------|---------|
|
|
43
|
-
| Tabelas | snake_case, plural | `clientes`, `pedidos` |
|
|
44
|
-
| Colunas | snake_case | `nome_completo`, `criado_em` |
|
|
45
|
-
| PKs | `id` (UUID ou SERIAL) | `id UUID PRIMARY KEY DEFAULT gen_random_uuid()` |
|
|
46
|
-
| FKs | `{tabela_singular}_id` | `cliente_id`, `cidade_id` |
|
|
47
|
-
| Índices | `idx_{tabela}_{colunas}` | `idx_clientes_cpf` |
|
|
48
|
-
| Unique | `uq_{tabela}_{colunas}` | `uq_clientes_email` |
|
|
49
|
-
| Timestamps | `criado_em`, `atualizado_em` | `TIMESTAMPTZ NOT NULL DEFAULT now()` |
|
|
50
|
-
| Soft delete | `ativo` (boolean) | `ativo BOOLEAN DEFAULT true` |
|
|
51
|
-
| Auditoria | `criado_por`, `atualizado_por` | `UUID REFERENCES usuarios(id)` |
|
|
52
|
-
|
|
53
|
-
## Catálogo de Tabelas
|
|
54
|
-
|
|
55
|
-
<!-- Repetir bloco para cada tabela -->
|
|
56
|
-
|
|
57
|
-
### {{tabela}}
|
|
58
|
-
|
|
59
|
-
> Descrição breve da tabela.
|
|
60
|
-
|
|
61
|
-
| Coluna | Tipo | Nullable | Default | Constraint | Descrição |
|
|
62
|
-
|--------|------|----------|---------|------------|-----------|
|
|
63
|
-
| | | | | | |
|
|
64
|
-
|
|
65
|
-
**Relações:**
|
|
66
|
-
- `campo_id` → `tabela_ref(id)` — ON DELETE CASCADE / SET NULL / RESTRICT
|
|
67
|
-
|
|
68
|
-
**Índices:**
|
|
69
|
-
|
|
70
|
-
| Nome | Colunas | Tipo | Justificativa |
|
|
71
|
-
|------|---------|------|---------------|
|
|
72
|
-
| | | btree / unique / gin | <!-- Qual query justifica este índice? --> |
|
|
73
|
-
|
|
74
|
-
## Estratégia de Migrations
|
|
75
|
-
|
|
76
|
-
| Aspecto | Convenção |
|
|
77
|
-
|---------|-----------|
|
|
78
|
-
| Ferramenta | <!-- Ex: knex, prisma, flyway, alembic --> |
|
|
79
|
-
| Nomenclatura | <!-- Ex: 001_create_tabela.sql, YYYYMMDD_descricao --> |
|
|
80
|
-
| Rollback | <!-- Toda migration TEM rollback? Testado como? --> |
|
|
81
|
-
| Execução | <!-- Sequencial? Transacional? --> |
|
|
82
|
-
| Dados existentes | <!-- Como lidar com migrations em tabelas com dados? --> |
|
|
83
|
-
|
|
84
|
-
## Regras Globais de Dados
|
|
85
|
-
|
|
86
|
-
| Regra | Descrição |
|
|
87
|
-
|-------|-----------|
|
|
88
|
-
| Soft delete | <!-- Todas as tabelas usam? Quais exceções? --> |
|
|
89
|
-
| Auditoria | <!-- criado_por/atualizado_por em todas? --> |
|
|
90
|
-
| Timestamps | <!-- criado_em/atualizado_em obrigatórios? --> |
|
|
91
|
-
| Encoding | <!-- UTF-8? Collation? --> |
|
|
92
|
-
|
|
93
|
-
---
|
|
94
|
-
|
|
95
|
-
## Changelog
|
|
96
|
-
|
|
97
|
-
| Data | Feature | Tipo | Descrição |
|
|
98
|
-
|------|---------|------|-----------|
|
|
99
|
-
| | | | |
|
|
1
|
+
# Modelo de Dados
|
|
2
|
+
|
|
3
|
+
> Schema completo, relações, índices, convenções de nomenclatura e estratégia de migrations.
|
|
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 §4.
|
|
13
|
+
ATUALIZAÇÃO: /merge-delta a cada feature que adiciona/altera tabelas (Delta Specs do SDD §3 e §11).
|
|
14
|
+
|
|
15
|
+
COMO GERAR:
|
|
16
|
+
1. Ler TRD §4 (Modelo de Dados Base) — tabelas iniciais, convenções
|
|
17
|
+
2. Gerar diagrama ER textual com TODAS as relações
|
|
18
|
+
3. Para cada tabela: campos com tipos EXATOS (varchar(255), não "string")
|
|
19
|
+
4. Convenções de nomenclatura são FIXAS após setup — não mudam por feature
|
|
20
|
+
5. Estratégia de migrations deve ser concreta (ferramenta, naming, rollback)
|
|
21
|
+
|
|
22
|
+
REGRAS:
|
|
23
|
+
- Tipos devem ser do banco escolhido (PostgreSQL, MySQL, etc.), não genéricos
|
|
24
|
+
- Toda FK deve ter ON DELETE/ON UPDATE definido
|
|
25
|
+
- Índices precisam de justificativa (query que justifica)
|
|
26
|
+
- Convenções definidas aqui são LEI — SDDs e tasks seguem à risca
|
|
27
|
+
- Diagrama ER deve ser atualizado a cada merge-delta
|
|
28
|
+
|
|
29
|
+
=============================================================================
|
|
30
|
+
-->
|
|
31
|
+
|
|
32
|
+
## Diagrama ER
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
<!-- Representação textual do ER -->
|
|
36
|
+
<!-- Formato: [tabela_a] 1---N [tabela_b] (campo_fk) -->
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Convenções de Nomenclatura
|
|
40
|
+
|
|
41
|
+
| Elemento | Convenção | Exemplo |
|
|
42
|
+
|----------|-----------|---------|
|
|
43
|
+
| Tabelas | snake_case, plural | `clientes`, `pedidos` |
|
|
44
|
+
| Colunas | snake_case | `nome_completo`, `criado_em` |
|
|
45
|
+
| PKs | `id` (UUID ou SERIAL) | `id UUID PRIMARY KEY DEFAULT gen_random_uuid()` |
|
|
46
|
+
| FKs | `{tabela_singular}_id` | `cliente_id`, `cidade_id` |
|
|
47
|
+
| Índices | `idx_{tabela}_{colunas}` | `idx_clientes_cpf` |
|
|
48
|
+
| Unique | `uq_{tabela}_{colunas}` | `uq_clientes_email` |
|
|
49
|
+
| Timestamps | `criado_em`, `atualizado_em` | `TIMESTAMPTZ NOT NULL DEFAULT now()` |
|
|
50
|
+
| Soft delete | `ativo` (boolean) | `ativo BOOLEAN DEFAULT true` |
|
|
51
|
+
| Auditoria | `criado_por`, `atualizado_por` | `UUID REFERENCES usuarios(id)` |
|
|
52
|
+
|
|
53
|
+
## Catálogo de Tabelas
|
|
54
|
+
|
|
55
|
+
<!-- Repetir bloco para cada tabela -->
|
|
56
|
+
|
|
57
|
+
### {{tabela}}
|
|
58
|
+
|
|
59
|
+
> Descrição breve da tabela.
|
|
60
|
+
|
|
61
|
+
| Coluna | Tipo | Nullable | Default | Constraint | Descrição |
|
|
62
|
+
|--------|------|----------|---------|------------|-----------|
|
|
63
|
+
| | | | | | |
|
|
64
|
+
|
|
65
|
+
**Relações:**
|
|
66
|
+
- `campo_id` → `tabela_ref(id)` — ON DELETE CASCADE / SET NULL / RESTRICT
|
|
67
|
+
|
|
68
|
+
**Índices:**
|
|
69
|
+
|
|
70
|
+
| Nome | Colunas | Tipo | Justificativa |
|
|
71
|
+
|------|---------|------|---------------|
|
|
72
|
+
| | | btree / unique / gin | <!-- Qual query justifica este índice? --> |
|
|
73
|
+
|
|
74
|
+
## Estratégia de Migrations
|
|
75
|
+
|
|
76
|
+
| Aspecto | Convenção |
|
|
77
|
+
|---------|-----------|
|
|
78
|
+
| Ferramenta | <!-- Ex: knex, prisma, flyway, alembic --> |
|
|
79
|
+
| Nomenclatura | <!-- Ex: 001_create_tabela.sql, YYYYMMDD_descricao --> |
|
|
80
|
+
| Rollback | <!-- Toda migration TEM rollback? Testado como? --> |
|
|
81
|
+
| Execução | <!-- Sequencial? Transacional? --> |
|
|
82
|
+
| Dados existentes | <!-- Como lidar com migrations em tabelas com dados? --> |
|
|
83
|
+
|
|
84
|
+
## Regras Globais de Dados
|
|
85
|
+
|
|
86
|
+
| Regra | Descrição |
|
|
87
|
+
|-------|-----------|
|
|
88
|
+
| Soft delete | <!-- Todas as tabelas usam? Quais exceções? --> |
|
|
89
|
+
| Auditoria | <!-- criado_por/atualizado_por em todas? --> |
|
|
90
|
+
| Timestamps | <!-- criado_em/atualizado_em obrigatórios? --> |
|
|
91
|
+
| Encoding | <!-- UTF-8? Collation? --> |
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Changelog
|
|
96
|
+
|
|
97
|
+
| Data | Feature | Tipo | Descrição |
|
|
98
|
+
|------|---------|------|-----------|
|
|
99
|
+
| | | | |
|
|
@@ -1,138 +1,138 @@
|
|
|
1
|
-
# Segurança
|
|
2
|
-
|
|
3
|
-
> Autenticação, autorização, CORS, rate limiting, LGPD, auditoria e proteção de dados.
|
|
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 §7.
|
|
13
|
-
ATUALIZAÇÃO: /merge-delta quando features adicionam permissões, dados pessoais ou políticas.
|
|
14
|
-
|
|
15
|
-
COMO GERAR:
|
|
16
|
-
1. Ler TRD §7 (Segurança) — autenticação, autorização, CORS, LGPD
|
|
17
|
-
2. Autenticação: método, expiração, hash, refresh strategy
|
|
18
|
-
3. Autorização: papéis e matriz de permissões (RBAC/ABAC)
|
|
19
|
-
4. LGPD: mapear TODOS dados pessoais com base legal
|
|
20
|
-
5. Auditoria: definir O QUE é logado, ONDE e POR QUANTO TEMPO
|
|
21
|
-
|
|
22
|
-
REGRAS:
|
|
23
|
-
- Matriz de permissões é DINÂMICA — cresce a cada feature (via merge-delta)
|
|
24
|
-
- Dados pessoais da LGPD precisam de base legal ESPECÍFICA
|
|
25
|
-
- Nunca armazenar senhas em texto plano (hash obrigatório)
|
|
26
|
-
- Secrets nunca no código — sempre variáveis de ambiente
|
|
27
|
-
- Rate limiting obrigatório em endpoints públicos (login, registro)
|
|
28
|
-
- Auditoria obrigatória para operações destrutivas (delete, update de dados sensíveis)
|
|
29
|
-
|
|
30
|
-
=============================================================================
|
|
31
|
-
-->
|
|
32
|
-
|
|
33
|
-
## Autenticação
|
|
34
|
-
|
|
35
|
-
| Aspecto | Implementação |
|
|
36
|
-
|---------|--------------|
|
|
37
|
-
| Método | <!-- JWT? Session? OAuth2? --> |
|
|
38
|
-
| Expiração access token | <!-- Ex: 15min --> |
|
|
39
|
-
| Refresh token | <!-- Existe? Expiração? Rotação? --> |
|
|
40
|
-
| Hash de senha | <!-- bcrypt rounds? argon2? --> |
|
|
41
|
-
| Header | <!-- Authorization: Bearer {token} --> |
|
|
42
|
-
| Armazenamento (client) | <!-- httpOnly cookie? localStorage? --> |
|
|
43
|
-
|
|
44
|
-
### Fluxo de autenticação
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
<!-- Descrever o fluxo: login → token → refresh → logout -->
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## Autorização
|
|
51
|
-
|
|
52
|
-
### Modelo
|
|
53
|
-
|
|
54
|
-
| Aspecto | Decisão |
|
|
55
|
-
|---------|---------|
|
|
56
|
-
| Tipo | <!-- RBAC / ABAC / RBAC + ABAC --> |
|
|
57
|
-
| Onde é verificado | <!-- Middleware? Decorator? Service? --> |
|
|
58
|
-
| Granularidade | <!-- Por rota? Por recurso? Por campo? --> |
|
|
59
|
-
|
|
60
|
-
### Papéis
|
|
61
|
-
|
|
62
|
-
| Papel | Descrição | Herda de |
|
|
63
|
-
|-------|-----------|----------|
|
|
64
|
-
| | | <!-- Hierarquia: admin herda de user? --> |
|
|
65
|
-
|
|
66
|
-
### Matriz de Permissões
|
|
67
|
-
|
|
68
|
-
> Atualizada a cada feature via /merge-delta.
|
|
69
|
-
|
|
70
|
-
| Recurso | Ação | {{role_1}} | {{role_2}} | {{role_N}} |
|
|
71
|
-
|---------|------|------------|------------|------------|
|
|
72
|
-
| | criar | | | |
|
|
73
|
-
| | ler | | | |
|
|
74
|
-
| | editar | | | |
|
|
75
|
-
| | deletar | | | |
|
|
76
|
-
|
|
77
|
-
## CORS
|
|
78
|
-
|
|
79
|
-
| Aspecto | Configuração |
|
|
80
|
-
|---------|-------------|
|
|
81
|
-
| Allowed Origins | <!-- Configurável por ambiente --> |
|
|
82
|
-
| Allowed Methods | `GET, POST, PUT, PATCH, DELETE` |
|
|
83
|
-
| Allowed Headers | `Authorization, Content-Type` |
|
|
84
|
-
| Credentials | <!-- true/false --> |
|
|
85
|
-
| Max Age | <!-- Preflight cache em segundos --> |
|
|
86
|
-
|
|
87
|
-
## Rate Limiting
|
|
88
|
-
|
|
89
|
-
| Categoria | Limite | Janela | Resposta |
|
|
90
|
-
|-----------|--------|--------|----------|
|
|
91
|
-
| Login/Registro | <!-- Ex: 5 req --> | <!-- Ex: 15min --> | 429 + Retry-After |
|
|
92
|
-
| API autenticada | <!-- Ex: 100 req --> | <!-- Ex: 1min --> | 429 + Retry-After |
|
|
93
|
-
| API pública | <!-- Ex: 30 req --> | <!-- Ex: 1min --> | 429 + Retry-After |
|
|
94
|
-
| Upload | <!-- Ex: 10 req --> | <!-- Ex: 1h --> | 429 + Retry-After |
|
|
95
|
-
|
|
96
|
-
## LGPD / Privacidade
|
|
97
|
-
|
|
98
|
-
### Dados pessoais coletados
|
|
99
|
-
|
|
100
|
-
| Dado | Base legal | Finalidade | Retenção | Criptografado? |
|
|
101
|
-
|------|-----------|------------|----------|----------------|
|
|
102
|
-
| | <!-- Consentimento / Contrato / Legítimo interesse / Obrigação legal --> | | | |
|
|
103
|
-
|
|
104
|
-
### Direitos do titular
|
|
105
|
-
|
|
106
|
-
| Direito | Implementação | Endpoint/Fluxo |
|
|
107
|
-
|---------|--------------|----------------|
|
|
108
|
-
| Acesso aos dados | | <!-- Como o usuário acessa? --> |
|
|
109
|
-
| Correção | | |
|
|
110
|
-
| Exclusão (right to be forgotten) | | <!-- Soft delete? Hard delete? Anonimização? --> |
|
|
111
|
-
| Portabilidade | | <!-- Formato de exportação? --> |
|
|
112
|
-
| Revogação de consentimento | | |
|
|
113
|
-
|
|
114
|
-
## Auditoria
|
|
115
|
-
|
|
116
|
-
| O que é logado | Quando | Onde armazena | Retenção |
|
|
117
|
-
|----------------|--------|---------------|----------|
|
|
118
|
-
| Login/Logout | sempre | | |
|
|
119
|
-
| Alteração de dados sensíveis | sempre | | |
|
|
120
|
-
| Operações destrutivas (DELETE) | sempre | | |
|
|
121
|
-
| Falhas de autenticação | sempre | | |
|
|
122
|
-
| Mudanças de permissão | sempre | | |
|
|
123
|
-
|
|
124
|
-
## Proteção de Dados em Trânsito e Repouso
|
|
125
|
-
|
|
126
|
-
| Aspecto | Implementação |
|
|
127
|
-
|---------|--------------|
|
|
128
|
-
| TLS | <!-- Versão mínima? --> |
|
|
129
|
-
| Dados sensíveis em repouso | <!-- Criptografia? Quais campos? --> |
|
|
130
|
-
| Backup | <!-- Criptografado? Frequência? --> |
|
|
131
|
-
|
|
132
|
-
---
|
|
133
|
-
|
|
134
|
-
## Changelog
|
|
135
|
-
|
|
136
|
-
| Data | Feature | Tipo | Descrição |
|
|
137
|
-
|------|---------|------|-----------|
|
|
138
|
-
| | | | |
|
|
1
|
+
# Segurança
|
|
2
|
+
|
|
3
|
+
> Autenticação, autorização, CORS, rate limiting, LGPD, auditoria e proteção de dados.
|
|
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 §7.
|
|
13
|
+
ATUALIZAÇÃO: /merge-delta quando features adicionam permissões, dados pessoais ou políticas.
|
|
14
|
+
|
|
15
|
+
COMO GERAR:
|
|
16
|
+
1. Ler TRD §7 (Segurança) — autenticação, autorização, CORS, LGPD
|
|
17
|
+
2. Autenticação: método, expiração, hash, refresh strategy
|
|
18
|
+
3. Autorização: papéis e matriz de permissões (RBAC/ABAC)
|
|
19
|
+
4. LGPD: mapear TODOS dados pessoais com base legal
|
|
20
|
+
5. Auditoria: definir O QUE é logado, ONDE e POR QUANTO TEMPO
|
|
21
|
+
|
|
22
|
+
REGRAS:
|
|
23
|
+
- Matriz de permissões é DINÂMICA — cresce a cada feature (via merge-delta)
|
|
24
|
+
- Dados pessoais da LGPD precisam de base legal ESPECÍFICA
|
|
25
|
+
- Nunca armazenar senhas em texto plano (hash obrigatório)
|
|
26
|
+
- Secrets nunca no código — sempre variáveis de ambiente
|
|
27
|
+
- Rate limiting obrigatório em endpoints públicos (login, registro)
|
|
28
|
+
- Auditoria obrigatória para operações destrutivas (delete, update de dados sensíveis)
|
|
29
|
+
|
|
30
|
+
=============================================================================
|
|
31
|
+
-->
|
|
32
|
+
|
|
33
|
+
## Autenticação
|
|
34
|
+
|
|
35
|
+
| Aspecto | Implementação |
|
|
36
|
+
|---------|--------------|
|
|
37
|
+
| Método | <!-- JWT? Session? OAuth2? --> |
|
|
38
|
+
| Expiração access token | <!-- Ex: 15min --> |
|
|
39
|
+
| Refresh token | <!-- Existe? Expiração? Rotação? --> |
|
|
40
|
+
| Hash de senha | <!-- bcrypt rounds? argon2? --> |
|
|
41
|
+
| Header | <!-- Authorization: Bearer {token} --> |
|
|
42
|
+
| Armazenamento (client) | <!-- httpOnly cookie? localStorage? --> |
|
|
43
|
+
|
|
44
|
+
### Fluxo de autenticação
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
<!-- Descrever o fluxo: login → token → refresh → logout -->
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Autorização
|
|
51
|
+
|
|
52
|
+
### Modelo
|
|
53
|
+
|
|
54
|
+
| Aspecto | Decisão |
|
|
55
|
+
|---------|---------|
|
|
56
|
+
| Tipo | <!-- RBAC / ABAC / RBAC + ABAC --> |
|
|
57
|
+
| Onde é verificado | <!-- Middleware? Decorator? Service? --> |
|
|
58
|
+
| Granularidade | <!-- Por rota? Por recurso? Por campo? --> |
|
|
59
|
+
|
|
60
|
+
### Papéis
|
|
61
|
+
|
|
62
|
+
| Papel | Descrição | Herda de |
|
|
63
|
+
|-------|-----------|----------|
|
|
64
|
+
| | | <!-- Hierarquia: admin herda de user? --> |
|
|
65
|
+
|
|
66
|
+
### Matriz de Permissões
|
|
67
|
+
|
|
68
|
+
> Atualizada a cada feature via /merge-delta.
|
|
69
|
+
|
|
70
|
+
| Recurso | Ação | {{role_1}} | {{role_2}} | {{role_N}} |
|
|
71
|
+
|---------|------|------------|------------|------------|
|
|
72
|
+
| | criar | | | |
|
|
73
|
+
| | ler | | | |
|
|
74
|
+
| | editar | | | |
|
|
75
|
+
| | deletar | | | |
|
|
76
|
+
|
|
77
|
+
## CORS
|
|
78
|
+
|
|
79
|
+
| Aspecto | Configuração |
|
|
80
|
+
|---------|-------------|
|
|
81
|
+
| Allowed Origins | <!-- Configurável por ambiente --> |
|
|
82
|
+
| Allowed Methods | `GET, POST, PUT, PATCH, DELETE` |
|
|
83
|
+
| Allowed Headers | `Authorization, Content-Type` |
|
|
84
|
+
| Credentials | <!-- true/false --> |
|
|
85
|
+
| Max Age | <!-- Preflight cache em segundos --> |
|
|
86
|
+
|
|
87
|
+
## Rate Limiting
|
|
88
|
+
|
|
89
|
+
| Categoria | Limite | Janela | Resposta |
|
|
90
|
+
|-----------|--------|--------|----------|
|
|
91
|
+
| Login/Registro | <!-- Ex: 5 req --> | <!-- Ex: 15min --> | 429 + Retry-After |
|
|
92
|
+
| API autenticada | <!-- Ex: 100 req --> | <!-- Ex: 1min --> | 429 + Retry-After |
|
|
93
|
+
| API pública | <!-- Ex: 30 req --> | <!-- Ex: 1min --> | 429 + Retry-After |
|
|
94
|
+
| Upload | <!-- Ex: 10 req --> | <!-- Ex: 1h --> | 429 + Retry-After |
|
|
95
|
+
|
|
96
|
+
## LGPD / Privacidade
|
|
97
|
+
|
|
98
|
+
### Dados pessoais coletados
|
|
99
|
+
|
|
100
|
+
| Dado | Base legal | Finalidade | Retenção | Criptografado? |
|
|
101
|
+
|------|-----------|------------|----------|----------------|
|
|
102
|
+
| | <!-- Consentimento / Contrato / Legítimo interesse / Obrigação legal --> | | | |
|
|
103
|
+
|
|
104
|
+
### Direitos do titular
|
|
105
|
+
|
|
106
|
+
| Direito | Implementação | Endpoint/Fluxo |
|
|
107
|
+
|---------|--------------|----------------|
|
|
108
|
+
| Acesso aos dados | | <!-- Como o usuário acessa? --> |
|
|
109
|
+
| Correção | | |
|
|
110
|
+
| Exclusão (right to be forgotten) | | <!-- Soft delete? Hard delete? Anonimização? --> |
|
|
111
|
+
| Portabilidade | | <!-- Formato de exportação? --> |
|
|
112
|
+
| Revogação de consentimento | | |
|
|
113
|
+
|
|
114
|
+
## Auditoria
|
|
115
|
+
|
|
116
|
+
| O que é logado | Quando | Onde armazena | Retenção |
|
|
117
|
+
|----------------|--------|---------------|----------|
|
|
118
|
+
| Login/Logout | sempre | | |
|
|
119
|
+
| Alteração de dados sensíveis | sempre | | |
|
|
120
|
+
| Operações destrutivas (DELETE) | sempre | | |
|
|
121
|
+
| Falhas de autenticação | sempre | | |
|
|
122
|
+
| Mudanças de permissão | sempre | | |
|
|
123
|
+
|
|
124
|
+
## Proteção de Dados em Trânsito e Repouso
|
|
125
|
+
|
|
126
|
+
| Aspecto | Implementação |
|
|
127
|
+
|---------|--------------|
|
|
128
|
+
| TLS | <!-- Versão mínima? --> |
|
|
129
|
+
| Dados sensíveis em repouso | <!-- Criptografia? Quais campos? --> |
|
|
130
|
+
| Backup | <!-- Criptografado? Frequência? --> |
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Changelog
|
|
135
|
+
|
|
136
|
+
| Data | Feature | Tipo | Descrição |
|
|
137
|
+
|------|---------|------|-----------|
|
|
138
|
+
| | | | |
|
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
# Stack Tecnológica
|
|
2
|
-
|
|
3
|
-
> Tecnologias escolhidas, versões fixadas, e alternativas descartadas com justificativa.
|
|
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 §2.
|
|
13
|
-
ATUALIZAÇÃO: /merge-delta quando features introduzem novas tecnologias ou mudanças de stack (raro — deve gerar ADR).
|
|
14
|
-
|
|
15
|
-
COMO GERAR:
|
|
16
|
-
1. Ler TRD §2 (Stack e Tecnologias) — todas decisões de tech
|
|
17
|
-
2. Preencher TODAS as camadas, mesmo que "a definir"
|
|
18
|
-
3. Para cada tecnologia: versão EXATA (não "latest")
|
|
19
|
-
4. Justificativa deve ser técnica, não "é popular"
|
|
20
|
-
5. Alternativas descartadas: documentar POR QUE foram rejeitadas (evita rediscussão)
|
|
21
|
-
|
|
22
|
-
REGRAS:
|
|
23
|
-
- Versões devem ser fixadas (ex: "18.3.1", não "^18.0.0")
|
|
24
|
-
- Cada biblioteca/pacote precisa de justificativa (evita bloat)
|
|
25
|
-
- Alternativas descartadas previnem que o time rediscuta decisões já tomadas
|
|
26
|
-
- Mudanças de stack DEVEM gerar ADR em ADRs.md
|
|
27
|
-
- Camadas são dinâmicas — adicionar conforme necessidade (mobile, infra, etc.)
|
|
28
|
-
|
|
29
|
-
=============================================================================
|
|
30
|
-
-->
|
|
31
|
-
|
|
32
|
-
## Stack Principal
|
|
33
|
-
|
|
34
|
-
| Camada | Tecnologia | Versão | Justificativa |
|
|
35
|
-
|--------|-----------|--------|---------------|
|
|
36
|
-
| Frontend | | | |
|
|
37
|
-
| Backend | | | |
|
|
38
|
-
| Banco de Dados | | | |
|
|
39
|
-
| ORM/Query Builder | | | |
|
|
40
|
-
| Autenticação | | | |
|
|
41
|
-
| Testes | | | |
|
|
42
|
-
| CI/CD | | | |
|
|
43
|
-
|
|
44
|
-
<!-- Adicionar camadas conforme necessidade: Mobile, Cache, Fila, Monitoramento, etc. -->
|
|
45
|
-
|
|
46
|
-
## Bibliotecas e Dependências
|
|
47
|
-
|
|
48
|
-
<!-- Repetir seção para cada camada que tenha dependências relevantes -->
|
|
49
|
-
|
|
50
|
-
### {{Camada}}
|
|
51
|
-
|
|
52
|
-
| Pacote | Versão | Para quê | Alternativa descartada |
|
|
53
|
-
|--------|--------|----------|----------------------|
|
|
54
|
-
| | | | |
|
|
55
|
-
|
|
56
|
-
## Alternativas Descartadas
|
|
57
|
-
|
|
58
|
-
> Decisões já tomadas. Se alguém perguntar "por que não usamos X?", a resposta está aqui.
|
|
59
|
-
|
|
60
|
-
| Tecnologia escolhida | Alternativa considerada | Por que descartamos | Ref ADR |
|
|
61
|
-
|----------------------|------------------------|---------------------|---------|
|
|
62
|
-
| | | | |
|
|
63
|
-
|
|
64
|
-
## Convenções de Versionamento
|
|
65
|
-
|
|
66
|
-
| Aspecto | Convenção |
|
|
67
|
-
|---------|-----------|
|
|
68
|
-
| Versionamento | <!-- Semver? Pinned? --> |
|
|
69
|
-
| Lock files | <!-- package-lock.json? yarn.lock? --> |
|
|
70
|
-
| Atualização | <!-- Dependabot? Manual? Periodicidade? --> |
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
## Changelog
|
|
75
|
-
|
|
76
|
-
| Data | Feature | Tipo | Descrição |
|
|
77
|
-
|------|---------|------|-----------|
|
|
78
|
-
| | | | |
|
|
1
|
+
# Stack Tecnológica
|
|
2
|
+
|
|
3
|
+
> Tecnologias escolhidas, versões fixadas, e alternativas descartadas com justificativa.
|
|
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 §2.
|
|
13
|
+
ATUALIZAÇÃO: /merge-delta quando features introduzem novas tecnologias ou mudanças de stack (raro — deve gerar ADR).
|
|
14
|
+
|
|
15
|
+
COMO GERAR:
|
|
16
|
+
1. Ler TRD §2 (Stack e Tecnologias) — todas decisões de tech
|
|
17
|
+
2. Preencher TODAS as camadas, mesmo que "a definir"
|
|
18
|
+
3. Para cada tecnologia: versão EXATA (não "latest")
|
|
19
|
+
4. Justificativa deve ser técnica, não "é popular"
|
|
20
|
+
5. Alternativas descartadas: documentar POR QUE foram rejeitadas (evita rediscussão)
|
|
21
|
+
|
|
22
|
+
REGRAS:
|
|
23
|
+
- Versões devem ser fixadas (ex: "18.3.1", não "^18.0.0")
|
|
24
|
+
- Cada biblioteca/pacote precisa de justificativa (evita bloat)
|
|
25
|
+
- Alternativas descartadas previnem que o time rediscuta decisões já tomadas
|
|
26
|
+
- Mudanças de stack DEVEM gerar ADR em ADRs.md
|
|
27
|
+
- Camadas são dinâmicas — adicionar conforme necessidade (mobile, infra, etc.)
|
|
28
|
+
|
|
29
|
+
=============================================================================
|
|
30
|
+
-->
|
|
31
|
+
|
|
32
|
+
## Stack Principal
|
|
33
|
+
|
|
34
|
+
| Camada | Tecnologia | Versão | Justificativa |
|
|
35
|
+
|--------|-----------|--------|---------------|
|
|
36
|
+
| Frontend | | | |
|
|
37
|
+
| Backend | | | |
|
|
38
|
+
| Banco de Dados | | | |
|
|
39
|
+
| ORM/Query Builder | | | |
|
|
40
|
+
| Autenticação | | | |
|
|
41
|
+
| Testes | | | |
|
|
42
|
+
| CI/CD | | | |
|
|
43
|
+
|
|
44
|
+
<!-- Adicionar camadas conforme necessidade: Mobile, Cache, Fila, Monitoramento, etc. -->
|
|
45
|
+
|
|
46
|
+
## Bibliotecas e Dependências
|
|
47
|
+
|
|
48
|
+
<!-- Repetir seção para cada camada que tenha dependências relevantes -->
|
|
49
|
+
|
|
50
|
+
### {{Camada}}
|
|
51
|
+
|
|
52
|
+
| Pacote | Versão | Para quê | Alternativa descartada |
|
|
53
|
+
|--------|--------|----------|----------------------|
|
|
54
|
+
| | | | |
|
|
55
|
+
|
|
56
|
+
## Alternativas Descartadas
|
|
57
|
+
|
|
58
|
+
> Decisões já tomadas. Se alguém perguntar "por que não usamos X?", a resposta está aqui.
|
|
59
|
+
|
|
60
|
+
| Tecnologia escolhida | Alternativa considerada | Por que descartamos | Ref ADR |
|
|
61
|
+
|----------------------|------------------------|---------------------|---------|
|
|
62
|
+
| | | | |
|
|
63
|
+
|
|
64
|
+
## Convenções de Versionamento
|
|
65
|
+
|
|
66
|
+
| Aspecto | Convenção |
|
|
67
|
+
|---------|-----------|
|
|
68
|
+
| Versionamento | <!-- Semver? Pinned? --> |
|
|
69
|
+
| Lock files | <!-- package-lock.json? yarn.lock? --> |
|
|
70
|
+
| Atualização | <!-- Dependabot? Manual? Periodicidade? --> |
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Changelog
|
|
75
|
+
|
|
76
|
+
| Data | Feature | Tipo | Descrição |
|
|
77
|
+
|------|---------|------|-----------|
|
|
78
|
+
| | | | |
|