@polymorphism-tech/morph-spec 4.7.2 → 4.8.4

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 (342) hide show
  1. package/LICENSE +1 -2
  2. package/README.md +379 -414
  3. package/bin/morph-spec.js +57 -394
  4. package/bin/validate.js +2 -26
  5. package/claude-plugin.json +2 -2
  6. package/docs/CHEATSHEET.md +203 -221
  7. package/docs/QUICKSTART.md +2 -8
  8. package/framework/CLAUDE.md +1 -1
  9. package/framework/commands/morph-proposal.md +3 -3
  10. package/framework/hooks/README.md +2 -5
  11. package/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +4 -55
  12. package/framework/hooks/claude-code/session-start/inject-morph-context.js +20 -5
  13. package/framework/hooks/claude-code/statusline.py +6 -1
  14. package/framework/hooks/dev/check-sync-health.js +117 -0
  15. package/framework/hooks/dev/guard-version-numbers.js +57 -0
  16. package/framework/hooks/dev/sync-standards-registry.js +60 -0
  17. package/framework/hooks/dev/sync-template-registry.js +60 -0
  18. package/framework/hooks/dev/validate-skill-format.js +70 -0
  19. package/framework/hooks/dev/validate-standard-format.js +73 -0
  20. package/framework/hooks/shared/payload-utils.js +39 -0
  21. package/framework/hooks/shared/state-reader.js +25 -1
  22. package/framework/rules/morph-workflow.md +1 -1
  23. package/framework/skills/level-0-meta/morph-init/SKILL.md +216 -0
  24. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +4 -4
  25. package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +4 -4
  26. package/framework/skills/level-0-meta/verification-before-completion/SKILL.md +1 -1
  27. package/framework/skills/level-1-workflows/phase-clarify/SKILL.md +192 -191
  28. package/framework/skills/level-1-workflows/phase-codebase-analysis/SKILL.md +181 -180
  29. package/framework/skills/level-1-workflows/phase-design/SKILL.md +339 -338
  30. package/framework/skills/level-1-workflows/phase-implement/SKILL.md +254 -253
  31. package/framework/skills/level-1-workflows/phase-setup/SKILL.md +168 -170
  32. package/framework/skills/level-1-workflows/phase-tasks/SKILL.md +284 -283
  33. package/framework/skills/level-1-workflows/phase-uiux/SKILL.md +246 -245
  34. package/framework/templates/examples/design-system-examples.md +1 -1
  35. package/framework/templates/ui/FluentDesignTheme.cs +1 -1
  36. package/framework/templates/ui/MudTheme.cs +1 -1
  37. package/framework/templates/ui/design-system.css +1 -1
  38. package/package.json +7 -5
  39. package/src/commands/agents/index.js +1 -2
  40. package/src/commands/index.js +13 -16
  41. package/src/commands/project/doctor.js +100 -14
  42. package/src/commands/project/index.js +7 -10
  43. package/src/commands/project/init.js +398 -528
  44. package/src/commands/project/install-plugin-cmd.js +28 -0
  45. package/src/commands/project/setup-infra-cmd.js +12 -0
  46. package/src/commands/project/tutorial.js +115 -0
  47. package/src/commands/state/approve.js +213 -221
  48. package/src/commands/state/index.js +0 -1
  49. package/src/commands/state/state.js +337 -365
  50. package/src/commands/templates/index.js +0 -4
  51. package/src/commands/trust/trust.js +1 -93
  52. package/src/commands/utils/index.js +1 -5
  53. package/src/commands/validation/index.js +1 -5
  54. package/src/core/registry/command-registry.js +11 -285
  55. package/src/core/state/state-manager.js +5 -2
  56. package/src/lib/detectors/index.js +81 -87
  57. package/src/lib/detectors/structure-detector.js +275 -273
  58. package/src/lib/generators/recap-generator.js +232 -225
  59. package/src/scripts/global-install.js +34 -0
  60. package/src/scripts/install-plugin.js +126 -0
  61. package/src/scripts/setup-infra.js +203 -0
  62. package/src/utils/agents-installer.js +10 -1
  63. package/src/utils/hooks-installer.js +66 -3
  64. package/.morph/.morphversion +0 -5
  65. package/.morph/analytics/threads-log.jsonl +0 -5
  66. package/.morph/config/config.json +0 -8
  67. package/.morph/framework/agents.json +0 -1815
  68. package/.morph/framework/hooks/README.md +0 -205
  69. package/.morph/framework/hooks/claude-code/notification/approval-reminder.js +0 -54
  70. package/.morph/framework/hooks/claude-code/post-tool-use/dispatch.js +0 -83
  71. package/.morph/framework/hooks/claude-code/post-tool-use/handle-tool-failure.js +0 -42
  72. package/.morph/framework/hooks/claude-code/pre-compact/save-morph-context.js +0 -61
  73. package/.morph/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +0 -71
  74. package/.morph/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +0 -58
  75. package/.morph/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +0 -64
  76. package/.morph/framework/hooks/claude-code/session-start/inject-morph-context.js +0 -94
  77. package/.morph/framework/hooks/claude-code/statusline.py +0 -538
  78. package/.morph/framework/hooks/claude-code/statusline.sh +0 -7
  79. package/.morph/framework/hooks/claude-code/stop/validate-completion.js +0 -88
  80. package/.morph/framework/hooks/claude-code/user-prompt/enrich-prompt.js +0 -91
  81. package/.morph/framework/hooks/git/commit-msg/conventional-commits.sh +0 -33
  82. package/.morph/framework/hooks/git/pre-commit/agents.sh +0 -25
  83. package/.morph/framework/hooks/git/pre-commit/orchestrator.sh +0 -64
  84. package/.morph/framework/hooks/git/pre-commit/specs.sh +0 -50
  85. package/.morph/framework/hooks/git/pre-push/run-tests.sh +0 -44
  86. package/.morph/framework/hooks/shared/hook-response.js +0 -45
  87. package/.morph/framework/hooks/shared/phase-utils.js +0 -129
  88. package/.morph/framework/hooks/shared/state-reader.js +0 -138
  89. package/.morph/framework/hooks/shared/stdin-reader.js +0 -26
  90. package/.morph/framework/standards/STANDARDS.json +0 -933
  91. package/.morph/framework/standards/ai-agents/blazor-ui.md +0 -364
  92. package/.morph/framework/standards/ai-agents/production.md +0 -415
  93. package/.morph/framework/standards/ai-agents/setup.md +0 -418
  94. package/.morph/framework/standards/ai-agents/team-orchestration.md +0 -479
  95. package/.morph/framework/standards/ai-agents/workflows.md +0 -354
  96. package/.morph/framework/standards/architecture/ddd/aggregates.md +0 -120
  97. package/.morph/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
  98. package/.morph/framework/standards/architecture/ddd/complexity-levels.md +0 -108
  99. package/.morph/framework/standards/architecture/ddd/entities.md +0 -99
  100. package/.morph/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
  101. package/.morph/framework/standards/architecture/ddd/value-objects.md +0 -124
  102. package/.morph/framework/standards/backend/api/minimal-api.md +0 -494
  103. package/.morph/framework/standards/backend/api/rest.md +0 -492
  104. package/.morph/framework/standards/backend/api/validation.md +0 -88
  105. package/.morph/framework/standards/backend/authentication/passkeys.md +0 -428
  106. package/.morph/framework/standards/backend/database/ef-core.md +0 -199
  107. package/.morph/framework/standards/backend/database/migrations.md +0 -393
  108. package/.morph/framework/standards/backend/database/postgresql/database.md +0 -352
  109. package/.morph/framework/standards/backend/database/repository-patterns.md +0 -528
  110. package/.morph/framework/standards/backend/database/vector-search-rag.md +0 -541
  111. package/.morph/framework/standards/backend/dotnet/async.md +0 -366
  112. package/.morph/framework/standards/backend/dotnet/core.md +0 -117
  113. package/.morph/framework/standards/backend/dotnet/di.md +0 -439
  114. package/.morph/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  115. package/.morph/framework/standards/backend/integrations/asaas/asaas-api.md +0 -216
  116. package/.morph/framework/standards/backend/integrations/clerk/clerk-auth.md +0 -290
  117. package/.morph/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -350
  118. package/.morph/framework/standards/backend/integrations/resend/resend-email.md +0 -385
  119. package/.morph/framework/standards/context/analytics.md +0 -96
  120. package/.morph/framework/standards/context/bundles.md +0 -110
  121. package/.morph/framework/standards/context/priming.md +0 -78
  122. package/.morph/framework/standards/core/architecture.md +0 -185
  123. package/.morph/framework/standards/core/coding.md +0 -214
  124. package/.morph/framework/standards/core/git-branching-strategy.md +0 -403
  125. package/.morph/framework/standards/core/git.md +0 -185
  126. package/.morph/framework/standards/core/testing.md +0 -295
  127. package/.morph/framework/standards/data/nosql/blob-storage.md +0 -102
  128. package/.morph/framework/standards/data/nosql/cache/redis.md +0 -97
  129. package/.morph/framework/standards/data/nosql/cosmos-db.md +0 -118
  130. package/.morph/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  131. package/.morph/framework/standards/data/vector-search/rag-chunking.md +0 -104
  132. package/.morph/framework/standards/frontend/blazor/design-checklist.md +0 -222
  133. package/.morph/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  134. package/.morph/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  135. package/.morph/framework/standards/frontend/blazor/html-conversion.md +0 -184
  136. package/.morph/framework/standards/frontend/blazor/lifecycle.md +0 -195
  137. package/.morph/framework/standards/frontend/blazor/pitfalls.md +0 -198
  138. package/.morph/framework/standards/frontend/blazor/state.md +0 -191
  139. package/.morph/framework/standards/frontend/design-system/animations.md +0 -151
  140. package/.morph/framework/standards/frontend/design-system/naming.md +0 -64
  141. package/.morph/framework/standards/frontend/nextjs/app-router.md +0 -123
  142. package/.morph/framework/standards/frontend/nextjs/components.md +0 -132
  143. package/.morph/framework/standards/frontend/nextjs/data-fetching.md +0 -126
  144. package/.morph/framework/standards/frontend/nextjs/forms.md +0 -128
  145. package/.morph/framework/standards/frontend/nextjs/naming-conventions.md +0 -67
  146. package/.morph/framework/standards/frontend/nextjs/nextjs-patterns.md +0 -215
  147. package/.morph/framework/standards/frontend/nextjs/project-structure.md +0 -102
  148. package/.morph/framework/standards/frontend/nextjs/state-management.md +0 -72
  149. package/.morph/framework/standards/frontend/nextjs/testing.md +0 -111
  150. package/.morph/framework/standards/infrastructure/azure/azure.md +0 -624
  151. package/.morph/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  152. package/.morph/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  153. package/.morph/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  154. package/.morph/framework/standards/infrastructure/azure/services/functions.md +0 -486
  155. package/.morph/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  156. package/.morph/framework/standards/infrastructure/azure/services/storage.md +0 -407
  157. package/.morph/framework/standards/infrastructure/docker/easypanel-deploy.md +0 -196
  158. package/.morph/framework/standards/infrastructure/supabase/mcp-setup.md +0 -252
  159. package/.morph/framework/standards/infrastructure/supabase/supabase-auth.md +0 -176
  160. package/.morph/framework/standards/infrastructure/supabase/supabase-pgvector.md +0 -169
  161. package/.morph/framework/standards/infrastructure/supabase/supabase-rls.md +0 -184
  162. package/.morph/framework/standards/infrastructure/supabase/supabase-storage.md +0 -153
  163. package/.morph/framework/standards/integration/api/graphql.md +0 -91
  164. package/.morph/framework/standards/integration/api/grpc.md +0 -114
  165. package/.morph/framework/standards/integration/api/rest-design.md +0 -95
  166. package/.morph/framework/standards/integration/event-driven/cqrs.md +0 -101
  167. package/.morph/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  168. package/.morph/framework/standards/integration/event-driven/service-bus.md +0 -95
  169. package/.morph/framework/standards/integration/mcp/mcp-tools.md +0 -384
  170. package/.morph/framework/standards/observability/logging.md +0 -131
  171. package/.morph/framework/standards/observability/metrics.md +0 -121
  172. package/.morph/framework/standards/observability/monitoring.md +0 -114
  173. package/.morph/framework/standards/observability/tracing.md +0 -132
  174. package/.morph/framework/standards/workflows/parallel-execution.md +0 -112
  175. package/.morph/framework/standards/workflows/thread-management.md +0 -113
  176. package/.morph/framework/templates/.idea/morph-templates.xml +0 -92
  177. package/.morph/framework/templates/.vscode/morph-templates.code-snippets +0 -186
  178. package/.morph/framework/templates/IDE-SNIPPETS.md +0 -266
  179. package/.morph/framework/templates/README.md +0 -814
  180. package/.morph/framework/templates/REGISTRY.json +0 -1888
  181. package/.morph/framework/templates/code/dotnet/backend/repository.cs +0 -141
  182. package/.morph/framework/templates/code/dotnet/backend/service.cs +0 -139
  183. package/.morph/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  184. package/.morph/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  185. package/.morph/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  186. package/.morph/framework/templates/code/dotnet/contracts/README.md +0 -74
  187. package/.morph/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  188. package/.morph/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
  189. package/.morph/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
  190. package/.morph/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
  191. package/.morph/framework/templates/code/dotnet/database/migration.cs +0 -83
  192. package/.morph/framework/templates/code/dotnet/frontend/component.razor +0 -239
  193. package/.morph/framework/templates/code/dotnet/jobs/agent.cs +0 -163
  194. package/.morph/framework/templates/code/dotnet/jobs/job.cs +0 -171
  195. package/.morph/framework/templates/code/dotnet/test.cs +0 -239
  196. package/.morph/framework/templates/code/sql/rls-policy.sql +0 -57
  197. package/.morph/framework/templates/code/sql/supabase-migration.sql +0 -100
  198. package/.morph/framework/templates/code/sql/supabase-migration.template.sql +0 -113
  199. package/.morph/framework/templates/code/typescript/contracts.ts +0 -168
  200. package/.morph/framework/templates/context/CONTEXT-FEATURE.md +0 -276
  201. package/.morph/framework/templates/context/CONTEXT.md +0 -181
  202. package/.morph/framework/templates/docs/clarifications.md +0 -253
  203. package/.morph/framework/templates/docs/onboarding.md +0 -123
  204. package/.morph/framework/templates/docs/proposal.md +0 -182
  205. package/.morph/framework/templates/docs/schema-analysis.md +0 -119
  206. package/.morph/framework/templates/docs/spec.md +0 -198
  207. package/.morph/framework/templates/docs/ui-components.md +0 -124
  208. package/.morph/framework/templates/docs/ui-design-system.md +0 -76
  209. package/.morph/framework/templates/docs/ui-flows.md +0 -167
  210. package/.morph/framework/templates/docs/ui-mockups.md +0 -98
  211. package/.morph/framework/templates/docs/user-stories.md +0 -34
  212. package/.morph/framework/templates/examples/design-system-examples.md +0 -357
  213. package/.morph/framework/templates/examples/spec-examples.md +0 -90
  214. package/.morph/framework/templates/feature/decisions.md +0 -187
  215. package/.morph/framework/templates/feature/recap.md +0 -146
  216. package/.morph/framework/templates/feature/tasks.md +0 -199
  217. package/.morph/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +0 -43
  218. package/.morph/framework/templates/frontend/nextjs/client-component.tsx.hbs +0 -26
  219. package/.morph/framework/templates/frontend/nextjs/env.mjs.hbs +0 -32
  220. package/.morph/framework/templates/frontend/nextjs/feature-form.tsx.hbs +0 -56
  221. package/.morph/framework/templates/frontend/nextjs/page.tsx.hbs +0 -22
  222. package/.morph/framework/templates/frontend/nextjs/tsconfig.json.hbs +0 -26
  223. package/.morph/framework/templates/frontend/nextjs/use-feature.ts.hbs +0 -54
  224. package/.morph/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  225. package/.morph/framework/templates/infrastructure/azure/README.md +0 -286
  226. package/.morph/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  227. package/.morph/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  228. package/.morph/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  229. package/.morph/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  230. package/.morph/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  231. package/.morph/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  232. package/.morph/framework/templates/infrastructure/azure/deploy.sh +0 -208
  233. package/.morph/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  234. package/.morph/framework/templates/infrastructure/azure/main.bicep +0 -189
  235. package/.morph/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  236. package/.morph/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  237. package/.morph/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  238. package/.morph/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  239. package/.morph/framework/templates/infrastructure/azure/storage.bicep +0 -106
  240. package/.morph/framework/templates/infrastructure/docker/Dockerfile.template +0 -58
  241. package/.morph/framework/templates/infrastructure/docker/docker-compose.template.yml +0 -67
  242. package/.morph/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +0 -38
  243. package/.morph/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +0 -48
  244. package/.morph/framework/templates/infrastructure/docker/easypanel.template.json +0 -54
  245. package/.morph/framework/templates/infrastructure/github/README.md +0 -593
  246. package/.morph/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  247. package/.morph/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -45
  248. package/.morph/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +0 -27
  249. package/.morph/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  250. package/.morph/framework/templates/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -31
  251. package/.morph/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -59
  252. package/.morph/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -39
  253. package/.morph/framework/templates/integrations/asaas-client.cs +0 -387
  254. package/.morph/framework/templates/integrations/asaas-webhook.cs +0 -351
  255. package/.morph/framework/templates/integrations/azure-identity-config.cs +0 -288
  256. package/.morph/framework/templates/integrations/clerk-config.cs +0 -258
  257. package/.morph/framework/templates/meta-prompts/fusion/fusion-agent.md +0 -76
  258. package/.morph/framework/templates/meta-prompts/fusion/fusion-aggregator.md +0 -100
  259. package/.morph/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
  260. package/.morph/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
  261. package/.morph/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
  262. package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
  263. package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
  264. package/.morph/framework/templates/meta-prompts/squad-leaders/backend-squad.md +0 -90
  265. package/.morph/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +0 -126
  266. package/.morph/framework/templates/meta-prompts/squad-leaders/squad-leader.md +0 -43
  267. package/.morph/framework/templates/meta-prompts/validators/checkpoint-validator.md +0 -107
  268. package/.morph/framework/templates/meta-prompts/validators/pre-commit-validator.md +0 -95
  269. package/.morph/framework/templates/project-structure/dotnet-ddd.md +0 -70
  270. package/.morph/framework/templates/saas/subscription.cs +0 -347
  271. package/.morph/framework/templates/saas/tenant.cs +0 -338
  272. package/.morph/framework/templates/state.template.json +0 -17
  273. package/.morph/framework/templates/ui/FluentDesignTheme.cs +0 -149
  274. package/.morph/framework/templates/ui/MudTheme.cs +0 -281
  275. package/.morph/framework/templates/ui/design-system.css +0 -226
  276. package/.morph/logs/tool-failures.log +0 -17
  277. package/.morph/memory/pre-compact-2026-02-24T17-43-30-049Z.json +0 -16
  278. package/.morph/plans/eager-watching-bunny.md +0 -105
  279. package/.morph/plans/temporal-seeking-nebula.md +0 -45
  280. package/.morph/state.json +0 -48
  281. package/CLAUDE.md +0 -77
  282. package/docs/ARCHITECTURE.md +0 -331
  283. package/docs/COMMAND-FLOWS.md +0 -368
  284. package/docs/claude-alignment-report.md +0 -137
  285. package/docs/examples/order-management/contracts.cs +0 -84
  286. package/docs/examples/order-management/proposal.md +0 -24
  287. package/docs/examples/order-management/spec.md +0 -162
  288. package/docs/plans/2026-02-22-claude-docs-morph-alignment-analysis.md +0 -512
  289. package/docs/plans/2026-02-22-claude-settings.md +0 -515
  290. package/docs/plans/2026-02-22-morph-cc-alignment-impl.md +0 -728
  291. package/docs/plans/2026-02-22-morph-spec-next.md +0 -478
  292. package/docs/plans/2026-02-22-native-alignment-design.md +0 -199
  293. package/docs/plans/2026-02-22-native-alignment-impl.md +0 -925
  294. package/docs/plans/2026-02-22-native-enrichment-design.md +0 -244
  295. package/docs/plans/2026-02-22-native-enrichment.md +0 -735
  296. package/docs/plans/2026-02-23-ddd-architecture-refactor.md +0 -1153
  297. package/docs/plans/2026-02-23-ddd-nextsteps.md +0 -682
  298. package/docs/plans/2026-02-23-infra-architect-refactor.md +0 -437
  299. package/docs/plans/2026-02-23-nextjs-code-review-design.md +0 -156
  300. package/docs/plans/2026-02-23-nextjs-code-review-impl.md +0 -1254
  301. package/docs/plans/2026-02-23-nextjs-standards-design.md +0 -149
  302. package/docs/plans/2026-02-23-nextjs-standards-impl.md +0 -1846
  303. package/scripts/generate-refs.js +0 -336
  304. package/scripts/generate-standards-registry.js +0 -44
  305. package/scripts/scan-nextjs.mjs +0 -169
  306. package/scripts/validate-real.mjs +0 -255
  307. package/src/commands/feature/create-story.js +0 -362
  308. package/src/commands/feature/index.js +0 -6
  309. package/src/commands/feature/shard-spec.js +0 -225
  310. package/src/commands/feature/sprint-status.js +0 -250
  311. package/src/commands/generation/generate-onboarding.js +0 -169
  312. package/src/commands/generation/generate.js +0 -276
  313. package/src/commands/generation/index.js +0 -5
  314. package/src/commands/learning/capture-pattern.js +0 -121
  315. package/src/commands/learning/index.js +0 -5
  316. package/src/commands/learning/search-patterns.js +0 -126
  317. package/src/commands/mcp/mcp.js +0 -102
  318. package/src/commands/project/changes.js +0 -66
  319. package/src/commands/project/cost.js +0 -179
  320. package/src/commands/project/diff.js +0 -278
  321. package/src/commands/project/revert.js +0 -173
  322. package/src/commands/project/standards.js +0 -80
  323. package/src/commands/project/sync.js +0 -167
  324. package/src/commands/project/update-agents.js +0 -23
  325. package/src/commands/state/rollback-phase.js +0 -185
  326. package/src/commands/templates/template-customize.js +0 -87
  327. package/src/commands/templates/template-list.js +0 -114
  328. package/src/commands/templates/template-show.js +0 -129
  329. package/src/commands/templates/template-validate.js +0 -91
  330. package/src/commands/utils/troubleshoot.js +0 -222
  331. package/src/commands/validation/analyze-blazor-concurrency.js +0 -193
  332. package/src/commands/validation/lint-fluent.js +0 -352
  333. package/src/commands/validation/validate-blazor-state.js +0 -210
  334. package/src/commands/validation/validate-blazor.js +0 -156
  335. package/src/commands/validation/validate-css.js +0 -84
  336. package/src/lib/detectors/conversation-analyzer.js +0 -163
  337. package/src/lib/learning/index.js +0 -7
  338. package/src/lib/learning/learning-system.js +0 -520
  339. package/src/lib/troubleshooting/index.js +0 -8
  340. package/src/lib/troubleshooting/troubleshoot-grep.js +0 -198
  341. package/src/lib/troubleshooting/troubleshoot-index.js +0 -144
  342. package/src/llm/environment-detector.js +0 -43
