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