@luanpdd/kit-mcp 1.27.0 → 1.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +168 -914
  3. package/gates/agent-no-recursive-dispatch.md +45 -11
  4. package/kit/COMANDOS.md +138 -138
  5. package/kit/README.md +76 -76
  6. package/kit/agents/advisor-researcher.md +106 -106
  7. package/kit/agents/assumptions-analyzer.md +107 -107
  8. package/kit/agents/audit-log-implementer.md +1 -1
  9. package/kit/agents/auditor-consistencia-isolamento.md +1 -1
  10. package/kit/agents/b2b-saas-architect.md +1 -1
  11. package/kit/agents/cascading-failures-auditor.md +1 -1
  12. package/kit/agents/codebase-mapper.md +768 -768
  13. package/kit/agents/crm-pipeline-implementer.md +1 -1
  14. package/kit/agents/debugger.md +813 -813
  15. package/kit/agents/detector-tenant-quente.md +1 -1
  16. package/kit/agents/evolution-go-integrator.md +1 -1
  17. package/kit/agents/example-reviewer.md +21 -21
  18. package/kit/agents/executor.md +564 -564
  19. package/kit/agents/integration-checker.md +200 -200
  20. package/kit/agents/invite-flow-implementer.md +1 -1
  21. package/kit/agents/legacy-characterizer.md +1 -1
  22. package/kit/agents/lgpd-compliance-auditor.md +1 -1
  23. package/kit/agents/multi-tenant-isolation-auditor.md +1 -1
  24. package/kit/agents/multi-tenant-rls-writer.md +1 -1
  25. package/kit/agents/nyquist-auditor.md +178 -178
  26. package/kit/agents/observability-coverage-auditor.md +1 -1
  27. package/kit/agents/org-onboarding-implementer.md +1 -1
  28. package/kit/agents/payload-capture-instrumenter.md +1 -1
  29. package/kit/agents/phase-researcher.md +696 -696
  30. package/kit/agents/plan-checker.md +272 -272
  31. package/kit/agents/planner.md +922 -922
  32. package/kit/agents/project-researcher.md +652 -652
  33. package/kit/agents/refactor-safety-auditor.md +1 -1
  34. package/kit/agents/research-synthesizer.md +245 -245
  35. package/kit/agents/roadmapper.md +677 -677
  36. package/kit/agents/seam-finder.md +1 -1
  37. package/kit/agents/shotgun-surgery-detector.md +1 -1
  38. package/kit/agents/supabase-branching-architect.md +1 -1
  39. package/kit/agents/supabase-cicd-pipeline-implementer.md +1 -1
  40. package/kit/agents/supabase-column-privileges-writer.md +1 -1
  41. package/kit/agents/supabase-migration-writer.md +1 -1
  42. package/kit/agents/supabase-rbac-implementer.md +1 -1
  43. package/kit/agents/supabase-rls-hardener.md +1 -1
  44. package/kit/agents/supabase-rls-writer.md +1 -1
  45. package/kit/agents/supabase-roles-implementer.md +1 -1
  46. package/kit/agents/super-admin-implementer.md +1 -1
  47. package/kit/agents/ui-auditor.md +437 -437
  48. package/kit/agents/ui-checker.md +302 -302
  49. package/kit/agents/ui-researcher.md +355 -355
  50. package/kit/agents/user-profiler.md +175 -175
  51. package/kit/agents/validador-evolucao-schema.md +1 -1
  52. package/kit/agents/verifier.md +728 -728
  53. package/kit/commands/adicionar-backlog.md +75 -75
  54. package/kit/commands/adicionar-fase.md +42 -42
  55. package/kit/commands/adicionar-tarefa.md +45 -45
  56. package/kit/commands/adicionar-testes.md +41 -41
  57. package/kit/commands/ajuda.md +21 -21
  58. package/kit/commands/atualizar.md +37 -37
  59. package/kit/commands/auditar-cascading.md +1 -1
  60. package/kit/commands/auditar-marco.md +179 -179
  61. package/kit/commands/auditar-observabilidade-cobertura.md +1 -1
  62. package/kit/commands/auditar-refactor.md +1 -1
  63. package/kit/commands/auditar-release.md +1 -1
  64. package/kit/commands/auditar-uat.md +23 -23
  65. package/kit/commands/autonomo.md +40 -40
  66. package/kit/commands/branch-pr.md +24 -24
  67. package/kit/commands/burn-rate-status.md +1 -1
  68. package/kit/commands/capturar-payloads.md +1 -1
  69. package/kit/commands/caracterizar.md +1 -1
  70. package/kit/commands/concluir-marco.md +247 -247
  71. package/kit/commands/configuracoes.md +36 -36
  72. package/kit/commands/dados-distribuidos.md +1 -1
  73. package/kit/commands/definir-perfil.md +10 -10
  74. package/kit/commands/depurar.md +190 -190
  75. package/kit/commands/detectar-duplicacao.md +1 -1
  76. package/kit/commands/discutir-fase.md +131 -131
  77. package/kit/commands/encontrar-seams.md +1 -1
  78. package/kit/commands/entrar-discord.md +17 -17
  79. package/kit/commands/estatisticas.md +18 -18
  80. package/kit/commands/example-greeting.md +33 -33
  81. package/kit/commands/executar-fase.md +58 -58
  82. package/kit/commands/expresso.md +56 -56
  83. package/kit/commands/fase-ui.md +34 -34
  84. package/kit/commands/fazer.md +57 -57
  85. package/kit/commands/fio.md +125 -125
  86. package/kit/commands/fluxos-trabalho.md +64 -64
  87. package/kit/commands/forense.md +176 -176
  88. package/kit/commands/gerenciador.md +38 -38
  89. package/kit/commands/inserir-fase.md +31 -31
  90. package/kit/commands/legacy.md +1 -1
  91. package/kit/commands/limpeza.md +17 -17
  92. package/kit/commands/listar-hipoteses-fase.md +45 -45
  93. package/kit/commands/listar-workspaces.md +18 -18
  94. package/kit/commands/load-shedding.md +1 -1
  95. package/kit/commands/mapear-codebase.md +70 -70
  96. package/kit/commands/multi-tenant.md +1 -1
  97. package/kit/commands/nota.md +33 -33
  98. package/kit/commands/novo-marco.md +43 -43
  99. package/kit/commands/novo-projeto.md +41 -41
  100. package/kit/commands/novo-workspace.md +43 -43
  101. package/kit/commands/pausar-trabalho.md +37 -37
  102. package/kit/commands/perfil-usuario.md +45 -45
  103. package/kit/commands/pesquisar-fase.md +195 -195
  104. package/kit/commands/planejar-fase.md +67 -67
  105. package/kit/commands/planejar-lacunas.md +33 -33
  106. package/kit/commands/plantar-ideia.md +25 -25
  107. package/kit/commands/progresso.md +24 -24
  108. package/kit/commands/proximo.md +30 -30
  109. package/kit/commands/publicar.md +490 -490
  110. package/kit/commands/rapido.md +35 -35
  111. package/kit/commands/reaplicar-patches.md +124 -124
  112. package/kit/commands/refactor-seguro.md +1 -1
  113. package/kit/commands/relatorio-sessao.md +19 -19
  114. package/kit/commands/remover-fase.md +31 -31
  115. package/kit/commands/remover-workspace.md +26 -26
  116. package/kit/commands/resumo-marco.md +50 -50
  117. package/kit/commands/retomar-trabalho.md +40 -40
  118. package/kit/commands/revisar-backlog.md +60 -60
  119. package/kit/commands/revisar-ui.md +32 -32
  120. package/kit/commands/revisar.md +37 -37
  121. package/kit/commands/saude.md +21 -21
  122. package/kit/commands/setup-notion.md +93 -93
  123. package/kit/commands/storytelling.md +1 -1
  124. package/kit/commands/supabase.md +1 -1
  125. package/kit/commands/sync-main.md +68 -68
  126. package/kit/commands/validar-fase.md +35 -35
  127. package/kit/commands/verificar-tarefas.md +44 -44
  128. package/kit/commands/verificar-trabalho.md +64 -64
  129. package/kit/file-manifest.json +90 -90
  130. package/kit/framework/bin/lib/commands.cjs +959 -959
  131. package/kit/framework/bin/lib/config.cjs +442 -442
  132. package/kit/framework/bin/lib/core.cjs +1230 -1230
  133. package/kit/framework/bin/lib/frontmatter.cjs +336 -336
  134. package/kit/framework/bin/lib/init.cjs +1442 -1442
  135. package/kit/framework/bin/lib/milestone.cjs +252 -252
  136. package/kit/framework/bin/lib/model-profiles.cjs +68 -68
  137. package/kit/framework/bin/lib/phase.cjs +888 -888
  138. package/kit/framework/bin/lib/profile-output.cjs +952 -952
  139. package/kit/framework/bin/lib/profile-pipeline.cjs +539 -539
  140. package/kit/framework/bin/lib/roadmap.cjs +329 -329
  141. package/kit/framework/bin/lib/security.cjs +382 -382
  142. package/kit/framework/bin/lib/state.cjs +1031 -1031
  143. package/kit/framework/bin/lib/template.cjs +222 -222
  144. package/kit/framework/bin/lib/uat.cjs +282 -282
  145. package/kit/framework/bin/lib/verify.cjs +888 -888
  146. package/kit/framework/bin/lib/workstream.cjs +491 -491
  147. package/kit/framework/bin/tools.cjs +918 -918
  148. package/kit/framework/commands/workstreams.md +63 -63
  149. package/kit/framework/references/checkpoints.md +778 -778
  150. package/kit/framework/references/continuation-format.md +249 -249
  151. package/kit/framework/references/decimal-phase-calculation.md +64 -64
  152. package/kit/framework/references/git-integration.md +295 -295
  153. package/kit/framework/references/git-planning-commit.md +38 -38
  154. package/kit/framework/references/model-profile-resolution.md +36 -36
  155. package/kit/framework/references/model-profiles.md +139 -139
  156. package/kit/framework/references/phase-argument-parsing.md +61 -61
  157. package/kit/framework/references/planning-config.md +202 -202
  158. package/kit/framework/references/questioning.md +162 -162
  159. package/kit/framework/references/tdd.md +263 -263
  160. package/kit/framework/references/ui-brand.md +160 -160
  161. package/kit/framework/references/user-profiling.md +657 -657
  162. package/kit/framework/references/verification-patterns.md +612 -612
  163. package/kit/framework/references/workstream-flag.md +58 -58
  164. package/kit/framework/templates/DEBUG.md +164 -164
  165. package/kit/framework/templates/UAT.md +265 -265
  166. package/kit/framework/templates/UI-SPEC.md +100 -100
  167. package/kit/framework/templates/VALIDATION.md +76 -76
  168. package/kit/framework/templates/claude-md.md +122 -122
  169. package/kit/framework/templates/codebase/architecture.md +185 -185
  170. package/kit/framework/templates/codebase/concerns.md +205 -205
  171. package/kit/framework/templates/codebase/conventions.md +204 -204
  172. package/kit/framework/templates/codebase/integrations.md +192 -192
  173. package/kit/framework/templates/codebase/stack.md +158 -158
  174. package/kit/framework/templates/codebase/structure.md +199 -199
  175. package/kit/framework/templates/codebase/testing.md +301 -301
  176. package/kit/framework/templates/config.json +44 -44
  177. package/kit/framework/templates/context.md +352 -352
  178. package/kit/framework/templates/continue-here.md +78 -78
  179. package/kit/framework/templates/copilot-instructions.md +7 -7
  180. package/kit/framework/templates/debug-subagent-prompt.md +91 -91
  181. package/kit/framework/templates/dev-preferences.md +20 -20
  182. package/kit/framework/templates/discovery.md +146 -146
  183. package/kit/framework/templates/discussion-log.md +63 -63
  184. package/kit/framework/templates/milestone-archive.md +123 -123
  185. package/kit/framework/templates/milestone.md +115 -115
  186. package/kit/framework/templates/phase-prompt.md +610 -610
  187. package/kit/framework/templates/planner-subagent-prompt.md +117 -117
  188. package/kit/framework/templates/project.md +186 -186
  189. package/kit/framework/templates/requirements.md +231 -231
  190. package/kit/framework/templates/research-project/ARCHITECTURE.md +204 -204
  191. package/kit/framework/templates/research-project/FEATURES.md +147 -147
  192. package/kit/framework/templates/research-project/PITFALLS.md +200 -200
  193. package/kit/framework/templates/research-project/STACK.md +120 -120
  194. package/kit/framework/templates/research-project/SUMMARY.md +170 -170
  195. package/kit/framework/templates/research.md +419 -419
  196. package/kit/framework/templates/retrospective.md +54 -54
  197. package/kit/framework/templates/roadmap.md +202 -202
  198. package/kit/framework/templates/state.md +176 -176
  199. package/kit/framework/templates/summary-complex.md +59 -59
  200. package/kit/framework/templates/summary-minimal.md +41 -41
  201. package/kit/framework/templates/summary-standard.md +48 -48
  202. package/kit/framework/templates/summary.md +209 -209
  203. package/kit/framework/templates/user-profile.md +146 -146
  204. package/kit/framework/templates/user-setup.md +256 -256
  205. package/kit/framework/templates/verification-report.md +258 -258
  206. package/kit/framework/workflows/add-phase.md +112 -112
  207. package/kit/framework/workflows/add-tests.md +351 -351
  208. package/kit/framework/workflows/add-todo.md +158 -158
  209. package/kit/framework/workflows/audit-milestone.md +340 -340
  210. package/kit/framework/workflows/audit-uat.md +109 -109
  211. package/kit/framework/workflows/autonomous.md +891 -891
  212. package/kit/framework/workflows/check-todos.md +177 -177
  213. package/kit/framework/workflows/cleanup.md +152 -152
  214. package/kit/framework/workflows/complete-milestone.md +696 -696
  215. package/kit/framework/workflows/diagnose-issues.md +231 -231
  216. package/kit/framework/workflows/discovery-phase.md +289 -289
  217. package/kit/framework/workflows/discuss-phase-assumptions.md +653 -653
  218. package/kit/framework/workflows/discuss-phase.md +784 -784
  219. package/kit/framework/workflows/do.md +104 -104
  220. package/kit/framework/workflows/execute-phase.md +838 -838
  221. package/kit/framework/workflows/execute-plan.md +510 -510
  222. package/kit/framework/workflows/fast.md +102 -102
  223. package/kit/framework/workflows/forensics.md +265 -265
  224. package/kit/framework/workflows/health.md +181 -181
  225. package/kit/framework/workflows/help.md +619 -619
  226. package/kit/framework/workflows/insert-phase.md +130 -130
  227. package/kit/framework/workflows/list-phase-assumptions.md +178 -178
  228. package/kit/framework/workflows/list-workspaces.md +56 -56
  229. package/kit/framework/workflows/manager.md +362 -362
  230. package/kit/framework/workflows/map-codebase.md +377 -377
  231. package/kit/framework/workflows/milestone-summary.md +223 -223
  232. package/kit/framework/workflows/new-milestone.md +486 -486
  233. package/kit/framework/workflows/new-project.md +1159 -1159
  234. package/kit/framework/workflows/new-workspace.md +237 -237
  235. package/kit/framework/workflows/next.md +97 -97
  236. package/kit/framework/workflows/node-repair.md +92 -92
  237. package/kit/framework/workflows/note.md +156 -156
  238. package/kit/framework/workflows/pause-work.md +176 -176
  239. package/kit/framework/workflows/plan-milestone-gaps.md +273 -273
  240. package/kit/framework/workflows/plan-phase.md +765 -765
  241. package/kit/framework/workflows/plant-seed.md +169 -169
  242. package/kit/framework/workflows/pr-branch.md +129 -129
  243. package/kit/framework/workflows/profile-user.md +450 -450
  244. package/kit/framework/workflows/progress.md +507 -507
  245. package/kit/framework/workflows/quick.md +757 -757
  246. package/kit/framework/workflows/remove-phase.md +155 -155
  247. package/kit/framework/workflows/remove-workspace.md +90 -90
  248. package/kit/framework/workflows/research-phase.md +82 -82
  249. package/kit/framework/workflows/resume-project.md +326 -326
  250. package/kit/framework/workflows/review.md +228 -228
  251. package/kit/framework/workflows/session-report.md +146 -146
  252. package/kit/framework/workflows/settings.md +283 -283
  253. package/kit/framework/workflows/ship.md +228 -228
  254. package/kit/framework/workflows/stats.md +60 -60
  255. package/kit/framework/workflows/transition.md +671 -671
  256. package/kit/framework/workflows/ui-phase.md +302 -302
  257. package/kit/framework/workflows/ui-review.md +165 -165
  258. package/kit/framework/workflows/update.md +323 -323
  259. package/kit/framework/workflows/validate-phase.md +174 -174
  260. package/kit/framework/workflows/verify-phase.md +252 -252
  261. package/kit/framework/workflows/verify-work.md +637 -637
  262. package/kit/hooks/check-update.js +118 -118
  263. package/kit/hooks/context-monitor.js +163 -163
  264. package/kit/hooks/prompt-guard.js +103 -103
  265. package/kit/hooks/statusline.js +125 -125
  266. package/kit/hooks/workflow-guard.js +101 -101
  267. package/kit/settings.json +45 -45
  268. package/kit/skills/ai-prompt-characterization/SKILL.md +1 -1
  269. package/kit/skills/armadilhas-sistemas-distribuidos/SKILL.md +1 -1
  270. package/kit/skills/audit-log-multi-tenant/SKILL.md +1 -1
  271. package/kit/skills/b2b-saas-architecture/SKILL.md +1 -1
  272. package/kit/skills/consistencia-leitura-replica/SKILL.md +1 -1
  273. package/kit/skills/crm-lead-pipeline-patterns/SKILL.md +1 -1
  274. package/kit/skills/escolha-modelo-consistencia/SKILL.md +1 -1
  275. package/kit/skills/evolucao-schema-compativel/SKILL.md +1 -1
  276. package/kit/skills/evolution-go-whatsapp-integration/SKILL.md +1 -1
  277. package/kit/skills/example-skill/SKILL.md +42 -42
  278. package/kit/skills/legacy-api-only-applications/SKILL.md +1 -1
  279. package/kit/skills/legacy-characterization-tests/SKILL.md +1 -1
  280. package/kit/skills/legacy-effect-analysis/SKILL.md +1 -1
  281. package/kit/skills/legacy-extract-class/SKILL.md +1 -1
  282. package/kit/skills/legacy-programming-by-difference/SKILL.md +1 -1
  283. package/kit/skills/legacy-seams-and-test-harness/SKILL.md +1 -1
  284. package/kit/skills/legacy-shotgun-surgery/SKILL.md +1 -1
  285. package/kit/skills/legacy-sprout-wrap-techniques/SKILL.md +1 -1
  286. package/kit/skills/legacy-storytelling-naked-crc/SKILL.md +1 -1
  287. package/kit/skills/lgpd-multi-tenant-compliance/SKILL.md +1 -1
  288. package/kit/skills/member-invite-flow/SKILL.md +1 -1
  289. package/kit/skills/member-management-react-shadcn/SKILL.md +1 -1
  290. package/kit/skills/multi-tenant-performance-scaling/SKILL.md +1 -1
  291. package/kit/skills/multi-tenant-rls-hierarchy/SKILL.md +1 -1
  292. package/kit/skills/org-onboarding-flow/SKILL.md +1 -1
  293. package/kit/skills/org-switcher-react-pattern/SKILL.md +1 -1
  294. package/kit/skills/permission-gate-react-pattern/SKILL.md +1 -1
  295. package/kit/skills/postgres-isolamento-concorrencia/SKILL.md +1 -1
  296. package/kit/skills/pre-refactor-characterization/SKILL.md +1 -1
  297. package/kit/skills/rbac-permissions-matrix-supabase/SKILL.md +1 -1
  298. package/kit/skills/streams-eventos-cdc/SKILL.md +1 -1
  299. package/kit/skills/supabase-branching-workflow/SKILL.md +1 -1
  300. package/kit/skills/supabase-ci-cd-github-actions/SKILL.md +1 -1
  301. package/kit/skills/supabase-column-level-security/SKILL.md +1 -1
  302. package/kit/skills/supabase-config-toml-remotes/SKILL.md +1 -1
  303. package/kit/skills/supabase-custom-claims-rbac/SKILL.md +1 -1
  304. package/kit/skills/supabase-migration-repair/SKILL.md +1 -1
  305. package/kit/skills/supabase-migrations/SKILL.md +1 -1
  306. package/kit/skills/supabase-pgtap-testing/SKILL.md +1 -1
  307. package/kit/skills/supabase-postgres-roles/SKILL.md +1 -1
  308. package/kit/skills/supabase-rls-defense-in-depth/SKILL.md +1 -1
  309. package/kit/skills/supabase-rls-policies/SKILL.md +1 -1
  310. package/kit/skills/super-admin-platform-pattern/SKILL.md +1 -1
  311. package/kit/skills/tenant-quente-mitigacao/SKILL.md +1 -1
  312. package/kit/skills/whatsapp-conversation-state-machine/SKILL.md +1 -1
  313. package/package.json +63 -63
  314. package/src/cli/index.js +345 -6
  315. package/src/cli/render.js +7 -0
  316. package/src/core/kit.js +216 -216
  317. package/src/core/logger.js +170 -0
  318. package/src/core/notify.js +60 -0
  319. package/src/core/reflect.js +247 -247
  320. package/src/core/reverse-sync.js +372 -372
  321. package/src/core/sync.js +418 -418
  322. package/src/core/watch.js +121 -121
  323. package/src/mcp-server/index.js +65 -2
@@ -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>