@polymorphism-tech/morph-spec 4.7.2 → 4.8.1

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 (346) hide show
  1. package/.morph/analytics/threads-log.jsonl +54 -5
  2. package/.morph/state.json +152 -2
  3. package/LICENSE +1 -2
  4. package/README.md +379 -414
  5. package/bin/morph-spec.js +57 -394
  6. package/bin/validate.js +2 -26
  7. package/claude-plugin.json +2 -2
  8. package/docs/ARCHITECTURE.md +43 -46
  9. package/docs/CHEATSHEET.md +203 -221
  10. package/docs/COMMAND-FLOWS.md +319 -289
  11. package/docs/QUICKSTART.md +2 -8
  12. package/docs/plans/2026-02-22-claude-docs-morph-alignment-analysis.md +2 -0
  13. package/docs/plans/2026-02-22-claude-settings.md +2 -0
  14. package/docs/plans/2026-02-22-morph-cc-alignment-impl.md +2 -0
  15. package/docs/plans/2026-02-22-morph-spec-next.md +2 -0
  16. package/docs/plans/2026-02-22-native-alignment-design.md +2 -0
  17. package/docs/plans/2026-02-22-native-alignment-impl.md +2 -0
  18. package/docs/plans/2026-02-22-native-enrichment-design.md +2 -0
  19. package/docs/plans/2026-02-22-native-enrichment.md +2 -0
  20. package/docs/plans/2026-02-23-ddd-architecture-refactor.md +2 -0
  21. package/docs/plans/2026-02-23-ddd-nextsteps.md +2 -0
  22. package/docs/plans/2026-02-23-infra-architect-refactor.md +2 -0
  23. package/docs/plans/2026-02-23-nextjs-code-review-design.md +2 -1
  24. package/docs/plans/2026-02-23-nextjs-code-review-impl.md +2 -0
  25. package/docs/plans/2026-02-23-nextjs-standards-design.md +2 -1
  26. package/docs/plans/2026-02-23-nextjs-standards-impl.md +2 -0
  27. package/docs/plans/2026-02-24-cli-radical-simplification.md +592 -0
  28. package/docs/plans/2026-02-24-framework-failure-points.md +125 -0
  29. package/docs/plans/2026-02-24-morph-init-design.md +337 -0
  30. package/docs/plans/2026-02-24-morph-init-impl.md +1269 -0
  31. package/docs/plans/2026-02-24-tutorial-command-design.md +71 -0
  32. package/docs/plans/2026-02-24-tutorial-command.md +298 -0
  33. package/framework/CLAUDE.md +1 -1
  34. package/framework/commands/morph-proposal.md +3 -3
  35. package/framework/hooks/README.md +2 -5
  36. package/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +4 -55
  37. package/framework/hooks/claude-code/session-start/inject-morph-context.js +20 -5
  38. package/framework/hooks/claude-code/statusline.py +6 -1
  39. package/framework/hooks/dev/check-sync-health.js +117 -0
  40. package/framework/hooks/dev/guard-version-numbers.js +57 -0
  41. package/framework/hooks/dev/sync-standards-registry.js +60 -0
  42. package/framework/hooks/dev/sync-template-registry.js +60 -0
  43. package/framework/hooks/dev/validate-skill-format.js +70 -0
  44. package/framework/hooks/dev/validate-standard-format.js +73 -0
  45. package/framework/hooks/shared/payload-utils.js +39 -0
  46. package/framework/hooks/shared/state-reader.js +25 -1
  47. package/framework/rules/morph-workflow.md +1 -1
  48. package/framework/skills/level-0-meta/morph-init/SKILL.md +216 -0
  49. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +4 -4
  50. package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +4 -4
  51. package/framework/skills/level-0-meta/verification-before-completion/SKILL.md +1 -1
  52. package/framework/skills/level-1-workflows/phase-clarify/SKILL.md +192 -191
  53. package/framework/skills/level-1-workflows/phase-codebase-analysis/SKILL.md +181 -180
  54. package/framework/skills/level-1-workflows/phase-design/SKILL.md +339 -338
  55. package/framework/skills/level-1-workflows/phase-implement/SKILL.md +254 -253
  56. package/framework/skills/level-1-workflows/phase-setup/SKILL.md +168 -170
  57. package/framework/skills/level-1-workflows/phase-tasks/SKILL.md +284 -283
  58. package/framework/skills/level-1-workflows/phase-uiux/SKILL.md +246 -245
  59. package/framework/templates/examples/design-system-examples.md +1 -1
  60. package/framework/templates/ui/FluentDesignTheme.cs +1 -1
  61. package/framework/templates/ui/MudTheme.cs +1 -1
  62. package/framework/templates/ui/design-system.css +1 -1
  63. package/package.json +4 -2
  64. package/scripts/bump-version.js +248 -0
  65. package/scripts/install-dev-hooks.js +138 -0
  66. package/src/commands/agents/index.js +1 -2
  67. package/src/commands/index.js +13 -16
  68. package/src/commands/project/doctor.js +100 -14
  69. package/src/commands/project/index.js +7 -10
  70. package/src/commands/project/init.js +398 -528
  71. package/src/commands/project/install-plugin-cmd.js +28 -0
  72. package/src/commands/project/setup-infra-cmd.js +12 -0
  73. package/src/commands/project/tutorial.js +115 -0
  74. package/src/commands/state/approve.js +213 -221
  75. package/src/commands/state/index.js +0 -1
  76. package/src/commands/state/state.js +337 -365
  77. package/src/commands/templates/index.js +0 -4
  78. package/src/commands/trust/trust.js +1 -93
  79. package/src/commands/utils/index.js +1 -5
  80. package/src/commands/validation/index.js +1 -5
  81. package/src/core/registry/command-registry.js +11 -285
  82. package/src/core/state/state-manager.js +5 -2
  83. package/src/lib/detectors/index.js +81 -87
  84. package/src/lib/detectors/structure-detector.js +275 -273
  85. package/src/lib/generators/recap-generator.js +232 -225
  86. package/src/scripts/global-install.js +34 -0
  87. package/src/scripts/install-plugin.js +126 -0
  88. package/src/scripts/setup-infra.js +203 -0
  89. package/src/utils/agents-installer.js +10 -1
  90. package/src/utils/hooks-installer.js +66 -3
  91. package/.morph/.morphversion +0 -5
  92. package/.morph/config/config.json +0 -8
  93. package/.morph/framework/agents.json +0 -1815
  94. package/.morph/framework/hooks/README.md +0 -205
  95. package/.morph/framework/hooks/claude-code/notification/approval-reminder.js +0 -54
  96. package/.morph/framework/hooks/claude-code/post-tool-use/dispatch.js +0 -83
  97. package/.morph/framework/hooks/claude-code/post-tool-use/handle-tool-failure.js +0 -42
  98. package/.morph/framework/hooks/claude-code/pre-compact/save-morph-context.js +0 -61
  99. package/.morph/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +0 -71
  100. package/.morph/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +0 -58
  101. package/.morph/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +0 -64
  102. package/.morph/framework/hooks/claude-code/session-start/inject-morph-context.js +0 -94
  103. package/.morph/framework/hooks/claude-code/statusline.py +0 -538
  104. package/.morph/framework/hooks/claude-code/statusline.sh +0 -7
  105. package/.morph/framework/hooks/claude-code/stop/validate-completion.js +0 -88
  106. package/.morph/framework/hooks/claude-code/user-prompt/enrich-prompt.js +0 -91
  107. package/.morph/framework/hooks/git/commit-msg/conventional-commits.sh +0 -33
  108. package/.morph/framework/hooks/git/pre-commit/agents.sh +0 -25
  109. package/.morph/framework/hooks/git/pre-commit/orchestrator.sh +0 -64
  110. package/.morph/framework/hooks/git/pre-commit/specs.sh +0 -50
  111. package/.morph/framework/hooks/git/pre-push/run-tests.sh +0 -44
  112. package/.morph/framework/hooks/shared/hook-response.js +0 -45
  113. package/.morph/framework/hooks/shared/phase-utils.js +0 -129
  114. package/.morph/framework/hooks/shared/state-reader.js +0 -138
  115. package/.morph/framework/hooks/shared/stdin-reader.js +0 -26
  116. package/.morph/framework/standards/STANDARDS.json +0 -933
  117. package/.morph/framework/standards/ai-agents/blazor-ui.md +0 -364
  118. package/.morph/framework/standards/ai-agents/production.md +0 -415
  119. package/.morph/framework/standards/ai-agents/setup.md +0 -418
  120. package/.morph/framework/standards/ai-agents/team-orchestration.md +0 -479
  121. package/.morph/framework/standards/ai-agents/workflows.md +0 -354
  122. package/.morph/framework/standards/architecture/ddd/aggregates.md +0 -120
  123. package/.morph/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
  124. package/.morph/framework/standards/architecture/ddd/complexity-levels.md +0 -108
  125. package/.morph/framework/standards/architecture/ddd/entities.md +0 -99
  126. package/.morph/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
  127. package/.morph/framework/standards/architecture/ddd/value-objects.md +0 -124
  128. package/.morph/framework/standards/backend/api/minimal-api.md +0 -494
  129. package/.morph/framework/standards/backend/api/rest.md +0 -492
  130. package/.morph/framework/standards/backend/api/validation.md +0 -88
  131. package/.morph/framework/standards/backend/authentication/passkeys.md +0 -428
  132. package/.morph/framework/standards/backend/database/ef-core.md +0 -199
  133. package/.morph/framework/standards/backend/database/migrations.md +0 -393
  134. package/.morph/framework/standards/backend/database/postgresql/database.md +0 -352
  135. package/.morph/framework/standards/backend/database/repository-patterns.md +0 -528
  136. package/.morph/framework/standards/backend/database/vector-search-rag.md +0 -541
  137. package/.morph/framework/standards/backend/dotnet/async.md +0 -366
  138. package/.morph/framework/standards/backend/dotnet/core.md +0 -117
  139. package/.morph/framework/standards/backend/dotnet/di.md +0 -439
  140. package/.morph/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  141. package/.morph/framework/standards/backend/integrations/asaas/asaas-api.md +0 -216
  142. package/.morph/framework/standards/backend/integrations/clerk/clerk-auth.md +0 -290
  143. package/.morph/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -350
  144. package/.morph/framework/standards/backend/integrations/resend/resend-email.md +0 -385
  145. package/.morph/framework/standards/context/analytics.md +0 -96
  146. package/.morph/framework/standards/context/bundles.md +0 -110
  147. package/.morph/framework/standards/context/priming.md +0 -78
  148. package/.morph/framework/standards/core/architecture.md +0 -185
  149. package/.morph/framework/standards/core/coding.md +0 -214
  150. package/.morph/framework/standards/core/git-branching-strategy.md +0 -403
  151. package/.morph/framework/standards/core/git.md +0 -185
  152. package/.morph/framework/standards/core/testing.md +0 -295
  153. package/.morph/framework/standards/data/nosql/blob-storage.md +0 -102
  154. package/.morph/framework/standards/data/nosql/cache/redis.md +0 -97
  155. package/.morph/framework/standards/data/nosql/cosmos-db.md +0 -118
  156. package/.morph/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  157. package/.morph/framework/standards/data/vector-search/rag-chunking.md +0 -104
  158. package/.morph/framework/standards/frontend/blazor/design-checklist.md +0 -222
  159. package/.morph/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  160. package/.morph/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  161. package/.morph/framework/standards/frontend/blazor/html-conversion.md +0 -184
  162. package/.morph/framework/standards/frontend/blazor/lifecycle.md +0 -195
  163. package/.morph/framework/standards/frontend/blazor/pitfalls.md +0 -198
  164. package/.morph/framework/standards/frontend/blazor/state.md +0 -191
  165. package/.morph/framework/standards/frontend/design-system/animations.md +0 -151
  166. package/.morph/framework/standards/frontend/design-system/naming.md +0 -64
  167. package/.morph/framework/standards/frontend/nextjs/app-router.md +0 -123
  168. package/.morph/framework/standards/frontend/nextjs/components.md +0 -132
  169. package/.morph/framework/standards/frontend/nextjs/data-fetching.md +0 -126
  170. package/.morph/framework/standards/frontend/nextjs/forms.md +0 -128
  171. package/.morph/framework/standards/frontend/nextjs/naming-conventions.md +0 -67
  172. package/.morph/framework/standards/frontend/nextjs/nextjs-patterns.md +0 -215
  173. package/.morph/framework/standards/frontend/nextjs/project-structure.md +0 -102
  174. package/.morph/framework/standards/frontend/nextjs/state-management.md +0 -72
  175. package/.morph/framework/standards/frontend/nextjs/testing.md +0 -111
  176. package/.morph/framework/standards/infrastructure/azure/azure.md +0 -624
  177. package/.morph/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  178. package/.morph/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  179. package/.morph/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  180. package/.morph/framework/standards/infrastructure/azure/services/functions.md +0 -486
  181. package/.morph/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  182. package/.morph/framework/standards/infrastructure/azure/services/storage.md +0 -407
  183. package/.morph/framework/standards/infrastructure/docker/easypanel-deploy.md +0 -196
  184. package/.morph/framework/standards/infrastructure/supabase/mcp-setup.md +0 -252
  185. package/.morph/framework/standards/infrastructure/supabase/supabase-auth.md +0 -176
  186. package/.morph/framework/standards/infrastructure/supabase/supabase-pgvector.md +0 -169
  187. package/.morph/framework/standards/infrastructure/supabase/supabase-rls.md +0 -184
  188. package/.morph/framework/standards/infrastructure/supabase/supabase-storage.md +0 -153
  189. package/.morph/framework/standards/integration/api/graphql.md +0 -91
  190. package/.morph/framework/standards/integration/api/grpc.md +0 -114
  191. package/.morph/framework/standards/integration/api/rest-design.md +0 -95
  192. package/.morph/framework/standards/integration/event-driven/cqrs.md +0 -101
  193. package/.morph/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  194. package/.morph/framework/standards/integration/event-driven/service-bus.md +0 -95
  195. package/.morph/framework/standards/integration/mcp/mcp-tools.md +0 -384
  196. package/.morph/framework/standards/observability/logging.md +0 -131
  197. package/.morph/framework/standards/observability/metrics.md +0 -121
  198. package/.morph/framework/standards/observability/monitoring.md +0 -114
  199. package/.morph/framework/standards/observability/tracing.md +0 -132
  200. package/.morph/framework/standards/workflows/parallel-execution.md +0 -112
  201. package/.morph/framework/standards/workflows/thread-management.md +0 -113
  202. package/.morph/framework/templates/.idea/morph-templates.xml +0 -92
  203. package/.morph/framework/templates/.vscode/morph-templates.code-snippets +0 -186
  204. package/.morph/framework/templates/IDE-SNIPPETS.md +0 -266
  205. package/.morph/framework/templates/README.md +0 -814
  206. package/.morph/framework/templates/REGISTRY.json +0 -1888
  207. package/.morph/framework/templates/code/dotnet/backend/repository.cs +0 -141
  208. package/.morph/framework/templates/code/dotnet/backend/service.cs +0 -139
  209. package/.morph/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  210. package/.morph/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  211. package/.morph/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  212. package/.morph/framework/templates/code/dotnet/contracts/README.md +0 -74
  213. package/.morph/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  214. package/.morph/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
  215. package/.morph/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
  216. package/.morph/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
  217. package/.morph/framework/templates/code/dotnet/database/migration.cs +0 -83
  218. package/.morph/framework/templates/code/dotnet/frontend/component.razor +0 -239
  219. package/.morph/framework/templates/code/dotnet/jobs/agent.cs +0 -163
  220. package/.morph/framework/templates/code/dotnet/jobs/job.cs +0 -171
  221. package/.morph/framework/templates/code/dotnet/test.cs +0 -239
  222. package/.morph/framework/templates/code/sql/rls-policy.sql +0 -57
  223. package/.morph/framework/templates/code/sql/supabase-migration.sql +0 -100
  224. package/.morph/framework/templates/code/sql/supabase-migration.template.sql +0 -113
  225. package/.morph/framework/templates/code/typescript/contracts.ts +0 -168
  226. package/.morph/framework/templates/context/CONTEXT-FEATURE.md +0 -276
  227. package/.morph/framework/templates/context/CONTEXT.md +0 -181
  228. package/.morph/framework/templates/docs/clarifications.md +0 -253
  229. package/.morph/framework/templates/docs/onboarding.md +0 -123
  230. package/.morph/framework/templates/docs/proposal.md +0 -182
  231. package/.morph/framework/templates/docs/schema-analysis.md +0 -119
  232. package/.morph/framework/templates/docs/spec.md +0 -198
  233. package/.morph/framework/templates/docs/ui-components.md +0 -124
  234. package/.morph/framework/templates/docs/ui-design-system.md +0 -76
  235. package/.morph/framework/templates/docs/ui-flows.md +0 -167
  236. package/.morph/framework/templates/docs/ui-mockups.md +0 -98
  237. package/.morph/framework/templates/docs/user-stories.md +0 -34
  238. package/.morph/framework/templates/examples/design-system-examples.md +0 -357
  239. package/.morph/framework/templates/examples/spec-examples.md +0 -90
  240. package/.morph/framework/templates/feature/decisions.md +0 -187
  241. package/.morph/framework/templates/feature/recap.md +0 -146
  242. package/.morph/framework/templates/feature/tasks.md +0 -199
  243. package/.morph/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +0 -43
  244. package/.morph/framework/templates/frontend/nextjs/client-component.tsx.hbs +0 -26
  245. package/.morph/framework/templates/frontend/nextjs/env.mjs.hbs +0 -32
  246. package/.morph/framework/templates/frontend/nextjs/feature-form.tsx.hbs +0 -56
  247. package/.morph/framework/templates/frontend/nextjs/page.tsx.hbs +0 -22
  248. package/.morph/framework/templates/frontend/nextjs/tsconfig.json.hbs +0 -26
  249. package/.morph/framework/templates/frontend/nextjs/use-feature.ts.hbs +0 -54
  250. package/.morph/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  251. package/.morph/framework/templates/infrastructure/azure/README.md +0 -286
  252. package/.morph/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  253. package/.morph/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  254. package/.morph/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  255. package/.morph/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  256. package/.morph/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  257. package/.morph/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  258. package/.morph/framework/templates/infrastructure/azure/deploy.sh +0 -208
  259. package/.morph/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  260. package/.morph/framework/templates/infrastructure/azure/main.bicep +0 -189
  261. package/.morph/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  262. package/.morph/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  263. package/.morph/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  264. package/.morph/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  265. package/.morph/framework/templates/infrastructure/azure/storage.bicep +0 -106
  266. package/.morph/framework/templates/infrastructure/docker/Dockerfile.template +0 -58
  267. package/.morph/framework/templates/infrastructure/docker/docker-compose.template.yml +0 -67
  268. package/.morph/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +0 -38
  269. package/.morph/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +0 -48
  270. package/.morph/framework/templates/infrastructure/docker/easypanel.template.json +0 -54
  271. package/.morph/framework/templates/infrastructure/github/README.md +0 -593
  272. package/.morph/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  273. package/.morph/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -45
  274. package/.morph/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +0 -27
  275. package/.morph/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  276. package/.morph/framework/templates/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -31
  277. package/.morph/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -59
  278. package/.morph/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -39
  279. package/.morph/framework/templates/integrations/asaas-client.cs +0 -387
  280. package/.morph/framework/templates/integrations/asaas-webhook.cs +0 -351
  281. package/.morph/framework/templates/integrations/azure-identity-config.cs +0 -288
  282. package/.morph/framework/templates/integrations/clerk-config.cs +0 -258
  283. package/.morph/framework/templates/meta-prompts/fusion/fusion-agent.md +0 -76
  284. package/.morph/framework/templates/meta-prompts/fusion/fusion-aggregator.md +0 -100
  285. package/.morph/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
  286. package/.morph/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
  287. package/.morph/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
  288. package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
  289. package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
  290. package/.morph/framework/templates/meta-prompts/squad-leaders/backend-squad.md +0 -90
  291. package/.morph/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +0 -126
  292. package/.morph/framework/templates/meta-prompts/squad-leaders/squad-leader.md +0 -43
  293. package/.morph/framework/templates/meta-prompts/validators/checkpoint-validator.md +0 -107
  294. package/.morph/framework/templates/meta-prompts/validators/pre-commit-validator.md +0 -95
  295. package/.morph/framework/templates/project-structure/dotnet-ddd.md +0 -70
  296. package/.morph/framework/templates/saas/subscription.cs +0 -347
  297. package/.morph/framework/templates/saas/tenant.cs +0 -338
  298. package/.morph/framework/templates/state.template.json +0 -17
  299. package/.morph/framework/templates/ui/FluentDesignTheme.cs +0 -149
  300. package/.morph/framework/templates/ui/MudTheme.cs +0 -281
  301. package/.morph/framework/templates/ui/design-system.css +0 -226
  302. package/.morph/logs/tool-failures.log +0 -17
  303. package/.morph/memory/pre-compact-2026-02-24T17-43-30-049Z.json +0 -16
  304. package/.morph/plans/eager-watching-bunny.md +0 -105
  305. package/.morph/plans/temporal-seeking-nebula.md +0 -45
  306. package/CLAUDE.md +0 -77
  307. package/docs/claude-alignment-report.md +0 -137
  308. package/docs/examples/order-management/contracts.cs +0 -84
  309. package/docs/examples/order-management/proposal.md +0 -24
  310. package/docs/examples/order-management/spec.md +0 -162
  311. package/src/commands/feature/create-story.js +0 -362
  312. package/src/commands/feature/index.js +0 -6
  313. package/src/commands/feature/shard-spec.js +0 -225
  314. package/src/commands/feature/sprint-status.js +0 -250
  315. package/src/commands/generation/generate-onboarding.js +0 -169
  316. package/src/commands/generation/generate.js +0 -276
  317. package/src/commands/generation/index.js +0 -5
  318. package/src/commands/learning/capture-pattern.js +0 -121
  319. package/src/commands/learning/index.js +0 -5
  320. package/src/commands/learning/search-patterns.js +0 -126
  321. package/src/commands/mcp/mcp.js +0 -102
  322. package/src/commands/project/changes.js +0 -66
  323. package/src/commands/project/cost.js +0 -179
  324. package/src/commands/project/diff.js +0 -278
  325. package/src/commands/project/revert.js +0 -173
  326. package/src/commands/project/standards.js +0 -80
  327. package/src/commands/project/sync.js +0 -167
  328. package/src/commands/project/update-agents.js +0 -23
  329. package/src/commands/state/rollback-phase.js +0 -185
  330. package/src/commands/templates/template-customize.js +0 -87
  331. package/src/commands/templates/template-list.js +0 -114
  332. package/src/commands/templates/template-show.js +0 -129
  333. package/src/commands/templates/template-validate.js +0 -91
  334. package/src/commands/utils/troubleshoot.js +0 -222
  335. package/src/commands/validation/analyze-blazor-concurrency.js +0 -193
  336. package/src/commands/validation/lint-fluent.js +0 -352
  337. package/src/commands/validation/validate-blazor-state.js +0 -210
  338. package/src/commands/validation/validate-blazor.js +0 -156
  339. package/src/commands/validation/validate-css.js +0 -84
  340. package/src/lib/detectors/conversation-analyzer.js +0 -163
  341. package/src/lib/learning/index.js +0 -7
  342. package/src/lib/learning/learning-system.js +0 -520
  343. package/src/lib/troubleshooting/index.js +0 -8
  344. package/src/lib/troubleshooting/troubleshoot-grep.js +0 -198
  345. package/src/lib/troubleshooting/troubleshoot-index.js +0 -144
  346. package/src/llm/environment-detector.js +0 -43
