product-runner 0.5.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 (37) hide show
  1. package/README.md +165 -0
  2. package/common/agents/README.md +68 -0
  3. package/common/agents/agente-conceituacao.md +141 -0
  4. package/common/agents/agente-documentacao-funcional.md +107 -0
  5. package/common/agents/agente-gerador-spec.md +106 -0
  6. package/common/agents/agente-kickoff.md +121 -0
  7. package/common/agents/agente-prod-runner.md +107 -0
  8. package/common/agents/agente-review-code.md +97 -0
  9. package/common/agents/agente-review-llm.md +94 -0
  10. package/common/agents/agente-review-product.md +98 -0
  11. package/common/agents/agente-user-review.md +99 -0
  12. package/common/agents/protocolo-de-gates.md +51 -0
  13. package/common/claude-md.template.md +210 -0
  14. package/common/design-principles.md +229 -0
  15. package/common/lessons-learned.md +440 -0
  16. package/common/pipeline.md +143 -0
  17. package/common/spec-guide.md +327 -0
  18. package/common/specs/_open-issues.md +46 -0
  19. package/common/specs/_overview.md +75 -0
  20. package/dist/cli.js +187 -0
  21. package/dist/migrations.js +147 -0
  22. package/dist/scaffold.js +276 -0
  23. package/dist/update.js +400 -0
  24. package/migrations/0.3.0.md +54 -0
  25. package/migrations/0.4.0.md +76 -0
  26. package/migrations/0.5.0.md +55 -0
  27. package/migrations/README.md +68 -0
  28. package/package.json +41 -0
  29. package/profile-cli/README.md +54 -0
  30. package/profile-cli/claude-md.extension.md +102 -0
  31. package/profile-cli/code-patterns.md +363 -0
  32. package/profile-ssr/DESIGN-SYSTEM.md +795 -0
  33. package/profile-ssr/README.md +51 -0
  34. package/profile-ssr/api-patterns.md +70 -0
  35. package/profile-ssr/claude-md.extension.md +113 -0
  36. package/profile-ssr/code-patterns.md +175 -0
  37. package/profile-ssr/ui-patterns.md +97 -0
