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,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,284 @@
1
+ ---
2
+ name: sf-extract
3
+ description: |
4
+ Extração de insumos. Lê docs/PM/ e gera PRD ou TRD estruturado.
5
+ Trigger: /sf-extract
6
+ author: GustavoMaritan
7
+ version: 1.0.0
8
+ date: 2026-04-08
9
+ ---
10
+
11
+ # Skill: /sf-extract
12
+
13
+ > Skill atômica de extração. Lê insumos brutos do PM/ e gera PRD ou TRD.
14
+ > Chamada via orquestrador (/feature, /sf-setup-projeto) ou diretamente para re-extração.
15
+
16
+ ## Tipo
17
+ Atômica — Multi-agent
18
+
19
+ ## Uso
20
+ ```
21
+ /sf-extract <nome>
22
+ ```
23
+ Exemplo: `/sf-extract feat_cadastro_cliente`
24
+
25
+ ---
26
+
27
+ ## Agentes
28
+
29
+ | Agente | Papel | Modelo | Input | Output |
30
+ |--------|-------|--------|-------|--------|
31
+ | **Reader** | Lê e cataloga 1 arquivo de insumo | Sonnet | 1 arquivo bruto + formato esperado | Resumo estruturado por seção do template |
32
+ | **Analyzer** | Cruza fontes, detecta gaps, gera documento final | Opus | Outputs de todos os Readers + template + contexto do projeto | PRD/TRD completo + extract-log |
33
+
34
+ ### Orquestração
35
+ ```
36
+ 1. Ler .context.md e .extract-log.md (se existir)
37
+ 2. Ler discovery.md (se existir) — análise profunda prévia dos insumos
38
+ 3. Inventariar arquivos em docs/PM/{nome}/ → filtrar NOVOS e MODIFICADOS
39
+ 4. Spawn 1 Reader por arquivo NOVO/MODIFICADO (paralelo)
40
+ 5. Aguardar todos os Readers
41
+ 6. Spawn Analyzer com:
42
+ - Outputs concatenados dos Readers
43
+ - discovery.md (se existir) — mapa do sistema pré-validado
44
+ - PRD/TRD existente (se re-extração)
45
+ - Template (PRD.template.md ou TRD.template.md)
46
+ - docs/Estrutura/ (contexto do projeto)
47
+ 7. Analyzer gera documento final + extract-log
48
+ 8. Atualizar .context.md → status: extract_done
49
+ ```
50
+
51
+ > **Se discovery.md existir**: O Analyzer usa o mapa do sistema, perguntas já respondidas
52
+ > e pontos críticos como contexto enriquecido. Resultado: menos ambiguidades, melhor estruturação.
53
+ > **Se não existir**: O Analyzer trabalha normalmente com os outputs dos Readers.
54
+
55
+ ### Agent: Reader (Sonnet)
56
+
57
+ **Papel**: Especialista em leitura e catalogação de um único arquivo de insumo.
58
+
59
+ **Comportamento**:
60
+ - Lê 1 arquivo por vez
61
+ - Extrai informações seguindo as categorias do template alvo
62
+ - Não interpreta, não infere — apenas cataloga o que encontra
63
+ - Marca cada informação com a seção do template onde se encaixa
64
+
65
+ **Formatos e o que extrair:**
66
+
67
+ | Formato | Extensões | O que extrair |
68
+ |---------|-----------|---------------|
69
+ | Texto/Requisitos | `.md`, `.txt` | Requisitos, regras de negócio, contexto, restrições |
70
+ | Banco de dados | `.sql` | Entidades, campos, tipos, constraints, índices, relações |
71
+ | Protótipos | `.html` | Telas, campos (`data-field`), ações (`data-action`), validações (`data-validation`), rotas (`data-route`), permissões (`data-permission`), estados (`data-state`) |
72
+ | Diagramas | `.xml` (drawio), `.json` | Fluxos, decisões, atores, sequências |
73
+ | Planilhas | `.csv` | Dados tabulares, mapeamentos, configurações |
74
+ | Imagens | `.png`, `.jpg`, `.pdf` | Wireframes, mockups, fluxogramas (análise visual) |
75
+ | Outros | qualquer | Extrair o que for relevante — nunca ignorar um arquivo |
76
+
77
+ **Output do Reader** (por arquivo):
78
+ ```markdown
79
+ ## Reader Output: {nome_arquivo}
80
+ - Hash: {sha256_8chars}
81
+ - Formato: {tipo}
82
+ - Status: extraído | parcial | não identificado
83
+
84
+ ### Seções alimentadas:
85
+ - §1 Contexto: ...
86
+ - §3 Entidades: ...
87
+ - §5 Regras: RN-XXX: "descrição"
88
+ - §13 Ambiguidades: "campo X definido mas sem tipo especificado"
89
+ ```
90
+
91
+ **Quando o Reader NÃO consegue extrair conteúdo:**
92
+ - Status: `não identificado` — arquivo binário desconhecido, corrompido, ou sem conteúdo relevante
93
+ - Status: `parcial` — conseguiu extrair algo mas o formato limita (ex: imagem sem OCR, PDF escaneado)
94
+ - O Reader NUNCA ignora o arquivo — sempre registra no output com o status
95
+ - O Analyzer inclui arquivo não identificado no extract-log com classificação `NÃO IDENTIFICADO`
96
+ - O Analyzer gera ambiguidade: "Arquivo {nome} não pôde ser processado — verifique conteúdo e formato"
97
+
98
+ ### Agent: Analyzer (Opus)
99
+
100
+ **Papel**: Especialista em análise cruzada, detecção de gaps e geração de documento estruturado.
101
+
102
+ **Comportamento**:
103
+ - Nunca assume — se não está explícito nos insumos, vira pergunta bloqueante
104
+ - Busca contradições ativamente entre fontes diferentes
105
+ - Rastreia tudo — cada informação aponta para o arquivo fonte
106
+ - Prefere estrutura a narrativa — tabelas e listas, nunca texto livre
107
+ - Pessimista construtivo — melhor uma ambiguidade a mais do que uma regra inventada
108
+
109
+ **Responsabilidades**:
110
+ 1. Consolidar outputs dos Readers em visão unificada
111
+ 2. Detectar contradições entre fontes → gerar ambiguidade com os dois arquivos citados
112
+ 3. Detectar gaps — seções do template sem informação → gerar ambiguidade
113
+ 4. **Validar Checklist de Temas Críticos** (ver abaixo) — temas ausentes viram ambiguidades obrigatórias
114
+ 5. Nunca inferir regra de negócio — se não está explícito, é ambiguidade
115
+ 6. Manter IDs estáveis (RN-001 nunca renumera, novos continuam sequência)
116
+ 7. Gerar rastreabilidade completa (§14 PRD / §10 TRD)
117
+ 8. Na re-extração: merge ADITIVO com documento existente, marcar seções atualizadas
118
+
119
+ ### Checklist de Temas Críticos (Analyzer)
120
+
121
+ Após consolidar os Readers, o Analyzer DEVE verificar se os insumos cobrem os temas abaixo.
122
+ Se um tema **não foi mencionado em nenhum insumo**, gera **ambiguidade obrigatória** pedindo ao usuário.
123
+
124
+ #### Para TRD (setup):
125
+
126
+ | # | Tema | O que verificar | Se ausente |
127
+ |---|------|-----------------|------------|
128
+ | 1 | **Autenticação** | Qual mecanismo? JWT, OAuth, API Key, Session? | Ambiguidade: "Nenhum mecanismo de autenticação definido nos insumos" |
129
+ | 2 | **Autorização / Roles** | Quais perfis? RBAC, ABAC? Quem acessa o quê? | Ambiguidade: "Perfis de acesso e regras de autorização não definidos" |
130
+ | 3 | **Separação de serviços** | É monolito, microserviços, modular? API e Worker são separados? | Ambiguidade: "Arquitetura de serviços não definida (monolito vs separados)" |
131
+ | 4 | **Ambientes** | Dev, staging, prod? Docker? CI/CD? | Ambiguidade: "Estratégia de ambientes e deploy não definida" |
132
+ | 5 | **Dados sensíveis** | PII, LGPD, criptografia, masking? | Ambiguidade: "Tratamento de dados sensíveis / LGPD não mencionado" |
133
+
134
+ #### Para PRD (feature):
135
+
136
+ | # | Tema | O que verificar | Se ausente |
137
+ |---|------|-----------------|------------|
138
+ | 1 | **Autenticação requerida** | Feature exige login? Quais endpoints são públicos vs autenticados? | Ambiguidade: "Não definido quais operações exigem autenticação" |
139
+ | 2 | **Permissões / Roles** | Quais perfis podem executar cada ação? | Ambiguidade: "Não definido quais perfis têm acesso a cada operação" |
140
+ | 3 | **Validações de entrada** | Regras de validação dos campos? Limites? Formatos? | Ambiguidade: "Validações de entrada não detalhadas" |
141
+ | 4 | **Tratamento de erros** | O que acontece quando dá errado? Mensagens ao usuário? | Ambiguidade: "Cenários de erro e mensagens ao usuário não definidos" |
142
+ | 5 | **Impacto em dados existentes** | A feature altera dados existentes? Migração necessária? | Ambiguidade: "Impacto em dados existentes não avaliado" |
143
+
144
+ > **Regra**: O Analyzer NÃO inventa respostas para esses temas. Se não está nos insumos, PERGUNTA.
145
+ > Esses temas são os mais comuns de serem esquecidos pelo usuário e os mais caros de corrigir depois.
146
+
147
+ ---
148
+
149
+ ## Pré-condições
150
+
151
+ | # | Validação | Se falhar |
152
+ |---|-----------|-----------|
153
+ | 1 | Argumento `nome` foi informado | Parar → "Informe o nome. Ex: /sf-extract feat_cadastro_cliente" |
154
+ | 2 | `docs/PM/{nome}/` existe e contém pelo menos 1 arquivo (ignorar .gitkeep) | Parar → "Pasta de insumos vazia ou inexistente" |
155
+ | 3 | `docs/Desenvolvimento/{nome}/.context.md` existe | Parar → "Execute /sf-feature {nome} ou /sf-setup-projeto primeiro" |
156
+ | 4 | Status em `.context.md` é `not_started` ou `extract_done` | Se `approved` ou posterior → "Extração já aprovada. Para re-extrair, o status será revertido para extract_done" |
157
+
158
+ ## Passos detalhados
159
+
160
+ ### 1. Ler contexto
161
+ - Ler `.context.md` → identificar `tipo` (feature ou setup) e `documento` (PRD ou TRD)
162
+ - Ler `docs/Estrutura/` se existir (contexto para extração coerente)
163
+ - Selecionar template: `tipo=feature` → `PRD.template.md` | `tipo=setup` → `TRD.template.md`
164
+
165
+ ### 2. Inventariar e classificar insumos
166
+ Ler todos os arquivos em `docs/PM/{nome}/`. Para cada arquivo, calcular hash (SHA-256 truncado 8 chars).
167
+
168
+ Se `.extract-log.md` existir, classificar:
169
+
170
+ | Classificação | Critério | Ação |
171
+ |---------------|----------|------|
172
+ | **NOVO** | Arquivo não existe no log | Processar |
173
+ | **MODIFICADO** | Hash diferente do log | Reprocessar |
174
+ | **INALTERADO** | Hash igual ao log | Pular |
175
+
176
+ Se `.extract-log.md` não existir: todos são NOVOS.
177
+
178
+ ### 3. Spawn Readers (paralelo)
179
+ Para cada arquivo NOVO ou MODIFICADO, disparar 1 Reader (Sonnet):
180
+ - Input: arquivo bruto + seções do template alvo
181
+ - Output: resumo estruturado por seção
182
+
183
+ Arquivos INALTERADOS: pular — informação já está no PRD/TRD existente.
184
+
185
+ ### 4. Spawn Analyzer (sequencial)
186
+ Após todos Readers concluírem, disparar Analyzer (Opus) com:
187
+ - Todos os outputs dos Readers
188
+ - PRD/TRD existente (se re-extração — para merge aditivo)
189
+ - Template correspondente
190
+ - `docs/Estrutura/` como contexto
191
+
192
+ ### 5. Gerar/atualizar documento
193
+
194
+ **Primeira extração:**
195
+ - Analyzer gera PRD.md ou TRD.md completo a partir do template
196
+
197
+ **Re-extração:**
198
+ - Merge ADITIVO com o documento existente (nunca remove info de arquivos inalterados)
199
+ - Seções afetadas recebem marcador:
200
+ ```
201
+ <!-- ATUALIZADO: re-extração {{ISO_DATE}} — arquivos: {lista} -->
202
+ ```
203
+ - Novas regras de negócio continuam sequência de IDs existentes
204
+
205
+ ### 6. Gerar roadmap de produto faseado (APENAS no setup)
206
+ Quando tipo=setup, o Analyzer encontra informações que não são infraestrutura
207
+ (regras de negócio, jornadas, telas, fluxos). Em vez de descartar, organizar em
208
+ `backlog_extraido.md` como **roadmap faseado** com entregáveis incrementais:
209
+
210
+ O Analyzer deve:
211
+ 1. Identificar funcionalidades, entidades, regras de negócio, jornadas, telas
212
+ 2. Mapear dependências entre elas (ex: agendamento depende de cadastro de clientes)
213
+ 3. Agrupar em **fases de entrega** por dependência + complexidade
214
+ 4. Para cada fase: definir entregável + critério de done
215
+ 5. Sugerir **1 feature única** com nome descritivo (ex: `feat_mvp`)
216
+ 6. Usar template `backlog-extraido.template.md`
217
+
218
+ **Princípio**: Entregáveis contínuos — cada fase entrega valor e pode ir pra produção.
219
+ Máximo 4-5 fases. Fase 1 sempre = fundação/cadastros base.
220
+
221
+ Este arquivo:
222
+ - É gerado APENAS no setup (não em features)
223
+ - Serve como roadmap quando o usuário for criar `/feature`
224
+ - O /sf-extract da feature usa as fases como referência para o PRD
225
+
226
+ ### 7. Gerar/atualizar `.extract-log.md`
227
+
228
+ ```markdown
229
+ # Extract Log — {nome}
230
+
231
+ ## Extração 1 — {{ISO_DATETIME}}
232
+ | Arquivo | Hash | Classificação | Seções alimentadas |
233
+ |---------|------|---------------|-------------------|
234
+ | requisitos.txt | a1b2c3d4 | NOVO | §1, §5, §9 |
235
+ | modelagem.sql | e5f6g7h8 | NOVO | §3, §6 |
236
+
237
+ ## Extração 2 — {{ISO_DATETIME}}
238
+ | Arquivo | Hash | Classificação | Seções alimentadas |
239
+ |---------|------|---------------|-------------------|
240
+ | novas_regras.md | m3n4o5p6 | NOVO | §5, §9 |
241
+ | modelagem.sql | q7r8s9t0 | MODIFICADO | §3 |
242
+ | requisitos.txt | a1b2c3d4 | INALTERADO | — |
243
+ ```
244
+
245
+ ### 7. Atualizar `.context.md`
246
+ ```yaml
247
+ status: "extract_done"
248
+ ultima_skill: "/sf-extract"
249
+ atualizado_em: "{{ISO_DATETIME}}"
250
+ ```
251
+
252
+ ---
253
+
254
+ ## Saídas
255
+
256
+ | Arquivo | Descrição |
257
+ |---------|-----------|
258
+ | `PRD.md` ou `TRD.md` | Documento de extração com todas as seções preenchidas |
259
+ | `.extract-log.md` | Registro de arquivos processados com hashes e classificação |
260
+ | `.context.md` | Atualizado com status `extract_done` |
261
+
262
+ ## Pós-condições
263
+ - Documento gerado com rastreabilidade completa
264
+ - Ambiguidades listadas na seção correspondente — bloqueiam avanço no `/design`
265
+ - Usuário deve revisar antes de chamar `/design`
266
+
267
+ ## Erros
268
+
269
+ | Erro | Ação |
270
+ |------|------|
271
+ | PM/{nome}/ vazio | Parar, listar formatos aceitos |
272
+ | .context.md não existe | Parar, sugerir /sf-feature ou /sf-setup-projeto |
273
+ | Nenhum arquivo novo/modificado | Informar "Nenhuma alteração detectada desde a última extração" |
274
+ | Formato não reconhecido | Processar mesmo assim, extrair o que for possível, avisar no log |
275
+ | Conteúdo não identificado | Registrar como NÃO IDENTIFICADO no extract-log, gerar ambiguidade pedindo ao usuário verificar o arquivo |
276
+ | Extração parcial | Registrar como PARCIAL no extract-log, extrair o que for possível, avisar quais seções ficaram incompletas |
277
+ | Contradição entre arquivos | Analyzer gera ambiguidade citando os dois arquivos e a contradição |
278
+
279
+ ## Notas
280
+ - O `/extract` é a ÚNICA skill que lê `docs/PM/` — nenhuma outra skill acessa insumos brutos
281
+ - Na re-extração, o merge é ADITIVO — nunca remove informação de arquivos inalterados
282
+ - Para recomeçar do zero: apagar PRD/TRD e .extract-log.md manualmente
283
+ - Readers são stateless — não conhecem outros arquivos, apenas o seu
284
+ - Analyzer é quem tem visão global e detecta contradições cross-arquivo