@@ -1,515 +0,0 @@
1
- # Claude Code Settings & Native Subagents Alignment Plan
2
-
3
- > **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
4
-
5
- **Goal:** Align morph-spec with the latest Claude Code native primitives — native subagents (`.claude/agents/`), additional settings keys, and proper CLAUDE.md scoping.
6
-
7
- **Architecture:** Add an `agentsInstaller.js` that converts morph's tier-1/tier-2 agents into native Claude Code subagent markdown files; expand `hooks-installer.js` to configure additional settings keys ($schema, env, attribution, plansDirectory, teammateMode); split CLAUDE.md into human-readable root vs. Claude-Code-runtime `.claude/CLAUDE.md`.
8
-
9
- **Tech Stack:** Node.js ESM, fs-extra, node:test, Claude Code settings.json schema
10
-
11
- **Plan file should be copied to:** `docs/plans/2026-02-22-claude-settings.md`
12
-
13
- ---
14
-
15
- ## Context
16
-
17
- The Claude Code settings documentation reveals three native primitives morph-spec does not yet leverage:
18
-
19
- 1. **Native Subagents** (`.claude/agents/`): Claude Code natively discovers `.md` files with YAML frontmatter in `.claude/agents/`. morph-spec has 37 agents in a custom JSON registry that are entirely invisible to this native mechanism.
20
-
21
- 2. **Missing settings keys**: `$schema`, `env`, `attribution`, `plansDirectory`, `teammateMode`, `spinnerVerbs` — all recognized by Claude Code but not written by morph-spec's init.
22
-
23
- 3. **CLAUDE.md scopes**: Claude Code explicitly supports `.claude/CLAUDE.md` (alongside settings). morph-spec installs only the root `CLAUDE.md`, mixing human documentation with Claude Code runtime instructions.
24
-
25
- **Already well-aligned — no changes needed:**
26
- - Skills flat-install to `.claude/skills/` ✓
27
- - Commands install to `.claude/commands/` ✓
28
- - Global statusline at `~/.claude/` ✓
29
- - Native `permissions.deny` for state.json + framework/ ✓
30
- - 12 lifecycle hooks with `_morph_managed` tracking ✓
31
-
32
- ---
33
-
34
- ## Task 1: Create `src/utils/agents-installer.js`
35
-
36
- **Files:**
37
- - Create: `src/utils/agents-installer.js`
38
- - Test: `test/utils/agents-installer.test.js`
39
-
40
- ### Step 1: Write failing test
41
-
42
- ```js
43
- // test/utils/agents-installer.test.js
44
- import { test, describe, before, after } from 'node:test';
45
- import assert from 'node:assert/strict';
46
- import { mkdtemp, rm, readdir, readFile, mkdir } from 'node:fs/promises';
47
- import { join } from 'path';
48
- import { tmpdir } from 'os';
49
- import { installAgents } from '../../src/utils/agents-installer.js';
50
-
51
- describe('installAgents', () => {
52
- let tmpDir;
53
- before(async () => { tmpDir = await mkdtemp(join(tmpdir(), 'morph-agents-')); });
54
- after(async () => { await rm(tmpDir, { recursive: true, force: true }); });
55
-
56
- test('creates .claude/agents/ with tier-1 and tier-2 agent files', async () => {
57
- const frameworkDir = 'framework'; // uses real agents.json
58
- await installAgents(tmpDir, frameworkDir);
59
- const files = await readdir(join(tmpDir, '.claude', 'agents'));
60
- assert.ok(files.length >= 6, 'should install at least 6 agents');
61
- assert.ok(files.every(f => f.endsWith('.md')), 'all files should be .md');
62
- });
63
-
64
- test('each file has valid YAML frontmatter with name and description', async () => {
65
- await installAgents(tmpDir, 'framework');
66
- const files = await readdir(join(tmpDir, '.claude', 'agents'));
67
- for (const file of files) {
68
- const content = await readFile(join(tmpDir, '.claude', 'agents', file), 'utf-8');
69
- assert.ok(content.startsWith('---\n'), `${file} should start with YAML frontmatter`);
70
- assert.ok(content.includes('name:'), `${file} should have name`);
71
- assert.ok(content.includes('description:'), `${file} should have description`);
72
- }
73
- });
74
-
75
- test('is idempotent — running twice does not duplicate files', async () => {
76
- await installAgents(tmpDir, 'framework');
77
- await installAgents(tmpDir, 'framework');
78
- const files = await readdir(join(tmpDir, '.claude', 'agents'));
79
- const morphFiles = files.filter(f => f.startsWith('morph-'));
80
- const unique = new Set(morphFiles);
81
- assert.equal(morphFiles.length, unique.size);
82
- });
83
- });
84
- ```
85
-
86
- ### Step 2: Run test to verify it fails
87
-
88
- ```bash
89
- npm test -- test/utils/agents-installer.test.js
90
- ```
91
- Expected: FAIL — `agents-installer.js` not found.
92
-
93
- ### Step 3: Write the implementation
94
-
95
- ```js
96
- // src/utils/agents-installer.js
97
- import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
98
- import { join } from 'path';
99
-
100
- /**
101
- * Installs tier-1 and tier-2 morph agents as native Claude Code subagents
102
- * in .claude/agents/ with YAML frontmatter.
103
- * @param {string} projectDir - Target project directory
104
- * @param {string} frameworkDir - Path to morph-spec framework/ directory
105
- */
106
- export async function installAgents(projectDir, frameworkDir = 'framework') {
107
- const agentsJsonPath = join(frameworkDir, 'agents.json');
108
- const agentsJson = JSON.parse(readFileSync(agentsJsonPath, 'utf-8'));
109
- const agents = agentsJson.agents ?? agentsJson;
110
-
111
- const targetDir = join(projectDir, '.claude', 'agents');
112
- mkdirSync(targetDir, { recursive: true });
113
-
114
- const eligible = agents.filter(a => a.tier === 1 || a.tier === 2);
115
-
116
- for (const agent of eligible) {
117
- const slug = agent.id ?? agent.name?.toLowerCase().replace(/\s+/g, '-');
118
- const filename = `morph-${slug}.md`;
119
- const targetPath = join(targetDir, filename);
120
-
121
- const description = buildDescription(agent);
122
- const body = buildBody(agent);
123
-
124
- const content = `---\nname: ${agent.title ?? agent.name}\ndescription: ${description}\n---\n\n${body}\n`;
125
- writeFileSync(targetPath, content, 'utf-8');
126
- }
127
- }
128
-
129
- function buildDescription(agent) {
130
- const domains = (agent.domains ?? []).join(', ');
131
- const base = agent.teammate?.role ?? `Handles ${domains}`;
132
- // Truncate to 200 chars for settings display
133
- return base.length > 200 ? base.slice(0, 197) + '...' : base;
134
- }
135
-
136
- function buildBody(agent) {
137
- const lines = [];
138
- if (agent.teammate?.spawn_prompt) {
139
- lines.push(agent.teammate.spawn_prompt);
140
- } else {
141
- lines.push(`You are the ${agent.title} agent in the MORPH-SPEC framework.`);
142
- if (agent.domains?.length) lines.push(`\n## Domains\n${agent.domains.map(d => `- ${d}`).join('\n')}`);
143
- }
144
- if (agent.standards?.length) {
145
- lines.push(`\n## Standards to Reference\n${agent.standards.map(s => `- ${s}`).join('\n')}`);
146
- }
147
- return lines.join('\n');
148
- }
149
- ```
150
-
151
- ### Step 4: Run test to verify it passes
152
-
153
- ```bash
154
- npm test -- test/utils/agents-installer.test.js
155
- ```
156
- Expected: PASS (3 tests pass).
157
-
158
- ### Step 5: Commit
159
-
160
- ```bash
161
- git add src/utils/agents-installer.js test/utils/agents-installer.test.js
162
- git commit -m "feat(agents): add agents-installer for native .claude/agents/ subagent discovery"
163
- ```
164
-
165
- ---
166
-
167
- ## Task 2: Integrate `installAgents` into `init.js`
168
-
169
- **Files:**
170
- - Modify: `src/commands/project/init.js`
171
- - Modify: `src/utils/claude-settings-manager.js` (re-export)
172
-
173
- ### Step 1: Add import and call in init.js
174
-
175
- In `src/commands/project/init.js`, after the skills install block:
176
-
177
- ```js
178
- // After: await installSkills(targetPath);
179
- import { installAgents } from '../../utils/agents-installer.js';
180
- // ...
181
- await installAgents(targetPath, FRAMEWORK_DIR);
182
- logger.success('Native subagents installed to .claude/agents/');
183
- ```
184
-
185
- Find `FRAMEWORK_DIR` in init.js (or equivalent constant pointing to `framework/`).
186
-
187
- ### Step 2: Re-export from claude-settings-manager
188
-
189
- Add to `src/utils/claude-settings-manager.js`:
190
- ```js
191
- export { installAgents } from './agents-installer.js';
192
- ```
193
-
194
- ### Step 3: Add agent files to existing integration test
195
-
196
- In `test/commands/init.test.js`, add assertion:
197
- ```js
198
- const agentFiles = await readdir(join(projectDir, '.claude', 'agents'));
199
- assert.ok(agentFiles.some(f => f.startsWith('morph-')), 'agents should be installed');
200
- ```
201
-
202
- ### Step 4: Run all tests
203
-
204
- ```bash
205
- npm test
206
- ```
207
- Expected: All existing tests pass + new assertion passes.
208
-
209
- ### Step 5: Commit
210
-
211
- ```bash
212
- git add src/commands/project/init.js src/utils/claude-settings-manager.js
213
- git commit -m "feat(init): install native subagents to .claude/agents/ during init"
214
- ```
215
-
216
- ---
217
-
218
- ## Task 3: Settings Enhancements — `$schema`, `env`, `attribution`, `plansDirectory`
219
-
220
- **Files:**
221
- - Modify: `src/utils/hooks-installer.js`
222
- - Test: existing `test/hooks/hooks-installer.test.js`
223
-
224
- These settings go into `.claude/settings.local.json` (same file as hooks/permissions).
225
-
226
- ### Step 1: Write failing test
227
-
228
- In `test/hooks/hooks-installer.test.js`, add:
229
-
230
- ```js
231
- test('installClaudeHooks adds $schema to settings', async () => {
232
- await installClaudeHooks(tmpDir);
233
- const settings = JSON.parse(readFileSync(join(tmpDir, '.claude', 'settings.local.json'), 'utf-8'));
234
- assert.ok(settings['$schema'], 'should include $schema key');
235
- assert.equal(settings['$schema'], 'https://json.schemastore.org/claude-code-settings.json');
236
- });
237
-
238
- test('installClaudeHooks adds env section with MORPH vars', async () => {
239
- await installClaudeHooks(tmpDir);
240
- const settings = JSON.parse(readFileSync(join(tmpDir, '.claude', 'settings.local.json'), 'utf-8'));
241
- assert.ok(settings.env?.MORPH_SPEC_ACTIVE, 'should set MORPH_SPEC_ACTIVE');
242
- });
243
-
244
- test('installClaudeHooks sets attribution', async () => {
245
- await installClaudeHooks(tmpDir);
246
- const settings = JSON.parse(readFileSync(join(tmpDir, '.claude', 'settings.local.json'), 'utf-8'));
247
- assert.ok(settings.attribution, 'should set attribution');
248
- });
249
- ```
250
-
251
- ### Step 2: Run test to verify it fails
252
-
253
- ```bash
254
- npm test -- test/hooks/hooks-installer.test.js
255
- ```
256
- Expected: FAIL — schema/env/attribution not in settings.
257
-
258
- ### Step 3: Implement in `hooks-installer.js`
259
-
260
- In `installClaudeHooks(targetPath)`, before writing settings, merge:
261
-
262
- ```js
263
- // Add at top of installClaudeHooks, after loading existing settings:
264
- settings['$schema'] = 'https://json.schemastore.org/claude-code-settings.json';
265
-
266
- settings.env = {
267
- ...settings.env,
268
- MORPH_SPEC_ACTIVE: 'true',
269
- };
270
-
271
- if (!settings.attribution) {
272
- settings.attribution = {
273
- commit: '🤖 Co-authored by MORPH-SPEC',
274
- pr: '',
275
- };
276
- }
277
-
278
- if (!settings.plansDirectory) {
279
- settings.plansDirectory = '.morph/plans';
280
- }
281
- ```
282
-
283
- ### Step 4: Run test to verify it passes
284
-
285
- ```bash
286
- npm test -- test/hooks/hooks-installer.test.js
287
- ```
288
- Expected: All hooks-installer tests pass including new ones.
289
-
290
- ### Step 5: Commit
291
-
292
- ```bash
293
- git add src/utils/hooks-installer.js test/hooks/hooks-installer.test.js
294
- git commit -m "feat(settings): add \$schema, env, attribution, plansDirectory to installed settings"
295
- ```
296
-
297
- ---
298
-
299
- ## Task 4: Create `.claude/CLAUDE.md` (Claude Code Runtime Instructions)
300
-
301
- The project-root `CLAUDE.md` is for humans + Claude Code. The `.claude/CLAUDE.md` file should hold Claude Code-specific runtime instructions that don't need to be in the project root.
302
-
303
- **Files:**
304
- - Create: `framework/CLAUDE_runtime.md` (source template → installs as `.claude/CLAUDE.md`)
305
- - Modify: `src/commands/project/init.js` (copy runtime CLAUDE.md)
306
- - Test: `test/commands/init.test.js`
307
-
308
- ### Step 1: Create runtime CLAUDE.md template
309
-
310
- ```markdown
311
- <!-- framework/CLAUDE_runtime.md -->
312
- # MORPH-SPEC Runtime Instructions
313
-
314
- This file is loaded by Claude Code at runtime. For project documentation, see `CLAUDE.md` in the project root.
315
-
316
- ## Quick Reference
317
-
318
- - Feature status: `/morph-status`
319
- - Start new feature: `/morph-proposal {feature-name}`
320
- - Implement feature: `/morph-apply {feature-name}`
321
- - Preflight check: `/morph-preflight`
322
-
323
- ## State & Outputs
324
-
325
- - State file: `.morph/state.json` (READ-ONLY — use `morph-spec` CLI to update)
326
- - Feature outputs: `.morph/features/{feature}/{phase}/`
327
- - Framework files: `.morph/framework/` (READ-ONLY)
328
-
329
- ## Phase Sequence
330
-
331
- proposal → setup → [uiux] → design → clarify → tasks → implement → [sync]
332
-
333
- Use `morph-spec state show {feature}` to see current phase and pending gates.
334
- ```
335
-
336
- ### Step 2: Write failing test
337
-
338
- ```js
339
- test('init creates .claude/CLAUDE.md', async () => {
340
- // run init with mocks
341
- const content = readFileSync(join(projectDir, '.claude', 'CLAUDE.md'), 'utf-8');
342
- assert.ok(content.includes('MORPH-SPEC Runtime'), 'should have runtime header');
343
- assert.ok(content.includes('/morph-status'), 'should reference slash commands');
344
- });
345
- ```
346
-
347
- ### Step 3: Add copy in init.js
348
-
349
- After the skills install block, add:
350
-
351
- ```js
352
- const runtimeClaudeMdSrc = join(FRAMEWORK_DIR, 'CLAUDE_runtime.md');
353
- const runtimeClaudeMdDest = join(targetPath, '.claude', 'CLAUDE.md');
354
- await copyFile(runtimeClaudeMdSrc, runtimeClaudeMdDest);
355
- logger.success('Runtime CLAUDE.md installed to .claude/CLAUDE.md');
356
- ```
357
-
358
- ### Step 4: Run test to verify it passes
359
-
360
- ```bash
361
- npm test -- test/commands/init.test.js
362
- ```
363
-
364
- ### Step 5: Commit
365
-
366
- ```bash
367
- git add framework/CLAUDE_runtime.md src/commands/project/init.js test/commands/init.test.js
368
- git commit -m "feat(init): install .claude/CLAUDE.md with Claude Code runtime quick reference"
369
- ```
370
-
371
- ---
372
-
373
- ## Task 5: Add `morph-spec update-agents` command
374
-
375
- Allow users to refresh `.claude/agents/` when framework agents are updated (similar to how `morph-spec update` refreshes framework files).
376
-
377
- **Files:**
378
- - Create: `src/commands/project/update-agents.js`
379
- - Modify: `bin/morph-spec.js` (register command)
380
- - Test: `test/commands/update-agents.test.js`
381
-
382
- ### Step 1: Write failing test
383
-
384
- ```js
385
- // test/commands/update-agents.test.js
386
- import { test } from 'node:test';
387
- import assert from 'node:assert/strict';
388
- import { updateAgentsCommand } from '../../src/commands/project/update-agents.js';
389
-
390
- test('updateAgentsCommand re-installs agents from framework', async () => {
391
- // Should call installAgents with projectDir and frameworkDir
392
- // Should log success message
393
- assert.ok(typeof updateAgentsCommand === 'function');
394
- });
395
- ```
396
-
397
- ### Step 2: Implement
398
-
399
- ```js
400
- // src/commands/project/update-agents.js
401
- import { installAgents } from '../../utils/agents-installer.js';
402
- import { logger } from '../../utils/logger.js';
403
- import { join } from 'path';
404
- import { fileURLToPath } from 'url';
405
- import { dirname } from 'path';
406
-
407
- const __dirname = dirname(fileURLToPath(import.meta.url));
408
- const FRAMEWORK_DIR = join(__dirname, '..', '..', '..', 'framework');
409
-
410
- export async function updateAgentsCommand(args, options) {
411
- const projectDir = process.cwd();
412
- logger.info('Updating native subagents in .claude/agents/...');
413
- await installAgents(projectDir, FRAMEWORK_DIR);
414
- logger.success('Native subagents updated. Claude Code will discover them on next session start.');
415
- }
416
- ```
417
-
418
- ### Step 3: Register in `bin/morph-spec.js`
419
-
420
- Find the agents command group and add:
421
- ```js
422
- program
423
- .command('update-agents')
424
- .description('Refresh .claude/agents/ with latest morph orchestrator and domain agents')
425
- .action(updateAgentsCommand);
426
- ```
427
-
428
- ### Step 4: Run tests
429
-
430
- ```bash
431
- npm test -- test/commands/update-agents.test.js
432
- npm test
433
- ```
434
-
435
- ### Step 5: Commit
436
-
437
- ```bash
438
- git add src/commands/project/update-agents.js bin/morph-spec.js test/commands/update-agents.test.js
439
- git commit -m "feat(cli): add morph-spec update-agents command for refreshing native subagents"
440
- ```
441
-
442
- ---
443
-
444
- ## Task 6: Final integration test + docs update
445
-
446
- **Files:**
447
- - Test: `test/integration/init-full.test.js` (if it exists) or `test/commands/init.test.js`
448
- - Modify: `framework/CLAUDE.md` (note new .claude/CLAUDE.md)
449
- - Modify: `docs/plans/` (save plan here)
450
-
451
- ### Step 1: Run full test suite
452
-
453
- ```bash
454
- npm test
455
- ```
456
- Expected: All 552+ tests pass (0 regressions, new tests added).
457
-
458
- ### Step 2: Run coverage check
459
-
460
- ```bash
461
- npm run test:coverage:summary
462
- ```
463
- Verify new modules have reasonable coverage.
464
-
465
- ### Step 3: Manual smoke test
466
-
467
- ```bash
468
- node bin/morph-spec.js init --force --skip-mcp --skip-detection
469
- ls -la .claude/agents/
470
- ls -la .claude/CLAUDE.md
471
- cat .claude/settings.local.json | node -e "process.stdin.on('data',d=>{ const s=JSON.parse(d); console.log('schema:', s['\$schema']); console.log('env:', s.env); console.log('attribution:', s.attribution); })"
472
- ```
473
- Expected: 6+ agent `.md` files, CLAUDE.md present, settings has `$schema` + `env` + `attribution`.
474
-
475
- ### Step 4: Save plan to docs
476
-
477
- ```bash
478
- cp "C:\Users\Lucas\.claude\plans\magical-moseying-sutton.md" "docs/plans/2026-02-22-claude-settings.md"
479
- git add docs/plans/2026-02-22-claude-settings.md
480
- git commit -m "docs: save claude-settings alignment plan"
481
- ```
482
-
483
- ---
484
-
485
- ## Critical Files to Modify
486
-
487
- | File | Change |
488
- |------|--------|
489
- | `src/utils/agents-installer.js` | **NEW** — converts agents.json tier-1/2 to `.claude/agents/` markdown |
490
- | `src/utils/claude-settings-manager.js` | Re-export `installAgents` |
491
- | `src/commands/project/init.js` | Call `installAgents` + copy `.claude/CLAUDE.md` |
492
- | `src/utils/hooks-installer.js` | Add `$schema`, `env`, `attribution`, `plansDirectory` to settings |
493
- | `src/commands/project/update-agents.js` | **NEW** — CLI command to refresh agents |
494
- | `bin/morph-spec.js` | Register `update-agents` command |
495
- | `framework/CLAUDE_runtime.md` | **NEW** — source for `.claude/CLAUDE.md` |
496
-
497
- ## Verification
498
-
499
- ```bash
500
- # Full suite
501
- npm test
502
-
503
- # Smoke test init
504
- node bin/morph-spec.js init --force --skip-mcp --skip-detection
505
-
506
- # Verify native agents
507
- ls .claude/agents/
508
- cat .claude/agents/morph-standards-architect.md # Should have YAML frontmatter
509
-
510
- # Verify settings
511
- cat .claude/settings.local.json | grep -A2 "schema\|env\|attribution"
512
-
513
- # Verify .claude/CLAUDE.md
514
- cat .claude/CLAUDE.md
515
- ```