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.
Files changed (45) hide show
  1. package/bin/cli.js +52 -0
  2. package/package.json +25 -0
  3. package/templates/.ai/memory/napkin.md +68 -0
  4. package/templates/.github/agents/backend-coder.md +215 -0
  5. package/templates/.github/agents/db-coder.md +165 -0
  6. package/templates/.github/agents/doc-writer.md +51 -0
  7. package/templates/.github/agents/frontend-coder.md +222 -0
  8. package/templates/.github/agents/infra-coder.md +341 -0
  9. package/templates/.github/agents/reviewer.md +99 -0
  10. package/templates/.github/agents/security-reviewer.md +153 -0
  11. package/templates/.github/copilot-instructions.md +176 -0
  12. package/templates/.github/instructions/docs.instructions.md +123 -0
  13. package/templates/.github/instructions/sensitive-files.instructions.md +32 -0
  14. package/templates/.github/skills/sf-design/SKILL.md +181 -0
  15. package/templates/.github/skills/sf-dev/SKILL.md +326 -0
  16. package/templates/.github/skills/sf-discovery/SKILL.md +405 -0
  17. package/templates/.github/skills/sf-extract/SKILL.md +284 -0
  18. package/templates/.github/skills/sf-feature/SKILL.md +130 -0
  19. package/templates/.github/skills/sf-merge-delta/SKILL.md +142 -0
  20. package/templates/.github/skills/sf-pausar/SKILL.md +120 -0
  21. package/templates/.github/skills/sf-plan/SKILL.md +178 -0
  22. package/templates/.github/skills/sf-setup-projeto/SKILL.md +123 -0
  23. package/templates/docs/Desenvolvimento/.gitkeep +0 -0
  24. package/templates/docs/Desenvolvimento/rules.md +229 -0
  25. package/templates/docs/Estrutura/.gitkeep +0 -0
  26. package/templates/docs/PM/.gitkeep +0 -0
  27. package/templates/docs/PM/setup_projeto/.gitkeep +0 -0
  28. package/templates/docs/_templates/estrutura/ADRs.template.md +91 -0
  29. package/templates/docs/_templates/estrutura/API.template.md +144 -0
  30. package/templates/docs/_templates/estrutura/Arquitetura.template.md +82 -0
  31. package/templates/docs/_templates/estrutura/Infraestrutura.template.md +104 -0
  32. package/templates/docs/_templates/estrutura/Modelo_Dados.template.md +99 -0
  33. package/templates/docs/_templates/estrutura/Seguranca.template.md +138 -0
  34. package/templates/docs/_templates/estrutura/Stack.template.md +78 -0
  35. package/templates/docs/_templates/estrutura/Visao.template.md +82 -0
  36. package/templates/docs/_templates/feature/PRD.template.md +256 -0
  37. package/templates/docs/_templates/feature/Progresso.template.md +136 -0
  38. package/templates/docs/_templates/feature/TRD.template.md +200 -0
  39. package/templates/docs/_templates/feature/backlog-extraido.template.md +154 -0
  40. package/templates/docs/_templates/feature/context.template.md +42 -0
  41. package/templates/docs/_templates/feature/extract-log.template.md +38 -0
  42. package/templates/docs/_templates/feature/projetos.template.yaml +73 -0
  43. package/templates/docs/_templates/feature/sdd.template.md +372 -0
  44. package/templates/docs/_templates/feature/tasks.template.md +115 -0
  45. 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 |