@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
@@ -3,9 +3,9 @@
3
3
  > **Scope:** frontend-design-system
4
4
  > **Layer:** 3
5
5
  > **Keywords:** premium, polish, typography, film grain, atmosphere, load-in, scrim, legibility over video, accent
6
- > **Load When:** ui-designer active, or the brief asks for a premium or high-end feel
6
+ > **Load When:** ui-designer active (every surface), or the brief asks for a premium or high-end feel
7
7
 
8
- **Verified against:** Production landing pages, CSS-only techniques, no runtime dependency. Last-verified: 2026-08-21.
8
+ **Verified against:** Production landing pages, CSS-only techniques, no runtime dependency; app patterns from an approved login prototype (2026-10-06). Last-verified: 2026-10-06.
9
9
 
10
10
  ---
11
11
 
@@ -148,6 +148,78 @@ Finish with fresh eyes: open the page as if you were the client. Whatever looks
148
148
 
149
149
  ---
150
150
 
151
+ ## Section 8: Patterns For App Screens
152
+
153
+ The finish is not only for marketing pages. Login, onboarding, the first screen after sign-up, an empty state and a success moment are brand moments inside the product, and a data screen also has to look designed: elegant density, illustrated empty states, skeletons with shimmer, transitions between states. These patterns come from an app login that was approved on first sight after a plain one was rejected.
154
+
155
+ ### Bottom sheet on mobile
156
+
157
+ On a phone the form lives in a sheet anchored to the bottom, inside the thumb zone, with the brand scene above it. Never the desktop card centered and shrunk.
158
+
159
+ ```css
160
+ .sheet {
161
+ position: fixed; inset: auto 0 0 0;
162
+ padding: 12px 20px calc(20px + env(safe-area-inset-bottom));
163
+ border-radius: 24px 24px 0 0;
164
+ background: var(--surface);
165
+ box-shadow: 0 -12px 40px color-mix(in oklab, var(--brand) 18%, transparent);
166
+ }
167
+ .sheet::before {
168
+ content: ''; display: block; width: 36px; height: 4px; margin: 0 auto 16px;
169
+ border-radius: 2px; background: var(--border);
170
+ }
171
+ .sheet button, .sheet input { min-height: 44px; }
172
+ ```
173
+
174
+ ### Stories-style progress
175
+
176
+ A sequence of scenes reads like stories: thin segmented bars at the top, each filling while its scene is on. One keyframe, the delay per segment, and the scene swap keyed to the same delays.
177
+
178
+ ```css
179
+ .stories { display: flex; gap: 4px; }
180
+ .stories span { flex: 1; height: 3px; border-radius: 2px; background: color-mix(in oklab, var(--fg) 20%, transparent); overflow: hidden; }
181
+ .stories span::after {
182
+ content: ''; display: block; height: 100%; background: var(--fg);
183
+ transform: scaleX(0); transform-origin: left;
184
+ animation: fill var(--beat) linear forwards;
185
+ animation-delay: calc(var(--i) * var(--beat));
186
+ }
187
+ @keyframes fill { to { transform: scaleX(1); } }
188
+ ```
189
+
190
+ ### Synchronized highlight by `animation-delay`
191
+
192
+ When a scene card lights up while its story bar runs, both share `--i` and `--beat`. No JavaScript timer: the browser keeps them in step, and pausing is one `animation-play-state: paused` on the parent.
193
+
194
+ ### Scene cards without real data
195
+
196
+ A card that illustrates the product cycle shows shapes, icons and labels, never a metric. A made-up number on a real screen reads as a real number ("R$ 12.430 recovered") and becomes a claim nobody can back. Use bars without values, avatars without names, a check without a count.
197
+
198
+ ### Dot grid faded with `mask-image`
199
+
200
+ Texture for a hero or a sheet backdrop, cheaper than an image and on brand:
201
+
202
+ ```css
203
+ .dots {
204
+ background-image: radial-gradient(color-mix(in oklab, var(--fg) 22%, transparent) 1px, transparent 1px);
205
+ background-size: 16px 16px;
206
+ mask-image: radial-gradient(ellipse at 50% 30%, #000 30%, transparent 75%);
207
+ }
208
+ ```
209
+
210
+ ### Static version for reduced motion
211
+
212
+ `prefers-reduced-motion: reduce` gets a composed still frame (the best scene, every bar full, the highlight on), not the first frame of a stopped animation.
213
+
214
+ ```css
215
+ @media (prefers-reduced-motion: reduce) {
216
+ .stories span::after { animation: none; transform: scaleX(1); }
217
+ .scene { animation: none; opacity: 1; }
218
+ }
219
+ ```
220
+
221
+ ---
222
+
151
223
  ## Checklist
