@polymorphism-tech/morph-spec 4.5.0 → 4.7.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 (292) hide show
  1. package/CLAUDE.md +77 -56
  2. package/README.md +394 -700
  3. package/docs/ARCHITECTURE.md +331 -0
  4. package/docs/CHEATSHEET.md +221 -0
  5. package/docs/COMMAND-FLOWS.md +368 -0
  6. package/docs/QUICKSTART.md +212 -0
  7. package/docs/examples/order-management/contracts.cs +84 -0
  8. package/docs/examples/order-management/proposal.md +24 -0
  9. package/docs/examples/order-management/spec.md +162 -0
  10. package/docs/plans/2026-02-23-ddd-architecture-refactor.md +1153 -0
  11. package/docs/plans/2026-02-23-ddd-nextsteps.md +682 -0
  12. package/docs/plans/2026-02-23-infra-architect-refactor.md +437 -0
  13. package/docs/plans/2026-02-23-nextjs-code-review-design.md +156 -0
  14. package/docs/plans/2026-02-23-nextjs-code-review-impl.md +1254 -0
  15. package/docs/plans/2026-02-23-nextjs-standards-design.md +149 -0
  16. package/docs/plans/2026-02-23-nextjs-standards-impl.md +1846 -0
  17. package/framework/{skills/level-2-domains → agents}/README.md +14 -14
  18. package/framework/{skills/level-2-domains → agents}/ai-agents/ai-system-architect.md +1 -4
  19. package/framework/{skills/level-2-domains → agents}/architecture/po-pm-advisor.md +1 -2
  20. package/framework/{skills/level-2-domains → agents}/architecture/prompt-engineer.md +1 -2
  21. package/framework/{skills/level-2-domains → agents}/architecture/seo-growth-hacker.md +1 -2
  22. package/framework/{skills/level-2-domains → agents}/architecture/standards-architect.md +159 -162
  23. package/framework/agents/backend/api-designer.md +103 -0
  24. package/framework/{skills/level-2-domains → agents}/backend/dotnet-senior.md +1 -2
  25. package/framework/agents/backend/ef-modeler.md +119 -0
  26. package/framework/{skills/level-2-domains → agents}/backend/hangfire-orchestrator.md +1 -4
  27. package/framework/{skills/level-2-domains → agents}/backend/ms-agent-expert.md +1 -4
  28. package/framework/{skills/level-2-domains → agents}/frontend/blazor-builder.md +1 -4
  29. package/framework/agents/frontend/nextjs-expert.md +118 -0
  30. package/framework/{skills/level-2-domains → agents}/frontend/ui-ux-designer.md +1 -2
  31. package/framework/{skills/level-2-domains → agents}/infrastructure/azure-architect.md +147 -148
  32. package/framework/{skills/level-2-domains → agents}/infrastructure/azure-deploy-specialist.md +1 -2
  33. package/framework/{skills/level-2-domains → agents}/infrastructure/bicep-architect.md +1 -4
  34. package/framework/{skills/level-2-domains → agents}/infrastructure/container-specialist.md +1 -4
  35. package/framework/{skills/level-2-domains → agents}/infrastructure/devops-engineer.md +1 -4
  36. package/framework/agents/infrastructure/infra-architect.md +45 -0
  37. package/framework/{skills/level-2-domains → agents}/integrations/asaas-financial.md +1 -4
  38. package/framework/{skills/level-2-domains → agents}/integrations/azure-identity.md +1 -4
  39. package/framework/{skills/level-2-domains → agents}/integrations/clerk-auth.md +1 -4
  40. package/framework/{skills/level-2-domains → agents}/integrations/hangfire-integration.md +1 -2
  41. package/framework/{skills/level-2-domains → agents}/integrations/resend-email.md +1 -4
  42. package/framework/{skills/level-2-domains → agents}/quality/code-analyzer.md +1 -4
  43. package/framework/{skills/level-2-domains → agents}/quality/testing-specialist.md +1 -4
  44. package/framework/agents.json +1145 -278
  45. package/framework/hooks/claude-code/statusline.py +384 -85
  46. package/framework/hooks/shared/phase-utils.js +129 -129
  47. package/framework/rules/frontend-standards.md +0 -3
  48. package/framework/rules/nextjs-standards.md +17 -0
  49. package/framework/skills/README.md +66 -0
  50. package/framework/skills/level-0-meta/{brainstorming.md → brainstorming/SKILL.md} +3 -1
  51. package/framework/skills/level-0-meta/brainstorming/references/proposal-example.md +138 -0
  52. package/framework/skills/level-0-meta/{code-review.md → code-review/SKILL.md} +3 -2
  53. package/framework/skills/level-0-meta/code-review/references/review-example.md +164 -0
  54. package/framework/skills/level-0-meta/code-review/scripts/scan-csharp.mjs +121 -0
  55. package/framework/skills/level-0-meta/code-review-nextjs/SKILL.md +147 -0
  56. package/framework/skills/level-0-meta/code-review-nextjs/references/review-example-nextjs.md +254 -0
  57. package/framework/skills/level-0-meta/{morph-checklist.md → morph-checklist/SKILL.md} +2 -5
  58. package/framework/skills/{level-1-workflows/morph-replicate.md → level-0-meta/morph-replicate/SKILL.md} +6 -7
  59. package/framework/skills/level-0-meta/{simulation-checklist.md → simulation-checklist/SKILL.md} +3 -6
  60. package/framework/skills/level-0-meta/{tool-usage-guide.md → tool-usage-guide/SKILL.md} +4 -5
  61. package/framework/skills/level-0-meta/{verification-before-completion.md → verification-before-completion/SKILL.md} +3 -1
  62. package/framework/skills/level-0-meta/verification-before-completion/scripts/check-phase-outputs.mjs +110 -0
  63. package/framework/skills/level-1-workflows/{phase-clarify.md → phase-clarify/SKILL.md} +3 -3
  64. package/framework/skills/level-1-workflows/phase-clarify/references/clarifications-example.md +117 -0
  65. package/framework/skills/level-1-workflows/{phase-codebase-analysis.md → phase-codebase-analysis/SKILL.md} +2 -3
  66. package/framework/skills/level-1-workflows/{phase-design.md → phase-design/SKILL.md} +46 -182
  67. package/framework/skills/level-1-workflows/phase-design/references/spec-example.md +253 -0
  68. package/framework/skills/level-1-workflows/{phase-implement.md → phase-implement/SKILL.md} +3 -3
  69. package/framework/skills/level-1-workflows/phase-implement/references/recap-example.md +132 -0
  70. package/framework/skills/level-1-workflows/{phase-setup.md → phase-setup/SKILL.md} +2 -3
  71. package/framework/skills/level-1-workflows/{phase-tasks.md → phase-tasks/SKILL.md} +42 -3
  72. package/framework/skills/level-1-workflows/phase-tasks/references/tasks-example.md +231 -0
  73. package/framework/skills/level-1-workflows/phase-tasks/scripts/validate-tasks.mjs +112 -0
  74. package/framework/skills/level-1-workflows/{phase-uiux.md → phase-uiux/SKILL.md} +2 -3
  75. package/framework/standards/STANDARDS.json +121 -0
  76. package/framework/standards/architecture/ddd/bounded-contexts.md +105 -0
  77. package/framework/standards/architecture/ddd/complexity-levels.md +108 -0
  78. package/framework/standards/architecture/ddd/ubiquitous-language.md +58 -0
  79. package/framework/standards/frontend/nextjs/app-router.md +123 -0
  80. package/framework/standards/frontend/nextjs/components.md +132 -0
  81. package/framework/standards/frontend/nextjs/data-fetching.md +126 -0
  82. package/framework/standards/frontend/nextjs/forms.md +128 -0
  83. package/framework/standards/frontend/nextjs/naming-conventions.md +67 -0
  84. package/framework/standards/frontend/nextjs/project-structure.md +102 -0
  85. package/framework/standards/frontend/nextjs/state-management.md +72 -0
  86. package/framework/standards/frontend/nextjs/testing.md +111 -0
  87. package/framework/templates/REGISTRY.json +538 -142
  88. package/framework/templates/code/dotnet/contracts/contracts-level1.cs +69 -0
  89. package/framework/templates/code/dotnet/contracts/contracts-level2.cs +86 -0
  90. package/framework/templates/code/dotnet/contracts/contracts-level3.cs +41 -0
  91. package/framework/templates/docs/spec.md +49 -0
  92. package/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +43 -0
  93. package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -0
  94. package/framework/templates/frontend/nextjs/env.mjs.hbs +32 -0
  95. package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -0
  96. package/framework/templates/frontend/nextjs/page.tsx.hbs +22 -0
  97. package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -0
  98. package/framework/templates/frontend/nextjs/use-feature.ts.hbs +54 -0
  99. package/framework/templates/project-structure/dotnet-ddd.md +70 -0
  100. package/framework/workflows/docs/enforcement-pipeline.md +2 -1
  101. package/package.json +1 -1
  102. package/scripts/scan-nextjs.mjs +169 -0
  103. package/src/commands/project/doctor.js +52 -1
  104. package/src/commands/project/init.js +19 -65
  105. package/src/commands/project/update.js +7 -63
  106. package/src/lib/detectors/claude-config-detector.js +1 -3
  107. package/src/lib/standards/standards-context-injector.js +5 -0
  108. package/src/lib/validators/nextjs/index.js +6 -0
  109. package/src/lib/validators/nextjs/next-component-validator.js +181 -0
  110. package/src/lib/validators/validation-runner.js +5 -0
  111. package/src/utils/agents-installer.js +16 -4
  112. package/src/utils/skills-installer.js +59 -15
  113. package/.morph/.morphversion +0 -5
  114. package/.morph/analytics/threads-log.jsonl +0 -44
  115. package/.morph/config/config.json +0 -8
  116. package/.morph/context/README.md +0 -17
  117. package/.morph/framework/agents.json +0 -948
  118. package/.morph/framework/standards/STANDARDS.json +0 -812
  119. package/.morph/framework/standards/ai-agents/blazor-ui.md +0 -364
  120. package/.morph/framework/standards/ai-agents/production.md +0 -415
  121. package/.morph/framework/standards/ai-agents/setup.md +0 -418
  122. package/.morph/framework/standards/ai-agents/team-orchestration.md +0 -479
  123. package/.morph/framework/standards/ai-agents/workflows.md +0 -354
  124. package/.morph/framework/standards/architecture/ddd/aggregates.md +0 -120
  125. package/.morph/framework/standards/architecture/ddd/entities.md +0 -99
  126. package/.morph/framework/standards/architecture/ddd/value-objects.md +0 -124
  127. package/.morph/framework/standards/backend/api/minimal-api.md +0 -494
  128. package/.morph/framework/standards/backend/api/rest.md +0 -492
  129. package/.morph/framework/standards/backend/api/validation.md +0 -88
  130. package/.morph/framework/standards/backend/authentication/passkeys.md +0 -428
  131. package/.morph/framework/standards/backend/database/ef-core.md +0 -199
  132. package/.morph/framework/standards/backend/database/migrations.md +0 -393
  133. package/.morph/framework/standards/backend/database/postgresql/database.md +0 -352
  134. package/.morph/framework/standards/backend/database/repository-patterns.md +0 -528
  135. package/.morph/framework/standards/backend/database/vector-search-rag.md +0 -541
  136. package/.morph/framework/standards/backend/dotnet/async.md +0 -366
  137. package/.morph/framework/standards/backend/dotnet/core.md +0 -117
  138. package/.morph/framework/standards/backend/dotnet/di.md +0 -439
  139. package/.morph/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  140. package/.morph/framework/standards/backend/integrations/asaas/asaas-api.md +0 -216
  141. package/.morph/framework/standards/backend/integrations/clerk/clerk-auth.md +0 -290
  142. package/.morph/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -350
  143. package/.morph/framework/standards/backend/integrations/resend/resend-email.md +0 -385
  144. package/.morph/framework/standards/context/analytics.md +0 -96
  145. package/.morph/framework/standards/context/bundles.md +0 -110
  146. package/.morph/framework/standards/context/priming.md +0 -78
  147. package/.morph/framework/standards/core/architecture.md +0 -185
  148. package/.morph/framework/standards/core/coding.md +0 -214
  149. package/.morph/framework/standards/core/git-branching-strategy.md +0 -403
  150. package/.morph/framework/standards/core/git.md +0 -185
  151. package/.morph/framework/standards/core/testing.md +0 -295
  152. package/.morph/framework/standards/data/nosql/blob-storage.md +0 -102
  153. package/.morph/framework/standards/data/nosql/cache/redis.md +0 -97
  154. package/.morph/framework/standards/data/nosql/cosmos-db.md +0 -118
  155. package/.morph/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  156. package/.morph/framework/standards/data/vector-search/rag-chunking.md +0 -104
  157. package/.morph/framework/standards/frontend/blazor/design-checklist.md +0 -222
  158. package/.morph/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  159. package/.morph/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  160. package/.morph/framework/standards/frontend/blazor/html-conversion.md +0 -184
  161. package/.morph/framework/standards/frontend/blazor/lifecycle.md +0 -195
  162. package/.morph/framework/standards/frontend/blazor/pitfalls.md +0 -198
  163. package/.morph/framework/standards/frontend/blazor/state.md +0 -191
  164. package/.morph/framework/standards/frontend/design-system/animations.md +0 -151
  165. package/.morph/framework/standards/frontend/design-system/naming.md +0 -64
  166. package/.morph/framework/standards/frontend/nextjs/nextjs-patterns.md +0 -198
  167. package/.morph/framework/standards/infrastructure/azure/azure.md +0 -624
  168. package/.morph/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  169. package/.morph/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  170. package/.morph/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  171. package/.morph/framework/standards/infrastructure/azure/services/functions.md +0 -486
  172. package/.morph/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  173. package/.morph/framework/standards/infrastructure/azure/services/storage.md +0 -407
  174. package/.morph/framework/standards/infrastructure/docker/easypanel-deploy.md +0 -196
  175. package/.morph/framework/standards/infrastructure/supabase/mcp-setup.md +0 -252
  176. package/.morph/framework/standards/infrastructure/supabase/supabase-auth.md +0 -176
  177. package/.morph/framework/standards/infrastructure/supabase/supabase-pgvector.md +0 -169
  178. package/.morph/framework/standards/infrastructure/supabase/supabase-rls.md +0 -184
  179. package/.morph/framework/standards/infrastructure/supabase/supabase-storage.md +0 -153
  180. package/.morph/framework/standards/integration/api/graphql.md +0 -91
  181. package/.morph/framework/standards/integration/api/grpc.md +0 -114
  182. package/.morph/framework/standards/integration/api/rest-design.md +0 -95
  183. package/.morph/framework/standards/integration/event-driven/cqrs.md +0 -101
  184. package/.morph/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  185. package/.morph/framework/standards/integration/event-driven/service-bus.md +0 -95
  186. package/.morph/framework/standards/integration/mcp/mcp-tools.md +0 -384
  187. package/.morph/framework/standards/observability/logging.md +0 -131
  188. package/.morph/framework/standards/observability/metrics.md +0 -121
  189. package/.morph/framework/standards/observability/monitoring.md +0 -114
  190. package/.morph/framework/standards/observability/tracing.md +0 -132
  191. package/.morph/framework/standards/workflows/parallel-execution.md +0 -112
  192. package/.morph/framework/standards/workflows/thread-management.md +0 -113
  193. package/.morph/framework/templates/.idea/morph-templates.xml +0 -92
  194. package/.morph/framework/templates/.vscode/morph-templates.code-snippets +0 -186
  195. package/.morph/framework/templates/IDE-SNIPPETS.md +0 -266
  196. package/.morph/framework/templates/README.md +0 -814
  197. package/.morph/framework/templates/REGISTRY.json +0 -1492
  198. package/.morph/framework/templates/code/dotnet/backend/repository.cs +0 -141
  199. package/.morph/framework/templates/code/dotnet/backend/service.cs +0 -139
  200. package/.morph/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  201. package/.morph/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  202. package/.morph/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  203. package/.morph/framework/templates/code/dotnet/contracts/README.md +0 -74
  204. package/.morph/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  205. package/.morph/framework/templates/code/dotnet/contracts/contracts.cs +0 -217
  206. package/.morph/framework/templates/code/dotnet/contracts/contracts.cs.hbs +0 -172
  207. package/.morph/framework/templates/code/dotnet/database/migration.cs +0 -83
  208. package/.morph/framework/templates/code/dotnet/frontend/component.razor +0 -239
  209. package/.morph/framework/templates/code/dotnet/jobs/agent.cs +0 -163
  210. package/.morph/framework/templates/code/dotnet/jobs/job.cs +0 -171
  211. package/.morph/framework/templates/code/dotnet/test.cs +0 -239
  212. package/.morph/framework/templates/code/sql/rls-policy.sql +0 -57
  213. package/.morph/framework/templates/code/sql/supabase-migration.sql +0 -100
  214. package/.morph/framework/templates/code/sql/supabase-migration.template.sql +0 -113
  215. package/.morph/framework/templates/code/typescript/contracts.ts +0 -168
  216. package/.morph/framework/templates/context/CONTEXT-FEATURE.md +0 -276
  217. package/.morph/framework/templates/context/CONTEXT.md +0 -181
  218. package/.morph/framework/templates/docs/clarifications.md +0 -253
  219. package/.morph/framework/templates/docs/onboarding.md +0 -123
  220. package/.morph/framework/templates/docs/proposal.md +0 -182
  221. package/.morph/framework/templates/docs/schema-analysis.md +0 -119
  222. package/.morph/framework/templates/docs/spec.md +0 -149
  223. package/.morph/framework/templates/docs/ui-components.md +0 -124
  224. package/.morph/framework/templates/docs/ui-design-system.md +0 -76
  225. package/.morph/framework/templates/docs/ui-flows.md +0 -167
  226. package/.morph/framework/templates/docs/ui-mockups.md +0 -98
  227. package/.morph/framework/templates/examples/design-system-examples.md +0 -357
  228. package/.morph/framework/templates/examples/spec-examples.md +0 -90
  229. package/.morph/framework/templates/feature/decisions.md +0 -187
  230. package/.morph/framework/templates/feature/recap.md +0 -146
  231. package/.morph/framework/templates/feature/tasks.md +0 -199
  232. package/.morph/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  233. package/.morph/framework/templates/infrastructure/azure/README.md +0 -286
  234. package/.morph/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  235. package/.morph/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  236. package/.morph/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  237. package/.morph/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  238. package/.morph/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  239. package/.morph/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  240. package/.morph/framework/templates/infrastructure/azure/deploy.sh +0 -208
  241. package/.morph/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  242. package/.morph/framework/templates/infrastructure/azure/main.bicep +0 -189
  243. package/.morph/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  244. package/.morph/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  245. package/.morph/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  246. package/.morph/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  247. package/.morph/framework/templates/infrastructure/azure/storage.bicep +0 -106
  248. package/.morph/framework/templates/infrastructure/docker/Dockerfile.template +0 -58
  249. package/.morph/framework/templates/infrastructure/docker/docker-compose.template.yml +0 -67
  250. package/.morph/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +0 -38
  251. package/.morph/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +0 -48
  252. package/.morph/framework/templates/infrastructure/docker/easypanel.template.json +0 -54
  253. package/.morph/framework/templates/infrastructure/github/README.md +0 -593
  254. package/.morph/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  255. package/.morph/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -45
  256. package/.morph/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +0 -27
  257. package/.morph/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  258. package/.morph/framework/templates/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -31
  259. package/.morph/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -59
  260. package/.morph/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -39
  261. package/.morph/framework/templates/integrations/asaas-client.cs +0 -387
  262. package/.morph/framework/templates/integrations/asaas-webhook.cs +0 -351
  263. package/.morph/framework/templates/integrations/azure-identity-config.cs +0 -288
  264. package/.morph/framework/templates/integrations/clerk-config.cs +0 -258
  265. package/.morph/framework/templates/meta-prompts/fusion/fusion-agent.md +0 -76
  266. package/.morph/framework/templates/meta-prompts/fusion/fusion-aggregator.md +0 -100
  267. package/.morph/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
  268. package/.morph/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
  269. package/.morph/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
  270. package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
  271. package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
  272. package/.morph/framework/templates/meta-prompts/squad-leaders/backend-squad.md +0 -90
  273. package/.morph/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +0 -126
  274. package/.morph/framework/templates/meta-prompts/squad-leaders/squad-leader.md +0 -43
  275. package/.morph/framework/templates/meta-prompts/validators/checkpoint-validator.md +0 -107
  276. package/.morph/framework/templates/meta-prompts/validators/pre-commit-validator.md +0 -95
  277. package/.morph/framework/templates/saas/subscription.cs +0 -347
  278. package/.morph/framework/templates/saas/tenant.cs +0 -338
  279. package/.morph/framework/templates/state.template.json +0 -17
  280. package/.morph/framework/templates/ui/FluentDesignTheme.cs +0 -149
  281. package/.morph/framework/templates/ui/MudTheme.cs +0 -281
  282. package/.morph/framework/templates/ui/design-system.css +0 -226
  283. package/.morph/logs/tool-failures.log +0 -51
  284. package/.morph/memory/pre-compact-2026-02-22T17-01-01-658Z.json +0 -16
  285. package/.morph/state.json +0 -48
  286. package/framework/skills/level-2-domains/backend/api-designer.md +0 -66
  287. package/framework/skills/level-2-domains/backend/ef-modeler.md +0 -65
  288. package/framework/skills/level-2-domains/frontend/nextjs-expert.md +0 -161
  289. package/framework/skills/level-3-technologies/README.md +0 -7
  290. package/framework/skills/level-4-patterns/README.md +0 -7
  291. package/framework/templates/code/dotnet/contracts/contracts.cs +0 -217
  292. package/framework/templates/code/dotnet/contracts/contracts.cs.hbs +0 -172
