@dewtech/dare-cli 2.10.0 → 2.12.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 +19 -4
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +35 -7
- package/dist/commands/init.js.map +1 -1
- package/dist/core/types/project.d.ts +3 -0
- package/dist/core/types/project.d.ts.map +1 -1
- package/dist/utils/project-generator.d.ts +2 -0
- package/dist/utils/project-generator.d.ts.map +1 -1
- package/dist/utils/project-generator.js +123 -29
- package/dist/utils/project-generator.js.map +1 -1
- package/dist/utils/stack-bootstrap.d.ts +5 -0
- package/dist/utils/stack-bootstrap.d.ts.map +1 -1
- package/dist/utils/stack-bootstrap.js +19 -12
- package/dist/utils/stack-bootstrap.js.map +1 -1
- package/package.json +1 -1
- package/templates/ide/antigravity/templates/BLUEPRINT-template.md +193 -53
- package/templates/ide/antigravity/templates/DESIGN-template.md +129 -34
- package/templates/ide/antigravity/templates/TASK-SPEC-template.md +100 -43
- package/templates/ide/claude/.claude/commands/dare-blueprint.md +87 -81
- package/templates/ide/claude/.claude/commands/dare-design.md +45 -31
- package/templates/ide/claude/.claude/commands/dare-execute.md +131 -52
- package/templates/ide/claude/.claude/commands/dare-security.md +232 -0
- package/templates/ide/claude/CLAUDE.md +38 -10
- package/templates/ide/claude/templates/BLUEPRINT-template.md +193 -53
- package/templates/ide/claude/templates/DESIGN-template.md +129 -34
- package/templates/ide/claude/templates/TASK-SPEC-template.md +100 -43
- package/templates/ide/cursor/.cursor/commands/generate-blueprint.md +51 -21
- package/templates/ide/cursor/.cursor/commands/generate-design.md +35 -18
- package/templates/ide/cursor/.cursor/rules/skill-security.mdc +245 -57
- package/templates/ide/cursor/templates/BLUEPRINT-template.md +193 -53
- package/templates/ide/cursor/templates/DESIGN-template.md +129 -34
- package/templates/ide/cursor/templates/TASK-SPEC-template.md +100 -43
|
@@ -1,18 +1,35 @@
|
|
|
1
|
-
# Comando: /generate-design
|
|
2
|
-
|
|
3
|
-
## Descrição
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
## Instruções para o Cursor Composer
|
|
7
|
-
|
|
8
|
-
1. **Leia a
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
- **
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
# Comando: /generate-design
|
|
2
|
+
|
|
3
|
+
## Descrição
|
|
4
|
+
Inicia o Método DARE (fase Design) gerando `DARE/DESIGN.md` a partir de uma ideia inicial.
|
|
5
|
+
|
|
6
|
+
## Instruções para o Cursor Composer
|
|
7
|
+
|
|
8
|
+
1. **Leia o contexto:** `package.json` / `Cargo.toml` / `composer.json` / `go.mod` / `requirements.txt` para identificar a stack atual. Leia `.cursorrules` para entender padrões do projeto. Se `DARE/DESIGN.md` já existir, não sobrescreva sem aprovação explícita.
|
|
9
|
+
|
|
10
|
+
2. **Leia o template:** `templates/DESIGN-template.md` — siga a estrutura fielmente.
|
|
11
|
+
|
|
12
|
+
3. **Gere `DARE/DESIGN.md` com as seções obrigatórias:**
|
|
13
|
+
|
|
14
|
+
- **Descrição** — 3 a 5 frases: o que é, qual problema resolve, quem usa
|
|
15
|
+
- **Objetivos e Métricas de Sucesso** — tabela numerada (O-01, O-02…) com métrica verificável e meta numérica
|
|
16
|
+
- **Stakeholders** — tabela: papel, time, interesse principal
|
|
17
|
+
- **Requisitos Funcionais** — tabela numerada (RF-01, RF-02…) com prioridade MUST/SHOULD/COULD e critério de aceite
|
|
18
|
+
- **Requisitos Não-Funcionais** — tabela numerada (RNF-01…): performance, disponibilidade, segurança, observabilidade, manutenibilidade
|
|
19
|
+
- **Requisitos de Segurança** — tabela numerada (RS-01…). **Sempre inclua:**
|
|
20
|
+
- RS-01: validação de entrada no servidor (OWASP A03)
|
|
21
|
+
- RS-02: hash de senhas / proteção de dados sensíveis (OWASP A02)
|
|
22
|
+
- RS-03: controle de acesso por recurso (OWASP A01)
|
|
23
|
+
- RS-04: auditoria de dependências sem CVE HIGH/CRITICAL (OWASP A06)
|
|
24
|
+
- RS-05: secrets via variáveis de ambiente — nunca em código
|
|
25
|
+
- Requisitos específicos do domínio do projeto
|
|
26
|
+
- **Stack Técnica** — tabela por camada com versões fixas
|
|
27
|
+
- **Integrações Externas** — tabela: sistema, tipo, protocolo, direção, dados, responsável
|
|
28
|
+
- **Restrições** — prazo, orçamento, técnicas, compliance
|
|
29
|
+
- **Fora do Escopo (v1)** — lista explícita
|
|
30
|
+
- **Riscos e Mitigações** — tabela com probabilidade, impacto e mitigação concreta
|
|
31
|
+
- **Checklist de Aprovação** — checkboxes para revisão humana
|
|
32
|
+
|
|
33
|
+
4. **Qualidade:** O DESIGN.md deve responder claramente: O QUÊ, POR QUÊ, PARA QUEM, O QUE NÃO e QUAIS RISCOS. Use "[A definir]" para informações não disponíveis, mas nunca omita seções.
|
|
34
|
+
|
|
35
|
+
5. **Salve** `DARE/DESIGN.md` e informe: _"DESIGN.md gerado. Revise as seções, especialmente os Requisitos de Segurança (RS-*) e Riscos. Quando aprovado, execute `/generate-blueprint`."_
|
|
@@ -1,57 +1,245 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Diretrizes de Segurança
|
|
3
|
-
globs: *.md, *.php, *.py, *.go, *.vue, *.js, *.ts
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
- **
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
|
|
24
|
-
### Fase
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
1
|
+
---
|
|
2
|
+
description: Diretrizes de Segurança — OWASP Top 10, Supply Chain, Segredos e Dependências Vulneráveis para todas as fases do DARE
|
|
3
|
+
globs: *.md, *.php, *.py, *.go, *.vue, *.js, *.ts, *.rs, *.toml, *.yaml, *.yml
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Diretrizes de Segurança DARE
|
|
7
|
+
|
|
8
|
+
Você é um Especialista em AppSec. Garanta que **Design → Blueprint → Tasks → Execução** sigam rigorosamente as práticas a seguir.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Aplicação nas Fases do DARE
|
|
13
|
+
|
|
14
|
+
### Fase 1 — Design (`/generate-design` / `/dare-design`)
|
|
15
|
+
|
|
16
|
+
- **Requisitos de segurança obrigatórios** (seção RS-*):
|
|
17
|
+
- RS-01: validação de entrada (OWASP A03)
|
|
18
|
+
- RS-02: hash de senhas / proteção de dados sensíveis (OWASP A02)
|
|
19
|
+
- RS-03: controle de acesso por recurso (OWASP A01)
|
|
20
|
+
- RS-04: auditoria de dependências sem CVE HIGH/CRITICAL (OWASP A06)
|
|
21
|
+
- RS-05: secrets via variáveis de ambiente — nunca em código
|
|
22
|
+
- Identifique vetores de ataque na ideia inicial e adicione mitigações em **Riscos**
|
|
23
|
+
|
|
24
|
+
### Fase 2 — Architect (`/generate-blueprint` / `/dare-blueprint`)
|
|
25
|
+
|
|
26
|
+
- Endpoints da API: inclua coluna `Auth` (JWT/apiKey/público) e middleware de rate limiting
|
|
27
|
+
- Modelo de dados: marque campos sensíveis (PII, tokens, hashes) e como são protegidos
|
|
28
|
+
- Fases do plano: inclua **Fase N-1 = Auditoria de Segurança e Dependências** com critério de DONE explícito
|
|
29
|
+
- Validation gates por stack devem incluir o comando de auditoria de dependências
|
|
30
|
+
|
|
31
|
+
### Fase 3 — Tasks (`/generate-tasks`)
|
|
32
|
+
|
|
33
|
+
- Toda task que adiciona dependência externa → validation gate inclui `npm audit` / `cargo audit` / `pip-audit` / `composer audit`
|
|
34
|
+
- Crie task dedicada para: headers de segurança HTTP, rate limiting, scan de secrets
|
|
35
|
+
- Seção "Considerações de Segurança" obrigatória em cada `EXECUTION/task-*.md`
|
|
36
|
+
|
|
37
|
+
### Fase 4 — Execute (`/execute-task`)
|
|
38
|
+
|
|
39
|
+
Aplique as proteções abaixo ao implementar qualquer código.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## OWASP Top 10 — Implementação
|
|
44
|
+
|
|
45
|
+
### A01 — Broken Access Control
|
|
46
|
+
|
|
47
|
+
- Verifique permissão no **recurso**, não só na rota: `user.can('update', post)` / `authorize('update', $post)` / `check_permission(user, resource)`
|
|
48
|
+
- Princípio do menor privilégio: tokens têm escopos mínimos necessários
|
|
49
|
+
- Nunca exponha IDs sequenciais em URLs para recursos privados — use UUID ou ULID
|
|
50
|
+
- Multi-tenant: **sempre** filtre por `tenant_id` / `org_id` em toda query
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
// ✅ certo — verifica ownership antes de retornar
|
|
54
|
+
const post = await db.post.findFirst({ where: { id, authorId: session.userId } });
|
|
55
|
+
if (!post) throw new ForbiddenError();
|
|
56
|
+
|
|
57
|
+
// ❌ errado — qualquer usuário autenticado acessa qualquer post
|
|
58
|
+
const post = await db.post.findUnique({ where: { id } });
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### A02 — Cryptographic Failures
|
|
62
|
+
|
|
63
|
+
- Senhas: **Argon2id** (preferido) ou Bcrypt (min cost 12) — nunca MD5/SHA1/SHA256 para senhas
|
|
64
|
+
- Dados sensíveis em repouso: criptografar PII com AES-256-GCM
|
|
65
|
+
- Dados em trânsito: HTTPS obrigatório; HSTS header em produção
|
|
66
|
+
- Nunca logue senha, token, chave de API, número de cartão, CPF completo
|
|
67
|
+
- JWT: assine com RS256 (chave assimétrica) para tokens públicos; HS256 + segredo forte (≥ 256 bits) para internos
|
|
68
|
+
|
|
69
|
+
```rust
|
|
70
|
+
// ✅ Rust — Argon2 via argon2 crate
|
|
71
|
+
use argon2::{Argon2, PasswordHash, PasswordHasher, PasswordVerifier};
|
|
72
|
+
let hash = Argon2::default().hash_password(password.as_bytes(), &salt)?;
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### A03 — Injection
|
|
76
|
+
|
|
77
|
+
**SQL Injection:**
|
|
78
|
+
```python
|
|
79
|
+
# ✅ SQLAlchemy — parametrizado
|
|
80
|
+
result = db.execute(select(User).where(User.email == email))
|
|
81
|
+
|
|
82
|
+
# ❌ nunca
|
|
83
|
+
db.execute(f"SELECT * FROM users WHERE email = '{email}'")
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Command Injection:**
|
|
87
|
+
```go
|
|
88
|
+
// ✅ Go — lista de args, não shell string
|
|
89
|
+
cmd := exec.Command("convert", inputFile, outputFile)
|
|
90
|
+
|
|
91
|
+
// ❌ nunca
|
|
92
|
+
exec.Command("sh", "-c", "convert "+userInput)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**XSS:** escape de saída no frontend; `Content-Security-Policy` no backend; evite `innerHTML` / `dangerouslySetInnerHTML` com dados do usuário.
|
|
96
|
+
|
|
97
|
+
**Prompt Injection (IA):** se o projeto processa entradas de usuários em prompts LLM:
|
|
98
|
+
- Separe instrução do sistema e dados do usuário por delimitadores claros
|
|
99
|
+
- Valide e sanitize a entrada antes de inserir no prompt
|
|
100
|
+
- Nunca confie em output do LLM como código a ser executado sem sandboxing
|
|
101
|
+
|
|
102
|
+
### A04 — Insecure Design
|
|
103
|
+
|
|
104
|
+
- Valide **no servidor** sempre, mesmo que o frontend já valide
|
|
105
|
+
- Allowlists > blocklists para validação de campos, tipos de arquivo, domínios
|
|
106
|
+
- Implemente rate limiting antes de qualquer lógica de negócio em endpoints públicos
|
|
107
|
+
|
|
108
|
+
### A05 — Security Misconfiguration
|
|
109
|
+
|
|
110
|
+
- Stack traces e erros detalhados: **apenas em desenvolvimento** — produção retorna mensagem genérica
|
|
111
|
+
- Headers de segurança obrigatórios em produção:
|
|
112
|
+
```
|
|
113
|
+
Strict-Transport-Security: max-age=31536000; includeSubDomains
|
|
114
|
+
X-Frame-Options: DENY
|
|
115
|
+
X-Content-Type-Options: nosniff
|
|
116
|
+
Content-Security-Policy: default-src 'self'
|
|
117
|
+
Referrer-Policy: strict-origin-when-cross-origin
|
|
118
|
+
Permissions-Policy: camera=(), microphone=(), geolocation=()
|
|
119
|
+
```
|
|
120
|
+
- CORS: nunca `Access-Control-Allow-Origin: *` para endpoints autenticados
|
|
121
|
+
- Desabilite métodos HTTP desnecessários (TRACE, OPTIONS em APIs simples)
|
|
122
|
+
|
|
123
|
+
### A06 — Vulnerable and Outdated Components ← **crítico para Ralph Loop**
|
|
124
|
+
|
|
125
|
+
**Comandos de auditoria por stack:**
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
# Node.js / npm — rodar antes de todo commit com novas deps
|
|
129
|
+
npm audit --audit-level=high
|
|
130
|
+
npm audit fix # corrige automaticamente quando possível
|
|
131
|
+
|
|
132
|
+
# Rust / Cargo
|
|
133
|
+
cargo install cargo-audit # uma vez
|
|
134
|
+
cargo audit # detecta CVEs no RustSec Advisory DB
|
|
135
|
+
cargo update # bumpa versões compatíveis
|
|
136
|
+
|
|
137
|
+
# Python
|
|
138
|
+
pip install pip-audit
|
|
139
|
+
pip-audit # CVEs via OSV + PyPI
|
|
140
|
+
pip-audit --fix # auto-fix quando possível
|
|
141
|
+
|
|
142
|
+
# PHP / Composer
|
|
143
|
+
composer audit # nativo desde Composer 2.4
|
|
144
|
+
composer update --with-all-dependencies [pacote] # fix pontual
|
|
145
|
+
|
|
146
|
+
# Go
|
|
147
|
+
go list -json -m all | nancy sleuth # ou govulncheck
|
|
148
|
+
govulncheck ./... # ferramenta oficial Google
|
|
149
|
+
|
|
150
|
+
# Docker images
|
|
151
|
+
docker scout cves [imagem] # se Docker Scout disponível
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Critério inegociável:** nenhuma dependência com CVE de nível **HIGH** ou **CRITICAL** pode entrar em produção sem justificativa documentada e plano de upgrade.
|
|
155
|
+
|
|
156
|
+
### A07 — Authentication Failures
|
|
157
|
+
|
|
158
|
+
- Rate limiting no endpoint de login: máx 5 tentativas / 15 min por IP + por usuário
|
|
159
|
+
- Tokens JWT: `exp` máx 15 min para access token; refresh token com rotação
|
|
160
|
+
- Logout: invalide refresh token no servidor (não confie só no lado cliente)
|
|
161
|
+
- Senhas: mínimo 12 caracteres; bloquear senhas da lista HaveIBeenPwned
|
|
162
|
+
- MFA: ofereça TOTP (RFC 6238) para contas com acesso a dados sensíveis
|
|
163
|
+
|
|
164
|
+
### A08 — Software and Data Integrity
|
|
165
|
+
|
|
166
|
+
- Valide assinatura / checksum de artefatos externos antes de usar
|
|
167
|
+
- Nunca confie em dados enviados pelo cliente para decisões de autorização
|
|
168
|
+
- CI/CD: pins de versão em actions (`actions/checkout@v4` não `@main`)
|
|
169
|
+
- Lockfiles (`package-lock.json`, `Cargo.lock`, `poetry.lock`) devem ser commitados
|
|
170
|
+
|
|
171
|
+
### A09 — Security Logging and Monitoring
|
|
172
|
+
|
|
173
|
+
Logue (estruturado JSON, sem dados sensíveis):
|
|
174
|
+
- Autenticação: login OK/FAIL, logout, refresh, MFA challenge
|
|
175
|
+
- Autorização: acesso negado (403) com recurso e userId
|
|
176
|
+
- Erros 5xx em produção com trace-id (sem stack trace completo)
|
|
177
|
+
- Operações destrutivas: delete, disable, role change
|
|
178
|
+
|
|
179
|
+
Nunca logue: senhas, tokens, chaves de API, números de cartão, CPF/SSN completo.
|
|
180
|
+
|
|
181
|
+
### A10 — SSRF
|
|
182
|
+
|
|
183
|
+
- Se a aplicação faz requisições para URLs fornecidas pelo usuário:
|
|
184
|
+
- Valide contra allowlist de domínios
|
|
185
|
+
- Bloqueie IPs privados (`127.x`, `10.x`, `172.16-31.x`, `192.168.x`, `169.254.x`)
|
|
186
|
+
- Bloqueie acesso a metadados de cloud (`169.254.169.254`)
|
|
187
|
+
- Use timeout agressivo (máx 5s) e sem redirects automáticos
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Segredos e Supply Chain
|
|
192
|
+
|
|
193
|
+
### Nunca em código
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
# Padrões proibidos em commits — configure pre-commit hook ou git-secrets:
|
|
197
|
+
password = "..."
|
|
198
|
+
api_key = "..."
|
|
199
|
+
secret_key = "..."
|
|
200
|
+
AWS_SECRET_ACCESS_KEY = "..."
|
|
201
|
+
DATABASE_URL = "postgres://user:password@..."
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Gestão de segredos
|
|
205
|
+
|
|
206
|
+
- Desenvolvimento: arquivo `.env` (no `.gitignore`) com `.env.example` sem valores reais
|
|
207
|
+
- CI/CD: variáveis de ambiente ou secrets do pipeline (GitHub Actions Secrets, etc.)
|
|
208
|
+
- Produção: vault (HashiCorp Vault, AWS Secrets Manager, GCP Secret Manager)
|
|
209
|
+
- Rotação: tokens de serviço rotacionados a cada 90 dias
|
|
210
|
+
|
|
211
|
+
### Verificação pre-commit (recomendado)
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
# Instalar detect-secrets
|
|
215
|
+
pip install detect-secrets
|
|
216
|
+
detect-secrets scan > .secrets.baseline
|
|
217
|
+
detect-secrets audit .secrets.baseline
|
|
218
|
+
|
|
219
|
+
# Ou git-secrets
|
|
220
|
+
git secrets --install
|
|
221
|
+
git secrets --register-aws
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Validation Gates de Segurança no Ralph Loop
|
|
227
|
+
|
|
228
|
+
Adicione ao ciclo de cada task que mexe em dependências ou configuração:
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
# 1. Auditoria de dependências (obrigatório se houve mudança em deps)
|
|
232
|
+
npm audit --audit-level=high # Node
|
|
233
|
+
cargo audit # Rust
|
|
234
|
+
pip-audit # Python
|
|
235
|
+
composer audit # PHP
|
|
236
|
+
|
|
237
|
+
# 2. Scan de secrets (obrigatório em tasks de config/infra/CI)
|
|
238
|
+
detect-secrets scan --baseline .secrets.baseline
|
|
239
|
+
|
|
240
|
+
# 3. Headers de segurança (para tasks de configuração de servidor)
|
|
241
|
+
# Verificar manualmente ou com curl:
|
|
242
|
+
curl -I https://staging.example.com | grep -E "Strict-Transport|X-Frame|X-Content|Content-Security"
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
> **Gate obrigatório:** CVE HIGH/CRITICAL nas dependências = task **FAILED** até corrigi-las.
|
|
@@ -1,53 +1,193 @@
|
|
|
1
|
-
# BLUEPRINT
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
[
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
1
|
+
# BLUEPRINT: [Nome do Projeto]
|
|
2
|
+
|
|
3
|
+
> **Gerado a partir de:** `DARE/DESIGN.md` v[X.Y]
|
|
4
|
+
> **Data:** YYYY-MM-DD | **Status:** DRAFT → APROVADO
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. VISÃO GERAL DA ARQUITETURA
|
|
9
|
+
|
|
10
|
+
[Descrição da arquitetura: Monolito modular / Microserviços / Hexagonal / Clean Architecture]
|
|
11
|
+
|
|
12
|
+
```mermaid
|
|
13
|
+
graph TD
|
|
14
|
+
A[Cliente] --> B[API Gateway / BFF]
|
|
15
|
+
B --> C[Auth Service]
|
|
16
|
+
B --> D[Core Service]
|
|
17
|
+
D --> E[(PostgreSQL)]
|
|
18
|
+
D --> F[(Redis)]
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Decisões arquiteturais principais:**
|
|
22
|
+
|
|
23
|
+
| Decisão | Escolha | Justificativa |
|
|
24
|
+
|---------|---------|---------------|
|
|
25
|
+
| Padrão de módulos | [ex: Hexagonal] | [motivo] |
|
|
26
|
+
| Comunicação inter-serviços | [ex: REST síncrono] | [motivo] |
|
|
27
|
+
| Autenticação | [ex: JWT stateless] | [motivo] |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 2. STACK TÉCNICA DEFINIDA
|
|
32
|
+
|
|
33
|
+
| Camada | Tecnologia | Versão | Papel |
|
|
34
|
+
|--------|-----------|--------|-------|
|
|
35
|
+
| Linguagem | | | |
|
|
36
|
+
| Framework | | | |
|
|
37
|
+
| Banco principal | | | |
|
|
38
|
+
| Cache / filas | | | |
|
|
39
|
+
| Frontend | | | |
|
|
40
|
+
| Container | Docker | latest | Dev + CI |
|
|
41
|
+
| Observabilidade | | | Logs, métricas, traces |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 3. ESTRUTURA DE PASTAS E ARQUIVOS
|
|
46
|
+
|
|
47
|
+
```text
|
|
48
|
+
[nome-do-projeto]/
|
|
49
|
+
├── [diretório principal]/
|
|
50
|
+
│ ├── [módulo 1]/
|
|
51
|
+
│ └── [módulo 2]/
|
|
52
|
+
├── DARE/
|
|
53
|
+
│ ├── DESIGN.md
|
|
54
|
+
│ ├── BLUEPRINT.md
|
|
55
|
+
│ ├── TASKS.md
|
|
56
|
+
│ ├── dare-dag.yaml
|
|
57
|
+
│ └── EXECUTION/
|
|
58
|
+
├── Dockerfile
|
|
59
|
+
├── docker-compose.yml
|
|
60
|
+
└── [arquivo de configuração principal]
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
> **Constraints de workspace (Rust):** se Cargo workspace, NÃO definir `[build] target` global no `.cargo/config.toml` (quebra crates WASM + native). Cada crate declara suas próprias features Leptos.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 4. MODELO DE DADOS
|
|
68
|
+
|
|
69
|
+
### Entidades principais
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
[Entidade 1]
|
|
73
|
+
- id: UUID (PK)
|
|
74
|
+
- [campo]: [tipo] [restrições]
|
|
75
|
+
- created_at, updated_at
|
|
76
|
+
|
|
77
|
+
[Entidade 2]
|
|
78
|
+
- id: UUID (PK)
|
|
79
|
+
- [entidade_1_id]: FK → Entidade1
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Relacionamentos
|
|
83
|
+
|
|
84
|
+
| De | Para | Cardinalidade | Via |
|
|
85
|
+
|----|------|---------------|-----|
|
|
86
|
+
| [Entidade 1] | [Entidade 2] | 1:N | FK |
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 5. CONTRATOS DE API
|
|
91
|
+
|
|
92
|
+
| Método | Endpoint | Auth | Request Body | Response | Status codes |
|
|
93
|
+
|--------|----------|------|-------------|----------|--------------|
|
|
94
|
+
| POST | `/api/v1/[recurso]` | Não | `{campo1, campo2}` | `{id, ...}` | 201, 400, 422 |
|
|
95
|
+
| GET | `/api/v1/[recurso]` | JWT | — | `[{id, ...}]` | 200, 401 |
|
|
96
|
+
| GET | `/api/v1/[recurso]/:id` | JWT | — | `{id, ...}` | 200, 401, 404 |
|
|
97
|
+
| PUT | `/api/v1/[recurso]/:id` | JWT + Owner | `{campos}` | `{id, ...}` | 200, 401, 403, 404 |
|
|
98
|
+
| DELETE | `/api/v1/[recurso]/:id` | JWT + Admin | — | `{}` | 204, 401, 403, 404 |
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 6. PLANO DE EXECUÇÃO (FASES)
|
|
103
|
+
|
|
104
|
+
### Fase 1: Containerização e Setup ← **SEMPRE PRIMEIRA**
|
|
105
|
+
**Critério de DONE:** `docker compose up -d` sobe sem erros; healthcheck `/health` retorna 200.
|
|
106
|
+
- Dockerfile multi-stage
|
|
107
|
+
- docker-compose.yml com todos os serviços
|
|
108
|
+
- Variáveis de ambiente via `.env.example`
|
|
109
|
+
|
|
110
|
+
### Fase 2: Banco de Dados e Migrations
|
|
111
|
+
**Critério de DONE:** migrations rodando; schema validado; seeds de desenvolvimento funcionando.
|
|
112
|
+
- Migrations / schema inicial
|
|
113
|
+
- Seeds de desenvolvimento
|
|
114
|
+
- Índices para queries críticas
|
|
115
|
+
|
|
116
|
+
### Fase 3: Autenticação e Autorização
|
|
117
|
+
**Critério de DONE:** login retorna JWT; endpoint protegido rejeita token inválido com 401; acesso sem permissão retorna 403.
|
|
118
|
+
- Registro, login, refresh, logout
|
|
119
|
+
- Middleware de autenticação
|
|
120
|
+
- Sistema de permissões (RBAC/ACL)
|
|
121
|
+
|
|
122
|
+
### Fase 4: [Módulo de negócio principal]
|
|
123
|
+
**Critério de DONE:** [comportamento testável esperado].
|
|
124
|
+
- [Descrever aqui]
|
|
125
|
+
|
|
126
|
+
### Fase N-1: Auditoria de Segurança e Dependências
|
|
127
|
+
**Critério de DONE:** `[audit-cmd]` sem CVE HIGH/CRITICAL; security headers presentes; sem secrets em código.
|
|
128
|
+
- `npm audit --audit-level=high` / `cargo audit` / `pip-audit` / `composer audit`
|
|
129
|
+
- Headers HTTP de segurança (HSTS, CSP, X-Frame-Options)
|
|
130
|
+
- Scan de secrets no repositório
|
|
131
|
+
|
|
132
|
+
### Fase N: Observabilidade e Documentação
|
|
133
|
+
**Critério de DONE:** logs estruturados em JSON; endpoint `/metrics` ou equivalente; documentação API gerada.
|
|
134
|
+
- Logs estruturados (JSON) com trace-id
|
|
135
|
+
- Métricas de negócio e técnicas
|
|
136
|
+
- Documentação API (OpenAPI / Swagger)
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## 7. VALIDAÇÃO E SEGURANÇA
|
|
141
|
+
|
|
142
|
+
### Validation Gates (Ralph Loop) por stack
|
|
143
|
+
|
|
144
|
+
| Stack | Build | Test | Lint/Audit |
|
|
145
|
+
|-------|-------|------|------------|
|
|
146
|
+
| Rust/Axum | `cargo build` | `cargo test --workspace` | `cargo clippy && cargo audit` |
|
|
147
|
+
| Node/NestJS | `npm run build` | `npm test` | `npx eslint src && npm audit --audit-level=high` |
|
|
148
|
+
| Python/FastAPI | `python -m py_compile` | `pytest` | `ruff check . && pip-audit` |
|
|
149
|
+
| PHP/Laravel | `php artisan config:cache` | `php artisan test` | `./vendor/bin/phpstan && composer audit` |
|
|
150
|
+
| Go | `go build ./...` | `go test ./...` | `golangci-lint run` |
|
|
151
|
+
|
|
152
|
+
### Controles de segurança obrigatórios
|
|
153
|
+
|
|
154
|
+
- [ ] Rate limiting em endpoints de autenticação e públicos
|
|
155
|
+
- [ ] Input validation no servidor para todos os endpoints
|
|
156
|
+
- [ ] Dados sensíveis (PII, tokens, senhas) nunca em logs
|
|
157
|
+
- [ ] Todas as dependências sem CVE HIGH/CRITICAL (ver Fase N-1)
|
|
158
|
+
- [ ] HTTP Security Headers em produção
|
|
159
|
+
- [ ] Secrets apenas em variáveis de ambiente / vault
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 8. ESTRATÉGIA DE TESTES
|
|
164
|
+
|
|
165
|
+
| Tipo | Ferramenta | Cobertura mínima | O que cobre |
|
|
166
|
+
|------|-----------|------------------|-------------|
|
|
167
|
+
| Unitários | [jest/pytest/cargo test] | 80 % das funções críticas | Lógica de negócio isolada |
|
|
168
|
+
| Integração | [supertest/httpx/reqwest] | Todos os endpoints | Contrato da API |
|
|
169
|
+
| Segurança | [npm audit/cargo audit/pip-audit] | 100 % deps | CVEs conhecidos |
|
|
170
|
+
| E2E | [playwright/cypress] se frontend | Fluxo principal | Jornada do usuário |
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 9. ESTRATÉGIA DE DEPLOY
|
|
175
|
+
|
|
176
|
+
| Ambiente | Branch | Trigger | Infra |
|
|
177
|
+
|----------|--------|---------|-------|
|
|
178
|
+
| `dev` | `develop` | Push automático | [ex: Docker local / Railway] |
|
|
179
|
+
| `staging` | `main` | PR merge | [ex: OKE / ECS / Fly.io] |
|
|
180
|
+
| `prod` | tag `v*.*.*` | Manual | [ex: OKE / ECS / Fly.io] |
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## 10. CHECKLIST DE APROVAÇÃO DO BLUEPRINT
|
|
185
|
+
|
|
186
|
+
- [ ] Arquitetura revisada e aprovada
|
|
187
|
+
- [ ] Modelo de dados validado
|
|
188
|
+
- [ ] Contratos de API definidos e completos
|
|
189
|
+
- [ ] Fases com critérios de DONE claros
|
|
190
|
+
- [ ] Validation gates por stack definidos
|
|
191
|
+
- [ ] Controles de segurança mapeados
|
|
192
|
+
- [ ] Estratégia de testes cobrindo todos os tipos
|
|
193
|
+
- [ ] DAG de tasks gerado (`dare-dag.yaml`)
|