@polymorphism-tech/morph-spec 4.12.0 → 4.14.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 (316) hide show
  1. package/CLAUDE.md +7 -7
  2. package/README.md +28 -34
  3. package/bin/morph-spec.js +41 -24
  4. package/bin/task-manager.js +962 -1341
  5. package/bin/validate.js +1 -1
  6. package/claude-plugin.json +1 -1
  7. package/docs/CHEATSHEET.md +14 -16
  8. package/docs/QUICKSTART.md +15 -15
  9. package/framework/CLAUDE.md +5 -2
  10. package/framework/agents/README.md +3 -4
  11. package/framework/agents/ai-agents/ai-system-architect.md +6 -10
  12. package/framework/agents/architecture/seo-growth-hacker.md +166 -326
  13. package/framework/agents/architecture/standards-architect.md +21 -31
  14. package/framework/agents/backend/dotnet-senior.md +160 -86
  15. package/framework/agents/backend/ef-modeler.md +2 -6
  16. package/framework/agents/backend/hangfire-orchestrator.md +8 -9
  17. package/framework/agents/backend/ms-agent-expert.md +1 -1
  18. package/framework/agents/frontend/nextjs-expert.md +198 -133
  19. package/framework/agents/frontend/ui-ux-designer.md +226 -267
  20. package/framework/agents/infrastructure/infra-architect.md +191 -27
  21. package/framework/agents/integrations/clerk-auth.md +19 -26
  22. package/framework/agents/integrations/hangfire-integration.md +1 -4
  23. package/framework/agents.json +1084 -2278
  24. package/framework/commands/morph-apply.md +4 -6
  25. package/framework/commands/morph-preflight.md +192 -269
  26. package/framework/commands/morph-proposal.md +210 -238
  27. package/framework/commands/morph-status.md +72 -92
  28. package/framework/commands/morph-troubleshoot.md +6 -13
  29. package/framework/hooks/README.md +1 -6
  30. package/framework/hooks/claude-code/post-tool-use/validator-feedback.js +4 -6
  31. package/framework/hooks/claude-code/pre-compact/save-morph-context.js +12 -7
  32. package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +2 -2
  33. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +2 -2
  34. package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +5 -10
  35. package/framework/hooks/claude-code/session-start/inject-morph-context.js +63 -30
  36. package/framework/hooks/claude-code/session-start/resume-context.js +77 -0
  37. package/framework/hooks/claude-code/statusline.py +4 -5
  38. package/framework/hooks/claude-code/stop/validate-completion.js +4 -4
  39. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +8 -8
  40. package/framework/hooks/shared/compact-restore.js +28 -5
  41. package/framework/hooks/shared/phase-utils.js +4 -8
  42. package/framework/hooks/shared/state-reader.js +34 -3
  43. package/framework/phases.json +162 -200
  44. package/framework/rules/ai-agents-standards.md +15 -0
  45. package/framework/rules/asaas-standards.md +13 -0
  46. package/framework/rules/clerk-standards.md +13 -0
  47. package/framework/rules/csharp-standards.md +8 -4
  48. package/framework/rules/data-standards.md +18 -0
  49. package/framework/rules/dotnet-templates.md +87 -0
  50. package/framework/rules/frontend-standards.md +13 -13
  51. package/framework/rules/hangfire-standards.md +13 -0
  52. package/framework/rules/infrastructure-standards.md +27 -16
  53. package/framework/rules/morph-workflow.md +73 -13
  54. package/framework/rules/nextjs-standards.md +1 -0
  55. package/framework/rules/nextjs-templates.md +40 -0
  56. package/framework/rules/resend-standards.md +12 -0
  57. package/framework/rules/supabase-standards.md +29 -0
  58. package/framework/skills/README.md +6 -8
  59. package/framework/skills/level-0-meta/mcp-registry.json +21 -99
  60. package/framework/{standards/ai-agents/team-orchestration.md → skills/level-0-meta/morph-agent-teams/SKILL.md} +472 -479
  61. package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +28 -1
  62. package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
  63. package/framework/skills/level-0-meta/morph-code-review/SKILL.md +1 -5
  64. package/framework/skills/level-0-meta/morph-code-review/scripts/scan-csharp.mjs +1 -1
  65. package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +23 -41
  66. package/framework/skills/level-0-meta/morph-init/SKILL.md +18 -14
  67. package/framework/skills/level-0-meta/morph-parallel-dispatch/SKILL.md +225 -0
  68. package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +20 -0
  69. package/framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md +4 -8
  70. package/framework/skills/level-0-meta/morph-tool-usage-guide/references/tools-per-phase.md +15 -59
  71. package/framework/skills/level-0-meta/morph-verification-before-completion/SKILL.md +7 -19
  72. package/framework/skills/level-0-meta/morph-verification-before-completion/scripts/check-phase-outputs.mjs +8 -8
  73. package/framework/skills/level-1-workflows/README.md +1 -1
  74. package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +49 -50
  75. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +57 -123
  76. package/framework/skills/level-1-workflows/morph-phase-design/references/architecture-analysis-guide.md +5 -50
  77. package/framework/skills/level-1-workflows/morph-phase-design/references/spec-example.md +1 -1
  78. package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +127 -159
  79. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/code-quality-reviewer-prompt.md +1 -1
  80. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +4 -3
  81. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/spec-reviewer-prompt.md +2 -2
  82. package/framework/skills/level-1-workflows/morph-phase-implement/references/recap-example.md +1 -1
  83. package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +17 -13
  84. package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +22 -40
  85. package/framework/skills/level-1-workflows/morph-phase-tasks/references/task-planning-patterns.md +143 -172
  86. package/framework/skills/level-1-workflows/morph-phase-tasks/references/tasks-example.md +5 -5
  87. package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +57 -77
  88. package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +1 -1
  89. package/framework/squad-templates/backend-only.json +6 -6
  90. package/framework/squad-templates/frontend-only.json +17 -8
  91. package/framework/squad-templates/full-stack.json +29 -24
  92. package/framework/standards/STANDARDS.json +1021 -2369
  93. package/framework/standards/backend/dotnet/fluent-validation-vsa.md +200 -0
  94. package/framework/standards/backend/dotnet/result-pattern.md +213 -0
  95. package/framework/standards/backend/dotnet/scalar-ui.md +172 -0
  96. package/framework/standards/backend/dotnet/scrutor.md +158 -0
  97. package/framework/standards/backend/dotnet/vsa-handler-patterns.md +274 -0
  98. package/framework/standards/frontend/nextjs/motion-patterns.md +1 -1
  99. package/framework/standards/infrastructure/supabase/mcp-setup.md +83 -193
  100. package/framework/standards/integration/mcp/mcp-tools.md +91 -77
  101. package/framework/templates/IDE-SNIPPETS.md +2 -6
  102. package/framework/templates/README.md +709 -814
  103. package/framework/templates/REGISTRY.json +223 -762
  104. package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -0
  105. package/framework/templates/code/dotnet/abstractions/error.cs +60 -0
  106. package/framework/templates/code/dotnet/abstractions/handler.cs +12 -0
  107. package/framework/templates/code/dotnet/abstractions/result.cs +74 -0
  108. package/framework/templates/code/dotnet/backend/repository.cs +148 -141
  109. package/framework/templates/code/dotnet/constants/api-tags.cs +6 -0
  110. package/framework/templates/code/dotnet/exceptions/exception-handler.cs +32 -0
  111. package/framework/templates/code/dotnet/extensions/database-extensions.cs +20 -0
  112. package/framework/templates/code/dotnet/extensions/handler-registration.cs +38 -0
  113. package/framework/templates/code/dotnet/extensions/health-checks.cs +24 -0
  114. package/framework/templates/code/dotnet/extensions/map-endpoints.cs +35 -0
  115. package/framework/templates/code/dotnet/extensions/result-extensions.cs +29 -0
  116. package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -0
  117. package/framework/templates/code/dotnet/feature/entity.cs.hbs +8 -0
  118. package/framework/templates/code/dotnet/feature/errors.cs.hbs +8 -0
  119. package/framework/templates/code/dotnet/feature/handler.cs.hbs +24 -0
  120. package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -0
  121. package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -0
  122. package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -0
  123. package/framework/templates/code/dotnet/jobs/job.cs +21 -17
  124. package/framework/templates/code/dotnet/pipelines/logging-decorator.cs +31 -0
  125. package/framework/templates/code/dotnet/pipelines/validation-decorator.cs +97 -0
  126. package/framework/templates/code/dotnet/test.cs +192 -106
  127. package/framework/templates/context/ARCHITECTURE.md +89 -0
  128. package/framework/templates/context/CONTEXT-FEATURE.md +2 -2
  129. package/framework/templates/context/CONTEXT.md +180 -181
  130. package/framework/templates/context/design-system.md +1 -5
  131. package/framework/templates/docs/onboarding.md +2 -3
  132. package/framework/templates/docs/proposal.md +171 -182
  133. package/framework/templates/docs/spec.md +1 -3
  134. package/framework/templates/docs/ui-components.md +0 -72
  135. package/framework/templates/examples/design-system-examples.md +4 -4
  136. package/framework/templates/feature/decisions.md +0 -66
  137. package/framework/templates/feature/recap.md +1 -2
  138. package/framework/templates/infrastructure/github/README.md +56 -593
  139. package/framework/templates/integrations/clerk-config.cs +0 -41
  140. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  141. package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -2
  142. package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +83 -126
  143. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +2 -2
  144. package/framework/templates/project/validate.js +2 -4
  145. package/framework/templates/ui/design-system.css +1 -1
  146. package/framework/workflows/README.md +8 -8
  147. package/framework/workflows/configs/fast-track.json +51 -0
  148. package/framework/workflows/configs/full.json +68 -0
  149. package/framework/workflows/configs/standard.json +7 -3
  150. package/framework/workflows/docs/STORY-DRIVEN-DEVELOPMENT.md +1 -1
  151. package/framework/workflows/docs/enforcement-pipeline.md +18 -19
  152. package/framework/workflows/docs/full-morph.md +69 -76
  153. package/framework/workflows/docs/standard.md +49 -44
  154. package/framework/workflows/docs/ui-refresh.md +1 -1
  155. package/package.json +3 -3
  156. package/src/commands/agents/dispatch-agents.js +55 -116
  157. package/src/commands/context/context-refresh.js +79 -0
  158. package/src/commands/phase/phase-reset.js +1 -1
  159. package/src/commands/project/doctor.js +10 -32
  160. package/src/commands/project/init.js +12 -0
  161. package/src/commands/project/status.js +6 -12
  162. package/src/commands/scaffold/scaffold.js +131 -0
  163. package/src/commands/scope/escalate.js +1 -1
  164. package/src/commands/state/advance-phase.js +15 -29
  165. package/src/commands/state/state.js +20 -5
  166. package/src/commands/tasks/task.js +0 -30
  167. package/src/commands/validation/validate-feature.js +3 -10
  168. package/src/core/paths/output-schema.js +12 -13
  169. package/src/core/state/phase-state-machine.js +211 -217
  170. package/src/core/state/state-manager.js +9 -9
  171. package/src/lib/agents/agents-manager.js +2 -2
  172. package/src/lib/agents/output-collector.js +1 -2
  173. package/src/lib/detectors/design-system-detector.js +4 -4
  174. package/src/lib/detectors/index.js +1 -11
  175. package/src/lib/generators/architecture-scanner.js +640 -0
  176. package/src/lib/generators/context-generator.js +3 -3
  177. package/src/lib/generators/design-system-generator.js +508 -587
  178. package/src/lib/generators/index.js +12 -10
  179. package/src/lib/generators/metadata-extractor.js +386 -387
  180. package/src/lib/generators/recap-generator.js +4 -4
  181. package/src/lib/generators/scaffold-generator.js +317 -0
  182. package/src/lib/generators/settings-generator.js +0 -1
  183. package/src/lib/phase-chain/phase-validator.js +64 -42
  184. package/src/lib/stack/stack-profile.js +2 -2
  185. package/src/lib/standards/digest-builder.js +72 -285
  186. package/src/lib/tasks/task-parser.js +11 -5
  187. package/src/lib/validators/architecture/architecture-validator.js +259 -387
  188. package/src/lib/validators/content/content-validator.js +287 -287
  189. package/src/lib/validators/css/css-validator.js +340 -352
  190. package/src/lib/validators/packages/package-validator.js +347 -360
  191. package/src/lib/validators/shared/issue-counter.js +14 -18
  192. package/src/lib/validators/validation-runner.js +3 -19
  193. package/src/scripts/setup-infra.js +1 -1
  194. package/src/utils/agents-installer.js +61 -10
  195. package/src/utils/file-copier.js +1 -0
  196. package/src/utils/hooks-installer.js +11 -19
  197. package/src/utils/skills-installer.js +178 -178
  198. package/framework/agents/architecture/prompt-engineer.md +0 -195
  199. package/framework/agents/backend/api-designer.md +0 -106
  200. package/framework/agents/frontend/blazor-builder.md +0 -229
  201. package/framework/agents/frontend/nextjs-ui-specialist.md +0 -218
  202. package/framework/agents/infrastructure/azure-architect.md +0 -150
  203. package/framework/agents/infrastructure/azure-deploy-specialist.md +0 -707
  204. package/framework/agents/infrastructure/bicep-architect.md +0 -132
  205. package/framework/agents/infrastructure/container-specialist.md +0 -137
  206. package/framework/agents/infrastructure/devops-engineer.md +0 -126
  207. package/framework/agents/integrations/azure-identity.md +0 -148
  208. package/framework/agents/quality/code-analyzer.md +0 -239
  209. package/framework/agents/quality/testing-specialist.md +0 -130
  210. package/framework/hooks/claude-code/notification/approval-reminder.js +0 -57
  211. package/framework/hooks/claude-code/post-tool-use/context-refresh.js +0 -109
  212. package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +0 -78
  213. package/framework/index/troubleshooting-index.json +0 -184
  214. package/framework/rules/testing-standards.md +0 -14
  215. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +0 -230
  216. package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +0 -70
  217. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +0 -256
  218. package/framework/skills/level-1-workflows/morph-phase-clarify/references/clarifications-example.md +0 -117
  219. package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +0 -269
  220. package/framework/standards/ai-agents/blazor-ui.md +0 -364
  221. package/framework/standards/architecture/ddd/aggregates.md +0 -120
  222. package/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
  223. package/framework/standards/architecture/ddd/complexity-levels.md +0 -108
  224. package/framework/standards/architecture/ddd/entities.md +0 -99
  225. package/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
  226. package/framework/standards/architecture/ddd/value-objects.md +0 -124
  227. package/framework/standards/backend/api/minimal-api.md +0 -494
  228. package/framework/standards/backend/api/rest.md +0 -492
  229. package/framework/standards/backend/authentication/passkeys.md +0 -428
  230. package/framework/standards/backend/database/ef-core.md +0 -199
  231. package/framework/standards/backend/database/migrations.md +0 -393
  232. package/framework/standards/backend/database/repository-patterns.md +0 -528
  233. package/framework/standards/backend/dotnet/async.md +0 -366
  234. package/framework/standards/backend/dotnet/core.md +0 -117
  235. package/framework/standards/backend/dotnet/di.md +0 -439
  236. package/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  237. package/framework/standards/context/analytics.md +0 -96
  238. package/framework/standards/context/bundles.md +0 -110
  239. package/framework/standards/context/priming.md +0 -78
  240. package/framework/standards/core/architecture.md +0 -185
  241. package/framework/standards/core/coding.md +0 -214
  242. package/framework/standards/core/git-branching-strategy.md +0 -403
  243. package/framework/standards/core/git.md +0 -185
  244. package/framework/standards/core/testing.md +0 -295
  245. package/framework/standards/data/nosql/blob-storage.md +0 -102
  246. package/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  247. package/framework/standards/frontend/blazor/design-checklist.md +0 -222
  248. package/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  249. package/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  250. package/framework/standards/frontend/blazor/html-conversion.md +0 -184
  251. package/framework/standards/frontend/blazor/lifecycle.md +0 -195
  252. package/framework/standards/frontend/blazor/pitfalls.md +0 -198
  253. package/framework/standards/frontend/blazor/state.md +0 -191
  254. package/framework/standards/frontend/design-system/aesthetic-direction.md +0 -266
  255. package/framework/standards/frontend/design-system/design-trends.md +0 -171
  256. package/framework/standards/infrastructure/azure/azure.md +0 -624
  257. package/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  258. package/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  259. package/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  260. package/framework/standards/infrastructure/azure/services/functions.md +0 -486
  261. package/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  262. package/framework/standards/infrastructure/azure/services/storage.md +0 -407
  263. package/framework/standards/infrastructure/vercel/vercel-database.md +0 -106
  264. package/framework/standards/integration/api/graphql.md +0 -91
  265. package/framework/standards/integration/api/grpc.md +0 -114
  266. package/framework/standards/integration/api/rest-design.md +0 -95
  267. package/framework/standards/integration/event-driven/cqrs.md +0 -101
  268. package/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  269. package/framework/standards/integration/event-driven/service-bus.md +0 -95
  270. package/framework/standards/observability/logging.md +0 -131
  271. package/framework/standards/observability/metrics.md +0 -121
  272. package/framework/standards/observability/monitoring.md +0 -114
  273. package/framework/standards/observability/tracing.md +0 -132
  274. package/framework/standards/workflows/parallel-execution.md +0 -112
  275. package/framework/standards/workflows/thread-management.md +0 -113
  276. package/framework/templates/code/dotnet/backend/service.cs +0 -139
  277. package/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  278. package/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  279. package/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  280. package/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  281. package/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
  282. package/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
  283. package/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
  284. package/framework/templates/code/dotnet/frontend/component.razor +0 -239
  285. package/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  286. package/framework/templates/infrastructure/azure/README.md +0 -286
  287. package/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  288. package/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  289. package/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  290. package/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  291. package/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  292. package/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  293. package/framework/templates/infrastructure/azure/deploy.sh +0 -208
  294. package/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  295. package/framework/templates/infrastructure/azure/main.bicep +0 -189
  296. package/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  297. package/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  298. package/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  299. package/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  300. package/framework/templates/infrastructure/azure/storage.bicep +0 -106
  301. package/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  302. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  303. package/framework/templates/integrations/azure-identity-config.cs +0 -288
  304. package/framework/templates/project-structure/dotnet-ddd.md +0 -70
  305. package/framework/templates/saas/subscription.cs +0 -347
  306. package/framework/templates/saas/tenant.cs +0 -338
  307. package/framework/templates/ui/FluentDesignTheme.cs +0 -149
  308. package/framework/templates/ui/MudTheme.cs +0 -281
  309. package/framework/workflows/configs/nodejs-cli.json +0 -40
  310. package/src/commands/standards/context-budget.js +0 -89
  311. package/src/lib/standards/index.js +0 -7
  312. package/src/lib/standards/standards-context-injector.js +0 -302
  313. package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +0 -316
  314. package/src/lib/validators/blazor/blazor-state-validator.js +0 -279
  315. package/src/lib/validators/blazor/blazor-validator.js +0 -369
  316. package/src/lib/validators/blazor/index.js +0 -9
