@polymorphism-tech/morph-spec 8.46.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/CLAUDE.md +53 -44
  2. package/README.md +3 -4
  3. package/bin/morph-spec.js +38 -55
  4. package/bin/validate.js +5 -134
  5. package/claude-plugin.json +1 -1
  6. package/docs/CHEATSHEET.md +2 -2
  7. package/docs/QUICKSTART.md +1 -1
  8. package/framework/CLAUDE.md +41 -101
  9. package/framework/MORPH.md +95 -252
  10. package/framework/agents.json +75 -18
  11. package/framework/commands/create-umbraco-lp.md +2 -0
  12. package/framework/commands/migrate-lp-to-umbraco.md +2 -0
  13. package/framework/commands/morph-apply.md +5 -28
  14. package/framework/commands/morph-archive.md +2 -2
  15. package/framework/commands/morph-hotfix.md +8 -8
  16. package/framework/commands/morph-infra.md +17 -203
  17. package/framework/commands/morph-media.md +3 -0
  18. package/framework/commands/morph-preflight.md +7 -31
  19. package/framework/commands/morph-proposal.md +2 -50
  20. package/framework/commands/morph-status.md +3 -3
  21. package/framework/commands/morph-troubleshoot.md +2 -14
  22. package/framework/docs/CLI.md +585 -286
  23. package/framework/evals/review-checklist.md +82 -41
  24. package/framework/hooks/README.md +10 -11
  25. package/framework/hooks/claude-code/core/comment-guard.js +1 -1
  26. package/framework/hooks/claude-code/core/denylist.json +33 -3
  27. package/framework/hooks/claude-code/core/enforce-phase-writes.js +16 -20
  28. package/framework/hooks/claude-code/core/gate-guard.js +2 -11
  29. package/framework/hooks/claude-code/core/pre-bash-denylist.js +38 -0
  30. package/framework/hooks/claude-code/core/protect-spec-files.js +30 -242
  31. package/framework/hooks/claude-code/core/state-sync.js +17 -19
  32. package/framework/hooks/claude-code/core/telemetry-log.js +3 -3
  33. package/framework/hooks/claude-code/core/validate-completion.js +33 -97
  34. package/framework/hooks/claude-code/core/warn-bash-source-write.js +31 -0
  35. package/framework/hooks/claude-code/core/worktree-context.js +5 -4
  36. package/framework/hooks/claude-code/statusline.py +55 -41
  37. package/framework/hooks/package.json +3 -0
  38. package/framework/hooks/shared/activity-logger.js +1 -1
  39. package/framework/hooks/shared/build-check.js +10 -6
  40. package/framework/hooks/shared/command-tokens.js +169 -0
  41. package/framework/hooks/shared/comment-rules.js +1 -1
  42. package/framework/hooks/shared/comment-scanner.js +10 -23
  43. package/framework/hooks/shared/comment-stripper.js +1 -1
  44. package/framework/hooks/shared/e2e-check.js +67 -31
  45. package/framework/hooks/shared/errata.js +72 -0
  46. package/framework/hooks/shared/feature-locator.js +1 -1
  47. package/framework/hooks/shared/frontend-locations.js +6 -0
  48. package/framework/hooks/shared/gate-question.js +18 -0
  49. package/framework/hooks/shared/phase-utils.js +15 -32
  50. package/framework/hooks/shared/slice-progress.js +118 -0
  51. package/framework/hooks/shared/spawn-command.js +23 -0
  52. package/framework/hooks/shared/state-reader.js +61 -87
  53. package/framework/hooks/shared/state-writer.js +3 -3
  54. package/framework/mcp/registry.json +3 -4
  55. package/framework/phases.json +23 -39
  56. package/framework/rules/ai-agents-standards.md +18 -16
  57. package/framework/rules/asaas-standards.md +3 -1
  58. package/framework/rules/csharp-standards.md +10 -8
  59. package/framework/rules/data-standards.md +5 -5
  60. package/framework/rules/dotnet-templates.md +1 -1
  61. package/framework/rules/frontend-standards.md +4 -2
  62. package/framework/rules/gsap-standards.md +10 -5
  63. package/framework/rules/hangfire-standards.md +3 -1
  64. package/framework/rules/infrastructure-standards.md +4 -2
  65. package/framework/rules/neon-auth-standards.md +3 -1
  66. package/framework/rules/neon-standards.md +6 -4
  67. package/framework/rules/nextjs-standards.md +13 -11
  68. package/framework/rules/nextjs-templates.md +1 -1
  69. package/framework/rules/resend-standards.md +3 -1
  70. package/framework/schemas/config.schema.json +14 -9
  71. package/framework/schemas/feature.schema.json +15 -52
  72. package/framework/skills/README.md +4 -5
  73. package/framework/skills/core/create-umbraco-lp/SKILL.md +3 -3
  74. package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +3 -3
  75. package/framework/skills/core/morph-apply/SKILL.md +150 -223
  76. package/framework/skills/core/morph-hotfix/SKILL.md +34 -43
  77. package/framework/skills/core/morph-machine/SKILL.md +4 -4
  78. package/framework/skills/core/morph-media/SKILL.md +3 -3
  79. package/framework/skills/core/morph-plan/SKILL.md +138 -300
  80. package/framework/skills/core/morph-review/SKILL.md +112 -137
  81. package/framework/skills/core/morph-standards/SKILL.md +29 -41
  82. package/framework/skills/core/morph-uiux/SKILL.md +78 -153
  83. package/framework/standards/STANDARDS.json +90 -1219
  84. package/framework/standards/STANDARDS.meta.json +1305 -0
  85. package/framework/standards/ai-agents/evals-with-cache.md +2 -3
  86. package/framework/standards/ai-agents/llm-runtime-defaults.md +1 -1
  87. package/framework/standards/ai-agents/modalities-speech-to-text.md +36 -26
  88. package/framework/standards/ai-agents/prompt-sources.md +6 -4
  89. package/framework/standards/ai-agents/providers/model-registry.md +1 -1
  90. package/framework/standards/ai-agents/rag-custom-pgvector.md +67 -39
  91. package/framework/standards/ai-agents/setup.md +2 -2
  92. package/framework/standards/ai-agents/structured-output.md +1 -1
  93. package/framework/standards/ai-agents/sweet-spot.md +1 -1
  94. package/framework/standards/architecture/code-comments.md +8 -8
  95. package/framework/standards/architecture/vertical-slice/vertical-slice.md +18 -9
  96. package/framework/standards/backend/api/validation.md +135 -47
  97. package/framework/standards/backend/database/postgresql/database.md +11 -7
  98. package/framework/standards/backend/database/vector-search-rag.md +207 -324
  99. package/framework/standards/backend/dotnet/fluent-validation-vsa.md +14 -8
  100. package/framework/standards/backend/dotnet/result-pattern.md +40 -6
  101. package/framework/standards/backend/dotnet/scalar-ui.md +13 -7
  102. package/framework/standards/backend/dotnet/scrutor.md +1 -1
  103. package/framework/standards/backend/dotnet/testing.md +1 -1
  104. package/framework/standards/backend/dotnet/vsa-handler-patterns.md +7 -7
  105. package/framework/standards/backend/integrations/asaas/asaas-api.md +309 -165
  106. package/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +134 -154
  107. package/framework/standards/data/nosql/cache/redis.md +120 -44
  108. package/framework/standards/data/nosql/cosmos-db.md +114 -71
  109. package/framework/standards/frontend/design-system/animations.md +1 -1
  110. package/framework/standards/frontend/design-system/naming.md +1 -1
  111. package/framework/standards/frontend/nextjs/motion-patterns.md +45 -29
  112. package/framework/standards/frontend/nextjs/naming-conventions.md +1 -1
  113. package/framework/standards/infrastructure/docker/coolify-deploy.md +8 -6
  114. package/framework/standards/infrastructure/neon/neon-pgvector.md +120 -75
  115. package/framework/standards/infrastructure/neon/neon-setup.md +53 -31
  116. package/framework/standards/integration/mcp/mcp-tools.md +7 -7
  117. package/framework/templates/README.md +2 -3
  118. package/framework/templates/REGISTRY.json +6 -170
  119. package/framework/templates/code/dotnet/contracts/contracts-vsa.cs +2 -2
  120. package/framework/templates/code/dotnet/extensions/database-extensions.cs +1 -1
  121. package/framework/templates/code/dotnet/extensions/result-extensions.cs +27 -0
  122. package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +2 -2
  123. package/framework/templates/docs/plan.md +72 -0
  124. package/framework/templates/dotnet/ai-kit/README.md +1 -9
  125. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/MediaDisclosureTests.cs +1 -1
  126. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Morph.AiKit.Tests.csproj +0 -10
  127. package/framework/templates/infrastructure/docker/coolify.template.json +3 -3
  128. package/framework/templates/infrastructure/github/README.md +2 -1
  129. package/framework/templates/infrastructure/github/workflows/deploy-coolify.yml.hbs +2 -1
  130. package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -1
  131. package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +1 -1
  132. package/framework/templates/meta-prompts/squad-leaders/squad-leader.md +1 -1
  133. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +3 -4
  134. package/package.json +1 -1
  135. package/src/commands/e2e/e2e.js +2 -2
  136. package/src/commands/observability/cost.js +18 -60
  137. package/src/commands/observability/telemetry.js +3 -5
  138. package/src/commands/project/doctor-procs.js +1 -1
  139. package/src/commands/project/doctor.js +9 -9
  140. package/src/commands/project/fleet.js +4 -4
  141. package/src/commands/project/heavy.js +3 -3
  142. package/src/commands/project/init.js +6 -1
  143. package/src/commands/project/setup-infra-cmd.js +2 -1
  144. package/src/commands/project/stack-scan.js +58 -0
  145. package/src/commands/project/standards.js +79 -25
  146. package/src/commands/project/status.js +29 -69
  147. package/src/commands/project/update.js +33 -19
  148. package/src/commands/project/worktree.js +1 -1
  149. package/src/commands/state/advance.js +62 -46
  150. package/src/commands/state/approve.js +95 -138
  151. package/src/commands/state/archive.js +20 -84
  152. package/src/commands/state/auto-approval.js +68 -0
  153. package/src/commands/state/create.js +28 -1
  154. package/src/commands/state/delete.js +1 -1
  155. package/src/commands/state/finish.js +11 -23
  156. package/src/commands/state/gate-check.js +86 -95
  157. package/src/commands/state/gate-decision.js +6 -4
  158. package/src/commands/state/handoff.js +1 -1
  159. package/src/commands/state/list.js +9 -9
  160. package/src/commands/state/report-check.js +157 -311
  161. package/src/commands/state/retype.js +9 -3
  162. package/src/commands/validation/mutate.js +77 -14
  163. package/src/commands/validation/plan-check.js +81 -0
  164. package/src/commands/validation/validate-feature.js +60 -135
  165. package/src/commands/validation/verify.js +41 -82
  166. package/src/core/paths/output-schema.js +20 -67
  167. package/src/core/state/gate-order.js +5 -6
  168. package/src/core/state/lifecycle-audit.js +2 -2
  169. package/src/core/state/state-manager.js +17 -98
  170. package/src/core/templates/template-registry.js +2 -2
  171. package/src/core/templates/template-seed.js +22 -0
  172. package/src/core/work-types.js +10 -10
  173. package/src/dashboard/app/App.jsx +0 -2
  174. package/src/dashboard/app/components/ActivityFeed.jsx +2 -3
  175. package/src/dashboard/app/components/CommandPalette.jsx +7 -8
  176. package/src/dashboard/app/components/EntityLink.jsx +1 -2
  177. package/src/dashboard/app/components/Markdown.jsx +1 -1
  178. package/src/dashboard/app/components/Sidebar.jsx +1 -2
  179. package/src/dashboard/app/hooks/useMorphQuery.js +1 -1
  180. package/src/dashboard/app/lib/phases.js +2 -4
  181. package/src/dashboard/app/pages/Activity.jsx +1 -1
  182. package/src/dashboard/app/pages/FeatureDetail.jsx +139 -129
  183. package/src/dashboard/app/pages/Features.jsx +9 -9
  184. package/src/dashboard/app/pages/Guide.jsx +2 -2
  185. package/src/dashboard/app/pages/PhasePipeline.jsx +3 -4
  186. package/src/dashboard/app/pages/RulesMap.jsx +3 -3
  187. package/src/dashboard/app/pages/SkillsLibrary.jsx +3 -3
  188. package/src/dashboard/app/pages/Standards.jsx +1 -1
  189. package/src/dashboard/scanner/activity-scanner.js +6 -16
  190. package/src/dashboard/scanner/agents-scanner.js +1 -1
  191. package/src/dashboard/scanner/docs-scanner.js +5 -23
  192. package/src/dashboard/scanner/features-scanner.js +95 -60
  193. package/src/dashboard/scanner/index.js +0 -2
  194. package/src/dashboard/scanner/project-api.js +1 -1
  195. package/src/dashboard/scanner/rules-scanner.js +15 -10
  196. package/src/dashboard/scanner/skills-scanner.js +2 -3
  197. package/src/dashboard/scanner/standards-scanner.js +2 -1
  198. package/src/lib/ci/ci-verify.js +17 -1
  199. package/src/lib/ci/github-ci.js +1 -1
  200. package/src/lib/detectors/index.js +3 -8
  201. package/src/lib/generators/handoff-generator.js +34 -65
  202. package/src/lib/generators/settings-generator.js +11 -89
  203. package/src/lib/git/evidence-staleness.js +1 -1
  204. package/src/lib/git/tree-fingerprint.js +19 -7
  205. package/src/lib/git/tree-state.js +2 -2
  206. package/src/lib/heavy/cleanup.js +1 -5
  207. package/src/lib/installers/memory-installer.js +6 -8
  208. package/src/lib/mutation/commands.js +3 -2
  209. package/src/lib/{tasks/dotnet-test-introspection.js → mutation/dotnet-introspection.js} +17 -282
  210. package/src/lib/mutation/plan.js +14 -6
  211. package/src/lib/mutation/runner.js +1 -1
  212. package/src/lib/mutation/subset.js +46 -9
  213. package/src/lib/plan/artifact-vocabulary.js +60 -0
  214. package/src/lib/plan/checks.js +234 -0
  215. package/src/lib/plan/plan-parser.js +209 -0
  216. package/src/lib/plan/plan-template.js +18 -0
  217. package/src/lib/review-reports.js +222 -0
  218. package/src/lib/risk-detector.js +134 -135
  219. package/src/lib/specs/adr-index.js +50 -69
  220. package/src/lib/specs/design-seed.js +18 -0
  221. package/src/lib/specs/frontmatter.js +44 -0
  222. package/src/lib/specs/gfm-table.js +17 -0
  223. package/src/lib/specs/old-format.js +68 -0
  224. package/src/lib/specs/revocations.js +37 -95
  225. package/src/lib/specs/screen-checklist.js +18 -17
  226. package/src/lib/stack/dotnet-build-ignores.js +47 -0
  227. package/src/lib/stack/stack-profile.js +1 -1
  228. package/src/lib/stack/stack-scan.js +267 -0
  229. package/src/lib/standards/registry.js +43 -0
  230. package/src/lib/standards/sections.js +58 -0
  231. package/src/lib/tasks/eval-node.js +4 -12
  232. package/src/lib/tasks/test-nodes.js +1 -74
  233. package/src/lib/tasks/test-runner.js +75 -117
  234. package/src/lib/telemetry/metrics.js +8 -69
  235. package/src/lib/telemetry/telemetry-reader.js +5 -118
  236. package/src/lib/telemetry/verify-event.js +5 -7
  237. package/src/lib/validators/code-budget/code-budget-validator.js +1 -1
  238. package/src/lib/validators/contracts/contract-compliance-validator.js +2 -2
  239. package/src/lib/validators/reuse/reuse-validator.js +24 -48
  240. package/src/lib/validators/reuse/symbol-scanner.js +2 -4
  241. package/src/lib/validators/traceability-check.js +85 -129
  242. package/src/lib/validators/validation-runner.js +8 -88
  243. package/src/lib/validators/verify-runner.js +134 -301
  244. package/src/lib/worktree/docker-audit.js +1 -2
  245. package/src/lib/worktree/fleet-scanner.js +25 -38
  246. package/src/scripts/setup-infra.js +42 -22
  247. package/src/utils/agents-installer.js +92 -13
  248. package/src/utils/claude-settings-manager.js +0 -35
  249. package/src/utils/file-copier.js +34 -6
  250. package/src/utils/hooks-installer.js +16 -9
  251. package/src/utils/skills-installer.js +1 -2
  252. package/framework/commands/commit.md +0 -166
  253. package/framework/evals/trace-schema.md +0 -67
  254. package/framework/hooks/claude-code/core/tasks-json-guard.js +0 -83
  255. package/framework/hooks/claude-code/core/trace-autogen.js +0 -277
  256. package/framework/hooks/git/pre-commit/specs.sh +0 -50
  257. package/framework/hooks/shared/tasks-validator.js +0 -111
  258. package/framework/rubrics/backend.json +0 -41
  259. package/framework/rubrics/default.json +0 -36
  260. package/framework/rubrics/frontend.json +0 -36
  261. package/framework/rules/morph-task-tracking.md +0 -54
  262. package/framework/rules/morph-workflow.md +0 -244
  263. package/framework/schemas/tasks.schema.json +0 -79
  264. package/framework/skills/core/morph-brainstorming/SKILL.md +0 -161
  265. package/framework/skills/core/morph-implement/SKILL.md +0 -194
  266. package/framework/skills/core/morph-proposal/SKILL.md +0 -152
  267. package/framework/skills/core/morph-stack-scan/SKILL.md +0 -145
  268. package/framework/templates/docs/proposal.md +0 -192
  269. package/framework/templates/docs/spec.md +0 -57
  270. package/framework/templates/docs/ui-components.md +0 -52
  271. package/framework/templates/docs/ui-design-system.md +0 -76
  272. package/framework/templates/docs/ui-flows.md +0 -167
  273. package/framework/templates/examples/spec-examples.md +0 -91
  274. package/framework/templates/feature/decisions.md +0 -124
  275. package/framework/templates/feature/recap.md +0 -145
  276. package/framework/templates/project/validate.js +0 -97
  277. package/framework/templates/tasks.template.json +0 -17
  278. package/src/commands/state/usecase.js +0 -143
  279. package/src/commands/tasks/dag.js +0 -181
  280. package/src/dashboard/app/pages/Rubrics.jsx +0 -97
  281. package/src/dashboard/scanner/rubrics-scanner.js +0 -12
  282. package/src/lib/agents/output-collector.js +0 -76
  283. package/src/lib/evaluator-report.js +0 -91
  284. package/src/lib/specs/acervo-format.js +0 -70
  285. package/src/lib/specs/acervo-lifecycle.js +0 -264
  286. package/src/lib/specs/done-criteria-check.js +0 -200
  287. package/src/lib/specs/usecase-check.js +0 -301
  288. package/src/lib/specs/usecase-promoter.js +0 -301
  289. package/src/lib/specs/usecase-registry.js +0 -237
  290. package/src/lib/tasks/dispatch-planner.js +0 -319
  291. package/src/lib/tasks/mermaid-renderer.js +0 -132
  292. package/src/lib/tasks/task-classifier.js +0 -30
  293. package/src/lib/tasks/task-parser.js +0 -209
  294. package/src/lib/tasks/tasks-json-parser.js +0 -296
  295. package/src/lib/tasks/test-scope.js +0 -597
  296. package/src/lib/validators/architecture/architecture-validator.js +0 -270
  297. package/src/lib/validators/architecture/index.js +0 -7
  298. package/src/lib/validators/css/css-validator.js +0 -340
  299. package/src/lib/validators/css/index.js +0 -7
  300. package/src/lib/validators/design-system/design-system-validator.js +0 -237
  301. package/src/lib/validators/design-system/index.js +0 -7
  302. package/src/lib/validators/score-aggregator.js +0 -244
  303. package/src/lib/validators/ui/index.js +0 -7
  304. package/src/lib/validators/ui/ui-contrast-validator.js +0 -422
