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