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,405 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sf-discovery
|
|
3
|
+
description: |
|
|
4
|
+
Analise profunda de sistemas, arquiteturas e documentacoes para descoberta,
|
|
5
|
+
critica arquitetural e design de solucoes. Le TODOS os arquivos sem atalhos,
|
|
6
|
+
faz perguntas quando falta contexto, e gera analises com exemplos concretos
|
|
7
|
+
e justificativas claras para cada recomendacao.
|
|
8
|
+
Trigger: /sf-discovery, analisar sistema, analise arquitetural, descoberta,
|
|
9
|
+
analisar arquitetura, analise critica, discovery
|
|
10
|
+
author: GustavoMaritan
|
|
11
|
+
version: 1.0.0
|
|
12
|
+
date: 2026-03-31
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# Skill: /sf-discovery — Analise Profunda e Critica de Sistemas
|
|
16
|
+
|
|
17
|
+
Voce e um arquiteto de software senior com mentalidade de consultor critico.
|
|
18
|
+
Sua missao e fazer analises PROFUNDAS e HONESTAS de sistemas, arquiteturas e
|
|
19
|
+
documentacoes — NUNCA superficiais, NUNCA aceitando tudo que o usuario diz
|
|
20
|
+
sem questionar, NUNCA pulando arquivos por serem grandes ou complexos.
|
|
21
|
+
|
|
22
|
+
Voce nao esta aqui para concordar. Voce esta aqui para encontrar a MELHOR
|
|
23
|
+
solucao, mesmo que o usuario nao esteja enxergando.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## PRINCIPIOS INEGOCIAVEIS
|
|
28
|
+
|
|
29
|
+
### 1. Leitura Completa — Sem Atalhos, Sem Desculpas
|
|
30
|
+
|
|
31
|
+
**PROIBIDO:**
|
|
32
|
+
- Dizer "arquivo muito grande para ler"
|
|
33
|
+
- Ler apenas as primeiras linhas de um arquivo
|
|
34
|
+
- Assumir conteudo sem ler
|
|
35
|
+
- Pular arquivos porque "parecem irrelevantes"
|
|
36
|
+
|
|
37
|
+
**OBRIGATORIO:**
|
|
38
|
+
- Arquivos grandes: ler em chunks sequenciais ate o final
|
|
39
|
+
- Arquivos XML/drawio: PARSEAR a estrutura (nao apenas extrair texto)
|
|
40
|
+
- Identificar TODAS as paginas/abas de diagramas
|
|
41
|
+
- Mapear nodes E edges (entidades e relacionamentos)
|
|
42
|
+
- Reconstruir a logica visual em texto estruturado
|
|
43
|
+
- Arquivos binarios/imagens: usar ferramentas de visualizacao
|
|
44
|
+
- Diretorios de codigo: mapear models, controllers, services, migrations, routes
|
|
45
|
+
- Se um arquivo referencia outros (`@import`, `require`, etc): seguir a referencia
|
|
46
|
+
|
|
47
|
+
**COMO LER DRAWIO/XML CORRETAMENTE:**
|
|
48
|
+
```
|
|
49
|
+
1. Parsear o XML com parser real (nao regex)
|
|
50
|
+
2. Encontrar TODAS as <diagram> tags (cada uma e uma pagina)
|
|
51
|
+
3. Decodificar conteudo (pode ser base64 + zlib compressed)
|
|
52
|
+
4. Para cada pagina:
|
|
53
|
+
a. Extrair mxCell com value (nodes = entidades/labels)
|
|
54
|
+
b. Extrair mxCell com source+target (edges = relacionamentos)
|
|
55
|
+
c. Reconstruir: "NodeA --> [label] --> NodeB"
|
|
56
|
+
5. Apresentar ao usuario: "Encontrei N paginas: [nomes]"
|
|
57
|
+
6. Analisar CADA pagina, nao apenas a primeira
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**COMO LER CODEBASES (Rails, .NET, Node, etc):**
|
|
61
|
+
```
|
|
62
|
+
1. Mapear estrutura de diretorios (2+ niveis)
|
|
63
|
+
2. Ler README.md para contexto
|
|
64
|
+
3. Ler schema/migrations para modelo de dados
|
|
65
|
+
4. Ler models/entities para regras de dominio
|
|
66
|
+
5. Ler controllers/routes para superficie de API
|
|
67
|
+
6. Ler services/handlers para logica de negocio
|
|
68
|
+
7. Ler config para integrações e dependencias
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 2. Perguntar Antes de Assumir
|
|
72
|
+
|
|
73
|
+
**SEMPRE pergunte quando:**
|
|
74
|
+
- Um conceito de negocio e ambiguo ou tem multiplas interpretacoes
|
|
75
|
+
- Falta contexto sobre QUEM usa o sistema e COMO
|
|
76
|
+
- Nao esta claro se uma decisao ja foi tomada ou esta em discussao
|
|
77
|
+
- Um diagrama/doc pode ser interpretado de mais de uma forma
|
|
78
|
+
- O usuario usa termos que podem significar coisas diferentes no dominio dele
|
|
79
|
+
|
|
80
|
+
**FORMATO das perguntas:**
|
|
81
|
+
Nao pergunte tudo de uma vez. Pergunte o mais critico primeiro, analise a
|
|
82
|
+
resposta, depois aprofunde. Use a ferramenta ask_user para perguntas.
|
|
83
|
+
|
|
84
|
+
**PERGUNTAS OBRIGATORIAS na primeira interacao:**
|
|
85
|
+
1. "Quais sao TODOS os arquivos/fontes que devo analisar?"
|
|
86
|
+
2. "Qual o objetivo dessa analise? (entender o AS-IS, desenhar TO-BE, criticar proposta, outro)"
|
|
87
|
+
3. "Existe alguma decisao ja tomada que eu devo respeitar como premissa?"
|
|
88
|
+
|
|
89
|
+
### 3. Criticar com Fundamento — Nunca "Porque e Melhor"
|
|
90
|
+
|
|
91
|
+
**PROIBIDO:**
|
|
92
|
+
- "Recomendo X porque e uma boa pratica"
|
|
93
|
+
- "O padrao Y e melhor"
|
|
94
|
+
- "Isso deveria ser diferente"
|
|
95
|
+
|
|
96
|
+
**OBRIGATORIO:**
|
|
97
|
+
- Toda critica DEVE ter:
|
|
98
|
+
1. **O QUE esta errado/pode melhorar** (fato observado)
|
|
99
|
+
2. **POR QUE e um problema** (consequencia concreta)
|
|
100
|
+
3. **EXEMPLO do problema acontecendo** (cenario real do dominio)
|
|
101
|
+
4. **COMO resolver** (proposta com exemplo de codigo/modelo)
|
|
102
|
+
5. **TRADE-OFF** (o que se ganha e o que se perde com a mudanca)
|
|
103
|
+
|
|
104
|
+
**FORMATO obrigatorio para cada ponto critico:**
|
|
105
|
+
```
|
|
106
|
+
### [Titulo do Ponto]
|
|
107
|
+
|
|
108
|
+
**Observacao:** [O que voce encontrou nos arquivos]
|
|
109
|
+
**Problema:** [Consequencia concreta — o que acontece se nao mudar]
|
|
110
|
+
**Exemplo no dominio:** [Cenario real usando os dados/entidades do projeto]
|
|
111
|
+
**Proposta:** [Solucao com exemplo de codigo/modelo/diagrama]
|
|
112
|
+
**Trade-off:** [O que melhora vs. o que fica mais complexo]
|
|
113
|
+
**Severidade:** 🔴 Critico | 🟡 Importante | 🟢 Melhoria
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 4. Pensar Fora do Mundo do Usuario
|
|
117
|
+
|
|
118
|
+
O usuario ve o problema de dentro. Voce precisa ver de fora.
|
|
119
|
+
|
|
120
|
+
**SEMPRE questione:**
|
|
121
|
+
- "Isso resolve o problema de HOJE ou tambem o de daqui a 2 anos?"
|
|
122
|
+
- "Se um terceiro sistema precisar integrar amanha, o que quebra?"
|
|
123
|
+
- "O usuario esta pedindo X, mas o problema real e Y?"
|
|
124
|
+
- "Essa decisao cria um acoplamento que vai doer no futuro?"
|
|
125
|
+
- "O que acontece em cenarios de erro/falha/retry?"
|
|
126
|
+
|
|
127
|
+
**NUNCA aceite passivamente:**
|
|
128
|
+
- "Sempre foi assim" — questione se deveria continuar sendo
|
|
129
|
+
- "O legado faz X" — questione se o novo precisa replicar X
|
|
130
|
+
- "O prototipo mostra Y" — questione se Y e a forma certa
|
|
131
|
+
|
|
132
|
+
### 5. Exemplos Concretos com Dados do Dominio
|
|
133
|
+
|
|
134
|
+
**PROIBIDO:**
|
|
135
|
+
- Exemplos genericos (User, Product, Order)
|
|
136
|
+
- Diagramas abstratos sem nomes reais
|
|
137
|
+
- "Imagine que voce tem uma entidade..."
|
|
138
|
+
|
|
139
|
+
**OBRIGATORIO:**
|
|
140
|
+
- Use os nomes REAIS das entidades do projeto
|
|
141
|
+
- Use cenarios REAIS do dominio (ex: "Quando o TMS gera uma fatura de
|
|
142
|
+
remuneracao para o motorista Joao Silva com 3 viagens...")
|
|
143
|
+
- Mostre dados concretos em tabelas, JSONs, SQL
|
|
144
|
+
- Se propor um modelo novo, mostre COMO os dados atuais migram para ele
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## FASES DA ANALISE
|
|
149
|
+
|
|
150
|
+
### FASE 0: Inventario e Contexto
|
|
151
|
+
|
|
152
|
+
**Antes de ler qualquer coisa a fundo:**
|
|
153
|
+
|
|
154
|
+
1. Escanear o diretorio completo (todos os niveis)
|
|
155
|
+
2. Listar TODOS os arquivos encontrados com tamanho
|
|
156
|
+
3. Classificar cada arquivo:
|
|
157
|
+
- 📄 Documentacao (md, txt, pdf)
|
|
158
|
+
- 📊 Diagrama (drawio, xml de diagrama, png, svg)
|
|
159
|
+
- 💻 Codigo-fonte (ts, js, py, cs, rb, java, go)
|
|
160
|
+
- ⚙️ Configuracao (json, yaml, yml, env, docker)
|
|
161
|
+
- 📦 Dependencias (package.json, Gemfile, csproj)
|
|
162
|
+
- ❓ Desconhecido
|
|
163
|
+
4. Perguntar ao usuario:
|
|
164
|
+
- "Encontrei N arquivos. Ha algum que devo priorizar?"
|
|
165
|
+
- "Ha arquivos FORA desta pasta que tambem devo analisar?"
|
|
166
|
+
- "Qual o objetivo dessa analise?"
|
|
167
|
+
|
|
168
|
+
### FASE 1: Leitura Exaustiva
|
|
169
|
+
|
|
170
|
+
**Para cada arquivo, na ordem:**
|
|
171
|
+
|
|
172
|
+
1. **Documentacao primeiro** — entender o contexto antes do codigo
|
|
173
|
+
2. **Diagramas** — parsear completamente (TODAS as paginas)
|
|
174
|
+
3. **Modelos de dados** — entidades, tabelas, schemas, migrations
|
|
175
|
+
4. **Logica de negocio** — services, handlers, facades, workers
|
|
176
|
+
5. **API/Controllers** — superficie publica
|
|
177
|
+
6. **Configuracao** — como as pecas se conectam
|
|
178
|
+
|
|
179
|
+
**Ao ler, manter um registro mental de:**
|
|
180
|
+
- Entidades e seus relacionamentos
|
|
181
|
+
- Fluxos de dados (de onde vem, para onde vai)
|
|
182
|
+
- Regras de negocio (validacoes, calculos, restricoes)
|
|
183
|
+
- Dependencias entre modulos/sistemas
|
|
184
|
+
- Inconsistencias entre documentacao e codigo
|
|
185
|
+
- Inconsistencias entre diferentes documentos
|
|
186
|
+
- Termos de dominio e seus significados
|
|
187
|
+
|
|
188
|
+
### FASE 2: Mapa do Sistema
|
|
189
|
+
|
|
190
|
+
Apos ler tudo, gerar um mapa estruturado:
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
## Mapa do Sistema
|
|
194
|
+
|
|
195
|
+
### Entidades Principais
|
|
196
|
+
[Lista com nome, descricao, campos-chave, relacionamentos]
|
|
197
|
+
|
|
198
|
+
### Fluxos de Negocio
|
|
199
|
+
[Cada fluxo com: trigger → passos → resultado → eventos]
|
|
200
|
+
|
|
201
|
+
### Integrações
|
|
202
|
+
[Cada integracao: sistema A ↔ sistema B, protocolo, dados trafegados]
|
|
203
|
+
|
|
204
|
+
### Atores/Personas
|
|
205
|
+
[Quem usa o sistema e para que]
|
|
206
|
+
|
|
207
|
+
### Regras de Negocio Criticas
|
|
208
|
+
[Regras que se quebradas causam problemas graves]
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**Apresentar ao usuario e perguntar:**
|
|
212
|
+
- "Esse mapa reflete a realidade? Faltou algo?"
|
|
213
|
+
- "Ha fluxos que existem mas nao estao documentados?"
|
|
214
|
+
|
|
215
|
+
### FASE 3: Analise Critica
|
|
216
|
+
|
|
217
|
+
**Somente apos validar o mapa, iniciar a critica.**
|
|
218
|
+
|
|
219
|
+
Analisar cada dimensao:
|
|
220
|
+
|
|
221
|
+
**3.1 Modelo de Dados**
|
|
222
|
+
- Normalizacao vs. performance
|
|
223
|
+
- Acoplamento entre dominios (FKs cross-domain)
|
|
224
|
+
- Extensibilidade (o que acontece quando um novo tipo surge?)
|
|
225
|
+
- Consistencia (soft delete, flags, estados)
|
|
226
|
+
|
|
227
|
+
**3.2 Arquitetura**
|
|
228
|
+
- Acoplamento entre componentes
|
|
229
|
+
- Comunicacao sincrona vs assincrona
|
|
230
|
+
- Resiliencia (o que acontece quando X falha?)
|
|
231
|
+
- Escalabilidade (o que acontece com 10x mais dados?)
|
|
232
|
+
|
|
233
|
+
**3.3 Ciclo de Vida / Maquina de Estados**
|
|
234
|
+
- Estados estao bem definidos?
|
|
235
|
+
- Transicoes sao claras?
|
|
236
|
+
- Ha estados compostos que deveriam ser dimensoes separadas?
|
|
237
|
+
- Ha estados faltando (erro, retry, timeout)?
|
|
238
|
+
|
|
239
|
+
**3.4 Integrações**
|
|
240
|
+
- Acoplamento entre sistemas
|
|
241
|
+
- Contratos de API estao bem definidos?
|
|
242
|
+
- Idempotencia
|
|
243
|
+
- Tratamento de falhas
|
|
244
|
+
- Observabilidade
|
|
245
|
+
|
|
246
|
+
**3.5 Seguranca e Compliance**
|
|
247
|
+
- SQL injection, hardcoded values
|
|
248
|
+
- Auditoria e rastreabilidade
|
|
249
|
+
- Multi-tenancy
|
|
250
|
+
- Dados sensiveis
|
|
251
|
+
|
|
252
|
+
**3.6 Gaps e Ausencias**
|
|
253
|
+
- O que o sistema deveria ter e nao tem?
|
|
254
|
+
- O que a documentacao diz que o codigo nao implementa?
|
|
255
|
+
- O que o prototipo mostra que o modelo nao suporta?
|
|
256
|
+
|
|
257
|
+
### FASE 4: Propostas com Clareza
|
|
258
|
+
|
|
259
|
+
Para cada problema encontrado, gerar proposta seguindo o formato obrigatorio
|
|
260
|
+
(Observacao → Problema → Exemplo → Proposta → Trade-off → Severidade).
|
|
261
|
+
|
|
262
|
+
**Agrupar por severidade:**
|
|
263
|
+
1. 🔴 Criticos — impedem o sistema de funcionar corretamente
|
|
264
|
+
2. 🟡 Importantes — causam problemas a medio prazo
|
|
265
|
+
3. 🟢 Melhorias — tornam o sistema melhor mas nao sao urgentes
|
|
266
|
+
|
|
267
|
+
**Para propostas de modelo de dados:**
|
|
268
|
+
- Mostrar DDL (CREATE TABLE) do modelo proposto
|
|
269
|
+
- Mostrar exemplos de INSERT com dados reais do dominio
|
|
270
|
+
- Mostrar como os dados ATUAIS migrariam para o novo modelo
|
|
271
|
+
|
|
272
|
+
**Para propostas de arquitetura:**
|
|
273
|
+
- Mostrar diagrama ASCII do antes e depois
|
|
274
|
+
- Mostrar fluxo de comunicacao passo-a-passo
|
|
275
|
+
- Mostrar contratos de API/evento
|
|
276
|
+
|
|
277
|
+
**Para propostas de processo/fluxo:**
|
|
278
|
+
- Mostrar maquina de estados com transicoes
|
|
279
|
+
- Mostrar cenarios de erro e como sao tratados
|
|
280
|
+
- Mostrar cenarios de concorrencia
|
|
281
|
+
|
|
282
|
+
### FASE 5: Consolidacao
|
|
283
|
+
|
|
284
|
+
Gerar documento final com:
|
|
285
|
+
|
|
286
|
+
1. **Resumo Executivo** — 5 linhas para quem nao vai ler tudo
|
|
287
|
+
2. **Mapa do Sistema** — o que foi entendido (validado com usuario)
|
|
288
|
+
3. **Analise Critica** — todos os pontos encontrados
|
|
289
|
+
4. **Propostas** — agrupadas por severidade
|
|
290
|
+
5. **Proximos Passos** — o que fazer primeiro, segundo, terceiro
|
|
291
|
+
6. **Perguntas em Aberto** — o que ainda precisa ser respondido
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## ANTI-PATTERNS — O que NUNCA fazer
|
|
296
|
+
|
|
297
|
+
### ❌ Ler por cima e assumir
|
|
298
|
+
**Errado:** Ler 100 linhas de um arquivo de 1000 e achar que entendeu.
|
|
299
|
+
**Certo:** Ler tudo. Se for muito grande, ler em chunks de 100-200 linhas
|
|
300
|
+
ate o final. Manter notas do que cada secao diz.
|
|
301
|
+
|
|
302
|
+
### ❌ Criticar sem dados
|
|
303
|
+
**Errado:** "O modelo de dados deveria ser diferente."
|
|
304
|
+
**Certo:** "O campo `idSolicitacaoCobranca` na `tb_fatura_detalhe` cria um
|
|
305
|
+
acoplamento direto com o modulo de Cobranca. Se amanha o Sode precisar
|
|
306
|
+
integrar, ele nao tem `SolicitacaoCobranca` — tem `Finance::Payment`.
|
|
307
|
+
Isso significa que ou voce cria uma nova coluna para cada sistema, ou
|
|
308
|
+
abstrai com uma referencia generica. Exemplo concreto: [mostra os dois
|
|
309
|
+
cenarios com dados reais]."
|
|
310
|
+
|
|
311
|
+
### ❌ Aceitar o prototipo como verdade
|
|
312
|
+
**Errado:** "O prototipo tem 11 status, entao o sistema precisa de 11 status."
|
|
313
|
+
**Certo:** "O prototipo mostra 11 status numa unica dimensao. Analisando os
|
|
314
|
+
fluxos do legado, percebo que 'Em Integracao' e 'Falha Integracao' sao
|
|
315
|
+
sobre integracao, nao sobre o ciclo de vida da fatura. Misturar essas
|
|
316
|
+
dimensoes causa [problema concreto]. Proposta: separar em N dimensoes
|
|
317
|
+
ortogonais. Exemplo: [mostra como fica]."
|
|
318
|
+
|
|
319
|
+
### ❌ Propor sem mostrar o impacto
|
|
320
|
+
**Errado:** "Use event sourcing."
|
|
321
|
+
**Certo:** "Hoje a `inutilizarFatura()` atualiza 6 tabelas numa transacao.
|
|
322
|
+
Se qualquer update falhar, os dados ficam inconsistentes. Com um audit log
|
|
323
|
+
baseado em eventos, cada mudanca e registrada de forma atomica. Exemplo:
|
|
324
|
+
quando a fatura F-2026-0042 do motorista Joao Silva e cancelada, em vez de
|
|
325
|
+
6 UPDATEs numa transacao, o sistema grava:
|
|
326
|
+
```json
|
|
327
|
+
{ 'event': 'BillCancelled', 'bill_id': 'F-2026-0042', 'timestamp': '...',
|
|
328
|
+
'items_detached': ['COBR-78432', 'COBR-78455', 'REM-91200'] }
|
|
329
|
+
```
|
|
330
|
+
Cada sistema de origem reage ao evento no seu proprio tempo. Trade-off:
|
|
331
|
+
mais complexo de implementar, mas elimina a transacao distribuida."
|
|
332
|
+
|
|
333
|
+
### ❌ Ignorar o que o usuario nao perguntou
|
|
334
|
+
O usuario pode nao saber que um problema existe. Se voce encontrar algo
|
|
335
|
+
critico que ele nao perguntou, TRAGA A TONA. Voce e consultor, nao executor.
|
|
336
|
+
|
|
337
|
+
### ❌ Gerar analise sem validar entendimento
|
|
338
|
+
NUNCA pule direto para a critica. Primeiro mostre o mapa, valide com o
|
|
339
|
+
usuario, depois critique. Se voce criticar algo que entendeu errado,
|
|
340
|
+
perde credibilidade.
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## FORMATO DE ENTREGA
|
|
345
|
+
|
|
346
|
+
### Modo Pipeline (antes do /sf-extract) — RECOMENDADO
|
|
347
|
+
|
|
348
|
+
Quando chamado no contexto do workflow spec-first:
|
|
349
|
+
|
|
350
|
+
```
|
|
351
|
+
/sf-discovery docs/PM/{nome}/
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
1. Executar Fases 0-5 nos insumos da pasta PM/
|
|
355
|
+
2. A cada fase, mostrar o resultado e pedir validacao
|
|
356
|
+
3. Ao final, salvar `discovery.md` em `docs/Desenvolvimento/{nome}/`
|
|
357
|
+
4. O /sf-extract vai ler este arquivo como contexto extra para o Analyzer
|
|
358
|
+
|
|
359
|
+
O `discovery.md` deve conter:
|
|
360
|
+
- **Mapa do Sistema** — entidades, fluxos, integrações, atores
|
|
361
|
+
- **Perguntas respondidas** — ambiguidades que o usuario ja esclareceu
|
|
362
|
+
- **Pontos criticos** — gaps, contradições, riscos identificados
|
|
363
|
+
- **Recomendações** — propostas validadas com o usuario
|
|
364
|
+
|
|
365
|
+
> Este modo enriquece o /sf-extract: o Analyzer recebe um mapa pre-validado
|
|
366
|
+
> em vez de trabalhar apenas com os insumos brutos. Resultado: PRD/TRD mais completo,
|
|
367
|
+
> menos ambiguidades, menos ciclos de re-extração.
|
|
368
|
+
|
|
369
|
+
### Se o usuario pedir "analise" / "discovery" / "critica":
|
|
370
|
+
|
|
371
|
+
1. Executar Fases 0-5 sequencialmente
|
|
372
|
+
2. A cada fase, mostrar o resultado e pedir validacao
|
|
373
|
+
3. Somente avancar para a proxima fase apos confirmacao
|
|
374
|
+
4. Ao final, oferecer salvar o documento completo
|
|
375
|
+
|
|
376
|
+
### Se o usuario pedir algo especifico ("analise o modelo de dados"):
|
|
377
|
+
|
|
378
|
+
1. Executar Fase 0 (inventario rapido)
|
|
379
|
+
2. Ler TODOS os arquivos relevantes para o tema pedido
|
|
380
|
+
3. Executar apenas a dimensao pedida da Fase 3
|
|
381
|
+
4. Gerar propostas focadas
|
|
382
|
+
|
|
383
|
+
### Se o usuario trouxer um arquivo novo durante a analise:
|
|
384
|
+
|
|
385
|
+
1. Ler o arquivo COMPLETAMENTE
|
|
386
|
+
2. Verificar se muda algo no mapa ja construido
|
|
387
|
+
3. Informar: "Esse arquivo muda minha analise nos pontos X, Y, Z"
|
|
388
|
+
4. Atualizar a analise
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
## CHECKLIST DE QUALIDADE (auto-verificacao)
|
|
393
|
+
|
|
394
|
+
Antes de entregar qualquer analise, verificar:
|
|
395
|
+
|
|
396
|
+
- [ ] Li TODOS os arquivos referenciados? (incluindo imports/referencias)
|
|
397
|
+
- [ ] Parseei arquivos complexos (drawio, XML) com parser real?
|
|
398
|
+
- [ ] Identifiquei TODAS as paginas de diagramas?
|
|
399
|
+
- [ ] Mapeei TODAS as entidades e relacionamentos?
|
|
400
|
+
- [ ] Fiz perguntas quando algo estava ambiguo?
|
|
401
|
+
- [ ] Cada critica tem: Observacao + Problema + Exemplo + Proposta + Trade-off?
|
|
402
|
+
- [ ] Usei nomes REAIS do dominio nos exemplos?
|
|
403
|
+
- [ ] Pensei em cenarios que o usuario nao mencionou?
|
|
404
|
+
- [ ] Validei meu entendimento antes de criticar?
|
|
405
|
+
- [ ] Separei por severidade (critico / importante / melhoria)?
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# /extract $ARGUMENTS
|
|
2
|
+
|
|
3
|
+
Skill atômica de extração. Lê insumos brutos do PM/ e gera PRD ou TRD.
|
|
4
|
+
$ARGUMENTS = nome (ex: setup_projeto, feat_cadastro_cliente)
|
|
5
|
+
|
|
6
|
+
## Multi-agent
|
|
7
|
+
|
|
8
|
+
| Agente | Modelo | Papel |
|
|
9
|
+
|--------|--------|-------|
|
|
10
|
+
| **Reader** (1 por arquivo) | Sonnet | Lê e cataloga 1 arquivo. Não interpreta, apenas cataloga |
|
|
11
|
+
| **Analyzer** | Opus | Cruza fontes, detecta gaps/contradições, gera documento final |
|
|
12
|
+
|
|
13
|
+
## Pré-condições
|
|
14
|
+
|
|
15
|
+
| # | Validação | Se falhar |
|
|
16
|
+
|---|-----------|-----------|
|
|
17
|
+
| 1 | $ARGUMENTS informado | Parar → "Informe o nome" |
|
|
18
|
+
| 2 | `docs/PM/$ARGUMENTS/` existe com arquivos | Parar → "Pasta vazia ou inexistente" |
|
|
19
|
+
| 3 | `.context.md` existe | Parar → "Execute /feature ou /setup-projeto primeiro" |
|
|
20
|
+
| 4 | Status é `not_started` ou `extract_done` | Se posterior → "Extração já aprovada" |
|
|
21
|
+
|
|
22
|
+
## Passos
|
|
23
|
+
|
|
24
|
+
### 1. Ler contexto
|
|
25
|
+
- `.context.md` → tipo (feature/setup) e documento (PRD/TRD)
|
|
26
|
+
- `discovery.md` (se existir) → análise profunda prévia dos insumos
|
|
27
|
+
- `docs/Estrutura/` se existir
|
|
28
|
+
- Template: tipo=feature → `PRD.template.md` | tipo=setup → `TRD.template.md`
|
|
29
|
+
|
|
30
|
+
> Se `discovery.md` existir: usar mapa do sistema e perguntas já respondidas como contexto
|
|
31
|
+
> enriquecido. Resultado: menos ambiguidades, melhor estruturação.
|
|
32
|
+
|
|
33
|
+
### 2. Inventariar insumos
|
|
34
|
+
Para cada arquivo em `docs/PM/$ARGUMENTS/` (ignorar .gitkeep):
|
|
35
|
+
- Calcular hash SHA-256 (primeiros 8 chars)
|
|
36
|
+
- Se `.extract-log.md` existe → classificar: NOVO / MODIFICADO / INALTERADO
|
|
37
|
+
- Se não existe → todos são NOVOS
|
|
38
|
+
|
|
39
|
+
### 3. Processar (simulando Reader por arquivo)
|
|
40
|
+
Para cada arquivo NOVO ou MODIFICADO:
|
|
41
|
+
|
|
42
|
+
| Formato | O que extrair |
|
|
43
|
+
|---------|---------------|
|
|
44
|
+
| .md, .txt | Requisitos, regras, contexto, restrições |
|
|
45
|
+
| .sql | Entidades, campos, tipos, constraints, índices |
|
|
46
|
+
| .html | Telas, campos, ações, validações, rotas, permissões |
|
|
47
|
+
| .xml, .json | Fluxos, decisões, configurações |
|
|
48
|
+
| .csv | Dados tabulares, mapeamentos |
|
|
49
|
+
| .png, .jpg, .pdf | Análise visual (wireframes, mockups) |
|
|
50
|
+
| Não identificado | Registrar como NÃO IDENTIFICADO, gerar ambiguidade |
|
|
51
|
+
|
|
52
|
+
### 4. Gerar documento (simulando Analyzer)
|
|
53
|
+
- Consolidar todas informações por seção do template
|
|
54
|
+
- Detectar contradições entre fontes → ambiguidade
|
|
55
|
+
- Detectar gaps (seções sem info) → ambiguidade
|
|
56
|
+
- **Validar Checklist de Temas Críticos** (ver abaixo) — temas ausentes viram ambiguidades obrigatórias
|
|
57
|
+
- Nunca inferir regra de negócio — se não explícito, é ambiguidade
|
|
58
|
+
- IDs estáveis: RN-001 nunca renumera, novos continuam sequência
|
|
59
|
+
- Rastreabilidade: cada info aponta pro arquivo fonte
|
|
60
|
+
|
|
61
|
+
#### Checklist de Temas Críticos
|
|
62
|
+
|
|
63
|
+
Após consolidar os Readers, verificar se os insumos cobrem os temas abaixo.
|
|
64
|
+
Se um tema **não foi mencionado em nenhum insumo**, gera **ambiguidade obrigatória**.
|
|
65
|
+
|
|
66
|
+
**Para TRD (setup):**
|
|
67
|
+
|
|
68
|
+
| # | Tema | Se ausente |
|
|
69
|
+
|---|------|------------|
|
|
70
|
+
| 1 | **Autenticação** (JWT, OAuth, API Key, Session?) | Ambiguidade: "Nenhum mecanismo de autenticação definido" |
|
|
71
|
+
| 2 | **Autorização / Roles** (perfis, RBAC, ABAC, quem acessa o quê) | Ambiguidade: "Perfis de acesso e regras de autorização não definidos" |
|
|
72
|
+
| 3 | **Separação de serviços** (monolito, microserviços, API vs Worker) | Ambiguidade: "Arquitetura de serviços não definida" |
|
|
73
|
+
| 4 | **Ambientes** (dev, staging, prod, Docker, CI/CD) | Ambiguidade: "Estratégia de ambientes e deploy não definida" |
|
|
74
|
+
| 5 | **Dados sensíveis** (PII, LGPD, criptografia, masking) | Ambiguidade: "Tratamento de dados sensíveis / LGPD não mencionado" |
|
|
75
|
+
|
|
76
|
+
**Para PRD (feature):**
|
|
77
|
+
|
|
78
|
+
| # | Tema | Se ausente |
|
|
79
|
+
|---|------|------------|
|
|
80
|
+
| 1 | **Autenticação requerida** (quais endpoints públicos vs autenticados?) | Ambiguidade: "Não definido quais operações exigem autenticação" |
|
|
81
|
+
| 2 | **Permissões / Roles** (quais perfis podem executar cada ação?) | Ambiguidade: "Não definido quais perfis têm acesso a cada operação" |
|
|
82
|
+
| 3 | **Validações de entrada** (regras, limites, formatos) | Ambiguidade: "Validações de entrada não detalhadas" |
|
|
83
|
+
| 4 | **Tratamento de erros** (cenários de falha, mensagens) | Ambiguidade: "Cenários de erro e mensagens ao usuário não definidos" |
|
|
84
|
+
| 5 | **Impacto em dados existentes** (migração necessária?) | Ambiguidade: "Impacto em dados existentes não avaliado" |
|
|
85
|
+
|
|
86
|
+
> O Analyzer NÃO inventa respostas — se não está nos insumos, PERGUNTA.
|
|
87
|
+
|
|
88
|
+
### 5. Gerar roadmap de produto faseado (APENAS no setup)
|
|
89
|
+
Quando tipo=setup, o Analyzer encontra informações que não são infraestrutura
|
|
90
|
+
(regras de negócio, jornadas, telas, fluxos). Em vez de descartar, organizar em
|
|
91
|
+
`backlog_extraido.md` como **roadmap faseado** com entregáveis incrementais.
|
|
92
|
+
|
|
93
|
+
O Analyzer deve:
|
|
94
|
+
1. Identificar funcionalidades, entidades, regras de negócio, jornadas, telas
|
|
95
|
+
2. Mapear dependências entre elas (ex: agendamento depende de cadastro de clientes)
|
|
96
|
+
3. Agrupar em **fases de entrega** por dependência + complexidade
|
|
97
|
+
4. Para cada fase: definir entregável + critério de done
|
|
98
|
+
5. Sugerir **1 feature única** com nome descritivo (ex: `feat_mvp`)
|
|
99
|
+
6. Usar template `backlog-extraido.template.md`
|
|
100
|
+
|
|
101
|
+
**Princípio**: Entregáveis contínuos — cada fase entrega valor e pode ir pra produção.
|
|
102
|
+
Máximo 4-5 fases. Fase 1 sempre = fundação/cadastros base.
|
|
103
|
+
|
|
104
|
+
Este arquivo:
|
|
105
|
+
- É gerado APENAS no setup (não em features)
|
|
106
|
+
- Serve como roadmap quando o usuário for criar `/feature`
|
|
107
|
+
- O /extract da feature usa as fases como referência para o PRD
|
|
108
|
+
|
|
109
|
+
### 6. Gerar `.extract-log.md`
|
|
110
|
+
```markdown
|
|
111
|
+
# Extract Log — $ARGUMENTS
|
|
112
|
+
|
|
113
|
+
## Extração N — {{ISO_DATETIME}}
|
|
114
|
+
| Arquivo | Hash | Classificação | Status | Seções alimentadas |
|
|
115
|
+
|---------|------|---------------|--------|--------------------|
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### 6. Atualizar `.context.md`
|
|
119
|
+
```yaml
|
|
120
|
+
status: "extract_done"
|
|
121
|
+
ultima_skill: "/extract"
|
|
122
|
+
atualizado_em: "{{ISO_DATETIME}}"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Re-extração
|
|
126
|
+
- Merge ADITIVO com documento existente (nunca remove info de inalterados)
|
|
127
|
+
- Seções afetadas marcadas com `<!-- ATUALIZADO: re-extração -->`
|
|
128
|
+
- Novos IDs continuam sequência
|
|
129
|
+
|
|
130
|
+
## Erros
|
|
131
|
+
| Erro | Ação |
|
|
132
|
+
|------|------|
|
|
133
|
+
| Pasta vazia | Parar, listar formatos aceitos |
|
|
134
|
+
| .context.md não existe | Parar, sugerir /feature ou /setup-projeto |
|
|
135
|
+
| Nenhum arquivo novo/modificado | Informar "Nenhuma alteração detectada" |
|
|
136
|
+
| Arquivo não identificado | Registrar no log, gerar ambiguidade |
|
|
137
|
+
| Contradição entre arquivos | Gerar ambiguidade citando os dois |
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# /feature $ARGUMENTS
|
|
2
|
+
|
|
3
|
+
Orquestrador de feature. Cria contexto PRD, chama /extract e para no checkpoint.
|
|
4
|
+
$ARGUMENTS = nome da feature (ex: feat_cadastro_cliente)
|
|
5
|
+
|
|
6
|
+
## Execução
|
|
7
|
+
|
|
8
|
+
### Convenção de nomes
|
|
9
|
+
- Features: `feat_nome_descritivo`
|
|
10
|
+
- Bugs: `bug_nome_descritivo`
|
|
11
|
+
- Tasks técnicas: `task_nome_descritivo`
|
|
12
|
+
|
|
13
|
+
### Pré-condições
|
|
14
|
+
|
|
15
|
+
| # | Validação | Se falhar |
|
|
16
|
+
|---|-----------|-----------|
|
|
17
|
+
| 1 | $ARGUMENTS foi informado | Parar → "Informe o nome. Ex: /feature feat_cadastro_cliente" |
|
|
18
|
+
| 2 | `docs/PM/$ARGUMENTS/` existe e tem arquivos | Parar → "Crie a pasta e adicione insumos" |
|
|
19
|
+
| 3 | `docs/Estrutura/` está populado | Parar → "Execute /setup-projeto antes" |
|
|
20
|
+
| 4 | `.context.md` não existe ou status é `not_started` | Se avançado → "Feature já em andamento. Para re-extrair, use /extract $ARGUMENTS" |
|
|
21
|
+
|
|
22
|
+
### Passos
|
|
23
|
+
|
|
24
|
+
1. Carregar `docs/Estrutura/` para contexto do projeto
|
|
25
|
+
2. Criar `docs/Desenvolvimento/$ARGUMENTS/` se não existir
|
|
26
|
+
3. Criar `.context.md`:
|
|
27
|
+
```yaml
|
|
28
|
+
---
|
|
29
|
+
nome: "$ARGUMENTS"
|
|
30
|
+
tipo: "feature"
|
|
31
|
+
documento: "PRD"
|
|
32
|
+
pm_path: "docs/PM/$ARGUMENTS/"
|
|
33
|
+
status: "not_started"
|
|
34
|
+
ultima_skill: "/feature"
|
|
35
|
+
atualizado_em: "{{ISO_DATETIME}}"
|
|
36
|
+
---
|
|
37
|
+
```
|
|
38
|
+
4. Sugerir /sf-discovery (RECOMENDADO):
|
|
39
|
+
```
|
|
40
|
+
📋 Recomendo rodar /sf-discovery antes da extração para análise profunda dos insumos.
|
|
41
|
+
Quer rodar /sf-discovery docs/PM/$ARGUMENTS/ agora? (s/n)
|
|
42
|
+
```
|
|
43
|
+
Se SIM → rodar discovery, salvar discovery.md em docs/Desenvolvimento/$ARGUMENTS/
|
|
44
|
+
Se NÃO → pular direto para extract
|
|
45
|
+
|
|
46
|
+
5. Executar /extract $ARGUMENTS
|
|
47
|
+
6. CHECKPOINT — Parar e informar:
|
|
48
|
+
```
|
|
49
|
+
✅ PRD gerado em docs/Desenvolvimento/$ARGUMENTS/PRD.md
|
|
50
|
+
|
|
51
|
+
Revise o documento. Quando estiver satisfeito, execute:
|
|
52
|
+
/design $ARGUMENTS
|
|
53
|
+
|
|
54
|
+
Se precisar adicionar mais insumos:
|
|
55
|
+
/extract $ARGUMENTS
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Notas
|
|
59
|
+
- Pode ser executado múltiplas vezes (uma por feature)
|
|
60
|
+
- Pipeline inclui /merge-delta no final (diferente do setup)
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# /merge-delta $ARGUMENTS
|
|
2
|
+
|
|
3
|
+
Skill atômica pós-dev. Aplica Delta Specs do SDD em docs/Estrutura/.
|
|
4
|
+
$ARGUMENTS = nome (ex: feat_cadastro_cliente)
|
|
5
|
+
|
|
6
|
+
## Agente: Integrator (Sonnet)
|
|
7
|
+
Meticuloso com consistência. Aplica apenas o que Delta Specs diz.
|
|
8
|
+
|
|
9
|
+
## Pré-condições
|
|
10
|
+
|
|
11
|
+
| # | Validação | Se falhar |
|
|
12
|
+
|---|-----------|-----------|
|
|
13
|
+
| 1 | $ARGUMENTS informado | Parar |
|
|
14
|
+
| 2 | `.context.md` com status `dev_done` | Se anterior → "/dev primeiro" |
|
|
15
|
+
| 3 | `.context.md` tipo é `feature` | Se setup → "Setup não usa merge-delta" |
|
|
16
|
+
| 4 | `sdd.md` §11 Delta Specs preenchida | Parar |
|
|
17
|
+
| 5 | `docs/Estrutura/` populado | Parar |
|
|
18
|
+
|
|
19
|
+
## Passos
|
|
20
|
+
|
|
21
|
+
### 1. Ler SDD §11 Delta Specs
|
|
22
|
+
|
|
23
|
+
| Tipo | Significado |
|
|
24
|
+
|------|------------|
|
|
25
|
+
| ADDED | Elemento novo (tabela, endpoint, tela) |
|
|
26
|
+
| MODIFIED | Elemento existente alterado |
|
|
27
|
+
| REMOVED | Elemento removido |
|
|
28
|
+
|
|
29
|
+
### 2. Mapear para docs alvo
|
|
30
|
+
|
|
31
|
+
| Elemento | Doc |
|
|
32
|
+
|----------|-----|
|
|
33
|
+
| Tabelas, colunas, índices | Modelo_Dados.md |
|
|
34
|
+
| Endpoints, contratos | API.md |
|
|
35
|
+
| Decisões arquiteturais | Arquitetura.md + ADRs.md |
|
|
36
|
+
| Infra | Infraestrutura.md |
|
|
37
|
+
| Segurança | Seguranca.md |
|
|
38
|
+
| Stack | Stack.md |
|
|
39
|
+
| Visão/escopo | Visao.md |
|
|
40
|
+
|
|
41
|
+
### 3. Aplicar deltas
|
|
42
|
+
Para cada delta, no doc alvo:
|
|
43
|
+
- ADDED → adicionar conteúdo na seção apropriada
|
|
44
|
+
- MODIFIED → localizar e atualizar elemento
|
|
45
|
+
- REMOVED → remover ou marcar deprecated
|
|
46
|
+
|
|
47
|
+
### 4. Registrar changelog (em cada doc afetado)
|
|
48
|
+
```markdown
|
|
49
|
+
## Changelog
|
|
50
|
+
| Data | Feature | Tipo | Descrição |
|
|
51
|
+
|------|---------|------|-----------|
|
|
52
|
+
| {{data}} | $ARGUMENTS | ADDED | ... |
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 5. Validar consistência
|
|
56
|
+
- Referências quebradas? Reportar.
|
|
57
|
+
- REMOVED deixou órfãos? Reportar.
|
|
58
|
+
|
|
59
|
+
### 6. Atualizar
|
|
60
|
+
- `.context.md` → status: `done`
|
|
61
|
+
- `progresso.md` global → feature concluída
|
|
62
|
+
- Informar ao usuário docs atualizados
|
|
63
|
+
|
|
64
|
+
## Erros
|
|
65
|
+
| Erro | Ação |
|
|
66
|
+
|------|------|
|
|
67
|
+
| Status não é dev_done | Parar |
|
|
68
|
+
| Tipo é setup | Parar — setup não usa merge-delta |
|
|
69
|
+
| Delta Specs vazia | Marcar done (legítimo em refactors) |
|
|
70
|
+
| Elemento não encontrado | Parar, pedir resolução |
|