@luanpdd/kit-mcp 1.30.2 → 1.31.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.
- package/LICENSE +21 -21
- package/README.md +168 -168
- package/gates/agent-no-recursive-dispatch.md +84 -82
- package/kit/COMANDOS.md +138 -138
- package/kit/README.md +76 -76
- package/kit/agents/advisor-researcher.md +107 -106
- package/kit/agents/ai-mutation-tester.md +1 -0
- package/kit/agents/assumptions-analyzer.md +108 -107
- package/kit/agents/audit-log-implementer.md +314 -313
- package/kit/agents/auditor-consistencia-isolamento.md +414 -413
- package/kit/agents/b2b-saas-architect.md +157 -156
- package/kit/agents/burn-rate-forecaster.md +1 -0
- package/kit/agents/cascading-failures-auditor.md +299 -298
- package/kit/agents/codebase-mapper.md +769 -768
- package/kit/agents/crm-pipeline-implementer.md +257 -256
- package/kit/agents/debugger.md +814 -813
- package/kit/agents/detector-tenant-quente.md +338 -337
- package/kit/agents/evolution-go-integrator.md +201 -200
- package/kit/agents/example-reviewer.md +22 -21
- package/kit/agents/executor.md +565 -564
- package/kit/agents/golden-signals-instrumenter.md +1 -0
- package/kit/agents/incident-investigator.md +1 -0
- package/kit/agents/integration-checker.md +201 -200
- package/kit/agents/invite-flow-implementer.md +190 -189
- package/kit/agents/legacy-characterizer.md +369 -368
- package/kit/agents/lgpd-compliance-auditor.md +296 -295
- package/kit/agents/load-shedding-instrumenter.md +1 -0
- package/kit/agents/multi-tenant-isolation-auditor.md +254 -253
- package/kit/agents/multi-tenant-rls-writer.md +341 -340
- package/kit/agents/nyquist-auditor.md +179 -178
- package/kit/agents/observability-coverage-auditor.md +316 -315
- package/kit/agents/observability-instrumenter.md +1 -0
- package/kit/agents/omm-auditor.md +1 -0
- package/kit/agents/org-onboarding-implementer.md +224 -223
- package/kit/agents/payload-capture-instrumenter.md +274 -273
- package/kit/agents/phase-researcher.md +697 -696
- package/kit/agents/plan-checker.md +273 -272
- package/kit/agents/planner.md +923 -922
- package/kit/agents/postmortem-writer.md +1 -0
- package/kit/agents/project-researcher.md +653 -652
- package/kit/agents/prr-conductor.md +1 -0
- package/kit/agents/refactor-safety-auditor.md +405 -404
- package/kit/agents/release-pipeline-auditor.md +1 -0
- package/kit/agents/research-synthesizer.md +246 -245
- package/kit/agents/roadmapper.md +678 -677
- package/kit/agents/schema-checker.md +1 -0
- package/kit/agents/seam-finder.md +360 -359
- package/kit/agents/shotgun-surgery-detector.md +350 -349
- package/kit/agents/slo-engineer.md +1 -0
- package/kit/agents/storytelling-analyst.md +1 -0
- package/kit/agents/supabase-architect.md +1 -0
- package/kit/agents/supabase-auth-bootstrapper.md +1 -0
- package/kit/agents/supabase-branching-architect.md +563 -562
- package/kit/agents/supabase-cicd-pipeline-implementer.md +778 -777
- package/kit/agents/supabase-column-privileges-writer.md +400 -399
- package/kit/agents/supabase-edge-fn-tester.md +2 -1
- package/kit/agents/supabase-edge-fn-writer.md +2 -1
- package/kit/agents/supabase-migration-writer.md +386 -385
- package/kit/agents/supabase-rbac-implementer.md +393 -392
- package/kit/agents/supabase-realtime-implementer.md +364 -363
- package/kit/agents/supabase-rls-hardener.md +522 -521
- package/kit/agents/supabase-rls-writer.md +324 -323
- package/kit/agents/supabase-roles-implementer.md +356 -355
- package/kit/agents/supabase-storage-implementer.md +1 -0
- package/kit/agents/super-admin-implementer.md +282 -281
- package/kit/agents/toil-auditor.md +1 -0
- package/kit/agents/ui-auditor.md +438 -437
- package/kit/agents/ui-checker.md +303 -302
- package/kit/agents/ui-researcher.md +356 -355
- package/kit/agents/user-profiler.md +176 -175
- package/kit/agents/validador-evolucao-schema.md +336 -335
- package/kit/agents/verifier.md +729 -728
- package/kit/commands/adicionar-backlog.md +75 -75
- package/kit/commands/adicionar-fase.md +42 -42
- package/kit/commands/adicionar-tarefa.md +45 -45
- package/kit/commands/adicionar-testes.md +41 -41
- package/kit/commands/ajuda.md +21 -21
- package/kit/commands/atualizar.md +37 -37
- package/kit/commands/auditar-cascading.md +111 -111
- package/kit/commands/auditar-marco.md +179 -179
- package/kit/commands/auditar-observabilidade-cobertura.md +183 -183
- package/kit/commands/auditar-refactor.md +219 -219
- package/kit/commands/auditar-release.md +109 -109
- package/kit/commands/auditar-uat.md +23 -23
- package/kit/commands/autonomo.md +40 -40
- package/kit/commands/branch-pr.md +24 -24
- package/kit/commands/burn-rate-status.md +408 -408
- package/kit/commands/capturar-payloads.md +193 -193
- package/kit/commands/caracterizar.md +212 -212
- package/kit/commands/concluir-marco.md +247 -247
- package/kit/commands/configuracoes.md +36 -36
- package/kit/commands/dados-distribuidos.md +188 -188
- package/kit/commands/definir-perfil.md +10 -10
- package/kit/commands/depurar.md +190 -190
- package/kit/commands/detectar-duplicacao.md +197 -197
- package/kit/commands/discutir-fase.md +131 -131
- package/kit/commands/encontrar-seams.md +136 -136
- package/kit/commands/entrar-discord.md +17 -17
- package/kit/commands/estatisticas.md +18 -18
- package/kit/commands/example-greeting.md +33 -33
- package/kit/commands/executar-fase.md +58 -58
- package/kit/commands/expresso.md +56 -56
- package/kit/commands/fase-ui.md +34 -34
- package/kit/commands/fazer.md +57 -57
- package/kit/commands/fio.md +125 -125
- package/kit/commands/fluxos-trabalho.md +64 -64
- package/kit/commands/forense.md +176 -176
- package/kit/commands/gerenciador.md +38 -38
- package/kit/commands/inserir-fase.md +31 -31
- package/kit/commands/legacy.md +263 -263
- package/kit/commands/limpeza.md +17 -17
- package/kit/commands/listar-hipoteses-fase.md +45 -45
- package/kit/commands/listar-workspaces.md +18 -18
- package/kit/commands/load-shedding.md +117 -117
- package/kit/commands/mapear-codebase.md +70 -70
- package/kit/commands/multi-tenant.md +163 -163
- package/kit/commands/nota.md +33 -33
- package/kit/commands/novo-marco.md +43 -43
- package/kit/commands/novo-projeto.md +41 -41
- package/kit/commands/novo-workspace.md +43 -43
- package/kit/commands/pausar-trabalho.md +37 -37
- package/kit/commands/perfil-usuario.md +45 -45
- package/kit/commands/pesquisar-fase.md +195 -195
- package/kit/commands/planejar-fase.md +67 -67
- package/kit/commands/planejar-lacunas.md +33 -33
- package/kit/commands/plantar-ideia.md +25 -25
- package/kit/commands/progresso.md +24 -24
- package/kit/commands/proximo.md +30 -30
- package/kit/commands/publicar.md +490 -490
- package/kit/commands/rapido.md +35 -35
- package/kit/commands/reaplicar-patches.md +124 -124
- package/kit/commands/refactor-seguro.md +321 -321
- package/kit/commands/relatorio-sessao.md +19 -19
- package/kit/commands/remover-fase.md +31 -31
- package/kit/commands/remover-workspace.md +26 -26
- package/kit/commands/resumo-marco.md +50 -50
- package/kit/commands/retomar-trabalho.md +40 -40
- package/kit/commands/revisar-backlog.md +60 -60
- package/kit/commands/revisar-ui.md +32 -32
- package/kit/commands/revisar.md +37 -37
- package/kit/commands/saude.md +21 -21
- package/kit/commands/setup-notion.md +93 -93
- package/kit/commands/storytelling.md +179 -179
- package/kit/commands/sync-main.md +68 -68
- package/kit/commands/validar-fase.md +35 -35
- package/kit/commands/verificar-tarefas.md +44 -44
- package/kit/commands/verificar-trabalho.md +64 -64
- package/kit/file-manifest.json +82 -81
- package/kit/framework/bin/lib/commands.cjs +959 -959
- package/kit/framework/bin/lib/config.cjs +442 -442
- package/kit/framework/bin/lib/core.cjs +1230 -1230
- package/kit/framework/bin/lib/frontmatter.cjs +336 -336
- package/kit/framework/bin/lib/init.cjs +1442 -1442
- package/kit/framework/bin/lib/milestone.cjs +252 -252
- package/kit/framework/bin/lib/model-profiles.cjs +68 -68
- package/kit/framework/bin/lib/phase.cjs +888 -888
- package/kit/framework/bin/lib/profile-output.cjs +952 -952
- package/kit/framework/bin/lib/profile-pipeline.cjs +539 -539
- package/kit/framework/bin/lib/roadmap.cjs +329 -329
- package/kit/framework/bin/lib/security.cjs +382 -382
- package/kit/framework/bin/lib/state.cjs +1031 -1031
- package/kit/framework/bin/lib/template.cjs +222 -222
- package/kit/framework/bin/lib/uat.cjs +282 -282
- package/kit/framework/bin/lib/verify.cjs +888 -888
- package/kit/framework/bin/lib/workstream.cjs +491 -491
- package/kit/framework/bin/tools.cjs +918 -918
- package/kit/framework/commands/workstreams.md +63 -63
- package/kit/framework/references/checkpoints.md +778 -778
- package/kit/framework/references/continuation-format.md +249 -249
- package/kit/framework/references/decimal-phase-calculation.md +64 -64
- package/kit/framework/references/git-integration.md +295 -295
- package/kit/framework/references/git-planning-commit.md +38 -38
- package/kit/framework/references/model-profile-resolution.md +36 -36
- package/kit/framework/references/model-profiles.md +139 -139
- package/kit/framework/references/phase-argument-parsing.md +61 -61
- package/kit/framework/references/planning-config.md +202 -202
- package/kit/framework/references/questioning.md +162 -162
- package/kit/framework/references/tdd.md +263 -263
- package/kit/framework/references/ui-brand.md +160 -160
- package/kit/framework/references/user-profiling.md +657 -657
- package/kit/framework/references/verification-patterns.md +612 -612
- package/kit/framework/references/workstream-flag.md +58 -58
- package/kit/framework/templates/DEBUG.md +164 -164
- package/kit/framework/templates/UAT.md +265 -265
- package/kit/framework/templates/UI-SPEC.md +100 -100
- package/kit/framework/templates/VALIDATION.md +76 -76
- package/kit/framework/templates/claude-md.md +122 -122
- package/kit/framework/templates/codebase/architecture.md +185 -185
- package/kit/framework/templates/codebase/concerns.md +205 -205
- package/kit/framework/templates/codebase/conventions.md +204 -204
- package/kit/framework/templates/codebase/integrations.md +192 -192
- package/kit/framework/templates/codebase/stack.md +158 -158
- package/kit/framework/templates/codebase/structure.md +199 -199
- package/kit/framework/templates/codebase/testing.md +301 -301
- package/kit/framework/templates/config.json +44 -44
- package/kit/framework/templates/context.md +352 -352
- package/kit/framework/templates/continue-here.md +78 -78
- package/kit/framework/templates/copilot-instructions.md +7 -7
- package/kit/framework/templates/debug-subagent-prompt.md +91 -91
- package/kit/framework/templates/dev-preferences.md +20 -20
- package/kit/framework/templates/discovery.md +146 -146
- package/kit/framework/templates/discussion-log.md +63 -63
- package/kit/framework/templates/milestone-archive.md +123 -123
- package/kit/framework/templates/milestone.md +115 -115
- package/kit/framework/templates/phase-prompt.md +610 -610
- package/kit/framework/templates/planner-subagent-prompt.md +117 -117
- package/kit/framework/templates/project.md +186 -186
- package/kit/framework/templates/requirements.md +231 -231
- package/kit/framework/templates/research-project/ARCHITECTURE.md +204 -204
- package/kit/framework/templates/research-project/FEATURES.md +147 -147
- package/kit/framework/templates/research-project/PITFALLS.md +200 -200
- package/kit/framework/templates/research-project/STACK.md +120 -120
- package/kit/framework/templates/research-project/SUMMARY.md +170 -170
- package/kit/framework/templates/research.md +419 -419
- package/kit/framework/templates/retrospective.md +54 -54
- package/kit/framework/templates/roadmap.md +202 -202
- package/kit/framework/templates/state.md +176 -176
- package/kit/framework/templates/summary-complex.md +59 -59
- package/kit/framework/templates/summary-minimal.md +41 -41
- package/kit/framework/templates/summary-standard.md +48 -48
- package/kit/framework/templates/summary.md +209 -209
- package/kit/framework/templates/user-profile.md +146 -146
- package/kit/framework/templates/user-setup.md +256 -256
- package/kit/framework/templates/verification-report.md +258 -258
- package/kit/framework/workflows/add-phase.md +112 -112
- package/kit/framework/workflows/add-tests.md +351 -351
- package/kit/framework/workflows/add-todo.md +158 -158
- package/kit/framework/workflows/audit-milestone.md +340 -340
- package/kit/framework/workflows/audit-uat.md +109 -109
- package/kit/framework/workflows/autonomous.md +891 -891
- package/kit/framework/workflows/check-todos.md +177 -177
- package/kit/framework/workflows/cleanup.md +152 -152
- package/kit/framework/workflows/complete-milestone.md +696 -696
- package/kit/framework/workflows/diagnose-issues.md +231 -231
- package/kit/framework/workflows/discovery-phase.md +289 -289
- package/kit/framework/workflows/discuss-phase-assumptions.md +653 -653
- package/kit/framework/workflows/discuss-phase.md +784 -784
- package/kit/framework/workflows/do.md +104 -104
- package/kit/framework/workflows/execute-phase.md +838 -838
- package/kit/framework/workflows/execute-plan.md +510 -510
- package/kit/framework/workflows/fast.md +102 -102
- package/kit/framework/workflows/forensics.md +265 -265
- package/kit/framework/workflows/health.md +181 -181
- package/kit/framework/workflows/help.md +619 -619
- package/kit/framework/workflows/insert-phase.md +130 -130
- package/kit/framework/workflows/list-phase-assumptions.md +178 -178
- package/kit/framework/workflows/list-workspaces.md +56 -56
- package/kit/framework/workflows/manager.md +362 -362
- package/kit/framework/workflows/map-codebase.md +377 -377
- package/kit/framework/workflows/milestone-summary.md +223 -223
- package/kit/framework/workflows/new-milestone.md +486 -486
- package/kit/framework/workflows/new-project.md +1159 -1159
- package/kit/framework/workflows/new-workspace.md +237 -237
- package/kit/framework/workflows/next.md +97 -97
- package/kit/framework/workflows/node-repair.md +92 -92
- package/kit/framework/workflows/note.md +156 -156
- package/kit/framework/workflows/pause-work.md +176 -176
- package/kit/framework/workflows/plan-milestone-gaps.md +273 -273
- package/kit/framework/workflows/plan-phase.md +765 -765
- package/kit/framework/workflows/plant-seed.md +169 -169
- package/kit/framework/workflows/pr-branch.md +129 -129
- package/kit/framework/workflows/profile-user.md +450 -450
- package/kit/framework/workflows/progress.md +507 -507
- package/kit/framework/workflows/quick.md +757 -757
- package/kit/framework/workflows/remove-phase.md +155 -155
- package/kit/framework/workflows/remove-workspace.md +90 -90
- package/kit/framework/workflows/research-phase.md +82 -82
- package/kit/framework/workflows/resume-project.md +326 -326
- package/kit/framework/workflows/review.md +228 -228
- package/kit/framework/workflows/session-report.md +146 -146
- package/kit/framework/workflows/settings.md +283 -283
- package/kit/framework/workflows/ship.md +228 -228
- package/kit/framework/workflows/stats.md +60 -60
- package/kit/framework/workflows/transition.md +671 -671
- package/kit/framework/workflows/ui-phase.md +302 -302
- package/kit/framework/workflows/ui-review.md +165 -165
- package/kit/framework/workflows/update.md +323 -323
- package/kit/framework/workflows/validate-phase.md +174 -174
- package/kit/framework/workflows/verify-phase.md +252 -252
- package/kit/framework/workflows/verify-work.md +637 -637
- package/kit/hooks/check-update.js +118 -118
- package/kit/hooks/context-monitor.js +163 -163
- package/kit/hooks/kit-attribution-reminder.cjs +29 -50
- package/kit/hooks/kit-router.cjs +137 -0
- package/kit/hooks/prompt-guard.js +103 -103
- package/kit/hooks/statusline.js +125 -125
- package/kit/hooks/workflow-guard.js +101 -101
- package/kit/settings.json +45 -45
- package/kit/skills/ai-prompt-characterization/SKILL.md +335 -335
- package/kit/skills/armadilhas-sistemas-distribuidos/SKILL.md +447 -447
- package/kit/skills/audit-log-multi-tenant/SKILL.md +340 -340
- package/kit/skills/b2b-saas-architecture/SKILL.md +300 -300
- package/kit/skills/consistencia-leitura-replica/SKILL.md +385 -385
- package/kit/skills/crm-lead-pipeline-patterns/SKILL.md +343 -343
- package/kit/skills/escolha-modelo-consistencia/SKILL.md +494 -494
- package/kit/skills/evolucao-schema-compativel/SKILL.md +448 -448
- package/kit/skills/evolution-go-whatsapp-integration/SKILL.md +322 -322
- package/kit/skills/example-skill/SKILL.md +42 -42
- package/kit/skills/legacy-api-only-applications/SKILL.md +358 -358
- package/kit/skills/legacy-characterization-tests/SKILL.md +330 -330
- package/kit/skills/legacy-effect-analysis/SKILL.md +331 -331
- package/kit/skills/legacy-extract-class/SKILL.md +203 -203
- package/kit/skills/legacy-programming-by-difference/SKILL.md +252 -252
- package/kit/skills/legacy-seams-and-test-harness/SKILL.md +460 -460
- package/kit/skills/legacy-shotgun-surgery/SKILL.md +286 -286
- package/kit/skills/legacy-sprout-wrap-techniques/SKILL.md +434 -434
- package/kit/skills/legacy-storytelling-naked-crc/SKILL.md +270 -270
- package/kit/skills/lgpd-multi-tenant-compliance/SKILL.md +340 -340
- package/kit/skills/member-invite-flow/SKILL.md +305 -305
- package/kit/skills/member-management-react-shadcn/SKILL.md +328 -328
- package/kit/skills/multi-tenant-performance-scaling/SKILL.md +316 -316
- package/kit/skills/multi-tenant-rls-hierarchy/SKILL.md +342 -342
- package/kit/skills/org-onboarding-flow/SKILL.md +257 -257
- package/kit/skills/org-switcher-react-pattern/SKILL.md +349 -349
- package/kit/skills/permission-gate-react-pattern/SKILL.md +271 -271
- package/kit/skills/postgres-isolamento-concorrencia/SKILL.md +552 -552
- package/kit/skills/pre-refactor-characterization/SKILL.md +421 -421
- package/kit/skills/rbac-permissions-matrix-supabase/SKILL.md +338 -338
- package/kit/skills/streams-eventos-cdc/SKILL.md +711 -711
- package/kit/skills/supabase-branching-workflow/SKILL.md +544 -544
- package/kit/skills/supabase-ci-cd-github-actions/SKILL.md +880 -880
- package/kit/skills/supabase-column-level-security/SKILL.md +426 -426
- package/kit/skills/supabase-config-toml-remotes/SKILL.md +807 -807
- package/kit/skills/supabase-custom-claims-rbac/SKILL.md +472 -472
- package/kit/skills/supabase-edge-functions/SKILL.md +1 -1
- package/kit/skills/supabase-edge-functions-auth/SKILL.md +1 -1
- package/kit/skills/supabase-edge-functions-limits/SKILL.md +1 -1
- package/kit/skills/supabase-edge-functions-mcp-server/SKILL.md +1 -1
- package/kit/skills/supabase-edge-functions-testing/SKILL.md +1 -1
- package/kit/skills/supabase-edge-runtime-builtins/SKILL.md +1 -1
- package/kit/skills/supabase-migration-repair/SKILL.md +823 -823
- package/kit/skills/supabase-migrations/SKILL.md +297 -297
- package/kit/skills/supabase-pgtap-testing/SKILL.md +1053 -1053
- package/kit/skills/supabase-postgres-roles/SKILL.md +392 -392
- package/kit/skills/supabase-realtime/SKILL.md +460 -460
- package/kit/skills/supabase-rls-defense-in-depth/SKILL.md +418 -418
- package/kit/skills/supabase-rls-policies/SKILL.md +635 -635
- package/kit/skills/super-admin-platform-pattern/SKILL.md +326 -326
- package/kit/skills/tenant-quente-mitigacao/SKILL.md +605 -605
- package/kit/skills/whatsapp-conversation-state-machine/SKILL.md +287 -287
- package/package.json +1 -1
- package/src/core/kit.js +216 -216
- package/src/core/reflect.js +247 -247
- package/src/core/reverse-sync.js +372 -372
- package/src/core/sync.js +437 -418
- package/src/core/watch.js +121 -121
- 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>
|