152
224
 
153
225
  - [ ] Display font chosen from the brand, not from stack defaults or the AI-tell list
@@ -157,4 +229,7 @@ Finish with fresh eyes: open the page as if you were the client. Whatever looks
157
229
  - [ ] Directional scrim plus text-shadow on every text-over-media block
158
230
  - [ ] Accent used in three places or fewer
159
231
  - [ ] Details swept: scrollbar, selection, hairlines, hover micro-transitions
232
+ - [ ] App screen: mobile designed on its own (bottom sheet, thumb zone, 44px targets), never the desktop stacked
233
+ - [ ] No invented number or data on a real screen
234
+ - [ ] Reduced motion gets a composed static frame
160
235
  - [ ] Fresh-eyes pass done, and it does not read as a template
@@ -19,7 +19,7 @@ Stack: .NET VSA + Neon Serverless Postgres. For the end-to-end RAG pipeline (ing
19
19
  - ALWAYS call `UseVector()` on the `UseNpgsql(...)` options builder (EF Core); `NpgsqlDataSourceBuilder.UseVector()` is only for raw Npgsql
20
20
  - ALWAYS register the `vector` extension in `OnModelCreating` (`HasPostgresExtension("vector")`)
21
21
  - Map vector properties as `Pgvector.Vector` -- EF Core does not map `float[]` or `ReadOnlyMemory<float>` to the `vector` column
22
- - Query through the `ApplicationDbContext` in the slice handler with the `CosineDistance`/`L2Distance`/`MaxInnerProduct` LINQ translations -- no repository class, no raw SQL from C# without a `decisions.md` justification
22
+ - Query through the `ApplicationDbContext` in the slice handler with the `CosineDistance`/`L2Distance`/`MaxInnerProduct` LINQ translations -- no repository class, no raw SQL from C# without a `plan.md` (`## Decisões`) justification
23
23
  - IDs come from the app (`Guid.CreateVersion7()`), never from a `gen_random_uuid()` column default
24
24
 
25
25
  ## Enable pgvector
@@ -39,7 +39,7 @@ CREATE EXTENSION IF NOT EXISTS vector;
39
39
  <PackageReference Include="Pgvector.EntityFrameworkCore" Version="0.3.0" />
40
40
  ```
41
41
 
42
- `Pgvector.EntityFrameworkCore` 0.3.0 requires `Npgsql.EntityFrameworkCore.PostgreSQL` >= 9.0.1 and brings `Pgvector` (the `Vector` type and the raw-Npgsql plugin) transitively. The configuration below maps each column to the snake_case names of `backend/database/postgresql/database.md` (`embedding`, `created_at`) with `HasColumnName`; without it EF creates `"Embedding"`, `"CreatedAt"` and every SQL snippet below would have to quote PascalCase names. (A project that wants this for every entity can add `EFCore.NamingConventions` and `UseSnakeCaseNamingConvention()` once, instead of per column -- a project-wide decision for `decisions.md`.)
42
+ `Pgvector.EntityFrameworkCore` 0.3.0 requires `Npgsql.EntityFrameworkCore.PostgreSQL` >= 9.0.1 and brings `Pgvector` (the `Vector` type and the raw-Npgsql plugin) transitively. The configuration below maps each column to the snake_case names of `backend/database/postgresql/database.md` (`embedding`, `created_at`) with `HasColumnName`; without it EF creates `"Embedding"`, `"CreatedAt"` and every SQL snippet below would have to quote PascalCase names. (A project that wants this for every entity can add `EFCore.NamingConventions` and `UseSnakeCaseNamingConvention()` once, instead of per column -- a project-wide decision for `plan.md` (`## Decisões`).)
43
43
 
44
44
  ### Entity Definition
45
45
 
@@ -196,9 +196,9 @@ public sealed class SearchDocumentsHandler(
196
196
 
197
197
  Storing an embedding is an ordinary EF write in the handler that owns the document: `document.Embedding = new Vector(await embeddings.GenerateVectorAsync(text, cancellationToken: ct));` followed by `SaveChangesAsync`. No `UPDATE ... SET embedding` from C#.
198
198
 
199
- ### SQL Functions (only with a `decisions.md` justification)
199
+ ### SQL Functions (only with a `plan.md` (`## Decisões`) justification)
200
200
 
201
- When the query must live in the database (called from several apps, or a hybrid score the LINQ translation cannot express), a SQL function is acceptable -- record why in `decisions.md`, call it through EF Core with interpolated parameters, and keep the same distance rules:
201
+ When the query must live in the database (called from several apps, or a hybrid score the LINQ translation cannot express), a SQL function is acceptable -- record why in `plan.md` (`## Decisões`), call it through EF Core with interpolated parameters, and keep the same distance rules:
202
202
 
203
203
  ```sql
204
204
  CREATE OR REPLACE FUNCTION match_documents(
@@ -218,7 +218,7 @@ $$;
218
218
 
219
219
  ## Hybrid Search (Vector + Full-Text)
220
220
 
221
- Blends the vector score with `ts_rank`. Same rule as above: a SQL function, justified in `decisions.md`.
221
+ Blends the vector score with `ts_rank`. Same rule as above: a SQL function, justified in `plan.md` (`## Decisões`).
222
222
 
223
223
  ```sql
224
224
  CREATE OR REPLACE FUNCTION hybrid_search(
@@ -195,14 +195,14 @@ Fallback: WebSearch for library capabilities.
195
195
 
196
196
  | Tool | Use Case | Example |
197
197
  |------|----------|---------|
198
- | **GitHub CLI (`gh`)** | Create issues from tasks, link to milestone | `gh issue create` (Bash) |
198
+ | **GitHub CLI (`gh`)** | Create issues from slices, link to milestone | `gh issue create` (Bash) |
199
199
  | **Context7** | Estimate complexity based on library docs | `mcp__context7__query-docs()` |
200
200
 
201
201
  ```bash
202
- # Create GitHub issues from tasks.json (if team uses GitHub Projects)
203
- # — one `gh issue create` per task, iterating tasks.json:
204
- gh issue create --title "T001: Create Entity Lead" \
205
- --body "description + doneCriteria da task" \
202
+ # Create GitHub issues from the plan's slices (if team uses GitHub Projects)
203
+ # — one `gh issue create` per slice of .morph/features/{f}/2-plan/checks.json:
204
+ gh issue create --title "F1: Create Entity Lead" \
205
+ --body "fatia F1 do plan.md + cenários que ela cobre" \
206
206
  --label "backend" --milestone "feature-x"
207
207
  ```
208
208
 
@@ -234,7 +234,7 @@ psql $(neonctl connection-string) -c "SELECT column_name, data_type FROM informa
234
234
  psql $(neonctl connection-string) -c "SELECT policyname, cmd, qual FROM pg_policies WHERE tablename = 'leads'"
235
235
  ```
236
236
 
237
- Look up the API while coding, then smoke test the deployed feature: the snapshot shows whether the page renders, the console messages catch JavaScript errors and failed API calls, and the screenshot goes to `recap.md`. Vercel covers deployment status, logs and environment variables.
237
+ Look up the API while coding, then smoke test the deployed feature: the snapshot shows whether the page renders, the console messages catch JavaScript errors and failed API calls, and the screenshot goes to the slice report (`3-implement/reports/F{n}.md`). Vercel covers deployment status, logs and environment variables.
238
238
 
239
239
  ```javascript
240
240
  const docs = await mcp__context7__query-docs({
@@ -329,7 +329,7 @@ await mcp__playwright__browser_file_upload({ ref: "s1e20", paths: ["/path/to/fil
329
329
  | Implement (7) | Smoke test deployed features | `browser_navigate` + `browser_click` + `browser_snapshot` |
330
330
  | Implement (7) | Verify form flows end-to-end | `browser_fill_form` + `browser_click` + `browser_snapshot` |
331
331
  | Implement (7) | Check console errors after deploy | `browser_navigate` + `browser_console_messages` |
332
- | Implement (7) | Screenshot for recap.md | `browser_take_screenshot` |
332
+ | Implement (7) | Screenshot for the slice report | `browser_take_screenshot` |
333
333
 
334
334
  ---
335
335
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  VSA + .NET 10 + EF Core + Neon (Postgres) + Microsoft Agent Framework + Next.js (App Router) + Tailwind + Framer Motion + Shadcn + Hangfire (quando necessário).
8
8
 
9
- Padrões proibidos por padrão: `Guid.NewGuid()` (use `Guid.CreateVersion7()`), classes não-sealed sem justificativa, exceptions como fluxo de controle, camada de Service/Manager entre handler e dados, repository genérico (`IRepository<T>`/`IUnitOfWork`), SQL cru sem justificativa. Acesso a dados: `ApplicationDbContext` direto no slice (`DbSet<T>` já é repository, `DbContext` já é unit of work); para concorrência ou SQL específico, store dedicado hand-written com justificativa em `decisions.md`.
9
+ Padrões proibidos por padrão: `Guid.NewGuid()` (use `Guid.CreateVersion7()`), classes não-sealed sem justificativa, exceptions como fluxo de controle, camada de Service/Manager entre handler e dados, repository genérico (`IRepository<T>`/`IUnitOfWork`), SQL cru sem justificativa. Acesso a dados: `ApplicationDbContext` direto no slice (`DbSet<T>` já é repository, `DbContext` já é unit of work); para concorrência ou SQL específico, store dedicado hand-written com justificativa em `plan.md` (`## Decisões`).
10
10
 
11
11
  ## Harness
12
12
 
@@ -18,5 +18,5 @@ morph-spec NLH — leia `.morph/framework/MORPH.md` ao iniciar cada sessão. Em
18
18
 
19
19
  ## Slash commands
20
20
 
21
- - `/morph-proposal {feature}` — entendimento de negócio + use cases, spec e tasks (Gates 1 e 2)
22
- - `/morph-apply {feature}` — execução autônoma das tarefas + review (Gate 3)
21
+ - `/morph-plan {feature}` — entrevista, `plan.md`, `plan-check` e gate do plano
22
+ - `/morph-apply {feature}` — fatias do plano, `verify` e review (Gate 3)
@@ -18,8 +18,7 @@ through the registry, and this README never repeats a path the registry already
18
18
 
19
19
  ```
20
20
  framework/templates/
21
- ├── docs/ # Phase documents (proposal, spec, ui-*)
22
- ├── feature/ # decisions.md, recap.md
21
+ ├── docs/ # plan.md (the plan's single source) and ui-mockups.md
23
22
  ├── context/ # ARCHITECTURE.md, design-system.md
24
23
  │
25
24
  ├── code/ # Code templates, by technology
@@ -38,7 +37,7 @@ framework/templates/
38
37
  ├── integrations/ # asaas-client, asaas-webhook, neon-auth-config
39
38
  ├── ui/ # design-system.css
40
39
  ├── meta-prompts/ # fusion, squad-leaders, validators
41
- ├── examples/ # spec-examples.md, design-system-examples.md
40
+ ├── examples/ # design-system-examples.md
42
41
  └── REGISTRY.json # template metadata — the index every consumer reads
43
42
  ```
44
43
 
@@ -29,84 +29,18 @@
29
29
  ],
30
30
  "templates": [
31
31
  {
32
- "id": "proposal",
32
+ "id": "plan",
33
33
  "kind": "template",
34
- "name": "Feature Proposal",
35
- "path": "docs/proposal.md",
36
- "location": "framework",
37
- "category": "documentation",
38
- "phase": "proposal",
39
- "required": true,
40
- "description": "Feature proposal with overview, problem statement, solution approach, and cost estimates",
41
- "outputName": "proposal.md",
42
- "placeholders": [
43
- "AUTHOR",
44
- "DATE",
45
- "STACK"
46
- ],
47
- "stackSpecific": false,
48
- "engine": "handlebars",
49
- "deprecated": false,
50
- "technology": "handlebars",
51
- "validatePlaceholders": true
52
- },
53
- {
54
- "id": "spec",
55
- "kind": "template",
56
- "name": "Technical Specification",
57
- "path": "docs/spec.md",
34
+ "name": "Feature Plan",
35
+ "path": "docs/plan.md",
58
36
  "location": "framework",
59
37
  "category": "documentation",
60
38
  "phase": "plan",
61
39
  "required": true,
62
- "description": "Detailed technical spec with architecture, data model, API contracts",
63
- "outputName": "spec.md",
40
+ "description": "Single source of a feature: problem, scenarios (Cn with proof), decisions (ADRs), reuse, slices (Fn) and errata — parsed by morph-spec plan-check into checks.json",
41
+ "outputName": "plan.md",
64
42
  "placeholders": [
65
- "DATE",
66
- "FEATURE_NAME",
67
- "STACK"
68
- ],
69
- "stackSpecific": false,
70
- "engine": "handlebars",
71
- "deprecated": false,
72
- "technology": "handlebars",
73
- "validatePlaceholders": true
74
- },
75
- {
76
- "id": "decisions",
77
- "kind": "template",
78
- "name": "Architecture Decision Records",
79
- "path": "feature/decisions.md",
80
- "location": "framework",
81
- "category": "documentation",
82
- "phase": "plan",
83
- "required": true,
84
- "description": "ADR format for documenting architectural decisions with context, alternatives, consequences",
85
- "outputName": "decisions.md",
86
- "placeholders": [
87
- "DATE"
88
- ],
89
- "stackSpecific": false,
90
- "engine": "handlebars",
91
- "deprecated": false,
92
- "technology": "handlebars",
93
- "validatePlaceholders": true
94
- },
95
- {
96
- "id": "recap",
97
- "kind": "template",
98
- "name": "Feature Recap",
99
- "path": "feature/recap.md",
100
- "location": "framework",
101
- "category": "documentation",
102
- "phase": "implement",
103
- "required": true,
104
- "description": "Post-implementation summary with deliverables, metrics, lessons learned",
105
- "outputName": "recap.md",
106
- "placeholders": [
107
- "DATE",
108
- "FEATURE_NAME",
109
- "STACK"
43
+ "FEATURE_NAME"
110
44
  ],
111
45
  "stackSpecific": false,
112
46
  "engine": "handlebars",
@@ -121,7 +55,7 @@
121
55
  "path": "context/ARCHITECTURE.md",
122
56
  "location": "framework",
123
57
  "category": "context",
124
- "phase": "proposal",
58
+ "phase": "plan",
125
59
  "required": false,
126
60
  "description": "Auto-scanned architecture context with entities, endpoints, pages, components, integrations, database tables, and package versions",
127
61
  "outputName": "ARCHITECTURE.md",
@@ -132,24 +66,6 @@
132
66
  "technology": "handlebars",
133
67
  "validatePlaceholders": true
134
68
  },
135
- {
136
- "id": "spec-examples",
137
- "kind": "template",
138
- "name": "Spec Examples",
139
- "path": "examples/spec-examples.md",
140
- "location": "framework",
141
- "category": "examples",
142
- "phase": null,
143
- "required": false,
144
- "description": "Example technical specs for reference",
145
- "outputName": null,
146
- "placeholders": [],
147
- "stackSpecific": false,
148
- "engine": null,
149
- "deprecated": false,
150
- "technology": null,
151
- "validatePlaceholders": true
152
- },
153
69
  {
154
70
  "id": "design-system-examples",
155
71
  "kind": "template",
@@ -263,7 +179,7 @@
263
179
  "path": "code/dotnet/contracts/README.md",
264
180
  "location": "framework",
265
181
  "category": "documentation",
266
- "phase": "design",
182
+ "phase": "implement",
267
183
  "required": false,
268
184
  "description": "Documentation for contract patterns and usage",
269
185
  "outputName": "README.md",
@@ -284,7 +200,7 @@
284
200
  "path": "code/dotnet/contracts/contracts-vsa.cs",
285
201
  "location": "framework",
286
202
  "category": "code",
287
- "phase": "design",
203
+ "phase": "implement",
288
204
  "required": false,
289
205
  "description": "Feature slice completo: Abstractions, Entity, Errors, e um slice de operação (Request, Response, Validator, Handler, Endpoint). Padrão KanaiyaKatarmal (.NET 10, Minimal APIs, EF Core 10, FluentValidation 12, Scrutor 7).",
290
206
  "outputName": "contracts.cs",
@@ -306,7 +222,7 @@
306
222
  "path": "code/typescript/contracts.ts",
307
223
  "location": "framework",
308
224
  "category": "code",
309
- "phase": "design",
225
+ "phase": "implement",
310
226
  "required": false,
311
227
  "description": "TypeScript type definitions and interfaces",
312
228
  "outputName": "contracts.ts",
@@ -614,71 +530,6 @@
614
530
  "technology": "handlebars",
615
531
  "validatePlaceholders": true
616
532
  },
617
- {
618
- "id": "ui-flows",
619
- "kind": "template",
620
- "name": "UI Flows",
621
- "path": "docs/ui-flows.md",
622
- "location": "framework",
623
- "category": "documentation",
624
- "phase": "uiux",
625
- "required": false,
626
- "description": "User flows and interaction patterns with state diagrams and edge cases",
627
- "outputName": "flows.md",
628
- "placeholders": [
629
- "DATE",
630
- "FEATURE_NAME"
631
- ],
632
- "stackSpecific": false,
633
- "engine": "handlebars",
634
- "deprecated": false,
635
- "technology": "handlebars",
636
- "validatePlaceholders": true
637
- },
638
- {
639
- "id": "ui-components",
640
- "kind": "template",
641
- "name": "UI Components",
642
- "path": "docs/ui-components.md",
643
- "location": "framework",
644
- "category": "documentation",
645
- "phase": "uiux",
646
- "required": false,
647
- "description": "Component specifications mapping UI elements to shadcn/ui components with props and events",
648
- "outputName": "components.md",
649
- "placeholders": [
650
- "DATE",
651
- "FEATURE_NAME",
652
- "STACK"
653
- ],
654
- "stackSpecific": false,
655
- "engine": "handlebars",
656
- "deprecated": false,
657
- "technology": "handlebars",
658
- "validatePlaceholders": true
659
- },
660
- {
661
- "id": "ui-design-system",
662
- "kind": "template",
663
- "name": "UI Design System",
664
- "path": "docs/ui-design-system.md",
665
- "location": "framework",
666
- "category": "documentation",
667
- "phase": "uiux",
668
- "required": false,
669
- "description": "Design system documentation with color palette, typography, spacing, and semantic tokens",
670
- "outputName": "design-system.md",
671
- "placeholders": [
672
- "DATE",
673
- "FEATURE_NAME",
674
- "PROJECT_NAME"
675
- ],
676
- "stackSpecific": false,
677
- "engine": "handlebars",
678
- "deprecated": false,
679
- "technology": "handlebars",
680
- "validatePlaceholders": true
681
- },
682
533
  {
683
534
  "id": "github-workflow-dotnet-build",
684
535
  "kind": "template",
@@ -687,7 +538,7 @@
687
538
  "location": "framework",
688
539
  "category": "infrastructure",
689
540
  "technology": "github-actions",
690
- "phase": "build",
541
+ "phase": "implement",
691
542
  "required": false,
692
543
  "description": "Reusable workflow for building .NET applications with restore, build, test, coverage",
693
544
  "outputName": "dotnet-build.yml",
@@ -711,7 +562,7 @@
711
562
  "location": "framework",
712
563
  "category": "infrastructure",
713
564
  "technology": "github-actions",
714
- "phase": "build",
565
+ "phase": "implement",
715
566
  "required": false,
716
567
  "description": "Reusable workflow for building and pushing Docker images to registry",
717
568
  "outputName": "docker-build-push.yml",
@@ -733,7 +584,7 @@
733
584
  "location": "framework",
734
585
  "category": "infrastructure",
735
586
  "technology": "github-actions",
736
- "phase": "deploy",
587
+ "phase": "implement",
737
588
  "required": false,
738
589
  "description": "Reusable workflow for deploying to Coolify via SSH (API is not publicly exposed)",
739
590
  "outputName": "deploy-coolify.yml",
@@ -755,7 +606,7 @@
755
606
  "location": "framework",
756
607
  "category": "infrastructure",
757
608
  "technology": "github-actions",
758
- "phase": "build",
609
+ "phase": "implement",
759
610
  "required": false,
760
611
  "description": "Composite action for building and pushing Docker images",
761
612
  "outputName": "action.yml",
@@ -777,7 +628,7 @@
777
628
  "location": "framework",
778
629
  "category": "infrastructure",
779
630
  "technology": "github-actions",
780
- "phase": "deploy",
631
+ "phase": "implement",
781
632
  "required": false,
782
633
  "description": "Composite action for polling health endpoint until ready",
783
634
  "outputName": "action.yml",
@@ -1460,21 +1311,6 @@
1460
1311
  "TIMESTAMP"
1461
1312
  ],
1462
1313
  "validatePlaceholders": true
1463
- },
1464
- {
1465
- "id": "tasks-template",
1466
- "kind": "template",
1467
- "consumption": "reference",
1468
- "name": "tasks.json",
1469
- "path": "tasks.template.json",
1470
- "category": "context",
1471
- "phase": null,
1472
- "outputName": null,
1473
- "description": "Initial tasks.json scaffold",
1474
- "engine": "handlebars",
1475
- "deprecated": false,
1476
- "placeholders": [],
1477
- "validatePlaceholders": true
1478
1314
  }
1479
1315
  ]