@@ -0,0 +1,368 @@
1
+ # morph-spec — Command Flow Diagrams
2
+
3
+ > Each diagram shows the sequence of CLI calls and internal function calls for each slash command.
4
+
5
+ ---
6
+
7
+ ## 1. /morph-proposal
8
+
9
+ ```mermaid
10
+ flowchart TD
11
+ START(["/morph-proposal FEATURE"]) --> A
12
+
13
+ A["state get FEATURE"] --> B{"Exists?"}
14
+ B -->|yes| C["Identify current phase\nResume from where it stopped"]
15
+ B -->|no| D["Start Phase 0 from scratch"]
16
+ C --> D
17
+
18
+ subgraph P0 ["PHASE 0 — PROPOSAL"]
19
+ D --> E["detect-agents INPUT"]
20
+ E --> E1["loadAgentsConfig() ← agents.json"]
21
+ E1 --> E2["detectAgents() — keyword matching"]
22
+ E2 --> E3["analyzeRequestComplexity()"]
23
+ E3 --> E4["getStandardsListForAgent()\nloadStandardsForAgent()"]
24
+ E4 --> F["Render proposal.md via template"]
25
+ F --> G1["state set FEATURE status draft"]
26
+ G1 --> G2["state set FEATURE phase proposal"]
27
+ G2 --> G3["state mark-output FEATURE proposal"]
28
+ G3 --> G4["state add-agent FEATURE agent-id × N"]
29
+ G4 --> PAUSE0(["⏸ GATE — approve proposal"])
30
+ end
31
+
32
+ PAUSE0 -->|approved| H
33
+
34
+ subgraph P1 ["PHASE 1 — SETUP (auto, no gate)"]
35
+ H["Read .morph/context/"] --> I["Confirm detected stack"]
36
+ I --> J["List active agents"]
37
+ J --> J2["state set FEATURE phase setup"]
38
+ end
39
+
40
+ J2 --> UICHECK{"uiux-designer\nin activeAgents?"}
41
+
42
+ subgraph P15 ["PHASE 1.5 — UI/UX (conditional)"]
43
+ UICHECK -->|yes| L["Generate wireframes + design system\n(.claude/skills/phase-uiux/SKILL.md)"]
44
+ L --> PAUSEUI(["⏸ GATE — approve UI/UX"])
45
+ end
46
+
47
+ UICHECK -->|no| M
48
+ PAUSEUI -->|approved| M
49
+
50
+ subgraph P2 ["PHASE 2 — DESIGN"]
51
+ M["Generate spec.md\n(.claude/skills/phase-design/SKILL.md)"] --> N["Generate contracts.cs"]
52
+ N --> O["Generate decisions.md with ADRs"]
53
+ O --> P["Estimate costs per resource"]
54
+ P --> Q1["state mark-output FEATURE spec"]
55
+ Q1 --> Q2["state mark-output FEATURE contracts"]
56
+ Q2 --> Q3["state mark-output FEATURE decisions"]
57
+ Q3 --> PAUSE2(["⏸ GATE — approve design"])
58
+ end
59
+
60
+ PAUSE2 -->|approved| R
61
+
62
+ subgraph P3 ["PHASE 3 — CLARIFY"]
63
+ R["Identify ambiguities in spec\n(.claude/skills/phase-clarify/SKILL.md)"] --> S["Generate 3-7 questions"]
64
+ S --> WAIT(["⏳ Waiting for user answers"])
65
+ WAIT -->|answered| T["Update spec with clarifications\nand edge cases"]
66
+ T --> T2["state set FEATURE phase clarify"]
67
+ end
68
+
69
+ T2 --> U
70
+
71
+ subgraph P4 ["PHASE 4 — TASKS"]
72
+ U["Break spec into tasks T001-TXXX\n(.claude/skills/phase-tasks/SKILL.md)"] --> V["Define order and dependencies"]
73
+ V --> W["Checkpoints every 3 tasks"]
74
+ W --> X1["state mark-output FEATURE tasks"]
75
+ X1 --> X2["state set FEATURE tasks.total N"]
76
+ X2 --> PAUSE4(["⏸ GATE — approve tasks"])
77
+ end
78
+
79
+ PAUSE4 -->|approved| END(["✅ Planning complete\nRun /morph-apply FEATURE"])
80
+ ```
81
+
82
+ ---
83
+
84
+ ## 2. /morph-apply
85
+
86
+ ```mermaid
87
+ flowchart TD
88
+ START(["/morph-apply FEATURE"]) --> A
89
+
90
+ A["state get FEATURE"] --> B{"All phases\ncomplete?"}
91
+ B -->|no| ERR(["❌ ERROR — phase X not complete\nRun /morph-proposal FEATURE"])
92
+ B -->|yes| C
93
+
94
+ subgraph PREP ["INITIALIZATION"]
95
+ C["Read 1-design/spec.md + 3-tasks/tasks.md + 1-design/contracts.cs"] --> D
96
+ D["Read framework/standards/\n.morph/context/"] --> E1
97
+ E1["state set FEATURE phase implement"] --> E2
98
+ E2["state set FEATURE status in_progress"] --> E3
99
+ E3["state set FEATURE tasks.total N"]
100
+ end
101
+
102
+ E3 --> LOOP_START
103
+
104
+ subgraph LOOP ["LOOP — For each task in order"]
105
+ LOOP_START["Select next task"] --> F
106
+ F["task start FEATURE task-id"] --> F1
107
+ F1["spawn task-manager.cjs start"] --> G
108
+ G["Implement code\nfollowing contracts.cs + standards"] --> H
109
+ H["task done FEATURE task-id"] --> H1
110
+ H1["spawn task-manager.cjs done"] --> VAL_START
111
+
112
+ subgraph VAL ["Automatic validators (hooks)"]
113
+ VAL_START["security-expert\nSQL injection, XSS, hardcoded secrets"] --> V2
114
+ V2["architecture-expert\nIDbContextFactory, async/await, DI order"] --> V3
115
+ V3["packages-validator\nNuGet conflicts, vulnerabilities"] --> V4
116
+ V4["blazor-concurrency-validator\nLifecycle, thread safety"]
117
+ end
118
+
119
+ V4 --> VRESULT{"Validation\npassed?"}
120
+ VRESULT -->|no| FIX["Fix violations\nDO NOT use --skip-validation"] --> H
121
+ VRESULT -->|yes| CHK{"task_count\nmultiple of 3?"}
122
+ CHK -->|yes| CP["state checkpoint FEATURE\nstate list"]
123
+ CHK -->|no| NEXT
124
+ CP --> NEXT{"Next task\nexists?"}
125
+ NEXT -->|yes| LOOP_START
126
+ end
127
+
128
+ NEXT -->|no| FIN1
129
+
130
+ subgraph FIN ["FINALIZATION"]
131
+ FIN1["generate recap FEATURE"] --> FIN2
132
+ FIN2["extractFeatureMetadata()\nWrites 4-implement/recap.md"] --> FIN3
133
+ FIN3["state set FEATURE status done"] --> FIN4
134
+ FIN4["state mark-output FEATURE recap"] --> FIN5
135
+ FIN5["phase advance FEATURE"]
136
+ end
137
+
138
+ FIN5 --> END(["✅ Feature complete\nRun /morph-archive FEATURE"])
139
+ ```
140
+
141
+ ---
142
+
143
+ ## 3. /morph-status
144
+
145
+ ```mermaid
146
+ flowchart TD
147
+ START(["/morph-status"]) --> A
148
+
149
+ A["state list"] --> B
150
+ B["StateManager.getSummary()"] --> C
151
+ C["StateManager.listFeatures()"] --> D
152
+ D["Read .morph/state.json"] --> DASH
153
+
154
+ DASH["Display dashboard\nfeatures | phases | tasks X/Y | agents | costs"] --> EXTRA
155
+
156
+ EXTRA{"Specific feature\nrequested?"} -->|yes| G
157
+ EXTRA -->|no| CHECK
158
+
159
+ G["state get FEATURE"] --> G1["StateManager.getFeature()"] --> CHECK
160
+
161
+ subgraph CHECK_BLOCK ["Additional checks"]
162
+ CHECK["Check .morph/config/config.json"] --> CHECK2
163
+ CHECK2["Check .morph/framework/standards/ present"] --> CHECK3
164
+ CHECK3["Check .morph/archive/\ncompleted features"]
165
+ end
166
+
167
+ CHECK3 --> SUGEST["Suggest next actions\n/morph-proposal | /morph-apply | /morph-archive"]
168
+
169
+ SUGEST --> END(["✅ Dashboard displayed"])
170
+ ```
171
+
172
+ ---
173
+
174
+ ## 4. /morph-archive
175
+
176
+ ```mermaid
177
+ flowchart TD
178
+ START(["/morph-archive FEATURE"]) --> A
179
+
180
+ A["Read .morph/features/FEATURE/3-tasks/tasks.md"] --> B
181
+ B{"All tasks\ncomplete?"} -->|no| ERR(["❌ Feature not ready\nFinish pending tasks first"])
182
+ B -->|yes| C
183
+
184
+ C(["Confirm with user\nthat archiving is OK"]) --> D
185
+
186
+ subgraph RECAP ["RECAP"]
187
+ D["Update 4-implement/recap.md"] --> D1
188
+ D1["Fill in final metrics\n(tasks, time, actual vs estimated cost)"] --> D2
189
+ D2["Document lessons learned"]
190
+ end
191
+
192
+ D2 --> E{"Does spec define permanent\nsystem behavior?"}
193
+
194
+ E -->|yes| F["Extract spec → .morph/specs/DOMAIN/\nBecomes the 'current truth' of the system"]
195
+ F --> G
196
+ E -->|no| G
197
+
198
+ subgraph MOVE ["MOVE"]
199
+ G["Move full directory:\n.morph/features/FEATURE/\n→ .morph/archive/FEATURE/"]
200
+ end
201
+
202
+ G --> H
203
+
204
+ subgraph METRICS ["METRICS UPDATE"]
205
+ H["Increment completed features counter"] --> I
206
+ I["Update total accumulated cost"] --> J
207
+ J["Update total time spent"]
208
+ end
209
+
210
+ J --> END(["✅ Feature archived at\n.morph/archive/FEATURE/"])
211
+ ```
212
+
213
+ ---
214
+
215
+ ## 5. /morph-infra
216
+
217
+ ```mermaid
218
+ flowchart TD
219
+ START(["/morph-infra ACTION"]) --> ROUTE
220
+
221
+ ROUTE{"Action?"}
222
+
223
+ ROUTE -->|init| INIT_1
224
+ ROUTE -->|validate| VAL_1
225
+ ROUTE -->|plan| PLAN_1
226
+ ROUTE -->|deploy| DEP_1
227
+ ROUTE -->|destroy| DES_1
228
+
229
+ subgraph INIT ["INIT — Initialize IaC"]
230
+ INIT_1["Copy templates from\n.morph/framework/templates/infrastructure/"] --> INIT_2
231
+ INIT_2["Create infra/ structure\nmain.bicep\nparameters.dev.json, parameters.prod.json\nmodules/*.bicep"] --> INIT_3
232
+ INIT_3["Replace placeholders\nAPP_NAME, SUBSCRIPTION_ID\nRESOURCE_GROUP"] --> INIT_4
233
+ INIT_4["Document structure in decisions.md"]
234
+ INIT_4 --> INIT_END(["✅ Done — run /morph-infra validate"])
235
+ end
236
+
237
+ subgraph VALIDATE ["VALIDATE — Validate Templates"]
238
+ VAL_1["az bicep build --file infra/main.bicep"] --> VAL_2
239
+ VAL_2["Check required parameters"] --> VAL_3{"No errors?"}
240
+ VAL_3 -->|yes| VAL_OK(["✅ Templates valid"])
241
+ VAL_3 -->|no| VAL_ERR(["❌ Report syntax errors"])
242
+ end
243
+
244
+ subgraph PLAN ["PLAN — Preview Changes"]
245
+ PLAN_1["az account show"] --> PLAN_2{"Authenticated\nto Azure?"}
246
+ PLAN_2 -->|no| PLAN_ERR(["❌ Run az login"])
247
+ PLAN_2 -->|yes| PLAN_3["az deployment group what-if\n--template-file infra/main.bicep\n--parameters parameters.ENV.json"]
248
+ PLAN_3 --> PLAN_4["Display summary:\nCREATE / MODIFY / DELETE\n+ estimated costs"]
249
+ PLAN_4 --> PLAN_PAUSE(["⏸ GATE — wait for approval\nbefore running deploy"])
250
+ end
251
+
252
+ subgraph DEPLOY ["DEPLOY — Execute Deploy"]
253
+ DEP_1["Verify plan approval"] --> DEP_2
254
+ DEP_2["az group create --name rg-APP-ENV\n--location brazilsouth"] --> DEP_3
255
+ DEP_3["az deployment group create\n--template-file infra/main.bicep\n--parameters parameters.ENV.json"] --> DEP_4
256
+ DEP_4["Capture outputs:\nContainer App URL\nSQL Connection String\nKey Vault URI"] --> DEP_5
257
+ DEP_5["Update documentation\nwith deploy info"]
258
+ DEP_5 --> DEP_END(["✅ Deploy complete"])
259
+ end
260
+
261
+ subgraph DESTROY ["DESTROY — Remove Resources"]
262
+ DES_1(["⚠️ WARNING: irreversible action"]) --> DES_2
263
+ DES_2["List all resources\nthat will be deleted"] --> DES_3
264
+ DES_3(["⏸ GATE — require explicit confirmation\n'yes, delete'"]) --> DES_4
265
+ DES_4["az group delete --name rg-APP-ENV\n--yes --no-wait"]
266
+ DES_4 --> DES_END(["✅ Resources removed"])
267
+ end
268
+ ```
269
+
270
+ ---
271
+
272
+ ## 6. /morph-preflight
273
+
274
+ ```mermaid
275
+ flowchart TD
276
+ START(["/morph-preflight azure"]) --> C1
277
+
278
+ subgraph CHECKS ["7 SEQUENTIAL CHECKS"]
279
+ C1["Check 1 — Package Conflicts\ndotnet restore --verbosity normal\ngrep NU1605 NU1608"] --> R1{"OK?"}
280
+ R1 -->|✅| C2
281
+ R1 -->|❌| FIX1["Fix: declare Azure.Identity\nwith explicit version in .csproj"] --> C2
282
+
283
+ C2["Check 2 — EF Core Migrations\ndotnet ef migrations has-pending-model-changes\n--project src/Infrastructure --startup-project src/Web"] --> R2{"OK?"}
284
+ R2 -->|✅| C3
285
+ R2 -->|❌| FIX2["Fix: dotnet ef migrations add NAME"] --> C3
286
+
287
+ C3["Check 3 — Dockerfile\ndocker build --check .\nVerify multi-stage, EXPOSE, ENTRYPOINT"] --> R3{"Applicable\nand OK?"}
288
+ R3 -->|✅ or N/A| C4
289
+ R3 -->|❌| FIX3["Fix: correct Dockerfile"] --> C4
290
+
291
+ C4["Check 4 — Blazor .NET 10 Assets\ngrep RequiresAspNetWebAssets *.csproj"] --> R4{"OK?"}
292
+ R4 -->|✅ or N/A| C5
293
+ R4 -->|❌| FIX4["Fix: add RequiresAspNetWebAssets=true\nto .csproj"] --> C5
294
+
295
+ C5["Check 5 — Bicep Syntax\naz bicep build --file infra/main.bicep --stdout"] --> R5{"OK?"}
296
+ R5 -->|✅| C6
297
+ R5 -->|❌| FIX5["Fix: correct Bicep syntax errors"] --> C6
298
+
299
+ C6["Check 6 — Key Vault Config\ngrep KeyVaultUri appsettings*.json\ngrep IsDevelopment Program.cs"] --> R6{"OK?"}
300
+ R6 -->|✅| C7
301
+ R6 -->|❌| FIX6["Fix: add KeyVaultUri\nDO NOT gate on IsDevelopment"] --> C7
302
+
303
+ C7["Check 7 — Connection Strings\ngrep 'Password= Pwd= Secret='\nappsettings*.json excluding Development"] --> R7{"OK?"}
304
+ R7 -->|✅| SUM
305
+ R7 -->|⚠️| WARN["Warning: move secrets to Key Vault"] --> SUM
306
+ end
307
+
308
+ SUM["Display summary\nN passed / N failed / N warnings"] --> RESULT
309
+
310
+ RESULT{"Any\nfailures?"} -->|yes| BLOCK(["❌ BLOCKED\nDo not deploy until resolved!"])
311
+ RESULT -->|no| PASS(["✅ Ready to deploy to Azure"])
312
+ ```
313
+
314
+ ---
315
+
316
+ ## 7. /morph-troubleshoot
317
+
318
+ ```mermaid
319
+ flowchart TD
320
+ START(["/morph-troubleshoot KEYWORDS"]) --> A
321
+
322
+ A["troubleshootCommand(keywords, options)"] --> LISTCAT
323
+
324
+ LISTCAT{"--list-categories?"} -->|yes| CATS["getCategories()\nList: blazor, efcore, azure, auth, deploy"]
325
+ CATS --> END_CATS(["✅ Categories displayed"])
326
+
327
+ LISTCAT -->|no| L1_START
328
+
329
+ subgraph L1 ["Level 1 — Known Issues Index (Primary)"]
330
+ L1_START["searchIndex(searchTerms, options)"] --> L1A
331
+ L1A["Search JSON database\nof known issues"] --> L1B{"Filter\n--category?"}
332
+ L1B -->|yes| L1C["Filter by category"]
333
+ L1B -->|no| L1D["Match all keywords"]
334
+ L1C --> L1RESULT
335
+ L1D --> L1RESULT["Return matches with score"]
336
+ end
337
+
338
+ L1RESULT --> CHECK1{"Enough\nresults?"}
339
+ CHECK1 -->|yes| FORMAT
340
+
341
+ subgraph L2 ["Level 2 — Grep Standards (Automatic fallback)"]
342
+ CHECK1 -->|no| L2_START["searchGrep(searchTerms, options)"]
343
+ L2_START --> L2A["grep framework/standards/*.md"]
344
+ L2A --> L2B["grep .morph/framework/standards/*.md"]
345
+ L2B --> L2C["Deduplicate against Level 1 results"]
346
+ L2C --> L2D["Merge and limit to 10 results"]
347
+ end
348
+
349
+ L2D --> CHECK2{"Enough\nresults?"}
350
+ CHECK2 -->|yes| FORMAT
351
+
352
+ subgraph L3 ["Level 3 — Web Search (If needed)"]
353
+ CHECK2 -->|no| L3_START["WebSearch — external sources"]
354
+ L3_START --> L3A["site:github.com/dotnet/aspnetcore ERROR\nsite:github.com/dotnet/efcore ERROR"]
355
+ L3_START --> L3B["site:stackoverflow.com blazor ERROR\nsite:stackoverflow.com azure ERROR"]
356
+ L3_START --> L3C["site:learn.microsoft.com ERROR\nsite:learn.microsoft.com/azure ERROR"]
357
+ L3A & L3B & L3C --> L3MERGE["Consolidate relevant links"]
358
+ end
359
+
360
+ L3MERGE --> FORMAT
361
+
362
+ subgraph FMT ["Output Formatting"]
363
+ FORMAT["formatResult(result, verbose)\nRoot cause + Solution + Fix code"] --> FSUM
364
+ FSUM["formatSummary(stats)\nTotal found per level (L1/L2/L3)"]
365
+ end
366
+
367
+ FSUM --> END(["✅ Results displayed\nin standard format"])
368
+ ```
@@ -0,0 +1,212 @@
1
+ # morph-spec Quick Start
2
+
3
+ ## Install
4
+
5
+ ```bash
6
+ npm install -g @polymorphism-tech/morph-spec
7
+ ```
8
+
9
+ Or use `npx` without a global install:
10
+
11
+ ```bash
12
+ npx @polymorphism-tech/morph-spec init
13
+ ```
14
+
15
+ > **Windows / nvm-windows:** Global installs may not appear on PATH. Use `npx` or add the npm prefix to PATH manually: `npm config get prefix`, then add `{prefix}` to your PATH.
16
+
17
+ ---
18
+
19
+ ## Initialize a project
20
+
21
+ Navigate to your project root and run:
22
+
23
+ ```bash
24
+ morph-spec init
25
+ ```
26
+
27
+ `init` does the following:
28
+ - Auto-detects your stack (Blazor, Next.js, Node.js, monorepo)
29
+ - Creates `.morph/` with framework files, standards, and templates
30
+ - Creates `.morph/context/` with inferred project context
31
+ - Installs `.claude/skills/`, `.claude/agents/`, `.claude/rules/`
32
+ - Writes `.claude/settings.local.json` with 11 Claude Code hooks
33
+ - Copies `CLAUDE.md` with runtime instructions
34
+
35
+ Verify the installation:
36
+
37
+ ```bash
38
+ morph-spec doctor
39
+ ```
40
+
41
+ ---
42
+
43
+ ## Your first feature
44
+
45
+ Open your project in Claude Code and run:
46
+
47
+ ```
48
+ /morph-proposal my-feature
49
+ ```
50
+
51
+ Replace `my-feature` with a short kebab-case name for your feature (e.g., `user-notifications`, `payment-flow`).
52
+
53
+ The proposal pipeline runs phases 0–4 with three approval gates:
54
+
55
+ ### Phase 0 — Proposal
56
+
57
+ Claude analyzes your request, detects which agents are relevant, and produces `0-proposal/proposal.md`. You review it and approve (or request changes).
58
+
59
+ ### Phase 1 — Setup
60
+
61
+ Loads project context from `.morph/context/`, confirms stack and active agents. No approval needed.
62
+
63
+ ### Phase 1.5 — UI/UX (conditional)
64
+
65
+ Only runs if frontend agents are active. Claude generates:
66
+ - `2-ui/design-system.md` — colors, typography, spacing
67
+ - `2-ui/mockups.md` — ASCII wireframes
68
+ - `2-ui/components.md` — component specs
69
+ - `2-ui/flows.md` — user flows and edge cases
70
+
71
+ You approve the UI design before design phase begins.
72
+
73
+ ### Phase 2 — Design
74
+
75
+ Claude produces the technical specification:
76
+ - `1-design/spec.md` — full requirements, use cases, validations
77
+ - `1-design/contracts.cs` — C# interfaces, DTOs, enums
78
+ - `1-design/decisions.md` — architectural decision records (ADRs)
79
+
80
+ You review and approve the design.
81
+
82
+ ### Phase 3 — Clarify
83
+
84
+ Claude identifies 3–7 ambiguities in the spec, asks you to resolve them, then updates the spec. No gate.
85
+
86
+ ### Phase 4 — Tasks
87
+
88
+ Claude breaks the spec into atomic tasks (`T001`, `T002`, …) saved to `3-tasks/tasks.md`. You approve the task list.
89
+
90
+ At this point, planning is complete:
91
+
92
+ ```
93
+ ✅ Planning complete — run /morph-apply my-feature to implement
94
+ ```
95
+
96
+ ---
97
+
98
+ ## Implement
99
+
100
+ ```
101
+ /morph-apply my-feature
102
+ ```
103
+
104
+ Claude reads `spec.md`, `contracts.cs`, and `tasks.md`, then implements task by task:
105
+ - Starts each task, writes the code, marks it done
106
+ - Runs 5 validators automatically after each task: security, architecture, packages, design system, Blazor concurrency
107
+ - Auto-checkpoints every 3 tasks (validates, saves state)
108
+ - Generates `4-implement/recap.md` on completion
109
+
110
+ ---
111
+
112
+ ## During development
113
+
114
+ Check feature state:
115
+
116
+ ```bash
117
+ morph-spec state get my-feature
118
+ morph-spec status my-feature
119
+ ```
120
+
121
+ See what phase the feature is in and which approval gates have been passed:
122
+
123
+ ```bash
124
+ morph-spec state show my-feature
125
+ ```
126
+
127
+ Advance to the next phase manually (when needed):
128
+
129
+ ```bash
130
+ morph-spec phase advance my-feature
131
+ ```
132
+
133
+ Mark a task complete:
134
+
135
+ ```bash
136
+ morph-spec task done my-feature
137
+ ```
138
+
139
+ Run validators at any time:
140
+
141
+ ```bash
142
+ morph-spec validate # all validators
143
+ morph-spec validate architecture # specific validator
144
+ morph-spec validate packages
145
+ ```
146
+
147
+ ---
148
+
149
+ ## Multiple features
150
+
151
+ You can have multiple features in progress simultaneously. Each has its own directory under `.morph/features/`:
152
+
153
+ ```
154
+ .morph/features/
155
+ ├── user-notifications/
156
+ │ ├── 0-proposal/
157
+ │ ├── 1-design/
158
+ │ └── 3-tasks/
159
+ └── payment-flow/
160
+ ├── 0-proposal/
161
+ └── 1-design/
162
+ ```
163
+
164
+ See all feature states:
165
+
166
+ ```bash
167
+ morph-spec state list
168
+ ```
169
+
170
+ ---
171
+
172
+ ## Keeping up to date
173
+
174
+ When a new version of `@polymorphism-tech/morph-spec` is published:
175
+
176
+ ```bash
177
+ # Update the CLI
178
+ npm install -g @polymorphism-tech/morph-spec@latest
179
+
180
+ # Update framework files in your project
181
+ morph-spec update
182
+
183
+ # Verify
184
+ morph-spec doctor
185
+ ```
186
+
187
+ `morph-spec update` re-syncs `.morph/framework/`, `.claude/skills/`, `.claude/agents/`, `.claude/rules/`, and `CLAUDE.md`. It does not touch your config, context, or feature outputs.
188
+
189
+ ---
190
+
191
+ ## Tips
192
+
193
+ **Use `/morph-proposal` even for small features.** The proposal phase catches scope creep, identifies the right agents, and generates contracts early — before implementation makes it expensive to change direction.
194
+
195
+ **Approve explicitly at each gate.** The design gate exists to prevent implementing the wrong thing. If something in `spec.md` or `contracts.cs` looks off, say so before approving.
196
+
197
+ **ADRs belong in `decisions.md`.** When Claude makes an architectural choice, it documents it there. Read it after Design completes. Decisions drive the validators that run during implementation.
198
+
199
+ **`morph-spec doctor` is your first debugging step.** If something is behaving unexpectedly, doctor will surface version mismatches, missing files, and hook configuration issues.
200
+
201
+ ---
202
+
203
+ ## Next steps
204
+
205
+ - [CHEATSHEET.md](CHEATSHEET.md) — command reference
206
+ - [ARCHITECTURE.md](ARCHITECTURE.md) — system design and agent hierarchy
207
+ - [CHANGELOG.md](../CHANGELOG.md) — release history
208
+ - `.morph/framework/standards/` — all coding and architecture standards
209
+
210
+ ---
211
+
212
+ *morph-spec v4.6.0 by Polymorphism Tech*
@@ -0,0 +1,84 @@
1
+ // ============================================================
2
+ // CONTRACTS: Order Management — Level 2 (Business Logic)
3
+ // Example of correctly filled contracts-level2.cs template
4
+ // Feature: order-management | Date: 2026-02-23
5
+ // ============================================================
6
+
7
+ using System;
8
+ using System.Collections.Generic;
9
+ using System.Threading;
10
+ using System.Threading.Tasks;
11
+ using MediatR;
12
+
13
+ // ===== AGGREGATE ROOT =====
14
+ // Implementado em: Domain/Orders/Aggregates/Order.cs
15
+ //
16
+ // Invariants (do spec.md > Aggregate Blueprint):
17
+ // - Confirm() só é válido se Status == Draft E Items.Any()
18
+ // - AddItem() lança DomainException se Status != Draft
19
+ // - Cancel() é válido de Draft ou Confirmed → Cancelled (terminal)
20
+
21
+ namespace ExampleApp.Domain.Orders.Events;
22
+
23
+ // ===== DOMAIN EVENTS =====
24
+
25
+ public record OrderCreatedEvent(Guid OrderId, Guid UserId) : DomainEvent;
26
+ public record OrderConfirmedEvent(Guid OrderId, Guid UserId, decimal Total) : DomainEvent; // Total as decimal for event serialization; Money value object lives inside the Aggregate
27
+ public record OrderCancelledEvent(Guid OrderId, string Reason) : DomainEvent;
28
+
29
+ namespace ExampleApp.Application.Orders.Commands;
30
+
31
+ // ===== COMMANDS (CQRS) =====
32
+
33
+ public record CreateOrderCommand(Guid UserId, List<CreateOrderItemRequest> Items)
34
+ : IRequest<CreateOrderResult>;
35
+ public record CreateOrderResult(Guid OrderId);
36
+
37
+ public record ConfirmOrderCommand(Guid OrderId) : IRequest;
38
+ public record CancelOrderCommand(Guid OrderId, string Reason) : IRequest;
39
+
40
+ namespace ExampleApp.Application.Orders.Queries;
41
+
42
+ // ===== QUERIES =====
43
+
44
+ public record GetOrderQuery(Guid OrderId) : IRequest<OrderDto?>;
45
+
46
+ // PagedResult<T> — defined in Shared/Common/PagedResult.cs (shared framework type)
47
+ public record ListOrdersByUserQuery(Guid UserId, int Page = 1, int PageSize = 20)
48
+ : IRequest<PagedResult<OrderDto>>;
49
+
50
+ namespace ExampleApp.Application.Orders;
51
+
52
+ // ===== DTOs (read models — nunca expõe o Aggregate diretamente) =====
53
+
54
+ public record OrderDto(
55
+ Guid Id,
56
+ Guid UserId,
57
+ string Status,
58
+ decimal Total,
59
+ List<OrderItemDto> Items,
60
+ DateTime CreatedAt,
61
+ DateTime? UpdatedAt
62
+ );
63
+
64
+ public record OrderItemDto(Guid ProductId, int Quantity, decimal UnitPrice, decimal Subtotal);
65
+
66
+ public record CreateOrderItemRequest(Guid ProductId, int Quantity, decimal UnitPrice);
67
+
68
+ namespace ExampleApp.Domain.Orders;
69
+
70
+ // ===== REPOSITORY (um por Aggregate Root) =====
71
+
72
+ public interface IOrderRepository
73
+ {
74
+ Task<Order?> GetAsync(Guid id, CancellationToken ct = default);
75
+ Task<List<Order>> GetByUserAsync(Guid userId, CancellationToken ct = default);
76
+ Task AddAsync(Order order, CancellationToken ct = default);
77
+ Task UpdateAsync(Order order, CancellationToken ct = default);
78
+ Task<bool> ExistsAsync(Guid id, CancellationToken ct = default);
79
+ }
80
+
81
+ // ===== EXCEPTIONS =====
82
+
83
+ public class OrderNotFoundException(Guid id) : DomainException($"Order '{id}' not found.");
84
+ public class OrderInvalidStateException(string message) : DomainException(message);
@@ -0,0 +1,24 @@
1
+ # Proposal: Order Management
2
+
3
+ **Feature:** order-management
4
+ **Type:** Business Logic (Level 2)
5
+ **Stack:** .NET 10 / C# 14, Blazor Server, EF Core, Azure SQL
6
+
7
+ ## User Story
8
+
9
+ Como usuário autenticado, quero criar e gerenciar pedidos de compra para que eu possa
10
+ acompanhar o status dos meus pedidos e receber notificações de mudanças.
11
+
12
+ ## Acceptance Criteria
13
+
14
+ - [ ] Usuário pode criar um pedido com 1+ itens
15
+ - [ ] Pedido começa no status Draft
16
+ - [ ] Pedido só pode ser Confirmado se tiver pelo menos 1 item
17
+ - [ ] Pedido Confirmado não pode receber mais itens
18
+ - [ ] Total do pedido é calculado automaticamente
19
+ - [ ] Sistema notifica quando pedido é Confirmado
20
+
21
+ ## Out of Scope
22
+
23
+ - Pagamento (feature separada)
24
+ - Envio/logística