spec-first-copilot 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/.github/agents/backend-coder.md +215 -0
- package/templates/.github/agents/db-coder.md +165 -0
- package/templates/.github/agents/doc-writer.md +51 -0
- package/templates/.github/agents/frontend-coder.md +222 -0
- package/templates/.github/agents/infra-coder.md +341 -0
- package/templates/.github/agents/reviewer.md +99 -0
- package/templates/.github/agents/security-reviewer.md +153 -0
- package/templates/.github/copilot-instructions.md +176 -0
- package/templates/.github/instructions/docs.instructions.md +123 -0
- package/templates/.github/instructions/sensitive-files.instructions.md +32 -0
- package/templates/.github/skills/sf-design/SKILL.md +181 -0
- package/templates/.github/skills/sf-dev/SKILL.md +326 -0
- package/templates/.github/skills/sf-discovery/SKILL.md +405 -0
- package/templates/.github/skills/sf-extract/SKILL.md +284 -0
- package/templates/.github/skills/sf-feature/SKILL.md +130 -0
- package/templates/.github/skills/sf-merge-delta/SKILL.md +142 -0
- package/templates/.github/skills/sf-pausar/SKILL.md +120 -0
- package/templates/.github/skills/sf-plan/SKILL.md +178 -0
- package/templates/.github/skills/sf-setup-projeto/SKILL.md +123 -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,176 @@
|
|
|
1
|
+
# Copilot Instructions — Projeto
|
|
2
|
+
|
|
3
|
+
> Regras globais que o agente deve seguir em TODAS as interações neste projeto.
|
|
4
|
+
> Este arquivo é 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: seções Decisões, Padrões, Armadilhas, Preferências (máx 10 itens/seção) |
|
|
15
|
+
| Templates | `docs/_templates/` | ERRO — projeto não está configurado |
|
|
16
|
+
| Skills | `.github/skills/` | ERRO — projeto não está configurado |
|
|
17
|
+
| Agents | `.github/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 todas skills
|
|
22
|
+
|
|
23
|
+
Verificar que TODAS as 9 skills estão acessíveis:
|
|
24
|
+
|
|
25
|
+
| Skill | Caminho |
|
|
26
|
+
|-------|---------|
|
|
27
|
+
| `/sf-setup-projeto` | `.github/skills/sf-setup-projeto/SKILL.md` |
|
|
28
|
+
| `/sf-feature` | `.github/skills/sf-feature/SKILL.md` |
|
|
29
|
+
| `/sf-extract` | `.github/skills/sf-extract/SKILL.md` |
|
|
30
|
+
| `/sf-design` | `.github/skills/sf-design/SKILL.md` |
|
|
31
|
+
| `/sf-plan` | `.github/skills/sf-plan/SKILL.md` |
|
|
32
|
+
| `/sf-dev` | `.github/skills/sf-dev/SKILL.md` |
|
|
33
|
+
| `/sf-merge-delta` | `.github/skills/sf-merge-delta/SKILL.md` |
|
|
34
|
+
| `/sf-pausar` | `.github/skills/sf-pausar/SKILL.md` |
|
|
35
|
+
| `/sf-discovery` | `.github/skills/sf-discovery/SKILL.md` |
|
|
36
|
+
|
|
37
|
+
Se alguma skill não for encontrada → 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
|
+
|
|
52
|
+
### Arquitetura: Projeto-base vs Repos de código
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
ESTE REPO (projeto-base) = ORQUESTRADOR
|
|
56
|
+
├── docs/ ← specs, PRDs, SDDs, tasks (fonte de verdade)
|
|
57
|
+
├── projetos.yaml ← manifesto de repos
|
|
58
|
+
└── projetos/ ← repos de código (gitignored, cada um com .git próprio)
|
|
59
|
+
├── api/ ← repo: org/projeto-api
|
|
60
|
+
├── web/ ← repo: org/projeto-web
|
|
61
|
+
└── worker/ ← repo: org/projeto-worker
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Regra clara**:
|
|
65
|
+
- **Specs, docs, tasks, progresso** → ficam NESTE repo (projeto-base)
|
|
66
|
+
- **Código, testes, Dockerfiles, CI** → ficam nos repos em `projetos/`
|
|
67
|
+
- **Commits de código** → nos repos do serviço, NUNCA no projeto-base
|
|
68
|
+
- **Git workflow (branches, PRs, merge)** → se aplica aos repos em `projetos/`
|
|
69
|
+
Nenhum código é escrito sem especificação aprovada (SDD).
|
|
70
|
+
|
|
71
|
+
## Pipeline do Workflow
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
docs/PM/ (qualquer arquivo)
|
|
75
|
+
↓ /sf-setup-projeto (uma vez) ou /sf-feature (por feature)
|
|
76
|
+
/sf-discovery → análise profunda dos insumos (RECOMENDADO, opcional)
|
|
77
|
+
↓
|
|
78
|
+
/sf-extract → PRD ou TRD (checkpoint — usuário revisa e aprova)
|
|
79
|
+
↓
|
|
80
|
+
/sf-design → SDD + projetos.yaml + docs/Estrutura/ (setup)
|
|
81
|
+
↓
|
|
82
|
+
/sf-plan → *_tasks.md + Progresso.md (tasks por fase × área)
|
|
83
|
+
↓
|
|
84
|
+
/sf-dev → código nos repos (Security Review pós-dev)
|
|
85
|
+
↓
|
|
86
|
+
/sf-merge-delta → docs/Estrutura/ atualizado (apenas para features)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Skills disponíveis
|
|
90
|
+
|
|
91
|
+
| Skill | Tipo | O que faz |
|
|
92
|
+
|-------|------|-----------|
|
|
93
|
+
| `/sf-setup-projeto` | Orquestrador | Bootstrap: cria .context.md, chama /sf-extract, para no checkpoint. Roda UMA vez |
|
|
94
|
+
| `/sf-feature <nome>` | Orquestrador | Feature: cria .context.md tipo PRD, chama /sf-extract, para no checkpoint |
|
|
95
|
+
| `/sf-extract <nome>` | Atômica | Lê docs/PM/{nome}/ → gera PRD ou TRD. Re-executável para novos insumos |
|
|
96
|
+
| `/sf-design <nome>` | Atômica | Pergunta aprovação → gera SDD a partir do PRD/TRD |
|
|
97
|
+
| `/sf-plan <nome>` | Atômica | Lê SDD → gera tasks por área + Progresso.md |
|
|
98
|
+
| `/sf-dev <nome>` | Atômica | Implementa tasks com loop (implement → test → review). Agents por área |
|
|
99
|
+
| `/sf-merge-delta <nome>` | Atômica | Aplica SDD §11 Delta Specs em docs/Estrutura/ |
|
|
100
|
+
| `/sf-pausar` | Utilitária | Encerra sessão: salva estado, atualiza napkin, gera retomada.md |
|
|
101
|
+
| `/sf-discovery` | Utilitária | Análise profunda de sistemas, arquiteturas e documentações |
|
|
102
|
+
|
|
103
|
+
## Agents especializados (usados pelo /dev)
|
|
104
|
+
|
|
105
|
+
| Agent | Área | Stack padrão | Perfil |
|
|
106
|
+
|-------|------|-------------|--------|
|
|
107
|
+
| Backend Coder | BACK | .NET 8 / C# | `.github/agents/backend-coder.md` |
|
|
108
|
+
| Frontend Coder | FRONT | React + Fusion | `.github/agents/frontend-coder.md` |
|
|
109
|
+
| DB Coder | BANCO | PostgreSQL 16 | `.github/agents/db-coder.md` |
|
|
110
|
+
| Infra Coder | INFRA | Docker | `.github/agents/infra-coder.md` |
|
|
111
|
+
| Doc Writer | DOC | — | `.github/agents/doc-writer.md` |
|
|
112
|
+
| Reviewer | Todas | — | `.github/agents/reviewer.md` |
|
|
113
|
+
| Security Reviewer | Todas | — | `.github/agents/security-reviewer.md` |
|
|
114
|
+
|
|
115
|
+
## Estado da pipeline (`.context.md`)
|
|
116
|
+
|
|
117
|
+
Cada feature/setup tem um `.context.md` em `docs/Desenvolvimento/{nome}/` que controla o fluxo:
|
|
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 skill, verificar o status no `.context.md`. Cada skill só avança se o status anterior está correto.
|
|
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
|
+
|
|
136
|
+
## Estrutura de Documentação
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
docs/
|
|
140
|
+
├── PM/ ← Insumos brutos (QUALQUER formato — nunca modificar)
|
|
141
|
+
│ ├── setup_projeto/ ← Insumos de bootstrap
|
|
142
|
+
│ └── feat_*/ ← Insumos por feature
|
|
143
|
+
├── _templates/ ← 16 templates (feature/7 + estrutura/8 + global/1)
|
|
144
|
+
├── Estrutura/ ← Retrato global do projeto (gerado por /setup-projeto via tasks DOC)
|
|
145
|
+
└── Desenvolvimento/ ← Artefatos por feature
|
|
146
|
+
├── rules.md ← Regras de desenvolvimento
|
|
147
|
+
└── {nome}/ ← PRD/TRD, SDD, *_tasks.md, Progresso.md, .context.md, .extract-log.md
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Convenções
|
|
151
|
+
|
|
152
|
+
- **Pastas**: `feat_nome`, `bug_nome`, `task_nome` (snake_case com prefixo)
|
|
153
|
+
- **Task IDs**: `AREA-NNN` (BANCO-001, BACK-001, FRONT-001)
|
|
154
|
+
- **Regras de negócio**: `RN-NNN` (IDs estáveis, nunca renumerar)
|
|
155
|
+
- **Commits**: `tipo(TASK-ID): descrição` (feat, fix, refactor, test, docs, chore)
|
|
156
|
+
- **Branches**: `feature/feat_nome`, `bugfix/bug_nome`, `task/task_nome`
|
|
157
|
+
|
|
158
|
+
## Quando Parar e Perguntar
|
|
159
|
+
|
|
160
|
+
- `docs/PM/{nome}/` vazio ou inexistente → PARAR
|
|
161
|
+
- Ambiguidade na extração → listar como pergunta BLOQUEANTE, PARAR
|
|
162
|
+
- `.context.md` com status incompatível com a skill → PARAR, informar status atual
|
|
163
|
+
- Task com dependência não concluída → avisar, não pular
|
|
164
|
+
- Dúvida sobre regra de negócio → perguntar, NUNCA assumir
|
|
165
|
+
- Quality gate reprovado 3x → escalar pro usuário
|
|
166
|
+
|
|
167
|
+
## Referências
|
|
168
|
+
|
|
169
|
+
| Doc | Onde |
|
|
170
|
+
|-----|------|
|
|
171
|
+
| Rules de dev | `docs/Desenvolvimento/rules.md` |
|
|
172
|
+
| Memória | `.ai/memory/napkin.md` |
|
|
173
|
+
| Skills | `.github/skills/*.md` |
|
|
174
|
+
| Agents | `.github/agents/*.md` |
|
|
175
|
+
| Templates | `docs/_templates/` |
|
|
176
|
+
| Estrutura do sistema | `docs/Estrutura/*.md` (após setup) |
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Instruções — Documentação e Specs
|
|
2
|
+
|
|
3
|
+
> Regras para o agente ao trabalhar com a camada de documentação.
|
|
4
|
+
> Complementa `copilot-instructions.md` com detalhes operacionais.
|
|
5
|
+
|
|
6
|
+
## Skills e fluxo
|
|
7
|
+
|
|
8
|
+
O pipeline é executado por skills atômicas, cada uma com seu arquivo em `.github/skills/`:
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
/setup-projeto → /extract → /design → /plan → /dev → /merge-delta
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Cada skill tem pré-condições, passos e saídas documentados. **Sempre ler a skill antes de executar.**
|
|
15
|
+
|
|
16
|
+
## Estado da pipeline (`.context.md`)
|
|
17
|
+
|
|
18
|
+
Cada feature/setup tem um `.context.md` (YAML frontmatter) que controla o fluxo:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
not_started → extract_done → approved → design_done → plan_done → dev_in_progress → dev_done → done
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
- **Apenas skills atualizam** `.context.md` — o usuário nunca edita manualmente
|
|
25
|
+
- **Aprovação** acontece no início do `/design` (skill pergunta ao usuário)
|
|
26
|
+
- Antes de executar qualquer skill, verificar status no `.context.md`
|
|
27
|
+
|
|
28
|
+
## Extração (/extract)
|
|
29
|
+
|
|
30
|
+
Cada tipo de projeto tem seu documento de extração:
|
|
31
|
+
|
|
32
|
+
| Comando | Documento | Template | Foco |
|
|
33
|
+
|---------|----------|---------|------|
|
|
34
|
+
| `/setup-projeto` | TRD.md | `_templates/feature/TRD.template.md` | Stack, arquitetura, infra, modelo base |
|
|
35
|
+
| `/feature` | PRD.md | `_templates/feature/PRD.template.md` | Regras de negócio, jornadas, telas |
|
|
36
|
+
|
|
37
|
+
### Multi-agent no /extract
|
|
38
|
+
|
|
39
|
+
| Agente | Modelo | Papel |
|
|
40
|
+
|--------|--------|-------|
|
|
41
|
+
| Reader (1 por arquivo) | Sonnet | Lê e cataloga 1 arquivo por vez, em paralelo |
|
|
42
|
+
| Analyzer | Opus | Cruza fontes, detecta gaps/contradições, gera documento final |
|
|
43
|
+
|
|
44
|
+
### Regras da extração
|
|
45
|
+
|
|
46
|
+
- Ler TODOS arquivos em `docs/PM/{nome}/` (qualquer formato: .md, .txt, .sql, .html, .xml, .csv, .png, .pdf)
|
|
47
|
+
- Categorias FIXAS do template — não inventar seções novas
|
|
48
|
+
- Regras de negócio com IDs únicos e estáveis (RN-001, RN-002 — nunca renumerar)
|
|
49
|
+
- Ambiguidades = BLOQUEANTES (workflow para até responder)
|
|
50
|
+
- Nunca INFERIR regra de negócio — se não está explícito, é ambiguidade
|
|
51
|
+
- Contradições entre arquivos → ambiguidade citando ambos
|
|
52
|
+
- Rastreabilidade obrigatória: cada informação aponta pro arquivo fonte
|
|
53
|
+
- Arquivo não identificável → registrar como NÃO IDENTIFICADO no extract-log, gerar ambiguidade
|
|
54
|
+
- Gerar `.extract-log.md` com hash SHA-256 (8 chars) por arquivo
|
|
55
|
+
|
|
56
|
+
### Re-extração
|
|
57
|
+
|
|
58
|
+
- Compara hashes com `.extract-log.md` existente → NOVO / MODIFICADO / INALTERADO
|
|
59
|
+
- Merge ADITIVO (nunca remove info de arquivos inalterados)
|
|
60
|
+
- Novas regras continuam sequência de IDs (se último era RN-005, próximo é RN-006)
|
|
61
|
+
|
|
62
|
+
## Design (/design)
|
|
63
|
+
|
|
64
|
+
1. Verificar aprovação do PRD/TRD (perguntar ao usuário)
|
|
65
|
+
2. Verificar ambiguidades — todas devem estar respondidas
|
|
66
|
+
3. Ler PRD/TRD + `docs/Estrutura/` + `rules.md`
|
|
67
|
+
4. Gerar SDD usando `_templates/feature/sdd.template.md`
|
|
68
|
+
5. SDD deve ser **auto-contido** — coder lê APENAS SDD + task, nada mais
|
|
69
|
+
6. Toda regra referencia seção do PRD/TRD (rastreabilidade)
|
|
70
|
+
7. §9 Estratégia de Testes: definir framework, estrutura, CAs mapeados a testes
|
|
71
|
+
8. §11 Delta Specs: obrigatório (ADDED/MODIFIED/REMOVED)
|
|
72
|
+
9. Seções N/A permitidas em setup (§4-§8 podem ser N/A)
|
|
73
|
+
|
|
74
|
+
## Planejamento (/plan)
|
|
75
|
+
|
|
76
|
+
1. Ler SDD completo + `docs/Estrutura/` + `rules.md`
|
|
77
|
+
2. Áreas são DINÂMICAS — determinadas pelo SDD, não pré-definidas
|
|
78
|
+
3. Para cada área → gerar `{area}_tasks.md` usando `_templates/feature/tasks.template.md`
|
|
79
|
+
4. Tasks em fases sequenciais com prioridade P1/P2/P3
|
|
80
|
+
5. Cada task: ID (AREA-NNN), título, tamanho (S/M/L), arquivos, ref SDD §N, depende, testes
|
|
81
|
+
6. Gerar `Progresso.md` com ordem de execução e paralelismos
|
|
82
|
+
7. Em setup: área DOC obrigatória (8 tasks, 1 por doc de Estrutura)
|
|
83
|
+
|
|
84
|
+
## Desenvolvimento (/dev)
|
|
85
|
+
|
|
86
|
+
### Agents por área (perfis em `.github/agents/`)
|
|
87
|
+
|
|
88
|
+
| Área | Agente | Stack padrão |
|
|
89
|
+
|------|--------|-------------|
|
|
90
|
+
| BANCO | DB Coder | PostgreSQL 16 |
|
|
91
|
+
| BACK | Backend Coder | .NET 8 / C# |
|
|
92
|
+
| FRONT | Frontend Coder | React + Fusion |
|
|
93
|
+
| INFRA | Infra Coder | Docker |
|
|
94
|
+
| DOC | Doc Writer | — |
|
|
95
|
+
| Todas | Reviewer | — |
|
|
96
|
+
|
|
97
|
+
### Loop de desenvolvimento
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
Por task: implement → test unit → fix → lint → commit → review → fix → review (max 3)
|
|
101
|
+
Por fase: integration tests → fix
|
|
102
|
+
Por feature: E2E tests (CAs) → fix → dev_done
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Regras
|
|
106
|
+
|
|
107
|
+
- Implement + testes na mesma task (não separar)
|
|
108
|
+
- Agente selecionado pelo prefixo: BACK-* → Backend Coder
|
|
109
|
+
- Modelo por tamanho: S/M → Sonnet, L → Opus
|
|
110
|
+
- 1 commit por task: `tipo(TASK-ID): descrição`
|
|
111
|
+
- Quality gate validado pelo Reviewer após cada task
|
|
112
|
+
- Limite de retry: 3 reprovações → escalar pro usuário
|
|
113
|
+
|
|
114
|
+
## /setup-projeto vs /feature
|
|
115
|
+
|
|
116
|
+
| Aspecto | /setup-projeto | /feature |
|
|
117
|
+
|---------|---------------|----------|
|
|
118
|
+
| Input | `docs/PM/setup_projeto/` | `docs/PM/feat_nome/` |
|
|
119
|
+
| Extração | TRD.md (técnico) | PRD.md (produto) |
|
|
120
|
+
| SDD + Tasks | Sim (infra + DOC tasks) | Sim (feature tasks) |
|
|
121
|
+
| Gera docs/Estrutura/ | Via tasks DOC | Não — atualiza via /merge-delta |
|
|
122
|
+
| /merge-delta | Não se aplica | Obrigatório após /dev |
|
|
123
|
+
| Pré-requisito | Nenhum (primeiro comando) | docs/Estrutura/ deve existir |
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Instruções para Arquivos Sensíveis
|
|
2
|
+
|
|
3
|
+
> Regras especiais para arquivos que requerem cuidado extra.
|
|
4
|
+
|
|
5
|
+
## Arquivos que NUNCA devem ser modificados pelo agente
|
|
6
|
+
|
|
7
|
+
- `docs/PM/**/*` — Insumos brutos do usuário. Somente leitura.
|
|
8
|
+
- `.env`, `.env.*` — Variáveis de ambiente com secrets.
|
|
9
|
+
- `docs/Estrutura/ADRs.md` — ADRs aceitas são imutáveis (apenas adicionar novas).
|
|
10
|
+
|
|
11
|
+
## Arquivos que requerem aprovação antes de modificar
|
|
12
|
+
|
|
13
|
+
- `docs/Estrutura/*` — Documentação global. Só alterar via /merge-delta após /dev.
|
|
14
|
+
- `docs/Desenvolvimento/rules.md` — Regras de desenvolvimento. Alteração deve ser explícita.
|
|
15
|
+
- `.github/copilot-instructions.md` — Meta-regras. Alteração requer aprovação.
|
|
16
|
+
- `.github/skills/*` — Skills do workflow. Alteração requer aprovação.
|
|
17
|
+
- `.github/agents/*` — Perfis de agentes. Alteração requer aprovação.
|
|
18
|
+
|
|
19
|
+
## Arquivos com formato rígido (gerados por skills)
|
|
20
|
+
|
|
21
|
+
- `docs/Desenvolvimento/*/.context.md` — YAML frontmatter, apenas skills atualizam.
|
|
22
|
+
- `docs/Desenvolvimento/*/.extract-log.md` — Append-only, hashes obrigatórios.
|
|
23
|
+
- `docs/Desenvolvimento/*/PRD.md` ou `TRD.md` — Seguir template exato.
|
|
24
|
+
- `docs/Desenvolvimento/*/sdd.md` — Seguir template, todas as 11 seções + rastreabilidade.
|
|
25
|
+
- `docs/Desenvolvimento/*/*_tasks.md` — IDs sequenciais, campos obrigatórios.
|
|
26
|
+
- `docs/Desenvolvimento/*/Progresso.md` — Tabelas com formato fixo.
|
|
27
|
+
|
|
28
|
+
## Arquivos que nunca devem conter secrets
|
|
29
|
+
|
|
30
|
+
- Qualquer arquivo `.md` em docs/
|
|
31
|
+
- `docker-compose.yml` — usar variáveis de ambiente, não valores diretos
|
|
32
|
+
- Código fonte — usar `appsettings.json` + environment variables, não hardcoded
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sf-design
|
|
3
|
+
description: |
|
|
4
|
+
Design técnico. Gera SDD a partir do PRD/TRD aprovado.
|
|
5
|
+
Trigger: /sf-design
|
|
6
|
+
author: GustavoMaritan
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
date: 2026-04-08
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Skill: /sf-design
|
|
12
|
+
|
|
13
|
+
> Skill atômica de design técnico. Lê PRD/TRD aprovado e gera SDD.
|
|
14
|
+
> Responsável pelo checkpoint de aprovação do documento de extração.
|
|
15
|
+
|
|
16
|
+
## Tipo
|
|
17
|
+
Atômica — Single-agent
|
|
18
|
+
|
|
19
|
+
## Uso
|
|
20
|
+
```
|
|
21
|
+
/sf-design <nome>
|
|
22
|
+
```
|
|
23
|
+
Exemplo: `/sf-design feat_cadastro_cliente`
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Agente
|
|
28
|
+
|
|
29
|
+
| Campo | Valor |
|
|
30
|
+
|-------|-------|
|
|
31
|
+
| **Papel** | Arquiteto de software — transforma requisitos aprovados em especificação técnica implementável |
|
|
32
|
+
| **Modelo** | Opus |
|
|
33
|
+
| **Comportamento** | Técnico e preciso. Gera contratos completos (JSON schemas, SQL DDL, componentes com estados). Toda decisão tem justificativa. Se o PRD/TRD tem gaps, não inventa — para e reporta. |
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Pré-condições
|
|
38
|
+
|
|
39
|
+
| # | Validação | Se falhar |
|
|
40
|
+
|---|-----------|-----------|
|
|
41
|
+
| 1 | Argumento `nome` foi informado | Parar → "Informe o nome. Ex: /sf-design feat_cadastro_cliente" |
|
|
42
|
+
| 2 | `docs/Desenvolvimento/{nome}/.context.md` existe | Parar → "Execute /sf-feature {nome} ou /sf-setup-projeto primeiro" |
|
|
43
|
+
| 3 | Status é `extract_done` ou `approved` | Se anterior → "Execute /sf-extract primeiro". Se posterior → "SDD já foi gerado (status: {status})" |
|
|
44
|
+
| 4 | PRD.md ou TRD.md existe na pasta | Parar → "Documento de extração não encontrado. Execute /sf-extract {nome}" |
|
|
45
|
+
| 5 | `docs/Estrutura/` está populado (para features) | Parar → "Execute /sf-setup-projeto primeiro" (não aplica para tipo=setup) |
|
|
46
|
+
|
|
47
|
+
## Passos
|
|
48
|
+
|
|
49
|
+
### 1. Checkpoint de aprovação
|
|
50
|
+
Se status é `extract_done` (não `approved`):
|
|
51
|
+
```
|
|
52
|
+
Pergunta ao usuário:
|
|
53
|
+
"O {PRD/TRD} em docs/Desenvolvimento/{nome}/ foi revisado e está aprovado? (s/n)"
|
|
54
|
+
|
|
55
|
+
Se SIM → atualizar .context.md status: approved → continuar
|
|
56
|
+
Se NÃO → parar → "Revise o documento e chame /sf-design {nome} quando estiver pronto"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 2. Verificar ambiguidades
|
|
60
|
+
Ler seção de ambiguidades do PRD (§13) ou TRD (§9):
|
|
61
|
+
- Se há perguntas sem resposta → **PARAR**
|
|
62
|
+
- Listar as ambiguidades pendentes
|
|
63
|
+
- Instruir: "Responda as ambiguidades no documento e chame /sf-design {nome} novamente"
|
|
64
|
+
|
|
65
|
+
### 3. Gerar docs/Estrutura/ (APENAS para setup)
|
|
66
|
+
|
|
67
|
+
> Este passo só executa quando tipo=setup. Para features, docs/Estrutura/ já existe.
|
|
68
|
+
|
|
69
|
+
Ler TRD e gerar os 8 docs de `docs/Estrutura/` usando os templates correspondentes:
|
|
70
|
+
|
|
71
|
+
| TRD Seção | Doc gerado | Template |
|
|
72
|
+
|-----------|-----------|---------|
|
|
73
|
+
| §1 Visão + §8 Módulos | Visao.md | `_templates/estrutura/Visao.template.md` |
|
|
74
|
+
| §2 Stack | Stack.md | `_templates/estrutura/Stack.template.md` |
|
|
75
|
+
| §3 Arquitetura | Arquitetura.md | `_templates/estrutura/Arquitetura.template.md` |
|
|
76
|
+
| §4 Modelo de Dados | Modelo_Dados.md | `_templates/estrutura/Modelo_Dados.template.md` |
|
|
77
|
+
| §5 API | API.md | `_templates/estrutura/API.template.md` |
|
|
78
|
+
| §6 Infra | Infraestrutura.md | `_templates/estrutura/Infraestrutura.template.md` |
|
|
79
|
+
| §7 Segurança | Seguranca.md | `_templates/estrutura/Seguranca.template.md` |
|
|
80
|
+
| SDD §2 (após gerar) | ADRs.md | `_templates/estrutura/ADRs.template.md` |
|
|
81
|
+
|
|
82
|
+
Regras:
|
|
83
|
+
- Ler template → preencher TODAS seções com dados do TRD
|
|
84
|
+
- Remover bloco `<!-- INSTRUÇÕES -->` do doc gerado
|
|
85
|
+
- Changelog inicia vazio (primeira geração)
|
|
86
|
+
- Se TRD não tem dados pra uma seção → marcar "A definir"
|
|
87
|
+
- ADRs.md é gerado APÓS o SDD (usa §2 Decisões de Design)
|
|
88
|
+
|
|
89
|
+
### 3b. Gerar `projetos.yaml` (APENAS para setup)
|
|
90
|
+
|
|
91
|
+
> Mapeia a arquitetura do TRD §3 para repositórios independentes.
|
|
92
|
+
> Cada serviço = 1 repo. Os repos serão criados/clonados pelo /sf-dev (INFRA-001).
|
|
93
|
+
|
|
94
|
+
Ler TRD §3 (Arquitetura) e §6 (Infra) para identificar os serviços:
|
|
95
|
+
|
|
96
|
+
1. Identificar serviços separados (api, worker, web, mobile, etc.)
|
|
97
|
+
2. Perguntar ao usuário:
|
|
98
|
+
- Organização/usuário do GitHub (ex: `empresa`)
|
|
99
|
+
- Nome base do projeto (ex: `meu-projeto`)
|
|
100
|
+
- Se algum repo já existe (para clonar em vez de criar)
|
|
101
|
+
3. Gerar `projetos.yaml` na raiz usando template `projetos.template.yaml`
|
|
102
|
+
4. Mapear áreas de task para repos:
|
|
103
|
+
- BACK → api (ou worker, se separado)
|
|
104
|
+
- BANCO → api (se usa EF migrations) ou repo próprio
|
|
105
|
+
- FRONT → web
|
|
106
|
+
- MOBILE → mobile
|
|
107
|
+
- INFRA → todos (cross-repo)
|
|
108
|
+
5. Validar: cada área DEVE mapear para exatamente 1 repo
|
|
109
|
+
|
|
110
|
+
**Regra**: Se o TRD indica API e Worker como serviços separados, DEVEM ser repos separados.
|
|
111
|
+
Nunca juntar serviços que o TRD definiu como distintos.
|
|
112
|
+
|
|
113
|
+
### 4. Carregar contexto
|
|
114
|
+
- Ler PRD.md ou TRD.md completo (conforme `.context.md`)
|
|
115
|
+
- Ler `docs/Estrutura/` completo (agora já populado, mesmo no setup)
|
|
116
|
+
- Ler `docs/Desenvolvimento/rules.md` (convenções de desenvolvimento)
|
|
117
|
+
- Carregar template `docs/_templates/feature/sdd.template.md`
|
|
118
|
+
|
|
119
|
+
### 5. Gerar SDD
|
|
120
|
+
Produzir `sdd.md` com as 11 seções obrigatórias:
|
|
121
|
+
|
|
122
|
+
| Seção | Conteúdo | Fonte principal |
|
|
123
|
+
|-------|----------|-----------------|
|
|
124
|
+
| §1 Visão geral | O que, escopo, premissas | PRD §1 / TRD §1 |
|
|
125
|
+
| §2 Decisões de design | Mini-ADRs com justificativa | Arquitetura + análise do agente |
|
|
126
|
+
| §3 Modelo de dados | Entidades com tipos exatos, constraints, migrations | PRD §3 + Modelo_Dados.md |
|
|
127
|
+
| §4 Regras e validações | Ref PRD §5 RN-NNN, mensagens de erro | PRD §5 + §6 |
|
|
128
|
+
| §5 Endpoints API | Contratos completos: request/response JSON, status codes | PRD §4 + API.md |
|
|
129
|
+
| §6 Componentes e telas | Estados (loading/empty/error), componentes, comportamentos | PRD §7 |
|
|
130
|
+
| §7 Fluxos de dados | Sequências usuário→front→back, caminhos de erro | PRD §4 + §9 |
|
|
131
|
+
| §8 Integrações externas | Protocolo, timeout, retry, fallback | PRD §8 |
|
|
132
|
+
| §9 Estratégia de testes | Framework, estrutura, CAs mapeados a testes | PRD §4 + §10 |
|
|
133
|
+
| §10 Fora do escopo | Lista explícita do que NÃO será feito | PRD §12 |
|
|
134
|
+
| §11 Delta Specs | ADDED/MODIFIED/REMOVED para merge em docs/Estrutura/ | Análise do agente |
|
|
135
|
+
|
|
136
|
+
**Regras de geração:**
|
|
137
|
+
1. SDD deve ser **auto-contido** — o coder lê APENAS o SDD + task, nunca PRD/PM
|
|
138
|
+
2. Toda regra/entidade referencia seção do PRD/TRD (rastreabilidade)
|
|
139
|
+
3. Seções não aplicáveis marcadas `N/A — [motivo]` (ex: §6 em setup sem UI)
|
|
140
|
+
4. Contratos de API com JSON schema completo (request, response, erros)
|
|
141
|
+
5. Modelo de dados com tipos exatos, não genéricos (varchar(255), não "string")
|
|
142
|
+
6. Critérios de aceite testáveis — Given/When/Then, não frases vagas
|
|
143
|
+
7. Delta Specs sempre preenchida, mesmo que vazia (ADDED: nenhum)
|
|
144
|
+
|
|
145
|
+
### 6. Gerar ADRs.md (setup — complemento do passo 3)
|
|
146
|
+
Após gerar SDD §2, criar ADRs.md com as decisões iniciais de arquitetura.
|
|
147
|
+
|
|
148
|
+
### 7. Atualizar `.context.md`
|
|
149
|
+
```yaml
|
|
150
|
+
status: "design_done"
|
|
151
|
+
ultima_skill: "/sf-design"
|
|
152
|
+
atualizado_em: "{{ISO_DATETIME}}"
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Saídas
|
|
158
|
+
|
|
159
|
+
| Arquivo | Descrição |
|
|
160
|
+
|---------|-----------|
|
|
161
|
+
| `sdd.md` | Especificação técnica completa e auto-contida |
|
|
162
|
+
| `projetos.yaml` | (setup) Manifesto de repos — mapeamento serviço → repo → áreas |
|
|
163
|
+
| `docs/Estrutura/*.md` | (setup) 8 docs globais preenchidos do TRD |
|
|
164
|
+
| `.context.md` | Atualizado: `approved` → `design_done` |
|
|
165
|
+
|
|
166
|
+
## Pós-condições
|
|
167
|
+
- SDD é fonte única de verdade para implementação
|
|
168
|
+
- Toda informação para implementar está no SDD — nenhuma consulta externa necessária
|
|
169
|
+
- Rastreabilidade: SDD → PRD/TRD → insumos
|
|
170
|
+
|
|
171
|
+
## Erros
|
|
172
|
+
|
|
173
|
+
| Erro | Ação |
|
|
174
|
+
|------|------|
|
|
175
|
+
| Nome não informado | Parar, mostrar exemplo |
|
|
176
|
+
| Status anterior a extract_done | Parar, sugerir /sf-extract |
|
|
177
|
+
| Status posterior a approved | Informar que SDD já foi gerado |
|
|
178
|
+
| Ambiguidades pendentes no PRD/TRD | Parar, listar ambiguidades |
|
|
179
|
+
| PRD/TRD não encontrado | Parar, sugerir /sf-extract |
|
|
180
|
+
| docs/Estrutura/ vazio (em features) | Parar, sugerir /sf-setup-projeto |
|
|
181
|
+
| Informação insuficiente no PRD/TRD para gerar seção | NÃO inventar — marcar seção como incompleta, reportar ao usuário |
|