1480
1316
  }
@@ -0,0 +1,72 @@
1
+ # Plano — {{FEATURE_NAME}}
2
+
3
+ <!-- Fonte única da feature. `morph-spec plan-check {{FEATURE_NAME}}` lê este arquivo e grava 2-plan/checks.json.
4
+ Depois do gate plan, o corpo congela: fato errado sobre o código vai em ## Errata (append-only). -->
5
+
6
+ ## Problema
7
+
8
+ <O que dói hoje, para quem, e como se percebe. Duas a cinco frases.>
9
+
10
+ ## Fora de escopo
11
+
12
+ - <o que esta feature deliberadamente não faz>
13
+
14
+ ## Suposições não confirmadas
15
+
16
+ - <o que foi assumido sem prova; "nenhuma" vale>
17
+
18
+ ## Cenários
19
+
20
+ <!-- Um cenário por comportamento observável. `prova:` é teste | e2e | eval | manual.
21
+ Cenário que fala de arquivo, grep ou texto exige a linha "> Por que artefato:" logo abaixo. -->
22
+
23
+ - **C1** — Dado <estado>, quando <ação>, então <resultado observável>.
24
+ prova: teste
25
+
26
+ ## Decisões
27
+
28
+ ### ADR-001 — <título>
29
+ **Alcance:** feature
30
+
31
+ <Contexto, decisão e consequência. `projeto` quando a decisão vale além desta feature.>
32
+
33
+ ### Conflitos com o acervo
34
+
35
+ <!-- ADR do índice (.morph/specs/adrs/) que este plano contradiz: "nenhum", ou a tabela abaixo fora do bloco.
36
+ O finish aplica cada linha: total retira o ADR do índice; parcial o mantém com o escopo onde ainda vale.
37
+ ```
38
+ | ADR | Mudança | Escopo em que o antigo ainda vale |
39
+ |---|---|---|
40
+ | {feature}/ADR-{nnn} | parcial | <onde o antigo ainda vale> |
41
+ | {feature}/ADR-{nnn} | total | — |
42
+ ```
43
+ -->
44
+
45
+ nenhum
46
+
47
+ ## Arquitetura
48
+
49
+ <Onde o código entra, o que conversa com o quê. Diagrama só se ajudar.>
50
+
51
+ ## Reuso
52
+
53
+ | conceito | veredito | alvo | why |
54
+ |---|---|---|---|
55
+ | <conceito> | REUSAR | <arquivo ou símbolo existente> | |
56
+
57
+ ## Fatias
58
+
59
+ <!-- Uma fatia = uma unidade de entrega (com ou sem dispatch), relatório em 3-implement/reports/Fn.md.
60
+ arquivos ≤ 8; superfície e depende são opcionais; toda Cn é coberta por alguma fatia. -->
61
+
62
+ ### F1 — <título>
63
+ - persona: dotnet-senior
64
+ - standards: <id>
65
+ - arquivos: <caminho/a.cs>, <caminho/b.cs>
66
+ - cobre: C1
67
+
68
+ ## Contrato de implementação
69
+
70
+ <Assinaturas, records, enums e rotas que as fatias precisam honrar.>
71
+
72
+ ## Errata
@@ -18,6 +18,10 @@
18
18
 
