@polymorphism-tech/morph-spec 4.3.7 → 4.6.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 (394) hide show
  1. package/.morph/.morphversion +3 -3
  2. package/.morph/analytics/threads-log.jsonl +6 -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/{standards → framework/standards}/frontend/nextjs/nextjs-patterns.md +17 -0
  7. package/.morph/framework/standards/integration/mcp/mcp-tools.md +384 -0
  8. package/.morph/{templates → framework/templates}/README.md +17 -17
  9. package/.morph/{templates → framework/templates}/REGISTRY.json +48 -233
  10. package/.morph/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
  11. package/.morph/{templates → framework/templates}/context/CONTEXT-FEATURE.md +1 -1
  12. package/.morph/{templates → framework/templates}/context/CONTEXT.md +3 -3
  13. package/.morph/framework/templates/docs/clarifications.md +253 -0
  14. package/.morph/framework/templates/docs/onboarding.md +123 -0
  15. package/.morph/framework/templates/docs/schema-analysis.md +119 -0
  16. package/.morph/{templates → framework/templates}/docs/spec.md +149 -149
  17. package/.morph/framework/templates/docs/ui-components.md +124 -0
  18. package/.morph/framework/templates/docs/ui-design-system.md +76 -0
  19. package/.morph/framework/templates/docs/ui-flows.md +167 -0
  20. package/.morph/framework/templates/docs/ui-mockups.md +98 -0
  21. package/.morph/framework/templates/docs/user-stories.md +34 -0
  22. package/.morph/{templates → framework/templates}/examples/spec-examples.md +1 -1
  23. package/.morph/{templates → framework/templates}/infrastructure/github/README.md +11 -11
  24. package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
  25. package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  26. package/.morph/{templates → framework/templates}/meta-prompts/validators/pre-commit-validator.md +1 -1
  27. package/.morph/logs/tool-failures.log +7 -0
  28. package/.morph/memory/pre-compact-2026-02-23T15-43-03-521Z.json +16 -0
  29. package/.morph/state.json +1 -1
  30. package/CLAUDE.md +77 -155
  31. package/README.md +20 -18
  32. package/bin/detect-agents.js +1 -1
  33. package/bin/morph-spec.js +116 -266
  34. package/bin/task-manager.cjs +2 -2
  35. package/bin/validate.js +1 -1
  36. package/claude-plugin.json +14 -0
  37. package/docs/claude-alignment-report.md +137 -0
  38. package/docs/plans/2026-02-22-claude-docs-morph-alignment-analysis.md +512 -0
  39. package/docs/plans/2026-02-22-claude-settings.md +515 -0
  40. package/docs/plans/2026-02-22-morph-cc-alignment-impl.md +728 -0
  41. package/docs/plans/2026-02-22-morph-spec-next.md +478 -0
  42. package/docs/plans/2026-02-22-native-alignment-design.md +199 -0
  43. package/docs/plans/2026-02-22-native-alignment-impl.md +925 -0
  44. package/docs/plans/2026-02-22-native-enrichment-design.md +244 -0
  45. package/docs/plans/2026-02-22-native-enrichment.md +735 -0
  46. package/framework/CLAUDE.md +77 -0
  47. package/framework/{skills/level-2-domains → agents}/ai-agents/ai-system-architect.md +7 -3
  48. package/framework/{skills/level-2-domains → agents}/architecture/po-pm-advisor.md +7 -1
  49. package/framework/{skills/level-2-domains → agents}/architecture/prompt-engineer.md +7 -1
  50. package/framework/{skills/level-2-domains → agents}/architecture/seo-growth-hacker.md +7 -1
  51. package/framework/{skills/level-2-domains → agents}/architecture/standards-architect.md +10 -6
  52. package/framework/agents/backend/api-designer.md +103 -0
  53. package/framework/{skills/level-2-domains → agents}/backend/dotnet-senior.md +7 -1
  54. package/framework/agents/backend/ef-modeler.md +119 -0
  55. package/framework/{skills/level-2-domains → agents}/backend/hangfire-orchestrator.md +8 -4
  56. package/framework/{skills/level-2-domains → agents}/backend/ms-agent-expert.md +7 -3
  57. package/framework/{skills/level-2-domains → agents}/frontend/blazor-builder.md +7 -3
  58. package/framework/{skills/level-2-domains → agents}/frontend/nextjs-expert.md +7 -3
  59. package/framework/{skills/level-2-domains → agents}/frontend/ui-ux-designer.md +8 -2
  60. package/framework/{skills/level-2-domains → agents}/infrastructure/azure-architect.md +7 -1
  61. package/framework/{skills/level-2-domains → agents}/infrastructure/azure-deploy-specialist.md +7 -1
  62. package/framework/{skills/level-2-domains → agents}/infrastructure/bicep-architect.md +7 -3
  63. package/framework/{skills/level-2-domains → agents}/infrastructure/container-specialist.md +7 -3
  64. package/framework/{skills/level-2-domains → agents}/infrastructure/devops-engineer.md +7 -3
  65. package/framework/{skills/level-2-domains → agents}/integrations/asaas-financial.md +7 -3
  66. package/framework/{skills/level-2-domains → agents}/integrations/azure-identity.md +7 -3
  67. package/framework/{skills/level-2-domains → agents}/integrations/clerk-auth.md +7 -3
  68. package/framework/{skills/level-2-domains/integrations/hangfire-orchestrator.md → agents/integrations/hangfire-integration.md} +7 -1
  69. package/framework/{skills/level-2-domains → agents}/integrations/resend-email.md +7 -3
  70. package/framework/{skills/level-2-domains → agents}/quality/code-analyzer.md +9 -5
  71. package/framework/{skills/level-2-domains → agents}/quality/testing-specialist.md +7 -3
  72. package/framework/commands/morph-apply.md +9 -9
  73. package/framework/commands/morph-archive.md +8 -8
  74. package/framework/commands/morph-infra.md +1 -1
  75. package/framework/commands/morph-proposal.md +9 -9
  76. package/framework/commands/morph-status.md +3 -3
  77. package/framework/commands/morph-troubleshoot.md +1 -1
  78. package/framework/hooks/README.md +201 -282
  79. package/framework/hooks/claude-code/notification/approval-reminder.js +52 -0
  80. package/framework/hooks/claude-code/post-tool-use/dispatch.js +83 -0
  81. package/framework/hooks/claude-code/post-tool-use/handle-tool-failure.js +42 -0
  82. package/framework/hooks/claude-code/pre-compact/save-morph-context.js +61 -0
  83. package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +71 -0
  84. package/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +58 -0
  85. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +64 -0
  86. package/framework/hooks/claude-code/session-start/inject-morph-context.js +94 -0
  87. package/framework/hooks/claude-code/statusline.py +538 -0
  88. package/framework/hooks/claude-code/statusline.sh +7 -0
  89. package/framework/hooks/claude-code/stop/validate-completion.js +88 -0
  90. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +91 -0
  91. package/framework/hooks/shared/hook-response.js +45 -0
  92. package/framework/hooks/shared/phase-utils.js +129 -0
  93. package/framework/hooks/shared/state-reader.js +138 -0
  94. package/framework/hooks/shared/stdin-reader.js +26 -0
  95. package/framework/phases.json +145 -0
  96. package/framework/rules/csharp-standards.md +10 -0
  97. package/framework/rules/frontend-standards.md +14 -0
  98. package/framework/rules/infrastructure-standards.md +13 -0
  99. package/framework/rules/morph-workflow.md +86 -0
  100. package/framework/rules/testing-standards.md +11 -0
  101. package/framework/skills/README.md +66 -0
  102. package/framework/skills/level-0-meta/brainstorming/SKILL.md +135 -0
  103. package/framework/skills/level-0-meta/brainstorming/references/proposal-example.md +138 -0
  104. package/framework/skills/level-0-meta/{code-review.md → code-review/SKILL.md} +13 -4
  105. package/framework/skills/level-0-meta/code-review/references/review-example.md +164 -0
  106. package/framework/skills/level-0-meta/code-review/scripts/scan-csharp.mjs +121 -0
  107. package/framework/skills/level-0-meta/mcp-registry.json +207 -0
  108. package/framework/skills/level-0-meta/{morph-checklist.md → morph-checklist/SKILL.md} +8 -3
  109. package/framework/skills/{level-1-workflows/morph-replicate.md → level-0-meta/morph-replicate/SKILL.md} +13 -6
  110. package/framework/skills/level-0-meta/{simulation-checklist.md → simulation-checklist/SKILL.md} +9 -4
  111. package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +334 -0
  112. package/framework/skills/level-0-meta/verification-before-completion/SKILL.md +147 -0
  113. package/framework/skills/level-0-meta/verification-before-completion/scripts/check-phase-outputs.mjs +110 -0
  114. package/framework/skills/level-1-workflows/{phase-clarify.md → phase-clarify/SKILL.md} +65 -4
  115. package/framework/skills/level-1-workflows/phase-clarify/references/clarifications-example.md +117 -0
  116. package/framework/skills/level-1-workflows/phase-codebase-analysis/SKILL.md +181 -0
  117. package/framework/skills/level-1-workflows/phase-design/SKILL.md +303 -0
  118. package/framework/skills/level-1-workflows/phase-design/references/spec-example.md +253 -0
  119. package/framework/skills/level-1-workflows/phase-implement/SKILL.md +254 -0
  120. package/framework/skills/level-1-workflows/phase-implement/references/recap-example.md +132 -0
  121. package/framework/skills/level-1-workflows/phase-setup/SKILL.md +171 -0
  122. package/framework/skills/level-1-workflows/{phase-tasks.md → phase-tasks/SKILL.md} +89 -7
  123. package/framework/skills/level-1-workflows/phase-tasks/references/tasks-example.md +231 -0
  124. package/framework/skills/level-1-workflows/phase-tasks/scripts/validate-tasks.mjs +112 -0
  125. package/framework/skills/level-1-workflows/phase-uiux/SKILL.md +246 -0
  126. package/framework/standards/STANDARDS.json +812 -0
  127. package/framework/standards/ai-agents/team-orchestration.md +3 -3
  128. package/framework/standards/frontend/nextjs/nextjs-patterns.md +17 -0
  129. package/framework/standards/integration/mcp/mcp-tools.md +384 -0
  130. package/framework/templates/README.md +17 -17
  131. package/framework/templates/REGISTRY.json +48 -233
  132. package/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
  133. package/framework/templates/context/CONTEXT-FEATURE.md +1 -1
  134. package/framework/templates/context/CONTEXT.md +3 -3
  135. package/framework/templates/docs/clarifications.md +253 -0
  136. package/framework/templates/docs/onboarding.md +123 -0
  137. package/framework/templates/docs/schema-analysis.md +119 -0
  138. package/framework/templates/docs/spec.md +149 -149
  139. package/framework/templates/docs/ui-components.md +124 -0
  140. package/framework/templates/docs/ui-design-system.md +76 -0
  141. package/framework/templates/docs/ui-flows.md +167 -0
  142. package/framework/templates/docs/ui-mockups.md +98 -0
  143. package/framework/templates/docs/user-stories.md +34 -0
  144. package/framework/templates/examples/spec-examples.md +1 -1
  145. package/framework/templates/infrastructure/github/README.md +11 -11
  146. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
  147. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  148. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +1 -1
  149. package/framework/workflows/configs/express.json +45 -0
  150. package/framework/workflows/configs/spec-only.json +43 -0
  151. package/framework/workflows/docs/enforcement-pipeline.md +8 -8
  152. package/framework/workflows/docs/full-morph.md +3 -3
  153. package/package.json +3 -1
  154. package/scripts/generate-refs.js +336 -0
  155. package/scripts/generate-standards-registry.js +44 -0
  156. package/scripts/validate-real.mjs +255 -0
  157. package/src/commands/feature/create-story.js +362 -361
  158. package/src/commands/feature/shard-spec.js +225 -224
  159. package/src/commands/feature/sprint-status.js +1 -1
  160. package/src/commands/generation/generate-onboarding.js +169 -0
  161. package/src/commands/generation/generate.js +2 -2
  162. package/src/commands/mcp/mcp-setup.js +315 -0
  163. package/src/commands/project/changes.js +66 -0
  164. package/src/commands/project/checkpoint.js +209 -0
  165. package/src/commands/project/cost.js +179 -0
  166. package/src/commands/project/diff.js +278 -0
  167. package/src/commands/project/doctor.js +55 -7
  168. package/src/commands/project/init.js +318 -136
  169. package/src/commands/project/revert.js +173 -0
  170. package/src/commands/project/standards.js +80 -0
  171. package/src/commands/project/status.js +376 -0
  172. package/src/commands/project/update-agents.js +23 -0
  173. package/src/commands/project/update.js +60 -88
  174. package/src/commands/state/advance-phase.js +4 -3
  175. package/src/commands/state/state.js +10 -3
  176. package/src/commands/state/validate-phase.js +19 -2
  177. package/src/commands/templates/template-customize.js +4 -4
  178. package/src/commands/templates/template-render.js +1 -1
  179. package/src/commands/templates/template-show.js +1 -1
  180. package/src/commands/validation/validate-feature.js +359 -0
  181. package/src/core/orchestrator.js +3 -38
  182. package/src/core/paths/output-schema.js +135 -0
  183. package/src/core/state/state-manager.js +831 -592
  184. package/src/core/templates/template-registry.js +2 -2
  185. package/src/core/workflows/workflow-detector.js +17 -1
  186. package/src/lib/agents/micro-agent-factory.js +1 -1
  187. package/src/lib/context/context-bundler.js +2 -1
  188. package/src/lib/detectors/claude-config-detector.js +390 -0
  189. package/src/lib/detectors/conversation-analyzer.js +4 -4
  190. package/src/lib/detectors/design-system-detector.js +6 -5
  191. package/src/lib/detectors/standards-generator.js +2 -2
  192. package/src/lib/generators/context-generator.js +539 -538
  193. package/src/lib/generators/recap-generator.js +1 -1
  194. package/src/lib/generators/settings-generator.js +210 -0
  195. package/src/lib/hooks/hook-executor.js +1 -1
  196. package/src/lib/installers/mcp-installer.js +299 -0
  197. package/src/lib/learning/learning-system.js +3 -3
  198. package/src/lib/orchestration/team-orchestrator.js +1 -1
  199. package/src/lib/standards/standards-context-injector.js +7 -7
  200. package/src/lib/threads/thread-coordinator.js +1 -1
  201. package/src/lib/troubleshooting/troubleshoot-grep.js +1 -1
  202. package/src/lib/validators/contracts/contract-compliance-validator.js +274 -273
  203. package/src/lib/validators/design-system/design-system-validator.js +1 -1
  204. package/src/lib/validators/spec-validator.js +258 -258
  205. package/src/lib/validators/validation-runner.js +270 -269
  206. package/src/utils/agents-installer.js +206 -0
  207. package/src/utils/claude-settings-manager.js +258 -0
  208. package/src/utils/file-copier.js +1 -1
  209. package/src/utils/hooks-installer.js +354 -28
  210. package/src/utils/skills-installer.js +118 -0
  211. package/.morph/project/context/README.md +0 -17
  212. package/.morph/project/context/detection-log.md +0 -16
  213. package/.morph/project/standards/inferred.md +0 -59
  214. package/framework/hooks/agent-stop/validate-and-continue.js +0 -96
  215. package/framework/hooks/agent-stop/validate-checkpoints.js +0 -101
  216. package/framework/hooks/agent-stop/validate-tests.js +0 -109
  217. package/framework/hooks/agent-teams/dispatch.js +0 -67
  218. package/framework/hooks/agent-teams/phase-advanced.js +0 -80
  219. package/framework/hooks/agent-teams/task-completed.js +0 -76
  220. package/framework/hooks/agent-teams/teammate-idle.js +0 -70
  221. package/framework/skills/level-1-workflows/phase-design.md +0 -213
  222. package/framework/skills/level-1-workflows/phase-setup.md +0 -106
  223. package/framework/skills/level-1-workflows/phase-uiux.md +0 -169
  224. package/framework/skills/level-2-domains/backend/api-designer.md +0 -59
  225. package/framework/skills/level-2-domains/backend/ef-modeler.md +0 -58
  226. package/framework/skills/level-3-technologies/README.md +0 -7
  227. package/framework/skills/level-4-patterns/README.md +0 -7
  228. package/src/commands/agents/agents-fuse.js +0 -97
  229. package/src/commands/agents/micro-agent.js +0 -112
  230. package/src/commands/agents/spawn-team.js +0 -237
  231. package/src/commands/agents/squad-template.js +0 -146
  232. package/src/commands/analytics/analytics.js +0 -176
  233. package/src/commands/context/context-prime.js +0 -63
  234. package/src/commands/context/core-four.js +0 -54
  235. package/src/commands/generation/generate-context.js +0 -40
  236. package/src/commands/project/detect-agents.js +0 -207
  237. package/src/commands/project/detect-workflow.js +0 -174
  238. package/src/commands/threads/thread-template.js +0 -103
  239. package/src/commands/threads/threads.js +0 -261
  240. package/src/commands/utils/session-summary.js +0 -291
  241. package/src/llm/analyzer.js +0 -215
  242. package/src/llm/few-shot-examples.js +0 -216
  243. package/src/llm/project-config-schema.json +0 -188
  244. package/src/llm/prompt-builder.js +0 -96
  245. /package/.morph/{config → framework}/agents.json +0 -0
  246. /package/.morph/{standards → framework/standards}/ai-agents/blazor-ui.md +0 -0
  247. /package/.morph/{standards → framework/standards}/ai-agents/production.md +0 -0
  248. /package/.morph/{standards → framework/standards}/ai-agents/setup.md +0 -0
  249. /package/.morph/{standards → framework/standards}/ai-agents/workflows.md +0 -0
  250. /package/.morph/{standards → framework/standards}/architecture/ddd/aggregates.md +0 -0
  251. /package/.morph/{standards → framework/standards}/architecture/ddd/entities.md +0 -0
  252. /package/.morph/{standards → framework/standards}/architecture/ddd/value-objects.md +0 -0
  253. /package/.morph/{standards → framework/standards}/backend/api/minimal-api.md +0 -0
  254. /package/.morph/{standards → framework/standards}/backend/api/rest.md +0 -0
  255. /package/.morph/{standards → framework/standards}/backend/api/validation.md +0 -0
  256. /package/.morph/{standards → framework/standards}/backend/authentication/passkeys.md +0 -0
  257. /package/.morph/{standards → framework/standards}/backend/database/ef-core.md +0 -0
  258. /package/.morph/{standards → framework/standards}/backend/database/migrations.md +0 -0
  259. /package/.morph/{standards → framework/standards}/backend/database/postgresql/database.md +0 -0
  260. /package/.morph/{standards → framework/standards}/backend/database/repository-patterns.md +0 -0
  261. /package/.morph/{standards → framework/standards}/backend/database/vector-search-rag.md +0 -0
  262. /package/.morph/{standards → framework/standards}/backend/dotnet/async.md +0 -0
  263. /package/.morph/{standards → framework/standards}/backend/dotnet/core.md +0 -0
  264. /package/.morph/{standards → framework/standards}/backend/dotnet/di.md +0 -0
  265. /package/.morph/{standards → framework/standards}/backend/dotnet/program-cs-checklist.md +0 -0
  266. /package/.morph/{standards → framework/standards}/backend/integrations/asaas/asaas-api.md +0 -0
  267. /package/.morph/{standards → framework/standards}/backend/integrations/clerk/clerk-auth.md +0 -0
  268. /package/.morph/{standards → framework/standards}/backend/integrations/hangfire/hangfire-jobs.md +0 -0
  269. /package/.morph/{standards → framework/standards}/backend/integrations/resend/resend-email.md +0 -0
  270. /package/.morph/{standards → framework/standards}/context/analytics.md +0 -0
  271. /package/.morph/{standards → framework/standards}/context/bundles.md +0 -0
  272. /package/.morph/{standards → framework/standards}/context/priming.md +0 -0
  273. /package/.morph/{standards → framework/standards}/core/architecture.md +0 -0
  274. /package/.morph/{standards → framework/standards}/core/coding.md +0 -0
  275. /package/.morph/{standards → framework/standards}/core/git-branching-strategy.md +0 -0
  276. /package/.morph/{standards → framework/standards}/core/git.md +0 -0
  277. /package/.morph/{standards → framework/standards}/core/testing.md +0 -0
  278. /package/.morph/{standards → framework/standards}/data/nosql/blob-storage.md +0 -0
  279. /package/.morph/{standards → framework/standards}/data/nosql/cache/redis.md +0 -0
  280. /package/.morph/{standards → framework/standards}/data/nosql/cosmos-db.md +0 -0
  281. /package/.morph/{standards → framework/standards}/data/vector-search/azure-ai-search.md +0 -0
  282. /package/.morph/{standards → framework/standards}/data/vector-search/rag-chunking.md +0 -0
  283. /package/.morph/{standards → framework/standards}/frontend/blazor/design-checklist.md +0 -0
  284. /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui-setup.md +0 -0
  285. /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui.md +0 -0
  286. /package/.morph/{standards → framework/standards}/frontend/blazor/html-conversion.md +0 -0
  287. /package/.morph/{standards → framework/standards}/frontend/blazor/lifecycle.md +0 -0
  288. /package/.morph/{standards → framework/standards}/frontend/blazor/pitfalls.md +0 -0
  289. /package/.morph/{standards → framework/standards}/frontend/blazor/state.md +0 -0
  290. /package/.morph/{standards → framework/standards}/frontend/design-system/animations.md +0 -0
  291. /package/.morph/{standards → framework/standards}/frontend/design-system/naming.md +0 -0
  292. /package/.morph/{standards → framework/standards}/infrastructure/azure/azure.md +0 -0
  293. /package/.morph/{standards → framework/standards}/infrastructure/azure/bicep/bicep-patterns.md +0 -0
  294. /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/azure-devops-setup.md +0 -0
  295. /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/local-development.md +0 -0
  296. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/functions.md +0 -0
  297. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/service-bus.md +0 -0
  298. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/storage.md +0 -0
  299. /package/.morph/{standards → framework/standards}/infrastructure/docker/easypanel-deploy.md +0 -0
  300. /package/.morph/{standards → framework/standards}/infrastructure/supabase/mcp-setup.md +0 -0
  301. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-auth.md +0 -0
  302. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-pgvector.md +0 -0
  303. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-rls.md +0 -0
  304. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-storage.md +0 -0
  305. /package/.morph/{standards → framework/standards}/integration/api/graphql.md +0 -0
  306. /package/.morph/{standards → framework/standards}/integration/api/grpc.md +0 -0
  307. /package/.morph/{standards → framework/standards}/integration/api/rest-design.md +0 -0
  308. /package/.morph/{standards → framework/standards}/integration/event-driven/cqrs.md +0 -0
  309. /package/.morph/{standards → framework/standards}/integration/event-driven/event-sourcing.md +0 -0
  310. /package/.morph/{standards → framework/standards}/integration/event-driven/service-bus.md +0 -0
  311. /package/.morph/{standards → framework/standards}/observability/logging.md +0 -0
  312. /package/.morph/{standards → framework/standards}/observability/metrics.md +0 -0
  313. /package/.morph/{standards → framework/standards}/observability/monitoring.md +0 -0
  314. /package/.morph/{standards → framework/standards}/observability/tracing.md +0 -0
  315. /package/.morph/{standards → framework/standards}/workflows/parallel-execution.md +0 -0
  316. /package/.morph/{standards → framework/standards}/workflows/thread-management.md +0 -0
  317. /package/.morph/{templates → framework/templates}/.idea/morph-templates.xml +0 -0
  318. /package/.morph/{templates → framework/templates}/.vscode/morph-templates.code-snippets +0 -0
  319. /package/.morph/{templates → framework/templates}/IDE-SNIPPETS.md +0 -0
  320. /package/.morph/{templates → framework/templates}/code/dotnet/backend/repository.cs +0 -0
  321. /package/.morph/{templates → framework/templates}/code/dotnet/backend/service.cs +0 -0
  322. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Commands.cs +0 -0
  323. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Entities.cs +0 -0
  324. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Queries.cs +0 -0
  325. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/README.md +0 -0
  326. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/api-contracts.cs +0 -0
  327. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/contracts.cs +0 -0
  328. /package/.morph/{templates → framework/templates}/code/dotnet/database/migration.cs +0 -0
  329. /package/.morph/{templates → framework/templates}/code/dotnet/frontend/component.razor +0 -0
  330. /package/.morph/{templates → framework/templates}/code/dotnet/jobs/agent.cs +0 -0
  331. /package/.morph/{templates → framework/templates}/code/dotnet/jobs/job.cs +0 -0
  332. /package/.morph/{templates → framework/templates}/code/dotnet/test.cs +0 -0
  333. /package/.morph/{templates → framework/templates}/code/sql/rls-policy.sql +0 -0
  334. /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.sql +0 -0
  335. /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.template.sql +0 -0
  336. /package/.morph/{templates → framework/templates}/code/typescript/contracts.ts +0 -0
  337. /package/.morph/{templates → framework/templates}/docs/proposal.md +0 -0
  338. /package/.morph/{templates → framework/templates}/examples/design-system-examples.md +0 -0
  339. /package/.morph/{templates → framework/templates}/feature/decisions.md +0 -0
  340. /package/.morph/{templates → framework/templates}/feature/recap.md +0 -0
  341. /package/.morph/{templates → framework/templates}/feature/tasks.md +0 -0
  342. /package/.morph/{templates → framework/templates}/infrastructure/azure/Dockerfile.example +0 -0
  343. /package/.morph/{templates → framework/templates}/infrastructure/azure/README.md +0 -0
  344. /package/.morph/{templates → framework/templates}/infrastructure/azure/app-insights.bicep +0 -0
  345. /package/.morph/{templates → framework/templates}/infrastructure/azure/app-service.bicep +0 -0
  346. /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app-env.bicep +0 -0
  347. /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app.bicep +0 -0
  348. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy-checklist.md +0 -0
  349. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.ps1 +0 -0
  350. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.sh +0 -0
  351. /package/.morph/{templates → framework/templates}/infrastructure/azure/key-vault.bicep +0 -0
  352. /package/.morph/{templates → framework/templates}/infrastructure/azure/main.bicep +0 -0
  353. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.dev.json +0 -0
  354. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.prod.json +0 -0
  355. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.staging.json +0 -0
  356. /package/.morph/{templates → framework/templates}/infrastructure/azure/sql-database.bicep +0 -0
  357. /package/.morph/{templates → framework/templates}/infrastructure/azure/storage.bicep +0 -0
  358. /package/.morph/{templates → framework/templates}/infrastructure/docker/Dockerfile.template +0 -0
  359. /package/.morph/{templates → framework/templates}/infrastructure/docker/docker-compose.template.yml +0 -0
  360. /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-api.dockerfile +0 -0
  361. /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-web.dockerfile +0 -0
  362. /package/.morph/{templates → framework/templates}/infrastructure/docker/easypanel.template.json +0 -0
  363. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -0
  364. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -0
  365. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/health-check/action.yml.hbs +0 -0
  366. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -0
  367. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -0
  368. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -0
  369. /package/.morph/{templates → framework/templates}/integrations/asaas-client.cs +0 -0
  370. /package/.morph/{templates → framework/templates}/integrations/asaas-webhook.cs +0 -0
  371. /package/.morph/{templates → framework/templates}/integrations/azure-identity-config.cs +0 -0
  372. /package/.morph/{templates → framework/templates}/integrations/clerk-config.cs +0 -0
  373. /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-agent.md +0 -0
  374. /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-aggregator.md +0 -0
  375. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-retry.md +0 -0
  376. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-validation.md +0 -0
  377. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-wrapper.md +0 -0
  378. /package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-coordinator.md +0 -0
  379. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/backend-squad.md +0 -0
  380. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/frontend-squad.md +0 -0
  381. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/squad-leader.md +0 -0
  382. /package/.morph/{templates → framework/templates}/meta-prompts/validators/checkpoint-validator.md +0 -0
  383. /package/.morph/{templates → framework/templates}/saas/subscription.cs +0 -0
  384. /package/.morph/{templates → framework/templates}/saas/tenant.cs +0 -0
  385. /package/.morph/{templates → framework/templates}/state.template.json +0 -0
  386. /package/.morph/{templates → framework/templates}/ui/FluentDesignTheme.cs +0 -0
  387. /package/.morph/{templates → framework/templates}/ui/MudTheme.cs +0 -0
  388. /package/.morph/{templates → framework/templates}/ui/design-system.css +0 -0
  389. /package/framework/{skills/level-2-domains → agents}/README.md +0 -0
  390. /package/framework/hooks/{commit-msg → git/commit-msg}/conventional-commits.sh +0 -0
  391. /package/framework/hooks/{pre-commit → git/pre-commit}/agents.sh +0 -0
  392. /package/framework/hooks/{pre-commit → git/pre-commit}/orchestrator.sh +0 -0
  393. /package/framework/hooks/{pre-commit → git/pre-commit}/specs.sh +0 -0
  394. /package/framework/hooks/{pre-push → git/pre-push}/run-tests.sh +0 -0
