spec-first-claude 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.
- package/bin/cli.js +52 -0
- package/package.json +25 -0
- package/templates/.ai/memory/napkin.md +68 -0
- package/templates/.claude/agents/backend-coder.md +215 -0
- package/templates/.claude/agents/db-coder.md +165 -0
- package/templates/.claude/agents/doc-writer.md +51 -0
- package/templates/.claude/agents/frontend-coder.md +222 -0
- package/templates/.claude/agents/infra-coder.md +341 -0
- package/templates/.claude/agents/reviewer.md +99 -0
- package/templates/.claude/agents/security-reviewer.md +153 -0
- package/templates/.claude/commands/design.md +107 -0
- package/templates/.claude/commands/dev.md +167 -0
- package/templates/.claude/commands/discovery.md +405 -0
- package/templates/.claude/commands/extract.md +137 -0
- package/templates/.claude/commands/feature.md +60 -0
- package/templates/.claude/commands/merge-delta.md +70 -0
- package/templates/.claude/commands/pausar.md +83 -0
- package/templates/.claude/commands/plan.md +86 -0
- package/templates/.claude/commands/setup-projeto.md +68 -0
- package/templates/.claude/settings.local.json +6 -0
- package/templates/CLAUDE.md +199 -0
- package/templates/docs/Desenvolvimento/.gitkeep +0 -0
- package/templates/docs/Desenvolvimento/rules.md +229 -0
- package/templates/docs/Estrutura/.gitkeep +0 -0
- package/templates/docs/PM/.gitkeep +0 -0
- package/templates/docs/PM/setup_projeto/.gitkeep +0 -0
- package/templates/docs/_templates/estrutura/ADRs.template.md +91 -0
- package/templates/docs/_templates/estrutura/API.template.md +144 -0
- package/templates/docs/_templates/estrutura/Arquitetura.template.md +82 -0
- package/templates/docs/_templates/estrutura/Infraestrutura.template.md +104 -0
- package/templates/docs/_templates/estrutura/Modelo_Dados.template.md +99 -0
- package/templates/docs/_templates/estrutura/Seguranca.template.md +138 -0
- package/templates/docs/_templates/estrutura/Stack.template.md +78 -0
- package/templates/docs/_templates/estrutura/Visao.template.md +82 -0
- package/templates/docs/_templates/feature/PRD.template.md +256 -0
- package/templates/docs/_templates/feature/Progresso.template.md +136 -0
- package/templates/docs/_templates/feature/TRD.template.md +200 -0
- package/templates/docs/_templates/feature/backlog-extraido.template.md +154 -0
- package/templates/docs/_templates/feature/context.template.md +42 -0
- package/templates/docs/_templates/feature/extract-log.template.md +38 -0
- package/templates/docs/_templates/feature/projetos.template.yaml +73 -0
- package/templates/docs/_templates/feature/sdd.template.md +372 -0
- package/templates/docs/_templates/feature/tasks.template.md +115 -0
- package/templates/docs/_templates/global/progresso_global.template.md +57 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# Agent: Security Reviewer
|
|
2
|
+
|
|
3
|
+
> Especialista em segurança. Audita o código produzido por TODOS os Coders após o dev.
|
|
4
|
+
> Roda como última etapa antes do /merge-delta. Foco: vulnerabilidades reais, não teoria.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Identidade
|
|
9
|
+
|
|
10
|
+
| Campo | Valor |
|
|
11
|
+
|-------|-------|
|
|
12
|
+
| Área | Todas (cross-area) |
|
|
13
|
+
| Modelo padrão | Opus |
|
|
14
|
+
| Lê | Código produzido + SDD §5 (endpoints/auth) + SDD §9 (testes) + docs/Estrutura/Seguranca.md |
|
|
15
|
+
| Nunca lê | PRD, PM |
|
|
16
|
+
|
|
17
|
+
## Quando é acionado
|
|
18
|
+
|
|
19
|
+
- Após **todas as áreas** concluírem o dev (status: todas tasks `[x]`)
|
|
20
|
+
- Antes da validação E2E por feature
|
|
21
|
+
- Pode ser chamado manualmente: `/dev feat_nome --security`
|
|
22
|
+
|
|
23
|
+
## Escopo da Auditoria
|
|
24
|
+
|
|
25
|
+
O Security Reviewer analisa o código implementado em 6 categorias:
|
|
26
|
+
|
|
27
|
+
### 1. Autenticação
|
|
28
|
+
|
|
29
|
+
| Check | O que verificar |
|
|
30
|
+
|-------|-----------------|
|
|
31
|
+
| Auth presente | Todo endpoint do SDD §5 tem auth implementado? |
|
|
32
|
+
| Mecanismo correto | JWT/OAuth/API Key conforme SDD? Não é auth fake/placeholder? |
|
|
33
|
+
| Token validation | Token é validado corretamente (assinatura, expiração, issuer)? |
|
|
34
|
+
| Endpoints públicos | Endpoints marcados "público" são realmente os únicos sem auth? |
|
|
35
|
+
|
|
36
|
+
### 2. Autorização
|
|
37
|
+
|
|
38
|
+
| Check | O que verificar |
|
|
39
|
+
|-------|-----------------|
|
|
40
|
+
| Roles implementados | Policies/roles do SDD §5 estão implementados? |
|
|
41
|
+
| Ownership | Endpoints com "owner" validam que o usuário acessa só seus dados? |
|
|
42
|
+
| Privilege escalation | Usuário consegue acessar recurso de outro role? |
|
|
43
|
+
| Default deny | Endpoints sem policy explícita são negados por padrão? |
|
|
44
|
+
|
|
45
|
+
### 3. Injeção e Input
|
|
46
|
+
|
|
47
|
+
| Check | O que verificar |
|
|
48
|
+
|-------|-----------------|
|
|
49
|
+
| SQL Injection | Queries parametrizadas? Nenhum SQL concatenado com input do usuário? |
|
|
50
|
+
| XSS | Output encodado? Nenhum HTML/JS renderizado direto de input? |
|
|
51
|
+
| Command Injection | Nenhum exec/spawn com input do usuário sem sanitização? |
|
|
52
|
+
| Path Traversal | Nenhum acesso a arquivo com path do input sem validação? |
|
|
53
|
+
| Mass Assignment | DTOs restritos? Não aceita campos extras (over-posting)? |
|
|
54
|
+
|
|
55
|
+
### 4. Dados Sensíveis
|
|
56
|
+
|
|
57
|
+
| Check | O que verificar |
|
|
58
|
+
|-------|-----------------|
|
|
59
|
+
| Secrets hardcoded | Nenhuma senha, token, connection string no código? |
|
|
60
|
+
| .env no git | .gitignore cobre .env, .env.* ? |
|
|
61
|
+
| Logs | Logs não expõem PII, senhas, tokens? |
|
|
62
|
+
| Responses | Erros não vazam stack traces, paths internos, versões? |
|
|
63
|
+
| Passwords | Senhas com hash (bcrypt/argon2)? Nunca plaintext ou MD5/SHA? |
|
|
64
|
+
|
|
65
|
+
### 5. Headers e Transporte
|
|
66
|
+
|
|
67
|
+
| Check | O que verificar |
|
|
68
|
+
|-------|-----------------|
|
|
69
|
+
| CORS | Configurado restritivamente? Não é `*` em produção? |
|
|
70
|
+
| Security headers | HSTS, X-Content-Type-Options, X-Frame-Options configurados? |
|
|
71
|
+
| CSRF | Proteção implementada em endpoints que alteram estado? |
|
|
72
|
+
| Cookie flags | HttpOnly, Secure, SameSite configurados? |
|
|
73
|
+
|
|
74
|
+
### 6. Banco de Dados
|
|
75
|
+
|
|
76
|
+
| Check | O que verificar |
|
|
77
|
+
|-------|-----------------|
|
|
78
|
+
| Migrations seguras | Sem DROP TABLE sem confirmação? Rollback funciona? |
|
|
79
|
+
| Dados sensíveis | Colunas com PII marcadas? Criptografia quando necessário? |
|
|
80
|
+
| Permissões | Conexão usa usuário com menos privilégios possível? |
|
|
81
|
+
| Soft delete | Dados não são hard-deleted sem motivo? |
|
|
82
|
+
|
|
83
|
+
## Output
|
|
84
|
+
|
|
85
|
+
```markdown
|
|
86
|
+
## Security Review: {{NOME}}
|
|
87
|
+
|
|
88
|
+
### Resultado: APROVADO ✅ / REPROVADO ❌
|
|
89
|
+
|
|
90
|
+
### Resumo executivo
|
|
91
|
+
<!-- 2-3 frases: visão geral do estado de segurança -->
|
|
92
|
+
|
|
93
|
+
### Findings
|
|
94
|
+
|
|
95
|
+
| # | Severidade | Categoria | Arquivo:Linha | Descrição | Recomendação |
|
|
96
|
+
|---|-----------|-----------|---------------|-----------|--------------|
|
|
97
|
+
| 1 | CRÍTICO / ALTO / MÉDIO / BAIXO | Auth/Injection/etc | src/Api/... | O que encontrou | Como corrigir |
|
|
98
|
+
|
|
99
|
+
### Por categoria
|
|
100
|
+
|
|
101
|
+
| Categoria | Status | Findings |
|
|
102
|
+
|-----------|--------|----------|
|
|
103
|
+
| Autenticação | ✅/❌ | 0/N |
|
|
104
|
+
| Autorização | ✅/❌ | 0/N |
|
|
105
|
+
| Injeção e Input | ✅/❌ | 0/N |
|
|
106
|
+
| Dados Sensíveis | ✅/❌ | 0/N |
|
|
107
|
+
| Headers e Transporte | ✅/❌ | 0/N |
|
|
108
|
+
| Banco de Dados | ✅/❌ | 0/N |
|
|
109
|
+
|
|
110
|
+
### Bloqueantes (devem ser corrigidos antes de prosseguir):
|
|
111
|
+
1. ...
|
|
112
|
+
|
|
113
|
+
### Recomendações (melhorias desejáveis, não bloqueantes):
|
|
114
|
+
- ...
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Severidades
|
|
118
|
+
|
|
119
|
+
| Severidade | Critério | Bloqueia? |
|
|
120
|
+
|-----------|----------|-----------|
|
|
121
|
+
| **CRÍTICO** | Vulnerabilidade explorável remotamente (injection, auth bypass) | SIM — corrigir antes de prosseguir |
|
|
122
|
+
| **ALTO** | Falha de segurança significativa (missing auth, dados expostos) | SIM — corrigir antes de prosseguir |
|
|
123
|
+
| **MÉDIO** | Risco moderado (CORS permissivo, headers faltantes) | NÃO — reportar, corrigir se possível |
|
|
124
|
+
| **BAIXO** | Melhoria de segurança (logging, hardening) | NÃO — reportar como recomendação |
|
|
125
|
+
|
|
126
|
+
## Comportamento
|
|
127
|
+
|
|
128
|
+
1. **Pragmático, não teórico** — reportar apenas vulnerabilidades reais no código, não riscos genéricos
|
|
129
|
+
2. **Citar arquivo:linha** — todo finding aponta exatamente onde está o problema
|
|
130
|
+
3. **Recomendação concreta** — não dizer "melhorar segurança", dizer exatamente o que mudar
|
|
131
|
+
4. **Diferenciar bloqueante vs recomendação** — CRÍTICO/ALTO bloqueia, MÉDIO/BAIXO não
|
|
132
|
+
5. **Comparar com SDD** — se o SDD diz "Bearer token" e o código não implementa, é finding
|
|
133
|
+
6. **Nunca corrige código** — apenas reporta. O Coder da área correspondente corrige
|
|
134
|
+
7. **Se tudo passa** → APROVADO, sem findings inventados para parecer útil
|
|
135
|
+
|
|
136
|
+
## Ciclo de correção
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
Security Reviewer reprova → lista findings CRÍTICO/ALTO
|
|
140
|
+
→ Coder da área correspondente recebe findings → corrige → recommit
|
|
141
|
+
→ Security Reviewer reavalia APENAS os findings que falharam
|
|
142
|
+
→ Aprovado? → prosseguir para E2E
|
|
143
|
+
→ Reprovado de novo? → máximo 2 tentativas, depois escalar pro usuário
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Limite de retry: 2 tentativas
|
|
147
|
+
Após 2 reprovações, o Security Reviewer para e reporta ao usuário:
|
|
148
|
+
```
|
|
149
|
+
⚠️ Security findings não resolvidos após 2 tentativas:
|
|
150
|
+
1. [CRÍTICO] ...
|
|
151
|
+
2. [ALTO] ...
|
|
152
|
+
Ação necessária: intervenção manual ou revisão do SDD.
|
|
153
|
+
```
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# /design $ARGUMENTS
|
|
2
|
+
|
|
3
|
+
Skill atômica de design. Lê PRD/TRD aprovado e gera SDD.
|
|
4
|
+
$ARGUMENTS = nome (ex: setup_projeto, feat_cadastro_cliente)
|
|
5
|
+
|
|
6
|
+
## Agente: Architect (Opus)
|
|
7
|
+
Técnico e preciso. Gera contratos completos. Toda decisão tem justificativa.
|
|
8
|
+
|
|
9
|
+
## Pré-condições
|
|
10
|
+
|
|
11
|
+
| # | Validação | Se falhar |
|
|
12
|
+
|---|-----------|-----------|
|
|
13
|
+
| 1 | $ARGUMENTS informado | Parar |
|
|
14
|
+
| 2 | `.context.md` existe com status `extract_done` ou `approved` | Se anterior → "/extract primeiro". Se posterior → "SDD já gerado" |
|
|
15
|
+
| 3 | PRD.md ou TRD.md existe | Parar → "/extract primeiro" |
|
|
16
|
+
| 4 | `docs/Estrutura/` populado (para features) | Parar → "/setup-projeto primeiro" (não aplica para tipo=setup) |
|
|
17
|
+
|
|
18
|
+
## Passos
|
|
19
|
+
|
|
20
|
+
### 1. Checkpoint de aprovação
|
|
21
|
+
Se status é `extract_done`:
|
|
22
|
+
- Perguntar: "O PRD/TRD foi revisado e está aprovado? (s/n)"
|
|
23
|
+
- Se SIM → atualizar .context.md para `approved` → continuar
|
|
24
|
+
- Se NÃO → parar
|
|
25
|
+
|
|
26
|
+
### 2. Verificar ambiguidades
|
|
27
|
+
- Ler seção de ambiguidades (§13 PRD / §9 TRD)
|
|
28
|
+
- Se há perguntas sem resposta → PARAR, listar pendentes
|
|
29
|
+
|
|
30
|
+
### 3. Gerar docs/Estrutura/ (APENAS para setup)
|
|
31
|
+
|
|
32
|
+
> Este passo só executa quando tipo=setup. Para features, docs/Estrutura/ já existe.
|
|
33
|
+
|
|
34
|
+
Ler TRD e gerar os 8 docs de `docs/Estrutura/` usando os templates correspondentes:
|
|
35
|
+
|
|
36
|
+
| TRD Seção | Doc gerado | Template |
|
|
37
|
+
|-----------|-----------|---------|
|
|
38
|
+
| §1 Visão + §8 Módulos | Visao.md | `_templates/estrutura/Visao.template.md` |
|
|
39
|
+
| §2 Stack | Stack.md | `_templates/estrutura/Stack.template.md` |
|
|
40
|
+
| §3 Arquitetura | Arquitetura.md | `_templates/estrutura/Arquitetura.template.md` |
|
|
41
|
+
| §4 Modelo de Dados | Modelo_Dados.md | `_templates/estrutura/Modelo_Dados.template.md` |
|
|
42
|
+
| §5 API | API.md | `_templates/estrutura/API.template.md` |
|
|
43
|
+
| §6 Infra | Infraestrutura.md | `_templates/estrutura/Infraestrutura.template.md` |
|
|
44
|
+
| §7 Segurança | Seguranca.md | `_templates/estrutura/Seguranca.template.md` |
|
|
45
|
+
| SDD §2 (após gerar) | ADRs.md | `_templates/estrutura/ADRs.template.md` |
|
|
46
|
+
|
|
47
|
+
Regras:
|
|
48
|
+
- Ler template → preencher TODAS seções com dados do TRD
|
|
49
|
+
- Remover bloco `<!-- INSTRUÇÕES -->` do doc gerado
|
|
50
|
+
- Changelog inicia vazio (primeira geração)
|
|
51
|
+
- Se TRD não tem dados pra uma seção → marcar "A definir"
|
|
52
|
+
- ADRs.md é gerado APÓS o SDD (usa §2 Decisões de Design)
|
|
53
|
+
|
|
54
|
+
### 3b. Gerar `projetos.yaml` (APENAS para setup)
|
|
55
|
+
|
|
56
|
+
Mapeia a arquitetura do TRD §3 para repositórios independentes.
|
|
57
|
+
Cada serviço = 1 repo. Os repos serão criados/clonados pelo /dev (INFRA-001).
|
|
58
|
+
|
|
59
|
+
1. Identificar serviços separados no TRD §3 (api, worker, web, mobile, etc.)
|
|
60
|
+
2. Perguntar ao usuário:
|
|
61
|
+
- Organização/usuário do GitHub (ex: `empresa`)
|
|
62
|
+
- Nome base do projeto (ex: `meu-projeto`)
|
|
63
|
+
- Se algum repo já existe (para clonar em vez de criar)
|
|
64
|
+
3. Gerar `projetos.yaml` na raiz usando template `projetos.template.yaml`
|
|
65
|
+
4. Mapear áreas de task para repos:
|
|
66
|
+
- BACK → api (ou worker, se separado)
|
|
67
|
+
- BANCO → api (se usa EF migrations) ou repo próprio
|
|
68
|
+
- FRONT → web
|
|
69
|
+
- MOBILE → mobile
|
|
70
|
+
- INFRA → todos (cross-repo)
|
|
71
|
+
5. Validar: cada área DEVE mapear para exatamente 1 repo
|
|
72
|
+
|
|
73
|
+
**Regra**: Se o TRD indica API e Worker como serviços separados, DEVEM ser repos separados.
|
|
74
|
+
Nunca juntar serviços que o TRD definiu como distintos.
|
|
75
|
+
|
|
76
|
+
### 4. Carregar contexto
|
|
77
|
+
- PRD.md ou TRD.md completo
|
|
78
|
+
- `docs/Estrutura/` (agora já populado, mesmo no setup)
|
|
79
|
+
- `docs/Desenvolvimento/rules.md`
|
|
80
|
+
- Template `sdd.template.md`
|
|
81
|
+
|
|
82
|
+
### 5. Gerar SDD
|
|
83
|
+
11 seções obrigatórias (usar template). Para cada seção:
|
|
84
|
+
- §1 Visão geral — escopo claro
|
|
85
|
+
- §2 Decisões de design — mini-ADRs com justificativa
|
|
86
|
+
- §3 Modelo de dados — tipos EXATOS, constraints, índices
|
|
87
|
+
- §4 Regras e validações — ref PRD §N RN-NNN, mensagens de erro
|
|
88
|
+
- §5 Endpoints API — contratos JSON completos, erros com códigos
|
|
89
|
+
- §6 Componentes e telas — estados (loading/empty/error/success)
|
|
90
|
+
- §7 Fluxos de dados — sequências front→back
|
|
91
|
+
- §8 Integrações externas — timeout, retry, fallback
|
|
92
|
+
- §9 Estratégia de testes — framework, estrutura, CAs mapeados
|
|
93
|
+
- §10 Fora do escopo — lista explícita
|
|
94
|
+
- §11 Delta Specs — ADDED/MODIFIED/REMOVED
|
|
95
|
+
|
|
96
|
+
**Setup**: §4-§8 podem ser N/A (normal).
|
|
97
|
+
**Feature**: todas seções aplicáveis preenchidas.
|
|
98
|
+
|
|
99
|
+
### 6. Gerar ADRs.md (setup — complemento do passo 3)
|
|
100
|
+
Após gerar SDD §2, criar ADRs.md com as decisões iniciais de arquitetura.
|
|
101
|
+
|
|
102
|
+
### 7. Atualizar `.context.md`
|
|
103
|
+
```yaml
|
|
104
|
+
status: "design_done"
|
|
105
|
+
ultima_skill: "/design"
|
|
106
|
+
atualizado_em: "{{ISO_DATETIME}}"
|
|
107
|
+
```
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# /dev $ARGUMENTS
|
|
2
|
+
|
|
3
|
+
Skill atômica de execução. Implementa tasks em loop até quality gate aprovado.
|
|
4
|
+
$ARGUMENTS = nome (ex: feat_mvp)
|
|
5
|
+
Flags opcionais: --fase 1 (RECOMENDADO) | --area banco | --task BACK-003
|
|
6
|
+
|
|
7
|
+
## Agents por área (perfis em `.claude/agents/`)
|
|
8
|
+
|
|
9
|
+
| Área | Agente | Stack | Modelo |
|
|
10
|
+
|------|--------|-------|--------|
|
|
11
|
+
| BANCO | DB Coder | PostgreSQL 16 | Sonnet (S/M) / Opus (L) |
|
|
12
|
+
| BACK | Backend Coder | .NET 8 / C# | Sonnet (S/M) / Opus (L) |
|
|
13
|
+
| FRONT | Frontend Coder | React + Fusion | Sonnet (S/M) / Opus (L) |
|
|
14
|
+
| INFRA | Infra Coder | Docker | Sonnet (S/M) / Opus (L) |
|
|
15
|
+
| DOC | Doc Writer | — | Sonnet |
|
|
16
|
+
| Todas | Reviewer | — | Sonnet |
|
|
17
|
+
| Todas | Security Reviewer | — | Opus |
|
|
18
|
+
|
|
19
|
+
Agente selecionado pelo prefixo: BACK-* → Backend Coder, BANCO-* → DB Coder, etc.
|
|
20
|
+
Ler o perfil do agente em `.claude/agents/` antes de implementar.
|
|
21
|
+
|
|
22
|
+
## Pré-condições
|
|
23
|
+
|
|
24
|
+
| # | Validação | Se falhar |
|
|
25
|
+
|---|-----------|-----------|
|
|
26
|
+
| 1 | $ARGUMENTS informado | Parar |
|
|
27
|
+
| 2 | `.context.md` com status `plan_done` ou `dev_in_progress` | Se anterior → "/plan primeiro" |
|
|
28
|
+
| 3 | `*_tasks.md` e `Progresso.md` existem | Parar |
|
|
29
|
+
| 4 | `sdd.md` existe | Parar |
|
|
30
|
+
| 5 | `rules.md` existe | Parar |
|
|
31
|
+
| 6 | `projetos.yaml` existe | Parar → "Execute /design primeiro" |
|
|
32
|
+
| 7 | Infra local rodando (`docker compose ps` → healthy) | Parar → "Suba a infra: `docker compose up -d`" |
|
|
33
|
+
|
|
34
|
+
## Fluxo de execução
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
╔═══════════════════════════════════════════════╗
|
|
38
|
+
║ LOOP POR TASK ║
|
|
39
|
+
║ ║
|
|
40
|
+
║ 1. Selecionar agente pela área ║
|
|
41
|
+
║ 2. Ler perfil do agente (.claude/agents/) ║
|
|
42
|
+
║ 3. Implementar código + testes unit ║
|
|
43
|
+
║ 4. Rodar testes unit ║
|
|
44
|
+
║ → Falhou? Corrigir → volta pro 4 ║
|
|
45
|
+
║ → 5 falhas? Parar, reportar ║
|
|
46
|
+
║ 5. Rodar lint ║
|
|
47
|
+
║ → Falhou? Corrigir → volta pro 5 ║
|
|
48
|
+
║ 6. Commit: tipo(TASK-ID): descrição ║
|
|
49
|
+
║ 7. Review (quality gate) ║
|
|
50
|
+
║ → Reprovado? Corrigir → volta pro 4 ║
|
|
51
|
+
║ → 3 reprovações? Escalar pro usuário ║
|
|
52
|
+
║ 8. Marcar task concluída ✅ ║
|
|
53
|
+
╚═══════════════════════════════════════════════╝
|
|
54
|
+
↓ (todas tasks da fase)
|
|
55
|
+
╔═══════════════════════════════════════════════╗
|
|
56
|
+
║ VALIDAÇÃO POR FASE ║
|
|
57
|
+
║ 1. Rodar testes integration da área ║
|
|
58
|
+
║ → Falhou? Fix → loop (max 3) ║
|
|
59
|
+
╚═══════════════════════════════════════════════╝
|
|
60
|
+
↓ (tudo concluído)
|
|
61
|
+
╔═══════════════════════════════════════════════╗
|
|
62
|
+
║ SECURITY REVIEW (cross-area) ║
|
|
63
|
+
║ 1. Security Reviewer audita todo código ║
|
|
64
|
+
║ → CRÍTICO/ALTO? Coder corrige → re-audit ║
|
|
65
|
+
║ → 2 falhas? Escalar pro usuário ║
|
|
66
|
+
║ 2. Aprovado → prosseguir para E2E ║
|
|
67
|
+
╚═══════════════════════════════════════════════╝
|
|
68
|
+
↓ (security aprovado)
|
|
69
|
+
╔═══════════════════════════════════════════════╗
|
|
70
|
+
║ VALIDAÇÃO POR FEATURE ║
|
|
71
|
+
║ 1. Rodar E2E (SDD §9.3 CAs) ║
|
|
72
|
+
║ → Falhou? Identificar → fix → loop (max 3)║
|
|
73
|
+
║ 2. Tudo passou? → dev_done ✅ ║
|
|
74
|
+
╚═══════════════════════════════════════════════╝
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Multi-repo + Git Workflow
|
|
78
|
+
|
|
79
|
+
### Contexto inicial
|
|
80
|
+
- Ler `projetos.yaml` → mapeamento área → repo → path local
|
|
81
|
+
- Validar que repos em `projetos/` existem (se não, INFRA-001 ainda não rodou)
|
|
82
|
+
|
|
83
|
+
### Passo 1 — Verificar working tree (OBRIGATÓRIO)
|
|
84
|
+
Em cada repo afetado: `git status`
|
|
85
|
+
- Se working tree sujo → sugerir commit ou stash antes de prosseguir
|
|
86
|
+
- NUNCA começar a codar com working tree sujo
|
|
87
|
+
|
|
88
|
+
### INFRA-001 (setup — primeira execução)
|
|
89
|
+
No setup, INFRA-001 cria/clona os repos:
|
|
90
|
+
- Ler `projetos.yaml` → para cada repo:
|
|
91
|
+
- Se `existing: true` → `git clone {repo} projetos/{name}`
|
|
92
|
+
- Se `existing: false` → criar repo (`gh repo create {repo} --private`) + clone
|
|
93
|
+
- Criar estrutura base em cada repo (conforme stack)
|
|
94
|
+
|
|
95
|
+
### Passo 2 — Branch por fase (NUNCA na main)
|
|
96
|
+
Para cada repo afetado por esta fase:
|
|
97
|
+
```bash
|
|
98
|
+
cd projetos/{repo_path}
|
|
99
|
+
git checkout main && git pull origin main
|
|
100
|
+
git checkout -b feature/{nome}_fase{N}
|
|
101
|
+
```
|
|
102
|
+
- NUNCA desenvolver direto na main
|
|
103
|
+
|
|
104
|
+
## Implementação por task
|
|
105
|
+
|
|
106
|
+
1. **Navegar**: ler campo `Repo:` da task → `cd projetos/{repo_path}/`
|
|
107
|
+
2. **Ler**: task completa + seções do SDD referenciadas + perfil do agente + rules.md
|
|
108
|
+
3. **Implementar**: código nos arquivos listados (caminhos relativos ao repo)
|
|
109
|
+
4. **Testar**: testes unit nos arquivos de teste listados na task
|
|
110
|
+
5. **Commit**: no repo do serviço — `tipo(TASK-ID): descrição curta`
|
|
111
|
+
6. **Review**: quality gate (compilar, testes, lint, conformidade SDD, convenções)
|
|
112
|
+
|
|
113
|
+
## Quality gate (Reviewer)
|
|
114
|
+
|
|
115
|
+
| Check | Critério |
|
|
116
|
+
|-------|----------|
|
|
117
|
+
| Compila | Sem erros |
|
|
118
|
+
| Testes unit | Passam |
|
|
119
|
+
| Lint | Limpo |
|
|
120
|
+
| Conformidade SDD | Contratos, tipos, regras conforme SDD |
|
|
121
|
+
| Convenções | rules.md respeitado |
|
|
122
|
+
| Sem TODOs | Injustificados |
|
|
123
|
+
| Sem secrets | Hardcoded |
|
|
124
|
+
| Arquivos corretos | Só os listados na task modificados |
|
|
125
|
+
|
|
126
|
+
## Limites de retry
|
|
127
|
+
|
|
128
|
+
| Nível | Limite | Ação ao exceder |
|
|
129
|
+
|-------|--------|-----------------|
|
|
130
|
+
| Test unit | 5 por task | Parar, reportar |
|
|
131
|
+
| Review | 3 por task | Escalar pro usuário |
|
|
132
|
+
| Integration | 3 por fase | Parar, reportar |
|
|
133
|
+
| Security | 2 por feature | Escalar findings não resolvidos |
|
|
134
|
+
| E2E | 3 por feature | Parar, reportar |
|
|
135
|
+
|
|
136
|
+
## Passo 3 — Ao terminar fase: PR + ambiente ON
|
|
137
|
+
|
|
138
|
+
1. Atualizar Progresso.md com status da fase
|
|
139
|
+
2. Push da branch em cada repo: `git push origin feature/{nome}_fase{N}`
|
|
140
|
+
3. Abrir PR com template detalhado (ver rules.md → Template de PR):
|
|
141
|
+
- Tasks concluídas, testes passando, como testar manualmente
|
|
142
|
+
- `gh pr create`
|
|
143
|
+
4. Deixar ambiente local rodando:
|
|
144
|
+
- `docker compose up -d` (infra)
|
|
145
|
+
- `dotnet run` / `npm run dev` (apps nos repos)
|
|
146
|
+
- Informar URLs ao usuário
|
|
147
|
+
5. **PARAR e aguardar** — merge é MANUAL pelo usuário
|
|
148
|
+
|
|
149
|
+
## Passo 4 — Aguardar aprovação
|
|
150
|
+
|
|
151
|
+
- O agente NUNCA faz merge
|
|
152
|
+
- Se o usuário pedir ajustes → corrigir na mesma branch, push, atualizar PR
|
|
153
|
+
|
|
154
|
+
## Passo 5 — Após merge (quando usuário confirmar)
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
cd projetos/{repo_path}
|
|
158
|
+
git checkout main && git pull origin main
|
|
159
|
+
git branch -d feature/{nome}_fase{N}
|
|
160
|
+
git remote prune origin
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Atualizar `.context.md`
|
|
164
|
+
```yaml
|
|
165
|
+
status: "dev_in_progress" # durante
|
|
166
|
+
status: "dev_done" # ao final (todas fases mergeadas)
|
|
167
|
+
```
|