@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,295 +0,0 @@
1
- # Testing Standards
2
-
3
- > **Scope:** universal
4
- > **Layer:** 0 (always load)
5
- > **Keywords:** test, testing, unit, integration, xunit, nunit
6
- > **Load When:** always
7
-
8
- Test patterns and best practices for MORPH-SPEC projects
9
-
10
- ---
11
-
12
- ## Test Pyramid
13
-
14
- ```
15
- /\
16
- / \ E2E Tests (10%)
17
- /____\
18
- / \
19
- / Integration Tests (30%)
20
- /________________\
21
- / \
22
- / Unit Tests (60%) \
23
- /_______________________\
24
- ```
25
-
26
- ### Distribution
27
-
28
- - **Unit Tests (60%)**: Fast, isolated, test single units
29
- - **Integration Tests (30%)**: Test component interactions
30
- - **E2E Tests (10%)**: Full user workflows
31
-
32
- ---
33
-
34
- ## Naming Conventions
35
-
36
- ### Format
37
-
38
- ```
39
- MethodName_Scenario_ExpectedBehavior
40
- ```
41
-
42
- ### Examples
43
-
44
- ```csharp
45
- // .NET (xUnit)
46
- [Fact]
47
- public void Login_ValidCredentials_ReturnsAuthToken() { }
48
-
49
- [Fact]
50
- public void Login_InvalidPassword_ThrowsUnauthorizedException() { }
51
-
52
- [Theory]
53
- [InlineData("user@example.com", "password123")]
54
- public void Register_ValidInput_CreatesUser(string email, string password) { }
55
- ```
56
-
57
- ```typescript
58
- // JavaScript (Jest/Vitest)
59
- describe('UserService', () => {
60
- it('should return auth token for valid credentials', () => {})
61
-
62
- it('should throw error for invalid password', () => {})
63
-
64
- it.each([
65
- ['user@example.com', 'password123'],
66
- ['admin@test.com', 'admin456']
67
- ])('should create user for %s', (email, password) => {})
68
- })
69
- ```
70
-
71
- ---
72
-
73
- ## Unit Testing Best Practices
74
-
75
- ### Arrange-Act-Assert (AAA)
76
-
77
- ```csharp
78
- [Fact]
79
- public void CalculateTotal_WithDiscount_AppliesCorrectPercentage()
80
- {
81
- // Arrange
82
- var cart = new ShoppingCart();
83
- cart.AddItem(new Item { Price = 100 });
84
- var discountService = new DiscountService();
85
-
86
- // Act
87
- var total = discountService.CalculateTotal(cart, discountPercent: 10);
88
-
89
- // Assert
90
- Assert.Equal(90, total);
91
- }
92
- ```
93
-
94
- ### Mocking Dependencies
95
-
96
- ```csharp
97
- [Fact]
98
- public async Task GetUser_ValidId_ReturnsUser()
99
- {
100
- // Arrange
101
- var mockRepo = new Mock<IUserRepository>();
102
- mockRepo.Setup(r => r.GetByIdAsync(1))
103
- .ReturnsAsync(new User { Id = 1, Name = "John" });
104
-
105
- var service = new UserService(mockRepo.Object);
106
-
107
- // Act
108
- var user = await service.GetUserAsync(1);
109
-
110
- // Assert
111
- Assert.NotNull(user);
112
- Assert.Equal("John", user.Name);
113
- }
114
- ```
115
-
116
- ---
117
-
118
- ## Integration Testing
119
-
120
- ### Database Tests
121
-
122
- ```csharp
123
- public class UserRepositoryTests : IClassFixture<DatabaseFixture>
124
- {
125
- private readonly AppDbContext _context;
126
-
127
- public UserRepositoryTests(DatabaseFixture fixture)
128
- {
129
- _context = fixture.CreateContext();
130
- }
131
-
132
- [Fact]
133
- public async Task CreateUser_ValidData_SavesToDatabase()
134
- {
135
- // Arrange
136
- var repo = new UserRepository(_context);
137
- var user = new User { Email = "test@example.com" };
138
-
139
- // Act
140
- await repo.CreateAsync(user);
141
- await _context.SaveChangesAsync();
142
-
143
- // Assert
144
- var saved = await _context.Users.FirstOrDefaultAsync(u => u.Email == "test@example.com");
145
- Assert.NotNull(saved);
146
- }
147
- }
148
- ```
149
-
150
- ### API Tests
151
-
152
- ```csharp
153
- public class AuthControllerTests : IClassFixture<WebApplicationFactory<Program>>
154
- {
155
- private readonly HttpClient _client;
156
-
157
- public AuthControllerTests(WebApplicationFactory<Program> factory)
158
- {
159
- _client = factory.CreateClient();
160
- }
161
-
162
- [Fact]
163
- public async Task Login_ValidCredentials_Returns200AndToken()
164
- {
165
- // Arrange
166
- var request = new LoginRequest { Email = "user@test.com", Password = "password" };
167
-
168
- // Act
169
- var response = await _client.PostAsJsonAsync("/api/auth/login", request);
170
-
171
- // Assert
172
- response.EnsureSuccessStatusCode();
173
- var result = await response.Content.ReadFromJsonAsync<AuthResponse>();
174
- Assert.NotNull(result?.Token);
175
- }
176
- }
177
- ```
178
-
179
- ---
180
-
181
- ## E2E Testing
182
-
183
- ### Playwright Example
184
-
185
- ```typescript
186
- import { test, expect } from '@playwright/test';
187
-
188
- test('user can login and access dashboard', async ({ page }) => {
189
- // Navigate to login
190
- await page.goto('/login');
191
-
192
- // Fill credentials
193
- await page.fill('input[name="email"]', 'user@example.com');
194
- await page.fill('input[name="password"]', 'password123');
195
-
196
- // Submit
197
- await page.click('button[type="submit"]');
198
-
199
- // Verify redirect to dashboard
200
- await expect(page).toHaveURL('/dashboard');
201
- await expect(page.locator('h1')).toContainText('Dashboard');
202
- });
203
- ```
204
-
205
- ---
206
-
207
- ## Test Coverage
208
-
209
- ### Targets
210
-
211
- - **Statements**: ≥ 80%
212
- - **Branches**: ≥ 70%
213
- - **Functions**: ≥ 80%
214
- - **Lines**: ≥ 80%
215
-
216
- ### Running Coverage
217
-
218
- ```bash
219
- # .NET
220
- dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=opencover
221
-
222
- # JavaScript
223
- npm run test:coverage
224
- ```
225
-
226
- ---
227
-
228
- ## Best Practices
229
-
230
- ### DO
231
-
232
- ✅ Write tests before or with code (TDD)
233
- ✅ Test edge cases (null, empty, invalid input)
234
- ✅ Use descriptive test names
235
- ✅ Keep tests fast (< 1s per unit test)
236
- ✅ Mock external dependencies
237
- ✅ Test one thing per test
238
-
239
- ### DON'T
240
-
241
- ❌ Test implementation details (test behavior)
242
- ❌ Rely on test execution order
243
- ❌ Use real databases in unit tests
244
- ❌ Hardcode magic values (use constants)
245
- ❌ Skip tests (fix or remove)
246
- ❌ Write tests that depend on external services
247
-
248
- ---
249
-
250
- ## Test Fixtures and Cleanup
251
-
252
- ### xUnit
253
-
254
- ```csharp
255
- public class DatabaseFixture : IDisposable
256
- {
257
- public AppDbContext CreateContext()
258
- {
259
- var options = new DbContextOptionsBuilder<AppDbContext>()
260
- .UseInMemoryDatabase($"TestDb_{Guid.NewGuid()}")
261
- .Options;
262
-
263
- return new AppDbContext(options);
264
- }
265
-
266
- public void Dispose()
267
- {
268
- // Cleanup
269
- }
270
- }
271
- ```
272
-
273
- ### Jest
274
-
275
- ```typescript
276
- beforeEach(() => {
277
- // Setup before each test
278
- });
279
-
280
- afterEach(() => {
281
- // Cleanup after each test
282
- });
283
-
284
- beforeAll(() => {
285
- // Setup once before all tests
286
- });
287
-
288
- afterAll(() => {
289
- // Cleanup once after all tests
290
- });
291
- ```
292
-
293
- ---
294
-
295
- *MORPH-SPEC by Polymorphism Tech*
@@ -1,102 +0,0 @@
1
- # Data Standard: Azure Blob Storage
2
-
3
- ## Overview
4
- Object storage for files, images, documents, and large binary data.
5
-
6
- ## Setup
7
- ```xml
8
- <PackageReference Include="Azure.Storage.Blobs" Version="12.*" />
9
- ```
10
-
11
- ```csharp
12
- // Program.cs
13
- builder.Services.AddSingleton(new BlobServiceClient(
14
- new Uri(config["Storage:AccountUrl"]),
15
- new DefaultAzureCredential())); // Managed Identity — no connection string
16
- ```
17
-
18
- ## Service Pattern
19
- ```csharp
20
- public class BlobStorageService : IFileStorageService
21
- {
22
- private readonly BlobContainerClient _container;
23
-
24
- public BlobStorageService(BlobServiceClient client, IConfiguration config)
25
- {
26
- _container = client.GetBlobContainerClient(config["Storage:ContainerName"]);
27
- }
28
-
29
- public async Task<string> UploadAsync(Stream content, string fileName, string contentType)
30
- {
31
- var blobName = $"{DateTime.UtcNow:yyyy/MM/dd}/{Guid.NewGuid()}/{fileName}";
32
- var blob = _container.GetBlobClient(blobName);
33
-
34
- await blob.UploadAsync(content, new BlobHttpHeaders { ContentType = contentType });
35
- return blobName; // Return blob path, not URL
36
- }
37
-
38
- public async Task<Stream> DownloadAsync(string blobName)
39
- {
40
- var blob = _container.GetBlobClient(blobName);
41
- var response = await blob.DownloadAsync();
42
- return response.Value.Content;
43
- }
44
-
45
- public async Task DeleteAsync(string blobName)
46
- {
47
- var blob = _container.GetBlobClient(blobName);
48
- await blob.DeleteIfExistsAsync();
49
- }
50
-
51
- public Uri GenerateSasUrl(string blobName, TimeSpan expiry)
52
- {
53
- var blob = _container.GetBlobClient(blobName);
54
- return blob.GenerateSasUri(BlobSasPermissions.Read, DateTimeOffset.UtcNow.Add(expiry));
55
- }
56
- }
57
- ```
58
-
59
- ## Security Requirements
60
-
61
- ### Always Use Managed Identity
62
- ```csharp
63
- // ✅ Managed Identity — no secrets
64
- new BlobServiceClient(storageUri, new DefaultAzureCredential())
65
-
66
- // ❌ Connection string — avoid
67
- new BlobServiceClient(connectionString)
68
- ```
69
-
70
- ### SAS Tokens for Client Access
71
- ```csharp
72
- // Generate short-lived SAS for client-side uploads
73
- var sasUri = blob.GenerateSasUri(BlobSasPermissions.Write, DateTimeOffset.UtcNow.AddMinutes(15));
74
- // Send SAS URL to client — they upload directly
75
- ```
76
-
77
- ### Container Access Levels
78
- - `Private`: No public access (default for user documents)
79
- - `Blob`: Public read for specific blobs (CDN-served images)
80
- - `Container`: Public read for all blobs (avoid in most cases)
81
-
82
- ## Content Types + Validation
83
- ```csharp
84
- private static readonly HashSet<string> AllowedTypes = ["image/jpeg", "image/png", "application/pdf"];
85
- private const long MaxFileSizeBytes = 10 * 1024 * 1024; // 10 MB
86
-
87
- public async Task<string> UploadValidatedAsync(IFormFile file)
88
- {
89
- if (!AllowedTypes.Contains(file.ContentType))
90
- throw new ValidationException($"File type {file.ContentType} not allowed");
91
- if (file.Length > MaxFileSizeBytes)
92
- throw new ValidationException("File exceeds 10 MB limit");
93
-
94
- return await UploadAsync(file.OpenReadStream(), file.FileName, file.ContentType);
95
- }
96
- ```
97
-
98
- ## Blob Lifecycle (Cost Management)
99
- - Move to Cool tier after 30 days
100
- - Move to Archive tier after 90 days
101
- - Delete after 365 days (unless legal hold)
102
- - Configure via Storage Account Lifecycle Management rules (Bicep)
@@ -1,97 +0,0 @@
1
- # Data Standard: Redis Cache (Azure Cache for Redis)
2
-
3
- ## Overview
4
- Distributed cache for session data, rate limiting, and frequently-read data.
5
-
6
- ## Setup
7
- ```xml
8
- <PackageReference Include="StackExchange.Redis" Version="2.*" />
9
- <PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="9.*" />
10
- ```
11
-
12
- ```csharp
13
- // Program.cs
14
- builder.Services.AddStackExchangeRedisCache(opts =>
15
- {
16
- opts.Configuration = config["Redis:ConnectionString"]; // from Key Vault
17
- opts.InstanceName = "myapp:"; // Prefix to avoid key collisions
18
- });
19
- ```
20
-
21
- ## Cache-Aside Pattern
22
- ```csharp
23
- public class CachedProductService : IProductService
24
- {
25
- private readonly IDistributedCache _cache;
26
- private readonly IProductRepository _repository;
27
-
28
- public async Task<Product?> GetAsync(Guid id, CancellationToken ct = default)
29
- {
30
- var cacheKey = $"product:{id}";
31
-
32
- // Try cache first
33
- var cached = await _cache.GetStringAsync(cacheKey, ct);
34
- if (cached != null)
35
- return JsonSerializer.Deserialize<Product>(cached);
36
-
37
- // Cache miss → read from DB
38
- var product = await _repository.GetAsync(id, ct);
39
- if (product == null) return null;
40
-
41
- // Cache with TTL
42
- await _cache.SetStringAsync(cacheKey,
43
- JsonSerializer.Serialize(product),
44
- new DistributedCacheEntryOptions
45
- {
46
- AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(15),
47
- SlidingExpiration = TimeSpan.FromMinutes(5)
48
- }, ct);
49
-
50
- return product;
51
- }
52
-
53
- public async Task InvalidateAsync(Guid id, CancellationToken ct = default)
54
- => await _cache.RemoveAsync($"product:{id}", ct);
55
- }
56
- ```
57
-
58
- ## TTL Strategy
59
- | Data Type | TTL | Rationale |
60
- |-----------|-----|-----------|
61
- | User session | 30 min sliding | Active session window |
62
- | Product catalog | 15 min absolute | Inventory changes |
63
- | Rate limit counters | 1 min | Per-minute limiting |
64
- | Computed aggregates | 1 hour | Expensive query results |
65
- | Reference data | 24 hours | Config rarely changes |
66
-
67
- ## Key Naming Convention
68
- ```
69
- {service}:{entity}:{id}
70
- {service}:{entity}:list:{filter}
71
- {service}:ratelimit:{userId}:{endpoint}
72
-
73
- Examples:
74
- product:detail:550e8400-e29b-41d4-a716
75
- product:list:category:electronics
76
- auth:ratelimit:user123:login
77
- ```
78
-
79
- ## Rate Limiting Pattern
80
- ```csharp
81
- public async Task<bool> IsRateLimitedAsync(string userId, string action, int maxPerMinute)
82
- {
83
- var key = $"ratelimit:{action}:{userId}:{DateTime.UtcNow:yyyyMMddHHmm}";
84
- var db = _redis.GetDatabase();
85
-
86
- var count = await db.StringIncrementAsync(key);
87
- if (count == 1) await db.KeyExpireAsync(key, TimeSpan.FromMinutes(1));
88
-
89
- return count > maxPerMinute;
90
- }
91
- ```
92
-
93
- ## Anti-Patterns
94
- - Never cache sensitive data (passwords, tokens, PII) without encryption
95
- - Never use Redis as primary store — it's a cache, not a database
96
- - Never omit TTL — unbounded keys fill memory
97
- - Never catch RedisException silently — degrade gracefully to DB
@@ -1,118 +0,0 @@
1
- # Data Standard: Azure Cosmos DB
2
-
3
- ## Overview
4
- NoSQL document database — use for high-throughput, globally distributed, or schema-flexible data.
5
-
6
- ## When to Use Cosmos DB
7
- ✅ Event store (append-only, high write throughput)
8
- ✅ User activity/session data (variable schema)
9
- ✅ Multi-region writes required
10
- ✅ JSON documents with flexible schema
11
- ❌ Relational data with complex joins (use Azure SQL)
12
- ❌ Small datasets (cost inefficient)
13
-
14
- ## Container Design
15
- ```json
16
- {
17
- "partitionKey": "/tenantId",
18
- "indexingPolicy": {
19
- "includedPaths": [{ "path": "/*" }],
20
- "excludedPaths": [
21
- { "path": "/largePayload/*" },
22
- { "path": "/_etag/?" }
23
- ]
24
- }
25
- }
26
- ```
27
-
28
- ### Partition Key Strategy
29
- - High cardinality: userId, tenantId, orderId
30
- - Even distribution: avoid hot partitions (e.g., /status = "active" for 90% of docs)
31
- - Query alignment: partition key should appear in most queries
32
-
33
- ## SDK Setup
34
- ```csharp
35
- // Program.cs
36
- builder.Services.AddSingleton(sp =>
37
- new CosmosClient(
38
- config["CosmosDb:ConnectionString"],
39
- new CosmosClientOptions
40
- {
41
- SerializerOptions = new CosmosSerializationOptions
42
- {
43
- PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase
44
- },
45
- ApplicationName = "MyApp"
46
- }));
47
-
48
- builder.Services.AddSingleton<ICosmosRepository<Order>>(sp =>
49
- new CosmosRepository<Order>(
50
- sp.GetRequiredService<CosmosClient>(),
51
- config["CosmosDb:DatabaseId"],
52
- "orders"));
53
- ```
54
-
55
- ## Repository Pattern
56
- ```csharp
57
- public class CosmosRepository<T> where T : CosmosDocument
58
- {
59
- private readonly Container _container;
60
-
61
- public async Task<T?> GetAsync(string id, string partitionKey)
62
- {
63
- try
64
- {
65
- var response = await _container.ReadItemAsync<T>(id, new PartitionKey(partitionKey));
66
- return response.Resource;
67
- }
68
- catch (CosmosException ex) when (ex.StatusCode == HttpStatusCode.NotFound)
69
- {
70
- return null;
71
- }
72
- }
73
-
74
- public async Task<IReadOnlyList<T>> QueryAsync(string sql, Dictionary<string, object>? parameters = null)
75
- {
76
- var query = new QueryDefinition(sql);
77
- if (parameters != null)
78
- foreach (var (k, v) in parameters) query = query.WithParameter(k, v);
79
-
80
- var results = new List<T>();
81
- using var feed = _container.GetItemQueryIterator<T>(query);
82
- while (feed.HasMoreResults)
83
- {
84
- var page = await feed.ReadNextAsync();
85
- results.AddRange(page);
86
- }
87
- return results;
88
- }
89
-
90
- public async Task UpsertAsync(T document)
91
- => await _container.UpsertItemAsync(document, new PartitionKey(document.PartitionKey));
92
- }
93
- ```
94
-
95
- ## Document Base Class
96
- ```csharp
97
- public abstract class CosmosDocument
98
- {
99
- [JsonPropertyName("id")]
100
- public string Id { get; set; } = Guid.NewGuid().ToString();
101
-
102
- [JsonPropertyName("_partitionKey")]
103
- public abstract string PartitionKey { get; }
104
-
105
- [JsonPropertyName("type")]
106
- public string Type => GetType().Name;
107
-
108
- [JsonPropertyName("createdAt")]
109
- public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
110
- }
111
- ```
112
-
113
- ## Cost Optimization
114
- - Enable TTL on transient data (session, temp tokens)
115
- - Use serverless mode for dev/test environments
116
- - Index only queried paths (exclude large blobs)
117
- - Batch operations with TransactionalBatch for same partition
118
- - Use bulk execution for large imports