@@ -1,5 +1,7 @@
1
1
  import { join, dirname } from 'path';
2
2
  import { fileURLToPath } from 'url';
3
+ import { spawnSync } from 'child_process';
4
+ import { existsSync } from 'fs';
3
5
 
4
6
  const __dirname = dirname(fileURLToPath(import.meta.url));
5
7
  import fs from 'fs-extra';
@@ -12,8 +14,6 @@ import {
12
14
  copyFile,
13
15
  pathExists,
14
16
  ensureDir,
15
- createDirectoryLink,
16
- createSymlink,
17
17
  readJson,
18
18
  writeJson
19
19
  } from '../../utils/file-copier.js';
@@ -24,7 +24,9 @@ import {
24
24
  getUpdateInstructions,
25
25
  detectInstallMethod
26
26
  } from '../../utils/version-checker.js';
27
- import { installClaudeHooks } from '../../utils/hooks-installer.js';
27
+ import { installClaudeHooks } from '../../utils/claude-settings-manager.js';
28
+ import { installSkills } from '../../utils/skills-installer.js';
29
+ import { installAgents, installDomainAgents } from '../../utils/agents-installer.js';
28
30
  import { AutoContextOrchestrator } from '../../core/orchestrator.js';
29
31
  import { detectClaudeCode } from '../../llm/environment-detector.js';
