@luanpdd/kit-mcp 1.21.0 → 1.26.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/LICENSE +21 -21
- package/README.md +914 -648
- package/kit/COMANDOS.md +138 -138
- package/kit/README.md +76 -52
- package/kit/agents/advisor-researcher.md +106 -106
- package/kit/agents/assumptions-analyzer.md +107 -107
- package/kit/agents/audit-log-implementer.md +138 -0
- package/kit/agents/auditor-consistencia-isolamento.md +413 -0
- package/kit/agents/codebase-mapper.md +768 -768
- package/kit/agents/crm-pipeline-implementer.md +106 -0
- package/kit/agents/debugger.md +813 -772
- package/kit/agents/detector-tenant-quente.md +337 -0
- package/kit/agents/evolution-go-integrator.md +21 -0
- package/kit/agents/example-reviewer.md +21 -21
- package/kit/agents/executor.md +564 -523
- package/kit/agents/integration-checker.md +200 -200
- package/kit/agents/invite-flow-implementer.md +52 -0
- package/kit/agents/lgpd-compliance-auditor.md +89 -0
- package/kit/agents/multi-tenant-isolation-auditor.md +10 -0
- package/kit/agents/multi-tenant-rls-writer.md +78 -0
- package/kit/agents/nyquist-auditor.md +178 -178
- package/kit/agents/org-onboarding-implementer.md +21 -0
- package/kit/agents/phase-researcher.md +696 -696
- package/kit/agents/plan-checker.md +272 -272
- package/kit/agents/planner.md +922 -891
- package/kit/agents/project-researcher.md +652 -652
- package/kit/agents/research-synthesizer.md +245 -245
- package/kit/agents/roadmapper.md +677 -677
- package/kit/agents/supabase-architect.md +27 -0
- package/kit/agents/supabase-auth-bootstrapper.md +80 -0
- package/kit/agents/supabase-column-privileges-writer.md +399 -0
- package/kit/agents/supabase-migration-writer.md +141 -14
- package/kit/agents/supabase-rbac-implementer.md +392 -0
- package/kit/agents/supabase-rls-hardener.md +521 -0
- package/kit/agents/supabase-rls-writer.md +105 -9
- package/kit/agents/supabase-roles-implementer.md +355 -0
- package/kit/agents/super-admin-implementer.md +99 -0
- package/kit/agents/ui-auditor.md +437 -437
- package/kit/agents/ui-checker.md +302 -302
- package/kit/agents/ui-researcher.md +355 -355
- package/kit/agents/user-profiler.md +175 -175
- package/kit/agents/validador-evolucao-schema.md +335 -0
- package/kit/agents/verifier.md +728 -728
- package/kit/commands/adicionar-backlog.md +75 -75
- package/kit/commands/adicionar-fase.md +42 -42
- package/kit/commands/adicionar-tarefa.md +45 -45
- package/kit/commands/adicionar-testes.md +41 -41
- package/kit/commands/ajuda.md +21 -21
- package/kit/commands/atualizar.md +37 -37
- package/kit/commands/auditar-marco.md +179 -179
- package/kit/commands/auditar-uat.md +23 -23
- package/kit/commands/autonomo.md +40 -40
- package/kit/commands/branch-pr.md +24 -24
- package/kit/commands/concluir-marco.md +247 -247
- package/kit/commands/configuracoes.md +36 -36
- package/kit/commands/dados-distribuidos.md +188 -0
- package/kit/commands/definir-perfil.md +10 -10
- package/kit/commands/depurar.md +190 -190
- package/kit/commands/discutir-fase.md +131 -131
- package/kit/commands/entrar-discord.md +17 -17
- package/kit/commands/estatisticas.md +18 -18
- package/kit/commands/example-greeting.md +33 -33
- package/kit/commands/executar-fase.md +58 -58
- package/kit/commands/expresso.md +56 -56
- package/kit/commands/fase-ui.md +34 -34
- package/kit/commands/fazer.md +57 -57
- package/kit/commands/fio.md +125 -125
- package/kit/commands/fluxos-trabalho.md +64 -64
- package/kit/commands/forense.md +176 -176
- package/kit/commands/gerenciador.md +38 -38
- package/kit/commands/inserir-fase.md +31 -31
- package/kit/commands/limpeza.md +17 -17
- package/kit/commands/listar-hipoteses-fase.md +45 -45
- package/kit/commands/listar-workspaces.md +18 -18
- package/kit/commands/mapear-codebase.md +70 -70
- package/kit/commands/nota.md +33 -33
- package/kit/commands/novo-marco.md +43 -43
- package/kit/commands/novo-projeto.md +41 -41
- package/kit/commands/novo-workspace.md +43 -43
- package/kit/commands/pausar-trabalho.md +37 -37
- package/kit/commands/perfil-usuario.md +45 -45
- package/kit/commands/pesquisar-fase.md +195 -195
- package/kit/commands/planejar-fase.md +67 -67
- package/kit/commands/planejar-lacunas.md +33 -33
- package/kit/commands/plantar-ideia.md +25 -25
- package/kit/commands/progresso.md +24 -24
- package/kit/commands/proximo.md +30 -30
- package/kit/commands/publicar.md +490 -490
- package/kit/commands/rapido.md +35 -35
- package/kit/commands/reaplicar-patches.md +124 -124
- package/kit/commands/relatorio-sessao.md +19 -19
- package/kit/commands/remover-fase.md +31 -31
- package/kit/commands/remover-workspace.md +26 -26
- package/kit/commands/resumo-marco.md +50 -50
- package/kit/commands/retomar-trabalho.md +40 -40
- package/kit/commands/revisar-backlog.md +60 -60
- package/kit/commands/revisar-ui.md +32 -32
- package/kit/commands/revisar.md +37 -37
- package/kit/commands/saude.md +21 -21
- package/kit/commands/setup-notion.md +93 -93
- package/kit/commands/supabase.md +55 -8
- package/kit/commands/sync-main.md +68 -68
- package/kit/commands/validar-fase.md +35 -35
- package/kit/commands/verificar-tarefas.md +44 -44
- package/kit/commands/verificar-trabalho.md +64 -64
- package/kit/file-manifest.json +52 -32
- package/kit/framework/bin/lib/commands.cjs +959 -959
- package/kit/framework/bin/lib/config.cjs +442 -442
- package/kit/framework/bin/lib/core.cjs +1230 -1230
- package/kit/framework/bin/lib/frontmatter.cjs +336 -336
- package/kit/framework/bin/lib/init.cjs +1442 -1442
- package/kit/framework/bin/lib/milestone.cjs +252 -252
- package/kit/framework/bin/lib/model-profiles.cjs +68 -68
- package/kit/framework/bin/lib/phase.cjs +888 -888
- package/kit/framework/bin/lib/profile-output.cjs +952 -952
- package/kit/framework/bin/lib/profile-pipeline.cjs +539 -539
- package/kit/framework/bin/lib/roadmap.cjs +329 -329
- package/kit/framework/bin/lib/security.cjs +382 -382
- package/kit/framework/bin/lib/state.cjs +1031 -1031
- package/kit/framework/bin/lib/template.cjs +222 -222
- package/kit/framework/bin/lib/uat.cjs +282 -282
- package/kit/framework/bin/lib/verify.cjs +888 -888
- package/kit/framework/bin/lib/workstream.cjs +491 -491
- package/kit/framework/bin/tools.cjs +918 -918
- package/kit/framework/commands/workstreams.md +63 -63
- package/kit/framework/references/checkpoints.md +778 -778
- package/kit/framework/references/continuation-format.md +249 -249
- package/kit/framework/references/decimal-phase-calculation.md +64 -64
- package/kit/framework/references/git-integration.md +295 -295
- package/kit/framework/references/git-planning-commit.md +38 -38
- package/kit/framework/references/model-profile-resolution.md +36 -36
- package/kit/framework/references/model-profiles.md +139 -139
- package/kit/framework/references/phase-argument-parsing.md +61 -61
- package/kit/framework/references/planning-config.md +202 -202
- package/kit/framework/references/questioning.md +162 -162
- package/kit/framework/references/tdd.md +263 -263
- package/kit/framework/references/ui-brand.md +160 -160
- package/kit/framework/references/user-profiling.md +657 -657
- package/kit/framework/references/verification-patterns.md +612 -612
- package/kit/framework/references/workstream-flag.md +58 -58
- package/kit/framework/templates/DEBUG.md +164 -164
- package/kit/framework/templates/UAT.md +265 -265
- package/kit/framework/templates/UI-SPEC.md +100 -100
- package/kit/framework/templates/VALIDATION.md +76 -76
- package/kit/framework/templates/claude-md.md +122 -122
- package/kit/framework/templates/codebase/architecture.md +185 -185
- package/kit/framework/templates/codebase/concerns.md +205 -205
- package/kit/framework/templates/codebase/conventions.md +204 -204
- package/kit/framework/templates/codebase/integrations.md +192 -192
- package/kit/framework/templates/codebase/stack.md +158 -158
- package/kit/framework/templates/codebase/structure.md +199 -199
- package/kit/framework/templates/codebase/testing.md +301 -301
- package/kit/framework/templates/config.json +44 -44
- package/kit/framework/templates/context.md +352 -352
- package/kit/framework/templates/continue-here.md +78 -78
- package/kit/framework/templates/copilot-instructions.md +7 -7
- package/kit/framework/templates/debug-subagent-prompt.md +91 -91
- package/kit/framework/templates/dev-preferences.md +20 -20
- package/kit/framework/templates/discovery.md +146 -146
- package/kit/framework/templates/discussion-log.md +63 -63
- package/kit/framework/templates/milestone-archive.md +123 -123
- package/kit/framework/templates/milestone.md +115 -115
- package/kit/framework/templates/phase-prompt.md +610 -610
- package/kit/framework/templates/planner-subagent-prompt.md +117 -117
- package/kit/framework/templates/project.md +186 -186
- package/kit/framework/templates/requirements.md +231 -231
- package/kit/framework/templates/research-project/ARCHITECTURE.md +204 -204
- package/kit/framework/templates/research-project/FEATURES.md +147 -147
- package/kit/framework/templates/research-project/PITFALLS.md +200 -200
- package/kit/framework/templates/research-project/STACK.md +120 -120
- package/kit/framework/templates/research-project/SUMMARY.md +170 -170
- package/kit/framework/templates/research.md +419 -419
- package/kit/framework/templates/retrospective.md +54 -54
- package/kit/framework/templates/roadmap.md +202 -202
- package/kit/framework/templates/state.md +176 -176
- package/kit/framework/templates/summary-complex.md +59 -59
- package/kit/framework/templates/summary-minimal.md +41 -41
- package/kit/framework/templates/summary-standard.md +48 -48
- package/kit/framework/templates/summary.md +209 -209
- package/kit/framework/templates/user-profile.md +146 -146
- package/kit/framework/templates/user-setup.md +256 -256
- package/kit/framework/templates/verification-report.md +258 -258
- package/kit/framework/workflows/add-phase.md +112 -112
- package/kit/framework/workflows/add-tests.md +351 -351
- package/kit/framework/workflows/add-todo.md +158 -158
- package/kit/framework/workflows/audit-milestone.md +340 -340
- package/kit/framework/workflows/audit-uat.md +109 -109
- package/kit/framework/workflows/autonomous.md +891 -891
- package/kit/framework/workflows/check-todos.md +177 -177
- package/kit/framework/workflows/cleanup.md +152 -152
- package/kit/framework/workflows/complete-milestone.md +696 -696
- package/kit/framework/workflows/diagnose-issues.md +231 -231
- package/kit/framework/workflows/discovery-phase.md +289 -289
- package/kit/framework/workflows/discuss-phase-assumptions.md +653 -653
- package/kit/framework/workflows/discuss-phase.md +784 -784
- package/kit/framework/workflows/do.md +104 -104
- package/kit/framework/workflows/execute-phase.md +838 -838
- package/kit/framework/workflows/execute-plan.md +510 -510
- package/kit/framework/workflows/fast.md +102 -102
- package/kit/framework/workflows/forensics.md +265 -265
- package/kit/framework/workflows/health.md +181 -181
- package/kit/framework/workflows/help.md +619 -619
- package/kit/framework/workflows/insert-phase.md +130 -130
- package/kit/framework/workflows/list-phase-assumptions.md +178 -178
- package/kit/framework/workflows/list-workspaces.md +56 -56
- package/kit/framework/workflows/manager.md +362 -362
- package/kit/framework/workflows/map-codebase.md +377 -377
- package/kit/framework/workflows/milestone-summary.md +223 -223
- package/kit/framework/workflows/new-milestone.md +486 -486
- package/kit/framework/workflows/new-project.md +1159 -1159
- package/kit/framework/workflows/new-workspace.md +237 -237
- package/kit/framework/workflows/next.md +97 -97
- package/kit/framework/workflows/node-repair.md +92 -92
- package/kit/framework/workflows/note.md +156 -156
- package/kit/framework/workflows/pause-work.md +176 -176
- package/kit/framework/workflows/plan-milestone-gaps.md +273 -273
- package/kit/framework/workflows/plan-phase.md +765 -765
- package/kit/framework/workflows/plant-seed.md +169 -169
- package/kit/framework/workflows/pr-branch.md +129 -129
- package/kit/framework/workflows/profile-user.md +450 -450
- package/kit/framework/workflows/progress.md +507 -507
- package/kit/framework/workflows/quick.md +757 -757
- package/kit/framework/workflows/remove-phase.md +155 -155
- package/kit/framework/workflows/remove-workspace.md +90 -90
- package/kit/framework/workflows/research-phase.md +82 -82
- package/kit/framework/workflows/resume-project.md +326 -326
- package/kit/framework/workflows/review.md +228 -228
- package/kit/framework/workflows/session-report.md +146 -146
- package/kit/framework/workflows/settings.md +283 -283
- package/kit/framework/workflows/ship.md +228 -228
- package/kit/framework/workflows/stats.md +60 -60
- package/kit/framework/workflows/transition.md +671 -671
- package/kit/framework/workflows/ui-phase.md +302 -302
- package/kit/framework/workflows/ui-review.md +165 -165
- package/kit/framework/workflows/update.md +323 -323
- package/kit/framework/workflows/validate-phase.md +174 -174
- package/kit/framework/workflows/verify-phase.md +252 -252
- package/kit/framework/workflows/verify-work.md +637 -637
- package/kit/hooks/check-update.js +118 -118
- package/kit/hooks/context-monitor.js +163 -163
- package/kit/hooks/prompt-guard.js +103 -103
- package/kit/hooks/statusline.js +125 -125
- package/kit/hooks/workflow-guard.js +101 -101
- package/kit/settings.json +45 -45
- package/kit/skills/_shared-dados-distribuidos/glossary.md +224 -0
- package/kit/skills/_shared-supabase/glossary.md +27 -0
- package/kit/skills/armadilhas-sistemas-distribuidos/SKILL.md +447 -0
- package/kit/skills/audit-log-multi-tenant/SKILL.md +6 -0
- package/kit/skills/cascading-failures/SKILL.md +4 -0
- package/kit/skills/consistencia-leitura-replica/SKILL.md +385 -0
- package/kit/skills/crm-lead-pipeline-patterns/SKILL.md +17 -0
- package/kit/skills/escolha-modelo-consistencia/SKILL.md +495 -0
- package/kit/skills/evolucao-schema-compativel/SKILL.md +448 -0
- package/kit/skills/example-skill/SKILL.md +42 -42
- package/kit/skills/multi-tenant-performance-scaling/SKILL.md +4 -0
- package/kit/skills/multi-tenant-rls-hierarchy/SKILL.md +4 -0
- package/kit/skills/postgres-isolamento-concorrencia/SKILL.md +552 -0
- package/kit/skills/rbac-permissions-matrix-supabase/SKILL.md +37 -0
- package/kit/skills/streams-eventos-cdc/SKILL.md +712 -0
- package/kit/skills/supabase-column-level-security/SKILL.md +426 -0
- package/kit/skills/supabase-cron-queues/SKILL.md +9 -0
- package/kit/skills/supabase-custom-claims-rbac/SKILL.md +472 -0
- package/kit/skills/supabase-database-functions/SKILL.md +85 -0
- package/kit/skills/supabase-migrations/SKILL.md +133 -11
- package/kit/skills/supabase-postgres-roles/SKILL.md +392 -0
- package/kit/skills/supabase-rls-defense-in-depth/SKILL.md +418 -0
- package/kit/skills/supabase-rls-policies/SKILL.md +462 -12
- package/kit/skills/super-admin-platform-pattern/SKILL.md +4 -0
- package/kit/skills/tenant-quente-mitigacao/SKILL.md +605 -0
- package/package.json +63 -63
- package/src/core/kit.js +216 -216
- package/src/core/reflect.js +247 -247
- package/src/core/reverse-sync.js +372 -372
- package/src/core/sync.js +418 -418
- package/src/core/watch.js +121 -121
|
@@ -1,784 +1,784 @@
|
|
|
1
|
-
<purpose>
|
|
2
|
-
Extrair decisões de implementação que agentes downstream precisam. Analisar a fase para identificar áreas cinzentas, deixar o usuário escolher o que discutir, então fazer deep-dive em cada área selecionada até a satisfação.
|
|
3
|
-
|
|
4
|
-
Você é um parceiro de pensamento, não um entrevistador. O usuário é o visionário — você é o construtor. Seu trabalho é capturar decisões que guiarão pesquisa e planejamento, não descobrir a implementação por conta própria.
|
|
5
|
-
</purpose>
|
|
6
|
-
|
|
7
|
-
<downstream_awareness>
|
|
8
|
-
**CONTEXT.md alimenta:**
|
|
9
|
-
|
|
10
|
-
1. **phase-researcher** — Lê CONTEXT.md para saber O QUE pesquisar
|
|
11
|
-
- "Usuário quer layout baseado em cards" → pesquisador investiga padrões de componentes de card
|
|
12
|
-
- "Scroll infinito decidido" → pesquisador investiga bibliotecas de virtualização
|
|
13
|
-
|
|
14
|
-
2. **planner** — Lê CONTEXT.md para saber QUAIS decisões estão bloqueadas
|
|
15
|
-
- "Pull-to-refresh no mobile" → planejador inclui isso nas especificações de tarefas
|
|
16
|
-
- "Discrição do Claude: skeleton de carregamento" → planejador pode decidir a abordagem
|
|
17
|
-
|
|
18
|
-
**Seu trabalho:** Capturar decisões claramente o suficiente para que agentes downstream possam agir nelas sem perguntar ao usuário novamente.
|
|
19
|
-
|
|
20
|
-
**Não é seu trabalho:** Descobrir COMO implementar. Isso é o que pesquisa e planejamento fazem com as decisões que você captura.
|
|
21
|
-
</downstream_awareness>
|
|
22
|
-
|
|
23
|
-
<philosophy>
|
|
24
|
-
**Usuário = visionário. Claude = construtor.**
|
|
25
|
-
|
|
26
|
-
Usuário SABE: como imagina, visual/sensação, essencial vs nice-to-have, referências específicas.
|
|
27
|
-
Usuário NÃO sabe (não pergunte): padrões da codebase (pesquisador lê), riscos técnicos (pesquisador), abordagem de implementação (planejador), métricas (inferidas).
|
|
28
|
-
|
|
29
|
-
Pergunte sobre visão e escolhas; capture decisões pra agentes downstream.
|
|
30
|
-
</philosophy>
|
|
31
|
-
|
|
32
|
-
<scope_guardrail>
|
|
33
|
-
**CRÍTICO: sem expansão de escopo.** Limite da fase vem do ROADMAP e é FIXO. Discussão clarifica COMO, nunca SE adicionar capacidades.
|
|
34
|
-
|
|
35
|
-
| Permitido (clarifica) | Não permitido (expande) |
|
|
36
|
-
|---|---|
|
|
37
|
-
| "Como exibir posts?" (layout, densidade) | "Adicionar comentários?" (nova capacidade) |
|
|
38
|
-
| "O que em estado vazio?" | "E busca/filtragem?" |
|
|
39
|
-
| "Pull-to-refresh ou manual?" | "Incluir favoritos?" |
|
|
40
|
-
|
|
41
|
-
**Heurística:** clarifica o que já está na fase, ou adiciona capacidade que merece fase própria?
|
|
42
|
-
|
|
43
|
-
**Quando usuário sugere expansão:** "[X] seria nova capacidade — fase própria. Anoto pro backlog. De volta a [tópico]." Capture em "Ideias Adiadas". Não perca, não aja.
|
|
44
|
-
</scope_guardrail>
|
|
45
|
-
|
|
46
|
-
<supabase_detection>
|
|
47
|
-
**Detecção de fase Supabase:** antes de identificar áreas cinzentas genéricas, verifique se a fase mexe em Supabase (DB/Auth/Realtime/Edge Functions/Storage/RLS/migrations).
|
|
48
|
-
|
|
49
|
-
Sinais de fase Supabase no objetivo do ROADMAP.md ou nos REQs mapeados:
|
|
50
|
-
- Menções a "Supabase", "Postgres", "RLS", "policy", "migration", "supabase/migrations/", "supabase/schemas/", "supabase/functions/"
|
|
51
|
-
- Menções a "Auth Next.js", "@supabase/ssr", "magic link", "OAuth", "MFA"
|
|
52
|
-
- Menções a "broadcast", "realtime", "presence", "postgres_changes"
|
|
53
|
-
- Menções a "Edge Function", "Deno", "pgvector", "RAG", "pg_cron", "pgmq"
|
|
54
|
-
- Menções a "bucket", "signed URL", "storage.objects"
|
|
55
|
-
|
|
56
|
-
**Se for fase Supabase:** considere delegar a discussão para o agent `supabase-architect` em vez de gerar áreas cinzentas genéricas. O architect já tem template de perguntas Supabase-específicas (tier Free/Pro, branches, RLS strategy multi-tenant, schema design, topology realtime, custos de egress/branches).
|
|
57
|
-
|
|
58
|
-
```
|
|
59
|
-
Task(subagent_type=supabase-architect, prompt="Projete schema + RLS + topologia para esta fase Supabase: {phase_goal}. Retorne plano em formato Markdown estruturado para servir de base ao CONTEXT.md.")
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
Use o output do architect como base do `<decisions>` do CONTEXT.md em vez de fazer questionamento manual. **Para fases mistas** (parte Supabase, parte genérica) — use architect só para a parte Supabase, depois faça discussão padrão para o resto.
|
|
63
|
-
</supabase_detection>
|
|
64
|
-
|
|
65
|
-
<gray_area_identification>
|
|
66
|
-
Áreas cinzentas são **decisões de implementação que o usuário se importa** — coisas que podem ir de múltiplas formas e mudariam o resultado.
|
|
67
|
-
|
|
68
|
-
**Como identificar áreas cinzentas:**
|
|
69
|
-
|
|
70
|
-
1. **Ler o objetivo da fase** do ROADMAP.md
|
|
71
|
-
2. **Entender o domínio** — Que tipo de coisa está sendo construída?
|
|
72
|
-
- Algo que usuários VÊM → apresentação visual, interações, estados importam
|
|
73
|
-
- Algo que usuários CHAMAM → contratos de interface, respostas, erros importam
|
|
74
|
-
- Algo que usuários EXECUTAM → invocação, saída, modos de comportamento importam
|
|
75
|
-
- Algo que usuários LÊM → estrutura, tom, profundidade, fluxo importam
|
|
76
|
-
- Algo sendo ORGANIZADO → critérios, agrupamento, tratamento de exceções importam
|
|
77
|
-
3. **Gerar áreas cinzentas específicas da fase** — Não categorias genéricas, mas decisões concretas para ESTA fase
|
|
78
|
-
|
|
79
|
-
**Não use rótulos genéricos** (UI/UX/Comportamento). Gere áreas específicas. Exemplos: Auth → sessão, erros, multi-device, recuperação. Backups CLI → output, flags, progress, recovery. Foto biblioteca → agrupamento, duplicatas, nomenclatura, pastas. API docs → estrutura, exemplos, versionamento, interativos.
|
|
80
|
-
|
|
81
|
-
**Pergunta-chave:** quais decisões mudariam o resultado que o usuário deveria opinar?
|
|
82
|
-
|
|
83
|
-
**Claude trata sozinho (não perguntar):** detalhes técnicos, padrões de arquitetura, otimização, escopo (roadmap define).
|
|
84
|
-
</gray_area_identification>
|
|
85
|
-
|
|
86
|
-
<answer_validation>
|
|
87
|
-
**IMPORTANTE: Validação de resposta** — Após cada chamada AskUserQuestion, verificar se a resposta está vazia ou contém apenas espaços em branco. Se sim:
|
|
88
|
-
1. Tentar a pergunta novamente com os mesmos parâmetros
|
|
89
|
-
2. Se ainda vazia, apresentar as opções como uma lista numerada em texto simples e pedir ao usuário que digite o número da sua escolha
|
|
90
|
-
Nunca prosseguir com uma resposta vazia.
|
|
91
|
-
|
|
92
|
-
**Modo texto (`workflow.text_mode: true` na config ou flag `--text`):**
|
|
93
|
-
Quando o modo texto estiver ativo, **não use AskUserQuestion de forma alguma**. Em vez disso, apresente cada
|
|
94
|
-
pergunta como uma lista numerada em texto simples e peça ao usuário que digite o número da sua escolha.
|
|
95
|
-
Isso é necessário para sessões remotas do Claude Code (modo `/rc`) onde o App Claude
|
|
96
|
-
não pode encaminhar seleções de menu TUI de volta ao host.
|
|
97
|
-
|
|
98
|
-
Ativar modo texto:
|
|
99
|
-
- Por sessão: passar flag `--text` para qualquer comando (ex: `/discutir-fase --text`)
|
|
100
|
-
- Por projeto: `tools config-set workflow.text_mode true`
|
|
101
|
-
|
|
102
|
-
O modo texto aplica-se a TODOS os workflows na sessão, não apenas ao discuss-phase.
|
|
103
|
-
</answer_validation>
|
|
104
|
-
|
|
105
|
-
<process>
|
|
106
|
-
|
|
107
|
-
**Caminho expresso disponível:** Se você já tem um PRD ou documento de critérios de aceitação, use `/planejar-fase {fase} --prd caminho/para/prd.md` para pular esta discussão e ir direto ao planejamento.
|
|
108
|
-
|
|
109
|
-
<step name="initialize" priority="first">
|
|
110
|
-
Número da fase do argumento (obrigatório).
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
INIT=$(node "./.claude/framework/bin/tools.cjs" init phase-op "${PHASE}")
|
|
114
|
-
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
115
|
-
AGENT_SKILLS_ADVISOR=$(node "./.claude/framework/bin/tools.cjs" agent-skills advisor 2>/dev/null)
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
Analisar JSON para: `commit_docs`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `has_research`, `has_context`, `has_plans`, `has_verification`, `plan_count`, `roadmap_exists`, `planning_exists`.
|
|
119
|
-
|
|
120
|
-
**Se `phase_found` for false:**
|
|
121
|
-
```
|
|
122
|
-
Fase [X] não encontrada no roadmap.
|
|
123
|
-
|
|
124
|
-
Use /progresso ${WS} para ver as fases disponíveis.
|
|
125
|
-
```
|
|
126
|
-
Sair do workflow.
|
|
127
|
-
|
|
128
|
-
**Se `phase_found` for true:** Continuar para check_existing.
|
|
129
|
-
|
|
130
|
-
**Modo auto** — Se `--auto` estiver presente em ARGUMENTS:
|
|
131
|
-
- Em `check_existing`: auto-selecionar "Pular" (se contexto existir) ou continuar sem prompt (se sem contexto/planos)
|
|
132
|
-
- Em `present_gray_areas`: auto-selecionar TODAS as áreas cinzentas sem perguntar ao usuário
|
|
133
|
-
- Em `discuss_areas`: para cada pergunta de discussão, escolher a opção recomendada (primeira opção, ou a marcada como "recomendada") sem usar AskUserQuestion
|
|
134
|
-
- Logar cada escolha auto-selecionada inline para que o usuário possa revisar decisões no arquivo de contexto
|
|
135
|
-
- Após a discussão concluir, avançar automaticamente para plan-phase (comportamento existente)
|
|
136
|
-
</step>
|
|
137
|
-
|
|
138
|
-
<step name="check_existing">
|
|
139
|
-
Verificar se CONTEXT.md já existe usando `has_context` do init.
|
|
140
|
-
|
|
141
|
-
```bash
|
|
142
|
-
ls ${phase_dir}/*-CONTEXT.md 2>/dev/null || true
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
**Se existir:**
|
|
146
|
-
|
|
147
|
-
**Se `--auto`:** Auto-selecionar "Atualizar" — carregar contexto existente e continuar para analyze_phase. Logar: `[auto] Contexto existe — atualizando com decisões auto-selecionadas.`
|
|
148
|
-
|
|
149
|
-
**Caso contrário:** Usar AskUserQuestion:
|
|
150
|
-
- header: "Contexto"
|
|
151
|
-
- question: "Fase [X] já tem contexto. O que você quer fazer?"
|
|
152
|
-
- options:
|
|
153
|
-
- "Atualizar" — Revisar e revisar contexto existente
|
|
154
|
-
- "Visualizar" — Me mostra o que há
|
|
155
|
-
- "Pular" — Usar contexto existente como está
|
|
156
|
-
|
|
157
|
-
Se "Atualizar": Carregar existente, continuar para analyze_phase
|
|
158
|
-
Se "Visualizar": Exibir CONTEXT.md, então oferecer atualizar/pular
|
|
159
|
-
Se "Pular": Sair do workflow
|
|
160
|
-
|
|
161
|
-
**Se não existir:**
|
|
162
|
-
|
|
163
|
-
Verificar `has_plans` e `plan_count` do init. **Se `has_plans` for true:**
|
|
164
|
-
|
|
165
|
-
**Se `--auto`:** Auto-selecionar "Continuar e replanejar depois". Logar: `[auto] Planos existem — continuando com captura de contexto, replanejará depois.`
|
|
166
|
-
|
|
167
|
-
**Caso contrário:** Usar AskUserQuestion:
|
|
168
|
-
- header: "Planos existem"
|
|
169
|
-
- question: "Fase [X] já tem {plan_count} plano(s) criado(s) sem contexto do usuário. Suas decisões aqui não afetarão os planos existentes a menos que você replane."
|
|
170
|
-
- options:
|
|
171
|
-
- "Continuar e replanejar depois" — Capturar contexto, então executar /planejar-fase {X} ${WS} para replanejar
|
|
172
|
-
- "Visualizar planos existentes" — Mostrar planos antes de decidir
|
|
173
|
-
- "Cancelar" — Pular discuss-phase
|
|
174
|
-
|
|
175
|
-
Se "Continuar e replanejar depois": Continuar para analyze_phase.
|
|
176
|
-
Se "Visualizar planos existentes": Exibir arquivos de plano, então oferecer "Continuar" / "Cancelar".
|
|
177
|
-
Se "Cancelar": Sair do workflow.
|
|
178
|
-
|
|
179
|
-
**Se `has_plans` for false:** Continuar para load_prior_context.
|
|
180
|
-
</step>
|
|
181
|
-
|
|
182
|
-
<step name="load_prior_context">
|
|
183
|
-
Ler PROJECT.md (visão/princípios/inegociáveis), REQUIREMENTS.md (critérios/must-haves), STATE.md (progresso/flags). Encontrar CONTEXT.md anteriores (`find .planning/phases -name "*-CONTEXT.md" | sort`); pra cada um com número < fase atual, extrair `<decisions>` (preferências bloqueadas) e `<specifics>` (refs particulares).
|
|
184
|
-
|
|
185
|
-
Construir contexto interno `<prior_decisions>` com seções "Nível de Projeto" + "Das Fases Anteriores".
|
|
186
|
-
|
|
187
|
-
**Uso downstream:** `analyze_phase` pula áreas já decididas; `present_gray_areas` anota com refs ("Você escolheu X na Fase 5"); `discuss_areas` pré-preenche ou sinaliza conflitos. Sem contexto anterior → continuar (esperado pra fases iniciais).
|
|
188
|
-
</step>
|
|
189
|
-
|
|
190
|
-
<step name="cross_reference_todos">
|
|
191
|
-
Verificar se alguma tarefa pendente é relevante ao escopo desta fase. Exibe itens do backlog que de outra forma poderiam ser perdidos.
|
|
192
|
-
|
|
193
|
-
**Carregar e corresponder tarefas:**
|
|
194
|
-
```bash
|
|
195
|
-
TODO_MATCHES=$(node "./.claude/framework/bin/tools.cjs" todo match-phase "${PHASE_NUMBER}")
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
Analisar JSON para: `todo_count`, `matches[]` (cada um com `file`, `title`, `area`, `score`, `reasons`).
|
|
199
|
-
|
|
200
|
-
**Se `todo_count` for 0 ou `matches` estiver vazio:** Pular silenciosamente — sem atraso no workflow.
|
|
201
|
-
|
|
202
|
-
**Se correspondências encontradas:**
|
|
203
|
-
|
|
204
|
-
Apresentar tarefas correspondentes ao usuário. Mostrar cada correspondência com seu título, área e por que correspondeu:
|
|
205
|
-
|
|
206
|
-
```
|
|
207
|
-
📋 Encontradas {N} tarefa(s) pendente(s) que podem ser relevantes para a Fase {X}:
|
|
208
|
-
|
|
209
|
-
{Para cada correspondência:}
|
|
210
|
-
- **{título}** (área: {área}, relevância: {score}) — correspondeu em {reasons}
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
Usar AskUserQuestion (multiSelect) perguntando quais tarefas incorporar ao escopo desta fase:
|
|
214
|
-
|
|
215
|
-
```
|
|
216
|
-
Quais dessas tarefas devem ser incorporadas ao escopo da Fase {X}?
|
|
217
|
-
(Selecione as que se aplicam, ou nenhuma para pular)
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
**Para tarefas selecionadas (incorporadas):**
|
|
221
|
-
- Armazenar internamente como `<folded_todos>` para inclusão na seção `<decisions>` do CONTEXT.md
|
|
222
|
-
- Estes se tornam itens de escopo adicionais que agentes downstream (pesquisador, planejador) verão
|
|
223
|
-
|
|
224
|
-
**Para tarefas não selecionadas (revisadas mas não incorporadas):**
|
|
225
|
-
- Armazenar internamente como `<reviewed_todos>` para inclusão na seção `<deferred>` do CONTEXT.md
|
|
226
|
-
- Isso evita que fases futuras re-exibam as mesmas tarefas como "perdidas"
|
|
227
|
-
|
|
228
|
-
**Modo auto (`--auto`):** Incorporar todas as tarefas com score >= 0,4 automaticamente. Logar a seleção.
|
|
229
|
-
</step>
|
|
230
|
-
|
|
231
|
-
<step name="scout_codebase">
|
|
232
|
-
Varredura leve do código existente para informar identificação de áreas cinzentas e discussão. Usa ~10% do contexto — aceitável para uma sessão interativa.
|
|
233
|
-
|
|
234
|
-
**Passo 1: Verificar mapas de codebase existentes**
|
|
235
|
-
```bash
|
|
236
|
-
ls .planning/codebase/*.md 2>/dev/null || true
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
**Mapas de codebase existem (`.planning/codebase/*.md`):** ler CONVENTIONS/STRUCTURE/STACK conforme tipo da fase. Extrair: ativos reutilizáveis, padrões estabelecidos, pontos de integração.
|
|
240
|
-
|
|
241
|
-
**Sem mapas:** grep direcionado por termos-chave do objetivo (`grep -rl "termo1\|termo2" src/ app/ --include='*.{ts,tsx,js,jsx}' | head -10`) + `ls src/{components,hooks,lib,utils}/`. Ler 3-5 arquivos mais relevantes.
|
|
242
|
-
|
|
243
|
-
Construir `<codebase_context>` interno: ativos reutilizáveis, padrões, pontos de integração, opções criativas que a arquitetura habilita/restringe. Não escreve em arquivo — só sessão atual.
|
|
244
|
-
</step>
|
|
245
|
-
|
|
246
|
-
<step name="analyze_phase">
|
|
247
|
-
Analisar a fase para identificar áreas cinzentas que valem a discussão. **Usar tanto `prior_decisions` quanto `codebase_context` para embasar a análise.**
|
|
248
|
-
|
|
249
|
-
**Ler a descrição da fase do ROADMAP.md e determinar:**
|
|
250
|
-
|
|
251
|
-
1. **Limite de domínio** — Qual capacidade esta fase está entregando? Declará-la claramente.
|
|
252
|
-
|
|
253
|
-
1b. **Inicializar acumulador de refs canônicas** — Começar a construir a lista `<canonical_refs>` para CONTEXT.md. Isso se acumula ao longo de toda a discussão, não apenas neste passo.
|
|
254
|
-
|
|
255
|
-
**Fonte 1 (agora):** Copiar `Canonical refs:` do ROADMAP.md para esta fase. Expandir cada uma para um caminho relativo completo.
|
|
256
|
-
**Fonte 2 (agora):** Verificar REQUIREMENTS.md e PROJECT.md por quaisquer specs/ADRs referenciados para esta fase.
|
|
257
|
-
**Fonte 3 (scout_codebase):** Se código existente referencia docs (ex: comentários citando ADRs), adicionar esses.
|
|
258
|
-
**Fonte 4 (discuss_areas):** Quando o usuário disser "leia X", "verifique Y", ou referenciar qualquer doc/spec/ADR durante a discussão — adicionar imediatamente. Estes são frequentemente as refs MAIS importantes porque representam docs que o usuário especificamente quer seguidos.
|
|
259
|
-
|
|
260
|
-
Esta lista é OBRIGATÓRIA no CONTEXT.md. Cada ref deve ter um caminho relativo completo para que agentes downstream possam lê-la diretamente. Se não existirem docs externos, note isso explicitamente.
|
|
261
|
-
|
|
262
|
-
2. **Verificar decisões anteriores** — Antes de gerar áreas cinzentas, verificar se alguma já foi decidida:
|
|
263
|
-
- Escanear `<prior_decisions>` por escolhas relevantes (ex: "Somente Ctrl+C, sem atalhos de tecla única")
|
|
264
|
-
- Estas estão **pré-respondidas** — não re-perguntar a menos que esta fase tenha necessidades conflitantes
|
|
265
|
-
- Notar decisões anteriores aplicáveis para uso na apresentação
|
|
266
|
-
|
|
267
|
-
3. **Áreas cinzentas por categoria** — Para cada categoria relevante (UI, UX, Comportamento, Estados Vazios, Conteúdo), identificar 1-2 ambiguidades específicas que mudariam a implementação. **Anotar com contexto de código onde relevante** (ex: "Você já tem um componente Card" ou "Sem padrão existente para isso").
|
|
268
|
-
|
|
269
|
-
4. **Avaliação de pulo** — Se não existirem áreas cinzentas significativas (infraestrutura pura, implementação clara, ou tudo já decidido em fases anteriores), a fase pode não precisar de discussão.
|
|
270
|
-
|
|
271
|
-
**Detecção de Modo Advisor:**
|
|
272
|
-
|
|
273
|
-
`ADVISOR_MODE = exists("./.claude/framework/USER-PROFILE.md")`. Se false, pular todos os passos advisor — workflow conversacional inalterado.
|
|
274
|
-
|
|
275
|
-
Se true, resolver `calibration_tier` por prioridade: (1) `config.json > preferences.vendor_philosophy` (project), (2) USER-PROFILE.md Vendor Choices/Philosophy (global), (3) default `standard`. Mapeamento: `conservative`/`thorough-evaluator` → `full_maturity`; `opinionated` → `minimal_decisive`; `pragmatic-fast` ou outro/vazio → `standard`.
|
|
276
|
-
|
|
277
|
-
`ADVISOR_MODEL=$(node "./.claude/framework/bin/tools.cjs" resolve-model advisor-researcher --raw)`
|
|
278
|
-
|
|
279
|
-
**Produzir sua análise internamente, então apresentar ao usuário.**
|
|
280
|
-
|
|
281
|
-
Exemplo de análise para fase "Feed de Posts" (com código e contexto anterior):
|
|
282
|
-
```
|
|
283
|
-
Domínio: Exibindo posts de usuários seguidos
|
|
284
|
-
Existente: Componente Card (src/components/ui/Card.tsx), hook useInfiniteQuery, Tailwind CSS
|
|
285
|
-
Decisões anteriores: "UI minimalista preferida" (Fase 2), "Sem paginação — sempre scroll infinito" (Fase 4)
|
|
286
|
-
Áreas cinzentas:
|
|
287
|
-
- UI: Estilo de layout (cards vs timeline vs grid) — Componente Card existe com variantes shadow/rounded
|
|
288
|
-
- UI: Densidade de informação (posts completos vs prévias) — sem padrões de densidade existentes
|
|
289
|
-
- Comportamento: Padrão de carregamento — JÁ DECIDIDO: scroll infinito (Fase 4)
|
|
290
|
-
- Estado Vazio: O que mostra quando não há posts — Componente EmptyState existe em ui/
|
|
291
|
-
- Conteúdo: Quais metadados exibir (hora, autor, contagem de reações)
|
|
292
|
-
```
|
|
293
|
-
</step>
|
|
294
|
-
|
|
295
|
-
<step name="present_gray_areas">
|
|
296
|
-
Apresentar o limite de domínio, decisões anteriores e áreas cinzentas ao usuário.
|
|
297
|
-
|
|
298
|
-
**Primeiro, declarar o limite e quaisquer decisões anteriores que se aplicam:**
|
|
299
|
-
```
|
|
300
|
-
Fase [X]: [Nome]
|
|
301
|
-
Domínio: [O que esta fase entrega — da sua análise]
|
|
302
|
-
|
|
303
|
-
Vamos clarificar COMO implementar isso.
|
|
304
|
-
(Novas capacidades pertencem a outras fases.)
|
|
305
|
-
|
|
306
|
-
[Se decisões anteriores se aplicam:]
|
|
307
|
-
**Carregando de fases anteriores:**
|
|
308
|
-
- [Decisão da Fase N que se aplica aqui]
|
|
309
|
-
- [Decisão da Fase M que se aplica aqui]
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
**Se `--auto`:** Auto-selecionar TODAS as áreas cinzentas. Logar: `[auto] Selecionadas todas as áreas cinzentas: [lista de nomes das áreas].` Pular o AskUserQuestion abaixo e continuar diretamente para discuss_areas com todas as áreas selecionadas.
|
|
313
|
-
|
|
314
|
-
**Caso contrário, usar AskUserQuestion (multiSelect: true):**
|
|
315
|
-
- header: "Discutir"
|
|
316
|
-
- question: "Quais áreas você quer discutir para [nome da fase]?"
|
|
317
|
-
- options: Gerar 3-4 áreas cinzentas específicas da fase, cada uma com:
|
|
318
|
-
- "[Área específica]" (rótulo) — concreto, não genérico
|
|
319
|
-
- [1-2 perguntas que isso cobre + anotação de contexto de código] (descrição)
|
|
320
|
-
- **Destacar a escolha recomendada com breve explicação do porquê**
|
|
321
|
-
|
|
322
|
-
**Anotações de decisão anterior:** Quando uma área cinzenta já foi decidida em uma fase anterior, anotá-la:
|
|
323
|
-
```
|
|
324
|
-
☐ Atalhos de saída — Como os usuários devem sair?
|
|
325
|
-
(Você decidiu "Somente Ctrl+C, sem atalhos de tecla única" na Fase 5 — revisitar ou manter?)
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
**Anotações de contexto de código:** Quando o scout encontrou código existente relevante, anotar a descrição da área cinzenta:
|
|
329
|
-
```
|
|
330
|
-
☐ Estilo de layout — Cards vs lista vs timeline?
|
|
331
|
-
(Você já tem um componente Card com variantes shadow/rounded. Reutilizá-lo mantém o app consistente.)
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
**Combinando ambos:** Quando tanto decisões anteriores quanto contexto de código se aplicam:
|
|
335
|
-
```
|
|
336
|
-
☐ Comportamento de carregamento — Scroll infinito ou paginação?
|
|
337
|
-
(Você escolheu scroll infinito na Fase 4. Hook useInfiniteQuery já configurado.)
|
|
338
|
-
```
|
|
339
|
-
|
|
340
|
-
**NÃO incluir opção "pular" ou "você decide".** O usuário executou este comando para discutir — dar escolhas reais.
|
|
341
|
-
|
|
342
|
-
**Exemplos por domínio:**
|
|
343
|
-
- Feed de Posts: layout (cards/lista/timeline), carregamento (infinito/paginação), ordenação, metadados
|
|
344
|
-
- Backup CLI: output (JSON/tabela/texto), flags (curtas/longas), progress (silencioso/bar/verbose), recovery (fail-fast/retry)
|
|
345
|
-
- Foto biblioteca: agrupamento (data/local/face/evento), duplicatas (melhor/todos/prompt), nomenclatura, pastas
|
|
346
|
-
|
|
347
|
-
Continuar para discuss_areas com áreas selecionadas (ou advisor_research se ADVISOR_MODE for true).
|
|
348
|
-
</step>
|
|
349
|
-
|
|
350
|
-
<step name="advisor_research">
|
|
351
|
-
**Pesquisa Advisor** (somente quando ADVISOR_MODE for true)
|
|
352
|
-
|
|
353
|
-
Após o usuário selecionar áreas cinzentas em present_gray_areas, criar agentes de pesquisa paralelos.
|
|
354
|
-
|
|
355
|
-
1. Exibir status breve: "Pesquisando {N} áreas..."
|
|
356
|
-
|
|
357
|
-
2. Para CADA área cinzenta selecionada pelo usuário, criar um Task() em paralelo:
|
|
358
|
-
|
|
359
|
-
Task(
|
|
360
|
-
prompt="First, read @./.claude/agents/advisor-researcher.md for your role and instructions.
|
|
361
|
-
|
|
362
|
-
<gray_area>{area_name}: {area_description from gray area identification}</gray_area>
|
|
363
|
-
<phase_context>{phase_goal and description from ROADMAP.md}</phase_context>
|
|
364
|
-
<project_context>{project name and brief description from PROJECT.md}</project_context>
|
|
365
|
-
<calibration_tier>{resolved calibration tier: full_maturity | standard | minimal_decisive}</calibration_tier>
|
|
366
|
-
|
|
367
|
-
Research this gray area and return a structured comparison table with rationale.
|
|
368
|
-
${AGENT_SKILLS_ADVISOR}",
|
|
369
|
-
subagent_type="general-purpose",
|
|
370
|
-
model="{ADVISOR_MODEL}",
|
|
371
|
-
description="Research: {area_name}"
|
|
372
|
-
)
|
|
373
|
-
|
|
374
|
-
Todas as chamadas Task() criam simultaneamente — NÃO aguardar uma antes de iniciar a próxima.
|
|
375
|
-
|
|
376
|
-
3. Após TODOS os agentes retornarem, SINTETIZAR resultados antes de apresentar:
|
|
377
|
-
Para o retorno de cada agente:
|
|
378
|
-
a. Analisar a tabela de comparação markdown e parágrafo de raciocínio
|
|
379
|
-
b. Verificar se todas as 5 colunas estão presentes (Option | Pros | Cons | Complexity | Recommendation) — preencher colunas ausentes em vez de mostrar tabela quebrada
|
|
380
|
-
c. Verificar contagem de opções contra o tier de calibração:
|
|
381
|
-
- full_maturity: 3-5 opções aceitável
|
|
382
|
-
- standard: 2-4 opções aceitável
|
|
383
|
-
- minimal_decisive: 1-2 opções aceitável
|
|
384
|
-
Se agente retornou demais, remover as menos viáveis. Se poucas demais, aceitar como está.
|
|
385
|
-
d. Reescrever parágrafo de raciocínio para incorporar contexto do projeto e contexto de discussão em andamento ao qual o agente não tinha acesso
|
|
386
|
-
e. Se agente retornou apenas 1 opção, converter de formato de tabela para recomendação direta: "Abordagem padrão para {área}: {opção}. {raciocínio}"
|
|
387
|
-
|
|
388
|
-
4. Armazenar tabelas sintetizadas para uso em discuss_areas.
|
|
389
|
-
|
|
390
|
-
**Se ADVISOR_MODE for false:** Pular este passo inteiramente — prosseguir diretamente de present_gray_areas para discuss_areas.
|
|
391
|
-
</step>
|
|
392
|
-
|
|
393
|
-
<step name="discuss_areas">
|
|
394
|
-
Discutir cada área selecionada com o usuário. O fluxo depende do modo advisor.
|
|
395
|
-
|
|
396
|
-
**Se ADVISOR_MODE for true:**
|
|
397
|
-
|
|
398
|
-
Fluxo de discussão com tabela primeiro — apresentar tabelas de comparação baseadas em pesquisa, então capturar escolhas do usuário.
|
|
399
|
-
|
|
400
|
-
**Para cada área selecionada:**
|
|
401
|
-
|
|
402
|
-
1. **Apresentar a tabela de comparação sintetizada + parágrafo de raciocínio** (do passo advisor_research)
|
|
403
|
-
|
|
404
|
-
2. **Usar AskUserQuestion:**
|
|
405
|
-
- header: "{area_name}"
|
|
406
|
-
- question: "Qual abordagem para {area_name}?"
|
|
407
|
-
- options: Extrair da coluna Option da tabela (AskUserQuestion adiciona "Outro" automaticamente)
|
|
408
|
-
|
|
409
|
-
3. **Registrar a seleção do usuário:**
|
|
410
|
-
- Se o usuário escolher das opções da tabela → registrar como decisão bloqueada para essa área
|
|
411
|
-
- Se o usuário escolher "Outro" → receber seu input, refletir de volta para confirmação, registrar
|
|
412
|
-
|
|
413
|
-
4. **Após registrar escolha, Claude decide se perguntas de acompanhamento são necessárias:**
|
|
414
|
-
- Se a escolha tem ambiguidade que afetaria o planejamento downstream → fazer 1-2 perguntas de acompanhamento direcionadas usando AskUserQuestion
|
|
415
|
-
- Se a escolha é clara e autocontida → mover para próxima área
|
|
416
|
-
- NÃO fazer as 4 perguntas padrão — a tabela já forneceu o contexto
|
|
417
|
-
|
|
418
|
-
5. **Após todas as áreas processadas:**
|
|
419
|
-
- header: "Concluído"
|
|
420
|
-
- question: "Isso cobre [listar áreas]. Pronto para criar contexto?"
|
|
421
|
-
- options: "Criar contexto" / "Revisitar uma área"
|
|
422
|
-
|
|
423
|
-
**Tratamento de expansão de escopo (modo advisor):**
|
|
424
|
-
Se o usuário mencionar algo fora do domínio da fase:
|
|
425
|
-
```
|
|
426
|
-
"[Funcionalidade] parece uma nova capacidade — pertence à sua própria fase.
|
|
427
|
-
Vou anotá-la como uma ideia adiada.
|
|
428
|
-
|
|
429
|
-
De volta a [área atual]: [retornar à pergunta atual]"
|
|
430
|
-
```
|
|
431
|
-
|
|
432
|
-
Rastrear ideias adiadas internamente.
|
|
433
|
-
|
|
434
|
-
---
|
|
435
|
-
|
|
436
|
-
**Se ADVISOR_MODE for false:**
|
|
437
|
-
|
|
438
|
-
Para cada área selecionada, conduzir um loop de discussão focado.
|
|
439
|
-
|
|
440
|
-
**Modos opcionais (lidos de config + args):**
|
|
441
|
-
|
|
442
|
-
- **`workflow.research_before_questions: true`** ou padrão off — antes de cada área, fazer 2-3 bullet de melhores práticas via web, apresentar com a pergunta. Ex: "OAuth 2.0 + PKCE é padrão atual pra SPAs; cookies httpOnly preferidos vs localStorage; passkey/WebAuthn em alta 2025-2026."
|
|
443
|
-
- **`--text` ou `workflow.text_mode: true`** — substitui TODOS AskUserQuestion por listas numeradas em texto simples (necessário em sessões remotas Claude Code `/rc`).
|
|
444
|
-
- **`--batch[=N]`** (default 4 quando ausente, range 2-5) — 1 turno agrupado com N perguntas numeradas em vez de N turnos de pergunta única. Após responder, refletir capturas e fazer follow-up mínimo.
|
|
445
|
-
- **`--analyze`** — antes de cada pergunta (ou batch), fornecer mini-tabela de trade-offs (2-3 opções, prós/contras baseados na codebase + padrões), recomendação destacada, pitfalls.
|
|
446
|
-
|
|
447
|
-
**Filosofia:** adaptativo, usuário escolhe o ritmo. Default: 4 turnos de pergunta única, depois verifica continuar. `--batch`: 1 turno agrupado, depois verifica.
|
|
448
|
-
|
|
449
|
-
Cada resposta (ou conjunto de respostas, no modo batch) deve revelar a próxima pergunta ou próximo batch.
|
|
450
|
-
|
|
451
|
-
**Modo auto (`--auto`):** Para cada área, Claude seleciona a opção recomendada (primeira opção, ou a explicitamente marcada como "recomendada") para cada pergunta sem usar AskUserQuestion. Logar cada escolha auto-selecionada:
|
|
452
|
-
```
|
|
453
|
-
[auto] [Área] — P: "[texto da pergunta]" → Selecionado: "[opção escolhida]" (padrão recomendado)
|
|
454
|
-
```
|
|
455
|
-
Após todas as áreas serem auto-resolvidas, pular o prompt "Explorar mais áreas cinzentas" e prosseguir diretamente para write_context.
|
|
456
|
-
|
|
457
|
-
**Modo interativo (sem `--auto`):**
|
|
458
|
-
|
|
459
|
-
**Para cada área:**
|
|
460
|
-
|
|
461
|
-
1. **Anunciar a área:**
|
|
462
|
-
```
|
|
463
|
-
Vamos falar sobre [Área].
|
|
464
|
-
```
|
|
465
|
-
|
|
466
|
-
2. **Fazer perguntas usando o ritmo selecionado:**
|
|
467
|
-
|
|
468
|
-
**Padrão (sem `--batch`): Fazer 4 perguntas usando AskUserQuestion**
|
|
469
|
-
- header: "[Área]" (máx 12 chars — abreviar se necessário)
|
|
470
|
-
- question: Decisão específica para esta área
|
|
471
|
-
- options: 2-3 escolhas concretas (AskUserQuestion adiciona "Outro" automaticamente), com a escolha recomendada destacada e breve explicação do porquê
|
|
472
|
-
- **Anotar opções com contexto de código** quando relevante:
|
|
473
|
-
```
|
|
474
|
-
"Como os posts devem ser exibidos?"
|
|
475
|
-
- Cards (reutiliza o componente Card existente — consistente com Mensagens)
|
|
476
|
-
- Lista (mais simples, seria um novo padrão)
|
|
477
|
-
- Timeline (precisa de novo componente Timeline — nenhum existe ainda)
|
|
478
|
-
```
|
|
479
|
-
- Incluir "Você decide" como opção quando razoável — captura discrição do Claude
|
|
480
|
-
- **Context7 para escolhas de biblioteca:** Quando uma área cinzenta envolve seleção de biblioteca (ex: "magic links" → consultar docs do next-auth) ou decisões de abordagem de API, usar ferramentas `mcp__context7__*` para buscar documentação atual e informar as opções. Não usar Context7 para cada pergunta — apenas quando conhecimento específico da biblioteca melhora as opções.
|
|
481
|
-
|
|
482
|
-
**Modo batch (`--batch`): Fazer 2-5 perguntas numeradas em um turno de texto simples**
|
|
483
|
-
- Agrupar perguntas intimamente relacionadas para a área atual em uma única mensagem
|
|
484
|
-
- Manter cada pergunta concreta e respondível em uma resposta
|
|
485
|
-
- Quando opções são úteis, incluir escolhas inline curtas por pergunta em vez de um AskUserQuestion separado para cada item
|
|
486
|
-
- Após a resposta do usuário, refletir de volta as decisões capturadas, notar itens não respondidos, e fazer apenas o mínimo de acompanhamento necessário antes de prosseguir
|
|
487
|
-
- Preservar adaptabilidade entre batches: usar o conjunto completo de respostas para decidir o próximo batch ou se a área está suficientemente clara
|
|
488
|
-
|
|
489
|
-
3. **Após o conjunto atual de perguntas, verificar:**
|
|
490
|
-
- header: "[Área]" (máx 12 chars)
|
|
491
|
-
- question: "Mais perguntas sobre [área], ou mover para próxima? (Restantes: [listar outras áreas não visitadas])"
|
|
492
|
-
- options: "Mais perguntas" / "Próxima área"
|
|
493
|
-
|
|
494
|
-
Ao construir o texto da pergunta, listar as áreas não visitadas restantes para que o usuário saiba o que vem a seguir. Por exemplo: "Mais perguntas sobre Layout, ou mover para próxima? (Restantes: Comportamento de carregamento, Ordenação de conteúdo)"
|
|
495
|
-
|
|
496
|
-
Se "Mais perguntas" → fazer mais 4 perguntas únicas, ou mais um batch de 2-5 perguntas quando `--batch` estiver ativo, então verificar novamente
|
|
497
|
-
Se "Próxima área" → prosseguir para próxima área selecionada
|
|
498
|
-
Se "Outro" (texto livre) → interpretar intenção: frases de continuação ("mais", "continuar", "sim", "mais perguntas") mapeiam para "Mais perguntas"; frases de avanço ("feito", "continuar", "próximo", "pular") mapeiam para "Próxima área". Se ambíguo, perguntar: "Continuar com mais perguntas sobre [área], ou mover para a próxima área?"
|
|
499
|
-
|
|
500
|
-
4. **Após todas as áreas inicialmente selecionadas concluírem:**
|
|
501
|
-
- Resumir o que foi capturado da discussão até agora
|
|
502
|
-
- AskUserQuestion:
|
|
503
|
-
- header: "Concluído"
|
|
504
|
-
- question: "Discutimos [listar áreas]. Quais áreas cinzentas permanecem pouco claras?"
|
|
505
|
-
- options: "Explorar mais áreas cinzentas" / "Estou pronto para o contexto"
|
|
506
|
-
- Se "Explorar mais áreas cinzentas":
|
|
507
|
-
- Identificar 2-4 áreas cinzentas adicionais com base no que foi aprendido
|
|
508
|
-
- Retornar à lógica de present_gray_areas com essas novas áreas
|
|
509
|
-
- Loop: discutir novas áreas, então solicitar novamente
|
|
510
|
-
- Se "Estou pronto para o contexto": Prosseguir para write_context
|
|
511
|
-
|
|
512
|
-
**Acumulação de refs canônicas:** quando usuário referencia doc/spec/ADR (ex: "leia adr-014"), imediatamente: leia o doc, adicione ao acumulador com caminho relativo completo, use pra informar perguntas seguintes. Esses são frequentemente MAIS importantes que refs do ROADMAP — usuário quer que agentes downstream sigam. Nunca perca.
|
|
513
|
-
|
|
514
|
-
**Design de perguntas:** opções concretas (não "Opção A"), cada resposta informa a próxima. Se usuário escolher "Outro" pra texto livre, faça acompanhamento em prompt simples (NÃO outro AskUserQuestion); reflita de volta e confirme.
|
|
515
|
-
|
|
516
|
-
**Expansão de escopo:** ver `<scope_guardrail>` acima — anote como Ideia Adiada, retorne ao tópico.
|
|
517
|
-
|
|
518
|
-
**Log interno por pergunta:** área, opções apresentadas, seleção do usuário, notas de acompanhamento. Usado pra gerar DISCUSSION-LOG.md no `write_context`.
|
|
519
|
-
</step>
|
|
520
|
-
|
|
521
|
-
<step name="write_context">
|
|
522
|
-
Criar CONTEXT.md capturando as decisões tomadas.
|
|
523
|
-
|
|
524
|
-
**Também gerar DISCUSSION-LOG.md** — uma trilha de auditoria completa do Q&A do discuss-phase.
|
|
525
|
-
Este arquivo é apenas para referência humana (auditorias de software, revisões de conformidade). NÃO é
|
|
526
|
-
consumido por agentes downstream (pesquisador, planejador, executor).
|
|
527
|
-
|
|
528
|
-
**Encontrar ou criar diretório de fase:**
|
|
529
|
-
|
|
530
|
-
Usar valores do init: `phase_dir`, `phase_slug`, `padded_phase`.
|
|
531
|
-
|
|
532
|
-
Se `phase_dir` for null (fase existe no roadmap mas sem diretório):
|
|
533
|
-
```bash
|
|
534
|
-
mkdir -p ".planning/phases/${padded_phase}-${phase_slug}"
|
|
535
|
-
```
|
|
536
|
-
|
|
537
|
-
**Localização do arquivo:** `${phase_dir}/${padded_phase}-CONTEXT.md`
|
|
538
|
-
|
|
539
|
-
**Estruturar o conteúdo pelo que foi discutido:**
|
|
540
|
-
|
|
541
|
-
```markdown
|
|
542
|
-
# Fase [X]: [Nome] - Contexto
|
|
543
|
-
|
|
544
|
-
**Coletado:** [data]
|
|
545
|
-
**Status:** Pronto para planejamento
|
|
546
|
-
|
|
547
|
-
<domain>
|
|
548
|
-
## Limite da Fase
|
|
549
|
-
|
|
550
|
-
[Declaração clara do que esta fase entrega — a âncora de escopo]
|
|
551
|
-
|
|
552
|
-
</domain>
|
|
553
|
-
|
|
554
|
-
<decisions>
|
|
555
|
-
## Decisões de Implementação
|
|
556
|
-
|
|
557
|
-
### [Categoria 1 que foi discutida]
|
|
558
|
-
- **D-01:** [Decisão ou preferência capturada]
|
|
559
|
-
- **D-02:** [Outra decisão se aplicável]
|
|
560
|
-
|
|
561
|
-
### [Categoria 2 que foi discutida]
|
|
562
|
-
- **D-03:** [Decisão ou preferência capturada]
|
|
563
|
-
|
|
564
|
-
### Discrição do Claude
|
|
565
|
-
[Áreas onde o usuário disse "você decide" — notar que Claude tem flexibilidade aqui]
|
|
566
|
-
|
|
567
|
-
### Tarefas Incorporadas
|
|
568
|
-
[Se alguma tarefa foi incorporada ao escopo do passo cross_reference_todos, listá-las aqui.
|
|
569
|
-
Cada entrada deve incluir o título da tarefa, problema original e como se encaixa no escopo desta fase.
|
|
570
|
-
Se nenhuma tarefa foi incorporada: omitir esta subseção inteiramente.]
|
|
571
|
-
|
|
572
|
-
</decisions>
|
|
573
|
-
|
|
574
|
-
<canonical_refs>
|
|
575
|
-
## Referências Canônicas
|
|
576
|
-
|
|
577
|
-
**Agentes downstream DEVEM ler estas antes de planejar ou implementar.**
|
|
578
|
-
|
|
579
|
-
[Seção OBRIGATÓRIA. Escrever aqui a lista COMPLETA de refs canônicas acumuladas.
|
|
580
|
-
Fontes: refs do ROADMAP.md + refs do REQUIREMENTS.md + docs referenciados pelo usuário durante
|
|
581
|
-
a discussão + quaisquer docs descobertos durante a varredura da codebase. Agrupar por área de tópico.
|
|
582
|
-
Cada entrada precisa de um caminho relativo completo — não apenas um nome.]
|
|
583
|
-
|
|
584
|
-
### [Área de tópico 1]
|
|
585
|
-
- `caminho/para/adr-ou-spec.md` — [O que decide/define que é relevante]
|
|
586
|
-
- `caminho/para/doc.md` §N — [Referência de seção específica]
|
|
587
|
-
|
|
588
|
-
### [Área de tópico 2]
|
|
589
|
-
- `caminho/para/feature-doc.md` — [O que este doc define]
|
|
590
|
-
|
|
591
|
-
[Se sem specs externas: "Sem specs externas — requisitos totalmente capturados nas decisões acima"]
|
|
592
|
-
|
|
593
|
-
</canonical_refs>
|
|
594
|
-
|
|
595
|
-
<code_context>
|
|
596
|
-
## Insights de Código Existente
|
|
597
|
-
|
|
598
|
-
### Ativos Reutilizáveis
|
|
599
|
-
- [Componente/hook/utilitário]: [Como poderia ser usado nesta fase]
|
|
600
|
-
|
|
601
|
-
### Padrões Estabelecidos
|
|
602
|
-
- [Padrão]: [Como restringe/habilita esta fase]
|
|
603
|
-
|
|
604
|
-
### Pontos de Integração
|
|
605
|
-
- [Onde novo código se conecta ao sistema existente]
|
|
606
|
-
|
|
607
|
-
</code_context>
|
|
608
|
-
|
|
609
|
-
<specifics>
|
|
610
|
-
## Ideias Específicas
|
|
611
|
-
|
|
612
|
-
[Quaisquer referências particulares, exemplos, ou momentos "quero como X" da discussão]
|
|
613
|
-
|
|
614
|
-
[Se nenhum: "Sem requisitos específicos — aberto a abordagens padrão"]
|
|
615
|
-
|
|
616
|
-
</specifics>
|
|
617
|
-
|
|
618
|
-
<deferred>
|
|
619
|
-
## Ideias Adiadas
|
|
620
|
-
|
|
621
|
-
[Ideias que surgiram mas pertencem a outras fases. Não as perder.]
|
|
622
|
-
|
|
623
|
-
### Tarefas Revisadas (não incorporadas)
|
|
624
|
-
[Se alguma tarefa foi revisada em cross_reference_todos mas não incorporada ao escopo,
|
|
625
|
-
listá-las aqui para que fases futuras saibam que foram consideradas.
|
|
626
|
-
Cada entrada: título da tarefa + motivo pelo qual foi adiada (fora do escopo, pertence à Fase Y, etc.)
|
|
627
|
-
Se sem tarefas revisadas-mas-adiadas: omitir esta subseção inteiramente.]
|
|
628
|
-
|
|
629
|
-
[Se nenhum: "Nenhum — discussão ficou dentro do escopo da fase"]
|
|
630
|
-
|
|
631
|
-
</deferred>
|
|
632
|
-
|
|
633
|
-
---
|
|
634
|
-
|
|
635
|
-
*Fase: XX-nome*
|
|
636
|
-
*Contexto coletado: [data]*
|
|
637
|
-
```
|
|
638
|
-
|
|
639
|
-
Escrever arquivo.
|
|
640
|
-
</step>
|
|
641
|
-
|
|
642
|
-
<step name="confirm_creation">
|
|
643
|
-
Apresentar resumo e próximos passos:
|
|
644
|
-
|
|
645
|
-
```
|
|
646
|
-
Criado: .planning/phases/${PADDED_PHASE}-${SLUG}/${PADDED_PHASE}-CONTEXT.md
|
|
647
|
-
|
|
648
|
-
## Decisões Capturadas
|
|
649
|
-
|
|
650
|
-
### [Categoria]
|
|
651
|
-
- [Decisão-chave]
|
|
652
|
-
|
|
653
|
-
### [Categoria]
|
|
654
|
-
- [Decisão-chave]
|
|
655
|
-
|
|
656
|
-
[Se ideias adiadas existirem:]
|
|
657
|
-
## Anotado para Depois
|
|
658
|
-
- [Ideia adiada] — fase futura
|
|
659
|
-
|
|
660
|
-
---
|
|
661
|
-
|
|
662
|
-
## ▶ Próximo Passo
|
|
663
|
-
|
|
664
|
-
**Fase ${PHASE}: [Nome]** — [Objetivo do ROADMAP.md]
|
|
665
|
-
|
|
666
|
-
`/planejar-fase ${PHASE} ${WS}`
|
|
667
|
-
|
|
668
|
-
<sub>`/clear` primeiro → janela de contexto fresca</sub>
|
|
669
|
-
|
|
670
|
-
---
|
|
671
|
-
|
|
672
|
-
**Também disponível:**
|
|
673
|
-
- `/planejar-fase ${PHASE} --skip-research ${WS}` — planejar sem pesquisa
|
|
674
|
-
- `/fase-ui ${PHASE} ${WS}` — gerar contrato de design de UI antes do planejamento (se a fase tem trabalho de frontend)
|
|
675
|
-
- Revisar/editar CONTEXT.md antes de continuar
|
|
676
|
-
|
|
677
|
-
---
|
|
678
|
-
```
|
|
679
|
-
</step>
|
|
680
|
-
|
|
681
|
-
<step name="git_commit">
|
|
682
|
-
**Escrever DISCUSSION-LOG.md antes de commitar:**
|
|
683
|
-
|
|
684
|
-
**Localização do arquivo:** `${phase_dir}/${padded_phase}-DISCUSSION-LOG.md`
|
|
685
|
-
|
|
686
|
-
```markdown
|
|
687
|
-
# Fase [X]: [Nome] - Log de Discussão
|
|
688
|
-
|
|
689
|
-
> **Somente trilha de auditoria.** Não usar como entrada para agentes de planejamento, pesquisa ou execução.
|
|
690
|
-
> Decisões são capturadas no CONTEXT.md — este log preserva as alternativas consideradas.
|
|
691
|
-
|
|
692
|
-
**Data:** [data ISO]
|
|
693
|
-
**Fase:** [número-fase]-[nome-fase]
|
|
694
|
-
**Áreas discutidas:** [lista separada por vírgula]
|
|
695
|
-
|
|
696
|
-
---
|
|
697
|
-
|
|
698
|
-
[Para cada área cinzenta discutida:]
|
|
699
|
-
|
|
700
|
-
## [Nome da Área]
|
|
701
|
-
|
|
702
|
-
| Opção | Descrição | Selecionada |
|
|
703
|
-
|-------|-----------|-------------|
|
|
704
|
-
| [Opção 1] | [Descrição do AskUserQuestion] | |
|
|
705
|
-
| [Opção 2] | [Descrição] | ✓ |
|
|
706
|
-
| [Opção 3] | [Descrição] | |
|
|
707
|
-
|
|
708
|
-
**Escolha do usuário:** [Opção selecionada ou resposta em texto livre]
|
|
709
|
-
**Notas:** [Quaisquer esclarecimentos, contexto de acompanhamento, ou raciocínio fornecido pelo usuário]
|
|
710
|
-
|
|
711
|
-
---
|
|
712
|
-
|
|
713
|
-
[Repetir para cada área]
|
|
714
|
-
|
|
715
|
-
## Discrição do Claude
|
|
716
|
-
|
|
717
|
-
[Listar áreas onde o usuário disse "você decide" ou delegou ao Claude]
|
|
718
|
-
|
|
719
|
-
## Ideias Adiadas
|
|
720
|
-
|
|
721
|
-
[Ideias mencionadas durante a discussão que foram anotadas para fases futuras]
|
|
722
|
-
```
|
|
723
|
-
|
|
724
|
-
Escrever arquivo.
|
|
725
|
-
|
|
726
|
-
Commitar contexto da fase e log de discussão:
|
|
727
|
-
|
|
728
|
-
```bash
|
|
729
|
-
node "./.claude/framework/bin/tools.cjs" commit "docs(${padded_phase}): capture phase context" --files "${phase_dir}/${padded_phase}-CONTEXT.md" "${phase_dir}/${padded_phase}-DISCUSSION-LOG.md"
|
|
730
|
-
```
|
|
731
|
-
|
|
732
|
-
Confirmar: "Commitado: docs(${padded_phase}): capturar contexto da fase"
|
|
733
|
-
</step>
|
|
734
|
-
|
|
735
|
-
<step name="update_state">
|
|
736
|
-
Atualizar STATE.md com informações da sessão:
|
|
737
|
-
|
|
738
|
-
```bash
|
|
739
|
-
node "./.claude/framework/bin/tools.cjs" state record-session \
|
|
740
|
-
--stopped-at "Phase ${PHASE} context gathered" \
|
|
741
|
-
--resume-file "${phase_dir}/${padded_phase}-CONTEXT.md"
|
|
742
|
-
```
|
|
743
|
-
|
|
744
|
-
Commitar STATE.md:
|
|
745
|
-
|
|
746
|
-
```bash
|
|
747
|
-
node "./.claude/framework/bin/tools.cjs" commit "docs(state): record phase ${PHASE} context session" --files .planning/STATE.md
|
|
748
|
-
```
|
|
749
|
-
</step>
|
|
750
|
-
|
|
751
|
-
<step name="auto_advance">
|
|
752
|
-
**Detecção:** flag `--auto` em $ARGUMENTS, OR `workflow._auto_chain_active=true`, OR `workflow.auto_advance=true`.
|
|
753
|
-
|
|
754
|
-
**Sync de cadeia:** se usuário invocou manualmente (sem `--auto`), zere `workflow._auto_chain_active` (mas NÃO toque `workflow.auto_advance` — preferência do usuário). Se `--auto` presente e cadeia não estava ativa, set `_auto_chain_active=true` (handle uso direto de `--auto` sem new-project).
|
|
755
|
-
|
|
756
|
-
**Quando ativo:** dispare `Skill(skill="framework:planejar-fase", args="${PHASE} --auto ${WS}")` (use Skill, não Task aninhado — evita freeze de runtime, issue #686).
|
|
757
|
-
|
|
758
|
-
**Roteamento de retorno do plan-phase:**
|
|
759
|
-
- `FASE CONCLUÍDA` → cadeia completa. Próximo: `/discutir-fase ${NEXT_PHASE} --auto ${WS}` (após `/clear`)
|
|
760
|
-
- `PLANEJAMENTO CONCLUÍDO` → execução parou. Continuar: `/executar-fase ${PHASE} ${WS}`
|
|
761
|
-
- `PLANEJAMENTO INCONCLUSIVO / CHECKPOINT` → parou. Continuar: `/planejar-fase ${PHASE} ${WS}`
|
|
762
|
-
- `LACUNAS ENCONTRADAS` → parou. Continuar: `/planejar-fase ${PHASE} --gaps ${WS}`
|
|
763
|
-
|
|
764
|
-
**Quando inativo:** rotear pra `confirm_creation` (comportamento manual existente).
|
|
765
|
-
</step>
|
|
766
|
-
|
|
767
|
-
</process>
|
|
768
|
-
|
|
769
|
-
<success_criteria>
|
|
770
|
-
- Fase validada contra o roadmap
|
|
771
|
-
- Contexto anterior carregado (PROJECT.md, REQUIREMENTS.md, STATE.md, arquivos CONTEXT.md anteriores)
|
|
772
|
-
- Questões já decididas não re-perguntadas (carregadas de fases anteriores)
|
|
773
|
-
- Codebase varrida por ativos reutilizáveis, padrões e pontos de integração
|
|
774
|
-
- Áreas cinzentas identificadas por análise inteligente com anotações de código e decisão anterior
|
|
775
|
-
- Usuário selecionou quais áreas discutir
|
|
776
|
-
- Cada área selecionada explorada até satisfação do usuário (com opções informadas por código e por decisões anteriores)
|
|
777
|
-
- Expansão de escopo redirecionada para ideias adiadas
|
|
778
|
-
- CONTEXT.md captura decisões reais, não visão vaga
|
|
779
|
-
- CONTEXT.md inclui seção canonical_refs com caminhos completos de arquivos para cada spec/ADR/doc que agentes downstream precisam (OBRIGATÓRIO — nunca omitir)
|
|
780
|
-
- CONTEXT.md inclui seção code_context com ativos e padrões reutilizáveis
|
|
781
|
-
- Ideias adiadas preservadas para fases futuras
|
|
782
|
-
- STATE.md atualizado com informações da sessão
|
|
783
|
-
- Usuário sabe os próximos passos
|
|
784
|
-
</success_criteria>
|
|
1
|
+
<purpose>
|
|
2
|
+
Extrair decisões de implementação que agentes downstream precisam. Analisar a fase para identificar áreas cinzentas, deixar o usuário escolher o que discutir, então fazer deep-dive em cada área selecionada até a satisfação.
|
|
3
|
+
|
|
4
|
+
Você é um parceiro de pensamento, não um entrevistador. O usuário é o visionário — você é o construtor. Seu trabalho é capturar decisões que guiarão pesquisa e planejamento, não descobrir a implementação por conta própria.
|
|
5
|
+
</purpose>
|
|
6
|
+
|
|
7
|
+
<downstream_awareness>
|
|
8
|
+
**CONTEXT.md alimenta:**
|
|
9
|
+
|
|
10
|
+
1. **phase-researcher** — Lê CONTEXT.md para saber O QUE pesquisar
|
|
11
|
+
- "Usuário quer layout baseado em cards" → pesquisador investiga padrões de componentes de card
|
|
12
|
+
- "Scroll infinito decidido" → pesquisador investiga bibliotecas de virtualização
|
|
13
|
+
|
|
14
|
+
2. **planner** — Lê CONTEXT.md para saber QUAIS decisões estão bloqueadas
|
|
15
|
+
- "Pull-to-refresh no mobile" → planejador inclui isso nas especificações de tarefas
|
|
16
|
+
- "Discrição do Claude: skeleton de carregamento" → planejador pode decidir a abordagem
|
|
17
|
+
|
|
18
|
+
**Seu trabalho:** Capturar decisões claramente o suficiente para que agentes downstream possam agir nelas sem perguntar ao usuário novamente.
|
|
19
|
+
|
|
20
|
+
**Não é seu trabalho:** Descobrir COMO implementar. Isso é o que pesquisa e planejamento fazem com as decisões que você captura.
|
|
21
|
+
</downstream_awareness>
|
|
22
|
+
|
|
23
|
+
<philosophy>
|
|
24
|
+
**Usuário = visionário. Claude = construtor.**
|
|
25
|
+
|
|
26
|
+
Usuário SABE: como imagina, visual/sensação, essencial vs nice-to-have, referências específicas.
|
|
27
|
+
Usuário NÃO sabe (não pergunte): padrões da codebase (pesquisador lê), riscos técnicos (pesquisador), abordagem de implementação (planejador), métricas (inferidas).
|
|
28
|
+
|
|
29
|
+
Pergunte sobre visão e escolhas; capture decisões pra agentes downstream.
|
|
30
|
+
</philosophy>
|
|
31
|
+
|
|
32
|
+
<scope_guardrail>
|
|
33
|
+
**CRÍTICO: sem expansão de escopo.** Limite da fase vem do ROADMAP e é FIXO. Discussão clarifica COMO, nunca SE adicionar capacidades.
|
|
34
|
+
|
|
35
|
+
| Permitido (clarifica) | Não permitido (expande) |
|
|
36
|
+
|---|---|
|
|
37
|
+
| "Como exibir posts?" (layout, densidade) | "Adicionar comentários?" (nova capacidade) |
|
|
38
|
+
| "O que em estado vazio?" | "E busca/filtragem?" |
|
|
39
|
+
| "Pull-to-refresh ou manual?" | "Incluir favoritos?" |
|
|
40
|
+
|
|
41
|
+
**Heurística:** clarifica o que já está na fase, ou adiciona capacidade que merece fase própria?
|
|
42
|
+
|
|
43
|
+
**Quando usuário sugere expansão:** "[X] seria nova capacidade — fase própria. Anoto pro backlog. De volta a [tópico]." Capture em "Ideias Adiadas". Não perca, não aja.
|
|
44
|
+
</scope_guardrail>
|
|
45
|
+
|
|
46
|
+
<supabase_detection>
|
|
47
|
+
**Detecção de fase Supabase:** antes de identificar áreas cinzentas genéricas, verifique se a fase mexe em Supabase (DB/Auth/Realtime/Edge Functions/Storage/RLS/migrations).
|
|
48
|
+
|
|
49
|
+
Sinais de fase Supabase no objetivo do ROADMAP.md ou nos REQs mapeados:
|
|
50
|
+
- Menções a "Supabase", "Postgres", "RLS", "policy", "migration", "supabase/migrations/", "supabase/schemas/", "supabase/functions/"
|
|
51
|
+
- Menções a "Auth Next.js", "@supabase/ssr", "magic link", "OAuth", "MFA"
|
|
52
|
+
- Menções a "broadcast", "realtime", "presence", "postgres_changes"
|
|
53
|
+
- Menções a "Edge Function", "Deno", "pgvector", "RAG", "pg_cron", "pgmq"
|
|
54
|
+
- Menções a "bucket", "signed URL", "storage.objects"
|
|
55
|
+
|
|
56
|
+
**Se for fase Supabase:** considere delegar a discussão para o agent `supabase-architect` em vez de gerar áreas cinzentas genéricas. O architect já tem template de perguntas Supabase-específicas (tier Free/Pro, branches, RLS strategy multi-tenant, schema design, topology realtime, custos de egress/branches).
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
Task(subagent_type=supabase-architect, prompt="Projete schema + RLS + topologia para esta fase Supabase: {phase_goal}. Retorne plano em formato Markdown estruturado para servir de base ao CONTEXT.md.")
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Use o output do architect como base do `<decisions>` do CONTEXT.md em vez de fazer questionamento manual. **Para fases mistas** (parte Supabase, parte genérica) — use architect só para a parte Supabase, depois faça discussão padrão para o resto.
|
|
63
|
+
</supabase_detection>
|
|
64
|
+
|
|
65
|
+
<gray_area_identification>
|
|
66
|
+
Áreas cinzentas são **decisões de implementação que o usuário se importa** — coisas que podem ir de múltiplas formas e mudariam o resultado.
|
|
67
|
+
|
|
68
|
+
**Como identificar áreas cinzentas:**
|
|
69
|
+
|
|
70
|
+
1. **Ler o objetivo da fase** do ROADMAP.md
|
|
71
|
+
2. **Entender o domínio** — Que tipo de coisa está sendo construída?
|
|
72
|
+
- Algo que usuários VÊM → apresentação visual, interações, estados importam
|
|
73
|
+
- Algo que usuários CHAMAM → contratos de interface, respostas, erros importam
|
|
74
|
+
- Algo que usuários EXECUTAM → invocação, saída, modos de comportamento importam
|
|
75
|
+
- Algo que usuários LÊM → estrutura, tom, profundidade, fluxo importam
|
|
76
|
+
- Algo sendo ORGANIZADO → critérios, agrupamento, tratamento de exceções importam
|
|
77
|
+
3. **Gerar áreas cinzentas específicas da fase** — Não categorias genéricas, mas decisões concretas para ESTA fase
|
|
78
|
+
|
|
79
|
+
**Não use rótulos genéricos** (UI/UX/Comportamento). Gere áreas específicas. Exemplos: Auth → sessão, erros, multi-device, recuperação. Backups CLI → output, flags, progress, recovery. Foto biblioteca → agrupamento, duplicatas, nomenclatura, pastas. API docs → estrutura, exemplos, versionamento, interativos.
|
|
80
|
+
|
|
81
|
+
**Pergunta-chave:** quais decisões mudariam o resultado que o usuário deveria opinar?
|
|
82
|
+
|
|
83
|
+
**Claude trata sozinho (não perguntar):** detalhes técnicos, padrões de arquitetura, otimização, escopo (roadmap define).
|
|
84
|
+
</gray_area_identification>
|
|
85
|
+
|
|
86
|
+
<answer_validation>
|
|
87
|
+
**IMPORTANTE: Validação de resposta** — Após cada chamada AskUserQuestion, verificar se a resposta está vazia ou contém apenas espaços em branco. Se sim:
|
|
88
|
+
1. Tentar a pergunta novamente com os mesmos parâmetros
|
|
89
|
+
2. Se ainda vazia, apresentar as opções como uma lista numerada em texto simples e pedir ao usuário que digite o número da sua escolha
|
|
90
|
+
Nunca prosseguir com uma resposta vazia.
|
|
91
|
+
|
|
92
|
+
**Modo texto (`workflow.text_mode: true` na config ou flag `--text`):**
|
|
93
|
+
Quando o modo texto estiver ativo, **não use AskUserQuestion de forma alguma**. Em vez disso, apresente cada
|
|
94
|
+
pergunta como uma lista numerada em texto simples e peça ao usuário que digite o número da sua escolha.
|
|
95
|
+
Isso é necessário para sessões remotas do Claude Code (modo `/rc`) onde o App Claude
|
|
96
|
+
não pode encaminhar seleções de menu TUI de volta ao host.
|
|
97
|
+
|
|
98
|
+
Ativar modo texto:
|
|
99
|
+
- Por sessão: passar flag `--text` para qualquer comando (ex: `/discutir-fase --text`)
|
|
100
|
+
- Por projeto: `tools config-set workflow.text_mode true`
|
|
101
|
+
|
|
102
|
+
O modo texto aplica-se a TODOS os workflows na sessão, não apenas ao discuss-phase.
|
|
103
|
+
</answer_validation>
|
|
104
|
+
|
|
105
|
+
<process>
|
|
106
|
+
|
|
107
|
+
**Caminho expresso disponível:** Se você já tem um PRD ou documento de critérios de aceitação, use `/planejar-fase {fase} --prd caminho/para/prd.md` para pular esta discussão e ir direto ao planejamento.
|
|
108
|
+
|
|
109
|
+
<step name="initialize" priority="first">
|
|
110
|
+
Número da fase do argumento (obrigatório).
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
INIT=$(node "./.claude/framework/bin/tools.cjs" init phase-op "${PHASE}")
|
|
114
|
+
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
115
|
+
AGENT_SKILLS_ADVISOR=$(node "./.claude/framework/bin/tools.cjs" agent-skills advisor 2>/dev/null)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Analisar JSON para: `commit_docs`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `has_research`, `has_context`, `has_plans`, `has_verification`, `plan_count`, `roadmap_exists`, `planning_exists`.
|
|
119
|
+
|
|
120
|
+
**Se `phase_found` for false:**
|
|
121
|
+
```
|
|
122
|
+
Fase [X] não encontrada no roadmap.
|
|
123
|
+
|
|
124
|
+
Use /progresso ${WS} para ver as fases disponíveis.
|
|
125
|
+
```
|
|
126
|
+
Sair do workflow.
|
|
127
|
+
|
|
128
|
+
**Se `phase_found` for true:** Continuar para check_existing.
|
|
129
|
+
|
|
130
|
+
**Modo auto** — Se `--auto` estiver presente em ARGUMENTS:
|
|
131
|
+
- Em `check_existing`: auto-selecionar "Pular" (se contexto existir) ou continuar sem prompt (se sem contexto/planos)
|
|
132
|
+
- Em `present_gray_areas`: auto-selecionar TODAS as áreas cinzentas sem perguntar ao usuário
|
|
133
|
+
- Em `discuss_areas`: para cada pergunta de discussão, escolher a opção recomendada (primeira opção, ou a marcada como "recomendada") sem usar AskUserQuestion
|
|
134
|
+
- Logar cada escolha auto-selecionada inline para que o usuário possa revisar decisões no arquivo de contexto
|
|
135
|
+
- Após a discussão concluir, avançar automaticamente para plan-phase (comportamento existente)
|
|
136
|
+
</step>
|
|
137
|
+
|
|
138
|
+
<step name="check_existing">
|
|
139
|
+
Verificar se CONTEXT.md já existe usando `has_context` do init.
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
ls ${phase_dir}/*-CONTEXT.md 2>/dev/null || true
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Se existir:**
|
|
146
|
+
|
|
147
|
+
**Se `--auto`:** Auto-selecionar "Atualizar" — carregar contexto existente e continuar para analyze_phase. Logar: `[auto] Contexto existe — atualizando com decisões auto-selecionadas.`
|
|
148
|
+
|
|
149
|
+
**Caso contrário:** Usar AskUserQuestion:
|
|
150
|
+
- header: "Contexto"
|
|
151
|
+
- question: "Fase [X] já tem contexto. O que você quer fazer?"
|
|
152
|
+
- options:
|
|
153
|
+
- "Atualizar" — Revisar e revisar contexto existente
|
|
154
|
+
- "Visualizar" — Me mostra o que há
|
|
155
|
+
- "Pular" — Usar contexto existente como está
|
|
156
|
+
|
|
157
|
+
Se "Atualizar": Carregar existente, continuar para analyze_phase
|
|
158
|
+
Se "Visualizar": Exibir CONTEXT.md, então oferecer atualizar/pular
|
|
159
|
+
Se "Pular": Sair do workflow
|
|
160
|
+
|
|
161
|
+
**Se não existir:**
|
|
162
|
+
|
|
163
|
+
Verificar `has_plans` e `plan_count` do init. **Se `has_plans` for true:**
|
|
164
|
+
|
|
165
|
+
**Se `--auto`:** Auto-selecionar "Continuar e replanejar depois". Logar: `[auto] Planos existem — continuando com captura de contexto, replanejará depois.`
|
|
166
|
+
|
|
167
|
+
**Caso contrário:** Usar AskUserQuestion:
|
|
168
|
+
- header: "Planos existem"
|
|
169
|
+
- question: "Fase [X] já tem {plan_count} plano(s) criado(s) sem contexto do usuário. Suas decisões aqui não afetarão os planos existentes a menos que você replane."
|
|
170
|
+
- options:
|
|
171
|
+
- "Continuar e replanejar depois" — Capturar contexto, então executar /planejar-fase {X} ${WS} para replanejar
|
|
172
|
+
- "Visualizar planos existentes" — Mostrar planos antes de decidir
|
|
173
|
+
- "Cancelar" — Pular discuss-phase
|
|
174
|
+
|
|
175
|
+
Se "Continuar e replanejar depois": Continuar para analyze_phase.
|
|
176
|
+
Se "Visualizar planos existentes": Exibir arquivos de plano, então oferecer "Continuar" / "Cancelar".
|
|
177
|
+
Se "Cancelar": Sair do workflow.
|
|
178
|
+
|
|
179
|
+
**Se `has_plans` for false:** Continuar para load_prior_context.
|
|
180
|
+
</step>
|
|
181
|
+
|
|
182
|
+
<step name="load_prior_context">
|
|
183
|
+
Ler PROJECT.md (visão/princípios/inegociáveis), REQUIREMENTS.md (critérios/must-haves), STATE.md (progresso/flags). Encontrar CONTEXT.md anteriores (`find .planning/phases -name "*-CONTEXT.md" | sort`); pra cada um com número < fase atual, extrair `<decisions>` (preferências bloqueadas) e `<specifics>` (refs particulares).
|
|
184
|
+
|
|
185
|
+
Construir contexto interno `<prior_decisions>` com seções "Nível de Projeto" + "Das Fases Anteriores".
|
|
186
|
+
|
|
187
|
+
**Uso downstream:** `analyze_phase` pula áreas já decididas; `present_gray_areas` anota com refs ("Você escolheu X na Fase 5"); `discuss_areas` pré-preenche ou sinaliza conflitos. Sem contexto anterior → continuar (esperado pra fases iniciais).
|
|
188
|
+
</step>
|
|
189
|
+
|
|
190
|
+
<step name="cross_reference_todos">
|
|
191
|
+
Verificar se alguma tarefa pendente é relevante ao escopo desta fase. Exibe itens do backlog que de outra forma poderiam ser perdidos.
|
|
192
|
+
|
|
193
|
+
**Carregar e corresponder tarefas:**
|
|
194
|
+
```bash
|
|
195
|
+
TODO_MATCHES=$(node "./.claude/framework/bin/tools.cjs" todo match-phase "${PHASE_NUMBER}")
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Analisar JSON para: `todo_count`, `matches[]` (cada um com `file`, `title`, `area`, `score`, `reasons`).
|
|
199
|
+
|
|
200
|
+
**Se `todo_count` for 0 ou `matches` estiver vazio:** Pular silenciosamente — sem atraso no workflow.
|
|
201
|
+
|
|
202
|
+
**Se correspondências encontradas:**
|
|
203
|
+
|
|
204
|
+
Apresentar tarefas correspondentes ao usuário. Mostrar cada correspondência com seu título, área e por que correspondeu:
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
📋 Encontradas {N} tarefa(s) pendente(s) que podem ser relevantes para a Fase {X}:
|
|
208
|
+
|
|
209
|
+
{Para cada correspondência:}
|
|
210
|
+
- **{título}** (área: {área}, relevância: {score}) — correspondeu em {reasons}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Usar AskUserQuestion (multiSelect) perguntando quais tarefas incorporar ao escopo desta fase:
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
Quais dessas tarefas devem ser incorporadas ao escopo da Fase {X}?
|
|
217
|
+
(Selecione as que se aplicam, ou nenhuma para pular)
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**Para tarefas selecionadas (incorporadas):**
|
|
221
|
+
- Armazenar internamente como `<folded_todos>` para inclusão na seção `<decisions>` do CONTEXT.md
|
|
222
|
+
- Estes se tornam itens de escopo adicionais que agentes downstream (pesquisador, planejador) verão
|
|
223
|
+
|
|
224
|
+
**Para tarefas não selecionadas (revisadas mas não incorporadas):**
|
|
225
|
+
- Armazenar internamente como `<reviewed_todos>` para inclusão na seção `<deferred>` do CONTEXT.md
|
|
226
|
+
- Isso evita que fases futuras re-exibam as mesmas tarefas como "perdidas"
|
|
227
|
+
|
|
228
|
+
**Modo auto (`--auto`):** Incorporar todas as tarefas com score >= 0,4 automaticamente. Logar a seleção.
|
|
229
|
+
</step>
|
|
230
|
+
|
|
231
|
+
<step name="scout_codebase">
|
|
232
|
+
Varredura leve do código existente para informar identificação de áreas cinzentas e discussão. Usa ~10% do contexto — aceitável para uma sessão interativa.
|
|
233
|
+
|
|
234
|
+
**Passo 1: Verificar mapas de codebase existentes**
|
|
235
|
+
```bash
|
|
236
|
+
ls .planning/codebase/*.md 2>/dev/null || true
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Mapas de codebase existem (`.planning/codebase/*.md`):** ler CONVENTIONS/STRUCTURE/STACK conforme tipo da fase. Extrair: ativos reutilizáveis, padrões estabelecidos, pontos de integração.
|
|
240
|
+
|
|
241
|
+
**Sem mapas:** grep direcionado por termos-chave do objetivo (`grep -rl "termo1\|termo2" src/ app/ --include='*.{ts,tsx,js,jsx}' | head -10`) + `ls src/{components,hooks,lib,utils}/`. Ler 3-5 arquivos mais relevantes.
|
|
242
|
+
|
|
243
|
+
Construir `<codebase_context>` interno: ativos reutilizáveis, padrões, pontos de integração, opções criativas que a arquitetura habilita/restringe. Não escreve em arquivo — só sessão atual.
|
|
244
|
+
</step>
|
|
245
|
+
|
|
246
|
+
<step name="analyze_phase">
|
|
247
|
+
Analisar a fase para identificar áreas cinzentas que valem a discussão. **Usar tanto `prior_decisions` quanto `codebase_context` para embasar a análise.**
|
|
248
|
+
|
|
249
|
+
**Ler a descrição da fase do ROADMAP.md e determinar:**
|
|
250
|
+
|
|
251
|
+
1. **Limite de domínio** — Qual capacidade esta fase está entregando? Declará-la claramente.
|
|
252
|
+
|
|
253
|
+
1b. **Inicializar acumulador de refs canônicas** — Começar a construir a lista `<canonical_refs>` para CONTEXT.md. Isso se acumula ao longo de toda a discussão, não apenas neste passo.
|
|
254
|
+
|
|
255
|
+
**Fonte 1 (agora):** Copiar `Canonical refs:` do ROADMAP.md para esta fase. Expandir cada uma para um caminho relativo completo.
|
|
256
|
+
**Fonte 2 (agora):** Verificar REQUIREMENTS.md e PROJECT.md por quaisquer specs/ADRs referenciados para esta fase.
|
|
257
|
+
**Fonte 3 (scout_codebase):** Se código existente referencia docs (ex: comentários citando ADRs), adicionar esses.
|
|
258
|
+
**Fonte 4 (discuss_areas):** Quando o usuário disser "leia X", "verifique Y", ou referenciar qualquer doc/spec/ADR durante a discussão — adicionar imediatamente. Estes são frequentemente as refs MAIS importantes porque representam docs que o usuário especificamente quer seguidos.
|
|
259
|
+
|
|
260
|
+
Esta lista é OBRIGATÓRIA no CONTEXT.md. Cada ref deve ter um caminho relativo completo para que agentes downstream possam lê-la diretamente. Se não existirem docs externos, note isso explicitamente.
|
|
261
|
+
|
|
262
|
+
2. **Verificar decisões anteriores** — Antes de gerar áreas cinzentas, verificar se alguma já foi decidida:
|
|
263
|
+
- Escanear `<prior_decisions>` por escolhas relevantes (ex: "Somente Ctrl+C, sem atalhos de tecla única")
|
|
264
|
+
- Estas estão **pré-respondidas** — não re-perguntar a menos que esta fase tenha necessidades conflitantes
|
|
265
|
+
- Notar decisões anteriores aplicáveis para uso na apresentação
|
|
266
|
+
|
|
267
|
+
3. **Áreas cinzentas por categoria** — Para cada categoria relevante (UI, UX, Comportamento, Estados Vazios, Conteúdo), identificar 1-2 ambiguidades específicas que mudariam a implementação. **Anotar com contexto de código onde relevante** (ex: "Você já tem um componente Card" ou "Sem padrão existente para isso").
|
|
268
|
+
|
|
269
|
+
4. **Avaliação de pulo** — Se não existirem áreas cinzentas significativas (infraestrutura pura, implementação clara, ou tudo já decidido em fases anteriores), a fase pode não precisar de discussão.
|
|
270
|
+
|
|
271
|
+
**Detecção de Modo Advisor:**
|
|
272
|
+
|
|
273
|
+
`ADVISOR_MODE = exists("./.claude/framework/USER-PROFILE.md")`. Se false, pular todos os passos advisor — workflow conversacional inalterado.
|
|
274
|
+
|
|
275
|
+
Se true, resolver `calibration_tier` por prioridade: (1) `config.json > preferences.vendor_philosophy` (project), (2) USER-PROFILE.md Vendor Choices/Philosophy (global), (3) default `standard`. Mapeamento: `conservative`/`thorough-evaluator` → `full_maturity`; `opinionated` → `minimal_decisive`; `pragmatic-fast` ou outro/vazio → `standard`.
|
|
276
|
+
|
|
277
|
+
`ADVISOR_MODEL=$(node "./.claude/framework/bin/tools.cjs" resolve-model advisor-researcher --raw)`
|
|
278
|
+
|
|
279
|
+
**Produzir sua análise internamente, então apresentar ao usuário.**
|
|
280
|
+
|
|
281
|
+
Exemplo de análise para fase "Feed de Posts" (com código e contexto anterior):
|
|
282
|
+
```
|
|
283
|
+
Domínio: Exibindo posts de usuários seguidos
|
|
284
|
+
Existente: Componente Card (src/components/ui/Card.tsx), hook useInfiniteQuery, Tailwind CSS
|
|
285
|
+
Decisões anteriores: "UI minimalista preferida" (Fase 2), "Sem paginação — sempre scroll infinito" (Fase 4)
|
|
286
|
+
Áreas cinzentas:
|
|
287
|
+
- UI: Estilo de layout (cards vs timeline vs grid) — Componente Card existe com variantes shadow/rounded
|
|
288
|
+
- UI: Densidade de informação (posts completos vs prévias) — sem padrões de densidade existentes
|
|
289
|
+
- Comportamento: Padrão de carregamento — JÁ DECIDIDO: scroll infinito (Fase 4)
|
|
290
|
+
- Estado Vazio: O que mostra quando não há posts — Componente EmptyState existe em ui/
|
|
291
|
+
- Conteúdo: Quais metadados exibir (hora, autor, contagem de reações)
|
|
292
|
+
```
|
|
293
|
+
</step>
|
|
294
|
+
|
|
295
|
+
<step name="present_gray_areas">
|
|
296
|
+
Apresentar o limite de domínio, decisões anteriores e áreas cinzentas ao usuário.
|
|
297
|
+
|
|
298
|
+
**Primeiro, declarar o limite e quaisquer decisões anteriores que se aplicam:**
|
|
299
|
+
```
|
|
300
|
+
Fase [X]: [Nome]
|
|
301
|
+
Domínio: [O que esta fase entrega — da sua análise]
|
|
302
|
+
|
|
303
|
+
Vamos clarificar COMO implementar isso.
|
|
304
|
+
(Novas capacidades pertencem a outras fases.)
|
|
305
|
+
|
|
306
|
+
[Se decisões anteriores se aplicam:]
|
|
307
|
+
**Carregando de fases anteriores:**
|
|
308
|
+
- [Decisão da Fase N que se aplica aqui]
|
|
309
|
+
- [Decisão da Fase M que se aplica aqui]
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
**Se `--auto`:** Auto-selecionar TODAS as áreas cinzentas. Logar: `[auto] Selecionadas todas as áreas cinzentas: [lista de nomes das áreas].` Pular o AskUserQuestion abaixo e continuar diretamente para discuss_areas com todas as áreas selecionadas.
|
|
313
|
+
|
|
314
|
+
**Caso contrário, usar AskUserQuestion (multiSelect: true):**
|
|
315
|
+
- header: "Discutir"
|
|
316
|
+
- question: "Quais áreas você quer discutir para [nome da fase]?"
|
|
317
|
+
- options: Gerar 3-4 áreas cinzentas específicas da fase, cada uma com:
|
|
318
|
+
- "[Área específica]" (rótulo) — concreto, não genérico
|
|
319
|
+
- [1-2 perguntas que isso cobre + anotação de contexto de código] (descrição)
|
|
320
|
+
- **Destacar a escolha recomendada com breve explicação do porquê**
|
|
321
|
+
|
|
322
|
+
**Anotações de decisão anterior:** Quando uma área cinzenta já foi decidida em uma fase anterior, anotá-la:
|
|
323
|
+
```
|
|
324
|
+
☐ Atalhos de saída — Como os usuários devem sair?
|
|
325
|
+
(Você decidiu "Somente Ctrl+C, sem atalhos de tecla única" na Fase 5 — revisitar ou manter?)
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
**Anotações de contexto de código:** Quando o scout encontrou código existente relevante, anotar a descrição da área cinzenta:
|
|
329
|
+
```
|
|
330
|
+
☐ Estilo de layout — Cards vs lista vs timeline?
|
|
331
|
+
(Você já tem um componente Card com variantes shadow/rounded. Reutilizá-lo mantém o app consistente.)
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
**Combinando ambos:** Quando tanto decisões anteriores quanto contexto de código se aplicam:
|
|
335
|
+
```
|
|
336
|
+
☐ Comportamento de carregamento — Scroll infinito ou paginação?
|
|
337
|
+
(Você escolheu scroll infinito na Fase 4. Hook useInfiniteQuery já configurado.)
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
**NÃO incluir opção "pular" ou "você decide".** O usuário executou este comando para discutir — dar escolhas reais.
|
|
341
|
+
|
|
342
|
+
**Exemplos por domínio:**
|
|
343
|
+
- Feed de Posts: layout (cards/lista/timeline), carregamento (infinito/paginação), ordenação, metadados
|
|
344
|
+
- Backup CLI: output (JSON/tabela/texto), flags (curtas/longas), progress (silencioso/bar/verbose), recovery (fail-fast/retry)
|
|
345
|
+
- Foto biblioteca: agrupamento (data/local/face/evento), duplicatas (melhor/todos/prompt), nomenclatura, pastas
|
|
346
|
+
|
|
347
|
+
Continuar para discuss_areas com áreas selecionadas (ou advisor_research se ADVISOR_MODE for true).
|
|
348
|
+
</step>
|
|
349
|
+
|
|
350
|
+
<step name="advisor_research">
|
|
351
|
+
**Pesquisa Advisor** (somente quando ADVISOR_MODE for true)
|
|
352
|
+
|
|
353
|
+
Após o usuário selecionar áreas cinzentas em present_gray_areas, criar agentes de pesquisa paralelos.
|
|
354
|
+
|
|
355
|
+
1. Exibir status breve: "Pesquisando {N} áreas..."
|
|
356
|
+
|
|
357
|
+
2. Para CADA área cinzenta selecionada pelo usuário, criar um Task() em paralelo:
|
|
358
|
+
|
|
359
|
+
Task(
|
|
360
|
+
prompt="First, read @./.claude/agents/advisor-researcher.md for your role and instructions.
|
|
361
|
+
|
|
362
|
+
<gray_area>{area_name}: {area_description from gray area identification}</gray_area>
|
|
363
|
+
<phase_context>{phase_goal and description from ROADMAP.md}</phase_context>
|
|
364
|
+
<project_context>{project name and brief description from PROJECT.md}</project_context>
|
|
365
|
+
<calibration_tier>{resolved calibration tier: full_maturity | standard | minimal_decisive}</calibration_tier>
|
|
366
|
+
|
|
367
|
+
Research this gray area and return a structured comparison table with rationale.
|
|
368
|
+
${AGENT_SKILLS_ADVISOR}",
|
|
369
|
+
subagent_type="general-purpose",
|
|
370
|
+
model="{ADVISOR_MODEL}",
|
|
371
|
+
description="Research: {area_name}"
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
Todas as chamadas Task() criam simultaneamente — NÃO aguardar uma antes de iniciar a próxima.
|
|
375
|
+
|
|
376
|
+
3. Após TODOS os agentes retornarem, SINTETIZAR resultados antes de apresentar:
|
|
377
|
+
Para o retorno de cada agente:
|
|
378
|
+
a. Analisar a tabela de comparação markdown e parágrafo de raciocínio
|
|
379
|
+
b. Verificar se todas as 5 colunas estão presentes (Option | Pros | Cons | Complexity | Recommendation) — preencher colunas ausentes em vez de mostrar tabela quebrada
|
|
380
|
+
c. Verificar contagem de opções contra o tier de calibração:
|
|
381
|
+
- full_maturity: 3-5 opções aceitável
|
|
382
|
+
- standard: 2-4 opções aceitável
|
|
383
|
+
- minimal_decisive: 1-2 opções aceitável
|
|
384
|
+
Se agente retornou demais, remover as menos viáveis. Se poucas demais, aceitar como está.
|
|
385
|
+
d. Reescrever parágrafo de raciocínio para incorporar contexto do projeto e contexto de discussão em andamento ao qual o agente não tinha acesso
|
|
386
|
+
e. Se agente retornou apenas 1 opção, converter de formato de tabela para recomendação direta: "Abordagem padrão para {área}: {opção}. {raciocínio}"
|
|
387
|
+
|
|
388
|
+
4. Armazenar tabelas sintetizadas para uso em discuss_areas.
|
|
389
|
+
|
|
390
|
+
**Se ADVISOR_MODE for false:** Pular este passo inteiramente — prosseguir diretamente de present_gray_areas para discuss_areas.
|
|
391
|
+
</step>
|
|
392
|
+
|
|
393
|
+
<step name="discuss_areas">
|
|
394
|
+
Discutir cada área selecionada com o usuário. O fluxo depende do modo advisor.
|
|
395
|
+
|
|
396
|
+
**Se ADVISOR_MODE for true:**
|
|
397
|
+
|
|
398
|
+
Fluxo de discussão com tabela primeiro — apresentar tabelas de comparação baseadas em pesquisa, então capturar escolhas do usuário.
|
|
399
|
+
|
|
400
|
+
**Para cada área selecionada:**
|
|
401
|
+
|
|
402
|
+
1. **Apresentar a tabela de comparação sintetizada + parágrafo de raciocínio** (do passo advisor_research)
|
|
403
|
+
|
|
404
|
+
2. **Usar AskUserQuestion:**
|
|
405
|
+
- header: "{area_name}"
|
|
406
|
+
- question: "Qual abordagem para {area_name}?"
|
|
407
|
+
- options: Extrair da coluna Option da tabela (AskUserQuestion adiciona "Outro" automaticamente)
|
|
408
|
+
|
|
409
|
+
3. **Registrar a seleção do usuário:**
|
|
410
|
+
- Se o usuário escolher das opções da tabela → registrar como decisão bloqueada para essa área
|
|
411
|
+
- Se o usuário escolher "Outro" → receber seu input, refletir de volta para confirmação, registrar
|
|
412
|
+
|
|
413
|
+
4. **Após registrar escolha, Claude decide se perguntas de acompanhamento são necessárias:**
|
|
414
|
+
- Se a escolha tem ambiguidade que afetaria o planejamento downstream → fazer 1-2 perguntas de acompanhamento direcionadas usando AskUserQuestion
|
|
415
|
+
- Se a escolha é clara e autocontida → mover para próxima área
|
|
416
|
+
- NÃO fazer as 4 perguntas padrão — a tabela já forneceu o contexto
|
|
417
|
+
|
|
418
|
+
5. **Após todas as áreas processadas:**
|
|
419
|
+
- header: "Concluído"
|
|
420
|
+
- question: "Isso cobre [listar áreas]. Pronto para criar contexto?"
|
|
421
|
+
- options: "Criar contexto" / "Revisitar uma área"
|
|
422
|
+
|
|
423
|
+
**Tratamento de expansão de escopo (modo advisor):**
|
|
424
|
+
Se o usuário mencionar algo fora do domínio da fase:
|
|
425
|
+
```
|
|
426
|
+
"[Funcionalidade] parece uma nova capacidade — pertence à sua própria fase.
|
|
427
|
+
Vou anotá-la como uma ideia adiada.
|
|
428
|
+
|
|
429
|
+
De volta a [área atual]: [retornar à pergunta atual]"
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
Rastrear ideias adiadas internamente.
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
**Se ADVISOR_MODE for false:**
|
|
437
|
+
|
|
438
|
+
Para cada área selecionada, conduzir um loop de discussão focado.
|
|
439
|
+
|
|
440
|
+
**Modos opcionais (lidos de config + args):**
|
|
441
|
+
|
|
442
|
+
- **`workflow.research_before_questions: true`** ou padrão off — antes de cada área, fazer 2-3 bullet de melhores práticas via web, apresentar com a pergunta. Ex: "OAuth 2.0 + PKCE é padrão atual pra SPAs; cookies httpOnly preferidos vs localStorage; passkey/WebAuthn em alta 2025-2026."
|
|
443
|
+
- **`--text` ou `workflow.text_mode: true`** — substitui TODOS AskUserQuestion por listas numeradas em texto simples (necessário em sessões remotas Claude Code `/rc`).
|
|
444
|
+
- **`--batch[=N]`** (default 4 quando ausente, range 2-5) — 1 turno agrupado com N perguntas numeradas em vez de N turnos de pergunta única. Após responder, refletir capturas e fazer follow-up mínimo.
|
|
445
|
+
- **`--analyze`** — antes de cada pergunta (ou batch), fornecer mini-tabela de trade-offs (2-3 opções, prós/contras baseados na codebase + padrões), recomendação destacada, pitfalls.
|
|
446
|
+
|
|
447
|
+
**Filosofia:** adaptativo, usuário escolhe o ritmo. Default: 4 turnos de pergunta única, depois verifica continuar. `--batch`: 1 turno agrupado, depois verifica.
|
|
448
|
+
|
|
449
|
+
Cada resposta (ou conjunto de respostas, no modo batch) deve revelar a próxima pergunta ou próximo batch.
|
|
450
|
+
|
|
451
|
+
**Modo auto (`--auto`):** Para cada área, Claude seleciona a opção recomendada (primeira opção, ou a explicitamente marcada como "recomendada") para cada pergunta sem usar AskUserQuestion. Logar cada escolha auto-selecionada:
|
|
452
|
+
```
|
|
453
|
+
[auto] [Área] — P: "[texto da pergunta]" → Selecionado: "[opção escolhida]" (padrão recomendado)
|
|
454
|
+
```
|
|
455
|
+
Após todas as áreas serem auto-resolvidas, pular o prompt "Explorar mais áreas cinzentas" e prosseguir diretamente para write_context.
|
|
456
|
+
|
|
457
|
+
**Modo interativo (sem `--auto`):**
|
|
458
|
+
|
|
459
|
+
**Para cada área:**
|
|
460
|
+
|
|
461
|
+
1. **Anunciar a área:**
|
|
462
|
+
```
|
|
463
|
+
Vamos falar sobre [Área].
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
2. **Fazer perguntas usando o ritmo selecionado:**
|
|
467
|
+
|
|
468
|
+
**Padrão (sem `--batch`): Fazer 4 perguntas usando AskUserQuestion**
|
|
469
|
+
- header: "[Área]" (máx 12 chars — abreviar se necessário)
|
|
470
|
+
- question: Decisão específica para esta área
|
|
471
|
+
- options: 2-3 escolhas concretas (AskUserQuestion adiciona "Outro" automaticamente), com a escolha recomendada destacada e breve explicação do porquê
|
|
472
|
+
- **Anotar opções com contexto de código** quando relevante:
|
|
473
|
+
```
|
|
474
|
+
"Como os posts devem ser exibidos?"
|
|
475
|
+
- Cards (reutiliza o componente Card existente — consistente com Mensagens)
|
|
476
|
+
- Lista (mais simples, seria um novo padrão)
|
|
477
|
+
- Timeline (precisa de novo componente Timeline — nenhum existe ainda)
|
|
478
|
+
```
|
|
479
|
+
- Incluir "Você decide" como opção quando razoável — captura discrição do Claude
|
|
480
|
+
- **Context7 para escolhas de biblioteca:** Quando uma área cinzenta envolve seleção de biblioteca (ex: "magic links" → consultar docs do next-auth) ou decisões de abordagem de API, usar ferramentas `mcp__context7__*` para buscar documentação atual e informar as opções. Não usar Context7 para cada pergunta — apenas quando conhecimento específico da biblioteca melhora as opções.
|
|
481
|
+
|
|
482
|
+
**Modo batch (`--batch`): Fazer 2-5 perguntas numeradas em um turno de texto simples**
|
|
483
|
+
- Agrupar perguntas intimamente relacionadas para a área atual em uma única mensagem
|
|
484
|
+
- Manter cada pergunta concreta e respondível em uma resposta
|
|
485
|
+
- Quando opções são úteis, incluir escolhas inline curtas por pergunta em vez de um AskUserQuestion separado para cada item
|
|
486
|
+
- Após a resposta do usuário, refletir de volta as decisões capturadas, notar itens não respondidos, e fazer apenas o mínimo de acompanhamento necessário antes de prosseguir
|
|
487
|
+
- Preservar adaptabilidade entre batches: usar o conjunto completo de respostas para decidir o próximo batch ou se a área está suficientemente clara
|
|
488
|
+
|
|
489
|
+
3. **Após o conjunto atual de perguntas, verificar:**
|
|
490
|
+
- header: "[Área]" (máx 12 chars)
|
|
491
|
+
- question: "Mais perguntas sobre [área], ou mover para próxima? (Restantes: [listar outras áreas não visitadas])"
|
|
492
|
+
- options: "Mais perguntas" / "Próxima área"
|
|
493
|
+
|
|
494
|
+
Ao construir o texto da pergunta, listar as áreas não visitadas restantes para que o usuário saiba o que vem a seguir. Por exemplo: "Mais perguntas sobre Layout, ou mover para próxima? (Restantes: Comportamento de carregamento, Ordenação de conteúdo)"
|
|
495
|
+
|
|
496
|
+
Se "Mais perguntas" → fazer mais 4 perguntas únicas, ou mais um batch de 2-5 perguntas quando `--batch` estiver ativo, então verificar novamente
|
|
497
|
+
Se "Próxima área" → prosseguir para próxima área selecionada
|
|
498
|
+
Se "Outro" (texto livre) → interpretar intenção: frases de continuação ("mais", "continuar", "sim", "mais perguntas") mapeiam para "Mais perguntas"; frases de avanço ("feito", "continuar", "próximo", "pular") mapeiam para "Próxima área". Se ambíguo, perguntar: "Continuar com mais perguntas sobre [área], ou mover para a próxima área?"
|
|
499
|
+
|
|
500
|
+
4. **Após todas as áreas inicialmente selecionadas concluírem:**
|
|
501
|
+
- Resumir o que foi capturado da discussão até agora
|
|
502
|
+
- AskUserQuestion:
|
|
503
|
+
- header: "Concluído"
|
|
504
|
+
- question: "Discutimos [listar áreas]. Quais áreas cinzentas permanecem pouco claras?"
|
|
505
|
+
- options: "Explorar mais áreas cinzentas" / "Estou pronto para o contexto"
|
|
506
|
+
- Se "Explorar mais áreas cinzentas":
|
|
507
|
+
- Identificar 2-4 áreas cinzentas adicionais com base no que foi aprendido
|
|
508
|
+
- Retornar à lógica de present_gray_areas com essas novas áreas
|
|
509
|
+
- Loop: discutir novas áreas, então solicitar novamente
|
|
510
|
+
- Se "Estou pronto para o contexto": Prosseguir para write_context
|
|
511
|
+
|
|
512
|
+
**Acumulação de refs canônicas:** quando usuário referencia doc/spec/ADR (ex: "leia adr-014"), imediatamente: leia o doc, adicione ao acumulador com caminho relativo completo, use pra informar perguntas seguintes. Esses são frequentemente MAIS importantes que refs do ROADMAP — usuário quer que agentes downstream sigam. Nunca perca.
|
|
513
|
+
|
|
514
|
+
**Design de perguntas:** opções concretas (não "Opção A"), cada resposta informa a próxima. Se usuário escolher "Outro" pra texto livre, faça acompanhamento em prompt simples (NÃO outro AskUserQuestion); reflita de volta e confirme.
|
|
515
|
+
|
|
516
|
+
**Expansão de escopo:** ver `<scope_guardrail>` acima — anote como Ideia Adiada, retorne ao tópico.
|
|
517
|
+
|
|
518
|
+
**Log interno por pergunta:** área, opções apresentadas, seleção do usuário, notas de acompanhamento. Usado pra gerar DISCUSSION-LOG.md no `write_context`.
|
|
519
|
+
</step>
|
|
520
|
+
|
|
521
|
+
<step name="write_context">
|
|
522
|
+
Criar CONTEXT.md capturando as decisões tomadas.
|
|
523
|
+
|
|
524
|
+
**Também gerar DISCUSSION-LOG.md** — uma trilha de auditoria completa do Q&A do discuss-phase.
|
|
525
|
+
Este arquivo é apenas para referência humana (auditorias de software, revisões de conformidade). NÃO é
|
|
526
|
+
consumido por agentes downstream (pesquisador, planejador, executor).
|
|
527
|
+
|
|
528
|
+
**Encontrar ou criar diretório de fase:**
|
|
529
|
+
|
|
530
|
+
Usar valores do init: `phase_dir`, `phase_slug`, `padded_phase`.
|
|
531
|
+
|
|
532
|
+
Se `phase_dir` for null (fase existe no roadmap mas sem diretório):
|
|
533
|
+
```bash
|
|
534
|
+
mkdir -p ".planning/phases/${padded_phase}-${phase_slug}"
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
**Localização do arquivo:** `${phase_dir}/${padded_phase}-CONTEXT.md`
|
|
538
|
+
|
|
539
|
+
**Estruturar o conteúdo pelo que foi discutido:**
|
|
540
|
+
|
|
541
|
+
```markdown
|
|
542
|
+
# Fase [X]: [Nome] - Contexto
|
|
543
|
+
|
|
544
|
+
**Coletado:** [data]
|
|
545
|
+
**Status:** Pronto para planejamento
|
|
546
|
+
|
|
547
|
+
<domain>
|
|
548
|
+
## Limite da Fase
|
|
549
|
+
|
|
550
|
+
[Declaração clara do que esta fase entrega — a âncora de escopo]
|
|
551
|
+
|
|
552
|
+
</domain>
|
|
553
|
+
|
|
554
|
+
<decisions>
|
|
555
|
+
## Decisões de Implementação
|
|
556
|
+
|
|
557
|
+
### [Categoria 1 que foi discutida]
|
|
558
|
+
- **D-01:** [Decisão ou preferência capturada]
|
|
559
|
+
- **D-02:** [Outra decisão se aplicável]
|
|
560
|
+
|
|
561
|
+
### [Categoria 2 que foi discutida]
|
|
562
|
+
- **D-03:** [Decisão ou preferência capturada]
|
|
563
|
+
|
|
564
|
+
### Discrição do Claude
|
|
565
|
+
[Áreas onde o usuário disse "você decide" — notar que Claude tem flexibilidade aqui]
|
|
566
|
+
|
|
567
|
+
### Tarefas Incorporadas
|
|
568
|
+
[Se alguma tarefa foi incorporada ao escopo do passo cross_reference_todos, listá-las aqui.
|
|
569
|
+
Cada entrada deve incluir o título da tarefa, problema original e como se encaixa no escopo desta fase.
|
|
570
|
+
Se nenhuma tarefa foi incorporada: omitir esta subseção inteiramente.]
|
|
571
|
+
|
|
572
|
+
</decisions>
|
|
573
|
+
|
|
574
|
+
<canonical_refs>
|
|
575
|
+
## Referências Canônicas
|
|
576
|
+
|
|
577
|
+
**Agentes downstream DEVEM ler estas antes de planejar ou implementar.**
|
|
578
|
+
|
|
579
|
+
[Seção OBRIGATÓRIA. Escrever aqui a lista COMPLETA de refs canônicas acumuladas.
|
|
580
|
+
Fontes: refs do ROADMAP.md + refs do REQUIREMENTS.md + docs referenciados pelo usuário durante
|
|
581
|
+
a discussão + quaisquer docs descobertos durante a varredura da codebase. Agrupar por área de tópico.
|
|
582
|
+
Cada entrada precisa de um caminho relativo completo — não apenas um nome.]
|
|
583
|
+
|
|
584
|
+
### [Área de tópico 1]
|
|
585
|
+
- `caminho/para/adr-ou-spec.md` — [O que decide/define que é relevante]
|
|
586
|
+
- `caminho/para/doc.md` §N — [Referência de seção específica]
|
|
587
|
+
|
|
588
|
+
### [Área de tópico 2]
|
|
589
|
+
- `caminho/para/feature-doc.md` — [O que este doc define]
|
|
590
|
+
|
|
591
|
+
[Se sem specs externas: "Sem specs externas — requisitos totalmente capturados nas decisões acima"]
|
|
592
|
+
|
|
593
|
+
</canonical_refs>
|
|
594
|
+
|
|
595
|
+
<code_context>
|
|
596
|
+
## Insights de Código Existente
|
|
597
|
+
|
|
598
|
+
### Ativos Reutilizáveis
|
|
599
|
+
- [Componente/hook/utilitário]: [Como poderia ser usado nesta fase]
|
|
600
|
+
|
|
601
|
+
### Padrões Estabelecidos
|
|
602
|
+
- [Padrão]: [Como restringe/habilita esta fase]
|
|
603
|
+
|
|
604
|
+
### Pontos de Integração
|
|
605
|
+
- [Onde novo código se conecta ao sistema existente]
|
|
606
|
+
|
|
607
|
+
</code_context>
|
|
608
|
+
|
|
609
|
+
<specifics>
|
|
610
|
+
## Ideias Específicas
|
|
611
|
+
|
|
612
|
+
[Quaisquer referências particulares, exemplos, ou momentos "quero como X" da discussão]
|
|
613
|
+
|
|
614
|
+
[Se nenhum: "Sem requisitos específicos — aberto a abordagens padrão"]
|
|
615
|
+
|
|
616
|
+
</specifics>
|
|
617
|
+
|
|
618
|
+
<deferred>
|
|
619
|
+
## Ideias Adiadas
|
|
620
|
+
|
|
621
|
+
[Ideias que surgiram mas pertencem a outras fases. Não as perder.]
|
|
622
|
+
|
|
623
|
+
### Tarefas Revisadas (não incorporadas)
|
|
624
|
+
[Se alguma tarefa foi revisada em cross_reference_todos mas não incorporada ao escopo,
|
|
625
|
+
listá-las aqui para que fases futuras saibam que foram consideradas.
|
|
626
|
+
Cada entrada: título da tarefa + motivo pelo qual foi adiada (fora do escopo, pertence à Fase Y, etc.)
|
|
627
|
+
Se sem tarefas revisadas-mas-adiadas: omitir esta subseção inteiramente.]
|
|
628
|
+
|
|
629
|
+
[Se nenhum: "Nenhum — discussão ficou dentro do escopo da fase"]
|
|
630
|
+
|
|
631
|
+
</deferred>
|
|
632
|
+
|
|
633
|
+
---
|
|
634
|
+
|
|
635
|
+
*Fase: XX-nome*
|
|
636
|
+
*Contexto coletado: [data]*
|
|
637
|
+
```
|
|
638
|
+
|
|
639
|
+
Escrever arquivo.
|
|
640
|
+
</step>
|
|
641
|
+
|
|
642
|
+
<step name="confirm_creation">
|
|
643
|
+
Apresentar resumo e próximos passos:
|
|
644
|
+
|
|
645
|
+
```
|
|
646
|
+
Criado: .planning/phases/${PADDED_PHASE}-${SLUG}/${PADDED_PHASE}-CONTEXT.md
|
|
647
|
+
|
|
648
|
+
## Decisões Capturadas
|
|
649
|
+
|
|
650
|
+
### [Categoria]
|
|
651
|
+
- [Decisão-chave]
|
|
652
|
+
|
|
653
|
+
### [Categoria]
|
|
654
|
+
- [Decisão-chave]
|
|
655
|
+
|
|
656
|
+
[Se ideias adiadas existirem:]
|
|
657
|
+
## Anotado para Depois
|
|
658
|
+
- [Ideia adiada] — fase futura
|
|
659
|
+
|
|
660
|
+
---
|
|
661
|
+
|
|
662
|
+
## ▶ Próximo Passo
|
|
663
|
+
|
|
664
|
+
**Fase ${PHASE}: [Nome]** — [Objetivo do ROADMAP.md]
|
|
665
|
+
|
|
666
|
+
`/planejar-fase ${PHASE} ${WS}`
|
|
667
|
+
|
|
668
|
+
<sub>`/clear` primeiro → janela de contexto fresca</sub>
|
|
669
|
+
|
|
670
|
+
---
|
|
671
|
+
|
|
672
|
+
**Também disponível:**
|
|
673
|
+
- `/planejar-fase ${PHASE} --skip-research ${WS}` — planejar sem pesquisa
|
|
674
|
+
- `/fase-ui ${PHASE} ${WS}` — gerar contrato de design de UI antes do planejamento (se a fase tem trabalho de frontend)
|
|
675
|
+
- Revisar/editar CONTEXT.md antes de continuar
|
|
676
|
+
|
|
677
|
+
---
|
|
678
|
+
```
|
|
679
|
+
</step>
|
|
680
|
+
|
|
681
|
+
<step name="git_commit">
|
|
682
|
+
**Escrever DISCUSSION-LOG.md antes de commitar:**
|
|
683
|
+
|
|
684
|
+
**Localização do arquivo:** `${phase_dir}/${padded_phase}-DISCUSSION-LOG.md`
|
|
685
|
+
|
|
686
|
+
```markdown
|
|
687
|
+
# Fase [X]: [Nome] - Log de Discussão
|
|
688
|
+
|
|
689
|
+
> **Somente trilha de auditoria.** Não usar como entrada para agentes de planejamento, pesquisa ou execução.
|
|
690
|
+
> Decisões são capturadas no CONTEXT.md — este log preserva as alternativas consideradas.
|
|
691
|
+
|
|
692
|
+
**Data:** [data ISO]
|
|
693
|
+
**Fase:** [número-fase]-[nome-fase]
|
|
694
|
+
**Áreas discutidas:** [lista separada por vírgula]
|
|
695
|
+
|
|
696
|
+
---
|
|
697
|
+
|
|
698
|
+
[Para cada área cinzenta discutida:]
|
|
699
|
+
|
|
700
|
+
## [Nome da Área]
|
|
701
|
+
|
|
702
|
+
| Opção | Descrição | Selecionada |
|
|
703
|
+
|-------|-----------|-------------|
|
|
704
|
+
| [Opção 1] | [Descrição do AskUserQuestion] | |
|
|
705
|
+
| [Opção 2] | [Descrição] | ✓ |
|
|
706
|
+
| [Opção 3] | [Descrição] | |
|
|
707
|
+
|
|
708
|
+
**Escolha do usuário:** [Opção selecionada ou resposta em texto livre]
|
|
709
|
+
**Notas:** [Quaisquer esclarecimentos, contexto de acompanhamento, ou raciocínio fornecido pelo usuário]
|
|
710
|
+
|
|
711
|
+
---
|
|
712
|
+
|
|
713
|
+
[Repetir para cada área]
|
|
714
|
+
|
|
715
|
+
## Discrição do Claude
|
|
716
|
+
|
|
717
|
+
[Listar áreas onde o usuário disse "você decide" ou delegou ao Claude]
|
|
718
|
+
|
|
719
|
+
## Ideias Adiadas
|
|
720
|
+
|
|
721
|
+
[Ideias mencionadas durante a discussão que foram anotadas para fases futuras]
|
|
722
|
+
```
|
|
723
|
+
|
|
724
|
+
Escrever arquivo.
|
|
725
|
+
|
|
726
|
+
Commitar contexto da fase e log de discussão:
|
|
727
|
+
|
|
728
|
+
```bash
|
|
729
|
+
node "./.claude/framework/bin/tools.cjs" commit "docs(${padded_phase}): capture phase context" --files "${phase_dir}/${padded_phase}-CONTEXT.md" "${phase_dir}/${padded_phase}-DISCUSSION-LOG.md"
|
|
730
|
+
```
|
|
731
|
+
|
|
732
|
+
Confirmar: "Commitado: docs(${padded_phase}): capturar contexto da fase"
|
|
733
|
+
</step>
|
|
734
|
+
|
|
735
|
+
<step name="update_state">
|
|
736
|
+
Atualizar STATE.md com informações da sessão:
|
|
737
|
+
|
|
738
|
+
```bash
|
|
739
|
+
node "./.claude/framework/bin/tools.cjs" state record-session \
|
|
740
|
+
--stopped-at "Phase ${PHASE} context gathered" \
|
|
741
|
+
--resume-file "${phase_dir}/${padded_phase}-CONTEXT.md"
|
|
742
|
+
```
|
|
743
|
+
|
|
744
|
+
Commitar STATE.md:
|
|
745
|
+
|
|
746
|
+
```bash
|
|
747
|
+
node "./.claude/framework/bin/tools.cjs" commit "docs(state): record phase ${PHASE} context session" --files .planning/STATE.md
|
|
748
|
+
```
|
|
749
|
+
</step>
|
|
750
|
+
|
|
751
|
+
<step name="auto_advance">
|
|
752
|
+
**Detecção:** flag `--auto` em $ARGUMENTS, OR `workflow._auto_chain_active=true`, OR `workflow.auto_advance=true`.
|
|
753
|
+
|
|
754
|
+
**Sync de cadeia:** se usuário invocou manualmente (sem `--auto`), zere `workflow._auto_chain_active` (mas NÃO toque `workflow.auto_advance` — preferência do usuário). Se `--auto` presente e cadeia não estava ativa, set `_auto_chain_active=true` (handle uso direto de `--auto` sem new-project).
|
|
755
|
+
|
|
756
|
+
**Quando ativo:** dispare `Skill(skill="framework:planejar-fase", args="${PHASE} --auto ${WS}")` (use Skill, não Task aninhado — evita freeze de runtime, issue #686).
|
|
757
|
+
|
|
758
|
+
**Roteamento de retorno do plan-phase:**
|
|
759
|
+
- `FASE CONCLUÍDA` → cadeia completa. Próximo: `/discutir-fase ${NEXT_PHASE} --auto ${WS}` (após `/clear`)
|
|
760
|
+
- `PLANEJAMENTO CONCLUÍDO` → execução parou. Continuar: `/executar-fase ${PHASE} ${WS}`
|
|
761
|
+
- `PLANEJAMENTO INCONCLUSIVO / CHECKPOINT` → parou. Continuar: `/planejar-fase ${PHASE} ${WS}`
|
|
762
|
+
- `LACUNAS ENCONTRADAS` → parou. Continuar: `/planejar-fase ${PHASE} --gaps ${WS}`
|
|
763
|
+
|
|
764
|
+
**Quando inativo:** rotear pra `confirm_creation` (comportamento manual existente).
|
|
765
|
+
</step>
|
|
766
|
+
|
|
767
|
+
</process>
|
|
768
|
+
|
|
769
|
+
<success_criteria>
|
|
770
|
+
- Fase validada contra o roadmap
|
|
771
|
+
- Contexto anterior carregado (PROJECT.md, REQUIREMENTS.md, STATE.md, arquivos CONTEXT.md anteriores)
|
|
772
|
+
- Questões já decididas não re-perguntadas (carregadas de fases anteriores)
|
|
773
|
+
- Codebase varrida por ativos reutilizáveis, padrões e pontos de integração
|
|
774
|
+
- Áreas cinzentas identificadas por análise inteligente com anotações de código e decisão anterior
|
|
775
|
+
- Usuário selecionou quais áreas discutir
|
|
776
|
+
- Cada área selecionada explorada até satisfação do usuário (com opções informadas por código e por decisões anteriores)
|
|
777
|
+
- Expansão de escopo redirecionada para ideias adiadas
|
|
778
|
+
- CONTEXT.md captura decisões reais, não visão vaga
|
|
779
|
+
- CONTEXT.md inclui seção canonical_refs com caminhos completos de arquivos para cada spec/ADR/doc que agentes downstream precisam (OBRIGATÓRIO — nunca omitir)
|
|
780
|
+
- CONTEXT.md inclui seção code_context com ativos e padrões reutilizáveis
|
|
781
|
+
- Ideias adiadas preservadas para fases futuras
|
|
782
|
+
- STATE.md atualizado com informações da sessão
|
|
783
|
+
- Usuário sabe os próximos passos
|
|
784
|
+
</success_criteria>
|