19
19
  ## Tela: {Primary Screen}
20
20
 
21
+ **Protótipo:** 1-design/prototipos/{tela}.html
22
+
23
+ O protótipo renderizado é a fonte visual da tela; os prints `{tela}-1280.png` e `{tela}-390.png` ficam ao lado dele, e sem os três arquivos o Gate uiux pausa. O layout em texto abaixo é opcional.
24
+
21
25
  ### Desktop Layout
22
26
 
23
27
  ```
@@ -58,15 +58,7 @@ dotnet test --solution Morph.AiKit.sln -c Release --no-build
58
58
  > do `morph-spec verify`); por isso nenhum chamador repassa a flag. Ao adicionar
59
59
  > testes, suba o piso — `test/framework/ai-kit-ci-packaging.test.js` reprova um
60
60
  > piso que ficou para trás da contagem de `[Fact]`/`[Theory]`.
61
- > **Consequência para o recorte por task:** `--minimum-expected-tests 1` na
62
- > linha de comando não sobrescreve o valor do projeto (medido: o recorte verde
63
- > sai 9 do mesmo jeito), mas a propriedade global do MSBuild sim. Por isso
64
- > `morph-spec verify {f} {task}` estreita este projeto repassando
65
- > `"-p:TestingPlatformCommandLineArguments=…"` com o valor do `.csproj` e o piso
66
- > em 1 — verde sai 0, zero testes segue saindo 8, nada recompila (issue #114).
67
- > Mantenha o piso **nesse** elemento, literal (sem `Condition`, sem `$(…)`, sem
68
- > outra declaração da propriedade em `Directory.Build.*`): em qualquer outra
69
- > forma o recorte volta a rodar o nó inteiro.
61
+
70
62
 
71
63
  > **`dotnet test` precisa rodar COM O CWD DENTRO deste diretório.** O opt-in do
72
64
  > Microsoft.Testing.Platform (que `xunit.v3` 4.x usa) vive em `global.json`, e o
@@ -30,16 +30,6 @@
30
30
  de workflow. Uma unica verdade: nenhum chamador repassa a flag na linha de
31
31
  comando, porque repassa-la duplicaria a opcao.
32
32
 
33
- Consequencia para o recorte por task (`morph-spec verify {f} {task}`): a
34
- mesma opcao com valor 1 na linha de comando NAO sobrescreve o valor do
35
- projeto (medido: o recorte verde sai 9 do mesmo jeito), mas a propriedade
36
- global do MSBuild sim. O recorte estreita este projeto repassando
37
- "-p:TestingPlatformCommandLineArguments=" com ESTE valor e o piso em 1
38
- (issue #114: verde sai 0, zero testes segue saindo 8, nada recompila). Por
39
- isso o piso fica NESTE elemento, literal: sem Condition, sem $(...), sem
40
- outra declaracao da propriedade em Directory.Build.* — em qualquer outra
41
- forma o recorte volta a rodar o no inteiro.
42
-
43
33
  O numero e o total de CASOS EXECUTADOS (275), nao de atributos nem de casos
44
34
  DESCOBERTOS (276): os [Theory] expandem, e um caso IGNORADO nao conta para o piso — a
45
35
  suite descobre 276 e executa 275, porque o semeador da cache exemplar de eval
@@ -78,7 +78,7 @@ Backend deliverables typically include:
78
78
  2. Create migrations before writing service logic
79
79
  3. Implement services with proper unit-testable interfaces
80
80
  4. Wire up API endpoints last (depends on services)
81
- 5. After every 3 tasks, persist completed tasks to `tasks.json` (`status`/`outputs`/`notes` only) and run the checkpoint
81
+ 5. After every 3 slices, write each finished slice's report (`3-implement/reports/F{n}.md`) and run the checkpoint
82
82
  6. If blocked (compilation error, migration conflict), document and continue with next unblocked task
83
83
 
84
84
  ## Report Back When Done
@@ -72,7 +72,7 @@ Frontend deliverables typically include:
72
72
  2. Build reusable sub-components before composing pages
73
73
  3. Wire up API calls/services last (after UI is structured)
74
74
  4. Test each component with loading + error + empty states
75
- 5. After every 3 tasks, persist completed tasks to `tasks.json` (`status`/`outputs`/`notes` only) and run the checkpoint
75
+ 5. After every 3 slices, write each finished slice's report (`3-implement/reports/F{n}.md`) and run the checkpoint
76
76
 
77
77
  ## Report Back When Done
78
78
  Provide a summary of:
@@ -32,7 +32,7 @@ You are a **Squad Leader** in the MORPH-SPEC agent hierarchy.
32
32
  ## How to Work
33
33
  1. Read your standards carefully before starting
34
34
  2. Implement each task in order (respecting dependencies)
35
- 3. After every 3 tasks, persist completed tasks to `tasks.json` (`status`/`outputs`/`notes` only) and run the checkpoint
35
+ 3. After every 3 slices, write each finished slice's report (`3-implement/reports/F{n}.md`) and run the checkpoint
36
36
  4. If blocked, document the blocker and continue with the next unblocked task
37
37
  5. Report completion with: files created, any blockers, checkpoint results
38
38