@@ -1,150 +1,125 @@
1
1
  ---
2
2
  name: morph-review
3
- description: Conduz a fase de revisão e produz o review-report.md para o Gate 3
3
+ description: Conduz o Gate 3 — despacha verificador ∥ revisor (∥ segurança, quando exigida) em contexto fresco sobre um SHA fixo e decide pelo gate-check
4
4
  version: core
5
- when-to-invoke: ao iniciar a fase review, após todas as tasks de tasks.json estarem com status `done`
6
- user-invokable: true
7
- cliVersion: "8.46.0"
5
+ when_to_use: Use quando a fase review começar, com todas as fatias com relatório final e o verify da feature verde
6
+ user-invocable: true
7
+ cliVersion: "9.0.0"
8
8
  ---
9
9
 
10
10
  # morph-review
11
11
 
12
12
  ## Objetivo
13
- Responder, com evidência, uma pergunta: **a entrega faz o que os use cases dizem, sem quebrar o que
14
- já funcionava?** O Gate 3 decide por veredito (`SHIP`/`FIX`) e bloqueadores tipados — não por nota.
15
-
16
- ## Quando invocar
17
- Fase review, com todas as tasks `done` e o `recap.md` em dia. Normalmente chamada pela `morph-apply`.
13
+ Responder, com evidência: **cada cenário do plano está provado, sem quebrar o que já funcionava?**
14
+ Três agentes independentes, cada um com o seu relatório em `4-review/`: `verifier.md` (prova cada
15
+ `Cn`), `reviewer.md` (escopo, arquitetura, regressão) e `security.md` (só com caminho sensível). O
16
+ Gate 3 decide por `**Verdict:** SHIP|FIX`, bloqueadores tipados e a cobertura dos `Cn` — não por
17
+ nota. Você não escreve relatório de review: os três arquivos são o retorno.
18
18
 
