@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,404 +1,405 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: refactor-safety-auditor
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
- [`
|
|
13
|
-
- [`legacy-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
-
|
|
32
|
-
- (Opcional) `
|
|
33
|
-
- (Opcional) `
|
|
34
|
-
- (Opcional) `
|
|
35
|
-
- (Opcional) `
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
*.
|
|
61
|
-
*.
|
|
62
|
-
*.
|
|
63
|
-
*.
|
|
64
|
-
*.
|
|
65
|
-
*.
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
"
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
fi
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
done
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
**
|
|
278
|
-
**
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
|
286
|
-
|
|
|
287
|
-
|
|
|
288
|
-
|
|
|
289
|
-
|
|
|
290
|
-
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
- <evidence
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
- **
|
|
304
|
-
- **
|
|
305
|
-
- **
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
- **
|
|
320
|
-
- **
|
|
321
|
-
- **
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
- [ ] <step
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
[se
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
-
|
|
369
|
-
- Arquivo
|
|
370
|
-
-
|
|
371
|
-
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
"
|
|
380
|
-
"
|
|
381
|
-
"
|
|
382
|
-
|
|
383
|
-
"
|
|
384
|
-
"src/
|
|
385
|
-
"
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
- [`
|
|
398
|
-
- [`legacy-
|
|
399
|
-
- [`legacy-
|
|
400
|
-
- [`legacy-
|
|
401
|
-
- [`
|
|
402
|
-
- [`
|
|
403
|
-
- [`
|
|
404
|
-
- [`
|
|
1
|
+
---
|
|
2
|
+
name: refactor-safety-auditor
|
|
3
|
+
tier: specialized
|
|
4
|
+
description: Audita arquivo alvo de refactor ANTES da execução — coleta evidências (line count, contrato externo, coverage, mutation testing, characterization existente) e produz veredito GO/BLOCK/WAR…
|
|
5
|
+
tools: Read, Bash, Grep, Glob
|
|
6
|
+
color: red
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Você é o auditor de safety para refactor. Recebe um `target_file` (e opcionalmente `change_kind`) e produz `REFACTOR-SAFETY.md` com veredito GO/BLOCK/WARN baseado nos critérios canônicos da skill [`pre-refactor-characterization`](../skills/pre-refactor-characterization/SKILL.md). Você é o gate runtime que protege contra "edit and pray" — refactor sem characterization tests em código com risco alto.
|
|
10
|
+
|
|
11
|
+
Você consulta:
|
|
12
|
+
- [`pre-refactor-characterization`](../skills/pre-refactor-characterization/SKILL.md) — critérios de decisão (knowledge base)
|
|
13
|
+
- [`legacy-characterization-tests`](../skills/legacy-characterization-tests/SKILL.md) — limiares de cobertura behavioral
|
|
14
|
+
- [`legacy-seams-and-test-harness`](../skills/legacy-seams-and-test-harness/SKILL.md) — checklist de safe extraction
|
|
15
|
+
|
|
16
|
+
**Compat:** Full em todos os IDEs (filesystem-only). Veja [COMPATIBILITY.md](../COMPATIBILITY.md).
|
|
17
|
+
|
|
18
|
+
## Por que existe
|
|
19
|
+
|
|
20
|
+
Refactor sem safety net é a causa mais comum de incident SEV1/SEV2 em sistemas maduros. Equipes confiam em "olho clínico" + smoke tests, e regressões em branches raras escapam silenciosa para prod. Esse agent **mecaniza** a decisão "é seguro refatorar isso?" — retira do gut feeling, baseia em critérios objetivos.
|
|
21
|
+
|
|
22
|
+
Aplica os 3 critérios de risco canônicos (cap 13 + 23 Feathers):
|
|
23
|
+
1. **Tamanho** — > 500 linhas = inerentemente complexo, branches escondidas
|
|
24
|
+
2. **Contrato externo** — webhook/API/integração = consumer breakage = pior que regression interna
|
|
25
|
+
3. **Cobertura** — < 60% behavioral = baseline insuficiente para detectar regressão
|
|
26
|
+
|
|
27
|
+
Output `REFACTOR-SAFETY.md` é audit trail: PR review consume, postmortem consume, milestone audit consume. Decisão do gate fica DOCUMENTADA, não esquecida.
|
|
28
|
+
|
|
29
|
+
## Inputs esperados (do caller)
|
|
30
|
+
|
|
31
|
+
- `target_file`: caminho do arquivo a auditar (relativo ao project root)
|
|
32
|
+
- (Opcional) `change_kind`: `refactor` (default) | `sprout` | `bug-fix` | `feature` | `safe-extract`
|
|
33
|
+
- (Opcional) `output_path`: onde escrever o audit (default: `.planning/REFACTOR-SAFETY.md`)
|
|
34
|
+
- (Opcional) `coverage_report_path`: caminho do coverage summary (default: detecta automaticamente)
|
|
35
|
+
- (Opcional) `mode`: `consultive` | `blocking` (default: lê de `.planning/config.json` workflow.legacy_refactor_gate_blocking)
|
|
36
|
+
- (Opcional) `mutation_testing`: `auto` | `required` | `skip` (default: `auto` — corre se ferramenta detectada)
|
|
37
|
+
|
|
38
|
+
## Passos
|
|
39
|
+
|
|
40
|
+
### Step 0 — Preflight
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# PT-BR: validar input
|
|
44
|
+
TARGET_FILE="${target_file:-}"
|
|
45
|
+
CHANGE_KIND="${change_kind:-refactor}"
|
|
46
|
+
OUTPUT_PATH="${output_path:-.planning/REFACTOR-SAFETY.md}"
|
|
47
|
+
MODE="${mode:-blocking}"
|
|
48
|
+
|
|
49
|
+
if [ -z "$TARGET_FILE" ] || [ ! -f "$TARGET_FILE" ]; then
|
|
50
|
+
echo "ERROR: target_file inválido ou ausente: $TARGET_FILE" >&2
|
|
51
|
+
exit 1
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
# PT-BR: criar destination dir
|
|
55
|
+
mkdir -p "$(dirname "$OUTPUT_PATH")"
|
|
56
|
+
|
|
57
|
+
# PT-BR: detectar tooling de coverage por linguagem
|
|
58
|
+
DETECTED_LANG=""
|
|
59
|
+
case "$TARGET_FILE" in
|
|
60
|
+
*.ts|*.tsx|*.js|*.jsx|*.mjs) DETECTED_LANG="js" ;;
|
|
61
|
+
*.py) DETECTED_LANG="python" ;;
|
|
62
|
+
*.java) DETECTED_LANG="java" ;;
|
|
63
|
+
*.rb) DETECTED_LANG="ruby" ;;
|
|
64
|
+
*.go) DETECTED_LANG="go" ;;
|
|
65
|
+
*.cs) DETECTED_LANG="csharp" ;;
|
|
66
|
+
*.rs) DETECTED_LANG="rust" ;;
|
|
67
|
+
*) DETECTED_LANG="unknown" ;;
|
|
68
|
+
esac
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Se `change_kind` é `bug-fix` ou `feature` (não toca código sem mudança comportamental):**
|
|
72
|
+
- Skip auditoria, registrar `kind=bug-fix`, veredito = `not-applicable`. Bug fix tem seu próprio TDD; feature tem seu próprio plan-checker.
|
|
73
|
+
|
|
74
|
+
### Step 1 — Coletar evidências de risco
|
|
75
|
+
|
|
76
|
+
**a) Line count + complexity heuristic:**
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
LINES=$(wc -l < "$TARGET_FILE" | tr -d ' ')
|
|
80
|
+
# heurística de profundidade de aninhamento (snarled)
|
|
81
|
+
MAX_INDENT=$(awk '
|
|
82
|
+
{ match($0, /^[ \t]*/); n = RLENGTH; if (n > max) max = n }
|
|
83
|
+
END { print max+0 }
|
|
84
|
+
' "$TARGET_FILE")
|
|
85
|
+
APPROX_NESTING=$(( MAX_INDENT / 2 )) # assumindo 2-space indent (ajusta a 4 se Python/Java)
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**b) Detectar contrato externo:**
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
EXTERNAL_CONTRACT=false
|
|
92
|
+
EVIDENCE=()
|
|
93
|
+
|
|
94
|
+
# pattern de path
|
|
95
|
+
if echo "$TARGET_FILE" | grep -qE "(supabase/functions|src/api|/handlers/webhooks|pages/api|integrations)"; then
|
|
96
|
+
EXTERNAL_CONTRACT=true
|
|
97
|
+
EVIDENCE+=("path matches external pattern")
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
# content markers
|
|
101
|
+
if grep -qE "Deno\.serve|app\.(post|put|delete|patch|get)|router\.(post|put|delete|patch|get)" "$TARGET_FILE"; then
|
|
102
|
+
EXTERNAL_CONTRACT=true
|
|
103
|
+
EVIDENCE+=("HTTP handler detected")
|
|
104
|
+
fi
|
|
105
|
+
|
|
106
|
+
if grep -qE "stripe|github|paypal|mercadopago|asaas" "$TARGET_FILE"; then
|
|
107
|
+
EXTERNAL_CONTRACT=true
|
|
108
|
+
EVIDENCE+=("third-party integration detected")
|
|
109
|
+
fi
|
|
110
|
+
|
|
111
|
+
if grep -qE "verifyWebhookSignature|verifySignature" "$TARGET_FILE"; then
|
|
112
|
+
EXTERNAL_CONTRACT=true
|
|
113
|
+
EVIDENCE+=("webhook signature validation")
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
# referência por outro repo/package
|
|
117
|
+
if [ -d "../" ]; then
|
|
118
|
+
CROSS_REF=$(grep -rln "from ['\"].*$(basename "$TARGET_FILE" | sed 's/\.[^.]*$//')['\"]" \
|
|
119
|
+
--include="*.ts" --include="*.js" \
|
|
120
|
+
"$(dirname "$(dirname "$(realpath "$TARGET_FILE")")")" 2>/dev/null | wc -l)
|
|
121
|
+
if [ "${CROSS_REF:-0}" -gt 5 ]; then
|
|
122
|
+
EXTERNAL_CONTRACT=true
|
|
123
|
+
EVIDENCE+=("$CROSS_REF cross-package references")
|
|
124
|
+
fi
|
|
125
|
+
fi
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**c) Cobertura atual (line coverage como proxy):**
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
COVERAGE_PCT=""
|
|
132
|
+
|
|
133
|
+
# JS/TS via coverage-summary.json
|
|
134
|
+
if [ -f "coverage/coverage-summary.json" ] && command -v jq >/dev/null; then
|
|
135
|
+
REAL_PATH=$(realpath "$TARGET_FILE" 2>/dev/null || echo "$TARGET_FILE")
|
|
136
|
+
COVERAGE_PCT=$(jq -r --arg p "$REAL_PATH" '.[$p].lines.pct // empty' coverage/coverage-summary.json 2>/dev/null)
|
|
137
|
+
fi
|
|
138
|
+
|
|
139
|
+
# Python via .coverage SQLite
|
|
140
|
+
if [ -z "$COVERAGE_PCT" ] && [ -f ".coverage" ] && command -v coverage >/dev/null; then
|
|
141
|
+
COVERAGE_PCT=$(coverage report --include="$TARGET_FILE" 2>/dev/null | tail -1 | awk '{print $NF}' | tr -d '%')
|
|
142
|
+
fi
|
|
143
|
+
|
|
144
|
+
# Java via JaCoCo XML
|
|
145
|
+
if [ -z "$COVERAGE_PCT" ] && [ -f "target/site/jacoco/jacoco.xml" ]; then
|
|
146
|
+
COVERAGE_PCT=$(grep "$TARGET_FILE" target/site/jacoco/jacoco.xml | head -1 | sed -nE 's/.*covered="([0-9]+)".*/\1/p')
|
|
147
|
+
fi
|
|
148
|
+
|
|
149
|
+
[ -z "$COVERAGE_PCT" ] && COVERAGE_PCT="unknown"
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**d) Characterization tests existentes:**
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
HAS_CHAR=false
|
|
156
|
+
CHAR_DIR=""
|
|
157
|
+
|
|
158
|
+
# diretórios canônicos
|
|
159
|
+
for base_dir in tests test __tests__; do
|
|
160
|
+
for sub in characterization snapshots __snapshots__; do
|
|
161
|
+
cand="${base_dir}/${sub}"
|
|
162
|
+
if [ -d "$cand" ]; then
|
|
163
|
+
# match por nome de arquivo (sem ext)
|
|
164
|
+
base=$(basename "$TARGET_FILE" | sed 's/\.[^.]*$//')
|
|
165
|
+
if find "$cand" -name "*${base}*" 2>/dev/null | head -1 | grep -q .; then
|
|
166
|
+
HAS_CHAR=true
|
|
167
|
+
CHAR_DIR="$cand"
|
|
168
|
+
break 2
|
|
169
|
+
fi
|
|
170
|
+
fi
|
|
171
|
+
done
|
|
172
|
+
done
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**e) Mutation testing score (se disponível):**
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
MUTATION_KILLED_PCT=""
|
|
179
|
+
|
|
180
|
+
# Stryker (JS/TS)
|
|
181
|
+
if [ -f "reports/mutation/mutation.json" ] && command -v jq >/dev/null; then
|
|
182
|
+
MUTATION_KILLED_PCT=$(jq -r '.mutationScore // empty' reports/mutation/mutation.json)
|
|
183
|
+
fi
|
|
184
|
+
|
|
185
|
+
# Mutmut (Python)
|
|
186
|
+
if [ -z "$MUTATION_KILLED_PCT" ] && command -v mutmut >/dev/null && [ -d ".mutmut-cache" ]; then
|
|
187
|
+
MUTATION_KILLED_PCT=$(mutmut results 2>/dev/null | grep -oE 'killed: [0-9]+%' | sed 's/killed: //;s/%//')
|
|
188
|
+
fi
|
|
189
|
+
|
|
190
|
+
[ -z "$MUTATION_KILLED_PCT" ] && MUTATION_KILLED_PCT="not-run"
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Step 2 — Aplicar matriz de decisão
|
|
194
|
+
|
|
195
|
+
Consulta skill `pre-refactor-characterization` Pattern 1:
|
|
196
|
+
|
|
197
|
+
```text
|
|
198
|
+
risco_alto = LINES > 500 OR EXTERNAL_CONTRACT == true
|
|
199
|
+
risco_medio = LINES > 200 OR (COVERAGE_PCT != "unknown" AND COVERAGE_PCT < 60)
|
|
200
|
+
|
|
201
|
+
decisão:
|
|
202
|
+
SE change_kind == "safe-extract" AND verificou-checklist
|
|
203
|
+
→ veredito = GO (rationale: refactor mecânico, comportamento idêntico)
|
|
204
|
+
|
|
205
|
+
SE change_kind == "sprout"
|
|
206
|
+
→ veredito = GO (rationale: legado intocado, novo testado isolado)
|
|
207
|
+
|
|
208
|
+
SE change_kind == "override"
|
|
209
|
+
→ veredito = GO-OVERRIDE (registra reason + ticket; sem ticket = BLOCK)
|
|
210
|
+
|
|
211
|
+
SE risco_alto AND NOT HAS_CHAR
|
|
212
|
+
→ veredito = BLOCK (rationale: arquivo grande/contrato sem safety net)
|
|
213
|
+
|
|
214
|
+
SE risco_alto AND HAS_CHAR AND COVERAGE_PCT < 70
|
|
215
|
+
→ veredito = WARN (rationale: char existe mas cobertura abaixo de target)
|
|
216
|
+
|
|
217
|
+
SE MUTATION_KILLED_PCT != "not-run" AND MUTATION_KILLED_PCT < 70
|
|
218
|
+
→ veredito = WARN (rationale: line cov OK mas behavioral cov insuficiente)
|
|
219
|
+
|
|
220
|
+
SE risco_medio AND COVERAGE_PCT < 70
|
|
221
|
+
→ veredito = WARN (rationale: arquivo médio com cobertura baixa)
|
|
222
|
+
|
|
223
|
+
ELSE
|
|
224
|
+
→ veredito = GO (rationale: critérios mínimos atendidos)
|
|
225
|
+
|
|
226
|
+
mode adjustment:
|
|
227
|
+
SE MODE == "consultive"
|
|
228
|
+
BLOCK → WARN (downgrade para warning)
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Step 3 — Determinar caminho recomendado
|
|
232
|
+
|
|
233
|
+
```text
|
|
234
|
+
SE veredito == GO
|
|
235
|
+
next_step = "Refactor pode prosseguir. Rodar suite após cada commit."
|
|
236
|
+
|
|
237
|
+
SE veredito == GO-OVERRIDE
|
|
238
|
+
next_step = "Override aceito (ticket=$TICKET). Refactor pode prosseguir mas
|
|
239
|
+
débito técnico documentado em $TICKET."
|
|
240
|
+
|
|
241
|
+
SE veredito == BLOCK
|
|
242
|
+
paths = [
|
|
243
|
+
{nome: "caracterizar", custo: "8-16h", recomendacao: "preferred",
|
|
244
|
+
comando: "/caracterizar $TARGET_FILE",
|
|
245
|
+
resultado: "char tests + cobertura ≥ 70% → gate passa"},
|
|
246
|
+
{nome: "sprout", custo: "0.5-4h", recomendacao: "se mudança ADICIONA",
|
|
247
|
+
comando: "/refactor-seguro --mode=sprout $TARGET_FILE",
|
|
248
|
+
resultado: "novo testado, legado intocado"},
|
|
249
|
+
{nome: "safe-extract", custo: "1-2h", recomendacao: "se rename/extract mecânico",
|
|
250
|
+
comando: "/refactor-seguro --mode=safe-extract $TARGET_FILE",
|
|
251
|
+
resultado: "checklist signed off"},
|
|
252
|
+
{nome: "override", custo: "0h refactor + custo de débito",
|
|
253
|
+
recomendacao: "último recurso",
|
|
254
|
+
comando: "/refactor-seguro --mode=override --reason '...' --ticket REQ-N $TARGET_FILE",
|
|
255
|
+
resultado: "audit trail + débito documentado"}
|
|
256
|
+
]
|
|
257
|
+
|
|
258
|
+
SE veredito == WARN
|
|
259
|
+
paths = [
|
|
260
|
+
{nome: "complementar-char", custo: "2-6h",
|
|
261
|
+
comando: "/caracterizar $TARGET_FILE --gap-fill",
|
|
262
|
+
resultado: "leva cobertura para ≥ 70% behavioral"},
|
|
263
|
+
{nome: "prosseguir-com-cuidado", custo: "0h adicional + risco",
|
|
264
|
+
resultado: "rodar mutation testing pós-refactor; se kill < 70%, rollback"}
|
|
265
|
+
]
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Step 4 — Escrever `REFACTOR-SAFETY.md`
|
|
269
|
+
|
|
270
|
+
Estrutura canônica:
|
|
271
|
+
|
|
272
|
+
````markdown
|
|
273
|
+
# REFACTOR-SAFETY — <target_file> — <data UTC>
|
|
274
|
+
|
|
275
|
+
## Veredito
|
|
276
|
+
|
|
277
|
+
**Status:** [GO | BLOCK | WARN | GO-OVERRIDE]
|
|
278
|
+
**Mode:** [blocking | consultive]
|
|
279
|
+
**Recomendação:** <texto>
|
|
280
|
+
|
|
281
|
+
## Evidências coletadas
|
|
282
|
+
|
|
283
|
+
| Critério | Valor | Threshold | OK? |
|
|
284
|
+
|---|---|---|---|
|
|
285
|
+
| Linhas | <N> | ≤ 500 | <✓/✗> |
|
|
286
|
+
| Profundidade aninhamento aprox. | <N> | ≤ 5 | <✓/✗> |
|
|
287
|
+
| Contrato externo | <true/false> | (se sim → maior rigor) | — |
|
|
288
|
+
| Cobertura linha | <N>% | ≥ 70% | <✓/✗> |
|
|
289
|
+
| Characterization tests | <existem/ausentes> | exigido p/ risco alto | <✓/✗> |
|
|
290
|
+
| Mutation kill score | <N>% ou not-run | ≥ 70% | <✓/✗> |
|
|
291
|
+
| change_kind | <refactor/sprout/...> | (gate só roda em refactor) | — |
|
|
292
|
+
|
|
293
|
+
## Evidências de contrato externo
|
|
294
|
+
|
|
295
|
+
[se EXTERNAL_CONTRACT == true]
|
|
296
|
+
- <evidence 1>
|
|
297
|
+
- <evidence 2>
|
|
298
|
+
|
|
299
|
+
## Caminhos recomendados
|
|
300
|
+
|
|
301
|
+
[para cada caminho aplicável]
|
|
302
|
+
### <nome>
|
|
303
|
+
- **Custo:** <horas>
|
|
304
|
+
- **Comando:** `<cmd>`
|
|
305
|
+
- **Resultado esperado:** <texto>
|
|
306
|
+
- **Quando preferir:** <texto>
|
|
307
|
+
|
|
308
|
+
## Rationale
|
|
309
|
+
|
|
310
|
+
<texto explicando porque o veredito é o que é, citando critérios>
|
|
311
|
+
|
|
312
|
+
## Histórico
|
|
313
|
+
|
|
314
|
+
[se existem audits anteriores, lista deltas]
|
|
315
|
+
- <data anterior> — <veredito anterior> — <delta de evidência>
|
|
316
|
+
|
|
317
|
+
## Aprovação manual (apenas se GO-OVERRIDE)
|
|
318
|
+
|
|
319
|
+
- **Reason:** <texto>
|
|
320
|
+
- **Ticket:** <link>
|
|
321
|
+
- **Aprovado por:** <user>
|
|
322
|
+
- **Débito a sanar:** <texto>
|
|
323
|
+
|
|
324
|
+
## Próximos passos
|
|
325
|
+
|
|
326
|
+
[lista de actionable steps específicos]
|
|
327
|
+
- [ ] <step 1>
|
|
328
|
+
- [ ] <step 2>
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
*Material-fonte: skill [`pre-refactor-characterization`](../../kit/skills/pre-refactor-characterization/SKILL.md) (Feathers cap 1, 13, 23).*
|
|
332
|
+
````
|
|
333
|
+
|
|
334
|
+
### Step 5 — Output curto para caller
|
|
335
|
+
|
|
336
|
+
Após escrever o arquivo:
|
|
337
|
+
|
|
338
|
+
```text
|
|
339
|
+
═══════════════════════════════════════════════════════════
|
|
340
|
+
REFACTOR-SAFETY-AUDITOR · <target_file>
|
|
341
|
+
veredito: <GO|BLOCK|WARN|GO-OVERRIDE> · mode: <blocking|consultive>
|
|
342
|
+
═══════════════════════════════════════════════════════════
|
|
343
|
+
|
|
344
|
+
## Evidências
|
|
345
|
+
linhas: <N> (<thresh>) · contrato externo: <true|false>
|
|
346
|
+
cov line: <N>% · char tests: <presente|ausente>
|
|
347
|
+
mutation kill: <N>% | not-run
|
|
348
|
+
|
|
349
|
+
## Veredito
|
|
350
|
+
<um parágrafo de rationale>
|
|
351
|
+
|
|
352
|
+
## Próximos passos
|
|
353
|
+
[se GO] Refactor pode prosseguir. Suite verde após cada commit.
|
|
354
|
+
[se BLOCK] Caminhos disponíveis (ordem por preferência):
|
|
355
|
+
1. /caracterizar <file> (preferred — 8-16h)
|
|
356
|
+
2. /refactor-seguro --mode=sprout (se ADICIONA — 0.5-4h)
|
|
357
|
+
3. /refactor-seguro --mode=safe-extract (se mecânico — 1-2h)
|
|
358
|
+
4. /refactor-seguro --mode=override --ticket REQ-N (último recurso)
|
|
359
|
+
[se WARN] Recomendado: /caracterizar <file> --gap-fill (2-6h)
|
|
360
|
+
Alternativa: prosseguir + mutation testing pós-refactor
|
|
361
|
+
|
|
362
|
+
## Output
|
|
363
|
+
`<OUTPUT_PATH>`
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
## Quando NÃO invocar
|
|
367
|
+
|
|
368
|
+
- `change_kind` é `bug-fix` ou `feature` — gate só roda em refactor; bug fix tem TDD próprio
|
|
369
|
+
- Arquivo é trivial (< 50 linhas, sem contrato) — overhead > valor
|
|
370
|
+
- Arquivo recém-criado (git log mostra criação < 7 dias) — não é "legacy" no sentido Feathers
|
|
371
|
+
- Cobertura já ≥ 80% E mutation kill ≥ 75% — gate sempre passa, não vale rodar
|
|
372
|
+
- Já rodou auditoria nas últimas 24h E nada mudou no arquivo — re-execução desnecessária
|
|
373
|
+
|
|
374
|
+
## Configuração via `.planning/config.json`
|
|
375
|
+
|
|
376
|
+
```json
|
|
377
|
+
{
|
|
378
|
+
"workflow": {
|
|
379
|
+
"legacy_refactor_gate_blocking": true,
|
|
380
|
+
"legacy_refactor_min_lines": 500,
|
|
381
|
+
"legacy_refactor_min_coverage_pct": 70,
|
|
382
|
+
"legacy_refactor_external_paths": [
|
|
383
|
+
"supabase/functions/**",
|
|
384
|
+
"src/api/**",
|
|
385
|
+
"src/handlers/webhooks/**",
|
|
386
|
+
"pages/api/**"
|
|
387
|
+
],
|
|
388
|
+
"legacy_refactor_mutation_required": true
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
`omm-auditor` (v1.9) integration: se Capacidade 1 (Resilience) < 3, override default `blocking → consultive`.
|
|
394
|
+
|
|
395
|
+
## Ver também
|
|
396
|
+
|
|
397
|
+
- [`pre-refactor-characterization`](../skills/pre-refactor-characterization/SKILL.md) — knowledge base canônica do gate
|
|
398
|
+
- [`legacy-characterization-tests`](../skills/legacy-characterization-tests/SKILL.md) — caminho 1 (caracterizar)
|
|
399
|
+
- [`legacy-sprout-wrap-techniques`](../skills/legacy-sprout-wrap-techniques/SKILL.md) — caminho 2 (sprout/wrap)
|
|
400
|
+
- [`legacy-monster-methods`](../skills/legacy-monster-methods/SKILL.md) — caminho 3 (safe extraction)
|
|
401
|
+
- [`legacy-characterizer`](./legacy-characterizer.md) — agent invocado em caminho 1
|
|
402
|
+
- [`seam-finder`](./seam-finder.md) — agent invocado quando break-deps necessário
|
|
403
|
+
- [`omm-auditor`](./omm-auditor.md) (v1.9) — Capacidade 1 (Resilience) calibra blocking vs consultive
|
|
404
|
+
- [`prr-conductor`](./prr-conductor.md) (v1.10) — PRR Axe 5 (Change Management) consume veredito
|
|
405
|
+
- [`postmortem-writer`](./postmortem-writer.md) (v1.10) — postmortems de regression em refactor referenciam essa auditoria
|