30
32
 
@@ -53,8 +55,8 @@ async function backupUserConfig(morphPath) {
53
55
  */
54
56
  async function cleanFrameworkDirs(morphPath, targetPath) {
55
57
  const dirsToClean = [
56
- join(morphPath, 'templates'),
57
- join(morphPath, 'standards'),
58
+ join(morphPath, 'framework', 'templates'),
59
+ join(morphPath, 'framework', 'standards'),
58
60
  join(morphPath, 'config'),
59
61
  join(targetPath, '.claude')
60
62
  ];
@@ -115,9 +117,9 @@ export async function updateCommand(options) {
115
117
  needsInitialization = true;
116
118
 
117
119
  // Create basic .morph structure
118
- await ensureDir(join(morphPath, 'project', 'context'));
119
- await ensureDir(join(morphPath, 'project', 'standards'));
120
- await ensureDir(join(morphPath, 'project', 'outputs'));
120
+ await ensureDir(join(morphPath, 'context'));
121
+ await ensureDir(join(morphPath, 'features'));
122
+ await ensureDir(join(morphPath, 'framework'));
121
123
  await ensureDir(join(morphPath, 'config'));
122
124
  logger.dim(' ✓ Created .morph directory structure');
123
125
  }
@@ -194,7 +196,7 @@ export async function updateCommand(options) {
194
196
  if (updateTemplates) {
195
197
  updateSpinner.text = 'Updating templates...';
196
198
  const templatesSrc = join(contentDir, 'framework', 'templates');
197
- const templatesDest = join(morphPath, 'templates');
199
+ const templatesDest = join(morphPath, 'framework', 'templates');
198
200
  await copyDirectory(templatesSrc, templatesDest);
199
201
  }
200
202
 
@@ -202,30 +204,31 @@ export async function updateCommand(options) {
202
204
  if (updateStandards) {
203
205
  updateSpinner.text = 'Updating standards...';
204
206
  const standardsSrc = join(contentDir, 'framework', 'standards');
205
- const standardsDest = join(morphPath, 'standards');
207
+ const standardsDest = join(morphPath, 'framework', 'standards');
206
208
  await copyDirectory(standardsSrc, standardsDest);
207
209
  }
208
210
 
209
211
  // Update agents.json (sourced from framework/ — canonical single source of truth)
210
212
  updateSpinner.text = 'Updating agents configuration...';
211
213
  const agentsSrc = join(__dirname, '..', '..', '..', 'framework', 'agents.json');
212
- const agentsDest = join(morphPath, 'config', 'agents.json');
214
+ const agentsDest = join(morphPath, 'framework', 'agents.json');
213
215
  if (await pathExists(agentsSrc)) {
214
216
  await copyFile(agentsSrc, agentsDest);
215
217
  }
216
218
 
217
- // Update azure-pricing files
218
- updateSpinner.text = 'Updating Azure pricing data...';
219
- const configDir = join(morphPath, 'config');
220
- const pricingSrc = join(contentDir, '.morph', 'config', 'azure-pricing.json');
221
- const pricingDest = join(configDir, 'azure-pricing.json');
222
- if (await pathExists(pricingSrc)) {
223
- await copyFile(pricingSrc, pricingDest);
224
- }
225
- const pricingSchemaSrc = join(contentDir, '.morph', 'config', 'azure-pricing.schema.json');
226
- const pricingSchemaDest = join(configDir, 'azure-pricing.schema.json');
227
- if (await pathExists(pricingSchemaSrc)) {
228
- await copyFile(pricingSchemaSrc, pricingSchemaDest);
219
+ // Regenerate derived files (phase-utils.js, skill output tables) from output-schema.js
220
+ // Only runs when the generator script is present (framework dev installs via npm link)
221
+ updateSpinner.text = 'Syncing generated refs...';
222
+ try {
223
+ const generateScript = join(__dirname, '..', '..', '..', 'scripts', 'generate-refs.js');
224
+ if (existsSync(generateScript)) {
225
+ const result = spawnSync(process.execPath, [generateScript], { encoding: 'utf8' });
226
+ if (result.status === 0) {
227
+ logger.dim(' ✓ Generated refs synced (phase-utils.js, skill outputs)');
228
+ }
229
+ }
230
+ } catch {
231
+ // Non-fatal: generator unavailable or files already in sync
229
232
  }
230
233
 
231
234
  // Update .claude commands and skills
@@ -234,8 +237,6 @@ export async function updateCommand(options) {
234
237
  const frameworkDir = join(__dirname, '..', '..', '..', 'framework');
235
238
  const claudeDest = join(targetPath, '.claude');
236
239
 
237
- let symlinkCount = 0;
238
- let copyCount = 0;
239
240
  let commandsCopied = false;
240
241
 
241
242
  // Copy commands directory (slash commands): framework/commands/ → .claude/commands/
@@ -248,64 +249,40 @@ export async function updateCommand(options) {
248
249
  logger.warn(' ⚠ framework/commands/ source missing — commands not updated');
249
250
  }
250
251
 
251
- // Create directory links for skill categories (or copy if linking fails)
252
- // Source: framework/skills/ .claude/skills/
253
- {
254
- const skillsSrc = join(frameworkDir, 'skills');
255
- const skillsDest = join(claudeDest, 'skills');
256
-
257
- if (await pathExists(skillsSrc)) {
258
- await ensureDir(skillsDest);
259
-
260
- const entries = await fs.readdir(skillsSrc, { withFileTypes: true });
261
-
262
- let linkedCategories = 0;
263
- let copiedCategories = 0;
264
- let totalSkillFiles = 0;
265
-
266
- // Link category directories (specialists/, infra/, checklists/, etc.)
267
- for (const entry of entries) {
268
- if (entry.isDirectory()) {
269
- const categorySrc = join(skillsSrc, entry.name);
270
- const categoryDest = join(skillsDest, entry.name);
271
-
272
- // Count .md files for reporting
273
- const categoryEntries = await fs.readdir(categorySrc, { withFileTypes: true });
274
- const mdFiles = categoryEntries.filter(e => e.isFile() && e.name.endsWith('.md'));
275
- totalSkillFiles += mdFiles.length;
276
-
277
- const result = await createDirectoryLink(categorySrc, categoryDest);
278
- if (result === 'copy') {
279
- copiedCategories++;
280
- } else {
281
- linkedCategories++;
282
- }
283
- } else if (entry.isFile() && entry.name.endsWith('.md')) {
284
- // Handle .md files in skills root
285
- totalSkillFiles++;
286
- const result = await createSymlink(join(skillsSrc, entry.name), join(skillsDest, entry.name), 'file');
287
- if (result === 'symlink') {
288
- linkedCategories++;
289
- } else {
290
- copiedCategories++;
291
- }
292
- }
293
- }
252
+ // Sync morph skills to .claude/skills/ for native Claude Code discovery
253
+ updateSpinner.text = 'Syncing morph skills to .claude/skills/...';
254
+ await installSkills(targetPath);
255
+
256
+ // Sync native subagents to .claude/agents/
257
+ updateSpinner.text = 'Syncing agents to .claude/agents/...';
258
+ await installAgents(targetPath, frameworkDir);
259
+ await installDomainAgents(targetPath, frameworkDir);
260
+
261
+ // Sync path-scoped rules to .claude/rules/
262
+ updateSpinner.text = 'Syncing rules to .claude/rules/...';
263
+ const rulesSrc = join(frameworkDir, 'rules');
264
+ const rulesDest = join(claudeDest, 'rules');
265
+ if (await pathExists(rulesSrc)) {
266
+ await copyDirectory(rulesSrc, rulesDest);
267
+ }
294
268
 
295
- symlinkCount = linkedCategories > 0 ? totalSkillFiles : 0;
296
- copyCount = linkedCategories === 0 ? totalSkillFiles : 0;
297
- }
269
+ // Sync runtime CLAUDE.md to .claude/CLAUDE.md
270
+ updateSpinner.text = 'Syncing .claude/CLAUDE.md...';
271
+ const runtimeSrc = join(frameworkDir, 'CLAUDE.md');
272
+ const runtimeDest = join(claudeDest, 'CLAUDE.md');
273
+ if (await pathExists(runtimeSrc)) {
274
+ await copyFile(runtimeSrc, runtimeDest);
298
275
  }
299
276
 
300
- // Update agent-teams hooks in .claude/settings.local.json
277
+ // Update Claude Code hooks in .claude/settings.local.json
301
278
  updateSpinner.text = 'Updating Claude Code hooks...';
302
- await installClaudeHooks(targetPath);
279
+ const hooksResult = await installClaudeHooks(targetPath);
303
280
 
304
281
  // Update CLAUDE.md
305
282
  updateSpinner.text = 'Updating CLAUDE.md...';
306
- const claudeMdSrc = join(contentDir, 'CLAUDE.md');
283
+ const claudeMdSrc = join(frameworkDir, 'CLAUDE.md');
307
284
  const claudeMdDest = join(targetPath, 'CLAUDE.md');
308
- await copyDirectory(claudeMdSrc, claudeMdDest);
285
+ await copyFile(claudeMdSrc, claudeMdDest);
309
286
 
310
287
  // Restore user config after framework reinstallation
311
288
  updateSpinner.text = 'Restoring user configuration...';
@@ -330,21 +307,16 @@ export async function updateCommand(options) {
330
307
 
331
308
  logger.blank();
332
309
  logger.info('Updated files:');
333
- if (updateTemplates) logger.dim(' ✓ .morph/templates/');
334
- if (updateStandards) logger.dim(' ✓ .morph/standards/');
335
- logger.dim(' ✓ .morph/config/agents.json');
336
- logger.dim(' ✓ .morph/config/azure-pricing.json');
310
+ if (updateTemplates) logger.dim(' ✓ .morph/framework/templates/');
311
+ if (updateStandards) logger.dim(' ✓ .morph/framework/standards/');
312
+ logger.dim(' ✓ .morph/framework/agents.json');
337
313
  if (commandsCopied) logger.dim(' ✓ .claude/commands/');
338
314
 
339
- if (symlinkCount > 0) {
340
- const linkType = process.platform === 'win32' ? 'junction-linked' : 'symlinked';
341
- logger.dim(` ✓ .claude/skills/ (${symlinkCount} ${linkType})`);
342
- } else if (copyCount > 0) {
343
- logger.dim(` ✓ .claude/skills/ (${copyCount} copied)`);
344
- logger.warn(` ⚠ Directory links not supported (copied instead). Skills won't auto-update.`);
345
- }
346
-
347
- logger.dim(' ✓ .claude/settings.local.json (agent-teams hooks)');
315
+ logger.dim(` ✓ .claude/settings.local.json (${hooksResult.installed} hooks installed)`);
316
+ logger.dim(' ✓ .claude/skills/ (skills installed as directories)');
317
+ logger.dim(' ✓ .claude/agents/ (native subagents refreshed)');
318
+ logger.dim(' ✓ .claude/rules/ (path-scoped rules synced)');
319
+ logger.dim(' ✓ .claude/CLAUDE.md (runtime quick reference)');
348
320
  logger.dim(' ✓ CLAUDE.md');
349
321
  logger.blank();
350
322
  logger.info('Your config.json was preserved.');
@@ -13,6 +13,7 @@ import chalk from 'chalk';
13
13
  import { loadState, saveState, getFeature, getApprovalGate } from '../../core/state/state-manager.js';
14
14
  import { PHASES, validatePhase } from './validate-phase.js';
15
15
  import { detectDesignSystem, hasUIAgentsActive } from '../../lib/detectors/design-system-detector.js';
16
+ import { getOutputPath } from '../../core/paths/output-schema.js';
16
17
  import { shouldAutoApprove, autoCalculateTrust } from '../../lib/trust/trust-manager.js';
17
18
  import { validateSpec } from '../../lib/validators/spec-validator.js';
18
19
  import { validateTransition, getPhaseDisplayName } from '../../core/state/phase-state-machine.js';
@@ -401,7 +402,7 @@ function getPhaseGuidance(phase, feature) {
401
402
  ],
402
403
  'sync': [
403
404
  'Review decisions.md for standards to promote',
404
- `Sync: morph-spec sync --path .morph/project/outputs/${feature}/decisions.md`
405
+ `Sync: morph-spec sync --path ${getOutputPath(feature, 'decisions')}`
405
406
  ]
406
407
  };
407
408
 
@@ -437,8 +438,8 @@ function designSystemGate(feature, projectPath = '.') {
437
438
  'Design system is required when UI agents (blazor-builder, ui-designer, css-specialist) are active',
438
439
  '',
439
440
  'Create a design system with one of these options:',
440
- ' 1. Project-level: .morph/project/design-system.md (shared across features)',
441
- ` 2. Feature-level: .morph/project/outputs/${feature}/ui-design-system.md (feature-specific)`,
441
+ ' 1. Project-level: .morph/context/design-system.md (shared across features)',
442
+ ` 2. Feature-level: ${getOutputPath(feature, 'uiDesignSystem')} (feature-specific)`,
442
443
  ' 3. Auto-generate: morph-spec generate design-system (scans existing CSS)',
443
444
  '',
444
445
  'Or remove UI agents if they are not needed:',
@@ -339,9 +339,16 @@ async function markOutputCommand(featureName, outputType, options) {
339
339
  logger.error('Missing required arguments');
340
340
  logger.dim(' Usage: morph-spec state mark-output <feature> <output-type>');
341
341
  logger.blank();
342
- logger.dim(' Valid types: proposal, spec, contracts, tasks, decisions, recap');
343
- logger.dim(' uiDesignSystem (or ui-design-system), uiMockups (or ui-mockups)');
344
- logger.dim(' uiComponents (or ui-components), uiFlows (or ui-flows)');
342
+ logger.dim(' Valid types:');
343
+ logger.dim(' Standard: proposal, spec, contracts, tasks, decisions, recap');
344
+ logger.dim(' UI/UX: uiDesignSystem, uiMockups, uiComponents, uiFlows');
345
+ logger.blank();
346
+ logger.dim(' Note: UI types also accept kebab-case (e.g., ui-design-system)');
347
+ logger.blank();
348
+ logger.dim(' Examples:');
349
+ logger.dim(' morph-spec state mark-output my-feature spec');
350
+ logger.dim(' morph-spec state mark-output my-feature uiDesignSystem');
351
+ logger.dim(' morph-spec state mark-output my-feature ui-design-system');
345
352
  process.exit(1);
346
353
  }
347
354
 
@@ -71,11 +71,28 @@ const PHASES = {
71
71
  }
72
72
  };
73
73
 
74
+ // Map output filenames to their phase subfolders
75
+ const OUTPUT_PHASE_MAP = {
76
+ 'proposal.md': '0-proposal',
77
+ 'schema-analysis.md': '1-design',
78
+ 'spec.md': '1-design',
79
+ 'clarifications.md': '1-design',
80
+ 'contracts.cs': '1-design',
81
+ 'decisions.md': '1-design',
82
+ 'ui-design-system.md': '2-ui',
83
+ 'ui-mockups.md': '2-ui',
84
+ 'ui-components.md': '2-ui',
85
+ 'ui-flows.md': '2-ui',
86
+ 'tasks.md': '3-tasks',
87
+ 'recap.md': '4-implement'
88
+ };
89
+
74
90
  /**
75
91
  * Check if output file exists
76
92
  */
77
93
  function checkOutput(featurePath, outputFile) {
78
- const filePath = path.join(featurePath, outputFile);
94
+ const phaseDir = OUTPUT_PHASE_MAP[outputFile] || '';
95
+ const filePath = path.join(featurePath, phaseDir, outputFile);
79
96
  return fs.existsSync(filePath);
80
97
  }
81
98
 
@@ -83,7 +100,7 @@ function checkOutput(featurePath, outputFile) {
83
100
  * Validate phase requirements
84
101
  */
85
102
  function validatePhase(featureName, targetPhase) {
86
- const featurePath = path.join(process.cwd(), '.morph/project/outputs', featureName);
103
+ const featurePath = path.join(process.cwd(), '.morph/features', featureName);
87
104
 
88
105
  // Check if feature directory exists
89
106
  if (!fs.existsSync(featurePath)) {
@@ -9,7 +9,7 @@ import { logger } from '../../utils/logger.js';
9
9
  import { getTemplateById, resolveTemplatePathById } from '../../core/templates/template-registry.js';
10
10
 
11
11
  /**
12
- * Customize template command - copies framework template to project .morph/templates/
12
+ * Customize template command - copies framework template to project .morph/framework/templates/
13
13
  */
14
14
  export async function templateCustomizeCommand(templateId, options) {
15
15
  logger.header(`Customizing Template: ${templateId}`);
@@ -34,9 +34,9 @@ export async function templateCustomizeCommand(templateId, options) {
34
34
  process.exit(1);
35
35
  }
36
36
 
37
- // 4. Destination is always project-local .morph/templates/
38
- const destDir = join(projectPath, '.morph/templates', dirname(template.path));
39
- const destPath = join(projectPath, '.morph/templates', template.path);
37
+ // 4. Destination is always project-local .morph/framework/templates/
38
+ const destDir = join(projectPath, '.morph/framework/templates', dirname(template.path));
39
+ const destPath = join(projectPath, '.morph/framework/templates', template.path);
40
40
 
41
41
  // 5. Check if already exists
42
42
  if (existsSync(destPath) && !options.force) {
@@ -111,7 +111,7 @@ export async function templateRenderCommand(templateId, outputPath, variablesJso
111
111
 
112
112
  if (!templatePath) {
113
113
  logger.error(`Template file not found for ${templateId}`);
114
- logger.dim(' Searched in: .morph/templates/ and framework/templates/');
114
+ logger.dim(' Searched in: .morph/framework/templates/ and framework/templates/');
115
115
  process.exit(1);
116
116
  }
117
117
 
@@ -83,7 +83,7 @@ export async function templateShowCommand(templateId, options) {
83
83
  console.log(` ${chalk.green(resolvedPath)}`);
84
84
  console.log(` ${chalk.dim(`(${existsSync(resolvedPath) ? 'exists' : 'not found'})`)}`);
85
85
  } else {
86
- console.log(` ${chalk.red('Not found in .morph/templates/ or framework/templates/')}`);
86
+ console.log(` ${chalk.red('Not found in .morph/framework/templates/ or framework/templates/')}`);
87
87
  }
88
88
  logger.blank();
89
89
  }