19
19
  ## Ritmo
20
- - Comando em **primeiro plano**, com timeout. O único que pode passar do teto de 10 min do Bash é o
21
- `verify {feature}` de um projeto grande: aí rode-o com `run_in_background` e espere a notificação
22
- de término. Nunca `sleep`/`until` consultando um processo: a espera custa a máquina e não produz prova.
23
- - **Bloqueio de ambiente não é laço.** Memória baixa, slot pesado ocupado (`verify` exit 3 /
24
- `status: "busy"`), Docker fora: tente **uma** vez mais. Persistiu, siga com o que tem — o
25
- `gate-check` pausa com a razão e o humano decide. Nunca agende retentativas.
26
-
27
- ## O que fazer
28
-
29
- 1. **Contexto.** Tenha em contexto `2-plan/spec.md`, os use cases (`2-plan/usecases/UC-*.md`),
30
- `2-plan/decisions.md` (se existir) e `3-implement/recap.md`. Numa sessão quente eles já estão
31
- lá; numa fria, Read.
32
-
33
- 2. **Relatório já íntegro?** Rode `morph-spec report-check {feature} --json` (sem task) e leia o
34
- campo `evaluator` — também em sessão retomada: retomar não reseta este passo.
35
- - `evaluator.complete` (tem `**Verdict:**` válido e não é parcial): **não re-despache** — vá ao
36
- passo 5.
37
- - `evaluator.partial: true` (`PARCIAL` na 1ª linha): ver "PARCIAL" no passo 4.
38
- - Ausente ou sem veredito: siga para o passo 3.
39
-
40
- 3. **Prova da suíte — uma rodada, no CI.** Depois da última task, commite o trabalho da feature na
41
- branch (`git add <paths>` + `git commit`: o CI só vê commits) e rode
42
- `morph-spec verify {feature} --ci --json` com `run_in_background`. Ele empurra `morph/{feature}`,
43
- cria o workflow `morph-verify.yml` se o projeto não tem um, espera o run e grava o stamp do JSON que
44
- o run publicou. Sem CI (sem GitHub, sem `gh`, `project.ci: false`) ele mesmo roda o verify local e
45
- diz por quê. **Quando a saída mostrar `CI rodando`, despache o avaliador (passo 4) sem esperar o
46
- fim**: o workflow e o push já estão commitados, então a foto `--before-eval` não os acusa como
47
- mutação, e a suíte corre no CI em paralelo. Saiu `verify local`: espere o fim antes do passo 4 —
48
- suíte local e `mutate` disputam a máquina. Exit 2 = trabalho fora de commit; exit 3 (`pending`/`busy`)
49
- não é vermelho (ver Ritmo). Rode-a só depois da última task: o `gate-check` pausa o ship se o
50
- último stamp é de escopo `task:{id}`. **Sem `--filter`, sempre**: `verify {feature}` **nunca recorta**, e um verify filtrado não persiste o
51
- stamp. Se o JSON vier com `repeatOf`, nada mudou desde a rodada anterior — use aquela. Esta é a
52
- única execução de testes do Gate 3: o avaliador não roda a suíte de novo.
53
- - Nó `e2e`: `pass` local → passe a URL ao avaliador (`morph-spec e2e status {feature} --json` →
54
- `baseUrl`); `pass` no CI → a app foi exercida lá, não há stack local para navegar. `fail` →
55
- correção (vermelho no CI: `gh run view <id> --log-failed`, impresso pelo verify). Vermelho por
56
- config que só existe na máquina (`.env`, appsettings, connection string, secret) não é defeito do
57
- código: pergunte ao usuário entre declarar o secret + `env:` no `morph-verify.yml` ou `project.ci: false`. `skip` → quem
58
- classifica é o `gate-check` (`classifyE2eSkip`, em `risk-detector.js`): dispensa de projeto/escopo
59
- passa; ambiente, `--skip-e2e` ou razão desconhecida pausam sozinhos.
60
- - Vermelho com o avaliador ainda rodando: não mexa na árvore até ele voltar (passo 4); corrija junto
61
- com os bloqueadores dele. `traceability.warnings` entram no review-report como sinal, não bloqueio.
62
-
63
- 4. **Despache o avaliador independente** (`morph-evaluator`, contexto fresco, sem Write/Edit).
64
- - Tire a foto da árvore e escolha o modelo: `morph-spec report-check {feature} --before-eval --json`.
65
- O campo `evaluatorModel.model` é `sonnet` por padrão e `opus` quando o diff toca auth, segredo,
66
- pagamento, migração, prompt/modelo ou mídia gerada (`evaluatorModel.reasons` diz por quê).
67
- - Blast radius: para cada símbolo público do diff, `morph-spec graph affected <símbolo> --prod --json`.
68
- Sem grafo (`no-graph`/`not-found`/`ambiguous`), siga sem o blast radius e registre a ausência no
69
- review-report. Numa worktree com grafo stale, `morph-spec graph refresh` antes.
70
- ```
71
- dispatch Agent (subagent_type: "morph-evaluator", model: {evaluatorModel.model}) with prompt:
72
- contexto: use cases + spec.md + diff da feature + JSON do verify se já terminou (nós, e2e, URL)
73
- + blast radius + 1-design/mockups.md (se existir) + 3-implement/evidencias/*.md (se existir)
74
- instrução: |
75
- Siga .morph/framework/evals/review-checklist.md e grave
76
- .morph/features/{feature}/4-review/evaluator-report.md ANTES de encerrar — o arquivo é o
77
- retorno; não chame SendMessage. Se o arquivo já existir quando você começar, é resíduo de
78
- outra tentativa: não o leia antes de escrever o seu (ancoragem no veredito alheio).
79
- A suíte roda fora de você (JSON acima, ou o CI em curso): você NÃO roda verify, build nem testes. Bash é para ler
80
- (git diff/log/show, grep, morph-spec graph) e para no máximo UMA rodada de
81
- `morph-spec mutate {feature}` (até 3 mutantes com `expect`), só quando o checklist pede.
82
- Nada em segundo plano, nada de laço de espera. NUNCA `git checkout --`: descarta trabalho
83
- não commitado.
84
- Com stack no ar, navegue os fluxos da feature e confira console/network.
85
- Limite de turnos: a ~70% sem terminar, grave o relatório com `PARCIAL` na 1ª linha e SEM
86
- `**Verdict:**`; o relatório final substitui o parcial.
87
- ```
88
- Tipo `morph-evaluator` não registrado: `general-purpose` com o campo `persona` do `evaluator`
89
- (`.morph/framework/agents.json`) no topo do prompt, e registre o fallback no review-report.
90
-
91
- **Ao retomar o controle — higiene antes de ler o veredito.** Rode `morph-spec report-check {feature} --json`:
92
- - `tree.sinceBeforeEval.changed` vazio e `tree.markers` vazio = árvore como antes do dispatch.
93
- Arquivo listado = mutação que ficou no disco: `morph-spec mutate --restore` devolve os bytes do
94
- snapshot conferindo md5; fora de uma rodada de mutação, desfaça linha a linha pelo diff.
95
- **NUNCA `git checkout -- src/` aqui**: o checkout apaga junto tudo o que não foi commitado depois
96
- da prova (correção de bloqueador, trabalho de outra sessão), e no verify local a feature pode nem
97
- ter commit.
98
- - `tree.sinceBeforeEval` `null` = sem foto; `tree` `null` = git não respondeu, nada foi conferido.
99
- - Não rode build/teste enquanto o agente está `running`.
100
-
101
- Depois leia `4-review/evaluator-report.md` e rode `morph-spec worktree reap --json`.
102
-
103
- **PARCIAL** (`evaluator.partial: true`): não leia veredito dele e não re-despache frio — retome o
104
- MESMO avaliador por `SendMessage`, colando `tree.dirty` e `tree.commits` no recado. Só se o id não
105
- retomar, despache um novo.
106
-
107
- 5. **Bloqueadores.** `**Verdict:** FIX` ou bloqueador aberto: corrija (loop da `morph-apply`), commite, rode o
108
- `verify {feature} --ci` de novo e **confirme só os bloqueadores** retomando o MESMO avaliador por `SendMessage`
109
- (com `tree.dirty`/`tree.commits` e uma foto `--before-eval` nova). Ele não reavalia a feature
110
- inteira, e **nota nunca motiva nova rodada**. Avaliador encerrado: despache um novo dizendo que
111
- é uma confirmação dos bloqueadores Bn — o relatório é append-only e vale o último `**Verdict:**`.
112
-
113
- 6. **`4-review/review-report.md`**, curto:
114
- - **`**Reviewed-SHA:** {git rev-parse HEAD}`** — obrigatório. O `approve` recusa se o HEAD andou
115
- depois do review.
116
- - `**Veredito:** SHIP|FIX` e a tabela de bloqueadores do evaluator-report (vazia = `Nenhum.`).
117
- - Runtime: nó `e2e` (`pass`/`fail`/`skip` + razão por extenso) e o que foi navegado.
118
- - Notas não bloqueantes, numa lista.
119
-
120
- 7. **Gate 3.** Rode `morph-spec gate-check {feature} review [--json]` — ele lê o veredito do
121
- evaluator-report e os demais sinais do disco e decide. Violação das verificações mecânicas entra
122
- por `--signals '{"standardsViolations":[...]}'`. Forçar a passagem apesar de uma pausa:
123
- `morph-spec gate-decision {feature} review --pause false --reason "..."` (explícito e registrado).
124
- Nunca edite `feature.json` à mão.
125
-
126
- **`pause === true`** → `AskUserQuestion`:
127
- ```
128
- question: "Gate 3 — Review de {feature} aprovado?{ reason ? ' Sinal: ' + reason : '' }"
129
- header: "Gate 3"
130
- options:
131
- - { label: "aprovado, fechar feature", description: "Próximo passo: morph-spec finish --pr|--merge (morph-apply §6)" }
132
- - { label: "preciso ajustar", description: "Apontar correções antes de fechar" }
133
- - { label: "rollback", description: "Voltar para implement" }
134
- ```
135
- **`pause === false`** → resumo de 3 linhas (veredito, runtime, bloqueadores: 0) e
136
- `morph-spec approve {feature} review --mode auto`. A pergunta nomeia a feature: é por ela que o
137
- hook `state-sync` grava a aprovação.
138
-
139
- Fechar não é desta skill: `finish {feature} --pr|--merge` (`morph-apply` §6). `--pr` deixa a
140
- feature `aguardando-merge` até o merge.
141
-
142
- ## Output esperado
143
- - `4-review/evaluator-report.md` — veredito e bloqueadores do avaliador independente (retorno autoritativo)
144
- - `4-review/review-report.md` — síntese com `Reviewed-SHA`
145
- - Gate 3 registrado em `feature.json` via `approve` ou pelo hook `state-sync`
20
+ - Comando em **primeiro plano**, com timeout. Só o `verify {feature}` de projeto grande passa do teto
21
+ de 10 min do Bash: aí `run_in_background` e espere a notificação. Nunca `sleep`/`until`.
22
+ - **Bloqueio de ambiente não é laço.** Slot pesado ocupado (exit 3 / `busy`), Docker fora: tente
23
+ **uma** vez mais; persistiu, siga — o `gate-check` pausa com a razão. Nunca agende retentativas.
24
+
25
+ ## 1. Relatórios já íntegros?
26
+ `morph-spec report-check {feature} --json` (sem fatia) — também em sessão retomada: retomar não
27
+ reseta este passo. Leia `reviews.verifier|reviewer|security`: `complete` → **não re-despache** esse
28
+ papel; `partial: true` → passo 4 (PARCIAL); ausente → despache no passo 3.
29
+
30
+ ## 2. Prova da suíte — uma rodada
31
+ Commite o trabalho da feature (`git add <paths>` + `git commit`) e rode
32
+ `morph-spec verify {feature} --ci --json` com `run_in_background`. Ele empurra a branch, espera o run
33
+ e grava o stamp do artefato que o run publicou; sem CI, roda local e diz por quê.
34
+ **Sem `--filter`, sempre**: o Gate 3 roda a suíte inteira. Esta é a única execução de testes do Gate 3 — nenhum agente
35
+ roda a suíte de novo. `repeatOf` no JSON = nada mudou, use aquela rodada; `reason: "stamp-reused"` = sem CI e
36
+ nada fora de `.morph/` andou desde o último verify verde: ele vale, não rode de novo.
37
+ - **Quando a saída mostrar `CI rodando`, despache (passo 3) sem esperar o fim**: o push e o
38
+ workflow já estão commitados e a foto da árvore não os acusa. Saiu `verify local`: espere o fim
39
+ antes do passo 3 — suíte local e `mutate` disputam a máquina. Exit 2 = trabalho fora de commit.
40
+ - Nó `e2e`: `pass` local → `morph-spec e2e status {feature} --json` → `baseUrl` vai ao verificador.
41
+ `fail` → correção (CI: `gh run view <id> --log-failed`). `skip` → quem classifica é o `gate-check`
42
+ (`classifyE2eSkip`): dispensa de projeto passa; ambiente, `--skip-e2e` ou razão desconhecida pausam.
43
+ - `traceability.warnings` do verify vão ao revisor como sinal.
44
+
45
+ ## 3. Dispatch — verificador ∥ revisor (∥ segurança)
46
+ `morph-spec report-check {feature} --before-eval --json` tira a foto da árvore e diz quem despachar:
47
+ `reviewModels.verifier.model` (opus com prompt/modelo ou mídia), `reviewModels.security.required`.
48
+ Anote `base` (merge-base com a default) e `sha` (`git rev-parse HEAD`). Blast radius: para cada
49
+ símbolo público do diff, `morph-spec graph affected <símbolo> --prod --json`; sem grafo
50
+ (`no-graph`/`not-found`/`ambiguous`), siga sem o blast radius — o revisor cai para `git grep` — e
51
+ registre a ausência no recado a ele. Cada agente nasce com contexto fresco e **nunca recebe relatório anterior** (ancoragem).
52
+ Despache todos na mesma resposta:
53
+ ```
54
+ dispatch Agent (subagent_type: "morph-verifier", model: {reviewModels.verifier.model}) with prompt:
55
+ feature, base, sha, JSON do verify (nós, e2e, URL) se já terminou, 1-design/mockups.md e
56
+ 3-implement/evidencias/*.md se existirem. Grave .morph/features/{feature}/4-review/verifier.md.
57
+ Não rode `morph-spec mutate` até eu avisar que revisor e segurança terminaram.
58
+ NUNCA `git checkout --`: descarta trabalho não commitado.
59
+ dispatch Agent (subagent_type: "morph-reviewer") with prompt:
60
+ feature, base, sha, blast radius (ou a ausência dele), traceability.warnings.
61
+ Grave .morph/features/{feature}/4-review/reviewer.md.
62
+ dispatch Agent (subagent_type: "morph-security") with prompt: ← só com security.required
63
+ feature, base, sha, reviewModels.security.reasons. Grave .morph/features/{feature}/4-review/security.md.
64
+ ```
65
+ O prompt leva só os campos acima. O que você notou no loop chega ao revisor como
66
+ `traceability.warnings` ou como item da `## Errata` do plano, nunca como lista solta de "fatos do
67
+ loop": é histórico da conversa (MORPH §6) e ancora quem nasceu para olhar sem ele.
68
+ O contrato fixo (o que provar, `**Reviewed-SHA:**` obrigatório, formato, PARCIAL, read-only) mora no
69
+ corpo de cada persona e em `.morph/framework/evals/review-checklist.md`. Tipo não registrado:
70
+ `general-purpose` com o campo `persona` de `.morph/framework/agents.json` no topo do prompt.
71
+
72
+ Revisor e segurança voltaram: diga ao verificador, por `SendMessage`, que a mutação está liberada —
73
+ opcional, no máximo 3 mutantes com `expect`, só para guarda sem teste que a morda (review-checklist).
74
+ Achou o teste por leitura: não rode.
75
+
76
+ ## 4. Ao retomar — higiene antes de ler o veredito
77
+ Não rode build nem teste enquanto um agente está `running`. Com todos de volta,
78
+ `morph-spec report-check {feature} --json`:
79
+ - `tree.sinceBeforeEval.changed` vazio e `tree.markers` vazio = árvore como antes do dispatch.
80
+ Arquivo listado = mutação que ficou no disco: `morph-spec mutate --restore` devolve os bytes do
81
+ snapshot; fora de uma rodada de mutação, desfaça linha a linha pelo diff.
82
+ **NUNCA `git checkout -- src/` aqui**: o checkout apaga junto tudo o que não foi commitado depois
83
+ da prova (correção de bloqueador, trabalho de outra sessão).
84
+ - `tree.sinceBeforeEval` `null` = sem foto; `tree` `null` = git não respondeu.
85
+
86
+ Depois leia os relatórios e rode `morph-spec worktree reap --json`.
87
+
88
+ **PARCIAL** (`reviews.<papel>.partial: true`): não leia veredito dele e não re-despache frio —
89
+ retome o MESMO agente por `SendMessage`, colando `tree.dirty` e `tree.commits`. Só se o id não
90
+ retomar, despache um novo.
91
+
92
+ ## 5. Bloqueadores
93
+ O avaliador também erra: **antes de editar, reverifique cada bloqueador no código** — evidência que
94
+ não se reproduz vira pergunta ao mesmo agente, não correção. Confirmado: corrija (loop da
95
+ `morph-apply`), commite, rode o `verify {feature} --ci` de novo e uma foto `--before-eval` nova.
96
+ Retome por `SendMessage` TODO agente exigido, com o `sha` novo e `tree.dirty`/`tree.commits`: quem
97
+ abriu bloqueadores **confirme só os bloqueadores** (retomando o MESMO agente que os abriu); os outros
98
+ julgam só o delta `{sha anterior}..{sha novo}` — o que a correção abriu. `reviewModels.security.required`
99
+ virou `true` agora: despache a segurança. Ninguém reavalia a feature inteira, e **nota nunca motiva
100
+ nova rodada**. Agente encerrado: despache um novo dizendo que é uma confirmação — o relatório é
101
+ append-only e vale o último `**Verdict:**`. Cada relatório carrega o `**Reviewed-SHA:**` —
102
+ obrigatório: o `approve` recusa quando o código andou depois de QUALQUER um deles.
103
+
104
+ ## 6. Gate 3
105
+ `morph-spec gate-check {feature} review [--json]` lê os relatórios exigidos, a cobertura dos `Cn` e
106
+ os demais sinais do disco. Violação das verificações mecânicas entra por
107
+ `--signals '{"standardsViolations":[...]}'`. Forçar a passagem apesar de uma pausa:
108
+ `morph-spec gate-decision {feature} review --pause false --reason "..."`. Nunca edite `feature.json`.
109
+
110
+ **`pause === true`** → `AskUserQuestion`:
111
+ ```
112
+ question: "Gate 3 — Review de {feature} aprovado?{ reason ? ' Sinal: ' + reason : '' }"
113
+ header: "Gate 3"
114
+ options:
115
+ - { label: "aprovado, fechar feature", description: "Próximo passo: morph-spec finish --pr|--merge (morph-apply §8)" }
116
+ - { label: "preciso ajustar", description: "Apontar correções antes de fechar" }
117
+ - { label: "rollback", description: "Voltar para implement" }
118
+ ```
119
+ **`pause === false`** → resumo de 3 linhas (vereditos, cenários provados, bloqueadores: 0) e
120
+ `morph-spec approve {feature} review --mode auto`. A pergunta nomeia a feature: é por ela que o hook
121
+ `state-sync` grava a aprovação. Fechar é da `morph-apply` §8.
146
122
 
