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,83 @@
|
|
|
1
|
+
# /pausar
|
|
2
|
+
|
|
3
|
+
Encerra a sessão de trabalho de forma organizada.
|
|
4
|
+
Consolida estado, atualiza memória, gera ponto de retomada para a próxima sessão.
|
|
5
|
+
|
|
6
|
+
## Passos
|
|
7
|
+
|
|
8
|
+
### 1. Levantar estado atual
|
|
9
|
+
|
|
10
|
+
Para cada `.context.md` em `docs/Desenvolvimento/*/`:
|
|
11
|
+
- Status atual + Progresso.md (% concluído, fase atual)
|
|
12
|
+
- Tasks em andamento
|
|
13
|
+
|
|
14
|
+
### 2. Verificar working tree dos repos
|
|
15
|
+
|
|
16
|
+
Para cada repo em `projetos/`:
|
|
17
|
+
```bash
|
|
18
|
+
cd projetos/{repo}
|
|
19
|
+
git status --short
|
|
20
|
+
git log --oneline -3
|
|
21
|
+
```
|
|
22
|
+
- Se working tree sujo → avisar (sugerir commit antes de pausar)
|
|
23
|
+
|
|
24
|
+
### 3. Atualizar `.ai/memory/napkin.md`
|
|
25
|
+
|
|
26
|
+
Atualizar seção `## Sessão Atual` com:
|
|
27
|
+
- Data, o que foi feito, o que estava em andamento
|
|
28
|
+
- Decisões tomadas, armadilhas encontradas
|
|
29
|
+
|
|
30
|
+
### 4. Gerar resumo de retomada
|
|
31
|
+
|
|
32
|
+
Criar/atualizar `docs/Desenvolvimento/retomada.md`:
|
|
33
|
+
|
|
34
|
+
```markdown
|
|
35
|
+
# Ponto de Retomada — {{DATA}}
|
|
36
|
+
|
|
37
|
+
> Gerado pelo /pausar. Leia este arquivo ao iniciar a próxima sessão.
|
|
38
|
+
|
|
39
|
+
## Estado geral
|
|
40
|
+
|
|
41
|
+
| Feature/Setup | Status | Fase atual | % | Próxima ação |
|
|
42
|
+
|---------------|--------|------------|---|-------------|
|
|
43
|
+
| {{nome}} | {{status}} | Fase {{N}} | {{%}} | {{ação}} |
|
|
44
|
+
|
|
45
|
+
## Repos — estado do git
|
|
46
|
+
|
|
47
|
+
| Repo | Branch ativa | Working tree | Último commit |
|
|
48
|
+
|------|-------------|-------------|---------------|
|
|
49
|
+
| {{repo}} | {{branch}} | limpo/sujo | {{commit msg}} |
|
|
50
|
+
|
|
51
|
+
## O que estava em andamento
|
|
52
|
+
|
|
53
|
+
- Task: {{AREA-NNN}} — {{descrição}}
|
|
54
|
+
- Bloqueios: {{se houver}}
|
|
55
|
+
- Decisões pendentes: {{se houver}}
|
|
56
|
+
|
|
57
|
+
## Para retomar
|
|
58
|
+
|
|
59
|
+
1. {{Passo 1 — ex: "Subir infra: docker compose up -d"}}
|
|
60
|
+
2. {{Passo 2 — ex: "Continuar /dev feat_mvp --fase 2"}}
|
|
61
|
+
3. {{Passo 3 — ex: "Resolver ambiguidade X do PRD"}}
|
|
62
|
+
|
|
63
|
+
## Aprendizados desta sessão
|
|
64
|
+
|
|
65
|
+
- {{Decisão ou armadilha que vale registrar}}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 5. Informar ao usuário
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
✅ Sessão encerrada. Estado salvo em:
|
|
72
|
+
- `.ai/memory/napkin.md` — memória atualizada
|
|
73
|
+
- `docs/Desenvolvimento/retomada.md` — ponto de retomada
|
|
74
|
+
|
|
75
|
+
Para retomar:
|
|
76
|
+
1. Ler retomada.md
|
|
77
|
+
2. Seguir os passos listados
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Notas
|
|
81
|
+
- Não modifica .context.md (status da pipeline não muda)
|
|
82
|
+
- Não faz commit automático — avisa se working tree sujo
|
|
83
|
+
- `retomada.md` é sobrescrito a cada /pausar (ponto atual, não histórico)
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# /plan $ARGUMENTS
|
|
2
|
+
|
|
3
|
+
Skill atômica de planejamento. Lê SDD e gera tasks por área + Progresso.
|
|
4
|
+
$ARGUMENTS = nome (ex: setup_projeto, feat_cadastro_cliente)
|
|
5
|
+
|
|
6
|
+
## Agente: Planner (Opus)
|
|
7
|
+
Metódico e exaustivo. Cada task auto-contida. Prioriza ordem correta.
|
|
8
|
+
|
|
9
|
+
## Pré-condições
|
|
10
|
+
|
|
11
|
+
| # | Validação | Se falhar |
|
|
12
|
+
|---|-----------|-----------|
|
|
13
|
+
| 1 | $ARGUMENTS informado | Parar |
|
|
14
|
+
| 2 | `.context.md` com status `design_done` | Se anterior → "/design primeiro". Se posterior → "Tasks já geradas" |
|
|
15
|
+
| 3 | `sdd.md` existe | Parar → "/design primeiro" |
|
|
16
|
+
|
|
17
|
+
## Passos
|
|
18
|
+
|
|
19
|
+
### 1. Ler contexto
|
|
20
|
+
- SDD completo + `projetos.yaml` + `docs/Estrutura/` + `rules.md`
|
|
21
|
+
- Template `tasks.template.md` + `Progresso.template.md`
|
|
22
|
+
|
|
23
|
+
### 2. Identificar fases de entrega
|
|
24
|
+
Ler PRD §11 (Fases de Entrega) — cada fase vira um agrupamento de tasks:
|
|
25
|
+
- Fases são sequenciais: Fase 2 depende de Fase 1 concluída
|
|
26
|
+
- Cada fase tem entregável e critério de done
|
|
27
|
+
- O `/dev` pode rodar por fase: `/dev feat_nome --fase 1`
|
|
28
|
+
|
|
29
|
+
### 3. Identificar áreas (por fase)
|
|
30
|
+
|
|
31
|
+
| Seção SDD | Área |
|
|
32
|
+
|-----------|------|
|
|
33
|
+
| §3 Modelo de dados | BANCO |
|
|
34
|
+
| §5 Endpoints API | BACK |
|
|
35
|
+
| §6 Componentes/Telas | FRONT |
|
|
36
|
+
| §8 Integrações | INFRA |
|
|
37
|
+
| Outras | MOBILE, DEVOPS, etc. conforme SDD |
|
|
38
|
+
|
|
39
|
+
> **Nota**: Área DOC NÃO existe mais no setup. docs/Estrutura/ é gerado pelo /design (passo 3).
|
|
40
|
+
> DOC só aparece em features se houver necessidade explícita de documentação adicional.
|
|
41
|
+
|
|
42
|
+
Áreas são DINÂMICAS — só criar as que o SDD exige.
|
|
43
|
+
|
|
44
|
+
**Área INFRA obrigatória no setup:**
|
|
45
|
+
Sempre gerar estas tasks no setup (antes de qualquer código):
|
|
46
|
+
```
|
|
47
|
+
- [ ] INFRA-001: Validar e configurar ambiente local [M]
|
|
48
|
+
(detectar OS, instalar Docker/.NET/Node, verificar portas)
|
|
49
|
+
- [ ] INFRA-002: Criar docker-compose.yml + Dockerfiles [M]
|
|
50
|
+
- [ ] INFRA-003: Hello world — subir stack completa e validar [M]
|
|
51
|
+
(docker compose up, migrations, health check, frontend carrega)
|
|
52
|
+
```
|
|
53
|
+
INFRA-001 é a PRIMEIRA task executada no /dev do setup (antes de BANCO, BACK, FRONT).
|
|
54
|
+
INFRA-003 é a ÚLTIMA task (após tudo, como validação final).
|
|
55
|
+
Setup só é `done` quando INFRA-003 passa.
|
|
56
|
+
|
|
57
|
+
### 4. Gerar tasks por fase × área
|
|
58
|
+
Para cada área → `{area}_tasks.md`, agrupadas por fase de entrega:
|
|
59
|
+
```markdown
|
|
60
|
+
- [ ] **AREA-NNN**: Título [Tamanho]
|
|
61
|
+
- Fase: {{N}} — {{Nome da fase de entrega}}
|
|
62
|
+
- Repo: `{{repo_name}}` (de projetos.yaml)
|
|
63
|
+
- Arquivos: `caminho/arquivo.ext` (relativo à raiz do repo)
|
|
64
|
+
- Testes: `caminho/teste.ext`
|
|
65
|
+
- SDD: §N.N — Referência específica
|
|
66
|
+
- Depende: AREA-NNN (ou —)
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Regras:
|
|
70
|
+
- **Repo obrigatório** — consultar `projetos.yaml` para mapear área → repo. Caminhos relativos ao repo
|
|
71
|
+
- Tamanhos: S (<30min), M (30min-2h), L (2h+). L → avaliar se quebra em M+S
|
|
72
|
+
- IDs sequenciais por área, nunca reutilizar
|
|
73
|
+
- Dependências cross-area permitidas
|
|
74
|
+
- Fases sequenciais: P1 (bloqueia), P2 (importante), P3 (nice-to-have)
|
|
75
|
+
- Cada task inclui campo Testes (arquivo de teste correspondente)
|
|
76
|
+
|
|
77
|
+
### 5. Gerar Progresso.md (por fase de entrega)
|
|
78
|
+
- Resumo Área × Fase com contagem
|
|
79
|
+
- Ordem de execução com paralelismos
|
|
80
|
+
- Checklist pós-conclusão
|
|
81
|
+
|
|
82
|
+
### 6. Atualizar progresso global + `.context.md`
|
|
83
|
+
```yaml
|
|
84
|
+
status: "plan_done"
|
|
85
|
+
ultima_skill: "/plan"
|
|
86
|
+
```
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# /setup-projeto
|
|
2
|
+
|
|
3
|
+
Orquestrador de bootstrap do projeto. Executa uma única vez.
|
|
4
|
+
Cria contexto TRD, chama /extract e para no checkpoint de aprovação.
|
|
5
|
+
|
|
6
|
+
## Execução
|
|
7
|
+
|
|
8
|
+
Siga EXATAMENTE os passos da skill em ordem. Leia o arquivo completo antes de agir.
|
|
9
|
+
|
|
10
|
+
### Pré-condições — validar TODAS antes de prosseguir
|
|
11
|
+
|
|
12
|
+
| # | Validação | Se falhar |
|
|
13
|
+
|---|-----------|-----------|
|
|
14
|
+
| 1 | `docs/PM/setup_projeto/` existe | Parar → "Crie a pasta docs/PM/setup_projeto/ e adicione seus insumos" |
|
|
15
|
+
| 2 | Pasta contém pelo menos 1 arquivo (ignorar .gitkeep) | Parar → "Adicione insumos na pasta (aceitos: .md, .txt, .sql, .xml, .html, .json, .csv, .png, .jpg, .pdf — qualquer formato)" |
|
|
16
|
+
| 3 | `docs/Estrutura/` está vazio ou contém apenas .gitkeep | Parar → "Setup já foi executado. Use /feature para novas funcionalidades" |
|
|
17
|
+
| 4 | `docs/Desenvolvimento/setup_projeto/.context.md` não existe ou status é `not_started` | Parar → "Setup já está em andamento. Verifique o status em .context.md" |
|
|
18
|
+
|
|
19
|
+
### Passos
|
|
20
|
+
|
|
21
|
+
1. Criar `docs/Desenvolvimento/setup_projeto/` se não existir
|
|
22
|
+
|
|
23
|
+
2. Criar `.context.md`:
|
|
24
|
+
```yaml
|
|
25
|
+
---
|
|
26
|
+
nome: "setup_projeto"
|
|
27
|
+
tipo: "setup"
|
|
28
|
+
documento: "TRD"
|
|
29
|
+
pm_path: "docs/PM/setup_projeto/"
|
|
30
|
+
status: "not_started"
|
|
31
|
+
ultima_skill: "/setup-projeto"
|
|
32
|
+
atualizado_em: "{{ISO_DATETIME}}"
|
|
33
|
+
---
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
3. Sugerir /sf-discovery (RECOMENDADO):
|
|
37
|
+
```
|
|
38
|
+
📋 Recomendo rodar /sf-discovery antes da extração para análise profunda dos insumos.
|
|
39
|
+
Quer rodar /sf-discovery docs/PM/setup_projeto/ agora? (s/n)
|
|
40
|
+
```
|
|
41
|
+
Se SIM → rodar discovery, salvar discovery.md em docs/Desenvolvimento/setup_projeto/
|
|
42
|
+
Se NÃO → pular direto para extract
|
|
43
|
+
|
|
44
|
+
4. Executar /extract setup_projeto (seguir o command /extract)
|
|
45
|
+
|
|
46
|
+
5. CHECKPOINT — Parar e informar:
|
|
47
|
+
```
|
|
48
|
+
✅ TRD gerado em docs/Desenvolvimento/setup_projeto/TRD.md
|
|
49
|
+
|
|
50
|
+
Revise o documento. Quando estiver satisfeito, execute:
|
|
51
|
+
/design setup_projeto
|
|
52
|
+
|
|
53
|
+
Se precisar adicionar mais insumos, coloque na pasta docs/PM/setup_projeto/
|
|
54
|
+
e execute:
|
|
55
|
+
/extract setup_projeto
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**O orquestrador encerra aqui.** Próximos passos do usuário:
|
|
59
|
+
1. `/design setup_projeto` (pergunta aprovação → gera SDD + docs/Estrutura/ + projetos.yaml)
|
|
60
|
+
2. `/plan setup_projeto` (gera tasks com campo Repo por task)
|
|
61
|
+
3. `/dev setup_projeto` (INFRA-001 cria/clona repos em projetos/, executa tasks nos repos corretos)
|
|
62
|
+
|
|
63
|
+
### Notas
|
|
64
|
+
- Esta skill roda UMA ÚNICA VEZ por projeto
|
|
65
|
+
- docs/Estrutura/ é gerado pelo /design (passo 3), não por tasks DOC
|
|
66
|
+
- `projetos.yaml` é gerado pelo /design (passo 3b) — mapeia serviços para repos
|
|
67
|
+
- Repos são criados/clonados pelo /dev (INFRA-001) dentro de `projetos/`
|
|
68
|
+
- /merge-delta NÃO se aplica ao setup (é criação, não atualização)
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# CLAUDE.md — Projeto
|
|
2
|
+
|
|
3
|
+
> Regras globais para TODAS as interações neste projeto.
|
|
4
|
+
> Lido automaticamente no início de cada sessão.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Inicialização (executar no início de cada sessão)
|
|
9
|
+
|
|
10
|
+
### 1. Verificar dependências do workflow
|
|
11
|
+
|
|
12
|
+
| Dependência | Caminho | Se não existir |
|
|
13
|
+
|-------------|---------|----------------|
|
|
14
|
+
| Napkin (memória) | `.ai/memory/napkin.md` | Criar com formato padrão |
|
|
15
|
+
| Templates | `docs/_templates/` | ERRO — projeto não está configurado |
|
|
16
|
+
| Commands | `.claude/commands/` | ERRO — projeto não está configurado |
|
|
17
|
+
| Agents | `.claude/agents/` | ERRO — projeto não está configurado |
|
|
18
|
+
| Rules | `docs/Desenvolvimento/rules.md` | ERRO — projeto não está configurado |
|
|
19
|
+
| Retomada | `docs/Desenvolvimento/retomada.md` | OK — primeira sessão |
|
|
20
|
+
|
|
21
|
+
### 2. Validar acesso a todos commands
|
|
22
|
+
|
|
23
|
+
Verificar que TODOS os 9 commands estão acessíveis:
|
|
24
|
+
|
|
25
|
+
| Command | Caminho |
|
|
26
|
+
|---------|---------|
|
|
27
|
+
| `/setup-projeto` | `.claude/commands/setup-projeto.md` |
|
|
28
|
+
| `/feature` | `.claude/commands/feature.md` |
|
|
29
|
+
| `/discovery` | `.claude/commands/discovery.md` |
|
|
30
|
+
| `/extract` | `.claude/commands/extract.md` |
|
|
31
|
+
| `/design` | `.claude/commands/design.md` |
|
|
32
|
+
| `/plan` | `.claude/commands/plan.md` |
|
|
33
|
+
| `/dev` | `.claude/commands/dev.md` |
|
|
34
|
+
| `/merge-delta` | `.claude/commands/merge-delta.md` |
|
|
35
|
+
| `/pausar` | `.claude/commands/pausar.md` |
|
|
36
|
+
|
|
37
|
+
Se algum command não for encontrado → avisar o usuário.
|
|
38
|
+
|
|
39
|
+
### 3. Carregar contexto
|
|
40
|
+
|
|
41
|
+
1. Ler `.ai/memory/napkin.md` — decisões e padrões acumulados
|
|
42
|
+
2. Ler `docs/Desenvolvimento/retomada.md` (se existir) — ponto de retomada da última sessão
|
|
43
|
+
3. Ler `docs/Estrutura/` (se existir) — contexto global do projeto
|
|
44
|
+
4. Ler `docs/Desenvolvimento/rules.md` — regras de desenvolvimento
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Identidade do Projeto
|
|
49
|
+
|
|
50
|
+
Este é um projeto que utiliza desenvolvimento **spec-first** assistido por IA.
|
|
51
|
+
Nenhum código é escrito sem especificação aprovada (SDD).
|
|
52
|
+
|
|
53
|
+
### Arquitetura: Projeto-base vs Repos de código
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
ESTE REPO (projeto-base) = ORQUESTRADOR
|
|
57
|
+
├── docs/ ← specs, PRDs, SDDs, tasks (fonte de verdade)
|
|
58
|
+
├── projetos.yaml ← manifesto de repos
|
|
59
|
+
└── projetos/ ← repos de código (gitignored, cada um com .git próprio)
|
|
60
|
+
├── api/ ← repo: org/projeto-api
|
|
61
|
+
├── web/ ← repo: org/projeto-web
|
|
62
|
+
└── worker/ ← repo: org/projeto-worker
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Regra clara**:
|
|
66
|
+
- **Specs, docs, tasks, progresso** → ficam NESTE repo (projeto-base)
|
|
67
|
+
- **Código, testes, Dockerfiles, CI** → ficam nos repos em `projetos/`
|
|
68
|
+
- **Commits de código** → nos repos do serviço, NUNCA no projeto-base
|
|
69
|
+
- **Git workflow (branches, PRs, merge)** → se aplica aos repos em `projetos/`
|
|
70
|
+
|
|
71
|
+
## Pipeline do Workflow
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
docs/PM/ (qualquer arquivo)
|
|
75
|
+
↓ /setup-projeto (uma vez) ou /feature (por feature)
|
|
76
|
+
/sf-discovery → análise profunda dos insumos (RECOMENDADO, opcional)
|
|
77
|
+
↓
|
|
78
|
+
/extract → PRD ou TRD (checkpoint — usuário revisa e aprova)
|
|
79
|
+
↓
|
|
80
|
+
/design → SDD + projetos.yaml + docs/Estrutura/ (setup)
|
|
81
|
+
↓
|
|
82
|
+
/plan → *_tasks.md + Progresso.md (tasks com campo Repo:)
|
|
83
|
+
↓
|
|
84
|
+
/dev → INFRA-001 cria repos → código nos repos (Security Review pós-dev)
|
|
85
|
+
↓
|
|
86
|
+
/merge-delta → docs/Estrutura/ atualizado (apenas para features)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Commands disponíveis (slash commands)
|
|
90
|
+
|
|
91
|
+
| Command | Tipo | O que faz |
|
|
92
|
+
|---------|------|-----------|
|
|
93
|
+
| `/setup-projeto` | Orquestrador | Bootstrap: cria .context.md, chama /extract, para no checkpoint. Roda UMA vez |
|
|
94
|
+
| `/feature <nome>` | Orquestrador | Feature: cria .context.md tipo PRD, chama /extract, para no checkpoint |
|
|
95
|
+
| `/discovery <path>` | Utilitária | Análise profunda dos insumos (RECOMENDADO antes do /extract) |
|
|
96
|
+
| `/extract <nome>` | Atômico | Lê docs/PM/{nome}/ → gera PRD ou TRD. Re-executável para novos insumos |
|
|
97
|
+
| `/design <nome>` | Atômico | Pergunta aprovação → gera SDD a partir do PRD/TRD |
|
|
98
|
+
| `/plan <nome>` | Atômico | Lê SDD → gera tasks por área + Progresso.md |
|
|
99
|
+
| `/dev <nome>` | Atômico | Implementa tasks com loop (implement → test → review). Agents por área |
|
|
100
|
+
| `/merge-delta <nome>` | Atômico | Aplica SDD §11 Delta Specs em docs/Estrutura/ |
|
|
101
|
+
| `/pausar` | Utilitária | Encerra sessão: salva estado, atualiza napkin, gera retomada.md |
|
|
102
|
+
|
|
103
|
+
## Agents especializados (usados pelo /dev)
|
|
104
|
+
|
|
105
|
+
| Agent | Área | Stack padrão | Perfil |
|
|
106
|
+
|-------|------|-------------|--------|
|
|
107
|
+
| Backend Coder | BACK | .NET 8 / C# | `.claude/agents/backend-coder.md` |
|
|
108
|
+
| Frontend Coder | FRONT | React + Fusion | `.claude/agents/frontend-coder.md` |
|
|
109
|
+
| DB Coder | BANCO | PostgreSQL 16 | `.claude/agents/db-coder.md` |
|
|
110
|
+
| Infra Coder | INFRA | Docker | `.claude/agents/infra-coder.md` |
|
|
111
|
+
| Doc Writer | DOC | — | `.claude/agents/doc-writer.md` |
|
|
112
|
+
| Reviewer | Todas | — | `.claude/agents/reviewer.md` |
|
|
113
|
+
| Security Reviewer | Todas | — | `.claude/agents/security-reviewer.md` |
|
|
114
|
+
|
|
115
|
+
## Estado da pipeline (`.context.md`)
|
|
116
|
+
|
|
117
|
+
Cada feature/setup tem um `.context.md` em `docs/Desenvolvimento/{nome}/`:
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
not_started → extract_done → approved → design_done → plan_done → dev_in_progress → dev_done → done
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Antes de executar qualquer command, verificar o status no `.context.md`. Cada command só avança se o status anterior está correto. Apenas commands atualizam `.context.md` — o usuário nunca edita manualmente.
|
|
124
|
+
|
|
125
|
+
## Regras Invioláveis
|
|
126
|
+
|
|
127
|
+
1. **Spec-first**: NUNCA gerar código sem SDD aprovado
|
|
128
|
+
2. **PM é sagrado**: NUNCA modificar arquivos em `docs/PM/`
|
|
129
|
+
3. **Extração rígida**: categorias fixas do template, sem texto narrativo, ambiguidades são BLOQUEANTES
|
|
130
|
+
4. **SDD é auto-contido**: coder lê APENAS SDD + task, NUNCA PRD/PM diretamente
|
|
131
|
+
5. **Memória ativa**: ler napkin.md no início, atualizar ao descobrir padrões/armadilhas
|
|
132
|
+
6. **Progresso atualizado**: atualizar Progresso.md ao concluir cada task
|
|
133
|
+
7. **Delta Specs**: todo SDD tem §11 ADDED/MODIFIED/REMOVED — obrigatório
|
|
134
|
+
8. **Testes junto com código**: implementar e testar na mesma task, não separar
|
|
135
|
+
9. **Não commitar sem pedir**: sempre perguntar antes de commitar
|
|
136
|
+
|
|
137
|
+
## Estrutura de Documentação
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
docs/
|
|
141
|
+
├── PM/ ← Insumos brutos (QUALQUER formato — nunca modificar)
|
|
142
|
+
│ ├── setup_projeto/ ← Insumos de bootstrap
|
|
143
|
+
│ └── feat_*/ ← Insumos por feature
|
|
144
|
+
├── _templates/ ← 18 templates (feature/7 + estrutura/8 + global/1 + projetos.yaml + backlog + extract-log)
|
|
145
|
+
├── Estrutura/ ← Retrato global do projeto (gerado pelo /design)
|
|
146
|
+
└── Desenvolvimento/ ← Artefatos por feature
|
|
147
|
+
├── rules.md ← Regras de desenvolvimento
|
|
148
|
+
└── {nome}/ ← PRD/TRD, SDD, *_tasks.md, Progresso.md, .context.md, .extract-log.md
|
|
149
|
+
projetos/ ← Repos de serviços (gitignored, cada um com .git próprio)
|
|
150
|
+
projetos.yaml ← Manifesto: serviço → repo → áreas → stack
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Convenções
|
|
154
|
+
|
|
155
|
+
- **Pastas**: `feat_nome`, `bug_nome`, `task_nome` (snake_case com prefixo)
|
|
156
|
+
- **Task IDs**: `AREA-NNN` (BANCO-001, BACK-001, FRONT-001)
|
|
157
|
+
- **Regras de negócio**: `RN-NNN` (IDs estáveis, nunca renumerar)
|
|
158
|
+
- **Commits**: `tipo(TASK-ID): descrição` (feat, fix, refactor, test, docs, chore)
|
|
159
|
+
- **Branches**: `feature/feat_nome`, `bugfix/bug_nome`, `task/task_nome`
|
|
160
|
+
|
|
161
|
+
## Quando Parar e Perguntar
|
|
162
|
+
|
|
163
|
+
- `docs/PM/{nome}/` vazio ou inexistente → PARAR
|
|
164
|
+
- Ambiguidade na extração → listar como pergunta BLOQUEANTE, PARAR
|
|
165
|
+
- `.context.md` com status incompatível com o command → PARAR, informar status atual
|
|
166
|
+
- Task com dependência não concluída → avisar, não pular
|
|
167
|
+
- Dúvida sobre regra de negócio → perguntar, NUNCA assumir
|
|
168
|
+
- Quality gate reprovado 3x → escalar pro usuário
|
|
169
|
+
|
|
170
|
+
## Arquivos Sensíveis
|
|
171
|
+
|
|
172
|
+
### NUNCA modificar
|
|
173
|
+
- `docs/PM/**/*` — Insumos brutos. Somente leitura.
|
|
174
|
+
- `.env`, `.env.*` — Secrets.
|
|
175
|
+
- `docs/Estrutura/ADRs.md` — ADRs aceitas são imutáveis (apenas adicionar novas).
|
|
176
|
+
|
|
177
|
+
### Requerem aprovação
|
|
178
|
+
- `docs/Estrutura/*` — Só alterar via /merge-delta após /dev.
|
|
179
|
+
- `docs/Desenvolvimento/rules.md` — Alteração explícita.
|
|
180
|
+
- `CLAUDE.md` — Meta-regras. Alteração requer aprovação.
|
|
181
|
+
- `.claude/commands/*`, `.claude/agents/*` — Alteração requer aprovação.
|
|
182
|
+
|
|
183
|
+
### Formato rígido (gerados por commands)
|
|
184
|
+
- `.context.md` — YAML frontmatter, apenas commands atualizam.
|
|
185
|
+
- `.extract-log.md` — Append-only, hashes obrigatórios.
|
|
186
|
+
- `PRD.md`, `TRD.md`, `sdd.md` — Seguir template exato.
|
|
187
|
+
- `*_tasks.md` — IDs sequenciais, campos obrigatórios.
|
|
188
|
+
- `Progresso.md` — Tabelas com formato fixo.
|
|
189
|
+
|
|
190
|
+
## Referências
|
|
191
|
+
|
|
192
|
+
| Doc | Onde |
|
|
193
|
+
|-----|------|
|
|
194
|
+
| Rules de dev | `docs/Desenvolvimento/rules.md` |
|
|
195
|
+
| Memória | `.ai/memory/napkin.md` |
|
|
196
|
+
| Commands | `.claude/commands/*.md` |
|
|
197
|
+
| Agents | `.claude/agents/*.md` |
|
|
198
|
+
| Templates | `docs/_templates/` |
|
|
199
|
+
| Estrutura do sistema | `docs/Estrutura/*.md` (após setup) |
|
|
File without changes
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# Regras de Desenvolvimento
|
|
2
|
+
|
|
3
|
+
> Regras que todos os agentes de desenvolvimento devem seguir.
|
|
4
|
+
> Lido pelo Coder/Senior Coder e Reviewer antes de cada task.
|
|
5
|
+
> Aplicado globalmente a todas as features.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<!--
|
|
10
|
+
=============================================================================
|
|
11
|
+
INSTRUÇÕES PARA O AGENTE (não incluir no arquivo gerado)
|
|
12
|
+
=============================================================================
|
|
13
|
+
|
|
14
|
+
QUANDO LER: Toda vez que /dev executar uma task. Obrigatório.
|
|
15
|
+
QUEM LÊ: Coder, Senior Coder e Reviewer.
|
|
16
|
+
COMO USAR: Regras aqui são LEI — não são sugestões. Violações reprovam a task no quality gate.
|
|
17
|
+
|
|
18
|
+
PERSONALIZAÇÃO: Este arquivo é editado manualmente pelo time.
|
|
19
|
+
As regras abaixo são o padrão do framework. O time pode:
|
|
20
|
+
- Adicionar regras específicas da stack
|
|
21
|
+
- Remover regras que não se aplicam
|
|
22
|
+
- Ajustar convenções ao projeto
|
|
23
|
+
|
|
24
|
+
=============================================================================
|
|
25
|
+
-->
|
|
26
|
+
|
|
27
|
+
## Regras Invioláveis
|
|
28
|
+
|
|
29
|
+
1. **Spec-first**: Nenhuma task pode ser executada sem SDD aprovado
|
|
30
|
+
2. **SDD é a fonte**: O coder lê APENAS o SDD + task — nunca consulta PRD ou PM diretamente
|
|
31
|
+
3. **Um commit por task**: Cada task gera exatamente 1 commit
|
|
32
|
+
4. **Sem invenção**: Se o SDD não especifica, o coder NÃO assume — para e reporta
|
|
33
|
+
5. **Entregáveis contínuos**: Toda feature é faseada em entregáveis incrementais. Cada fase entrega valor ao usuário e pode ir para produção independentemente. Nunca "tudo ou nada" — sempre "pequeno e constante"
|
|
34
|
+
6. **Nunca na main**: Todo código é desenvolvido em branch própria. Merge apenas via PR aprovado pelo usuário
|
|
35
|
+
|
|
36
|
+
## Convenções de Código
|
|
37
|
+
|
|
38
|
+
### Padrão geral
|
|
39
|
+
- Todo código segue as convenções de `docs/Estrutura/Stack.md`
|
|
40
|
+
- Nomes em inglês (código) — documentação em português
|
|
41
|
+
- Sem código morto (comentado) — se não usa, apaga
|
|
42
|
+
- Sem secrets hardcoded — sempre variáveis de ambiente
|
|
43
|
+
|
|
44
|
+
### Backend
|
|
45
|
+
- Testes obrigatórios: mínimo happy path + 1 cenário de erro
|
|
46
|
+
- Validação de input na borda (controller/handler) — não no service
|
|
47
|
+
- Erros de negócio: usar códigos definidos em `docs/Estrutura/API.md`
|
|
48
|
+
- Tipos explícitos (sem `any`, `object`, `dynamic` genéricos)
|
|
49
|
+
|
|
50
|
+
### Frontend
|
|
51
|
+
- Componentes tipados com props documentadas
|
|
52
|
+
- Estados explícitos: loading, empty, error, success
|
|
53
|
+
- Sem lógica de negócio no componente — delegar para hooks/services
|
|
54
|
+
|
|
55
|
+
### Banco de dados
|
|
56
|
+
- Toda migration tem rollback testado
|
|
57
|
+
- Execução sequencial — nunca pular migrations
|
|
58
|
+
- Seeds apenas para ambiente de desenvolvimento
|
|
59
|
+
|
|
60
|
+
## Convenções de Git
|
|
61
|
+
|
|
62
|
+
> **Escopo**: Estas regras se aplicam aos **repositórios em `projetos/`** (api, web, worker, etc.).
|
|
63
|
+
> O projeto-base em si é o orquestrador — specs e docs ficam aqui, código fica nos repos.
|
|
64
|
+
|
|
65
|
+
### Commits
|
|
66
|
+
```
|
|
67
|
+
tipo(TASK-ID): descrição curta
|
|
68
|
+
|
|
69
|
+
Corpo opcional com detalhes.
|
|
70
|
+
|
|
71
|
+
Refs: feat_cadastro_cliente
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
| Tipo | Quando usar |
|
|
75
|
+
|------|-------------|
|
|
76
|
+
| `feat` | Nova funcionalidade |
|
|
77
|
+
| `fix` | Correção de bug |
|
|
78
|
+
| `refactor` | Mudança sem alterar comportamento |
|
|
79
|
+
| `test` | Adição/alteração de testes |
|
|
80
|
+
| `docs` | Documentação |
|
|
81
|
+
| `chore` | Configuração, build, CI |
|
|
82
|
+
|
|
83
|
+
### Branches
|
|
84
|
+
```
|
|
85
|
+
feature/feat_cadastro_cliente
|
|
86
|
+
feature/feat_mvp_fase1
|
|
87
|
+
bugfix/bug_cpf_duplicado
|
|
88
|
+
task/task_otimizar_listagem
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
| Regra | Descrição |
|
|
92
|
+
|-------|-----------|
|
|
93
|
+
| Base | Sempre a partir de `main` atualizada (origin) |
|
|
94
|
+
| Merge | Via Pull Request aprovado pelo usuário — NUNCA merge automático |
|
|
95
|
+
| Conflitos | Resolver antes de mergear — nunca force push em branch compartilhada |
|
|
96
|
+
|
|
97
|
+
### Git Workflow (5 passos obrigatórios)
|
|
98
|
+
|
|
99
|
+
O /dev DEVE seguir este fluxo para CADA fase de entrega:
|
|
100
|
+
|
|
101
|
+
#### Passo 1 — Antes de codar
|
|
102
|
+
```bash
|
|
103
|
+
# Verificar working tree limpo
|
|
104
|
+
git status
|
|
105
|
+
# Se há mudanças pendentes → sugerir commit ou stash antes de prosseguir
|
|
106
|
+
# NUNCA começar a codar com working tree sujo
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
#### Passo 2 — Criar branch
|
|
110
|
+
```bash
|
|
111
|
+
# Atualizar main a partir do remote
|
|
112
|
+
git checkout main
|
|
113
|
+
git pull origin main
|
|
114
|
+
|
|
115
|
+
# Criar branch para a fase
|
|
116
|
+
git checkout -b feature/{nome}_fase{N}
|
|
117
|
+
# Ex: feature/feat_mvp_fase1
|
|
118
|
+
```
|
|
119
|
+
- Branch criada no **repo do serviço** (projetos/api, projetos/web, etc.)
|
|
120
|
+
- Se a fase afeta múltiplos repos → branch com mesmo nome em cada um
|
|
121
|
+
- NUNCA desenvolver direto na main
|
|
122
|
+
|
|
123
|
+
#### Passo 3 — Ao terminar a fase
|
|
124
|
+
```bash
|
|
125
|
+
# Atualizar Progresso.md com status da fase
|
|
126
|
+
# Push da branch
|
|
127
|
+
git push origin feature/{nome}_fase{N}
|
|
128
|
+
|
|
129
|
+
# Abrir PR com template detalhado (ver seção abaixo)
|
|
130
|
+
gh pr create --title "..." --body "..."
|
|
131
|
+
```
|
|
132
|
+
- Deixar ambiente local **rodando** (docker compose up + dotnet run + npm run dev)
|
|
133
|
+
- Informar ao usuário que o ambiente está ON para testes manuais
|
|
134
|
+
|
|
135
|
+
#### Passo 4 — Aguardar aprovação
|
|
136
|
+
```
|
|
137
|
+
⏸️ PARAR e aguardar.
|
|
138
|
+
- O usuário revisa o PR, testa manualmente o ambiente local
|
|
139
|
+
- Merge é MANUAL — o agente NUNCA faz merge
|
|
140
|
+
- Se o usuário pedir ajustes → corrigir na mesma branch, push, atualizar PR
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
#### Passo 5 — Após merge (quando usuário confirmar)
|
|
144
|
+
```bash
|
|
145
|
+
# Atualizar main local
|
|
146
|
+
git checkout main
|
|
147
|
+
git pull origin main
|
|
148
|
+
|
|
149
|
+
# Limpar branches mergeadas
|
|
150
|
+
git branch -d feature/{nome}_fase{N}
|
|
151
|
+
git remote prune origin
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Template de Pull Request
|
|
155
|
+
|
|
156
|
+
Todo PR aberto pelo /dev DEVE seguir este formato:
|
|
157
|
+
|
|
158
|
+
```markdown
|
|
159
|
+
## Fase {N} — {Nome da fase}
|
|
160
|
+
|
|
161
|
+
### O que foi entregue
|
|
162
|
+
- [ ] {Entregável 1 da fase}
|
|
163
|
+
- [ ] {Entregável 2 da fase}
|
|
164
|
+
|
|
165
|
+
### Tasks concluídas
|
|
166
|
+
| Task | Descrição | Testes |
|
|
167
|
+
|------|-----------|--------|
|
|
168
|
+
| BACK-001 | Criar endpoint X | ✅ unit + integration |
|
|
169
|
+
| BANCO-001 | Migration tabela Y | ✅ rollback testado |
|
|
170
|
+
| FRONT-001 | Tela de cadastro | ✅ unit |
|
|
171
|
+
|
|
172
|
+
### Testes
|
|
173
|
+
- ✅ Unit tests passando ({N}/{N})
|
|
174
|
+
- ✅ Integration tests passando ({N}/{N})
|
|
175
|
+
- ✅ Security Review aprovado
|
|
176
|
+
- ⬜ E2E (aguardando teste manual do usuário)
|
|
177
|
+
|
|
178
|
+
### Como testar manualmente
|
|
179
|
+
1. Ambiente já está rodando em:
|
|
180
|
+
- API: http://localhost:8080
|
|
181
|
+
- Web: http://localhost:3000
|
|
182
|
+
- Banco: localhost:5432
|
|
183
|
+
2. Fluxo para testar:
|
|
184
|
+
- {Passo 1 do teste manual}
|
|
185
|
+
- {Passo 2 do teste manual}
|
|
186
|
+
- {Resultado esperado}
|
|
187
|
+
|
|
188
|
+
### Observações
|
|
189
|
+
- {Decisões tomadas, trade-offs, pontos de atenção}
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Quality Gate (por task)
|
|
193
|
+
|
|
194
|
+
> Checklist obrigatório. O Reviewer valida TODOS os itens antes de aprovar.
|
|
195
|
+
|
|
196
|
+
- [ ] Código compila sem erros
|
|
197
|
+
- [ ] Testes passam (se aplicável à task)
|
|
198
|
+
- [ ] Lint limpo (sem warnings não justificados)
|
|
199
|
+
- [ ] Critérios de aceite da task atendidos (ref SDD §9)
|
|
200
|
+
- [ ] Sem TODOs no código sem justificativa
|
|
201
|
+
- [ ] Sem secrets hardcoded
|
|
202
|
+
- [ ] Commit segue convenção: `tipo(TASK-ID): descrição`
|
|
203
|
+
- [ ] Arquivos listados na task foram os únicos modificados (sem side effects)
|
|
204
|
+
|
|
205
|
+
## Regras por Stack
|
|
206
|
+
|
|
207
|
+
> Seção opcional. Adicionar regras específicas da tecnologia escolhida.
|
|
208
|
+
> Exemplos abaixo — remover/ajustar conforme o projeto.
|
|
209
|
+
|
|
210
|
+
<!--
|
|
211
|
+
### Node.js / TypeScript
|
|
212
|
+
- ESLint + Prettier como formatador
|
|
213
|
+
- Strict mode no tsconfig
|
|
214
|
+
- Path aliases configurados (@/modules, @/shared)
|
|
215
|
+
|
|
216
|
+
### Python
|
|
217
|
+
- Ruff como linter/formatter
|
|
218
|
+
- Type hints obrigatórios (mypy strict)
|
|
219
|
+
- Virtual environment (venv ou poetry)
|
|
220
|
+
|
|
221
|
+
### React / Next.js
|
|
222
|
+
- Server Components por padrão, Client Components só quando necessário
|
|
223
|
+
- Zustand ou Context para estado global (não Redux)
|
|
224
|
+
- Tailwind CSS para estilos
|
|
225
|
+
-->
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
> **Atualização**: Editado manualmente pelo time. Aplicado globalmente a todas as features.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|