@@ -8,15 +8,13 @@
8
8
  */
9
9
 
10
10
  /** Phase order */
11
- export const PHASE_ORDER = ["proposal","setup","uiux","design","clarify","plan","tasks","implement","sync"];
11
+ export const PHASE_ORDER = ["proposal","uiux","design","plan","tasks","implement","sync"];
12
12
 
13
13
  /** Map phase → allowed output subdirectory */
14
14
  export const PHASE_DIRS = {
15
15
  proposal: '0-proposal',
16
- setup: '0-proposal',
17
- uiux: '2-ui',
18
- design: '1-design',
19
- clarify: '1-design',
16
+ uiux: '1-ui',
17
+ design: '2-design',
20
18
  plan: '3-plan',
21
19
  tasks: '4-tasks',
22
20
  implement: '5-implement',
@@ -28,7 +26,6 @@ export const OUTPUT_PHASE_MAP = {
28
26
  proposal: 'proposal',
29
27
  schemaAnalysis: 'design',
30
28
  spec: 'design',
31
- clarifications: 'clarify',
32
29
  contracts: 'design',
33
30
  contractsTs: 'design',
34
31
  contractsVsa: 'design',
@@ -47,7 +44,6 @@ export const FILENAME_TO_OUTPUT = {
47
44
  'proposal.md': 'proposal',
48
45
  'schema-analysis.md': 'schemaAnalysis',
49
46
  'spec.md': 'spec',
50
- 'clarifications.md': 'clarifications',
51
47
  'contracts.cs': 'contracts',
52
48
  'contracts.ts': 'contractsTs',
53
49
  'contracts-vsa.cs': 'contractsVsa',
@@ -90,7 +86,7 @@ export function extractFeatureName(filePath) {
90
86
  /**
91
87
  * Extract phase subdirectory from a .morph/features/{feature}/{phaseDir}/... path
92
88
  * @param {string} filePath - File path to analyze
93
- * @returns {string|null} Phase directory (e.g., '0-proposal', '1-design') or null
89
+ * @returns {string|null} Phase directory (e.g., '0-proposal', '2-design') or null
94
90
  */
95
91
  export function extractPhaseDir(filePath) {
96
92
  const normalized = filePath.replace(/\\/g, '/');
@@ -110,14 +110,14 @@ export function derivePhaseForFeature(featureName, projectPath) {
110
110
  ['5-implement', 'implement'],
111
111
  ['4-tasks', 'tasks'],
112
112
  ['3-plan', 'plan'],
113
- ['2-ui', 'uiux'],
114
- ['1-design', 'design'],
113
+ ['2-design', 'design'],
114
+ ['1-ui', 'uiux'],
115
115
  ['0-proposal', 'proposal'],
116
116
  ];
117
117
  for (const [folder, phase] of phaseMap) {
118
118
  if (existsSync(join(basePath, folder))) return phase;
119
119
  }
120
- return 'setup';
120
+ return 'proposal';
121
121
  }
122
122
 
123
123
  /**
@@ -181,6 +181,37 @@ export function getOutputs(featureName, projectPath) {
181
181
  * @param {string} [projectPath]
182
182
  * @returns {Array<{type: string, path: string}>}
183
183
  */
184
+ /**
185
+ * Get task statistics directly from taskList (preferred over feature.tasks counters).
186
+ * Excludes expanded tasks from counts, matching calculateProgress() behavior.
187
+ *
188
+ * @param {Object} feature - Feature state object
189
+ * @returns {{ total: number, completed: number, inProgress: number, pending: number }}
190
+ */
191
+ export function getTaskStats(feature) {
192
+ const list = feature?.taskList || [];
193
+ if (list.length > 0) {
194
+ const active = list.filter(t => t.status !== 'expanded');
195
+ return {
196
+ total: active.length,
197
+ completed: active.filter(t => t.status === 'completed').length,
198
+ inProgress: active.filter(t => t.status === 'in_progress').length,
199
+ pending: active.filter(t => t.status === 'pending').length,
200
+ };
201
+ }
202
+ // Fallback: read from legacy counter object
203
+ const tasks = feature?.tasks;
204
+ if (tasks && typeof tasks === 'object' && !Array.isArray(tasks)) {
205
+ return {
206
+ total: tasks.total || 0,
207
+ completed: tasks.completed || 0,
208
+ inProgress: tasks.inProgress || 0,
209
+ pending: tasks.pending || 0,
210
+ };
211
+ }
212
+ return { total: 0, completed: 0, inProgress: 0, pending: 0 };
213
+ }
214
+
184
215
  export function getMissingOutputs(featureName, projectPath) {
185
216
  const feature = getFeature(featureName, projectPath);
186
217
  if (!feature?.outputs) return [];
@@ -1,200 +1,162 @@
1
- {
2
- "version": "1.0.0",
3
- "phases": {
4
- "proposal": {
5
- "id": "proposal",
6
- "index": 0,
7
- "folder": "0-proposal",
8
- "displayName": "Proposal",
9
- "goals": [
10
- "Understand the feature scope",
11
- "Agree on high-level approach",
12
- "Produce initial proposal document"
13
- ],
14
- "requiredOutputs": ["proposal"],
15
- "optionalOutputs": [],
16
- "recommendedMCPs": ["context7"],
17
- "pausePoints": [
18
- { "id": "proposal", "label": "Approve Proposal" }
19
- ],
20
- "agentTiers": [1],
21
- "requiredSkills": [
22
- { "trigger": "beforePhaseStart", "skill": "morph-brainstorming" }
23
- ]
24
- },
25
- "setup": {
26
- "id": "setup",
27
- "index": 1,
28
- "folder": null,
29
- "displayName": "Setup",
30
- "goals": [
31
- "Load project context from .morph/context/",
32
- "Activate relevant agents by tier and keyword",
33
- "Confirm workflow type (fast-track / standard / full-morph)"
34
- ],
35
- "requiredOutputs": [],
36
- "optionalOutputs": [],
37
- "recommendedMCPs": ["github"],
38
- "pausePoints": [],
39
- "agentTiers": [1, 2],
40
- "requiredSkills": []
41
- },
42
- "uiux": {
43
- "id": "uiux",
44
- "index": 1.5,
45
- "folder": "2-ui",
46
- "displayName": "UI/UX Design",
47
- "optional": true,
48
- "goals": [
49
- "Define visual design and design system",
50
- "Create component inventory and style guide",
51
- "Produce wireframes and user flows"
52
- ],
53
- "requiredOutputs": ["uiDesignSystem"],
54
- "optionalOutputs": ["uiMockups", "uiComponents", "uiFlows"],
55
- "recommendedMCPs": ["playwright", "context7"],
56
- "pausePoints": [
57
- { "id": "uiux", "label": "Approve UI/UX Design" }
58
- ],
59
- "agentTiers": [1, 2, 3],
60
- "requiredSkills": [
61
- { "trigger": "beforeArchitecturalDecision", "skill": "morph-brainstorming" },
62
- { "trigger": "onHTMLPrototypeAvailable", "skill": "morph-replicate" },
63
- { "trigger": "beforePhaseComplete", "skill": "morph-frontend-review" }
64
- ]
65
- },
66
- "design": {
67
- "id": "design",
68
- "index": 2,
69
- "folder": "1-design",
70
- "displayName": "Technical Design",
71
- "goals": [
72
- "Write technical specification",
73
- "Define C# contracts and interfaces",
74
- "Analyse schema changes",
75
- "Document architectural decisions"
76
- ],
77
- "requiredOutputs": ["spec", "contracts"],
78
- "optionalOutputs": ["schemaAnalysis", "clarifications", "decisions"],
79
- "recommendedMCPs": ["supabase", "context7", "github"],
80
- "pausePoints": [
81
- { "id": "design", "label": "Approve Design Spec" }
82
- ],
83
- "agentTiers": [1, 2, 3, 4],
84
- "requiredSkills": [
85
- { "trigger": "beforePhaseStart", "skill": "morph-phase-design" },
86
- { "trigger": "beforePhaseStart", "skill": "morph-phase-codebase-analysis" },
87
- { "trigger": "beforeArchitecturalDecision", "skill": "morph-brainstorming" },
88
- { "trigger": "onExternalServiceIntegration", "skill": "morph-simulation-checklist" },
89
- { "trigger": "beforePhaseComplete", "skill": "morph-verification-before-completion" }
90
- ]
91
- },
92
- "clarify": {
93
- "id": "clarify",
94
- "index": 3,
95
- "folder": "1-design",
96
- "displayName": "Clarification",
97
- "goals": [
98
- "Resolve open questions and ambiguities",
99
- "Update spec with clarification decisions",
100
- "Confirm edge cases are handled"
101
- ],
102
- "requiredOutputs": ["clarifications"],
103
- "optionalOutputs": [],
104
- "recommendedMCPs": ["context7", "github"],
105
- "pausePoints": [],
106
- "agentTiers": [1, 2],
107
- "requiredSkills": [
108
- { "trigger": "beforePhaseStart", "skill": "morph-phase-clarify" },
109
- { "trigger": "beforePhaseComplete", "skill": "morph-verification-before-completion" }
110
- ]
111
- },
112
- "plan": {
113
- "id": "plan",
114
- "index": 5,
115
- "folder": "3-plan",
116
- "displayName": "Implementation Plan",
117
- "goals": [
118
- "Create detailed implementation plan with exact file paths and code",
119
- "Define bite-sized TDD tasks with test-first approach",
120
- "Establish execution strategy based on project analysis"
121
- ],
122
- "requiredOutputs": ["plan"],
123
- "optionalOutputs": [],
124
- "recommendedMCPs": ["context7", "github"],
125
- "pausePoints": [
126
- { "id": "plan", "label": "Approve Implementation Plan" }
127
- ],
128
- "agentTiers": [1, 2],
129
- "requiredSkills": [
130
- { "trigger": "beforePhaseStart", "skill": "morph-phase-plan" },
131
- { "trigger": "beforePhaseComplete", "skill": "morph-verification-before-completion" }
132
- ]
133
- },
134
- "tasks": {
135
- "id": "tasks",
136
- "index": 6,
137
- "folder": "4-tasks",
138
- "displayName": "Task Breakdown",
139
- "goals": [
140
- "Break approved spec into numbered, atomic tasks",
141
- "Order tasks by dependency",
142
- "Assign tasks to agent tiers"
143
- ],
144
- "requiredOutputs": ["tasks"],
145
- "optionalOutputs": [],
146
- "recommendedMCPs": ["context7", "github"],
147
- "pausePoints": [
148
- { "id": "tasks", "label": "Approve Task List" }
149
- ],
150
- "agentTiers": [1, 2, 3],
151
- "requiredSkills": [
152
- { "trigger": "onParallelTasksIdentified", "skill": "superpowers:dispatching-parallel-agents" },
153
- { "trigger": "beforePhaseComplete", "skill": "morph-verification-before-completion" }
154
- ]
155
- },
156
- "implement": {
157
- "id": "implement",
158
- "index": 7,
159
- "folder": "5-implement",
160
- "displayName": "Implementation",
161
- "goals": [
162
- "Execute approved tasks in order",
163
- "Follow framework standards at each step",
164
- "Checkpoint every 3 tasks",
165
- "Write implementation recap"
166
- ],
167
- "requiredOutputs": ["recap"],
168
- "optionalOutputs": [],
169
- "recommendedMCPs": ["supabase", "context7", "playwright", "github", "vercel", "docker", "azure"],
170
- "pausePoints": [],
171
- "agentTiers": [1, 2, 3, 4],
172
- "requiredSkills": [
173
- { "trigger": "beforeEachTask", "skill": "superpowers:test-driven-development" },
174
- { "trigger": "beforeTaskDone", "skill": "morph-verification-before-completion" },
175
- { "trigger": "onBugOrUnexpected", "skill": "superpowers:systematic-debugging" },
176
- { "trigger": "afterAllTasks", "skill": "morph-post-implementation" },
177
- { "trigger": "afterAllTasks", "skill": "superpowers:requesting-code-review" },
178
- { "trigger": "beforePR", "skill": "morph-checklist" }
179
- ]
180
- },
181
- "sync": {
182
- "id": "sync",
183
- "index": 8,
184
- "folder": null,
185
- "displayName": "Sync Standards",
186
- "optional": true,
187
- "goals": [
188
- "Update framework standards from feature learnings",
189
- "Capture new patterns to learning library",
190
- "Archive completed feature"
191
- ],
192
- "requiredOutputs": [],
193
- "optionalOutputs": [],
194
- "recommendedMCPs": [],
195
- "pausePoints": [],
196
- "agentTiers": [1],
197
- "requiredSkills": []
198
- }
199
- }
200
- }
1
+ {
2
+ "version": "1.0.0",
3
+ "phases": {
4
+ "proposal": {
5
+ "id": "proposal",
6
+ "index": 0,
7
+ "folder": "0-proposal",
8
+ "displayName": "Proposal",
9
+ "goals": [
10
+ "Understand the feature scope",
11
+ "Agree on high-level approach",
12
+ "Produce initial proposal document"
13
+ ],
14
+ "requiredOutputs": ["proposal"],
15
+ "optionalOutputs": [],
16
+ "recommendedMCPs": ["context7"],
17
+ "pausePoints": [
18
+ { "id": "proposal", "label": "Approve Proposal" }
19
+ ],
20
+ "agentTiers": [1],
21
+ "requiredSkills": [
22
+ { "trigger": "beforePhaseStart", "skill": "morph-brainstorming" }
23
+ ]
24
+ },
25
+ "uiux": {
26
+ "id": "uiux",
27
+ "index": 1,
28
+ "folder": "1-ui",
29
+ "displayName": "UI/UX Design",
30
+ "optional": true,
31
+ "goals": [
32
+ "Define visual design and design system",
33
+ "Create component inventory and style guide",
34
+ "Produce wireframes and user flows"
35
+ ],
36
+ "requiredOutputs": ["uiDesignSystem"],
37
+ "optionalOutputs": ["uiMockups", "uiComponents", "uiFlows"],
38
+ "recommendedMCPs": ["playwright", "context7"],
39
+ "pausePoints": [
40
+ { "id": "uiux", "label": "Approve UI/UX Design" }
41
+ ],
42
+ "agentTiers": [1, 2, 3],
43
+ "requiredSkills": [
44
+ { "trigger": "beforeArchitecturalDecision", "skill": "morph-brainstorming" },
45
+ { "trigger": "beforePhaseComplete", "skill": "morph-frontend-review" }
46
+ ]
47
+ },
48
+ "design": {
49
+ "id": "design",
50
+ "index": 2,
51
+ "folder": "2-design",
52
+ "displayName": "Technical Design",
53
+ "goals": [
54
+ "Write technical specification",
55
+ "Define contracts and interfaces",
56
+ "Analyse schema changes",
57
+ "Document architectural decisions"
58
+ ],
59
+ "requiredOutputs": ["spec", "contracts"],
60
+ "optionalOutputs": ["schemaAnalysis", "decisions"],
61
+ "recommendedMCPs": ["context7", "github"],
62
+ "pausePoints": [
63
+ { "id": "design", "label": "Approve Design Spec" }
64
+ ],
65
+ "agentTiers": [1, 2, 3, 4],
66
+ "requiredSkills": [
67
+ { "trigger": "beforePhaseStart", "skill": "morph-phase-design" },
68
+ { "trigger": "beforePhaseStart", "skill": "morph-phase-codebase-analysis" },
69
+ { "trigger": "beforeArchitecturalDecision", "skill": "morph-brainstorming" },
70
+ { "trigger": "onExternalServiceIntegration", "skill": "morph-simulation-checklist" },
71
+ { "trigger": "beforePhaseComplete", "skill": "morph-verification-before-completion" }
72
+ ]
73
+ },
74
+ "plan": {
75
+ "id": "plan",
76
+ "index": 3,
77
+ "folder": "3-plan",
78
+ "displayName": "Implementation Plan",
79
+ "goals": [
80
+ "Create detailed implementation plan with exact file paths and code",
81
+ "Define bite-sized TDD tasks with test-first approach",
82
+ "Establish execution strategy based on project analysis"
83
+ ],
84
+ "requiredOutputs": ["plan"],
85
+ "optionalOutputs": [],
86
+ "recommendedMCPs": ["context7", "github"],
87
+ "pausePoints": [
88
+ { "id": "plan", "label": "Approve Implementation Plan" }
89
+ ],
90
+ "agentTiers": [1, 2],
91
+ "requiredSkills": [
92
+ { "trigger": "beforePhaseStart", "skill": "morph-phase-plan" },
93
+ { "trigger": "beforePhaseComplete", "skill": "morph-verification-before-completion" }
94
+ ]
95
+ },
96
+ "tasks": {
97
+ "id": "tasks",
98
+ "index": 4,
99
+ "folder": "4-tasks",
100
+ "displayName": "Task Breakdown",
101
+ "goals": [
102
+ "Break approved spec into numbered, atomic tasks",
103
+ "Order tasks by dependency",
104
+ "Assign tasks to agent tiers"
105
+ ],
106
+ "requiredOutputs": ["tasks"],
107
+ "optionalOutputs": [],
108
+ "recommendedMCPs": ["context7", "github"],
109
+ "pausePoints": [
110
+ { "id": "tasks", "label": "Approve Task List" }
111
+ ],
112
+ "agentTiers": [1, 2, 3],
113
+ "requiredSkills": [
114
+ { "trigger": "onParallelTasksIdentified", "skill": "superpowers:dispatching-parallel-agents" },
115
+ { "trigger": "beforePhaseComplete", "skill": "morph-verification-before-completion" }
116
+ ]
117
+ },
118
+ "implement": {
119
+ "id": "implement",
120
+ "index": 5,
121
+ "folder": "5-implement",
122
+ "displayName": "Implementation",
123
+ "goals": [
124
+ "Execute approved tasks in order",
125
+ "Follow framework standards at each step",
126
+ "Checkpoint every 3 tasks",
127
+ "Write implementation recap"
128
+ ],
129
+ "requiredOutputs": ["recap"],
130
+ "optionalOutputs": [],
131
+ "recommendedMCPs": ["context7", "playwright", "github", "vercel"],
132
+ "pausePoints": [],
133
+ "agentTiers": [1, 2, 3, 4],
134
+ "requiredSkills": [
135
+ { "trigger": "beforeEachTask", "skill": "superpowers:test-driven-development" },
136
+ { "trigger": "beforeTaskDone", "skill": "morph-verification-before-completion" },
137
+ { "trigger": "onBugOrUnexpected", "skill": "superpowers:systematic-debugging" },
138
+ { "trigger": "afterAllTasks", "skill": "morph-post-implementation" },
139
+ { "trigger": "afterAllTasks", "skill": "superpowers:requesting-code-review" },
140
+ { "trigger": "beforePR", "skill": "morph-checklist" }
141
+ ]
142
+ },
143
+ "sync": {
144
+ "id": "sync",
145
+ "index": 6,
146
+ "folder": null,
147
+ "displayName": "Sync Standards",
148
+ "optional": true,
149
+ "goals": [
150
+ "Update framework standards from feature learnings",
151
+ "Capture new patterns to learning library",
152
+ "Archive completed feature"
153
+ ],
154
+ "requiredOutputs": [],
155
+ "optionalOutputs": [],
156
+ "recommendedMCPs": [],
157
+ "pausePoints": [],
158
+ "agentTiers": [1],
159
+ "requiredSkills": []
160
+ }
161
+ }
162
+ }
@@ -0,0 +1,15 @@
1
+ ---
2
+ paths:
3
+ - "**/Agents/**"
4
+ - "**/agents/**"
5
+ - "**/*Agent*.cs"
6
+ stacks:
7
+ - dotnet
8
+ ---
9
+
10
+ # Microsoft Agent Framework Standards
11
+
12
+ @.morph/framework/standards/ai-agents/setup.md
13
+ @.morph/framework/standards/ai-agents/workflows.md
14
+ @.morph/framework/standards/ai-agents/production.md
15
+ @.morph/framework/standards/integration/mcp/mcp-tools.md
@@ -0,0 +1,13 @@
1
+ ---
2
+ paths:
3
+ - "**/Payment*/**"
4
+ - "**/Billing/**"
5
+ - "**/Asaas/**"
6
+ - "**/Financial/**"
7
+ stacks:
8
+ - dotnet
9
+ ---
10
+
11
+ # Asaas Payment Integration Standards
12
+
13
+ @.morph/framework/standards/backend/integrations/asaas/asaas-api.md
@@ -0,0 +1,13 @@
1
+ ---
2
+ paths:
3
+ - "**/Auth/**"
4
+ - "**/auth/**"
5
+ - "**/Identity/**"
6
+ - "**/Clerk/**"
7
+ stacks:
8
+ - dotnet
9
+ ---
10
+
11
+ # Clerk Authentication Standards
12
+
13
+ @.morph/framework/standards/backend/integrations/clerk/clerk-auth.md
@@ -4,10 +4,14 @@ paths:
4
4
  - "**/*.csproj"
5
5
  stacks:
6
6
  - dotnet
7
- - blazor
8
7
  ---
9
8
 
10
- # C# and .NET Standards
9
+ # C# and .NET VSA Standards
11
10
 
12
- @.morph/framework/standards/core/coding.md
13
- @.morph/framework/standards/backend/dotnet/core.md
11
+ @.morph/framework/standards/architecture/vertical-slice/vertical-slice.md
12
+ @.morph/framework/standards/backend/dotnet/vsa-handler-patterns.md
13
+ @.morph/framework/standards/backend/dotnet/result-pattern.md
14
+ @.morph/framework/standards/backend/dotnet/fluent-validation-vsa.md
15
+ @.morph/framework/standards/backend/dotnet/scrutor.md
16
+ @.morph/framework/standards/backend/dotnet/scalar-ui.md
17
+ @.morph/framework/standards/backend/api/validation.md
@@ -0,0 +1,18 @@
1
+ ---
2
+ paths:
3
+ - "**/*Cache*.cs"
4
+ - "**/*Redis*.cs"
5
+ - "**/*Cosmos*.cs"
6
+ - "**/*Vector*.cs"
7
+ - "**/*Embedding*.cs"
8
+ - "**/*Rag*.cs"
9
+ stacks:
10
+ - dotnet
11
+ ---
12
+
13
+ # Data & Cache Standards
14
+
15
+ @.morph/framework/standards/data/nosql/cache/redis.md
16
+ @.morph/framework/standards/data/nosql/cosmos-db.md
17
+ @.morph/framework/standards/data/vector-search/rag-chunking.md
18
+ @.morph/framework/standards/backend/database/vector-search-rag.md
@@ -0,0 +1,87 @@
1
+ ---
2
+ paths:
3
+ - "**/*.cs"
4
+ - "**/*.csproj"
5
+ stacks:
6
+ - dotnet
7
+ ---
8
+
9
+ # .NET Code Templates
10
+
11
+ When implementing .NET features, use these templates as reference patterns.
12
+ Read the template file to see the exact pattern, then generate code following it.
13
+
14
+ ## Scaffold (preferred for new slices)
15
+
16
+ **Always use scaffold for new VSA slices — never create feature files manually.**
17
+
18
+ ```bash
19
+ morph-spec scaffold dotnet <feature> <slice-name> [--namespace <ns>] [--dry-run]
20
+ ```
21
+
22
+ Examples:
23
+ ```bash
24
+ morph-spec scaffold dotnet book create-book
25
+ morph-spec scaffold dotnet book get-book-by-id
26
+ morph-spec scaffold dotnet book update-book
27
+ morph-spec scaffold dotnet book delete-book
28
+ morph-spec scaffold dotnet book get-all-books
29
+ ```
30
+
31
+ Generates 7 files: endpoint, handler, request, response, validator + entity, errors (shared at feature level). Entity/errors auto-skipped if they already exist.
32
+
33
+ **Only use `template render` for individual files when adding to an existing slice.**
34
+
35
+ ## VSA Feature Templates (Vertical Slice Architecture)
36
+
37
+ For each new feature slice, follow the patterns in these templates:
38
+
39
+ | Template | Path | Purpose |
40
+ |----------|------|---------|
41
+ | Endpoint | `.morph/framework/templates/code/dotnet/feature/endpoint.cs.hbs` | IApiEndpoint with MapEndpoint() |
42
+ | Handler | `.morph/framework/templates/code/dotnet/feature/handler.cs.hbs` | IHandler<TRequest, TResponse> |
43
+ | Request | `.morph/framework/templates/code/dotnet/feature/request.cs.hbs` | Sealed record DTO |
44
+ | Response | `.morph/framework/templates/code/dotnet/feature/response.cs.hbs` | Sealed record DTO |
45
+ | Validator | `.morph/framework/templates/code/dotnet/feature/validator.cs.hbs` | FluentValidation AbstractValidator |
46
+ | Entity | `.morph/framework/templates/code/dotnet/feature/entity.cs.hbs` | Domain entity |
47
+ | Errors | `.morph/framework/templates/code/dotnet/feature/errors.cs.hbs` | Error factory |
48
+
49
+ ## Base Abstractions (read once per project setup)
50
+
51
+ | Template | Path | Purpose |
52
+ |----------|------|---------|
53
+ | IHandler | `.morph/framework/templates/code/dotnet/abstractions/handler.cs` | Handler interface |
54
+ | Result<T> | `.morph/framework/templates/code/dotnet/abstractions/result.cs` | Railway-oriented result |
55
+ | Error | `.morph/framework/templates/code/dotnet/abstractions/error.cs` | Error types |
56
+ | IApiEndpoint | `.morph/framework/templates/code/dotnet/abstractions/api-endpoint.cs` | Endpoint interface |
57
+
58
+ ## Extensions & Pipeline (read once per project setup)
59
+
60
+ | Template | Path | Purpose |
61
+ |----------|------|---------|
62
+ | Handler Registration | `.morph/framework/templates/code/dotnet/extensions/handler-registration.cs` | Scrutor auto-discovery |
63
+ | Map Endpoints | `.morph/framework/templates/code/dotnet/extensions/map-endpoints.cs` | IApiEndpoint discovery |
64
+ | Result Extensions | `.morph/framework/templates/code/dotnet/extensions/result-extensions.cs` | Match() pattern |
65
+ | Database Config | `.morph/framework/templates/code/dotnet/extensions/database-extensions.cs` | EF Core + Npgsql |
66
+ | Health Checks | `.morph/framework/templates/code/dotnet/extensions/health-checks.cs` | Health endpoints |
67
+ | Validation Decorator | `.morph/framework/templates/code/dotnet/pipelines/validation-decorator.cs` | FluentValidation pipeline |
68
+ | Logging Decorator | `.morph/framework/templates/code/dotnet/pipelines/logging-decorator.cs` | Duration tracking |
69
+ | Exception Handler | `.morph/framework/templates/code/dotnet/exceptions/exception-handler.cs` | ProblemDetails |
70
+ | API Tags | `.morph/framework/templates/code/dotnet/constants/api-tags.cs` | Scalar/Swagger groups |
71
+
72
+ ## Specialized Templates
73
+
74
+ | Template | Path | Purpose |
75
+ |----------|------|---------|
76
+ | Repository | `.morph/framework/templates/code/dotnet/backend/repository.cs` | EF Core repository |
77
+ | Migration | `.morph/framework/templates/code/dotnet/database/migration.cs` | EF Core migration |
78
+ | Hangfire Job | `.morph/framework/templates/code/dotnet/jobs/job.cs` | Background job |
79
+ | MAF Agent | `.morph/framework/templates/code/dotnet/jobs/agent.cs` | MS Agent Framework |
80
+ | Unit Test | `.morph/framework/templates/code/dotnet/test.cs` | xUnit AAA test |
81
+ | Contracts VSA | `.morph/framework/templates/code/dotnet/contracts/contracts-vsa.cs` | Full slice contracts |
82
+
83
+ ## Usage
84
+
85
+ 1. **Read the template** to see the exact pattern
86
+ 2. **Generate code following the same structure** (naming, namespaces, imports)
87
+ 3. Or render via CLI: `morph-spec template render <id> <output> '<variables>'`