147
123
  ## Referências
148
- - `.morph/framework/evals/review-checklist.md` — o que o avaliador procura e o formato do relatório
124
+ - `.morph/framework/evals/review-checklist.md` — o que cada papel procura e o formato dos relatórios
149
125
  - `morph-spec verify|mutate|report-check|gate-check` — `.morph/framework/CLI.md`
150
- - `.morph/framework/MORPH.md` §5 — sinais do Gate 3
@@ -1,64 +1,52 @@
1
1
  ---
2
2
  name: morph-standards
3
- description: Localiza um standard específico via busca server-side (morph-spec standards --find) e carrega só o necessário
3
+ description: Localiza um standard específico via busca server-side (morph-spec standards --find) e carrega só a seção necessária (--show id#âncora)
4
4
  version: core
5
- when-to-invoke: quando precisar consultar um standard específico durante a implementação
6
- user-invokable: true
7
- cliVersion: "8.46.0"
5
+ when_to_use: Use quando precisar consultar um standard específico durante a implementação
6
+ user-invocable: true
7
+ cliVersion: "9.0.0"
8
8
  ---
9
9
 
10
10
  # morph-standards
11
11
 
12
12
  ## Objetivo
13
- Encontrar o standard certo para a situação atual e carregar apenas o necessário no contexto.
14
- Nunca abra o `STANDARDS.json` inteiro (65 KB) — a busca server-side já devolve o suficiente
15
- para aplicar o standard na maioria dos casos.
13
+ Achar o standard certo para a fatia e pôr no contexto só o trecho que ela precisa. Nunca abra o
14
+ `STANDARDS.json` inteiro.
16
15
 
17
16
  ## Quando invocar
18
- Quando durante a implementação surgir uma dúvida de padrão arquitetural, de contrato, de qualidade
19
- ou de teste — e o `spec.md` e os standards da task não bastarem para resolver.
17
+ Durante a implementação, quando surgir dúvida de padrão (arquitetura, contrato, qualidade, teste)
18
+ que o `plan.md` e os standards da fatia não resolvem.
20
19
 
21
20
  ## O que fazer
22
21
 
23
- 1. Rode a busca server-side — é O caminho, não uma opção entre várias:
22
+ 1. **Digest.** Busque no servidor:
24
23
  ```
25
- morph-spec standards --find "<domínio/tecnologia da task>" [--category <cat>] [--tags <a,b>] [--json]
24
+ morph-spec standards --find "<domínio/tecnologia da fatia>" [--category <cat>] [--tags <a,b>] [--json]
26
25
  ```
27
- Devolve o **top 3** como `id · path · digest` — o `digest` é o texto completo do standard;
28
- na maioria dos casos ele já basta para aplicar o padrão, sem abrir o `.md`.
26
+ Devolve o top 3 com `id`, `path`, `digest` e as chaves de âncora. O digest é um resumo, não o
27
+ texto do standard: serve para decidir se o standard se aplica e muitas vezes basta para aplicá-lo.
29
28
 
30
- 2. Se dois resultados parecerem relevantes e houver conflito, adote o mais específico ao stack
31
- do projeto. Registre o conflito no `decisions.md` da feature.
32
-
33
- 3. Abra o arquivo `.md` do standard (campo `path`) só quando o `digest` não bastar para resolver
34
- a dúvida — ex.: precisa de um exemplo de código completo ou de uma seção que o resumo não cobre.
35
-
36
- 4. Aplique o standard na tarefa atual.
37
-
38
- 5. Registre no `recap.md`: qual standard foi consultado (via `--find`, ou navegação — item abaixo)
39
- e como foi aplicado.
29
+ 2. **Seção.** O digest não bastou → leia só a seção que importa:
30
+ ```
31
+ morph-spec standards --show <id>#<âncora>
32
+ ```
33
+ A âncora é uma das chaves que o `--find` listou, ou o slug de qualquer heading do `.md`.
34
+ `morph-spec standards --show <id>` mostra o digest e a tabela de âncoras.
40
35
 
41
- ## Fallback — navegação exploratória
36
+ 3. **Arquivo inteiro** (campo `path`, sob `.morph/framework/standards/`) só quando a fatia toca o
37
+ standard todo ou precisa de um exemplo que nenhuma seção isolada traz.
42
38
 
43
- `--find` exige uma query. Quando a necessidade é genuinamente exploratória (ex.: "o que existe
44
- pra categoria X?", sem um termo de busca claro), nesta ordem:
39
+ 4. Dois standards em conflito → adote o mais específico ao stack do projeto.
45
40
 
46
- 1. `morph-spec standards` sem `--find` — lista categorias + contagem, custo mínimo, o suficiente
47
- pra decidir qual `--category` usar num `--find` em seguida.
48
- 2. Só se isso não bastar, abra `.morph/framework/standards/STANDARDS.json` inteiro — último recurso,
49
- nunca o primeiro passo.
41
+ 5. Registre no `**Standards:**` do relatório da fatia (`3-implement/reports/F{n}.md`) qual standard (e qual âncora) aplicou e, havendo, o conflito.
50
42
 
51
- ## Quando não há standard adequado
52
- Registre no `decisions.md` que nenhum standard cobre o caso.
53
- Descreva o critério adotado e sinalize para revisão futura.
54
- Não invente um standard — padrões não documentados são dívida técnica.
43
+ ## Sem query clara
44
+ `morph-spec standards` sem flag lista categorias e contagens; use para escolher o `--category` de
45
+ um `--find` em seguida.
55
46
 
56
- ## Output esperado
57
- - Standard identificado (via `--find`/digest, ou `.md` completo quando necessário) no contexto
58
- - Critério de implementação claro para a tarefa atual
59
- - Entrada no recap.md registrando o standard consultado
47
+ ## Quando nenhum standard cobre o caso
48
+ Registre no relatório da fatia o critério adotado. Não invente standard: padrão não documentado é dívida.
60
49
 
61
50
  ## Referências
62
- - `morph-spec standards --find "<query>" [--category] [--tags] [--json]` — busca server-side, top 3 `id · path · digest`
63
- - `.morph/framework/standards/STANDARDS.json` — índice completo; abrir só como fallback exploratório (ver acima)
64
- - `.morph/framework/MORPH.md` — seção 4 (Como consultar Standards)
51
+ - `.morph/framework/CLI.md` — seção `standards` (flags, `--json`, falhas)
52
+ - `.morph/framework/MORPH.md` — §4 (Como consultar Standards)