@luanpdd/kit-mcp 1.21.0 → 1.26.0

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