@@ -0,0 +1,440 @@
1
+ # Lições aprendidas — Projeto DocManager
2
+
3
+ Compilado de lições extraídas do desenvolvimento do DocManager,
4
+ organizadas por etapa. Cada lição inclui o contexto em que se aplica
5
+ e por que importa.
6
+
7
+ ---
8
+
9
+ ## Etapa 1 — Levantamento de requisitos
10
+
11
+ ### Pesquisar soluções prontas antes de decidir por custom
12
+ **Quando se aplica:** sempre que o problema parecer comum (gestão documental, CRM, e-commerce).
13
+ **Por que importa:** evita reinventar a roda. Mas também evita forçar uma ferramenta que não cabe — no nosso caso, Paperless-ngx cobria 60% mas os 40% restantes exigiriam mais customização do que construir do zero.
14
+
15
+ ### Entender orçamento de serviços externos cedo
16
+ **Quando se aplica:** projetos que dependem de APIs pagas (OCR, AI, cloud).
17
+ **Por que importa:** não é só o orçamento geral do projeto — são custos recorrentes mensais que impactam a viabilidade técnica. Google Vision a $1.50/1000 páginas cabe no budget; AWS Textract a $15/1000 não caberia.
18
+
19
+ ### Perguntas fechadas aceleram o levantamento
20
+ **Quando se aplica:** sempre que estiver levantando requisitos com o usuário.
21
+ **Por que importa:** múltipla escolha força decisão imediata em vez de discussão aberta. O levantamento do DocManager levou 3 rodadas de perguntas em vez de uma conversa livre de 2 horas.
22
+
23
+ ### Ordem importa: problema/contexto → viabilidade → arquitetura
24
+ **Quando se aplica:** início de qualquer projeto.
25
+ **Por que importa:** decidir stack antes de entender o problema leva a decisões enviesadas. Primeiro entender o que precisa ser resolvido, depois avaliar o que é viável, depois como construir.
26
+
27
+ ---
28
+
29
+ ## Etapa 2 — Escolha de stack e arquitetura
30
+
31
+ ### Mapear o que o framework NÃO faz
32
+ **Quando se aplica:** ao escolher plataforma de deploy ou framework.
33
+ **Por que importa:** as limitações definem a arquitetura tanto quanto as features. Next.js não suporta storage persistente + background jobs na Vercel → descartou Vercel, definiu Docker + VPS. Essa decisão cascateia pra toda a infra.
34
+
35
+ ### Arquitetura iterativa, não solução fechada
36
+ **Quando se aplica:** ao definir arquitetura com o time/usuário.
37
+ **Por que importa:** apresentar proposta inicial, ouvir contra-propostas, refinar. As melhores decisões do DocManager (services desacoplados, Zod entity como raiz) vieram de sugestões do usuário, não do planejamento inicial.
38
+
39
+ ### Documentar o "porquê" de cada decisão
40
+ **Quando se aplica:** qualquer decisão de arquitetura, stack ou design.
41
+ **Por que importa:** sem o "porquê", as decisões são revisitadas toda vez que alguém novo chega ou que surge uma dúvida. "Usamos registros no banco pra campos de padrão PORQUE precisamos de consultas transversais" fecha a discussão.
42
+
43
+ ---
44
+
45
+ ## Etapa 3 — Modelo de dados
46
+
47
+ ### Modelar junto com o usuário
48
+ **Quando se aplica:** definição de entities e relações.
49
+ **Por que importa:** gaps conceituais que o técnico não vê. No DocManager, o usuário identificou que faltava DocumentLink (relação doc↔doc) e campos repetíveis (itens de NF) — dois conceitos que o técnico não teria percebido sozinho.
50
+
51
+ ### Decisões conceituais antes do schema
52
+ **Quando se aplica:** antes de escrever qualquer modelo Prisma/SQL.
53
+ **Por que importa:** "um documento pertence a uma ou muitas categorias?", "campos como registros ou JSON?", "enum ou booleanos?" — essas decisões definem TUDO. Errar aqui propaga pra todas as camadas.
54
+
55
+ ### ERD visual pra alinhar entendimento
56
+ **Quando se aplica:** sempre que o modelo tiver mais de 5 entities.
57
+ **Por que importa:** texto descreve relações sequencialmente. Diagrama mostra todas as relações de uma vez. O momento "ah, falta uma seta aqui" só acontece quando você vê o diagrama.
58
+
59
+ ### Validar modelo completo antes de implementar
60
+ **Quando se aplica:** antes de criar a primeira migration.
61
+ **Por que importa:** é a fundação. Erro no modelo propaga pra services, API, UI. Adicionar uma entity depois é fácil; mudar uma relação fundamental depois é caro.
62
+
63
+ ---
64
+
65
+ ## Etapa 4 — Dev workflow e spec-first
66
+
67
+ ### Spec-first economiza mais tempo do que parece
68
+ **Quando se aplica:** qualquer projeto com implementação assistida por AI.
69
+ **Por que importa:** o Claude Code com spec clara implementa em minutos o que levaria horas sem contexto. A spec é o "prompt" perfeito porque tem tudo: contexto, entities, funções, API, UI, critérios de aceite.
70
+
71
+ ### Granularidade certa é crucial
72
+ **Quando se aplica:** ao escrever specs.
73
+ **Por que importa:** spec grande demais → Claude Code perde foco e gera código inconsistente. Spec pequena demais → overhead de gestão, muitas sessões. Regra: uma spec = uma sessão de Claude Code.
74
+
75
+ ### Fases com corte vertical, não horizontal
76
+ **Quando se aplica:** ao planejar fases de entrega.
77
+ **Por que importa:** "modelo → services → API → UI" (horizontal) entrega valor só no final. "Upload + OCR + visualização de ponta a ponta" (vertical) entrega valor visível na Fase 1. O usuário vê resultado e valida cedo.
78
+
79
+ ### Overview com grafo de dependências
80
+ **Quando se aplica:** projetos com mais de 5 specs.
81
+ **Por que importa:** evita implementar specs fora de ordem. "Org/03 depende de org/01" — sem o grafo, alguém pode tentar implementar referências antes de categorias existirem.
82
+
83
+ ### Critérios de aceite binários
84
+ **Quando se aplica:** toda spec.
85
+ **Por que importa:** eliminam ambiguidade do "pronto". "Consigo arrastar 10 fotos e todas são salvas" — ou passa ou não passa. Sem "parcialmente implementado".
86
+
87
+ ### Documentar o princípio de entrega vertical
88
+ **Quando se aplica:** ao criar o overview de fases.
89
+ **Por que importa:** a lista de fases mostra a ordem, mas não o porquê. Sem documentar o princípio, alguém replicando pode organizar horizontalmente sem perceber que foi uma escolha deliberada.
90
+
91
+ ---
92
+
93
+ ## Etapa 5 — Skills e documentação
94
+
95
+ ### Menos skills melhores > muitas skills rasos
96
+ **Quando se aplica:** ao montar estratégia de skills/docs.
97
+ **Por que importa:** 1 CLAUDE.md completo + docs de referência supera 9 CLAUDE.md espalhados. Manutenção de 9 arquivos sincronizados é overhead que não compensa.
98
+
99
+ ### Conhecer o formato de cada ferramenta antes de gerar artefatos
100
+ **Quando se aplica:** ao criar skills, configs, templates pra ferramentas.
101
+ **Por que importa:** o Cowork exige YAML frontmatter nas skills. Gerar sem e descobrir pelo erro custou retrabalho. Verificar o formato esperado antes de gerar evita isso.
102
+
103
+ ### Divisão de responsabilidade entre ferramentas deve ser explícita
104
+ **Quando se aplica:** projetos que usam múltiplas ferramentas AI.
105
+ **Por que importa:** sem definição clara, você mistura — pede pro chat o que o Cowork faz melhor, ou pro Claude Code o que é um fix do Cowork. Definir no kickoff: chat = pensar, Cowork = agir nos arquivos, Code = implementar.
106
+
107
+ ### Padrão de comunicação entre ferramentas
108
+ **Quando se aplica:** workflow multi-ferramenta.
109
+ **Por que importa:** "discutir aqui → instrução copiável → cola lá" surgiu organicamente mas deveria ser definido no kickoff. Sem esse padrão, cada handoff é improvisado.
110
+
111
+ ### Regras operacionais no CLAUDE.md fazem diferença real
112
+ **Quando se aplica:** qualquer projeto com Claude Code.
113
+ **Por que importa:** "3 strikes", "spec vs realidade técnica", "fixes não precisam de spec" — todas surgiram de problemas reais. Sem elas, loops e decisões subótimas repetem.
114
+
115
+ ---
116
+
117
+ ## Etapa 6 — Ciclo de implementação
118
+
119
+ ### Claude Code precisa de guardrails comportamentais
120
+ **Quando se aplica:** qualquer projeto com Claude Code.
121
+ **Por que importa:** ele é excelente executor mas sem guardrails entra em loops (searchVector), segue spec literalmente quando há alternativa melhor (rowIndex null), e não para pra perguntar quando deveria.
122
+
123
+ ### O report final do Claude Code é o artefato mais valioso
124
+ **Quando se aplica:** após cada sessão de implementação.
125
+ **Por que importa:** critérios ✅/❌ + decisões de implementação + notas do que não testou = tudo que precisa pra review e documentação retroativa. Sem ele, você não sabe o que mudou.
126
+
127
+ ### Divergências spec↔código devem ser documentadas
128
+ **Quando se aplica:** após cada implementação.
129
+ **Por que importa:** se a spec diz X e o código faz Y (por bom motivo), documentar na seção "Decisões de implementação" da spec. Senão a spec vira mentira e perde valor como referência.
130
+
131
+ ### Validação visual no browser é insubstituível
132
+ **Quando se aplica:** qualquer feature com UI.
133
+ **Por que importa:** tsc --noEmit pega erros de tipo mas não de comportamento. Um filtro que não aplica, um botão que não navega, um layout quebrado — só vê testando no browser.
134
+
135
+ ### Fixes pequenos vão direto, sem spec
136
+ **Quando se aplica:** bugs, ajustes visuais, links faltando.
137
+ **Por que importa:** criar spec pra corrigir um link é overhead. Regra: se altera entity, cria service, adiciona endpoint ou cria tela → spec. Se é correção do que já deveria funcionar → fix direto.
138
+
139
+ ### Port fixo + report do port real
140
+ **Quando se aplica:** projetos com dev server local.
141
+ **Por que importa:** port mudando entre sessões (3000 vs 3001) causa confusão. Fixar no package.json e documentar que o Claude Code deve reportar o port real no output.
142
+
143
+ ---
144
+
145
+ ## Etapa 7 — Evolução durante o projeto
146
+
147
+ ### O processo deve suportar evolução aditiva
148
+ **Quando se aplica:** qualquer projeto que vai durar mais de uma semana.
149
+ **Por que importa:** specs novas, alterações em existentes, regras novas no CLAUDE.md — tudo deve ser aditivo, nunca destrutivo. A arquitetura "nullable pra evolução" se provou: nenhuma mudança exigiu migração destrutiva.
150
+
151
+ ### Usar o sistema real expõe gaps
152
+ **Quando se aplica:** sempre.
153
+ **Por que importa:** as melhores melhorias do DocManager vieram de testar com dados reais: campos repetíveis surgiram ao configurar padrões, DATETIME ao pensar em tipos de data. Nenhum planejamento abstrato teria pego isso.
154
+
155
+ ### Formatter desde o dia zero, linting customizado depois
156
+ **Quando se aplica:** setup de qualquer projeto.
157
+ **Por que importa:** Prettier + lint-staged + husky no setup/01 — custo mínimo, evita reformatação retroativa. Regras de linting customizadas (services não importam de Next, etc) entram quando as convenções se consolidam.
158
+
159
+ ### CLAUDE.md é documento vivo
160
+ **Quando se aplica:** durante todo o projeto.
161
+ **Por que importa:** regras operacionais surgem de problemas reais durante o desenvolvimento. Adicionar conforme aparecem, não tentar prever tudo no início.
162
+
163
+ ### Modelar pra evolução > modelar "completo"
164
+ **Quando se aplica:** design de modelo de dados.
165
+ **Por que importa:** campos nullable, enums extensíveis, constraints aditivos. Mais importante que acertar tudo de primeira é garantir que mudanças futuras não quebrem o existente.
166
+
167
+ ---
168
+
169
+ ## Etapa 8 — Retrospectiva
170
+
171
+ ### Retrospectiva é etapa formal, não opcional
172
+ **Quando se aplica:** ao final de cada fase ou do projeto.
173
+ **Por que importa:** se não parar pra fazer, as lições ficam na conversa e se perdem. A retrospectiva deve gerar artefatos concretos (este documento, templates, regras novas).
174
+
175
+ ### Fazer retro com a mesma ferramenta preserva contexto
176
+ **Quando se aplica:** ao planejar a retrospectiva.
177
+ **Por que importa:** reconstruir de memória perde nuances. Fazer na mesma conversa que conduziu o projeto permite referenciar decisões com contexto real.
178
+
179
+ ---
180
+
181
+ ## Notas exploratórias
182
+
183
+ ### Arquivo compartilhado como barramento entre agentes
184
+ Explorar uso de `inbox/instructions.md` como meio de comunicação
185
+ entre Claude.ai e Cowork — tanto pra instruções quanto pra outputs.
186
+ Evita copy-paste manual. Não validado ainda.
187
+
188
+ ### Estrutura multi-agente de referência
189
+ Setup mais poderoso possível com ferramentas atuais:
190
+ - Cowork = orquestrador (arquivos + Chrome connector)
191
+ - Claude Code = implementador (Agent Teams + Chrome)
192
+ - Claude.ai = arquiteto (sem conexão direta — humano é ponte)
193
+
194
+ ### Chrome como ponte automática
195
+ Testar Claude in Chrome lendo a aba do Claude.ai como ponte.
196
+ Promissor mas frágil — não recomendar como prática padrão
197
+ até validar em projetos reais.
198
+
199
+ ### Regras de lint customizadas pro DocManager
200
+ Avaliar adicionar: services não importam de `next`,
201
+ API routes não importam do Prisma direto,
202
+ schemas derivam da entity base.
203
+
204
+ ---
205
+
206
+ *Documento gerado ao final do projeto DocManager como parte
207
+ da retrospectiva. Cada lição tem contexto real — não são
208
+ "boas práticas genéricas" mas aprendizados de problemas
209
+ que aconteceram.*
210
+
211
+ ---
212
+
213
+ # Lições adicionais — projeto tradeBot (2026-05)
214
+
215
+ Aprendizados extraídos do refactor incremental do tradeBot.
216
+ Complementam ou refinam as lições do DocManager.
217
+
218
+ ## Etapa 9 — LLM como executor
219
+
220
+ ### Princípios técnicos vs princípios LLM-first vs valores
221
+ **Quando se aplica:** ao escrever [design-principles](./design-principles.md).
222
+ **Por que importa:** tratar tudo como "princípios" mistura regras
223
+ acionáveis com filosofia. Separação em 3 categorias:
224
+ - **Técnicos** (4): regras universais de arquitetura.
225
+ - **LLM-first** (5): regras específicas pra trabalho com LLM como executor.
226
+ - **Valores não-acionáveis** (2): cultura, sem critério binário.
227
+ LLM lê critério binário > regra textual.
228
+
229
+ ### Critérios meta padrão (M1, M2, M3)
230
+ **Quando se aplica:** toda spec.
231
+ **Por que importa:** regras textuais em CLAUDE.md são esquecidas
232
+ durante a sessão. Critério em checklist é checkpoint binário.
233
+ - **M1**: Decisões de implementação preenchidas com substância.
234
+ - **M2**: Decisões técnicas explicitadas em thinking.
235
+ - **M3**: Release checklist com símbolos ✅/❌/⚠️ por item.
236
+
237
+ ### Template literal > exemplo aspiracional
238
+ **Quando se aplica:** instruir formato de output do Code (ex: M3).
239
+ **Por que importa:** "o output deve seguir esse formato:" + bloco
240
+ de código fixo é copiado e preenchido. Exemplo aspiracional sem
241
+ "Code DEVE reportar usando este formato" é ignorado.
242
+
243
+ ### Mudanças adjacentes vão pra outra spec
244
+ **Quando se aplica:** durante implementação de qualquer spec.
245
+ **Por que importa:** preserva o binário "passou/falhou", esconde
246
+ menos escopo, mantém rastreabilidade. Bug ou refactor tentador
247
+ visto durante implementação NÃO entra na spec atual — anota em
248
+ "Decisões de implementação" e abre spec separada se relevante.
249
+
250
+ ### `_open-issues.md` como ponte entre regra e esquecimento
251
+ **Quando se aplica:** projeto com mais de 3-4 specs.
252
+ **Por que importa:** "anotar e adiar" precisa de lugar central,
253
+ não enterrado em decisões de spec. Cada item exige "Candidato a
254
+ endereçamento" explícito — sem isso, vira lixo.
255
+
256
+ ### Smoke check em código > pendente humano
257
+ **Quando se aplica:** quando bug é detectável programaticamente.
258
+ **Por que importa:** "pendente humano" significa "ninguém vai
259
+ rodar". Bug pode passar silencioso. Quando possível (round-trip,
260
+ fixture conhecida), critério vira teste programático.
261
+
262
+ ### Pragmatismo controlado: escape hatch tem destino
263
+ **Quando se aplica:** ao aceitar `as any`, `// @ts-ignore`, etc.
264
+ **Por que importa:** LLM aceita escape hatches com facilidade.
265
+ Aviso explícito: qualquer escape hatch DEVE ser documentado em
266
+ "Decisões de implementação" + ter candidato a endereçamento futuro.
267
+ Sem destino, vira dívida invisível.
268
+
269
+ ### Limite numérico funciona como guardrail
270
+ **Quando se aplica:** ao prescrever ajustes em código existente.
271
+ **Por que importa:** "se ajuste exigir mexer em mais de 5 lugares,
272
+ parar" é mais efetivo que "menor superfície" abstrato. LLM consegue
273
+ contar. Dá um número.
274
+
275
+ ### Mock pesado pra contornar acoplamento estrutural é anti-padrão
276
+ **Quando se aplica:** ao testar função que importa módulo com
277
+ side-effects.
278
+ **Por que importa:** quando o teste precisa de >2 mocks pra carregar
279
+ o módulo, o problema é a estrutura, não o teste. Solução é refactor
280
+ estrutural, não mais mocks. Caso clássico: side-effects no top-level
281
+ do entrypoint.
282
+
283
+ ### Verificar side-effects no top-level antes de prescrever import em teste
284
+ **Quando se aplica:** ao escrever spec que prescreve `export` de
285
+ função existente pra testar.
286
+ **Por que importa:** se o módulo de origem tem `process.exit`,
287
+ `new Client(...)`, `run().catch(...)` no top-level, importar em teste
288
+ vira rabbit hole. Opções: extrair função pra arquivo próprio, ou
289
+ adiar teste pra spec posterior.
290
+
291
+ ## Etapa 10 — Trabalho com snapshots e templates vivos
292
+
293
+ ### Templates vivos > snapshots zero
294
+ **Quando se aplica:** ao acumular padrões de múltiplos projetos.
295
+ **Por que importa:** snapshot por projeto preserva histórico.
296
+ Templates separados, versionados em git, mantêm o estado da arte
297
+ atualizável. Os dois são complementares — não substitutos.
298
+
299
+ ### "Fix definitivo" prematuro pode ser falso
300
+ **Quando se aplica:** ao fechar issue assumindo que causa raiz
301
+ foi resolvida.
302
+ **Por que importa:** se o sintoma reaparece em outro contexto,
303
+ o fix não era definitivo. Marcar issue como FECHADA exige observar
304
+ em pelo menos 2 sessões sem retorno do sintoma.
305
+
306
+ ### Padrão port/adapter cabe em projeto pequeno
307
+ **Quando se aplica:** projeto com lib externa cuja interface deve
308
+ ser isolada (broker, DB, AI APIs).
309
+ **Por que importa:** custo inicial baixo (~80 linhas) destrava
310
+ testabilidade, validação de respostas, e flexibilidade pra trocar
311
+ implementação. Não é overkill mesmo em projetos pequenos.
312
+
313
+ ### `.passthrough()` em Zod resolve "campos extras pra log"
314
+ **Quando se aplica:** validação de respostas de APIs externas
315
+ onde a lógica usa só alguns campos mas log/observability quer todos.
316
+ **Por que importa:** schema valida campos críticos, runtime mantém
317
+ o resto. Tipo inferido fica estrito; cast pra index signature
318
+ quando necessário.
319
+
320
+ ### `outDir` separado desde o início
321
+ **Quando se aplica:** projeto com `tsc` + Vitest (ou similar).
322
+ **Por que importa:** `tsc` gerando `.js` ao lado de `.ts` causa
323
+ conflito recorrente — Node prefere `.js` na resolução. Custo de fix
324
+ tardio: sessões bloqueadas por arquivos stale. Configurar
325
+ `outDir: ./dist/` desde a primeira sessão.
326
+
327
+ ### Múltiplas leituras fragmentadas do mesmo arquivo
328
+ **Quando se aplica:** Code lendo arquivo grande com offsets
329
+ diferentes.
330
+ **Por que importa:** custo de round-trips agregado supera custo
331
+ de uma leitura única. Antes de múltiplos `Read` com offsets,
332
+ considerar `limit: 2000` em uma única chamada.
333
+
334
+ ### Limite de "tudo numa spec" pode estourar mas vale aceitar
335
+ **Quando se aplica:** specs de refactor estrutural maior (mover
336
+ muitos arquivos).
337
+ **Por que importa:** spec-guide diz ~80-150 linhas. Refactor que
338
+ move 10+ funções com testes inevitavelmente passa de 200. Aceitar
339
+ quando o escopo é coeso é melhor que dividir em sub-specs que
340
+ violam "fases verticais entregam valor".
341
+
342
+ ---
343
+
344
+ *Lições adicionais extraídas do tradeBot. Padrão: cada lição tem
345
+ contexto, "quando se aplica", "por que importa" — não é máxima
346
+ abstrata.*
347
+
348
+ ---
349
+
350
+ # Lições adicionais — projeto painel (2026-06)
351
+
352
+ Aprendizados do **trade-bot-painel**, o 3º projeto. Aqui o **pipeline de
353
+ agentes** ([pipeline](./pipeline.md)) rodou de ponta a ponta pela 1ª vez (conceituação →
354
+ documentação funcional → geração de spec → implementação) no Incremento 1.
355
+
356
+ ## Etapa 11 — Pipeline de agentes (conceituação → spec)
357
+
358
+ ### Separar conceituação de geração de spec paga
359
+ **Quando se aplica:** projeto novo de produto, não mudança pequena.
360
+ **Por que importa:** a conceituação (`agente-conceituacao`) produz um LDoc
361
+ estável (dor, casos de uso, roadmap de incrementos, DER amplo) que vira
362
+ fonte de verdade; o gerador (`agente-gerador-spec`) só **recorta e
363
+ redistribui** isso em specs verticais. Não inventar na geração — se está
364
+ escrevendo do zero algo que já está no LDoc, o corte está errado.
365
+
366
+ ### LDoc é fonte da verdade; HDoc deriva estrito
367
+ **Quando se aplica:** qualquer artefato de documentação do pipeline.
368
+ **Por que importa:** o `.md` para LLM (LDoc) é editado; o doc humano (HDoc)
369
+ é sempre regerado dele, nunca editado à mão. Tutorial e exemplos moram no
370
+ LDoc (não só no HDoc) — servem ao gerador de spec como referência de
371
+ comportamento. Evita duas fontes divergindo.
372
+
373
+ ### Protocolo de gates > regra de gate em prosa
374
+ **Quando se aplica:** qualquer ponto de confirmação humana num agente.
375
+ **Por que importa:** os agentes "declaravam rigor e cediam a um ok genérico"
376
+ em ponto de alto risco. Externalizar para [protocolo-de-gates](./agents/protocolo-de-gates.md) (alto
377
+ risco = lista numerada, "ok" genérico não fecha, valores verificáveis =
378
+ alto risco automático) é o mesmo aprendizado dos critérios meta — checklist
379
+ binário vence atenção. Limite honesto: mais forte que prosa, não à prova
380
+ de falha.
381
+
382
+ ### Roadmap por incremento, estável mas não congelado
383
+ **Quando se aplica:** projeto que entrega em fatias de produto.
384
+ **Por que importa:** detalhar só o Incremento 1 em alta resolução e manter
385
+ os demais em baixa (nome + valor + UCs) evita compromisso prematuro. O
386
+ re-entry (detalhar o próximo incremento) inclui um checkpoint "o macro
387
+ ainda vale?" — captura aprendizado sem repetir o diálogo macro.
388
+
389
+ ### Schema frouxo ≠ dado ausente
390
+ **Quando se aplica:** ao cortar/justificar spec a partir de schemas.
391
+ **Por que importa:** `z.array(z.unknown())` significa "forma ainda não
392
+ tipada", não "o dado é vazio". No painel, `buyStack`/`sellStack` estavam
393
+ `z.unknown()` (vazios na amostra) — quando o dado real apareceu, o shape
394
+ foi determinado e as specs `monitor/01` e `03` tiparam. Tratar forma do
395
+ schema como forma, nunca como evidência sobre presença/conteúdo do dado.
396
+
397
+ ### Confronto com dado real reconcilia o DER amplo
398
+ **Quando se aplica:** geração de spec quando há exemplo real do dado.
399
+ **Por que importa:** o DER amplo (raso, por decisão) supôs `orderId` como
400
+ `string`; o JSON real tinha `number`. As specs corrigiram (fonte de verdade
401
+ = dado real) e registraram a divergência pra reconciliação a jusante. Não
402
+ infira a forma do dado da conceituação quando há o dado na mão.
403
+
404
+ ### Docs de orientação descasam do roadmap real — reconciliar cedo
405
+ **Quando se aplica:** quando o pipeline reorganiza o trabalho (ex.: de
406
+ domínio `tradebot/` para incremento `monitor/`).
407
+ **Por que importa:** `_overview`, `CLAUDE.md` (tabela de estado) e o doc de
408
+ entrada passam a mentir sobre "qual a próxima spec". A spec em si é
409
+ autocontida (não bloqueia), mas o roadmap desatualizado confunde. Issue de
410
+ roadmap precisa de candidato e fechamento, igual bug.
411
+
412
+ ### Status se lê do conteúdo, não do índice
413
+ **Quando se aplica:** ao responder "em que etapa estamos / qual a próxima"
414
+ ou "X está pronto?", tipicamente ao orientar no início de uma sessão.
415
+ **Por que importa:** numa sessão de orientação o agente respondeu a partir
416
+ das tabelas de status (`_overview`, tabela de estado do `CLAUDE.md`) — lidas
417
+ ainda por cima **truncadas** (`head -N`) — sem abrir nenhuma spec. Dois
418
+ estragos: (1) quase repassou a divergência do índice (que driftou, ver lição
419
+ acima) como verdade; (2) confundiu "Decisões de implementação preenchidas"
420
+ (rastro do **estágio 4**, por M1) com "review feito" (**estágio 5**, que tem
421
+ rastro próprio — o veredito do Review.Code), e por isso não viu que o próximo
422
+ passo era **rodar os fluxos de review**. O índice é HDoc do status: derivado
423
+ e sujeito a drift; a fonte é o **conteúdo da spec**. Regra: status se
424
+ descobre pelo **rastro nos artefatos** (tabela em [pipeline](./pipeline.md), "Em que
425
+ estágio estou?"), nunca da tabela de status, nunca de leitura truncada.
426
+ Mesma raiz da lição anterior, agora no ato de **orientar**, não de
427
+ implementar — e por isso a correção foi tornar o procedimento explícito no
428
+ `CLAUDE.md`/`pipeline`, não só descrever a falha.
429
+
430
+ ### Briefing congelado precisa de nota, não de reescrita
431
+ **Quando se aplica:** quando um snapshot canônico (ex.: `Kickoff.md`) fica
432
+ obsoleto.
433
+ **Por que importa:** reescrever um doc deliberadamente congelado apaga
434
+ história e contradiz a decisão de congelá-lo. Uma nota no topo apontando o
435
+ roadmap vigente resolve a confusão sem perder o snapshot.
436
+
437
+ ---
438
+
439
+ *Lições do painel. O pipeline de agentes teve aqui sua 1ª validação real —
440
+ tratar como método vivo, não consolidado, até acumular mais runs.*
@@ -0,0 +1,143 @@
1
+ # Pipeline de desenvolvimento
2
+
3
+ Como uma ideia vira código neste método. É a **espinha** que conecta o
4
+ discovery, os agentes de conceituação/documentação/spec ([agents/](./agents/README.md)),
5
+ o protocolo de gates e o ciclo Cowork↔Claude Code do [spec-guide](./spec-guide.md).
6
+
7
+ ## Visão geral
8
+
9
+ ```
10
+ 0 discovery → 1 conceituação → 2 doc-funcional → 3 gerador-spec → 4 Claude Code → 5 review
11
+ (kickoff) (reqs/ldoc+hdoc) (como-funciona) (specs/) (código+report) │
12
+ └────────────── protocolo-de-gates governa os gates ───────────┘ │
13
+
14
+ 5 · review (sub-cadeia): Review.Code → User Review → Review.Product → Review.LLM
15
+ (veredito) (uso humano) (roteia) (corrige pipeline)
16
+ └─ Impeditivo escala: User Review → Review.Product → Conceituação
17
+ ```
18
+
19
+ ## Os estágios
20
+
21
+ **0 · Discovery / kickoff** — [agente-kickoff](./agents/agente-kickoff.md). Entender o problema antes da
22
+ solução: build-vs-buy, orçamento de serviços externos, o que o framework
23
+ NÃO faz, volume, decisões de stack e **esboço** de modelo de dados. A porta
24
+ de entrada humana é a skill `project-kickoff` (quando instalada) ou `npx
25
+ product-runner init`; o [agente-kickoff](./agents/agente-kickoff.md) é a diretriz
26
+ versionada do estágio, copiada para `docs/agents/` no scaffold. Saída:
27
+ decisões consolidadas num briefing (ex.: `Kickoff.md`) + perfil escolhido.
28
+
29
+ **1 · Conceituação** — [agente-conceituacao](./agents/agente-conceituacao.md). Dor→conceito: diagrama de
30
+ conceitos, casos de uso, roadmap de incrementos (baixa resolução), DER
31
+ amplo, e o **Incremento 1 detalhado** (estrutura de dados, sequências,
32
+ exemplo com critérios). Gates 1 · 1.5 · 2 · 3. Saída: `reqs/ldoc.md` +
33
+ `reqs/hdoc.md`.
34
+
35
+ **2 · Documentação funcional** — [agente-documentacao-funcional](./agents/agente-documentacao-funcional.md). Como a
36
+ aplicação funciona e como usar, em tom presente. Roda por incremento,
37
+ antes da spec. Saída: `funcional/como-funciona.ldoc.md` + `.hdoc.md`.
38
+
39
+ **3 · Geração de spec** — [agente-gerador-spec](./agents/agente-gerador-spec.md). Corta o incremento em N
40
+ specs verticais no template do [spec-guide](./spec-guide.md), redistribuindo os artefatos
41
+ a montante. Gate de corte (alto risco). Saída: `specs/{domínio}/NN.md` +
42
+ [_overview](../specs/_overview.md) + [_open-issues](../specs/_open-issues.md).
43
+
44
+ **4 · Implementação** — Claude Code, **uma spec por sessão**: lê
45
+ [CLAUDE.md](../CLAUDE.md) → a spec → os `docs/` referenciados →
46
+ implementa → reporta (critérios ✅/❌ + decisões). Detalhe do ciclo e das
47
+ regras operacionais no [spec-guide](./spec-guide.md).
48
+
49
+ **5 · Review** — sub-cadeia própria, rodada **por incremento entregue**,
50
+ um agente por papel ([agents/](./agents/README.md)):
51
+
52
+ 1. **Review.Code** ([agente-review-code](./agents/agente-review-code.md)) — review técnico: cruza
53
+ cada critério de aceite com o **código real** (grep, testes, diff), não
54
+ com o report. Rastro: veredito ✅/❌/⚠️ por critério + classificação dos
55
+ achados (correção do ciclo / issue / Impeditivo). Divergências legítimas
56
+ são apontadas para as "Decisões de implementação" da spec — ele não
57
+ reescreve a spec.
58
+ 2. **User Review** ([agente-user-review](./agents/agente-user-review.md)) — prepara o teste de
59
+ usabilidade (roteiro) e trata o feedback (corte binário ajuste /
60
+ mais-que-ajuste). O julgamento é humano e intransferível. Roda após o
61
+ Review.Code.
62
+ 3. **Review.Product** ([agente-review-product](./agents/agente-review-product.md)) — hub: classifica
63
+ o feedback por **causa-raiz** e roteia ao destino (Conceituação,
64
+ Doc-funcional, Design System ou Review.LLM). Acumula a fila de produto.
65
+ 4. **Review.LLM** ([agente-review-llm](./agents/agente-review-llm.md)) — meta: a partir de uma
66
+ falha **já diagnosticada com o humano**, corrige o **próprio pipeline**
67
+ (diretiva, skill, template) pra ela não repetir, e reconcilia a mesma
68
+ inconsistência se ela propagou.
69
+
70
+ **Impeditivo** (concepção profunda achada no Review.Code) bloqueia o avanço
71
+ e escala por User Review → Review.Product → Conceituação; só o humano
72
+ bypassa. A **volta de reconciliação** (corrigir conceituação/funcional
73
+ contra o que foi construído) é coberta por Review.Product → destino — antes
74
+ era fase futura, agora está especificada nos agentes. Tratar como
75
+ recém-especificado: método vivo até acumular runs.
76
+
77
+ ## Em que estágio estou? (orientar pelo rastro)
78
+
79
+ "Qual a próxima etapa" / "X está pronto?" se descobre **lendo o conteúdo
80
+ dos artefatos**, não a tabela de status. Cada estágio deixa um **rastro**
81
+ detectável; o **primeiro estágio sem rastro é o próximo passo**:
82
+
83
+ | Estágio | Rastro de que rodou |
84
+ | --- | --- |
85
+ | 1 conceituação | `reqs/ldoc.md` existe e preenchido |
86
+ | 2 doc-funcional | `funcional/como-funciona.ldoc.md` existe |
87
+ | 3 gerador-spec | `specs/{domínio}/NN.md` existem + `_overview` populado |
88
+ | 4 implementação | report do Code (critérios ✅/❌/⚠️) + **"Decisões de implementação" preenchidas** (critério M1) |
89
+ | 5 review | **veredito do Review.Code** (cruzamento critério × código) + saídas de User/Product/LLM (filas de produto/meta) |
90
+
91
+ > **Cuidado — o erro clássico:** "Decisões de implementação" preenchidas
92
+ > são rastro do **estágio 4** (Code as preenche por M1), **não** do review.
93
+ > O estágio 5 tem rastro **próprio** (o veredito do Review.Code). Ver uma
94
+ > spec com Decisões preenchidas e concluir "review feito" é confundir os
95
+ > dois — aconteceu de verdade (ver [lessons-learned](./lessons-learned.md)). Se não há
96
+ > veredito de review, **o próximo passo é rodar os fluxos de review.**
97
+
98
+ **Regra de fonte:** a spec é a **fonte**; `_overview.md` e a tabela de
99
+ estado do `CLAUDE.md` são **índice derivado** (mesmo princípio LDoc→HDoc
100
+ abaixo). Confirme o status contra o **conteúdo da spec** antes de afirmar ou
101
+ sugerir o próximo passo. Se o índice diverge da spec, a **spec ganha** e o
102
+ índice é o que se corrige. Nunca responda status a partir de leitura
103
+ truncada (`head -N`) do índice.
104
+
105
+ ## LDoc / HDoc
106
+
107
+ - **LDoc** (`.md`, feito para LLM ler) é a **fonte da verdade** de cada
108
+ estágio. O **HDoc** é sempre **derivado** do LDoc — nunca editado à mão.
109
+ Se o humano pede mudança no HDoc, a mudança entra no LDoc e o HDoc é
110
+ regenerado.
111
+ - **Não são templates de arquivo** — nascem da execução dos agentes no
112
+ projeto. Convenção de caminhos: `reqs/` (conceituação), `funcional/`
113
+ (documentação funcional).
114
+
115
+ ## Gates (transversal)
116
+
117
+ [protocolo-de-gates](./agents/protocolo-de-gates.md) é a **fonte canônica** de gate e calibragem por
118
+ stakes: alto risco → lista numerada, "ok" genérico não fecha; valores
119
+ verificáveis (contas, critérios) = alto risco automático. Os critérios
120
+ meta **M1-M3** do [spec-guide](./spec-guide.md) são a **aplicação** desse princípio à
121
+ etapa de spec (checklist binário vence atenção textual — mesmo aprendizado).
122
+
123
+ ## Pipeline inteiro vs trecho curto
124
+
125
+ - **Projeto novo de produto:** pipeline inteiro (0→5). O discovery e a
126
+ conceituação pagam o custo quando há produto a descobrir.
127
+ - **Mudança pequena / projeto pequeno:** entrar direto no trecho
128
+ spec→implementa→review (estágios 3-5), sem conceituação formal. O
129
+ [spec-guide](./spec-guide.md) cobre esse caminho (inclui "fixes vs specs").
130
+
131
+ ## Onde mora cada coisa
132
+
133
+ | Estágio | Ferramenta |
134
+ | --- | --- |
135
+ | Discovery (0) | Skill `project-kickoff` + humano |
136
+ | Conceituação, doc-funcional, gerador-spec, review (1-3, 5) | Cowork (sessão com acesso aos arquivos) |
137
+ | Implementação (4) | Claude Code (sessão dedicada apontando pro repo) |
138
+ | Gates | Transversal — [protocolo-de-gates](./agents/protocolo-de-gates.md) |
139
+
140
+ ---
141
+
142
+ _Método vivo. Validado pela 1ª vez ponta a ponta no **trade-bot-painel**
143
+ (2026-06), Incremento 1. Tratar como hipótese até acumular mais runs._