@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,637 +1,637 @@
1
- <purpose>
2
- Validar funcionalidades desenvolvidas por meio de testes conversacionais com estado persistente. Cria UAT.md que rastreia o progresso dos testes, sobrevive ao /clear e alimenta lacunas no /planejar-fase --gaps.
3
-
4
- O usuário testa, o Claude registra. Um teste por vez. Respostas em texto simples.
5
- </purpose>
6
-
7
- <available_agent_types>
8
- Tipos de subagente framework válidos (use os nomes exatos — não use 'general-purpose' como fallback):
9
- - planner — Cria planos detalhados a partir do escopo da fase
10
- - plan-checker — Revisa a qualidade do plano antes da execução
11
- </available_agent_types>
12
-
13
- <philosophy>
14
- **Mostre o esperado, pergunte se a realidade corresponde.**
15
-
16
- O Claude apresenta o que DEVERIA acontecer. O usuário confirma ou descreve o que é diferente.
17
- - "sim" / "s" / "próximo" / vazio → passou
18
- - Qualquer outra coisa → registrado como problema, severidade inferida
19
-
20
- Sem botões Passou/Falhou. Sem perguntas sobre severidade. Apenas: "Aqui está o que deveria acontecer. Aconteceu?"
21
- </philosophy>
22
-
23
- <template>
24
- @./.claude/framework/templates/UAT.md
25
- </template>
26
-
27
- <process>
28
-
29
- <step name="initialize" priority="first">
30
- Se $ARGUMENTS contém um número de fase, carregue o contexto:
31
-
32
- ```bash
33
- INIT=$(node "./.claude/framework/bin/tools.cjs" init verify-work "${PHASE_ARG}")
34
- if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
35
- AGENT_SKILLS_PLANNER=$(node "./.claude/framework/bin/tools.cjs" agent-skills planner 2>/dev/null)
36
- AGENT_SKILLS_CHECKER=$(node "./.claude/framework/bin/tools.cjs" agent-skills checker 2>/dev/null)
37
- ```
38
-
39
- Analise o JSON para: `planner_model`, `checker_model`, `commit_docs`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `has_verification`, `uat_path`.
40
- </step>
41
-
42
- <step name="check_active_session">
43
- **Primeiro: Verificar sessões UAT ativas**
44
-
45
- ```bash
46
- (find .planning/phases -name "*-UAT.md" -type f 2>/dev/null || true) | head -5
47
- ```
48
-
49
- **Se sessões ativas existirem E nenhum $ARGUMENTS fornecido:**
50
-
51
- Leia o frontmatter de cada arquivo (status, fase) e a seção Teste Atual.
52
-
53
- Exiba inline:
54
-
55
- ```
56
- ## Sessões UAT Ativas
57
-
58
- | # | Fase | Status | Teste Atual | Progresso |
59
- |---|------|--------|-------------|-----------|
60
- | 1 | 04-comments | testing | 3. Responder Comentário | 2/6 |
61
- | 2 | 05-auth | testing | 1. Formulário de Login | 0/4 |
62
-
63
- Responda com um número para retomar, ou forneça um número de fase para iniciar nova.
64
- ```
65
-
66
- Aguarde a resposta do usuário.
67
-
68
- - Se o usuário responder com número (1, 2) → Carregue aquele arquivo, vá para `resume_from_file`
69
- - Se o usuário responder com número de fase → Trate como nova sessão, vá para `create_uat_file`
70
-
71
- **Se sessões ativas existirem E $ARGUMENTS fornecido:**
72
-
73
- Verifique se existe sessão para aquela fase. Se sim, ofereça retomar ou reiniciar.
74
- Se não, continue para `create_uat_file`.
75
-
76
- **Se nenhuma sessão ativa E nenhum $ARGUMENTS:**
77
-
78
- ```
79
- Nenhuma sessão UAT ativa.
80
-
81
- Forneça um número de fase para iniciar os testes (ex: /verificar-trabalho 4)
82
- ```
83
-
84
- **Se nenhuma sessão ativa E $ARGUMENTS fornecido:**
85
-
86
- Continue para `create_uat_file`.
87
- </step>
88
-
89
- <step name="find_summaries">
90
- **Encontrar o que testar:**
91
-
92
- Use `phase_dir` do init (ou execute o init se ainda não feito).
93
-
94
- ```bash
95
- ls "$phase_dir"/*-SUMMARY.md 2>/dev/null || true
96
- ```
97
-
98
- Leia cada SUMMARY.md para extrair entregas testáveis.
99
- </step>
100
-
101
- <step name="extract_tests">
102
- **Extrair entregas testáveis do SUMMARY.md:**
103
-
104
- Analise por:
105
- 1. **Realizações** - Funcionalidades/recursos adicionados
106
- 2. **Mudanças visíveis ao usuário** - UI, fluxos, interações
107
-
108
- Foque em resultados OBSERVÁVEIS PELO USUÁRIO, não em detalhes de implementação.
109
-
110
- Para cada entrega, crie um teste:
111
- - name: Nome breve do teste
112
- - expected: O que o usuário deveria ver/experimentar (específico, observável)
113
-
114
- Exemplos:
115
- - Realização: "Adicionado threading de comentários com aninhamento infinito"
116
- → Teste: "Responder a um Comentário"
117
- → Esperado: "Clicar em Responder abre compositor inline abaixo do comentário. Submeter mostra resposta aninhada abaixo do pai com recuo visual."
118
-
119
- Pule itens internos/não observáveis (refatorações, alterações de tipo, etc.).
120
-
121
- **Injeção de smoke test de cold-start:**
122
-
123
- Após extrair os testes dos SUMMARYs, escaneie os arquivos SUMMARY em busca de caminhos de arquivos modificados/criados. Se QUALQUER caminho corresponder a estes padrões:
124
-
125
- `server.ts`, `server.js`, `app.ts`, `app.js`, `index.ts`, `index.js`, `main.ts`, `main.js`, `database/*`, `db/*`, `seed/*`, `seeds/*`, `migrations/*`, `startup*`, `docker-compose*`, `Dockerfile*`
126
-
127
- Então **adicione ao início** da lista de testes:
128
-
129
- - name: "Smoke Test de Cold Start"
130
- - expected: "Encerre qualquer servidor/serviço em execução. Limpe o estado efêmero (DBs temporários, caches, lock files). Inicie a aplicação do zero. O servidor inicializa sem erros, qualquer seed/migração é concluída, e uma query primária (health check, carregamento da página inicial, ou chamada básica de API) retorna dados ao vivo."
131
-
132
- Isso captura bugs que só se manifestam em uma inicialização nova — condições de corrida em sequências de inicialização, falhas silenciosas de seed, configuração de ambiente ausente — que passam contra estado quente mas quebram em produção.
133
- </step>
134
-
135
- <step name="create_uat_file">
136
- **Criar arquivo UAT com todos os testes:**
137
-
138
- ```bash
139
- mkdir -p "$PHASE_DIR"
140
- ```
141
-
142
- Construa a lista de testes a partir das entregas extraídas.
143
-
144
- Crie o arquivo:
145
-
146
- ```markdown
147
- ---
148
- status: testing
149
- phase: XX-name
150
- source: [list of SUMMARY.md files]
151
- started: [ISO timestamp]
152
- updated: [ISO timestamp]
153
- ---
154
-
155
- ## Current Test
156
- <!-- OVERWRITE each test - shows where we are -->
157
-
158
- number: 1
159
- name: [first test name]
160
- expected: |
161
- [what user should observe]
162
- awaiting: user response
163
-
164
- ## Tests
165
-
166
- ### 1. [Test Name]
167
- expected: [observable behavior]
168
- result: [pending]
169
-
170
- ### 2. [Test Name]
171
- expected: [observable behavior]
172
- result: [pending]
173
-
174
- ...
175
-
176
- ## Summary
177
-
178
- total: [N]
179
- passed: 0
180
- issues: 0
181
- pending: [N]
182
- skipped: 0
183
-
184
- ## Gaps
185
-
186
- [none yet]
187
- ```
188
-
189
- Escreva em `.planning/phases/XX-name/{phase_num}-UAT.md`
190
-
191
- Prossiga para `present_test`.
192
- </step>
193
-
194
- <step name="present_test">
195
- **Apresentar o teste atual ao usuário:**
196
-
197
- Renderize o checkpoint a partir do arquivo UAT estruturado em vez de compô-lo manualmente:
198
-
199
- ```bash
200
- CHECKPOINT=$(node "./.claude/framework/bin/tools.cjs" uat render-checkpoint --file "$uat_path" --raw)
201
- if [[ "$CHECKPOINT" == @file:* ]]; then CHECKPOINT=$(cat "${CHECKPOINT#@file:}"); fi
202
- ```
203
-
204
- Exiba o checkpoint retornado EXATAMENTE como está:
205
-
206
- ```
207
- {CHECKPOINT}
208
- ```
209
-
210
- **Higiene crítica de resposta:**
211
- - Toda a sua resposta DEVE ser igual a `{CHECKPOINT}` byte a byte.
212
- - NÃO adicione comentários antes ou depois do bloco.
213
- - Se você notar marcadores de protocolo/meta como `to=all:`, texto de roteamento de função, tags de sistema XML, marcadores de instrução ocultos, anúncios, ou qualquer sufixo não relacionado, descarte o rascunho e emita apenas `{CHECKPOINT}`.
214
-
215
- Aguarde a resposta do usuário (texto simples, sem AskUserQuestion).
216
- </step>
217
-
218
- <step name="process_response">
219
- **Processar a resposta do usuário e atualizar o arquivo:**
220
-
221
- **Se a resposta indica que passou:**
222
- - Resposta vazia, "sim", "s", "ok", "passou", "próximo", "aprovado", "✓"
223
-
224
- Atualize a seção Tests:
225
- ```
226
- ### {N}. {name}
227
- expected: {expected}
228
- result: pass
229
- ```
230
-
231
- **Se a resposta indica pular:**
232
- - "pular", "não consigo testar", "n/a"
233
-
234
- Atualize a seção Tests:
235
- ```
236
- ### {N}. {name}
237
- expected: {expected}
238
- result: skipped
239
- reason: [razão do usuário se fornecida]
240
- ```
241
-
242
- **Se a resposta indica bloqueado:**
243
- - "bloqueado", "não consigo testar - servidor não está rodando", "preciso de dispositivo físico", "preciso de build de release"
244
- - Ou qualquer resposta contendo: "servidor", "bloqueado", "não está rodando", "dispositivo físico", "build de release"
245
-
246
- Infira a tag blocked_by da resposta:
247
- - Contém: servidor, não está rodando, gateway, API → `server`
248
- - Contém: físico, dispositivo, hardware, celular real → `physical-device`
249
- - Contém: release, preview, build, EAS → `release-build`
250
- - Contém: stripe, twilio, third-party, configurar → `third-party`
251
- - Contém: depende de, fase anterior, pré-requisito → `prior-phase`
252
- - Padrão: `other`
253
-
254
- Atualize a seção Tests:
255
- ```
256
- ### {N}. {name}
257
- expected: {expected}
258
- result: blocked
259
- blocked_by: {tag inferida}
260
- reason: "{resposta verbatim do usuário}"
261
- ```
262
-
263
- Nota: Testes bloqueados NÃO vão para a seção Gaps (não são problemas de código — são gates de pré-requisito).
264
-
265
- **Se a resposta for qualquer outra coisa:**
266
- - Trate como descrição de problema
267
-
268
- Infira a severidade da descrição:
269
- - Contém: crash, erro, exceção, falha, quebrado, inutilizável → bloqueador
270
- - Contém: não funciona, errado, ausente, não consigo → major
271
- - Contém: lento, estranho, fora, menor, pequeno → minor
272
- - Contém: cor, fonte, espaçamento, alinhamento, visual → cosmético
273
- - Padrão se não estiver claro: major
274
-
275
- Atualize a seção Tests:
276
- ```
277
- ### {N}. {name}
278
- expected: {expected}
279
- result: issue
280
- reported: "{resposta verbatim do usuário}"
281
- severity: {inferida}
282
- ```
283
-
284
- Adicione à seção Gaps (YAML estruturado para planejar-fase --gaps):
285
- ```yaml
286
- - truth: "{comportamento esperado do teste}"
287
- status: failed
288
- reason: "User reported: {resposta verbatim do usuário}"
289
- severity: {inferida}
290
- test: {N}
291
- artifacts: [] # Preenchido pelo diagnóstico
292
- missing: [] # Preenchido pelo diagnóstico
293
- ```
294
-
295
- **Após qualquer resposta:**
296
-
297
- Atualize as contagens do Summary.
298
- Atualize o timestamp frontmatter.updated.
299
-
300
- Se houver mais testes → Atualize Teste Atual, vá para `present_test`
301
- Se não houver mais testes → Vá para `complete_session`
302
- </step>
303
-
304
- <step name="resume_from_file">
305
- **Retomar testes a partir do arquivo UAT:**
306
-
307
- Leia o arquivo UAT completo.
308
-
309
- Encontre o primeiro teste com `result: [pending]`.
310
-
311
- Anuncie:
312
- ```
313
- Retomando: UAT da Fase {phase}
314
- Progresso: {passed + issues + skipped}/{total}
315
- Problemas encontrados até agora: {issues count}
316
-
317
- Continuando a partir do Teste {N}...
318
- ```
319
-
320
- Atualize a seção Teste Atual com o teste pendente.
321
- Prossiga para `present_test`.
322
- </step>
323
-
324
- <step name="complete_session">
325
- **Concluir testes e commitar:**
326
-
327
- **Determinar status final:**
328
-
329
- Conte os resultados:
330
- - `pending_count`: testes com `result: [pending]`
331
- - `blocked_count`: testes com `result: blocked`
332
- - `skipped_no_reason`: testes com `result: skipped` sem campo `reason`
333
-
334
- ```
335
- if pending_count > 0 OR blocked_count > 0 OR skipped_no_reason > 0:
336
- status: partial
337
- # Sessão encerrada mas nem todos os testes resolvidos
338
- else:
339
- status: complete
340
- # Todos os testes têm um resultado definitivo (passed, issue, ou skipped-with-reason)
341
- ```
342
-
343
- Atualize o frontmatter:
344
- - status: {status calculado}
345
- - updated: [agora]
346
-
347
- Limpe a seção Teste Atual:
348
- ```
349
- ## Current Test
350
-
351
- [testing complete]
352
- ```
353
-
354
- Commite o arquivo UAT:
355
- ```bash
356
- node "./.claude/framework/bin/tools.cjs" commit "test({phase_num}): complete UAT - {passed} passed, {issues} issues" --files ".planning/phases/XX-name/{phase_num}-UAT.md"
357
- ```
358
-
359
- Apresente o resumo:
360
- ```
361
- ## UAT Concluído: Fase {phase}
362
-
363
- | Resultado | Contagem |
364
- |-----------|----------|
365
- | Passou | {N} |
366
- | Problemas | {N} |
367
- | Pulado | {N} |
368
-
369
- [Se issues > 0:]
370
- ### Problemas Encontrados
371
-
372
- [Lista da seção Issues]
373
- ```
374
-
375
- **Se issues > 0:** Prossiga para `diagnose_issues`
376
-
377
- **Se issues == 0:**
378
- ```
379
- Todos os testes passaram. Pronto para continuar.
380
-
381
- - `/planejar-fase {próxima}` — Planejar próxima fase
382
- - `/executar-fase {próxima}` — Executar próxima fase
383
- - `/revisar-ui {fase}` — auditoria de qualidade visual (se arquivos frontend foram modificados)
384
- ```
385
- </step>
386
-
387
- <step name="diagnose_issues">
388
- **Diagnosticar causas raiz antes de planejar correções:**
389
-
390
- ```
391
- ---
392
-
393
- {N} problemas encontrados. Diagnosticando causas raiz...
394
-
395
- Spawnando agentes de debug paralelos para investigar cada problema.
396
- ```
397
-
398
- - Carregue o workflow diagnose-issues
399
- - Siga @./.claude/framework/workflows/diagnose-issues.md
400
- - Spawne agentes de debug paralelos para cada problema
401
- - Colete causas raiz
402
- - Atualize UAT.md com as causas raiz
403
- - Prossiga para `plan_gap_closure`
404
-
405
- O diagnóstico roda automaticamente — sem prompt ao usuário. Agentes paralelos investigam simultaneamente, então o overhead é mínimo e as correções são mais precisas.
406
- </step>
407
-
408
- <step name="plan_gap_closure">
409
- **Planejar automaticamente as correções a partir das lacunas diagnosticadas:**
410
-
411
- Exiba:
412
- ```
413
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
414
- framework ► PLANEJANDO CORREÇÕES
415
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
416
-
417
- ◆ Spawnando planejador para fechamento de lacunas...
418
- ```
419
-
420
- Spawne planner no modo --gaps:
421
-
422
- ```
423
- Task(
424
- prompt="""
425
- <planning_context>
426
-
427
- **Phase:** {phase_number}
428
- **Mode:** gap_closure
429
-
430
- <files_to_read>
431
- - {phase_dir}/{phase_num}-UAT.md (UAT with diagnoses)
432
- - .planning/STATE.md (Project State)
433
- - .planning/ROADMAP.md (Roadmap)
434
- </files_to_read>
435
-
436
- ${AGENT_SKILLS_PLANNER}
437
-
438
- </planning_context>
439
-
440
- <downstream_consumer>
441
- Output consumed by /execute-phase
442
- Plans must be executable prompts.
443
- </downstream_consumer>
444
- """,
445
- subagent_type="planner",
446
- model="{planner_model}",
447
- description="Plan gap fixes for Phase {phase}"
448
- )
449
- ```
450
-
451
- No retorno:
452
- - **PLANNING COMPLETE:** Prossiga para `verify_gap_plans`
453
- - **PLANNING INCONCLUSIVE:** Reporte e ofereça intervenção manual
454
- </step>
455
-
456
- <step name="verify_gap_plans">
457
- **Verificar planos de correção com o checker:**
458
-
459
- Exiba:
460
- ```
461
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
462
- framework ► VERIFICANDO PLANOS DE CORREÇÃO
463
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
464
-
465
- ◆ Spawnando verificador de planos...
466
- ```
467
-
468
- Inicialize: `iteration_count = 1`
469
-
470
- Spawne plan-checker:
471
-
472
- ```
473
- Task(
474
- prompt="""
475
- <verification_context>
476
-
477
- **Phase:** {phase_number}
478
- **Phase Goal:** Close diagnosed gaps from UAT
479
-
480
- <files_to_read>
481
- - {phase_dir}/*-PLAN.md (Plans to verify)
482
- </files_to_read>
483
-
484
- ${AGENT_SKILLS_CHECKER}
485
-
486
- </verification_context>
487
-
488
- <expected_output>
489
- Return one of:
490
- - ## VERIFICATION PASSED — all checks pass
491
- - ## ISSUES FOUND — structured issue list
492
- </expected_output>
493
- """,
494
- subagent_type="plan-checker",
495
- model="{checker_model}",
496
- description="Verify Phase {phase} fix plans"
497
- )
498
- ```
499
-
500
- No retorno:
501
- - **VERIFICATION PASSED:** Prossiga para `present_ready`
502
- - **ISSUES FOUND:** Prossiga para `revision_loop`
503
- </step>
504
-
505
- <step name="revision_loop">
506
- **Itere planejador ↔ checker até os planos passarem (máx. 3):**
507
-
508
- **Se iteration_count < 3:**
509
-
510
- Exiba: `Enviando de volta ao planejador para revisão... (iteração {N}/3)`
511
-
512
- Spawne planner com contexto de revisão:
513
-
514
- ```
515
- Task(
516
- prompt="""
517
- <revision_context>
518
-
519
- **Phase:** {phase_number}
520
- **Mode:** revision
521
-
522
- <files_to_read>
523
- - {phase_dir}/*-PLAN.md (Existing plans)
524
- </files_to_read>
525
-
526
- ${AGENT_SKILLS_PLANNER}
527
-
528
- **Checker issues:**
529
- {structured_issues_from_checker}
530
-
531
- </revision_context>
532
-
533
- <instructions>
534
- Read existing PLAN.md files. Make targeted updates to address checker issues.
535
- Do NOT replan from scratch unless issues are fundamental.
536
- </instructions>
537
- """,
538
- subagent_type="planner",
539
- model="{planner_model}",
540
- description="Revise Phase {phase} plans"
541
- )
542
- ```
543
-
544
- Após retorno do planejador → spawne o checker novamente (lógica do verify_gap_plans)
545
- Incremente iteration_count
546
-
547
- **Se iteration_count >= 3:**
548
-
549
- Exiba: `Máximo de iterações atingido. {N} problemas permanecem.`
550
-
551
- Ofereça opções:
552
- 1. Forçar prosseguimento (executar apesar dos problemas)
553
- 2. Fornecer orientação (usuário dá direção, tentar novamente)
554
- 3. Abandonar (sair, usuário executa /planejar-fase manualmente)
555
-
556
- Aguarde a resposta do usuário.
557
- </step>
558
-
559
- <step name="present_ready">
560
- **Apresentar conclusão e próximos passos:**
561
-
562
- ```
563
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
564
- framework ► CORREÇÕES PRONTAS ✓
565
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
566
-
567
- **Fase {X}: {Nome}** — {N} lacuna(s) diagnosticada(s), {M} plano(s) de correção criado(s)
568
-
569
- | Lacuna | Causa Raiz | Plano de Correção |
570
- |--------|------------|-------------------|
571
- | {verdade 1} | {causa_raiz} | {fase}-04 |
572
- | {verdade 2} | {causa_raiz} | {fase}-04 |
573
-
574
- Planos verificados e prontos para execução.
575
-
576
- ───────────────────────────────────────────────────────────────
577
-
578
- ## ▶ Próximo Passo
579
-
580
- **Executar correções** — executar planos de correção
581
-
582
- `/clear` e depois `/executar-fase {fase} --gaps-only`
583
-
584
- ───────────────────────────────────────────────────────────────
585
- ```
586
- </step>
587
-
588
- </process>
589
-
590
- <update_rules>
591
- **Escritas em lote para eficiência:**
592
-
593
- Mantenha os resultados em memória. Escreva no arquivo apenas quando:
594
- 1. **Problema encontrado** — Preserve o problema imediatamente
595
- 2. **Sessão completa** — Escrita final antes do commit
596
- 3. **Checkpoint** — A cada 5 testes passados (rede de segurança)
597
-
598
- | Seção | Regra | Quando Escrito |
599
- |-------|-------|----------------|
600
- | Frontmatter.status | SOBRESCREVER | Início, conclusão |
601
- | Frontmatter.updated | SOBRESCREVER | Em qualquer escrita de arquivo |
602
- | Teste Atual | SOBRESCREVER | Em qualquer escrita de arquivo |
603
- | Tests.{N}.result | SOBRESCREVER | Em qualquer escrita de arquivo |
604
- | Summary | SOBRESCREVER | Em qualquer escrita de arquivo |
605
- | Gaps | ADICIONAR | Quando problema encontrado |
606
-
607
- Em reset de contexto: Arquivo mostra o último checkpoint. Retome a partir daí.
608
- </update_rules>
609
-
610
- <severity_inference>
611
- **Infira a severidade da linguagem natural do usuário:**
612
-
613
- | O usuário diz | Inferir |
614
- |---------------|---------|
615
- | "crash", "erro", "exceção", "falha completamente" | bloqueador |
616
- | "não funciona", "nada acontece", "comportamento errado" | major |
617
- | "funciona mas...", "lento", "estranho", "problema menor" | minor |
618
- | "cor", "espaçamento", "alinhamento", "parece errado" | cosmético |
619
-
620
- Padrão para **major** se não estiver claro. O usuário pode corrigir se necessário.
621
-
622
- **Nunca pergunte "qual é a severidade disto?"** - apenas infira e continue.
623
- </severity_inference>
624
-
625
- <success_criteria>
626
- - [ ] Arquivo UAT criado com todos os testes do SUMMARY.md
627
- - [ ] Testes apresentados um por vez com comportamento esperado
628
- - [ ] Respostas do usuário processadas como passou/problema/pulado
629
- - [ ] Severidade inferida a partir da descrição (nunca perguntada)
630
- - [ ] Escritas em lote: no problema, a cada 5 testes passados, ou na conclusão
631
- - [ ] Commitado na conclusão
632
- - [ ] Se problemas: agentes de debug paralelos diagnosticam causas raiz
633
- - [ ] Se problemas: planner cria planos de correção (modo gap_closure)
634
- - [ ] Se problemas: plan-checker verifica os planos de correção
635
- - [ ] Se problemas: loop de revisão até os planos passarem (máx. 3 iterações)
636
- - [ ] Pronto para `/executar-fase --gaps-only` quando concluído
637
- </success_criteria>
1
+ <purpose>
2
+ Validar funcionalidades desenvolvidas por meio de testes conversacionais com estado persistente. Cria UAT.md que rastreia o progresso dos testes, sobrevive ao /clear e alimenta lacunas no /planejar-fase --gaps.
3
+
4
+ O usuário testa, o Claude registra. Um teste por vez. Respostas em texto simples.
5
+ </purpose>
6
+
7
+ <available_agent_types>
8
+ Tipos de subagente framework válidos (use os nomes exatos — não use 'general-purpose' como fallback):
9
+ - planner — Cria planos detalhados a partir do escopo da fase
10
+ - plan-checker — Revisa a qualidade do plano antes da execução
11
+ </available_agent_types>
12
+
13
+ <philosophy>
14
+ **Mostre o esperado, pergunte se a realidade corresponde.**
15
+
16
+ O Claude apresenta o que DEVERIA acontecer. O usuário confirma ou descreve o que é diferente.
17
+ - "sim" / "s" / "próximo" / vazio → passou
18
+ - Qualquer outra coisa → registrado como problema, severidade inferida
19
+
20
+ Sem botões Passou/Falhou. Sem perguntas sobre severidade. Apenas: "Aqui está o que deveria acontecer. Aconteceu?"
21
+ </philosophy>
22
+
23
+ <template>
24
+ @./.claude/framework/templates/UAT.md
25
+ </template>
26
+
27
+ <process>
28
+
29
+ <step name="initialize" priority="first">
30
+ Se $ARGUMENTS contém um número de fase, carregue o contexto:
31
+
32
+ ```bash
33
+ INIT=$(node "./.claude/framework/bin/tools.cjs" init verify-work "${PHASE_ARG}")
34
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
35
+ AGENT_SKILLS_PLANNER=$(node "./.claude/framework/bin/tools.cjs" agent-skills planner 2>/dev/null)
36
+ AGENT_SKILLS_CHECKER=$(node "./.claude/framework/bin/tools.cjs" agent-skills checker 2>/dev/null)
37
+ ```
38
+
39
+ Analise o JSON para: `planner_model`, `checker_model`, `commit_docs`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `has_verification`, `uat_path`.
40
+ </step>
41
+
42
+ <step name="check_active_session">
43
+ **Primeiro: Verificar sessões UAT ativas**
44
+
45
+ ```bash
46
+ (find .planning/phases -name "*-UAT.md" -type f 2>/dev/null || true) | head -5
47
+ ```
48
+
49
+ **Se sessões ativas existirem E nenhum $ARGUMENTS fornecido:**
50
+
51
+ Leia o frontmatter de cada arquivo (status, fase) e a seção Teste Atual.
52
+
53
+ Exiba inline:
54
+
55
+ ```
56
+ ## Sessões UAT Ativas
57
+
58
+ | # | Fase | Status | Teste Atual | Progresso |
59
+ |---|------|--------|-------------|-----------|
60
+ | 1 | 04-comments | testing | 3. Responder Comentário | 2/6 |
61
+ | 2 | 05-auth | testing | 1. Formulário de Login | 0/4 |
62
+
63
+ Responda com um número para retomar, ou forneça um número de fase para iniciar nova.
64
+ ```
65
+
66
+ Aguarde a resposta do usuário.
67
+
68
+ - Se o usuário responder com número (1, 2) → Carregue aquele arquivo, vá para `resume_from_file`
69
+ - Se o usuário responder com número de fase → Trate como nova sessão, vá para `create_uat_file`
70
+
71
+ **Se sessões ativas existirem E $ARGUMENTS fornecido:**
72
+
73
+ Verifique se existe sessão para aquela fase. Se sim, ofereça retomar ou reiniciar.
74
+ Se não, continue para `create_uat_file`.
75
+
76
+ **Se nenhuma sessão ativa E nenhum $ARGUMENTS:**
77
+
78
+ ```
79
+ Nenhuma sessão UAT ativa.
80
+
81
+ Forneça um número de fase para iniciar os testes (ex: /verificar-trabalho 4)
82
+ ```
83
+
84
+ **Se nenhuma sessão ativa E $ARGUMENTS fornecido:**
85
+
86
+ Continue para `create_uat_file`.
87
+ </step>
88
+
89
+ <step name="find_summaries">
90
+ **Encontrar o que testar:**
91
+
92
+ Use `phase_dir` do init (ou execute o init se ainda não feito).
93
+
94
+ ```bash
95
+ ls "$phase_dir"/*-SUMMARY.md 2>/dev/null || true
96
+ ```
97
+
98
+ Leia cada SUMMARY.md para extrair entregas testáveis.
99
+ </step>
100
+
101
+ <step name="extract_tests">
102
+ **Extrair entregas testáveis do SUMMARY.md:**
103
+
104
+ Analise por:
105
+ 1. **Realizações** - Funcionalidades/recursos adicionados
106
+ 2. **Mudanças visíveis ao usuário** - UI, fluxos, interações
107
+
108
+ Foque em resultados OBSERVÁVEIS PELO USUÁRIO, não em detalhes de implementação.
109
+
110
+ Para cada entrega, crie um teste:
111
+ - name: Nome breve do teste
112
+ - expected: O que o usuário deveria ver/experimentar (específico, observável)
113
+
114
+ Exemplos:
115
+ - Realização: "Adicionado threading de comentários com aninhamento infinito"
116
+ → Teste: "Responder a um Comentário"
117
+ → Esperado: "Clicar em Responder abre compositor inline abaixo do comentário. Submeter mostra resposta aninhada abaixo do pai com recuo visual."
118
+
119
+ Pule itens internos/não observáveis (refatorações, alterações de tipo, etc.).
120
+
121
+ **Injeção de smoke test de cold-start:**
122
+
123
+ Após extrair os testes dos SUMMARYs, escaneie os arquivos SUMMARY em busca de caminhos de arquivos modificados/criados. Se QUALQUER caminho corresponder a estes padrões:
124
+
125
+ `server.ts`, `server.js`, `app.ts`, `app.js`, `index.ts`, `index.js`, `main.ts`, `main.js`, `database/*`, `db/*`, `seed/*`, `seeds/*`, `migrations/*`, `startup*`, `docker-compose*`, `Dockerfile*`
126
+
127
+ Então **adicione ao início** da lista de testes:
128
+
129
+ - name: "Smoke Test de Cold Start"
130
+ - expected: "Encerre qualquer servidor/serviço em execução. Limpe o estado efêmero (DBs temporários, caches, lock files). Inicie a aplicação do zero. O servidor inicializa sem erros, qualquer seed/migração é concluída, e uma query primária (health check, carregamento da página inicial, ou chamada básica de API) retorna dados ao vivo."
131
+
132
+ Isso captura bugs que só se manifestam em uma inicialização nova — condições de corrida em sequências de inicialização, falhas silenciosas de seed, configuração de ambiente ausente — que passam contra estado quente mas quebram em produção.
133
+ </step>
134
+
135
+ <step name="create_uat_file">
136
+ **Criar arquivo UAT com todos os testes:**
137
+
138
+ ```bash
139
+ mkdir -p "$PHASE_DIR"
140
+ ```
141
+
142
+ Construa a lista de testes a partir das entregas extraídas.
143
+
144
+ Crie o arquivo:
145
+
146
+ ```markdown
147
+ ---
148
+ status: testing
149
+ phase: XX-name
150
+ source: [list of SUMMARY.md files]
151
+ started: [ISO timestamp]
152
+ updated: [ISO timestamp]
153
+ ---
154
+
155
+ ## Current Test
156
+ <!-- OVERWRITE each test - shows where we are -->
157
+
158
+ number: 1
159
+ name: [first test name]
160
+ expected: |
161
+ [what user should observe]
162
+ awaiting: user response
163
+
164
+ ## Tests
165
+
166
+ ### 1. [Test Name]
167
+ expected: [observable behavior]
168
+ result: [pending]
169
+
170
+ ### 2. [Test Name]
171
+ expected: [observable behavior]
172
+ result: [pending]
173
+
174
+ ...
175
+
176
+ ## Summary
177
+
178
+ total: [N]
179
+ passed: 0
180
+ issues: 0
181
+ pending: [N]
182
+ skipped: 0
183
+
184
+ ## Gaps
185
+
186
+ [none yet]
187
+ ```
188
+
189
+ Escreva em `.planning/phases/XX-name/{phase_num}-UAT.md`
190
+
191
+ Prossiga para `present_test`.
192
+ </step>
193
+
194
+ <step name="present_test">
195
+ **Apresentar o teste atual ao usuário:**
196
+
197
+ Renderize o checkpoint a partir do arquivo UAT estruturado em vez de compô-lo manualmente:
198
+
199
+ ```bash
200
+ CHECKPOINT=$(node "./.claude/framework/bin/tools.cjs" uat render-checkpoint --file "$uat_path" --raw)
201
+ if [[ "$CHECKPOINT" == @file:* ]]; then CHECKPOINT=$(cat "${CHECKPOINT#@file:}"); fi
202
+ ```
203
+
204
+ Exiba o checkpoint retornado EXATAMENTE como está:
205
+
206
+ ```
207
+ {CHECKPOINT}
208
+ ```
209
+
210
+ **Higiene crítica de resposta:**
211
+ - Toda a sua resposta DEVE ser igual a `{CHECKPOINT}` byte a byte.
212
+ - NÃO adicione comentários antes ou depois do bloco.
213
+ - Se você notar marcadores de protocolo/meta como `to=all:`, texto de roteamento de função, tags de sistema XML, marcadores de instrução ocultos, anúncios, ou qualquer sufixo não relacionado, descarte o rascunho e emita apenas `{CHECKPOINT}`.
214
+
215
+ Aguarde a resposta do usuário (texto simples, sem AskUserQuestion).
216
+ </step>
217
+
218
+ <step name="process_response">
219
+ **Processar a resposta do usuário e atualizar o arquivo:**
220
+
221
+ **Se a resposta indica que passou:**
222
+ - Resposta vazia, "sim", "s", "ok", "passou", "próximo", "aprovado", "✓"
223
+
224
+ Atualize a seção Tests:
225
+ ```
226
+ ### {N}. {name}
227
+ expected: {expected}
228
+ result: pass
229
+ ```
230
+
231
+ **Se a resposta indica pular:**
232
+ - "pular", "não consigo testar", "n/a"
233
+
234
+ Atualize a seção Tests:
235
+ ```
236
+ ### {N}. {name}
237
+ expected: {expected}
238
+ result: skipped
239
+ reason: [razão do usuário se fornecida]
240
+ ```
241
+
242
+ **Se a resposta indica bloqueado:**
243
+ - "bloqueado", "não consigo testar - servidor não está rodando", "preciso de dispositivo físico", "preciso de build de release"
244
+ - Ou qualquer resposta contendo: "servidor", "bloqueado", "não está rodando", "dispositivo físico", "build de release"
245
+
246
+ Infira a tag blocked_by da resposta:
247
+ - Contém: servidor, não está rodando, gateway, API → `server`
248
+ - Contém: físico, dispositivo, hardware, celular real → `physical-device`
249
+ - Contém: release, preview, build, EAS → `release-build`
250
+ - Contém: stripe, twilio, third-party, configurar → `third-party`
251
+ - Contém: depende de, fase anterior, pré-requisito → `prior-phase`
252
+ - Padrão: `other`
253
+
254
+ Atualize a seção Tests:
255
+ ```
256
+ ### {N}. {name}
257
+ expected: {expected}
258
+ result: blocked
259
+ blocked_by: {tag inferida}
260
+ reason: "{resposta verbatim do usuário}"
261
+ ```
262
+
263
+ Nota: Testes bloqueados NÃO vão para a seção Gaps (não são problemas de código — são gates de pré-requisito).
264
+
265
+ **Se a resposta for qualquer outra coisa:**
266
+ - Trate como descrição de problema
267
+
268
+ Infira a severidade da descrição:
269
+ - Contém: crash, erro, exceção, falha, quebrado, inutilizável → bloqueador
270
+ - Contém: não funciona, errado, ausente, não consigo → major
271
+ - Contém: lento, estranho, fora, menor, pequeno → minor
272
+ - Contém: cor, fonte, espaçamento, alinhamento, visual → cosmético
273
+ - Padrão se não estiver claro: major
274
+
275
+ Atualize a seção Tests:
276
+ ```
277
+ ### {N}. {name}
278
+ expected: {expected}
279
+ result: issue
280
+ reported: "{resposta verbatim do usuário}"
281
+ severity: {inferida}
282
+ ```
283
+
284
+ Adicione à seção Gaps (YAML estruturado para planejar-fase --gaps):
285
+ ```yaml
286
+ - truth: "{comportamento esperado do teste}"
287
+ status: failed
288
+ reason: "User reported: {resposta verbatim do usuário}"
289
+ severity: {inferida}
290
+ test: {N}
291
+ artifacts: [] # Preenchido pelo diagnóstico
292
+ missing: [] # Preenchido pelo diagnóstico
293
+ ```
294
+
295
+ **Após qualquer resposta:**
296
+
297
+ Atualize as contagens do Summary.
298
+ Atualize o timestamp frontmatter.updated.
299
+
300
+ Se houver mais testes → Atualize Teste Atual, vá para `present_test`
301
+ Se não houver mais testes → Vá para `complete_session`
302
+ </step>
303
+
304
+ <step name="resume_from_file">
305
+ **Retomar testes a partir do arquivo UAT:**
306
+
307
+ Leia o arquivo UAT completo.
308
+
309
+ Encontre o primeiro teste com `result: [pending]`.
310
+
311
+ Anuncie:
312
+ ```
313
+ Retomando: UAT da Fase {phase}
314
+ Progresso: {passed + issues + skipped}/{total}
315
+ Problemas encontrados até agora: {issues count}
316
+
317
+ Continuando a partir do Teste {N}...
318
+ ```
319
+
320
+ Atualize a seção Teste Atual com o teste pendente.
321
+ Prossiga para `present_test`.
322
+ </step>
323
+
324
+ <step name="complete_session">
325
+ **Concluir testes e commitar:**
326
+
327
+ **Determinar status final:**
328
+
329
+ Conte os resultados:
330
+ - `pending_count`: testes com `result: [pending]`
331
+ - `blocked_count`: testes com `result: blocked`
332
+ - `skipped_no_reason`: testes com `result: skipped` sem campo `reason`
333
+
334
+ ```
335
+ if pending_count > 0 OR blocked_count > 0 OR skipped_no_reason > 0:
336
+ status: partial
337
+ # Sessão encerrada mas nem todos os testes resolvidos
338
+ else:
339
+ status: complete
340
+ # Todos os testes têm um resultado definitivo (passed, issue, ou skipped-with-reason)
341
+ ```
342
+
343
+ Atualize o frontmatter:
344
+ - status: {status calculado}
345
+ - updated: [agora]
346
+
347
+ Limpe a seção Teste Atual:
348
+ ```
349
+ ## Current Test
350
+
351
+ [testing complete]
352
+ ```
353
+
354
+ Commite o arquivo UAT:
355
+ ```bash
356
+ node "./.claude/framework/bin/tools.cjs" commit "test({phase_num}): complete UAT - {passed} passed, {issues} issues" --files ".planning/phases/XX-name/{phase_num}-UAT.md"
357
+ ```
358
+
359
+ Apresente o resumo:
360
+ ```
361
+ ## UAT Concluído: Fase {phase}
362
+
363
+ | Resultado | Contagem |
364
+ |-----------|----------|
365
+ | Passou | {N} |
366
+ | Problemas | {N} |
367
+ | Pulado | {N} |
368
+
369
+ [Se issues > 0:]
370
+ ### Problemas Encontrados
371
+
372
+ [Lista da seção Issues]
373
+ ```
374
+
375
+ **Se issues > 0:** Prossiga para `diagnose_issues`
376
+
377
+ **Se issues == 0:**
378
+ ```
379
+ Todos os testes passaram. Pronto para continuar.
380
+
381
+ - `/planejar-fase {próxima}` — Planejar próxima fase
382
+ - `/executar-fase {próxima}` — Executar próxima fase
383
+ - `/revisar-ui {fase}` — auditoria de qualidade visual (se arquivos frontend foram modificados)
384
+ ```
385
+ </step>
386
+
387
+ <step name="diagnose_issues">
388
+ **Diagnosticar causas raiz antes de planejar correções:**
389
+
390
+ ```
391
+ ---
392
+
393
+ {N} problemas encontrados. Diagnosticando causas raiz...
394
+
395
+ Spawnando agentes de debug paralelos para investigar cada problema.
396
+ ```
397
+
398
+ - Carregue o workflow diagnose-issues
399
+ - Siga @./.claude/framework/workflows/diagnose-issues.md
400
+ - Spawne agentes de debug paralelos para cada problema
401
+ - Colete causas raiz
402
+ - Atualize UAT.md com as causas raiz
403
+ - Prossiga para `plan_gap_closure`
404
+
405
+ O diagnóstico roda automaticamente — sem prompt ao usuário. Agentes paralelos investigam simultaneamente, então o overhead é mínimo e as correções são mais precisas.
406
+ </step>
407
+
408
+ <step name="plan_gap_closure">
409
+ **Planejar automaticamente as correções a partir das lacunas diagnosticadas:**
410
+
411
+ Exiba:
412
+ ```
413
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
414
+ framework ► PLANEJANDO CORREÇÕES
415
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
416
+
417
+ ◆ Spawnando planejador para fechamento de lacunas...
418
+ ```
419
+
420
+ Spawne planner no modo --gaps:
421
+
422
+ ```
423
+ Task(
424
+ prompt="""
425
+ <planning_context>
426
+
427
+ **Phase:** {phase_number}
428
+ **Mode:** gap_closure
429
+
430
+ <files_to_read>
431
+ - {phase_dir}/{phase_num}-UAT.md (UAT with diagnoses)
432
+ - .planning/STATE.md (Project State)
433
+ - .planning/ROADMAP.md (Roadmap)
434
+ </files_to_read>
435
+
436
+ ${AGENT_SKILLS_PLANNER}
437
+
438
+ </planning_context>
439
+
440
+ <downstream_consumer>
441
+ Output consumed by /execute-phase
442
+ Plans must be executable prompts.
443
+ </downstream_consumer>
444
+ """,
445
+ subagent_type="planner",
446
+ model="{planner_model}",
447
+ description="Plan gap fixes for Phase {phase}"
448
+ )
449
+ ```
450
+
451
+ No retorno:
452
+ - **PLANNING COMPLETE:** Prossiga para `verify_gap_plans`
453
+ - **PLANNING INCONCLUSIVE:** Reporte e ofereça intervenção manual
454
+ </step>
455
+
456
+ <step name="verify_gap_plans">
457
+ **Verificar planos de correção com o checker:**
458
+
459
+ Exiba:
460
+ ```
461
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
462
+ framework ► VERIFICANDO PLANOS DE CORREÇÃO
463
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
464
+
465
+ ◆ Spawnando verificador de planos...
466
+ ```
467
+
468
+ Inicialize: `iteration_count = 1`
469
+
470
+ Spawne plan-checker:
471
+
472
+ ```
473
+ Task(
474
+ prompt="""
475
+ <verification_context>
476
+
477
+ **Phase:** {phase_number}
478
+ **Phase Goal:** Close diagnosed gaps from UAT
479
+
480
+ <files_to_read>
481
+ - {phase_dir}/*-PLAN.md (Plans to verify)
482
+ </files_to_read>
483
+
484
+ ${AGENT_SKILLS_CHECKER}
485
+
486
+ </verification_context>
487
+
488
+ <expected_output>
489
+ Return one of:
490
+ - ## VERIFICATION PASSED — all checks pass
491
+ - ## ISSUES FOUND — structured issue list
492
+ </expected_output>
493
+ """,
494
+ subagent_type="plan-checker",
495
+ model="{checker_model}",
496
+ description="Verify Phase {phase} fix plans"
497
+ )
498
+ ```
499
+
500
+ No retorno:
501
+ - **VERIFICATION PASSED:** Prossiga para `present_ready`
502
+ - **ISSUES FOUND:** Prossiga para `revision_loop`
503
+ </step>
504
+
505
+ <step name="revision_loop">
506
+ **Itere planejador ↔ checker até os planos passarem (máx. 3):**
507
+
508
+ **Se iteration_count < 3:**
509
+
510
+ Exiba: `Enviando de volta ao planejador para revisão... (iteração {N}/3)`
511
+
512
+ Spawne planner com contexto de revisão:
513
+
514
+ ```
515
+ Task(
516
+ prompt="""
517
+ <revision_context>
518
+
519
+ **Phase:** {phase_number}
520
+ **Mode:** revision
521
+
522
+ <files_to_read>
523
+ - {phase_dir}/*-PLAN.md (Existing plans)
524
+ </files_to_read>
525
+
526
+ ${AGENT_SKILLS_PLANNER}
527
+
528
+ **Checker issues:**
529
+ {structured_issues_from_checker}
530
+
531
+ </revision_context>
532
+
533
+ <instructions>
534
+ Read existing PLAN.md files. Make targeted updates to address checker issues.
535
+ Do NOT replan from scratch unless issues are fundamental.
536
+ </instructions>
537
+ """,
538
+ subagent_type="planner",
539
+ model="{planner_model}",
540
+ description="Revise Phase {phase} plans"
541
+ )
542
+ ```
543
+
544
+ Após retorno do planejador → spawne o checker novamente (lógica do verify_gap_plans)
545
+ Incremente iteration_count
546
+
547
+ **Se iteration_count >= 3:**
548
+
549
+ Exiba: `Máximo de iterações atingido. {N} problemas permanecem.`
550
+
551
+ Ofereça opções:
552
+ 1. Forçar prosseguimento (executar apesar dos problemas)
553
+ 2. Fornecer orientação (usuário dá direção, tentar novamente)
554
+ 3. Abandonar (sair, usuário executa /planejar-fase manualmente)
555
+
556
+ Aguarde a resposta do usuário.
557
+ </step>
558
+
559
+ <step name="present_ready">
560
+ **Apresentar conclusão e próximos passos:**
561
+
562
+ ```
563
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
564
+ framework ► CORREÇÕES PRONTAS ✓
565
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
566
+
567
+ **Fase {X}: {Nome}** — {N} lacuna(s) diagnosticada(s), {M} plano(s) de correção criado(s)
568
+
569
+ | Lacuna | Causa Raiz | Plano de Correção |
570
+ |--------|------------|-------------------|
571
+ | {verdade 1} | {causa_raiz} | {fase}-04 |
572
+ | {verdade 2} | {causa_raiz} | {fase}-04 |
573
+
574
+ Planos verificados e prontos para execução.
575
+
576
+ ───────────────────────────────────────────────────────────────
577
+
578
+ ## ▶ Próximo Passo
579
+
580
+ **Executar correções** — executar planos de correção
581
+
582
+ `/clear` e depois `/executar-fase {fase} --gaps-only`
583
+
584
+ ───────────────────────────────────────────────────────────────
585
+ ```
586
+ </step>
587
+
588
+ </process>
589
+
590
+ <update_rules>
591
+ **Escritas em lote para eficiência:**
592
+
593
+ Mantenha os resultados em memória. Escreva no arquivo apenas quando:
594
+ 1. **Problema encontrado** — Preserve o problema imediatamente
595
+ 2. **Sessão completa** — Escrita final antes do commit
596
+ 3. **Checkpoint** — A cada 5 testes passados (rede de segurança)
597
+
598
+ | Seção | Regra | Quando Escrito |
599
+ |-------|-------|----------------|
600
+ | Frontmatter.status | SOBRESCREVER | Início, conclusão |
601
+ | Frontmatter.updated | SOBRESCREVER | Em qualquer escrita de arquivo |
602
+ | Teste Atual | SOBRESCREVER | Em qualquer escrita de arquivo |
603
+ | Tests.{N}.result | SOBRESCREVER | Em qualquer escrita de arquivo |
604
+ | Summary | SOBRESCREVER | Em qualquer escrita de arquivo |
605
+ | Gaps | ADICIONAR | Quando problema encontrado |
606
+
607
+ Em reset de contexto: Arquivo mostra o último checkpoint. Retome a partir daí.
608
+ </update_rules>
609
+
610
+ <severity_inference>
611
+ **Infira a severidade da linguagem natural do usuário:**
612
+
613
+ | O usuário diz | Inferir |
614
+ |---------------|---------|
615
+ | "crash", "erro", "exceção", "falha completamente" | bloqueador |
616
+ | "não funciona", "nada acontece", "comportamento errado" | major |
617
+ | "funciona mas...", "lento", "estranho", "problema menor" | minor |
618
+ | "cor", "espaçamento", "alinhamento", "parece errado" | cosmético |
619
+
620
+ Padrão para **major** se não estiver claro. O usuário pode corrigir se necessário.
621
+
622
+ **Nunca pergunte "qual é a severidade disto?"** - apenas infira e continue.
623
+ </severity_inference>
624
+
625
+ <success_criteria>
626
+ - [ ] Arquivo UAT criado com todos os testes do SUMMARY.md
627
+ - [ ] Testes apresentados um por vez com comportamento esperado
628
+ - [ ] Respostas do usuário processadas como passou/problema/pulado
629
+ - [ ] Severidade inferida a partir da descrição (nunca perguntada)
630
+ - [ ] Escritas em lote: no problema, a cada 5 testes passados, ou na conclusão
631
+ - [ ] Commitado na conclusão
632
+ - [ ] Se problemas: agentes de debug paralelos diagnosticam causas raiz
633
+ - [ ] Se problemas: planner cria planos de correção (modo gap_closure)
634
+ - [ ] Se problemas: plan-checker verifica os planos de correção
635
+ - [ ] Se problemas: loop de revisão até os planos passarem (máx. 3 iterações)
636
+ - [ ] Pronto para `/executar-fase --gaps-only` quando concluído
637
+ </success_criteria>