@polymorphism-tech/morph-spec 4.3.6 → 4.5.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 (375) hide show
  1. package/.morph/.morphversion +3 -3
  2. package/.morph/analytics/threads-log.jsonl +44 -9
  3. package/.morph/config/config.json +2 -3
  4. package/.morph/framework/standards/STANDARDS.json +812 -0
  5. package/.morph/{standards → framework/standards}/ai-agents/team-orchestration.md +3 -3
  6. package/.morph/framework/standards/integration/mcp/mcp-tools.md +384 -0
  7. package/.morph/{templates → framework/templates}/README.md +17 -17
  8. package/.morph/{templates → framework/templates}/REGISTRY.json +48 -233
  9. package/.morph/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
  10. package/.morph/{templates → framework/templates}/context/CONTEXT-FEATURE.md +1 -1
  11. package/.morph/{templates → framework/templates}/context/CONTEXT.md +3 -3
  12. package/.morph/framework/templates/docs/clarifications.md +253 -0
  13. package/.morph/framework/templates/docs/onboarding.md +123 -0
  14. package/.morph/framework/templates/docs/schema-analysis.md +119 -0
  15. package/.morph/{templates → framework/templates}/docs/spec.md +149 -149
  16. package/.morph/framework/templates/docs/ui-components.md +124 -0
  17. package/.morph/framework/templates/docs/ui-design-system.md +76 -0
  18. package/.morph/framework/templates/docs/ui-flows.md +167 -0
  19. package/.morph/framework/templates/docs/ui-mockups.md +98 -0
  20. package/.morph/{templates → framework/templates}/examples/spec-examples.md +1 -1
  21. package/.morph/{templates → framework/templates}/infrastructure/github/README.md +11 -11
  22. package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
  23. package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  24. package/.morph/{templates → framework/templates}/meta-prompts/validators/pre-commit-validator.md +1 -1
  25. package/.morph/logs/tool-failures.log +51 -0
  26. package/.morph/memory/pre-compact-2026-02-22T17-01-01-658Z.json +16 -0
  27. package/.morph/state.json +1 -1
  28. package/CLAUDE.md +20 -119
  29. package/README.md +20 -18
  30. package/bin/detect-agents.js +1 -1
  31. package/bin/morph-spec.js +116 -266
  32. package/bin/task-manager.cjs +2 -2
  33. package/bin/validate.js +1 -1
  34. package/claude-plugin.json +14 -0
  35. package/docs/claude-alignment-report.md +137 -0
  36. package/docs/plans/2026-02-22-claude-docs-morph-alignment-analysis.md +512 -0
  37. package/docs/plans/2026-02-22-claude-settings.md +515 -0
  38. package/docs/plans/2026-02-22-morph-cc-alignment-impl.md +728 -0
  39. package/docs/plans/2026-02-22-morph-spec-next.md +478 -0
  40. package/docs/plans/2026-02-22-native-alignment-design.md +199 -0
  41. package/docs/plans/2026-02-22-native-alignment-impl.md +925 -0
  42. package/docs/plans/2026-02-22-native-enrichment-design.md +244 -0
  43. package/docs/plans/2026-02-22-native-enrichment.md +735 -0
  44. package/framework/CLAUDE.md +77 -0
  45. package/framework/commands/morph-apply.md +9 -9
  46. package/framework/commands/morph-archive.md +8 -8
  47. package/framework/commands/morph-infra.md +1 -1
  48. package/framework/commands/morph-proposal.md +9 -9
  49. package/framework/commands/morph-status.md +3 -3
  50. package/framework/commands/morph-troubleshoot.md +1 -1
  51. package/framework/hooks/README.md +201 -282
  52. package/framework/hooks/claude-code/notification/approval-reminder.js +52 -0
  53. package/framework/hooks/claude-code/post-tool-use/dispatch.js +83 -0
  54. package/framework/hooks/claude-code/post-tool-use/handle-tool-failure.js +42 -0
  55. package/framework/hooks/claude-code/pre-compact/save-morph-context.js +61 -0
  56. package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +71 -0
  57. package/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +58 -0
  58. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +64 -0
  59. package/framework/hooks/claude-code/session-start/inject-morph-context.js +94 -0
  60. package/framework/hooks/claude-code/statusline.py +239 -0
  61. package/framework/hooks/claude-code/statusline.sh +7 -0
  62. package/framework/hooks/claude-code/stop/validate-completion.js +88 -0
  63. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +91 -0
  64. package/framework/hooks/shared/hook-response.js +45 -0
  65. package/framework/hooks/shared/phase-utils.js +129 -0
  66. package/framework/hooks/shared/state-reader.js +138 -0
  67. package/framework/hooks/shared/stdin-reader.js +26 -0
  68. package/framework/phases.json +145 -0
  69. package/framework/rules/csharp-standards.md +10 -0
  70. package/framework/rules/frontend-standards.md +14 -0
  71. package/framework/rules/infrastructure-standards.md +13 -0
  72. package/framework/rules/morph-workflow.md +86 -0
  73. package/framework/rules/testing-standards.md +11 -0
  74. package/framework/skills/level-0-meta/brainstorming.md +133 -0
  75. package/framework/skills/level-0-meta/code-review.md +12 -4
  76. package/framework/skills/level-0-meta/mcp-registry.json +207 -0
  77. package/framework/skills/level-0-meta/morph-checklist.md +9 -1
  78. package/framework/skills/level-0-meta/simulation-checklist.md +9 -1
  79. package/framework/skills/level-0-meta/tool-usage-guide.md +335 -0
  80. package/framework/skills/level-0-meta/verification-before-completion.md +145 -0
  81. package/framework/skills/level-1-workflows/morph-replicate.md +9 -1
  82. package/framework/skills/level-1-workflows/phase-clarify.md +65 -4
  83. package/framework/skills/level-1-workflows/phase-codebase-analysis.md +182 -0
  84. package/framework/skills/level-1-workflows/phase-design.md +342 -80
  85. package/framework/skills/level-1-workflows/phase-implement.md +254 -0
  86. package/framework/skills/level-1-workflows/phase-setup.md +76 -10
  87. package/framework/skills/level-1-workflows/phase-tasks.md +88 -7
  88. package/framework/skills/level-1-workflows/phase-uiux.md +95 -17
  89. package/framework/skills/level-2-domains/ai-agents/ai-system-architect.md +8 -1
  90. package/framework/skills/level-2-domains/architecture/po-pm-advisor.md +8 -1
  91. package/framework/skills/level-2-domains/architecture/prompt-engineer.md +8 -1
  92. package/framework/skills/level-2-domains/architecture/seo-growth-hacker.md +8 -1
  93. package/framework/skills/level-2-domains/architecture/standards-architect.md +11 -4
  94. package/framework/skills/level-2-domains/backend/api-designer.md +8 -1
  95. package/framework/skills/level-2-domains/backend/dotnet-senior.md +8 -1
  96. package/framework/skills/level-2-domains/backend/ef-modeler.md +8 -1
  97. package/framework/skills/level-2-domains/backend/hangfire-orchestrator.md +9 -2
  98. package/framework/skills/level-2-domains/backend/ms-agent-expert.md +8 -1
  99. package/framework/skills/level-2-domains/frontend/blazor-builder.md +8 -1
  100. package/framework/skills/level-2-domains/frontend/nextjs-expert.md +8 -1
  101. package/framework/skills/level-2-domains/frontend/ui-ux-designer.md +9 -2
  102. package/framework/skills/level-2-domains/infrastructure/azure-architect.md +8 -1
  103. package/framework/skills/level-2-domains/infrastructure/azure-deploy-specialist.md +8 -1
  104. package/framework/skills/level-2-domains/infrastructure/bicep-architect.md +8 -1
  105. package/framework/skills/level-2-domains/infrastructure/container-specialist.md +8 -1
  106. package/framework/skills/level-2-domains/infrastructure/devops-engineer.md +8 -1
  107. package/framework/skills/level-2-domains/integrations/asaas-financial.md +8 -1
  108. package/framework/skills/level-2-domains/integrations/azure-identity.md +8 -1
  109. package/framework/skills/level-2-domains/integrations/clerk-auth.md +8 -1
  110. package/framework/skills/level-2-domains/integrations/{hangfire-orchestrator.md → hangfire-integration.md} +8 -1
  111. package/framework/skills/level-2-domains/integrations/resend-email.md +8 -1
  112. package/framework/skills/level-2-domains/quality/code-analyzer.md +10 -3
  113. package/framework/skills/level-2-domains/quality/testing-specialist.md +8 -1
  114. package/framework/standards/STANDARDS.json +812 -0
  115. package/framework/standards/ai-agents/team-orchestration.md +3 -3
  116. package/framework/standards/frontend/nextjs/nextjs-patterns.md +17 -0
  117. package/framework/standards/integration/mcp/mcp-tools.md +384 -0
  118. package/framework/templates/README.md +17 -17
  119. package/framework/templates/REGISTRY.json +48 -233
  120. package/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
  121. package/framework/templates/context/CONTEXT-FEATURE.md +1 -1
  122. package/framework/templates/context/CONTEXT.md +3 -3
  123. package/framework/templates/docs/clarifications.md +253 -0
  124. package/framework/templates/docs/onboarding.md +123 -0
  125. package/framework/templates/docs/schema-analysis.md +119 -0
  126. package/framework/templates/docs/spec.md +149 -149
  127. package/framework/templates/docs/ui-components.md +124 -0
  128. package/framework/templates/docs/ui-design-system.md +76 -0
  129. package/framework/templates/docs/ui-flows.md +167 -0
  130. package/framework/templates/docs/ui-mockups.md +98 -0
  131. package/framework/templates/docs/user-stories.md +34 -0
  132. package/framework/templates/examples/spec-examples.md +1 -1
  133. package/framework/templates/infrastructure/github/README.md +11 -11
  134. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
  135. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  136. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +1 -1
  137. package/framework/workflows/configs/express.json +45 -0
  138. package/framework/workflows/configs/spec-only.json +43 -0
  139. package/framework/workflows/docs/enforcement-pipeline.md +8 -8
  140. package/framework/workflows/docs/full-morph.md +3 -3
  141. package/package.json +3 -2
  142. package/scripts/generate-refs.js +336 -0
  143. package/scripts/generate-standards-registry.js +44 -0
  144. package/scripts/validate-real.mjs +255 -0
  145. package/src/commands/feature/create-story.js +362 -361
  146. package/src/commands/feature/shard-spec.js +225 -224
  147. package/src/commands/feature/sprint-status.js +1 -1
  148. package/src/commands/generation/generate-onboarding.js +169 -0
  149. package/src/commands/generation/generate.js +2 -2
  150. package/src/commands/mcp/mcp-setup.js +315 -0
  151. package/src/commands/project/changes.js +66 -0
  152. package/src/commands/project/checkpoint.js +209 -0
  153. package/src/commands/project/cost.js +179 -0
  154. package/src/commands/project/diff.js +278 -0
  155. package/src/commands/project/doctor.js +55 -7
  156. package/src/commands/project/init.js +318 -76
  157. package/src/commands/project/revert.js +173 -0
  158. package/src/commands/project/standards.js +80 -0
  159. package/src/commands/project/status.js +376 -0
  160. package/src/commands/project/update-agents.js +23 -0
  161. package/src/commands/project/update.js +63 -30
  162. package/src/commands/state/advance-phase.js +4 -3
  163. package/src/commands/state/state.js +10 -3
  164. package/src/commands/state/validate-phase.js +19 -2
  165. package/src/commands/templates/template-customize.js +4 -4
  166. package/src/commands/templates/template-render.js +1 -1
  167. package/src/commands/templates/template-show.js +1 -1
  168. package/src/commands/validation/validate-feature.js +359 -0
  169. package/src/core/orchestrator.js +3 -38
  170. package/src/core/paths/output-schema.js +135 -0
  171. package/src/core/state/state-manager.js +831 -592
  172. package/src/core/templates/template-registry.js +2 -2
  173. package/src/core/workflows/workflow-detector.js +17 -1
  174. package/src/lib/agents/micro-agent-factory.js +1 -1
  175. package/src/lib/context/context-bundler.js +2 -1
  176. package/src/lib/detectors/claude-config-detector.js +392 -0
  177. package/src/lib/detectors/conversation-analyzer.js +4 -4
  178. package/src/lib/detectors/design-system-detector.js +6 -5
  179. package/src/lib/detectors/standards-generator.js +2 -2
  180. package/src/lib/generators/context-generator.js +539 -538
  181. package/src/lib/generators/recap-generator.js +1 -1
  182. package/src/lib/generators/settings-generator.js +210 -0
  183. package/src/lib/hooks/hook-executor.js +1 -1
  184. package/src/lib/installers/mcp-installer.js +299 -0
  185. package/src/lib/learning/learning-system.js +3 -3
  186. package/src/lib/orchestration/team-orchestrator.js +1 -1
  187. package/src/lib/standards/standards-context-injector.js +7 -7
  188. package/src/lib/threads/thread-coordinator.js +1 -1
  189. package/src/lib/troubleshooting/troubleshoot-grep.js +1 -1
  190. package/src/lib/validators/contracts/contract-compliance-validator.js +274 -273
  191. package/src/lib/validators/design-system/design-system-validator.js +1 -1
  192. package/src/lib/validators/spec-validator.js +258 -258
  193. package/src/lib/validators/validation-runner.js +270 -269
  194. package/src/utils/agents-installer.js +206 -0
  195. package/src/utils/claude-settings-manager.js +258 -0
  196. package/src/utils/file-copier.js +1 -1
  197. package/src/utils/hooks-installer.js +354 -28
  198. package/src/utils/skills-installer.js +74 -0
  199. package/.morph/project/context/detection-log.md +0 -16
  200. package/.morph/project/standards/inferred.md +0 -59
  201. package/framework/hooks/agent-stop/validate-and-continue.js +0 -96
  202. package/framework/hooks/agent-stop/validate-checkpoints.js +0 -101
  203. package/framework/hooks/agent-stop/validate-tests.js +0 -109
  204. package/framework/hooks/agent-teams/dispatch.js +0 -67
  205. package/framework/hooks/agent-teams/phase-advanced.js +0 -80
  206. package/framework/hooks/agent-teams/task-completed.js +0 -76
  207. package/framework/hooks/agent-teams/teammate-idle.js +0 -70
  208. package/src/commands/agents/agents-fuse.js +0 -97
  209. package/src/commands/agents/micro-agent.js +0 -112
  210. package/src/commands/agents/spawn-team.js +0 -237
  211. package/src/commands/agents/squad-template.js +0 -146
  212. package/src/commands/analytics/analytics.js +0 -176
  213. package/src/commands/context/context-prime.js +0 -63
  214. package/src/commands/context/core-four.js +0 -54
  215. package/src/commands/generation/generate-context.js +0 -40
  216. package/src/commands/project/detect-agents.js +0 -207
  217. package/src/commands/project/detect-workflow.js +0 -174
  218. package/src/commands/threads/thread-template.js +0 -103
  219. package/src/commands/threads/threads.js +0 -261
  220. package/src/commands/utils/session-summary.js +0 -291
  221. package/src/llm/analyzer.js +0 -215
  222. package/src/llm/few-shot-examples.js +0 -216
  223. package/src/llm/project-config-schema.json +0 -188
  224. package/src/llm/prompt-builder.js +0 -96
  225. /package/.morph/{project/context → context}/README.md +0 -0
  226. /package/.morph/{config → framework}/agents.json +0 -0
  227. /package/.morph/{standards → framework/standards}/ai-agents/blazor-ui.md +0 -0
  228. /package/.morph/{standards → framework/standards}/ai-agents/production.md +0 -0
  229. /package/.morph/{standards → framework/standards}/ai-agents/setup.md +0 -0
  230. /package/.morph/{standards → framework/standards}/ai-agents/workflows.md +0 -0
  231. /package/.morph/{standards → framework/standards}/architecture/ddd/aggregates.md +0 -0
  232. /package/.morph/{standards → framework/standards}/architecture/ddd/entities.md +0 -0
  233. /package/.morph/{standards → framework/standards}/architecture/ddd/value-objects.md +0 -0
  234. /package/.morph/{standards → framework/standards}/backend/api/minimal-api.md +0 -0
  235. /package/.morph/{standards → framework/standards}/backend/api/rest.md +0 -0
  236. /package/.morph/{standards → framework/standards}/backend/api/validation.md +0 -0
  237. /package/.morph/{standards → framework/standards}/backend/authentication/passkeys.md +0 -0
  238. /package/.morph/{standards → framework/standards}/backend/database/ef-core.md +0 -0
  239. /package/.morph/{standards → framework/standards}/backend/database/migrations.md +0 -0
  240. /package/.morph/{standards → framework/standards}/backend/database/postgresql/database.md +0 -0
  241. /package/.morph/{standards → framework/standards}/backend/database/repository-patterns.md +0 -0
  242. /package/.morph/{standards → framework/standards}/backend/database/vector-search-rag.md +0 -0
  243. /package/.morph/{standards → framework/standards}/backend/dotnet/async.md +0 -0
  244. /package/.morph/{standards → framework/standards}/backend/dotnet/core.md +0 -0
  245. /package/.morph/{standards → framework/standards}/backend/dotnet/di.md +0 -0
  246. /package/.morph/{standards → framework/standards}/backend/dotnet/program-cs-checklist.md +0 -0
  247. /package/.morph/{standards → framework/standards}/backend/integrations/asaas/asaas-api.md +0 -0
  248. /package/.morph/{standards → framework/standards}/backend/integrations/clerk/clerk-auth.md +0 -0
  249. /package/.morph/{standards → framework/standards}/backend/integrations/hangfire/hangfire-jobs.md +0 -0
  250. /package/.morph/{standards → framework/standards}/backend/integrations/resend/resend-email.md +0 -0
  251. /package/.morph/{standards → framework/standards}/context/analytics.md +0 -0
  252. /package/.morph/{standards → framework/standards}/context/bundles.md +0 -0
  253. /package/.morph/{standards → framework/standards}/context/priming.md +0 -0
  254. /package/.morph/{standards → framework/standards}/core/architecture.md +0 -0
  255. /package/.morph/{standards → framework/standards}/core/coding.md +0 -0
  256. /package/.morph/{standards → framework/standards}/core/git-branching-strategy.md +0 -0
  257. /package/.morph/{standards → framework/standards}/core/git.md +0 -0
  258. /package/.morph/{standards → framework/standards}/core/testing.md +0 -0
  259. /package/.morph/{standards → framework/standards}/data/nosql/blob-storage.md +0 -0
  260. /package/.morph/{standards → framework/standards}/data/nosql/cache/redis.md +0 -0
  261. /package/.morph/{standards → framework/standards}/data/nosql/cosmos-db.md +0 -0
  262. /package/.morph/{standards → framework/standards}/data/vector-search/azure-ai-search.md +0 -0
  263. /package/.morph/{standards → framework/standards}/data/vector-search/rag-chunking.md +0 -0
  264. /package/.morph/{standards → framework/standards}/frontend/blazor/design-checklist.md +0 -0
  265. /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui-setup.md +0 -0
  266. /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui.md +0 -0
  267. /package/.morph/{standards → framework/standards}/frontend/blazor/html-conversion.md +0 -0
  268. /package/.morph/{standards → framework/standards}/frontend/blazor/lifecycle.md +0 -0
  269. /package/.morph/{standards → framework/standards}/frontend/blazor/pitfalls.md +0 -0
  270. /package/.morph/{standards → framework/standards}/frontend/blazor/state.md +0 -0
  271. /package/.morph/{standards → framework/standards}/frontend/design-system/animations.md +0 -0
  272. /package/.morph/{standards → framework/standards}/frontend/design-system/naming.md +0 -0
  273. /package/.morph/{standards → framework/standards}/frontend/nextjs/nextjs-patterns.md +0 -0
  274. /package/.morph/{standards → framework/standards}/infrastructure/azure/azure.md +0 -0
  275. /package/.morph/{standards → framework/standards}/infrastructure/azure/bicep/bicep-patterns.md +0 -0
  276. /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/azure-devops-setup.md +0 -0
  277. /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/local-development.md +0 -0
  278. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/functions.md +0 -0
  279. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/service-bus.md +0 -0
  280. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/storage.md +0 -0
  281. /package/.morph/{standards → framework/standards}/infrastructure/docker/easypanel-deploy.md +0 -0
  282. /package/.morph/{standards → framework/standards}/infrastructure/supabase/mcp-setup.md +0 -0
  283. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-auth.md +0 -0
  284. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-pgvector.md +0 -0
  285. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-rls.md +0 -0
  286. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-storage.md +0 -0
  287. /package/.morph/{standards → framework/standards}/integration/api/graphql.md +0 -0
  288. /package/.morph/{standards → framework/standards}/integration/api/grpc.md +0 -0
  289. /package/.morph/{standards → framework/standards}/integration/api/rest-design.md +0 -0
  290. /package/.morph/{standards → framework/standards}/integration/event-driven/cqrs.md +0 -0
  291. /package/.morph/{standards → framework/standards}/integration/event-driven/event-sourcing.md +0 -0
  292. /package/.morph/{standards → framework/standards}/integration/event-driven/service-bus.md +0 -0
  293. /package/.morph/{standards → framework/standards}/observability/logging.md +0 -0
  294. /package/.morph/{standards → framework/standards}/observability/metrics.md +0 -0
  295. /package/.morph/{standards → framework/standards}/observability/monitoring.md +0 -0
  296. /package/.morph/{standards → framework/standards}/observability/tracing.md +0 -0
  297. /package/.morph/{standards → framework/standards}/workflows/parallel-execution.md +0 -0
  298. /package/.morph/{standards → framework/standards}/workflows/thread-management.md +0 -0
  299. /package/.morph/{templates → framework/templates}/.idea/morph-templates.xml +0 -0
  300. /package/.morph/{templates → framework/templates}/.vscode/morph-templates.code-snippets +0 -0
  301. /package/.morph/{templates → framework/templates}/IDE-SNIPPETS.md +0 -0
  302. /package/.morph/{templates → framework/templates}/code/dotnet/backend/repository.cs +0 -0
  303. /package/.morph/{templates → framework/templates}/code/dotnet/backend/service.cs +0 -0
  304. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Commands.cs +0 -0
  305. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Entities.cs +0 -0
  306. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Queries.cs +0 -0
  307. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/README.md +0 -0
  308. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/api-contracts.cs +0 -0
  309. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/contracts.cs +0 -0
  310. /package/.morph/{templates → framework/templates}/code/dotnet/database/migration.cs +0 -0
  311. /package/.morph/{templates → framework/templates}/code/dotnet/frontend/component.razor +0 -0
  312. /package/.morph/{templates → framework/templates}/code/dotnet/jobs/agent.cs +0 -0
  313. /package/.morph/{templates → framework/templates}/code/dotnet/jobs/job.cs +0 -0
  314. /package/.morph/{templates → framework/templates}/code/dotnet/test.cs +0 -0
  315. /package/.morph/{templates → framework/templates}/code/sql/rls-policy.sql +0 -0
  316. /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.sql +0 -0
  317. /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.template.sql +0 -0
  318. /package/.morph/{templates → framework/templates}/code/typescript/contracts.ts +0 -0
  319. /package/.morph/{templates → framework/templates}/docs/proposal.md +0 -0
  320. /package/.morph/{templates → framework/templates}/examples/design-system-examples.md +0 -0
  321. /package/.morph/{templates → framework/templates}/feature/decisions.md +0 -0
  322. /package/.morph/{templates → framework/templates}/feature/recap.md +0 -0
  323. /package/.morph/{templates → framework/templates}/feature/tasks.md +0 -0
  324. /package/.morph/{templates → framework/templates}/infrastructure/azure/Dockerfile.example +0 -0
  325. /package/.morph/{templates → framework/templates}/infrastructure/azure/README.md +0 -0
  326. /package/.morph/{templates → framework/templates}/infrastructure/azure/app-insights.bicep +0 -0
  327. /package/.morph/{templates → framework/templates}/infrastructure/azure/app-service.bicep +0 -0
  328. /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app-env.bicep +0 -0
  329. /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app.bicep +0 -0
  330. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy-checklist.md +0 -0
  331. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.ps1 +0 -0
  332. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.sh +0 -0
  333. /package/.morph/{templates → framework/templates}/infrastructure/azure/key-vault.bicep +0 -0
  334. /package/.morph/{templates → framework/templates}/infrastructure/azure/main.bicep +0 -0
  335. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.dev.json +0 -0
  336. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.prod.json +0 -0
  337. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.staging.json +0 -0
  338. /package/.morph/{templates → framework/templates}/infrastructure/azure/sql-database.bicep +0 -0
  339. /package/.morph/{templates → framework/templates}/infrastructure/azure/storage.bicep +0 -0
  340. /package/.morph/{templates → framework/templates}/infrastructure/docker/Dockerfile.template +0 -0
  341. /package/.morph/{templates → framework/templates}/infrastructure/docker/docker-compose.template.yml +0 -0
  342. /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-api.dockerfile +0 -0
  343. /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-web.dockerfile +0 -0
  344. /package/.morph/{templates → framework/templates}/infrastructure/docker/easypanel.template.json +0 -0
  345. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -0
  346. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -0
  347. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/health-check/action.yml.hbs +0 -0
  348. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -0
  349. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -0
  350. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -0
  351. /package/.morph/{templates → framework/templates}/integrations/asaas-client.cs +0 -0
  352. /package/.morph/{templates → framework/templates}/integrations/asaas-webhook.cs +0 -0
  353. /package/.morph/{templates → framework/templates}/integrations/azure-identity-config.cs +0 -0
  354. /package/.morph/{templates → framework/templates}/integrations/clerk-config.cs +0 -0
  355. /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-agent.md +0 -0
  356. /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-aggregator.md +0 -0
  357. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-retry.md +0 -0
  358. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-validation.md +0 -0
  359. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-wrapper.md +0 -0
  360. /package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-coordinator.md +0 -0
  361. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/backend-squad.md +0 -0
  362. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/frontend-squad.md +0 -0
  363. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/squad-leader.md +0 -0
  364. /package/.morph/{templates → framework/templates}/meta-prompts/validators/checkpoint-validator.md +0 -0
  365. /package/.morph/{templates → framework/templates}/saas/subscription.cs +0 -0
  366. /package/.morph/{templates → framework/templates}/saas/tenant.cs +0 -0
  367. /package/.morph/{templates → framework/templates}/state.template.json +0 -0
  368. /package/.morph/{templates → framework/templates}/ui/FluentDesignTheme.cs +0 -0
  369. /package/.morph/{templates → framework/templates}/ui/MudTheme.cs +0 -0
  370. /package/.morph/{templates → framework/templates}/ui/design-system.css +0 -0
  371. /package/framework/hooks/{commit-msg → git/commit-msg}/conventional-commits.sh +0 -0
  372. /package/framework/hooks/{pre-commit → git/pre-commit}/agents.sh +0 -0
  373. /package/framework/hooks/{pre-commit → git/pre-commit}/orchestrator.sh +0 -0
  374. /package/framework/hooks/{pre-commit → git/pre-commit}/specs.sh +0 -0
  375. /package/framework/hooks/{pre-push → git/pre-push}/run-tests.sh +0 -0
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * UserPromptSubmit Hook: Enrich User Prompts with Context
5
+ *
6
+ * Event: UserPromptSubmit
7
+ *
8
+ * Scans user prompt for morph-spec keywords and injects relevant context:
9
+ * - Feature name mentioned → inject its current status/phase
10
+ * - "implement"/"code" while not in implement phase → warn about wrong phase
11
+ * - "approve"/"looks good" → inject approval command syntax
12
+ * - "next task" → inject current task list
13
+ *
14
+ * Fail-open: exits 0 on any error.
15
+ */
16
+
17
+ import { readStdin } from '../../shared/stdin-reader.js';
18
+ import { stateExists, loadState, getActiveFeature, getFeature, getPendingGates } from '../../shared/state-reader.js';
19
+ import { injectContext, pass } from '../../shared/hook-response.js';
20
+
21
+ try {
22
+ if (!stateExists()) pass();
23
+
24
+ const payload = await readStdin();
25
+ if (!payload) pass();
26
+
27
+ const userPrompt = payload?.user_prompt || payload?.content || '';
28
+ if (!userPrompt || userPrompt.length < 3) pass();
29
+
30
+ const promptLower = userPrompt.toLowerCase();
31
+ const state = loadState();
32
+ if (!state?.features) pass();
33
+
34
+ const context = [];
35
+
36
+ // Check if a feature name is mentioned
37
+ for (const [featureName, feature] of Object.entries(state.features)) {
38
+ if (promptLower.includes(featureName.toLowerCase())) {
39
+ context.push(`[morph-spec] Feature '${featureName}': phase=${feature.phase}, status=${feature.status}`);
40
+ if (feature.tasks?.total > 0) {
41
+ context.push(` Tasks: ${feature.tasks.completed || 0}/${feature.tasks.total} completed`);
42
+ }
43
+ break; // Only inject for the first matched feature
44
+ }
45
+ }
46
+
47
+ // Check for implement/code intent while not in implement phase
48
+ const active = getActiveFeature();
49
+ if (active) {
50
+ const { name, feature } = active;
51
+
52
+ const codeKeywords = ['implement', 'code', 'start coding', 'write the code', 'build it', 'let\'s build'];
53
+ const wantsToCode = codeKeywords.some(kw => promptLower.includes(kw));
54
+
55
+ if (wantsToCode && feature.phase !== 'implement' && feature.phase !== 'sync') {
56
+ context.push(
57
+ `[morph-spec] WARNING: Feature '${name}' is in '${feature.phase}' phase, not 'implement'.` +
58
+ ` Complete the current phase first or advance: morph-spec phase advance ${name}`
59
+ );
60
+ }
61
+
62
+ // Check for approval intent
63
+ const approvalKeywords = ['approve', 'approved', 'looks good', 'lgtm', 'ship it'];
64
+ const wantsToApprove = approvalKeywords.some(kw => promptLower.includes(kw));
65
+
66
+ if (wantsToApprove) {
67
+ const pending = getPendingGates(name);
68
+ if (pending.length > 0) {
69
+ context.push(
70
+ `[morph-spec] To approve, use: morph-spec approve ${name} ${pending[0]}`
71
+ );
72
+ }
73
+ }
74
+
75
+ // Check for "next task" intent
76
+ if (promptLower.includes('next task') || promptLower.includes('what\'s next')) {
77
+ if (feature.phase === 'implement') {
78
+ context.push(
79
+ `[morph-spec] Use: morph-spec task next ${name}`
80
+ );
81
+ }
82
+ }
83
+ }
84
+
85
+ if (context.length === 0) pass();
86
+
87
+ injectContext(context.join('\n'));
88
+ } catch {
89
+ // Fail-open
90
+ process.exit(0);
91
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Shared hook response builders for Claude Code hooks.
3
+ *
4
+ * Claude Code hooks communicate via JSON to stdout.
5
+ * - PreToolUse: { "decision": "block"|"approve", "reason": "..." }
6
+ * - SessionStart/Stop/etc: { "additionalContext": "..." }
7
+ */
8
+
9
+ /**
10
+ * Block a tool use with a reason.
11
+ * @param {string} reason - Human-readable reason for blocking
12
+ */
13
+ export function block(reason) {
14
+ console.log(JSON.stringify({ decision: 'block', reason }));
15
+ process.exit(0);
16
+ }
17
+
18
+ /**
19
+ * Approve a tool use, optionally injecting context.
20
+ * @param {string} [context] - Additional context to inject
21
+ */
22
+ export function approve(context) {
23
+ if (context) {
24
+ console.log(JSON.stringify({ decision: 'approve', additionalContext: context }));
25
+ }
26
+ // No output = implicit approve
27
+ process.exit(0);
28
+ }
29
+
30
+ /**
31
+ * Inject additional context (for SessionStart, Stop, UserPromptSubmit, etc.).
32
+ * @param {string} text - Context text to inject
33
+ * @param {Object} [extra] - Additional fields to include in response
34
+ */
35
+ export function injectContext(text, extra = {}) {
36
+ console.log(JSON.stringify({ additionalContext: text, ...extra }));
37
+ process.exit(0);
38
+ }
39
+
40
+ /**
41
+ * Silent exit — no output, no blocking.
42
+ */
43
+ export function pass() {
44
+ process.exit(0);
45
+ }
@@ -0,0 +1,129 @@
1
+ // GENERATED by scripts/generate-refs.js — DO NOT EDIT manually
2
+ // Source of truth: src/core/paths/output-schema.js
3
+ // Regenerate with: node scripts/generate-refs.js
4
+ /**
5
+ * Shared phase utilities for Claude Code hooks.
6
+ *
7
+ * Maps phases to directories and output types.
8
+ */
9
+
10
+ /** Phase order */
11
+ export const PHASE_ORDER = ["proposal","setup","uiux","design","clarify","tasks","implement","sync"];
12
+
13
+ /** Map phase → allowed output subdirectory */
14
+ export const PHASE_DIRS = {
15
+ proposal: '0-proposal',
16
+ setup: '0-proposal',
17
+ uiux: '2-ui',
18
+ design: '1-design',
19
+ clarify: '1-design',
20
+ tasks: '3-tasks',
21
+ implement: '4-implement',
22
+ sync: '4-implement',
23
+ };
24
+
25
+ /** Map output type (camelCase) → phase that produces it */
26
+ export const OUTPUT_PHASE_MAP = {
27
+ proposal: 'proposal',
28
+ schemaAnalysis: 'design',
29
+ spec: 'design',
30
+ clarifications: 'clarify',
31
+ contracts: 'design',
32
+ tasks: 'tasks',
33
+ uiDesignSystem: 'uiux',
34
+ uiMockups: 'uiux',
35
+ uiComponents: 'uiux',
36
+ uiFlows: 'uiux',
37
+ decisions: 'design',
38
+ recap: 'implement',
39
+ };
40
+
41
+ /** Map filename → output type (camelCase) */
42
+ export const FILENAME_TO_OUTPUT = {
43
+ 'proposal.md': 'proposal',
44
+ 'schema-analysis.md': 'schemaAnalysis',
45
+ 'spec.md': 'spec',
46
+ 'clarifications.md': 'clarifications',
47
+ 'contracts.cs': 'contracts',
48
+ 'tasks.md': 'tasks',
49
+ 'design-system.md': 'uiDesignSystem',
50
+ 'mockups.md': 'uiMockups',
51
+ 'components.md': 'uiComponents',
52
+ 'flows.md': 'uiFlows',
53
+ 'decisions.md': 'decisions',
54
+ 'recap.md': 'recap',
55
+ };
56
+
57
+ /** Protected spec files and the approval gate that locks them */
58
+ export const PROTECTED_SPEC_FILES = {
59
+ 'schema-analysis.md': 'design',
60
+ 'spec.md': 'design',
61
+ 'contracts.cs': 'design',
62
+ 'tasks.md': 'tasks',
63
+ 'design-system.md': 'uiux',
64
+ 'mockups.md': 'uiux',
65
+ 'components.md': 'uiux',
66
+ 'flows.md': 'uiux',
67
+ };
68
+
69
+ /**
70
+ * Extract feature name from a .morph/features/{feature}/... path
71
+ * @param {string} filePath - File path to analyze
72
+ * @returns {string|null} Feature name or null
73
+ */
74
+ export function extractFeatureName(filePath) {
75
+ const normalized = filePath.replace(/\\/g, '/');
76
+ const match = normalized.match(/\.morph\/features\/([^/]+)\//);
77
+ return match ? match[1] : null;
78
+ }
79
+
80
+ /**
81
+ * Extract phase subdirectory from a .morph/features/{feature}/{phaseDir}/... path
82
+ * @param {string} filePath - File path to analyze
83
+ * @returns {string|null} Phase directory (e.g., '0-proposal', '1-design') or null
84
+ */
85
+ export function extractPhaseDir(filePath) {
86
+ const normalized = filePath.replace(/\\/g, '/');
87
+ const match = normalized.match(/\.morph\/features\/[^/]+\/(\d+-[^/]+)\//);
88
+ return match ? match[1] : null;
89
+ }
90
+
91
+ /**
92
+ * Check if a file path is inside .morph/features/
93
+ * @param {string} filePath
94
+ * @returns {boolean}
95
+ */
96
+ export function isFeaturePath(filePath) {
97
+ const normalized = filePath.replace(/\\/g, '/');
98
+ return normalized.includes('.morph/features/');
99
+ }
100
+
101
+ /**
102
+ * Check if a file path is inside .morph/framework/ (readonly)
103
+ * @param {string} filePath
104
+ * @returns {boolean}
105
+ */
106
+ export function isFrameworkPath(filePath) {
107
+ const normalized = filePath.replace(/\\/g, '/');
108
+ return normalized.includes('.morph/framework/');
109
+ }
110
+
111
+ /**
112
+ * Check if a file path is state.json
113
+ * @param {string} filePath
114
+ * @returns {boolean}
115
+ */
116
+ export function isStatePath(filePath) {
117
+ const normalized = filePath.replace(/\\/g, '/');
118
+ return normalized.endsWith('.morph/state.json');
119
+ }
120
+
121
+ /**
122
+ * Get the basename of a file path
123
+ * @param {string} filePath
124
+ * @returns {string}
125
+ */
126
+ export function getBasename(filePath) {
127
+ const normalized = filePath.replace(/\\/g, '/');
128
+ return normalized.split('/').pop();
129
+ }
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Shared read-only state accessor for Claude Code hooks.
3
+ *
4
+ * Wraps state.json reads with fail-open semantics:
5
+ * - Returns null instead of throwing on missing/corrupt state
6
+ * - Never writes to state.json (read-only)
7
+ * - Uses synchronous reads for <100ms performance
8
+ */
9
+
10
+ import { readFileSync, existsSync } from 'fs';
11
+ import { join } from 'path';
12
+
13
+ const STATE_FILE = '.morph/state.json';
14
+
15
+ /**
16
+ * Load state.json from the project root.
17
+ * Fail-open: returns null if file missing or corrupt.
18
+ * @param {string} [projectPath] - Project root (defaults to cwd)
19
+ * @returns {Object|null} State object or null
20
+ */
21
+ export function loadState(projectPath) {
22
+ try {
23
+ const statePath = join(projectPath || process.cwd(), STATE_FILE);
24
+ if (!existsSync(statePath)) return null;
25
+ return JSON.parse(readFileSync(statePath, 'utf-8'));
26
+ } catch {
27
+ return null;
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Check if state.json exists.
33
+ * @param {string} [projectPath]
34
+ * @returns {boolean}
35
+ */
36
+ export function stateExists(projectPath) {
37
+ return existsSync(join(projectPath || process.cwd(), STATE_FILE));
38
+ }
39
+
40
+ /**
41
+ * Get the active feature (most recently updated in_progress feature).
42
+ * @param {string} [projectPath]
43
+ * @returns {{ name: string, feature: Object }|null}
44
+ */
45
+ export function getActiveFeature(projectPath) {
46
+ const state = loadState(projectPath);
47
+ if (!state?.features) return null;
48
+
49
+ let active = null;
50
+ let latestUpdate = '';
51
+
52
+ for (const [name, feature] of Object.entries(state.features)) {
53
+ if (feature.status === 'in_progress' || feature.status === 'draft') {
54
+ const updated = feature.updatedAt || feature.createdAt || '';
55
+ if (updated >= latestUpdate) {
56
+ latestUpdate = updated;
57
+ active = { name, feature };
58
+ }
59
+ }
60
+ }
61
+
62
+ return active;
63
+ }
64
+
65
+ /**
66
+ * Get a specific feature by name.
67
+ * @param {string} featureName
68
+ * @param {string} [projectPath]
69
+ * @returns {Object|null}
70
+ */
71
+ export function getFeature(featureName, projectPath) {
72
+ const state = loadState(projectPath);
73
+ return state?.features?.[featureName] || null;
74
+ }
75
+
76
+ /**
77
+ * Get the current phase of a feature.
78
+ * @param {string} featureName
79
+ * @param {string} [projectPath]
80
+ * @returns {string|null}
81
+ */
82
+ export function getFeaturePhase(featureName, projectPath) {
83
+ const feature = getFeature(featureName, projectPath);
84
+ return feature?.phase || null;
85
+ }
86
+
87
+ /**
88
+ * Get approval status for a gate.
89
+ * @param {string} featureName
90
+ * @param {string} gate - 'proposal'|'uiux'|'design'|'tasks'
91
+ * @param {string} [projectPath]
92
+ * @returns {boolean}
93
+ */
94
+ export function isGateApproved(featureName, gate, projectPath) {
95
+ const feature = getFeature(featureName, projectPath);
96
+ return feature?.approvalGates?.[gate]?.approved === true;
97
+ }
98
+
99
+ /**
100
+ * Get all pending approval gates for a feature.
101
+ * @param {string} featureName
102
+ * @param {string} [projectPath]
103
+ * @returns {string[]} List of gate names that are not yet approved
104
+ */
105
+ export function getPendingGates(featureName, projectPath) {
106
+ const feature = getFeature(featureName, projectPath);
107
+ if (!feature?.approvalGates) return [];
108
+
109
+ return Object.entries(feature.approvalGates)
110
+ .filter(([, gate]) => !gate.approved)
111
+ .map(([name]) => name);
112
+ }
113
+
114
+ /**
115
+ * Get feature outputs status.
116
+ * @param {string} featureName
117
+ * @param {string} [projectPath]
118
+ * @returns {Object|null} outputs map or null
119
+ */
120
+ export function getOutputs(featureName, projectPath) {
121
+ const feature = getFeature(featureName, projectPath);
122
+ return feature?.outputs || null;
123
+ }
124
+
125
+ /**
126
+ * Get uncompleted required outputs for current phase.
127
+ * @param {string} featureName
128
+ * @param {string} [projectPath]
129
+ * @returns {Array<{type: string, path: string}>}
130
+ */
131
+ export function getMissingOutputs(featureName, projectPath) {
132
+ const feature = getFeature(featureName, projectPath);
133
+ if (!feature?.outputs) return [];
134
+
135
+ return Object.entries(feature.outputs)
136
+ .filter(([, output]) => !output.created)
137
+ .map(([type, output]) => ({ type, path: output.path }));
138
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Shared stdin reader for Claude Code hooks.
3
+ *
4
+ * Reads JSON payload from stdin (provided by Claude Code to hooks).
5
+ * Returns parsed object or null on failure.
6
+ */
7
+
8
+ /**
9
+ * Read and parse JSON from stdin
10
+ * @returns {Promise<Object|null>} Parsed JSON or null
11
+ */
12
+ export function readStdin() {
13
+ return new Promise((resolve) => {
14
+ let input = '';
15
+ process.stdin.setEncoding('utf-8');
16
+ process.stdin.on('data', (chunk) => { input += chunk; });
17
+ process.stdin.on('end', () => {
18
+ try {
19
+ resolve(JSON.parse(input || '{}'));
20
+ } catch {
21
+ resolve(null);
22
+ }
23
+ });
24
+ process.stdin.on('error', () => resolve(null));
25
+ });
26
+ }
@@ -0,0 +1,145 @@
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
+ },
22
+ "setup": {
23
+ "id": "setup",
24
+ "index": 1,
25
+ "folder": null,
26
+ "displayName": "Setup",
27
+ "goals": [
28
+ "Load project context from .morph/context/",
29
+ "Activate relevant agents by tier and keyword",
30
+ "Confirm workflow type (fast-track / standard / full-morph)"
31
+ ],
32
+ "requiredOutputs": [],
33
+ "optionalOutputs": [],
34
+ "recommendedMCPs": ["github"],
35
+ "pausePoints": [],
36
+ "agentTiers": [1, 2]
37
+ },
38
+ "uiux": {
39
+ "id": "uiux",
40
+ "index": 1.5,
41
+ "folder": "2-ui",
42
+ "displayName": "UI/UX Design",
43
+ "optional": true,
44
+ "goals": [
45
+ "Define visual design and design system",
46
+ "Create component inventory and style guide",
47
+ "Produce wireframes and user flows"
48
+ ],
49
+ "requiredOutputs": ["uiDesignSystem"],
50
+ "optionalOutputs": ["uiMockups", "uiComponents", "uiFlows"],
51
+ "recommendedMCPs": ["playwright", "context7"],
52
+ "pausePoints": [
53
+ { "id": "uiux", "label": "Approve UI/UX Design" }
54
+ ],
55
+ "agentTiers": [1, 2, 3]
56
+ },
57
+ "design": {
58
+ "id": "design",
59
+ "index": 2,
60
+ "folder": "1-design",
61
+ "displayName": "Technical Design",
62
+ "goals": [
63
+ "Write technical specification",
64
+ "Define C# contracts and interfaces",
65
+ "Analyse schema changes",
66
+ "Document architectural decisions"
67
+ ],
68
+ "requiredOutputs": ["spec", "contracts"],
69
+ "optionalOutputs": ["schemaAnalysis", "clarifications", "decisions"],
70
+ "recommendedMCPs": ["supabase", "context7", "github"],
71
+ "pausePoints": [
72
+ { "id": "design", "label": "Approve Design Spec" }
73
+ ],
74
+ "agentTiers": [1, 2, 3, 4]
75
+ },
76
+ "clarify": {
77
+ "id": "clarify",
78
+ "index": 3,
79
+ "folder": "1-design",
80
+ "displayName": "Clarification",
81
+ "goals": [
82
+ "Resolve open questions and ambiguities",
83
+ "Update spec with clarification decisions",
84
+ "Confirm edge cases are handled"
85
+ ],
86
+ "requiredOutputs": ["clarifications"],
87
+ "optionalOutputs": [],
88
+ "recommendedMCPs": ["context7", "github"],
89
+ "pausePoints": [],
90
+ "agentTiers": [1, 2]
91
+ },
92
+ "tasks": {
93
+ "id": "tasks",
94
+ "index": 4,
95
+ "folder": "3-tasks",
96
+ "displayName": "Task Breakdown",
97
+ "goals": [
98
+ "Break approved spec into numbered, atomic tasks",
99
+ "Order tasks by dependency",
100
+ "Assign tasks to agent tiers"
101
+ ],
102
+ "requiredOutputs": ["tasks"],
103
+ "optionalOutputs": [],
104
+ "recommendedMCPs": ["context7", "github"],
105
+ "pausePoints": [
106
+ { "id": "tasks", "label": "Approve Task List" }
107
+ ],
108
+ "agentTiers": [1, 2, 3]
109
+ },
110
+ "implement": {
111
+ "id": "implement",
112
+ "index": 5,
113
+ "folder": "4-implement",
114
+ "displayName": "Implementation",
115
+ "goals": [
116
+ "Execute approved tasks in order",
117
+ "Follow framework standards at each step",
118
+ "Checkpoint every 3 tasks",
119
+ "Write implementation recap"
120
+ ],
121
+ "requiredOutputs": ["recap"],
122
+ "optionalOutputs": [],
123
+ "recommendedMCPs": ["supabase", "context7", "playwright", "github", "docker", "azure"],
124
+ "pausePoints": [],
125
+ "agentTiers": [1, 2, 3, 4]
126
+ },
127
+ "sync": {
128
+ "id": "sync",
129
+ "index": 6,
130
+ "folder": null,
131
+ "displayName": "Sync Standards",
132
+ "optional": true,
133
+ "goals": [
134
+ "Update framework standards from feature learnings",
135
+ "Capture new patterns to learning library",
136
+ "Archive completed feature"
137
+ ],
138
+ "requiredOutputs": [],
139
+ "optionalOutputs": [],
140
+ "recommendedMCPs": [],
141
+ "pausePoints": [],
142
+ "agentTiers": [1]
143
+ }
144
+ }
145
+ }
@@ -0,0 +1,10 @@
1
+ ---
2
+ paths:
3
+ - "**/*.cs"
4
+ - "**/*.csproj"
5
+ ---
6
+
7
+ # C# and .NET Standards
8
+
9
+ @.morph/framework/standards/core/coding.md
10
+ @.morph/framework/standards/backend/dotnet/core.md
@@ -0,0 +1,14 @@
1
+ ---
2
+ paths:
3
+ - "**/*.razor"
4
+ - "**/*.tsx"
5
+ - "**/*.ts"
6
+ - "**/*.css"
7
+ - "**/*.scss"
8
+ ---
9
+
10
+ # Frontend Standards
11
+
12
+ @.morph/framework/standards/frontend/blazor/design-checklist.md
13
+ @.morph/framework/standards/frontend/nextjs/nextjs-patterns.md
14
+ @.morph/framework/standards/frontend/design-system/naming.md
@@ -0,0 +1,13 @@
1
+ ---
2
+ paths:
3
+ - "**/*.bicep"
4
+ - "**/Dockerfile"
5
+ - "**/docker-compose*.yml"
6
+ - "**/pipelines/**"
7
+ - "**/.github/workflows/**"
8
+ ---
9
+
10
+ # Infrastructure Standards
11
+
12
+ @.morph/framework/standards/infrastructure/azure/azure.md
13
+ @.morph/framework/standards/infrastructure/docker/easypanel-deploy.md