@polymorphism-tech/morph-spec 8.47.0 → 9.1.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 (377) hide show
  1. package/CLAUDE.md +51 -43
  2. package/README.md +39 -38
  3. package/bin/morph-spec.js +41 -113
  4. package/bin/validate.js +1 -147
  5. package/claude-plugin.json +1 -1
  6. package/docs/CHEATSHEET.md +1 -1
  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 +86 -21
  11. package/framework/commands/morph-apply.md +5 -28
  12. package/framework/commands/morph-archive.md +1 -1
  13. package/framework/commands/morph-hotfix.md +8 -8
  14. package/framework/commands/morph-infra.md +1 -1
  15. package/framework/commands/morph-preflight.md +2 -3
  16. package/framework/commands/morph-status.md +4 -4
  17. package/framework/docs/CLI.md +574 -286
  18. package/framework/evals/review-checklist.md +82 -41
  19. package/framework/hooks/README.md +10 -11
  20. package/framework/hooks/claude-code/core/block-destructive-worktree-removal.js +6 -49
  21. package/framework/hooks/claude-code/core/block-raw-worktree-add.js +2 -35
  22. package/framework/hooks/claude-code/core/chain.js +4 -65
  23. package/framework/hooks/claude-code/core/comment-guard.js +3 -17
  24. package/framework/hooks/claude-code/core/denylist.json +33 -3
  25. package/framework/hooks/claude-code/core/enforce-phase-writes.js +15 -63
  26. package/framework/hooks/claude-code/core/gate-guard.js +9 -78
  27. package/framework/hooks/claude-code/core/graph-refresh-kick.js +3 -24
  28. package/framework/hooks/claude-code/core/heavy-gate.js +3 -21
  29. package/framework/hooks/claude-code/core/heavy-release.js +2 -13
  30. package/framework/hooks/claude-code/core/loop-detect.js +2 -31
  31. package/framework/hooks/claude-code/core/pre-bash-denylist.js +36 -2
  32. package/framework/hooks/claude-code/core/protect-spec-files.js +25 -297
  33. package/framework/hooks/claude-code/core/state-sync.js +15 -85
  34. package/framework/hooks/claude-code/core/telemetry-log.js +15 -96
  35. package/framework/hooks/claude-code/core/validate-completion.js +37 -147
  36. package/framework/hooks/claude-code/core/warn-bash-source-write.js +23 -0
  37. package/framework/hooks/claude-code/core/worktree-context.js +15 -114
  38. package/framework/hooks/claude-code/core/worktree-create.js +6 -70
  39. package/framework/hooks/claude-code/core/worktree-env-inject.js +5 -56
  40. package/framework/hooks/claude-code/core/worktree-remove.js +5 -31
  41. package/framework/hooks/claude-code/statusline.py +55 -41
  42. package/framework/hooks/package.json +3 -0
  43. package/framework/hooks/shared/activity-logger.js +9 -89
  44. package/framework/hooks/shared/agent-reap.js +2 -17
  45. package/framework/hooks/shared/build-check.js +11 -76
  46. package/framework/hooks/shared/claim-registry.js +9 -119
  47. package/framework/hooks/shared/command-tokens.js +168 -44
  48. package/framework/hooks/shared/comment-rules.js +5 -20
  49. package/framework/hooks/shared/comment-scanner.js +11 -43
  50. package/framework/hooks/shared/comment-stripper.js +11 -85
  51. package/framework/hooks/shared/e2e-check.js +0 -0
  52. package/framework/hooks/shared/errata.js +59 -0
  53. package/framework/hooks/shared/feature-locator.js +11 -95
  54. package/framework/hooks/shared/frontend-locations.js +4 -0
  55. package/framework/hooks/shared/gate-question.js +12 -0
  56. package/framework/hooks/shared/git-exclude.js +3 -20
  57. package/framework/hooks/shared/git-paths.js +8 -104
  58. package/framework/hooks/shared/graph-freshness.js +22 -166
  59. package/framework/hooks/shared/graph-refresh.js +21 -149
  60. package/framework/hooks/shared/heavy-command.js +4 -12
  61. package/framework/hooks/shared/hook-response.js +8 -83
  62. package/framework/hooks/shared/morph-cli.js +8 -52
  63. package/framework/hooks/shared/payload-utils.js +10 -132
  64. package/framework/hooks/shared/phase-utils.js +14 -72
  65. package/framework/hooks/shared/redact-secrets.js +4 -15
  66. package/framework/hooks/shared/reparse-scan.js +6 -66
  67. package/framework/hooks/shared/slice-progress.js +99 -0
  68. package/framework/hooks/shared/source-files.js +4 -17
  69. package/framework/hooks/shared/spawn-command.js +23 -0
  70. package/framework/hooks/shared/state-reader.js +51 -247
  71. package/framework/hooks/shared/state-writer.js +9 -54
  72. package/framework/hooks/shared/stdin-reader.js +1 -11
  73. package/framework/hooks/shared/telemetry-logger.js +7 -67
  74. package/framework/hooks/shared/transcript-usage.js +7 -29
  75. package/framework/hooks/shared/worktree-root.js +7 -29
  76. package/framework/mcp/registry.json +3 -4
  77. package/framework/phases.json +23 -39
  78. package/framework/rules/csharp-standards.md +1 -1
  79. package/framework/rules/frontend-standards.md +1 -0
  80. package/framework/rules/hangfire-standards.md +1 -1
  81. package/framework/rules/neon-standards.md +1 -1
  82. package/framework/schemas/config.schema.json +14 -9
  83. package/framework/schemas/feature.schema.json +15 -50
  84. package/framework/skills/README.md +3 -4
  85. package/framework/skills/core/create-umbraco-lp/SKILL.md +1 -1
  86. package/framework/skills/core/migrate-lp-to-umbraco/SKILL.md +1 -1
  87. package/framework/skills/core/morph-apply/SKILL.md +149 -222
  88. package/framework/skills/core/morph-hotfix/SKILL.md +33 -42
  89. package/framework/skills/core/morph-machine/SKILL.md +2 -2
  90. package/framework/skills/core/morph-media/SKILL.md +1 -1
  91. package/framework/skills/core/morph-plan/SKILL.md +137 -299
  92. package/framework/skills/core/morph-review/SKILL.md +111 -136
  93. package/framework/skills/core/morph-standards/SKILL.md +27 -39
  94. package/framework/skills/core/morph-uiux/SKILL.md +94 -152
  95. package/framework/standards/STANDARDS.json +109 -1219
  96. package/framework/standards/STANDARDS.meta.json +1319 -0
  97. package/framework/standards/ai-agents/agent-archetypes.md +2 -2
  98. package/framework/standards/ai-agents/agent-session.md +1 -1
  99. package/framework/standards/ai-agents/conversational-agent-with-phases.md +4 -4
  100. package/framework/standards/ai-agents/durable-workflows-hitl.md +3 -3
  101. package/framework/standards/ai-agents/evals-with-cache.md +1 -2
  102. package/framework/standards/ai-agents/guardrails.md +1 -1
  103. package/framework/standards/ai-agents/multi-agent-patterns.md +2 -2
  104. package/framework/standards/ai-agents/observability-patterns.md +1 -1
  105. package/framework/standards/ai-agents/production.md +1 -1
  106. package/framework/standards/ai-agents/prompt-sources.md +2 -2
  107. package/framework/standards/ai-agents/providers/model-registry.md +1 -1
  108. package/framework/standards/ai-agents/rag-custom-pgvector.md +2 -2
  109. package/framework/standards/ai-agents/setup.md +3 -3
  110. package/framework/standards/ai-agents/sweet-spot.md +2 -2
  111. package/framework/standards/ai-agents/tool-adapters.md +0 -2
  112. package/framework/standards/ai-agents/vector-data-extensions.md +4 -4
  113. package/framework/standards/ai-agents/workflows.md +1 -1
  114. package/framework/standards/architecture/code-comments.md +7 -7
  115. package/framework/standards/architecture/vertical-slice/vertical-slice.md +1 -1
  116. package/framework/standards/backend/api/validation.md +1 -1
  117. package/framework/standards/backend/dotnet/vsa-handler-patterns.md +5 -5
  118. package/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +1 -1
  119. package/framework/standards/backend/integrations/neon-auth/neon-auth.md +2 -2
  120. package/framework/standards/data/nosql/cache/redis.md +1 -1
  121. package/framework/standards/data/nosql/cosmos-db.md +3 -3
  122. package/framework/standards/frontend/admin-app/forms.md +1 -1
  123. package/framework/standards/frontend/design-system/art-direction.md +88 -0
  124. package/framework/standards/frontend/design-system/premium-finish.md +77 -2
  125. package/framework/standards/infrastructure/neon/neon-pgvector.md +5 -5
  126. package/framework/standards/integration/mcp/mcp-tools.md +7 -7
  127. package/framework/templates/CLAUDE.md.core.template +3 -3
  128. package/framework/templates/README.md +2 -3
  129. package/framework/templates/REGISTRY.json +15 -179
  130. package/framework/templates/docs/plan.md +72 -0
  131. package/framework/templates/docs/ui-mockups.md +4 -0
  132. package/framework/templates/dotnet/ai-kit/README.md +1 -9
  133. package/framework/templates/dotnet/ai-kit/tests/Morph.AiKit.Tests/Morph.AiKit.Tests.csproj +0 -10
  134. package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -1
  135. package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +1 -1
  136. package/framework/templates/meta-prompts/squad-leaders/squad-leader.md +1 -1
  137. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +3 -4
  138. package/package.json +1 -1
  139. package/src/commands/context/context-refresh.js +0 -16
  140. package/src/commands/dashboard/dashboard.js +2 -8
  141. package/src/commands/e2e/e2e.js +18 -105
  142. package/src/commands/graph/affected.js +0 -14
  143. package/src/commands/graph/build.js +11 -50
  144. package/src/commands/graph/explain.js +0 -16
  145. package/src/commands/graph/status.js +1 -12
  146. package/src/commands/mcp/mcp-setup.js +4 -62
  147. package/src/commands/observability/cost.js +17 -111
  148. package/src/commands/observability/telemetry.js +1 -14
  149. package/src/commands/project/branch.js +4 -45
  150. package/src/commands/project/claim.js +4 -48
  151. package/src/commands/project/doctor-procs.js +1 -1
  152. package/src/commands/project/doctor.js +53 -307
  153. package/src/commands/project/env.js +1 -27
  154. package/src/commands/project/fleet.js +6 -35
  155. package/src/commands/project/heavy.js +3 -3
  156. package/src/commands/project/init.js +8 -68
  157. package/src/commands/project/install-plugin-cmd.js +0 -1
  158. package/src/commands/project/setup-infra-cmd.js +2 -1
  159. package/src/commands/project/stack-scan.js +58 -0
  160. package/src/commands/project/standards.js +65 -72
  161. package/src/commands/project/status.js +28 -121
  162. package/src/commands/project/update.js +31 -223
  163. package/src/commands/project/worktree.js +109 -883
  164. package/src/commands/scaffold/scaffold.js +0 -25
  165. package/src/commands/state/advance.js +65 -120
  166. package/src/commands/state/approve.js +87 -229
  167. package/src/commands/state/archive.js +23 -139
  168. package/src/commands/state/auto-approval.js +65 -0
  169. package/src/commands/state/create.js +49 -109
  170. package/src/commands/state/delete.js +11 -63
  171. package/src/commands/state/finish.js +105 -494
  172. package/src/commands/state/gate-check.js +74 -183
  173. package/src/commands/state/gate-decision.js +8 -42
  174. package/src/commands/state/handoff.js +4 -31
  175. package/src/commands/state/list.js +21 -91
  176. package/src/commands/state/report-check.js +134 -338
  177. package/src/commands/state/retype.js +12 -28
  178. package/src/commands/validation/index.js +0 -3
  179. package/src/commands/validation/mutate.js +79 -19
  180. package/src/commands/validation/plan-check.js +81 -0
  181. package/src/commands/validation/validate-feature.js +52 -216
  182. package/src/commands/validation/verify.js +45 -160
  183. package/src/core/paths/output-schema.js +9 -155
  184. package/src/core/state/feature-identity.js +1 -25
  185. package/src/core/state/gate-order.js +2 -30
  186. package/src/core/state/lifecycle-audit.js +8 -100
  187. package/src/core/state/state-manager.js +32 -395
  188. package/src/core/templates/template-registry.js +2 -97
  189. package/src/core/templates/template-renderer.js +13 -93
  190. package/src/core/templates/template-seed.js +21 -0
  191. package/src/core/work-types.js +10 -45
  192. package/src/dashboard/app/App.jsx +1 -8
  193. package/src/dashboard/app/components/ActivityFeed.jsx +2 -8
  194. package/src/dashboard/app/components/CommandPalette.jsx +4 -11
  195. package/src/dashboard/app/components/DetailPanel.jsx +1 -5
  196. package/src/dashboard/app/components/EntityLink.jsx +0 -12
  197. package/src/dashboard/app/components/ErrorBoundary.jsx +1 -8
  198. package/src/dashboard/app/components/KnowledgeMarkdown.jsx +0 -11
  199. package/src/dashboard/app/components/Markdown.jsx +0 -9
  200. package/src/dashboard/app/components/PhaseRail.jsx +0 -11
  201. package/src/dashboard/app/components/SearchFilter.jsx +0 -4
  202. package/src/dashboard/app/components/Sidebar.jsx +0 -5
  203. package/src/dashboard/app/hooks/useMorphQuery.js +1 -11
  204. package/src/dashboard/app/hooks/usePref.js +1 -5
  205. package/src/dashboard/app/lib/format.js +0 -2
  206. package/src/dashboard/app/lib/phases.js +3 -9
  207. package/src/dashboard/app/lib/project.js +0 -12
  208. package/src/dashboard/app/pages/Activity.jsx +1 -1
  209. package/src/dashboard/app/pages/AgentMap.jsx +1 -8
  210. package/src/dashboard/app/pages/FeatureDetail.jsx +139 -133
  211. package/src/dashboard/app/pages/Features.jsx +9 -16
  212. package/src/dashboard/app/pages/Guide.jsx +2 -3
  213. package/src/dashboard/app/pages/HookInspector.jsx +2 -23
  214. package/src/dashboard/app/pages/PhasePipeline.jsx +3 -7
  215. package/src/dashboard/app/pages/Portfolio.jsx +0 -1
  216. package/src/dashboard/app/pages/RulesMap.jsx +1 -16
  217. package/src/dashboard/app/pages/SkillsLibrary.jsx +1 -16
  218. package/src/dashboard/app/pages/Standards.jsx +2 -17
  219. package/src/dashboard/scanner/activity-scanner.js +14 -83
  220. package/src/dashboard/scanner/agents-scanner.js +1 -23
  221. package/src/dashboard/scanner/docs-scanner.js +1 -7
  222. package/src/dashboard/scanner/feature-status.js +2 -5
  223. package/src/dashboard/scanner/features-scanner.js +92 -113
  224. package/src/dashboard/scanner/hooks-scanner.js +5 -28
  225. package/src/dashboard/scanner/index.js +0 -4
  226. package/src/dashboard/scanner/portfolio.js +5 -29
  227. package/src/dashboard/scanner/project-api.js +8 -54
  228. package/src/dashboard/scanner/rules-scanner.js +1 -2
  229. package/src/dashboard/scanner/skills-scanner.js +2 -12
  230. package/src/dashboard/scanner/standards-scanner.js +4 -7
  231. package/src/dashboard/vite-plugin-morph-data.js +5 -19
  232. package/src/lib/ai/ai-checks.js +7 -52
  233. package/src/lib/ai/ai-project-scan.js +14 -108
  234. package/src/lib/ai/code-audit.js +7 -63
  235. package/src/lib/ai/pin-drift.js +8 -51
  236. package/src/lib/ai/registry-audit.js +11 -90
  237. package/src/lib/ci/ci-verify.js +14 -13
  238. package/src/lib/ci/github-ci.js +9 -37
  239. package/src/lib/ci/workflow-scaffold.js +2 -10
  240. package/src/lib/detectors/claude-config-detector.js +13 -74
  241. package/src/lib/detectors/index.js +8 -59
  242. package/src/lib/e2e/compose-env.js +5 -66
  243. package/src/lib/e2e/stack-teardown.js +6 -40
  244. package/src/lib/generators/architecture-scanner.js +18 -156
  245. package/src/lib/generators/handoff-generator.js +37 -112
  246. package/src/lib/generators/scaffold-generator.js +5 -101
  247. package/src/lib/generators/settings-generator.js +11 -122
  248. package/src/lib/git/branch-classifier.js +11 -84
  249. package/src/lib/git/default-branch.js +14 -169
  250. package/src/lib/git/evidence-staleness.js +2 -1
  251. package/src/lib/git/gh.js +2 -17
  252. package/src/lib/git/pending-prs.js +6 -37
  253. package/src/lib/git/pr-files.js +3 -28
  254. package/src/lib/git/pr-index.js +3 -34
  255. package/src/lib/git/tree-fingerprint.js +17 -17
  256. package/src/lib/git/tree-state.js +6 -33
  257. package/src/lib/graph/god-nodes.js +2 -22
  258. package/src/lib/graph/graph-health.js +3 -24
  259. package/src/lib/graph/graph-loader.js +5 -56
  260. package/src/lib/graph/graphify-runtime.js +7 -37
  261. package/src/lib/graph/graphifyignore.js +8 -74
  262. package/src/lib/graph/sanitize.js +16 -136
  263. package/src/lib/heavy/cleanup.js +2 -6
  264. package/src/lib/installers/effects.js +8 -93
  265. package/src/lib/installers/mcp-installer.js +9 -169
  266. package/src/lib/installers/memory-installer.js +8 -33
  267. package/src/lib/installers/templates-reconcile.js +5 -60
  268. package/src/lib/mutation/commands.js +3 -2
  269. package/src/lib/mutation/dotnet-introspection.js +281 -0
  270. package/src/lib/mutation/plan.js +14 -6
  271. package/src/lib/mutation/runner.js +1 -1
  272. package/src/lib/mutation/subset.js +47 -13
  273. package/src/lib/plan/artifact-vocabulary.js +40 -0
  274. package/src/lib/plan/checks.js +208 -0
  275. package/src/lib/plan/plan-parser.js +204 -0
  276. package/src/lib/plan/plan-template.js +18 -0
  277. package/src/lib/projects/registry.js +7 -44
  278. package/src/lib/review-reports.js +204 -0
  279. package/src/lib/risk-detector.js +131 -274
  280. package/src/lib/specs/adr-index.js +38 -85
  281. package/src/lib/specs/design-seed.js +18 -0
  282. package/src/lib/specs/frontmatter.js +31 -0
  283. package/src/lib/specs/gfm-table.js +11 -0
  284. package/src/lib/specs/revocations.js +31 -102
  285. package/src/lib/specs/screen-checklist.js +56 -132
  286. package/src/lib/stack/dotnet-build-ignores.js +43 -0
  287. package/src/lib/stack/stack-profile.js +1 -28
  288. package/src/lib/stack/stack-scan.js +260 -0
  289. package/src/lib/stack-filter.js +4 -27
  290. package/src/lib/standards/registry.js +37 -0
  291. package/src/lib/standards/sections.js +47 -0
  292. package/src/lib/standards/verified-against.js +19 -191
  293. package/src/lib/tasks/eval-node.js +23 -179
  294. package/src/lib/tasks/linux-runner.js +18 -142
  295. package/src/lib/tasks/test-nodes.js +43 -313
  296. package/src/lib/tasks/test-runner.js +107 -447
  297. package/src/lib/telemetry/metrics.js +13 -103
  298. package/src/lib/telemetry/telemetry-reader.js +13 -238
  299. package/src/lib/telemetry/verify-event.js +4 -34
  300. package/src/lib/validators/code-budget/code-budget-validator.js +4 -44
  301. package/src/lib/validators/code-budget/index.js +0 -7
  302. package/src/lib/validators/contracts/contract-compliance-validator.js +4 -26
  303. package/src/lib/validators/contracts/index.js +0 -6
  304. package/src/lib/validators/nextjs/index.js +0 -5
  305. package/src/lib/validators/nextjs/next-component-validator.js +4 -81
  306. package/src/lib/validators/packages/index.js +0 -6
  307. package/src/lib/validators/packages/package-validator.js +6 -56
  308. package/src/lib/validators/reuse/index.js +0 -8
  309. package/src/lib/validators/reuse/reuse-validator.js +24 -137
  310. package/src/lib/validators/reuse/symbol-scanner.js +6 -62
  311. package/src/lib/validators/traceability-check.js +54 -156
  312. package/src/lib/validators/validation-runner.js +20 -125
  313. package/src/lib/validators/verify-runner.js +152 -575
  314. package/src/lib/work-type-detector.js +5 -67
  315. package/src/lib/worktree/docker-audit.js +17 -137
  316. package/src/lib/worktree/env-allocator.js +10 -98
  317. package/src/lib/worktree/feature-truth.js +12 -115
  318. package/src/lib/worktree/finish-backup.js +32 -242
  319. package/src/lib/worktree/fleet-scanner.js +31 -126
  320. package/src/lib/worktree/ignored-triage.js +15 -91
  321. package/src/lib/worktree/vscode-settings.js +2 -3
  322. package/src/lib/worktree/worktree-audit.js +21 -213
  323. package/src/lib/worktree/worktree-include.js +3 -5
  324. package/src/scripts/global-install.js +3 -9
  325. package/src/scripts/install-plugin.js +1 -13
  326. package/src/scripts/setup-infra.js +17 -138
  327. package/src/utils/agents-installer.js +92 -272
  328. package/src/utils/banner.js +4 -25
  329. package/src/utils/claude-md-injector.js +1 -37
  330. package/src/utils/claude-settings-manager.js +1 -87
  331. package/src/utils/file-copier.js +32 -90
  332. package/src/utils/hooks-installer.js +26 -296
  333. package/src/utils/skills-installer.js +4 -102
  334. package/src/utils/version-checker.js +4 -83
  335. package/framework/commands/morph-proposal.md +0 -57
  336. package/framework/evals/trace-schema.md +0 -67
  337. package/framework/hooks/claude-code/core/tasks-json-guard.js +0 -83
  338. package/framework/hooks/claude-code/core/trace-autogen.js +0 -277
  339. package/framework/hooks/git/pre-commit/specs.sh +0 -50
  340. package/framework/hooks/shared/tasks-validator.js +0 -111
  341. package/framework/rules/morph-task-tracking.md +0 -54
  342. package/framework/rules/morph-workflow.md +0 -244
  343. package/framework/schemas/tasks.schema.json +0 -79
  344. package/framework/skills/core/morph-brainstorming/SKILL.md +0 -161
  345. package/framework/skills/core/morph-implement/SKILL.md +0 -194
  346. package/framework/skills/core/morph-proposal/SKILL.md +0 -152
  347. package/framework/skills/core/morph-stack-scan/SKILL.md +0 -145
  348. package/framework/templates/docs/proposal.md +0 -192
  349. package/framework/templates/docs/spec.md +0 -57
  350. package/framework/templates/docs/ui-components.md +0 -52
  351. package/framework/templates/docs/ui-design-system.md +0 -76
  352. package/framework/templates/docs/ui-flows.md +0 -167
  353. package/framework/templates/examples/spec-examples.md +0 -91
  354. package/framework/templates/feature/decisions.md +0 -124
  355. package/framework/templates/feature/recap.md +0 -145
  356. package/framework/templates/tasks.template.json +0 -17
  357. package/src/commands/state/usecase.js +0 -143
  358. package/src/commands/tasks/dag.js +0 -181
  359. package/src/commands/utils/index.js +0 -3
  360. package/src/lib/agents/output-collector.js +0 -76
  361. package/src/lib/detectors/design-system-detector.js +0 -188
  362. package/src/lib/evaluator-report.js +0 -104
  363. package/src/lib/generators/design-system-generator.js +0 -508
  364. package/src/lib/specs/acervo-format.js +0 -70
  365. package/src/lib/specs/acervo-lifecycle.js +0 -264
  366. package/src/lib/specs/done-criteria-check.js +0 -200
  367. package/src/lib/specs/usecase-check.js +0 -301
  368. package/src/lib/specs/usecase-promoter.js +0 -301
  369. package/src/lib/specs/usecase-registry.js +0 -237
  370. package/src/lib/tasks/dispatch-planner.js +0 -319
  371. package/src/lib/tasks/dotnet-test-introspection.js +0 -632
  372. package/src/lib/tasks/mermaid-renderer.js +0 -132
  373. package/src/lib/tasks/task-classifier.js +0 -30
  374. package/src/lib/tasks/task-parser.js +0 -209
  375. package/src/lib/tasks/tasks-json-parser.js +0 -296
  376. package/src/lib/tasks/test-scope.js +0 -597
  377. package/src/utils/agent-id-mapper.js +0 -11
@@ -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_use: Use quando a fase review começar, depois que todas as tasks de tasks.json estiverem com status `done`
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
6
  user-invocable: true
7
- cliVersion: "8.47.0"
7
+ cliVersion: "9.1.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
5
  when_to_use: Use quando precisar consultar um standard específico durante a implementação
6
6
  user-invocable: true
7
- cliVersion: "8.47.0"
7
+ cliVersion: "9.1.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 (mais de 150 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` é um resumo do standard (~700 chars),
28
- não o texto completo; 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)