@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,101 +0,0 @@
1
- # Integration Standard: CQRS with MediatR
2
-
3
- ## Overview
4
- Commands mutate state. Queries read state. Never mix them.
5
-
6
- ## Setup
7
- ```xml
8
- <PackageReference Include="MediatR" Version="12.*" />
9
- <PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="11.*" />
10
- ```
11
-
12
- ```csharp
13
- // Program.cs
14
- builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(Program).Assembly));
15
- ```
16
-
17
- ## Command Pattern
18
- ```csharp
19
- // Command (mutates state, returns result)
20
- public record CreateOrderCommand(Guid UserId, List<OrderItem> Items)
21
- : IRequest<CreateOrderResult>;
22
-
23
- public record CreateOrderResult(Guid OrderId, decimal Total);
24
-
25
- // Handler
26
- public class CreateOrderHandler : IRequestHandler<CreateOrderCommand, CreateOrderResult>
27
- {
28
- public async Task<CreateOrderResult> Handle(CreateOrderCommand cmd, CancellationToken ct)
29
- {
30
- var order = Order.Create(cmd.UserId, cmd.Items);
31
- await _repository.AddAsync(order, ct);
32
- await _unitOfWork.SaveChangesAsync(ct);
33
-
34
- // Publish domain event
35
- await _publisher.Publish(new OrderCreatedEvent(order.Id), ct);
36
-
37
- return new CreateOrderResult(order.Id, order.Total);
38
- }
39
- }
40
- ```
41
-
42
- ## Query Pattern
43
- ```csharp
44
- // Query (reads only, no side effects)
45
- public record GetOrderQuery(Guid OrderId) : IRequest<OrderDto?>;
46
-
47
- // Handler — use read model, not domain entity
48
- public class GetOrderHandler : IRequestHandler<GetOrderQuery, OrderDto?>
49
- {
50
- public async Task<OrderDto?> Handle(GetOrderQuery query, CancellationToken ct)
51
- {
52
- return await _context.Orders
53
- .Where(o => o.Id == query.OrderId)
54
- .Select(o => new OrderDto(o.Id, o.Status, o.Total))
55
- .FirstOrDefaultAsync(ct);
56
- }
57
- }
58
- ```
59
-
60
- ## Pipeline Behaviors (Cross-Cutting)
61
- ```csharp
62
- // Validation behavior
63
- public class ValidationBehavior<TRequest, TResponse>
64
- : IPipelineBehavior<TRequest, TResponse>
65
- where TRequest : IRequest<TResponse>
66
- {
67
- public async Task<TResponse> Handle(TRequest request,
68
- RequestHandlerDelegate<TResponse> next, CancellationToken ct)
69
- {
70
- var failures = _validators
71
- .SelectMany(v => v.Validate(request).Errors)
72
- .Where(f => f != null)
73
- .ToList();
74
-
75
- if (failures.Any())
76
- throw new ValidationException(failures);
77
-
78
- return await next();
79
- }
80
- }
81
- ```
82
-
83
- ## DI Registration Order
84
- ```csharp
85
- // 1. MediatR (includes handler scanning)
86
- builder.Services.AddMediatR(cfg =>
87
- {
88
- cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly());
89
- cfg.AddBehavior(typeof(IPipelineBehavior<,>), typeof(ValidationBehavior<,>));
90
- cfg.AddBehavior(typeof(IPipelineBehavior<,>), typeof(PerformanceBehavior<,>));
91
- cfg.AddBehavior(typeof(IPipelineBehavior<,>), typeof(LoggingBehavior<,>));
92
- });
93
- // 2. FluentValidation
94
- builder.Services.AddValidatorsFromAssembly(Assembly.GetExecutingAssembly());
95
- ```
96
-
97
- ## Rules
98
- - Commands return results, not void (enables error handling)
99
- - Queries use DTOs, never expose domain entities
100
- - Never call command handlers from query handlers
101
- - One handler per Command/Query (no inheritance hierarchies)
@@ -1,124 +0,0 @@
1
- # Integration Standard: Event Sourcing
2
-
3
- ## Overview
4
- State is derived from a sequence of immutable events. Use only when audit trail or temporal queries are required.
5
-
6
- ## When to Use
7
- ✅ Financial transactions (audit required by law)
8
- ✅ Order lifecycle (multiple state transitions, replay needed)
9
- ✅ Inventory changes (why did stock go negative?)
10
- ❌ User profiles (too much churn, GDPR deletion complexity)
11
- ❌ Session/cache state (ephemeral, no audit need)
12
-
13
- ## Event Design
14
- ```csharp
15
- // Base event
16
- public abstract record DomainEvent
17
- {
18
- public Guid EventId { get; init; } = Guid.NewGuid();
19
- public DateTime OccurredAt { get; init; } = DateTime.UtcNow;
20
- public int Version { get; init; }
21
- public string EventType => GetType().Name;
22
- }
23
-
24
- // Specific events — past tense, immutable
25
- public record OrderPlaced(Guid OrderId, Guid UserId, decimal Total, List<OrderItem> Items)
26
- : DomainEvent;
27
-
28
- public record OrderShipped(Guid OrderId, string TrackingNumber, DateTime ShippedAt)
29
- : DomainEvent;
30
-
31
- public record OrderCancelled(Guid OrderId, string Reason)
32
- : DomainEvent;
33
- ```
34
-
35
- ## Aggregate with Event Sourcing
36
- ```csharp
37
- public class Order : AggregateRoot
38
- {
39
- public OrderStatus Status { get; private set; }
40
- public decimal Total { get; private set; }
41
-
42
- // Reconstruct from events
43
- public static Order Replay(IEnumerable<DomainEvent> events)
44
- {
45
- var order = new Order();
46
- foreach (var e in events) order.Apply(e);
47
- return order;
48
- }
49
-
50
- // Command → validate → raise event
51
- public void Ship(string trackingNumber)
52
- {
53
- if (Status != OrderStatus.Confirmed)
54
- throw new InvalidOperationException($"Cannot ship order in {Status} status");
55
-
56
- RaiseEvent(new OrderShipped(Id, trackingNumber, DateTime.UtcNow));
57
- }
58
-
59
- // State transition from event (idempotent)
60
- protected override void Apply(DomainEvent @event)
61
- {
62
- switch (@event)
63
- {
64
- case OrderPlaced e:
65
- Id = e.OrderId;
66
- Total = e.Total;
67
- Status = OrderStatus.Pending;
68
- break;
69
-
70
- case OrderShipped e:
71
- Status = OrderStatus.Shipped;
72
- break;
73
-
74
- case OrderCancelled:
75
- Status = OrderStatus.Cancelled;
76
- break;
77
- }
78
- }
79
- }
80
- ```
81
-
82
- ## Event Store (Azure Cosmos DB pattern)
83
- ```csharp
84
- public class CosmosEventStore : IEventStore
85
- {
86
- public async Task AppendAsync(Guid streamId, IEnumerable<DomainEvent> events, int expectedVersion)
87
- {
88
- foreach (var (evt, i) in events.Select((e, i) => (e, i)))
89
- {
90
- var document = new EventDocument
91
- {
92
- Id = $"{streamId}:{expectedVersion + i + 1}",
93
- StreamId = streamId.ToString(),
94
- Version = expectedVersion + i + 1,
95
- EventType = evt.EventType,
96
- Data = JsonSerializer.Serialize(evt, evt.GetType()),
97
- OccurredAt = evt.OccurredAt
98
- };
99
- await _container.CreateItemAsync(document, new PartitionKey(streamId.ToString()));
100
- }
101
- }
102
- }
103
- ```
104
-
105
- ## Projections (Read Models)
106
- ```csharp
107
- // Project events to read-optimized views
108
- public class OrderSummaryProjection
109
- {
110
- public void Handle(OrderPlaced e, AppDbContext ctx)
111
- => ctx.OrderSummaries.Add(new OrderSummary { Id = e.OrderId, Total = e.Total, Status = "Pending" });
112
-
113
- public void Handle(OrderShipped e, AppDbContext ctx)
114
- => ctx.OrderSummaries.Where(s => s.Id == e.OrderId).ExecuteUpdate(s => s.SetProperty(p => p.Status, "Shipped"));
115
- }
116
- ```
117
-
118
- ## Trade-offs
119
- | Pro | Con |
120
- |-----|-----|
121
- | Complete audit trail | Schema evolution complexity |
122
- | Temporal queries (state at time T) | Higher storage cost |
123
- | Event replay for debugging | Eventual consistency for read models |
124
- | Natural integration events | GDPR deletion requires event masking |
@@ -1,95 +0,0 @@
1
- # Integration Standard: Azure Service Bus
2
-
3
- ## Patterns
4
-
5
- ### Queue vs Topic
6
- - **Queue**: Point-to-point, one consumer per message. Use for jobs, commands.
7
- - **Topic + Subscription**: Fan-out, multiple consumers. Use for domain events.
8
-
9
- ### Sender Pattern
10
- ```csharp
11
- public class ServiceBusSender<T>
12
- {
13
- private readonly ServiceBusSender _sender;
14
-
15
- public async Task SendAsync(T message, CancellationToken ct = default)
16
- {
17
- var json = JsonSerializer.Serialize(message);
18
- var serviceBusMessage = new ServiceBusMessage(json)
19
- {
20
- ContentType = "application/json",
21
- MessageId = Guid.NewGuid().ToString(),
22
- Subject = typeof(T).Name // For filtering
23
- };
24
- await _sender.SendMessageAsync(serviceBusMessage, ct);
25
- }
26
- }
27
- ```
28
-
29
- ### Receiver Pattern (with IHostedService)
30
- ```csharp
31
- public class OrderProcessor : IHostedService
32
- {
33
- private ServiceBusProcessor _processor;
34
-
35
- public async Task StartAsync(CancellationToken ct)
36
- {
37
- _processor.ProcessMessageAsync += HandleMessageAsync;
38
- _processor.ProcessErrorAsync += HandleErrorAsync;
39
- await _processor.StartProcessingAsync(ct);
40
- }
41
-
42
- private async Task HandleMessageAsync(ProcessMessageEventArgs args)
43
- {
44
- var order = JsonSerializer.Deserialize<OrderCreatedEvent>(args.Message.Body);
45
- await _orderService.ProcessAsync(order!);
46
- await args.CompleteMessageAsync(args.Message);
47
- }
48
-
49
- private Task HandleErrorAsync(ProcessErrorEventArgs args)
50
- {
51
- _logger.LogError(args.Exception, "Service Bus error on {EntityPath}", args.EntityPath);
52
- return Task.CompletedTask; // Abandon → retry → dead-letter
53
- }
54
- }
55
- ```
56
-
57
- ### Dead-Letter Processing
58
- ```csharp
59
- // Check dead-letter queue periodically
60
- var client = new ServiceBusClient(connectionString);
61
- var receiver = client.CreateReceiver(queueName, new ServiceBusReceiverOptions
62
- {
63
- SubQueue = SubQueue.DeadLetter
64
- });
65
-
66
- await foreach (var msg in receiver.ReceiveMessagesAsync())
67
- {
68
- _logger.LogError("Dead-lettered: {Reason} | Body: {Body}",
69
- msg.DeadLetterReason, msg.Body.ToString());
70
- await receiver.CompleteMessageAsync(msg);
71
- }
72
- ```
73
-
74
- ## Retry Policy
75
- - MaxDeliveryCount: 5 (queue setting)
76
- - Lock duration: 5 minutes (for long-processing messages)
77
- - Dead-letter after MaxDeliveryCount exceeded
78
-
79
- ## Required Settings
80
- ```json
81
- {
82
- "ServiceBus": {
83
- "ConnectionString": "from-key-vault",
84
- "QueueName": "feature-name-queue",
85
- "MaxConcurrentCalls": 4,
86
- "PrefetchCount": 10
87
- }
88
- }
89
- ```
90
-
91
- ## Anti-Patterns
92
- - Never use connection string in code — always Key Vault
93
- - Never process in `HandleErrorAsync` — only log
94
- - Never use topics for commands (use queues)
95
- - Never use synchronous sends in Blazor components
@@ -1,384 +0,0 @@
1
- # Integration Standard: MCP Tools in MORPH Workflows
2
-
3
- > Reference for using Model Context Protocol (MCP) tools across morph-spec phases. Each phase benefits from different MCPs depending on what data is needed.
4
-
5
- ## MCP Availability Detection
6
-
7
- Before using any MCP tool, check if it's available in the current session:
8
-
9
- ```javascript
10
- // Pattern: Attempt the call — if the tool doesn't exist, Claude Code will report it
11
- // There is no "list MCPs" command; just try the most common operation
12
-
13
- // Supabase MCP
14
- await mcp__supabase__list_tables();
15
-
16
- // GitHub MCP
17
- await mcp__github__get_repo();
18
-
19
- // Context7 (library docs)
20
- await mcp__context7__resolve_library_id({ libraryName: "react" });
21
-
22
- // Playwright (browser automation)
23
- await mcp__playwright__browser_navigate({ url: "https://example.com" });
24
- ```
25
-
26
- **Fallback rule:** If an MCP is not available, every phase has a manual alternative using Claude Code native tools (Read, Grep, Glob, Bash).
27
-
28
- ---
29
-
30
- ## MCP Providers by Phase
31
-
32
- ### Phase 1 (Setup) — Project Discovery
33
-
34
- | MCP | Use Case | Example |
35
- |-----|----------|---------|
36
- | **GitHub** | Repo info, recent PRs, issues | `mcp__github__get_repo()` |
37
- | **Filesystem** | Scan project structure | Native Glob/Read preferred |
38
-
39
- ```javascript
40
- // Detect project type from repo metadata
41
- const repo = await mcp__github__get_repo();
42
- // → language, default_branch, topics
43
-
44
- // Fallback: use Glob to detect stack
45
- // Glob: "**/{package.json,*.csproj,*.sln,go.mod,Cargo.toml}"
46
- ```
47
-
48
- ### Phase 1.5 (UI/UX) — Design References
49
-
50
- | MCP | Use Case | Example |
51
- |-----|----------|---------|
52
- | **Figma** | Extract design tokens, components | `mcp__figma__get_file({ fileKey })` |
53
- | **Playwright** | Navigate, screenshot, inspect live pages | `mcp__playwright__browser_navigate({ url })` |
54
- | **Context7** | Component library documentation | `mcp__context7__query_docs({ libraryId, query })` |
55
-
56
- ```javascript
57
- // Get design tokens from Figma
58
- const file = await mcp__figma__get_file({ fileKey: "abc123" });
59
- // → colors, typography, spacing from design file
60
-
61
- // Screenshot existing app for design reference
62
- await mcp__playwright__browser_navigate({ url: "https://app.example.com/dashboard" });
63
- const screenshot = await mcp__playwright__browser_take_screenshot();
64
- // → Visual reference for UI/UX design
65
-
66
- // Inspect page structure via accessibility tree
67
- const snapshot = await mcp__playwright__browser_snapshot();
68
- // → Structured element tree (headings, buttons, inputs, etc.)
69
-
70
- // Test responsive layout
71
- await mcp__playwright__browser_resize({ width: 375, height: 812 });
72
- const mobileScreenshot = await mcp__playwright__browser_take_screenshot();
73
-
74
- // Get MudBlazor component docs for UI specs
75
- const libId = await mcp__context7__resolve_library_id({
76
- libraryName: "mudblazor",
77
- query: "data grid with sorting and filtering"
78
- });
79
- const docs = await mcp__context7__query_docs({
80
- libraryId: libId,
81
- query: "DataGrid component props and events"
82
- });
83
-
84
- // Fallback: WebSearch for component documentation
85
- // WebFetch for specific component API pages
86
- ```
87
-
88
- ### Phase 2 (Design) — Schema & Architecture
89
-
90
- | MCP | Use Case | Example |
91
- |-----|----------|---------|
92
- | **Supabase** | Database schema, tables, relationships, RLS | `mcp__supabase__get_table_schema({ table })` |
93
- | **Database MCPs** | PostgreSQL, MySQL, SQL Server schema | Provider-specific tools |
94
- | **Context7** | Library docs for architecture decisions | `mcp__context7__query_docs()` |
95
- | **GitHub** | Check existing code patterns, PRs | `mcp__github__search_code()` |
96
-
97
- ```javascript
98
- // === SCHEMA ANALYSIS (Critical for contracts.cs) ===
99
-
100
- // 1. List all tables
101
- const tables = await mcp__supabase__list_tables();
102
-
103
- // 2. Get schema for each relevant table
104
- const schema = await mcp__supabase__get_table_schema({ table: 'leads' });
105
- // → column_name, data_type, is_nullable, column_default
106
-
107
- // 3. Get foreign key relationships
108
- const rels = await mcp__supabase__get_relationships({ table: 'leads' });
109
- // → foreign_table, foreign_column, constraint_type
110
-
111
- // 4. Run custom query for complex schema info
112
- const result = await mcp__supabase__query({
113
- query: `SELECT column_name, data_type, is_nullable
114
- FROM information_schema.columns
115
- WHERE table_name = 'leads'
116
- ORDER BY ordinal_position`
117
- });
118
-
119
- // 5. Check RLS policies (security-critical)
120
- const policies = await mcp__supabase__query({
121
- query: `SELECT tablename, policyname, cmd, qual
122
- FROM pg_policies
123
- WHERE tablename = 'leads'`
124
- });
125
- ```
126
-
127
- **Fallback (no Supabase MCP):**
128
- ```
129
- 1. Grep: "\.from\(|\.select\(|SELECT |supabase\.|DbSet<" → find query files
130
- 2. Read each query file → extract table/column names
131
- 3. Glob: "src/**/types/**/*.ts" or "**/Entities/**/*.cs" → find type definitions
132
- 4. Read type files → map properties to database columns
133
- ```
134
-
135
- ### Phase 3 (Clarify) — Validation & Research
136
-
137
- | MCP | Use Case | Example |
138
- |-----|----------|---------|
139
- | **Context7** | Verify library capabilities, API limits | `mcp__context7__query_docs()` |
140
- | **GitHub** | Check issue discussions, known limitations | `mcp__github__search_issues()` |
141
-
142
- ```javascript
143
- // Verify if library supports a required feature
144
- const docs = await mcp__context7__query_docs({
145
- libraryId: "/mudblazor/mudblazor",
146
- query: "DataGrid server-side pagination with virtual scrolling"
147
- });
148
- // → Confirms capability or identifies limitation for spec update
149
-
150
- // Fallback: WebSearch for library capabilities
151
- ```
152
-
153
- ### Phase 4 (Tasks) — Planning & Organization
154
-
155
- | MCP | Use Case | Example |
156
- |-----|----------|---------|
157
- | **GitHub** | Create issues from tasks, link to milestone | `mcp__github__create_issue()` |
158
- | **Context7** | Estimate complexity based on library docs | `mcp__context7__query_docs()` |
159
-
160
- ```javascript
161
- // Create GitHub issues from tasks.json (if team uses GitHub Projects)
162
- for (const task of tasks) {
163
- await mcp__github__create_issue({
164
- title: task.title,
165
- body: task.description,
166
- labels: [task.category],
167
- milestone: featureMilestone
168
- });
169
- }
170
-
171
- // Fallback: Bash with gh CLI
172
- // gh issue create --title "T001: Create Entity Lead" --label "domain"
173
- ```
174
-
175
- ### Phase 5 (Implement) — Build & Deploy
176
-
177
- | MCP | Use Case | Example |
178
- |-----|----------|---------|
179
- | **Supabase** | Run migrations, create RLS policies | `mcp__supabase__query()` |
180
- | **GitHub** | Create PR, push branches | `mcp__github__create_pull_request()` |
181
- | **Context7** | Look up API usage during coding | `mcp__context7__query_docs()` |
182
- | **Playwright** | Smoke test deployed features, verify UI | `mcp__playwright__browser_navigate()` |
183
- | **Azure** | Provision resources, check deployment status | Provider-specific |
184
- | **Docker** | Build images, manage containers | Provider-specific |
185
-
186
- ```javascript
187
- // Run migration after implementing data model
188
- await mcp__supabase__query({
189
- query: `ALTER TABLE leads ADD COLUMN status varchar(20) DEFAULT 'new'`
190
- });
191
-
192
- // Create RLS policy for new feature
193
- await mcp__supabase__query({
194
- query: `CREATE POLICY "Users can view own leads"
195
- ON leads FOR SELECT
196
- USING (auth.uid() = user_id)`
197
- });
198
-
199
- // Lookup API during implementation
200
- const docs = await mcp__context7__query_docs({
201
- libraryId: "/dotnet/efcore",
202
- query: "owned entity types configuration"
203
- });
204
-
205
- // Smoke test deployed feature via browser
206
- await mcp__playwright__browser_navigate({ url: "https://localhost:5001/leads" });
207
- const snapshot = await mcp__playwright__browser_snapshot();
208
- // → Verify page renders correctly, check for errors
209
-
210
- // Check for console errors after deploy
211
- const logs = await mcp__playwright__browser_console_messages();
212
- // → Catch JavaScript errors, failed API calls
213
-
214
- // Screenshot for recap.md documentation
215
- const screenshot = await mcp__playwright__browser_take_screenshot();
216
-
217
- // Fallback: Bash for migrations, gh CLI for PRs
218
- ```
219
-
220
- ---
221
-
222
- ## MCP vs Native Tools Decision
223
-
224
- | Need | MCP Tool | Native Alternative |
225
- |------|----------|--------------------|
226
- | Database schema | Supabase/DB MCP | Grep queries + Read types |
227
- | Repo metadata | GitHub MCP | Bash `gh` CLI |
228
- | Design tokens | Figma MCP | Read CSS/SCSS variables |
229
- | Library docs | Context7 | WebSearch + WebFetch |
230
- | Live page preview | Playwright MCP | WebFetch URL |
231
- | Page interaction (click, type, navigate) | Playwright MCP | Manual testing |
232
- | Responsive layout testing | Playwright MCP (`browser_resize`) | Manual testing |
233
- | Console error checking | Playwright MCP (`browser_console_messages`) | Browser DevTools |
234
- | Container ops | Docker MCP | Bash `docker` CLI |
235
- | Cloud resources | Azure MCP | Bash `az` CLI |
236
-
237
- **Rule:** MCP tools provide structured data (JSON responses). Native tools require manual parsing. **Always prefer MCP when available** — fall back to native when not.
238
-
239
- ---
240
-
241
- ## Common MCP Patterns
242
-
243
- ### Browser (Playwright): Page Automation & Analysis
244
-
245
- ```javascript
246
- // === SETUP ===
247
- // Playwright MCP: npx @playwright/mcp@latest
248
- // Config in .claude/settings.json or claude_desktop_config.json:
249
- // { "mcpServers": { "playwright": { "command": "npx", "args": ["@playwright/mcp@latest"] } } }
250
-
251
- // === NAVIGATION & SNAPSHOT ===
252
-
253
- // 1. Navigate to a page
254
- await mcp__playwright__browser_navigate({ url: "https://app.example.com/dashboard" });
255
-
256
- // 2. Take accessibility snapshot (preferred — structured, LLM-friendly)
257
- const snapshot = await mcp__playwright__browser_snapshot();
258
- // → Returns accessibility tree with element refs for interaction
259
-
260
- // 3. Take visual screenshot (requires --caps vision)
261
- const screenshot = await mcp__playwright__browser_take_screenshot();
262
- // → Returns PNG image of current page
263
-
264
- // === INTERACTION ===
265
-
266
- // 4. Click an element (use ref from snapshot)
267
- await mcp__playwright__browser_click({ element: "Submit button", ref: "s1e15" });
268
-
269
- // 5. Type into an input field
270
- await mcp__playwright__browser_type({ element: "Search input", ref: "s1e8", text: "query" });
271
-
272
- // 6. Fill a form field (replaces existing value)
273
- await mcp__playwright__browser_fill_form({ ref: "s1e8", value: "new value" });
274
-
275
- // 7. Select dropdown option
276
- await mcp__playwright__browser_select_option({ element: "Status", ref: "s1e12", values: ["active"] });
277
-
278
- // 8. Press keyboard key
279
- await mcp__playwright__browser_press_key({ key: "Enter" });
280
-
281
- // === TABS & NAVIGATION ===
282
-
283
- // 9. List open tabs
284
- const tabs = await mcp__playwright__browser_tabs();
285
-
286
- // 10. Navigate back
287
- await mcp__playwright__browser_navigate_back();
288
-
289
- // 11. Close current tab
290
- await mcp__playwright__browser_close();
291
-
292
- // === ADVANCED ===
293
-
294
- // 12. Evaluate JavaScript in page context
295
- const result = await mcp__playwright__browser_evaluate({
296
- expression: "document.querySelectorAll('.error').length"
297
- });
298
-
299
- // 13. Get console messages (debug)
300
- const logs = await mcp__playwright__browser_console_messages();
301
-
302
- // 14. Get network requests
303
- const requests = await mcp__playwright__browser_network_requests();
304
-
305
- // 15. Handle dialog (alert, confirm, prompt)
306
- await mcp__playwright__browser_handle_dialog({ accept: true });
307
-
308
- // 16. Resize viewport
309
- await mcp__playwright__browser_resize({ width: 375, height: 812 }); // iPhone viewport
310
-
311
- // 17. Save page as PDF (requires --caps pdf)
312
- await mcp__playwright__browser_pdf_save();
313
-
314
- // 18. Upload file
315
- await mcp__playwright__browser_file_upload({ ref: "s1e20", paths: ["/path/to/file.png"] });
316
- ```
317
-
318
- **Use cases by phase:**
319
-
320
- | Phase | Use Case | Tool |
321
- |-------|----------|------|
322
- | UI/UX (1.5) | Screenshot reference pages for design | `browser_navigate` + `browser_take_screenshot` |
323
- | UI/UX (1.5) | Inspect existing app structure | `browser_navigate` + `browser_snapshot` |
324
- | UI/UX (1.5) | Test responsive layouts | `browser_resize` + `browser_take_screenshot` |
325
- | Clarify (3) | Verify existing UI behavior | `browser_navigate` + `browser_snapshot` |
326
- | Implement (5) | Smoke test deployed features | `browser_navigate` + `browser_click` + `browser_snapshot` |
327
- | Implement (5) | Verify form flows end-to-end | `browser_fill_form` + `browser_click` + `browser_snapshot` |
328
- | Implement (5) | Check console errors after deploy | `browser_navigate` + `browser_console_messages` |
329
- | Implement (5) | Screenshot for recap.md | `browser_take_screenshot` |
330
-
331
- ---
332
-
333
- ### Supabase: Full Schema Discovery
334
-
335
- ```javascript
336
- // Complete workflow for Phase 2 schema analysis
337
- const tables = await mcp__supabase__list_tables();
338
-
339
- for (const table of tables.filter(t => isRelevant(t))) {
340
- const schema = await mcp__supabase__get_table_schema({ table: table.name });
341
- const rels = await mcp__supabase__get_relationships({ table: table.name });
342
- // → Write findings to schema-analysis.md
343
- }
344
- ```
345
-
346
- ### Context7: Library Research
347
-
348
- ```javascript
349
- // Workflow for any phase needing library documentation
350
- // Step 1: Resolve library ID
351
- const lib = await mcp__context7__resolve_library_id({
352
- libraryName: "fluent-ui-blazor",
353
- query: "dialog component with form validation"
354
- });
355
-
356
- // Step 2: Query specific documentation
357
- const docs = await mcp__context7__query_docs({
358
- libraryId: lib.id,
359
- query: "FluentDialog component usage with EditForm validation"
360
- });
361
- ```
362
-
363
- ### GitHub: Code Search Across Repo
364
-
365
- ```javascript
366
- // Find patterns in large codebase during Phase 2
367
- const results = await mcp__github__search_code({
368
- query: "supabase.from leads repo:myorg/myrepo",
369
- });
370
- // → Find all places that query the leads table
371
- ```
372
-
373
- ---
374
-
375
- ## Security Considerations
376
-
377
- - **Never pass secrets** in MCP tool parameters (API keys, tokens, passwords)
378
- - **Supabase MCP** uses project-level auth — queries run with service role by default
379
- - **GitHub MCP** inherits the configured token's permissions
380
- - **Always validate MCP responses** before using in contracts or code generation
381
-
382
- ---
383
-
384
- *MORPH-SPEC by Polymorphism Tech*