@@ -1,368 +1,398 @@
1
- # morph-spec — Command Flow Diagrams
1
+ # morph-spec — Framework Flows
2
2
 
3
- > Each diagram shows the sequence of CLI calls and internal function calls for each slash command.
3
+ > Authoritative reference for how the framework connects: slash commands skills CLI state manager.
4
+ > Version: 4.8.1
4
5
 
5
6
  ---
6
7
 
7
- ## 1. /morph-proposal
8
+ ## 1. Mental Model — The 4 Layers
8
9
 
9
- ```mermaid
10
- flowchart TD
11
- START(["/morph-proposal FEATURE"]) --> A
12
-
13
- A["state get FEATURE"] --> B{"Exists?"}
14
- B -->|yes| C["Identify current phase\nResume from where it stopped"]
15
- B -->|no| D["Start Phase 0 from scratch"]
16
- C --> D
17
-
18
- subgraph P0 ["PHASE 0 PROPOSAL"]
19
- D --> E["detect-agents INPUT"]
20
- E --> E1["loadAgentsConfig() ← agents.json"]
21
- E1 --> E2["detectAgents() keyword matching"]
22
- E2 --> E3["analyzeRequestComplexity()"]
23
- E3 --> E4["getStandardsListForAgent()\nloadStandardsForAgent()"]
24
- E4 --> F["Render proposal.md via template"]
25
- F --> G1["state set FEATURE status draft"]
26
- G1 --> G2["state set FEATURE phase proposal"]
27
- G2 --> G3["state mark-output FEATURE proposal"]
28
- G3 --> G4["state add-agent FEATURE agent-id × N"]
29
- G4 --> PAUSE0(["⏸ GATE — approve proposal"])
30
- end
31
-
32
- PAUSE0 -->|approved| H
33
-
34
- subgraph P1 ["PHASE 1 — SETUP (auto, no gate)"]
35
- H["Read .morph/context/"] --> I["Confirm detected stack"]
36
- I --> J["List active agents"]
37
- J --> J2["state set FEATURE phase setup"]
38
- end
39
-
40
- J2 --> UICHECK{"uiux-designer\nin activeAgents?"}
41
-
42
- subgraph P15 ["PHASE 1.5 — UI/UX (conditional)"]
43
- UICHECK -->|yes| L["Generate wireframes + design system\n(.claude/skills/phase-uiux/SKILL.md)"]
44
- L --> PAUSEUI(["⏸ GATE — approve UI/UX"])
45
- end
46
-
47
- UICHECK -->|no| M
48
- PAUSEUI -->|approved| M
49
-
50
- subgraph P2 ["PHASE 2 — DESIGN"]
51
- M["Generate spec.md\n(.claude/skills/phase-design/SKILL.md)"] --> N["Generate contracts.cs"]
52
- N --> O["Generate decisions.md with ADRs"]
53
- O --> P["Estimate costs per resource"]
54
- P --> Q1["state mark-output FEATURE spec"]
55
- Q1 --> Q2["state mark-output FEATURE contracts"]
56
- Q2 --> Q3["state mark-output FEATURE decisions"]
57
- Q3 --> PAUSE2(["⏸ GATE — approve design"])
58
- end
59
-
60
- PAUSE2 -->|approved| R
61
-
62
- subgraph P3 ["PHASE 3 — CLARIFY"]
63
- R["Identify ambiguities in spec\n(.claude/skills/phase-clarify/SKILL.md)"] --> S["Generate 3-7 questions"]
64
- S --> WAIT(["⏳ Waiting for user answers"])
65
- WAIT -->|answered| T["Update spec with clarifications\nand edge cases"]
66
- T --> T2["state set FEATURE phase clarify"]
67
- end
68
-
69
- T2 --> U
70
-
71
- subgraph P4 ["PHASE 4 — TASKS"]
72
- U["Break spec into tasks T001-TXXX\n(.claude/skills/phase-tasks/SKILL.md)"] --> V["Define order and dependencies"]
73
- V --> W["Checkpoints every 3 tasks"]
74
- W --> X1["state mark-output FEATURE tasks"]
75
- X1 --> X2["state set FEATURE tasks.total N"]
76
- X2 --> PAUSE4(["⏸ GATE — approve tasks"])
77
- end
78
-
79
- PAUSE4 -->|approved| END(["✅ Planning complete\nRun /morph-apply FEATURE"])
10
+ ```
11
+ ┌─────────────────────────────────────────────────────────────────────┐
12
+ │ USER │
13
+ │ /morph-proposal my-feature (Claude Code slash command) │
14
+ └────────────────────────┬────────────────────────────────────────────┘
15
+ invokes Skill tool
16
+ ┌────────────────────────▼────────────────────────────────────────────┐
17
+ │ SKILL (.claude/skills/{name}/SKILL.md) │
18
+ │ Claude reads the markdown and follows its instructions. │
19
+ Skills chain other skills via "invoke Skill tool with X". │
20
+ │ Skills call CLI via Bash tool: npx morph-spec ... │
21
+ └────────────────────────┬────────────────────────────────────────────┘
22
+ Bash: npx morph-spec <command>
23
+ ┌────────────────────────▼────────────────────────────────────────────┐
24
+ │ CLI (bin/morph-spec.js src/commands/**)
25
+ │ Commander.js routes to command handler functions. │
26
+ │ Handlers call state-manager.js and other lib modules. │
27
+ └────────────────────────┬────────────────────────────────────────────┘
28
+ imports
29
+ ┌────────────────────────▼────────────────────────────────────────────┐
30
+ │ STATE MANAGER (src/core/state/state-manager.js)
31
+ Single source of truth. Reads/writes .morph/state.json. │
32
+ │ All state mutations go through here — never direct file edits. │
33
+ └─────────────────────────────────────────────────────────────────────┘
80
34
  ```
81
35
 
82
- ---
83
-
84
- ## 2. /morph-apply
85
-
86
- ```mermaid
87
- flowchart TD
88
- START(["/morph-apply FEATURE"]) --> A
89
-
90
- A["state get FEATURE"] --> B{"All phases\ncomplete?"}
91
- B -->|no| ERR(["❌ ERROR — phase X not complete\nRun /morph-proposal FEATURE"])
92
- B -->|yes| C
93
-
94
- subgraph PREP ["INITIALIZATION"]
95
- C["Read 1-design/spec.md + 3-tasks/tasks.md + 1-design/contracts.cs"] --> D
96
- D["Read framework/standards/\n.morph/context/"] --> E1
97
- E1["state set FEATURE phase implement"] --> E2
98
- E2["state set FEATURE status in_progress"] --> E3
99
- E3["state set FEATURE tasks.total N"]
100
- end
36
+ **Hooks** run as side-effects alongside this chain (see Section 9).
101
37
 
102
- E3 --> LOOP_START
103
-
104
- subgraph LOOP ["LOOP — For each task in order"]
105
- LOOP_START["Select next task"] --> F
106
- F["task start FEATURE task-id"] --> F1
107
- F1["spawn task-manager.cjs start"] --> G
108
- G["Implement code\nfollowing contracts.cs + standards"] --> H
109
- H["task done FEATURE task-id"] --> H1
110
- H1["spawn task-manager.cjs done"] --> VAL_START
111
-
112
- subgraph VAL ["Automatic validators (hooks)"]
113
- VAL_START["security-expert\nSQL injection, XSS, hardcoded secrets"] --> V2
114
- V2["architecture-expert\nIDbContextFactory, async/await, DI order"] --> V3
115
- V3["packages-validator\nNuGet conflicts, vulnerabilities"] --> V4
116
- V4["blazor-concurrency-validator\nLifecycle, thread safety"]
117
- end
118
-
119
- V4 --> VRESULT{"Validation\npassed?"}
120
- VRESULT -->|no| FIX["Fix violations\nDO NOT use --skip-validation"] --> H
121
- VRESULT -->|yes| CHK{"task_count\nmultiple of 3?"}
122
- CHK -->|yes| CP["state checkpoint FEATURE\nstate list"]
123
- CHK -->|no| NEXT
124
- CP --> NEXT{"Next task\nexists?"}
125
- NEXT -->|yes| LOOP_START
126
- end
38
+ ---
127
39
 
128
- NEXT -->|no| FIN1
40
+ ## 2. Slash Command → Skill Map
129
41
 
130
- subgraph FIN ["FINALIZATION"]
131
- FIN1["generate recap FEATURE"] --> FIN2
132
- FIN2["extractFeatureMetadata()\nWrites 4-implement/recap.md"] --> FIN3
133
- FIN3["state set FEATURE status done"] --> FIN4
134
- FIN4["state mark-output FEATURE recap"] --> FIN5
135
- FIN5["phase advance FEATURE"]
136
- end
42
+ | Slash command | Skill invoked | What it covers |
43
+ |---|---|---|
44
+ | `/morph-proposal {feature}` | Chains: `phase-setup` → `phase-uiux`\* → `phase-design` → `phase-clarify` → `phase-tasks` | Full planning pipeline (phases 1–4) |
45
+ | `/morph-apply {feature}` | `phase-implement` | Implementation (phase 5) |
46
+ | `/morph-status` | No skill — Claude uses `morph-spec status` directly | Feature status dashboard |
47
+ | `/morph-preflight` | No skill — Claude runs validators directly | Pre-deploy validation checks |
48
+ | `/morph-archive {feature}` | No skill — Claude follows CLAUDE.md instructions | Archive completed feature |
49
+ | `/{phase-name} {feature}` | The matching phase skill directly | Run a single phase |
137
50
 
138
- FIN5 --> END(["✅ Feature complete\nRun /morph-archive FEATURE"])
139
- ```
51
+ \* `phase-uiux` only if frontend agents are active.
140
52
 
141
53
  ---
142
54
 
143
- ## 3. /morph-status
55
+ ## 3. Skill Invocation Chain
144
56
 
145
57
  ```mermaid
146
58
  flowchart TD
147
- START(["/morph-status"]) --> A
148
-
149
- A["state list"] --> B
150
- B["StateManager.getSummary()"] --> C
151
- C["StateManager.listFeatures()"] --> D
152
- D["Read .morph/state.json"] --> DASH
153
-
154
- DASH["Display dashboard\nfeatures | phases | tasks X/Y | agents | costs"] --> EXTRA
155
-
156
- EXTRA{"Specific feature\nrequested?"} -->|yes| G
157
- EXTRA -->|no| CHECK
158
-
159
- G["state get FEATURE"] --> G1["StateManager.getFeature()"] --> CHECK
160
-
161
- subgraph CHECK_BLOCK ["Additional checks"]
162
- CHECK["Check .morph/config/config.json"] --> CHECK2
163
- CHECK2["Check .morph/framework/standards/ present"] --> CHECK3
164
- CHECK3["Check .morph/archive/\ncompleted features"]
165
- end
166
-
167
- CHECK3 --> SUGEST["Suggest next actions\n/morph-proposal | /morph-apply | /morph-archive"]
168
-
169
- SUGEST --> END([" Dashboard displayed"])
59
+ P(["/morph-proposal FEATURE"]) --> SETUP
60
+
61
+ SETUP["Skill: phase-setup\n(Phase 1)"]
62
+ SETUP --> UICHECK{"uiux-designer\nactive?"}
63
+ UICHECK -->|yes| UIUX["Skill: phase-uiux\n(Phase 1.5)"]
64
+ UICHECK -->|no| DESIGN
65
+ UIUX --> DESIGN
66
+
67
+ DESIGN["Skill: phase-design\n(Phase 2)"]
68
+ DESIGN --> CODEBASE["Skill: phase-codebase-analysis\n(sub-phase of Design)"]
69
+ CODEBASE --> DESIGN2["Back in phase-design:\nspec.md + contracts.cs + decisions.md"]
70
+ DESIGN2 --> GATE1(["⏸ Gate: approve design"])
71
+ GATE1 -->|approved| CLARIFY
72
+
73
+ CLARIFY["Skill: phase-clarify\n(Phase 3)"]
74
+ CLARIFY --> TASKS
75
+
76
+ TASKS["Skill: phase-tasks\n(Phase 4)"]
77
+ TASKS --> GATE2(["⏸ Gate: approve tasks"])
78
+ GATE2 --> DONE(["✅ /morph-proposal complete"])
79
+
80
+ A(["/morph-apply FEATURE"]) --> IMPL
81
+ IMPL["Skill: phase-implement\n(Phase 5)"]
82
+ IMPL --> DONE2(["✅ /morph-apply complete"])
170
83
  ```
171
84
 
85
+ **How one skill calls another:**
86
+ Skills don't call each other via code. The SKILL.md instructs Claude to `invoke Skill tool with <skill-name>`. Claude executes that as a new Skill tool call. Each skill is a fresh markdown load — they share context only through the conversation and the state.json.
87
+
172
88
  ---
173
89
 
174
- ## 4. /morph-archive
90
+ ## 4. /morph-proposal — Detailed Flow
175
91
 
176
92
  ```mermaid
177
93
  flowchart TD
178
- START(["/morph-archive FEATURE"]) --> A
94
+ START(["/morph-proposal FEATURE"]) --> CHECK
95
+
96
+ CHECK["morph-spec state get FEATURE"] --> EXISTS{"Feature\nexists?"}
97
+ EXISTS -->|yes| RESUME["Resume from current phase"]
98
+ EXISTS -->|no| P0
99
+
100
+ subgraph PHASE0 ["PHASE 0 — PROPOSAL (Claude writes directly)"]
101
+ P0["Write 0-proposal/proposal.md"] --> P0S1
102
+ P0S1["morph-spec state set FEATURE phase proposal"] --> P0S2
103
+ P0S2["morph-spec state set FEATURE status draft"] --> P0S3
104
+ P0S3["morph-spec state mark-output FEATURE proposal"] --> P0S4
105
+ P0S4["morph-spec state add-agent FEATURE agent-id × N"]
106
+ P0S4 --> GATE0(["⏸ GATE — approve proposal\nmorph-spec approve FEATURE proposal"])
107
+ end
179
108
 
180
- A["Read .morph/features/FEATURE/3-tasks/tasks.md"] --> B
181
- B{"All tasks\ncomplete?"} -->|no| ERR(["❌ Feature not ready\nFinish pending tasks first"])
182
- B -->|yes| C
109
+ GATE0 -->|approved| PHASE1
183
110
 
184
- C(["Confirm with user\nthat archiving is OK"]) --> D
111
+ subgraph PHASE1 ["PHASE 1 SETUP (Skill: phase-setup)"]
112
+ S1["Read .morph/context/README.md"] --> S2
113
+ S2["Read .morph/framework/agents.json\nMatch keywords → active agents"] --> S3
114
+ S3["morph-spec state set FEATURE phase setup"] --> S4
115
+ S4["morph-spec state set FEATURE status in_progress"]
116
+ end
185
117
 
186
- subgraph RECAP ["RECAP"]
187
- D["Update 4-implement/recap.md"] --> D1
188
- D1["Fill in final metrics\n(tasks, time, actual vs estimated cost)"] --> D2
189
- D2["Document lessons learned"]
118
+ S4 --> UICHECK{"uiux-designer\nin activeAgents?"}
119
+
120
+ subgraph PHASE15 ["PHASE 1.5 UI/UX (Skill: phase-uiux, conditional)"]
121
+ UICHECK -->|yes| U1["Write 2-ui/design-system.md"]
122
+ U1 --> U2["Write 2-ui/mockups.md"]
123
+ U2 --> U3["Write 2-ui/components.md"]
124
+ U3 --> U4["Write 2-ui/flows.md"]
125
+ U4 --> U5["morph-spec state mark-output FEATURE uiDesignSystem"]
126
+ U5 --> U6["morph-spec state mark-output FEATURE uiMockups"]
127
+ U6 --> U7["morph-spec state mark-output FEATURE uiComponents"]
128
+ U7 --> U8["morph-spec state mark-output FEATURE uiFlows"]
129
+ U8 --> GATE15(["⏸ GATE — approve UI/UX\nmorph-spec approve FEATURE uiux"])
190
130
  end
191
131
 
192
- D2 --> E{"Does spec define permanent\nsystem behavior?"}
132
+ UICHECK -->|no| PHASE2
133
+ GATE15 -->|approved| PHASE2
134
+
135
+ subgraph PHASE2 ["PHASE 2 — DESIGN (Skill: phase-design + phase-codebase-analysis)"]
136
+ D0["Skill: phase-codebase-analysis\nRead DB schema via Supabase MCP or Grep"] --> D1
137
+ D1["morph-spec state mark-output FEATURE schema-analysis"] --> D2
138
+ D2["morph-spec template render code/dotnet/contracts/contracts-levelN.cs"] --> D3
139
+ D3["morph-spec template render docs/spec"] --> D4
140
+ D4["morph-spec template render feature/decisions"] --> D5
141
+ D5["morph-spec state set FEATURE phase design"] --> D6
142
+ D6["morph-spec state set FEATURE costs.estimated X.XX"] --> D7
143
+ D7["morph-spec state mark-output FEATURE spec"] --> D8
144
+ D8["morph-spec state mark-output FEATURE contracts"] --> D9
145
+ D9["morph-spec state mark-output FEATURE decisions"]
146
+ D9 --> GATE2(["⏸ GATE — approve design\nmorph-spec approve FEATURE design"])
147
+ end
193
148
 
194
- E -->|yes| F["Extract spec → .morph/specs/DOMAIN/\nBecomes the 'current truth' of the system"]
195
- F --> G
196
- E -->|no| G
149
+ GATE2 -->|approved| PHASE3
197
150
 
198
- subgraph MOVE ["MOVE"]
199
- G["Move full directory:\n.morph/features/FEATURE/\n→ .morph/archive/FEATURE/"]
151
+ subgraph PHASE3 ["PHASE 3 — CLARIFY (Skill: phase-clarify)"]
152
+ C1["Read 1-design/spec.md\nIdentify 3-7 ambiguities"] --> C2
153
+ C2["Present questions → wait for answers"] --> C3
154
+ C3["Update spec with clarifications"] --> C4
155
+ C4["morph-spec state set FEATURE phase clarify"]
200
156
  end
201
157
 
202
- G --> H
158
+ C4 --> PHASE4
203
159
 
204
- subgraph METRICS ["METRICS UPDATE"]
205
- H["Increment completed features counter"] --> I
206
- I["Update total accumulated cost"] --> J
207
- J["Update total time spent"]
160
+ subgraph PHASE4 ["PHASE 4 — TASKS (Skill: phase-tasks)"]
161
+ T1["Read spec.md + contracts.cs"] --> T2
162
+ T2["Check domain complexity level\ngrep '## Domain Complexity' spec.md"] --> T3
163
+ T3["Write 3-tasks/tasks.md (T001…TXXX)"] --> T4
164
+ T4["morph-spec state set FEATURE phase tasks"] --> T5
165
+ T5["morph-spec state set FEATURE tasks.total N"] --> T6
166
+ T6["morph-spec state mark-output FEATURE tasks"]
167
+ T6 --> GATE4(["⏸ GATE — approve tasks\nmorph-spec approve FEATURE tasks"])
208
168
  end
209
169
 
210
- J --> END(["✅ Feature archived at\n.morph/archive/FEATURE/"])
170
+ GATE4 --> END(["✅ Planning complete\nRun /morph-apply FEATURE"])
211
171
  ```
212
172
 
213
173
  ---
214
174
 
215
- ## 5. /morph-infra
175
+ ## 5. /morph-apply — Detailed Flow
216
176
 
217
177
  ```mermaid
218
178
  flowchart TD
219
- START(["/morph-infra ACTION"]) --> ROUTE
220
-
221
- ROUTE{"Action?"}
222
-
223
- ROUTE -->|init| INIT_1
224
- ROUTE -->|validate| VAL_1
225
- ROUTE -->|plan| PLAN_1
226
- ROUTE -->|deploy| DEP_1
227
- ROUTE -->|destroy| DES_1
228
-
229
- subgraph INIT ["INIT — Initialize IaC"]
230
- INIT_1["Copy templates from\n.morph/framework/templates/infrastructure/"] --> INIT_2
231
- INIT_2["Create infra/ structure\nmain.bicep\nparameters.dev.json, parameters.prod.json\nmodules/*.bicep"] --> INIT_3
232
- INIT_3["Replace placeholders\nAPP_NAME, SUBSCRIPTION_ID\nRESOURCE_GROUP"] --> INIT_4
233
- INIT_4["Document structure in decisions.md"]
234
- INIT_4 --> INIT_END(["✅ Done — run /morph-infra validate"])
179
+ START(["/morph-apply FEATURE"]) --> CHECK
180
+
181
+ subgraph INIT ["INITIALIZATION (Skill: phase-implement)"]
182
+ CHECK["morph-spec state get FEATURE"] --> GATES
183
+ GATES["morph-spec approval-status FEATURE\nVerify design + tasks gates passed"] --> READ
184
+ READ["Read 1-design/spec.md\nRead 3-tasks/tasks.md\nRead 1-design/contracts.cs"] --> SETPHASE
185
+ SETPHASE["morph-spec state set FEATURE phase implement"] --> SETSTATUS
186
+ SETSTATUS["morph-spec state set FEATURE status in_progress"]
235
187
  end
236
188
 
237
- subgraph VALIDATE ["VALIDATE — Validate Templates"]
238
- VAL_1["az bicep build --file infra/main.bicep"] --> VAL_2
239
- VAL_2["Check required parameters"] --> VAL_3{"No errors?"}
240
- VAL_3 -->|yes| VAL_OK(["✅ Templates valid"])
241
- VAL_3 -->|no| VAL_ERR([" Report syntax errors"])
189
+ SETSTATUS --> GETNEXT
190
+
191
+ subgraph TASKLOOP ["TASK LOOP"]
192
+ GETNEXT["morph-spec task next FEATURE\n(find next pending task)"] --> START_T
193
+ START_T["morph-spec task start FEATURE T00X"] --> IMPL
194
+ IMPL["Implement code\nfollowing contracts.cs + standards\nTDD: write test first"] --> TEST
195
+ TEST["dotnet test / npm test"] --> TESTOK{"Tests\npassed?"}
196
+ TESTOK -->|no| FIX["Fix code"] --> TEST
197
+ TESTOK -->|yes| DONE_T
198
+ DONE_T["morph-spec task done FEATURE T00X"] --> DISPATCH
199
+ DISPATCH["[Hook: dispatch.js fires]\nChecks: completed % 3 === 0?"] --> CHKCHECK{"Auto-checkpoint\nneeded?"}
200
+ CHKCHECK -->|yes| CP["morph-spec checkpoint-save FEATURE\n(auto-triggered by dispatch.js hook)"]
201
+ CP --> MORETASKS
202
+ CHKCHECK -->|no| MORETASKS
203
+ MORETASKS{"More tasks?"}
204
+ MORETASKS -->|yes| GETNEXT
242
205
  end
243
206
 
244
- subgraph PLAN ["PLAN — Preview Changes"]
245
- PLAN_1["az account show"] --> PLAN_2{"Authenticated\nto Azure?"}
246
- PLAN_2 -->|no| PLAN_ERR(["❌ Run az login"])
247
- PLAN_2 -->|yes| PLAN_3["az deployment group what-if\n--template-file infra/main.bicep\n--parameters parameters.ENV.json"]
248
- PLAN_3 --> PLAN_4["Display summary:\nCREATE / MODIFY / DELETE\n+ estimated costs"]
249
- PLAN_4 --> PLAN_PAUSE(["⏸ GATE — wait for approval\nbefore running deploy"])
250
- end
207
+ MORETASKS -->|no| RECAP
251
208
 
252
- subgraph DEPLOY ["DEPLOY — Execute Deploy"]
253
- DEP_1["Verify plan approval"] --> DEP_2
254
- DEP_2["az group create --name rg-APP-ENV\n--location brazilsouth"] --> DEP_3
255
- DEP_3["az deployment group create\n--template-file infra/main.bicep\n--parameters parameters.ENV.json"] --> DEP_4
256
- DEP_4["Capture outputs:\nContainer App URL\nSQL Connection String\nKey Vault URI"] --> DEP_5
257
- DEP_5["Update documentation\nwith deploy info"]
258
- DEP_5 --> DEP_END(["✅ Deploy complete"])
209
+ subgraph WRAP ["FINALIZATION"]
210
+ RECAP["morph-spec generate recap FEATURE\n(auto-calls markOutput internally)"] --> VALFEAT
211
+ VALFEAT["morph-spec validate-feature FEATURE --phase implement"] --> SETDONE
212
+ SETDONE["morph-spec state set FEATURE status done"] --> ADVANCE
213
+ ADVANCE["morph-spec phase advance FEATURE"]
259
214
  end
260
215
 
261
- subgraph DESTROY ["DESTROY Remove Resources"]
262
- DES_1(["⚠️ WARNING: irreversible action"]) --> DES_2
263
- DES_2["List all resources\nthat will be deleted"] --> DES_3
264
- DES_3(["⏸ GATE — require explicit confirmation\n'yes, delete'"]) --> DES_4
265
- DES_4["az group delete --name rg-APP-ENV\n--yes --no-wait"]
266
- DES_4 --> DES_END(["✅ Resources removed"])
267
- end
216
+ ADVANCE --> END([" Feature complete"])
268
217
  ```
269
218
 
270
219
  ---
271
220
 
272
- ## 6. /morph-preflight
221
+ ## 6. /morph-status — Flow
273
222
 
274
223
  ```mermaid
275
224
  flowchart TD
276
- START(["/morph-preflight azure"]) --> C1
225
+ START(["/morph-status"]) --> A
226
+ A["morph-spec state list\n→ StateManager.getSummary() + listFeatures()\n→ reads .morph/state.json"] --> B
227
+ B["Display: all features, phases, task counts, gates"] --> C
228
+ C{"Specific feature?"}
229
+ C -->|yes| D["morph-spec status FEATURE --verbose\n→ reads state + scans feature directory for output files"]
230
+ C -->|no| E["Suggest next actions"]
231
+ D --> E
232
+ E --> END(["✅ Done"])
233
+ ```
277
234
 
278
- subgraph CHECKS ["7 SEQUENTIAL CHECKS"]
279
- C1["Check 1 — Package Conflicts\ndotnet restore --verbosity normal\ngrep NU1605 NU1608"] --> R1{"OK?"}
280
- R1 -->|✅| C2
281
- R1 -->|❌| FIX1["Fix: declare Azure.Identity\nwith explicit version in .csproj"] --> C2
235
+ ---
282
236
 
283
- C2["Check 2 EF Core Migrations\ndotnet ef migrations has-pending-model-changes\n--project src/Infrastructure --startup-project src/Web"] --> R2{"OK?"}
284
- R2 -->|✅| C3
285
- R2 -->|❌| FIX2["Fix: dotnet ef migrations add NAME"] --> C3
237
+ ## 7. Skill CLI Commands Reference
238
+
239
+ ### Meta Skills (level-0-meta)
240
+
241
+ | Skill | CLI Commands Called |
242
+ |---|---|
243
+ | `verification-before-completion` | `morph-spec state get {f}` · `morph-spec validate-feature {f} --phase {p}` · `morph-spec status {f} --verbose` · `morph-spec checkpoint-save {f}` · `morph-spec task done {f} T001` |
244
+ | `brainstorming` | `morph-spec state get {f}` · `morph-spec state mark-output {f} proposal` · `morph-spec state mark-output {f} decisions` |
245
+ | `morph-init` | `morph-spec setup-infra` · `morph-spec install-plugin superpowers` · `morph-spec install-plugin context7` |
246
+ | `morph-checklist` | None (pure checklist) |
247
+ | `simulation-checklist` | None (pure checklist) |
248
+ | `code-review` | None (pure checklist) |
249
+ | `code-review-nextjs` | None (pure checklist) |
250
+ | `tool-usage-guide` | None (reference guide) |
251
+
252
+ ### Workflow Skills (level-1-workflows)
253
+
254
+ | Skill | CLI Commands Called |
255
+ |---|---|
256
+ | `phase-setup` | `morph-spec state get {f}` · `morph-spec state set {f} phase setup` · `morph-spec state set {f} status in_progress` |
257
+ | `phase-uiux` | `morph-spec state set {f} phase uiux` · `morph-spec state mark-output {f} uiDesignSystem` · `morph-spec state mark-output {f} uiMockups` · `morph-spec state mark-output {f} uiComponents` · `morph-spec state mark-output {f} uiFlows` · `morph-spec approve {f} uiux` |
258
+ | `phase-codebase-analysis` | `morph-spec state mark-output {f} schema-analysis` |
259
+ | `phase-design` | `morph-spec state get {f}` · `morph-spec template render ...` (×3) · `morph-spec state set {f} phase design` · `morph-spec state set {f} costs.estimated N` · `morph-spec state mark-output {f} schema-analysis` · `morph-spec state mark-output {f} spec` · `morph-spec state mark-output {f} contracts` · `morph-spec state mark-output {f} decisions` |
260
+ | `phase-clarify` | `morph-spec state set {f} phase clarify` · `morph-spec state mark-output {f} clarifications` |
261
+ | `phase-tasks` | `morph-spec state get {f}` · `morph-spec state set {f} phase tasks` · `morph-spec state set {f} tasks.total N` · `morph-spec state mark-output {f} tasks` |
262
+ | `phase-implement` | `morph-spec state get {f}` · `morph-spec approval-status {f}` · `morph-spec task next {f}` · `morph-spec task start {f} T00X` · `morph-spec task done {f} T00X` · `morph-spec checkpoint-save {f}` · `morph-spec validate-feature {f} --phase implement` · `morph-spec generate recap {f}` · `morph-spec state set {f} phase implement` · `morph-spec state set {f} status done` · `morph-spec phase advance {f}` |
286
263
 
287
- C3["Check 3 — Dockerfile\ndocker build --check .\nVerify multi-stage, EXPOSE, ENTRYPOINT"] --> R3{"Applicable\nand OK?"}
288
- R3 -->|✅ or N/A| C4
289
- R3 -->|❌| FIX3["Fix: correct Dockerfile"] --> C4
264
+ ---
290
265
 
291
- C4["Check 4 — Blazor .NET 10 Assets\ngrep RequiresAspNetWebAssets *.csproj"] --> R4{"OK?"}
292
- R4 -->|✅ or N/A| C5
293
- R4 -->|❌| FIX4["Fix: add RequiresAspNetWebAssets=true\nto .csproj"] --> C5
266
+ ## 8. CLI Command Internal Implementation
267
+
268
+ | CLI Command | Handler | Key State-Manager Calls |
269
+ |---|---|---|
270
+ | `state get {f}` | `src/commands/state/state.js` → `getCommand()` | `StateManager.getFeature(f)` |
271
+ | `state set {f} {key} {value}` | `state.js` → `setCommand()` | `StateManager.updateFeature(f, key, value)` |
272
+ | `state list` | `state.js` → `listCommand()` | `StateManager.getSummary()` · `StateManager.listFeatures()` |
273
+ | `state mark-output {f} {type}` | `state.js` → `markOutputCommand()` | `StateManager.markOutput(f, type)` → normalizes type, sets `outputs.{type}.created = true` |
274
+ | `state add-agent {f} {id}` | `state.js` → `addAgentCommand()` | `StateManager.addAgent(f, id)` → pushes to `activeAgents[]` |
275
+ | `state remove-agent {f} {id}` | `state.js` → `removeAgentCommand()` | `StateManager.removeAgent(f, id)` → filters from `activeAgents[]` |
276
+ | `task start {f} {id}` | `src/commands/tasks/task.js` → `taskStartCommand()` | `StateManager.updateTaskStatus(f, id, 'in_progress')` |
277
+ | `task done {f} {ids...}` | `task.js` → `taskDoneCommand()` | `StateManager.updateTaskStatus(f, id, 'completed')` · increments `tasks.completed` |
278
+ | `task next {f}` | `task.js` → `taskNextCommand()` | `StateManager.getNextTask(f)` → scans `taskList[]` for first pending |
279
+ | `checkpoint-save {f}` | `src/commands/project/checkpoint.js` → `checkpointSaveCommand()` | `StateManager.addCheckpoint(f, note)` → appends to `checkpoints[]` |
280
+ | `checkpoint-restore {f}` | `checkpoint.js` → `checkpointRestoreCommand()` | `StateManager.getCheckpoints(f)` + file restoration |
281
+ | `checkpoint-list {f}` | `checkpoint.js` → `checkpointListCommand()` | `StateManager.getCheckpoints(f)` |
282
+ | `approve {f} {gate}` | `src/commands/state/approve.js` → `approveCommand()` | `StateManager.setApprovalGate(f, gate, true, meta)` |
283
+ | `approval-status {f}` | `approve.js` → `approvalStatusCommand()` | `StateManager.getApprovalGate(f, gate)` × 4 · `StateManager.getApprovalHistory(f)` |
284
+ | `phase advance {f}` | `src/commands/state/advance-phase.js` → `advancePhaseCommand()` | `StateManager.getFeature(f)` · `StateManager.updateFeature(f, 'phase', next)` |
285
+ | `validate-phase {f} {phase}` | `src/commands/state/validate-phase.js` | `StateManager.getFeature(f)` · checks `outputs` + `approvals` |
286
+ | `validate-feature {f}` | `src/commands/validation/validate-feature.js` | `StateManager.getFeature(f)` · `runValidation()` from `validation-runner.js` |
287
+ | `generate recap {f}` | inline in `bin/morph-spec.js` → `generateRecap()` | `StateManager.loadState()` · `StateManager.markOutput(f, 'recap')` *(auto, post-write)* |
288
+ | `template render {id} {out} {vars}` | `src/commands/templates/template-render.js` | None — reads template file, renders Handlebars, writes output |
289
+ | `status {f}` | `src/commands/project/status.js` | `StateManager.getFeature(f)` · scans filesystem for outputs |
294
290
 
295
- C5["Check 5 — Bicep Syntax\naz bicep build --file infra/main.bicep --stdout"] --> R5{"OK?"}
296
- R5 -->|✅| C6
297
- R5 -->|❌| FIX5["Fix: correct Bicep syntax errors"] --> C6
291
+ ---
298
292
 
299
- C6["Check 6 Key Vault Config\ngrep KeyVaultUri appsettings*.json\ngrep IsDevelopment Program.cs"] --> R6{"OK?"}
300
- R6 -->|✅| C7
301
- R6 -->|❌| FIX6["Fix: add KeyVaultUri\nDO NOT gate on IsDevelopment"] --> C7
293
+ ## 9. Hook Event Chain
302
294
 
303
- C7["Check 7 Connection Strings\ngrep 'Password= Pwd= Secret='\nappsettings*.json excluding Development"] --> R7{"OK?"}
304
- R7 -->|✅| SUM
305
- R7 -->|⚠️| WARN["Warning: move secrets to Key Vault"] --> SUM
306
- end
295
+ Hooks are configured in `.claude/settings.local.json`. All fail-open (catch + exit 0).
307
296
 
308
- SUM["Display summary\nN passed / N failed / N warnings"] --> RESULT
309
-
310
- RESULT{"Any\nfailures?"} -->|yes| BLOCK(["❌ BLOCKED\nDo not deploy until resolved!"])
311
- RESULT -->|no| PASS(["✅ Ready to deploy to Azure"])
297
+ ```
298
+ SessionStart ──────────────── inject-morph-context.js
299
+ Reads state.json injects active feature summary
300
+ + spec.md up to hooks.specInjectionLimit chars (default: 3000)
301
+
302
+ UserPromptSubmit ─────────── enrich-prompt.js
303
+ Scans prompt for feature names, detects intent
304
+ (implement/approve/next-task) → injects hints
305
+
306
+ PreToolUse (Write|Edit) ──┬─ protect-spec-files.js
307
+ │ If gate approved → blocks edits to spec/contracts/tasks
308
+ └─ enforce-phase-writes.js
309
+ If write target is wrong phase folder → blocks
310
+ [permissions.deny in settings.local.json]
311
+ Always blocks: .morph/state.json, .morph/framework/**
312
+
313
+ PostToolUse (Bash) ──────── dispatch.js
314
+ Detects: morph-spec task done {f} {id}
315
+ If completed % 3 === 0 → triggers:
316
+ morph-spec checkpoint-save {f}
317
+
318
+ PostToolUseFailure ──────── handle-tool-failure.js
319
+ Appends JSON to .morph/logs/tool-failures.log
320
+
321
+ Stop ────────────────────── validate-completion.js
322
+ Checks for incomplete tasks, missing outputs,
323
+ pending gates → returns advisory (non-blocking)
324
+
325
+ PreCompact ─────────────── save-morph-context.js
326
+ Snapshots state to .morph/memory/pre-compact-{ts}.json
327
+
328
+ Notification (idle) ─────── approval-reminder.js
329
+ If pending gate → suggests: morph-spec approve {f} {gate}
312
330
  ```
313
331
 
314
332
  ---
315
333
 
316
- ## 7. /morph-troubleshoot
317
-
318
- ```mermaid
319
- flowchart TD
320
- START(["/morph-troubleshoot KEYWORDS"]) --> A
321
-
322
- A["troubleshootCommand(keywords, options)"] --> LISTCAT
334
+ ## 10. State-Manager Key Methods
335
+
336
+ Located in `src/core/state/state-manager.js`.
337
+
338
+ | Method | Signature | Purpose |
339
+ |---|---|---|
340
+ | `loadState` | `loadState(throwIfMissing?)` | Read `.morph/state.json` → returns parsed object |
341
+ | `saveState` | `saveState(state)` | Write state object to disk |
342
+ | `stateExists` | `stateExists()` | Boolean check for `.morph/state.json` existence |
343
+ | `initState` | `initState(opts)` | Create fresh state.json (v4.0.0 schema) |
344
+ | `getFeature` | `getFeature(name)` | Return single feature object or null |
345
+ | `listFeatures` | `listFeatures()` | Return `[name, feature][]` array |
346
+ | `getSummary` | `getSummary()` | Return project-level metadata (counts, totals) |
347
+ | `updateFeature` | `updateFeature(name, key, value)` | Set `feature[key] = value`, save |
348
+ | `markOutput` | `markOutput(name, type)` | Set `feature.outputs[normalizedType].created = true` |
349
+ | `addAgent` | `addAgent(name, agentId)` | Push to `feature.activeAgents[]` if not present |
350
+ | `removeAgent` | `removeAgent(name, agentId)` | Filter from `feature.activeAgents[]` |
351
+ | `setApprovalGate` | `setApprovalGate(name, gate, approved, meta)` | Set `feature.approvals[gate]` with timestamp + metadata |
352
+ | `getApprovalGate` | `getApprovalGate(name, gate)` | Return gate object or null |
353
+ | `getApprovalHistory` | `getApprovalHistory(name)` | Return `feature.approvalHistory[]` |
354
+ | `addCheckpoint` | `addCheckpoint(name, note)` | Append to `feature.checkpoints[]`, returns checkpoint object |
355
+ | `getCheckpoints` | `getCheckpoints(name)` | Return `feature.checkpoints[]` |
356
+ | `updateTaskStatus` | `updateTaskStatus(name, taskId, status)` | Update task in `taskList[]`, recalculate counters |
357
+ | `getNextTask` | `getNextTask(name)` | Return first task with `status === 'pending'` |
323
358
 
324
- LISTCAT{"--list-categories?"} -->|yes| CATS["getCategories()\nList: blazor, efcore, azure, auth, deploy"]
325
- CATS --> END_CATS(["✅ Categories displayed"])
359
+ ---
326
360
 
327
- LISTCAT -->|no| L1_START
361
+ ## 11. Agent Detection — How It Actually Works
328
362
 
329
- subgraph L1 ["Level 1Known Issues Index (Primary)"]
330
- L1_START["searchIndex(searchTerms, options)"] --> L1A
331
- L1A["Search JSON database\nof known issues"] --> L1B{"Filter\n--category?"}
332
- L1B -->|yes| L1C["Filter by category"]
333
- L1B -->|no| L1D["Match all keywords"]
334
- L1C --> L1RESULT
335
- L1D --> L1RESULT["Return matches with score"]
336
- end
363
+ > `detect-agents` appears in some skill files as `npx morph-spec detect-agents --json`. This CLI command is **not in bin/morph-spec.js** the source file never made it to the registered CLI.
337
364
 
338
- L1RESULT --> CHECK1{"Enough\nresults?"}
339
- CHECK1 -->|yes| FORMAT
365
+ The actual flow when agents are needed:
340
366
 
341
- subgraph L2 ["Level 2 Grep Standards (Automatic fallback)"]
342
- CHECK1 -->|no| L2_START["searchGrep(searchTerms, options)"]
343
- L2_START --> L2A["grep framework/standards/*.md"]
344
- L2A --> L2B["grep .morph/framework/standards/*.md"]
345
- L2B --> L2C["Deduplicate against Level 1 results"]
346
- L2C --> L2D["Merge and limit to 10 results"]
347
- end
367
+ 1. Claude reads `.morph/framework/agents.json` directly (via Read tool)
368
+ 2. Claude reads `.morph/framework/standards/STANDARDS.json` for the standards registry
369
+ 3. Claude matches the feature description keywords against each agent's `keywords[]` array in agents.json
370
+ 4. Matched agents are added to state via `morph-spec state add-agent {f} {agent-id}`
371
+ 5. Standards for active agents are loaded from `.morph/framework/standards/{path}` as needed
348
372
 
349
- L2D --> CHECK2{"Enough\nresults?"}
350
- CHECK2 -->|yes| FORMAT
373
+ ---
351
374
 
352
- subgraph L3 ["Level 3Web Search (If needed)"]
353
- CHECK2 -->|no| L3_START["WebSearch — external sources"]
354
- L3_START --> L3A["site:github.com/dotnet/aspnetcore ERROR\nsite:github.com/dotnet/efcore ERROR"]
355
- L3_START --> L3B["site:stackoverflow.com blazor ERROR\nsite:stackoverflow.com azure ERROR"]
356
- L3_START --> L3C["site:learn.microsoft.com ERROR\nsite:learn.microsoft.com/azure ERROR"]
357
- L3A & L3B & L3C --> L3MERGE["Consolidate relevant links"]
358
- end
375
+ ## 12. Data Flow Diagram A Single Task Cycle
359
376
 
360
- L3MERGE --> FORMAT
377
+ ```
378
+ Claude reads: 3-tasks/tasks.md → identifies T003
379
+ CLI: morph-spec task start f T003 → StateManager.updateTaskStatus('f','T003','in_progress')
380
+ .morph/state.json updated
381
+
382
+ Claude writes: src/Services/Foo.cs → [Hook: enforce-phase-writes.js fires]
383
+ Path outside .morph/features/? → passes
384
+ (source files are always allowed)
385
+
386
+ Claude runs: dotnet test → tests pass
387
+
388
+ CLI: morph-spec task done f T003 → StateManager.updateTaskStatus('f','T003','completed')
389
+ tasks.completed incremented
390
+ [Hook: dispatch.js fires on Bash PostToolUse]
391
+ completed=3, 3%3===0 → triggers:
392
+ morph-spec checkpoint-save f
393
+ StateManager.addCheckpoint('f', 'Auto #1 at T003')
394
+ ```
361
395
 
362
- subgraph FMT ["Output Formatting"]
363
- FORMAT["formatResult(result, verbose)\nRoot cause + Solution + Fix code"] --> FSUM
364
- FSUM["formatSummary(stats)\nTotal found per level (L1/L2/L3)"]
365
- end
396
+ ---
366
397
 
367
- FSUM --> END(["✅ Results displayed\nin standard format"])
368
- ```
398
+ *morph-spec v4.8.1 by Polymorphism Tech*