@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
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Dev PreToolUse Hook: Guard Version Numbers
5
+ *
6
+ * Event: PreToolUse | Matcher: Write|Edit
7
+ * Scope: Framework codebase only (dev hook)
8
+ *
9
+ * Blocks Write/Edit to files that contain hardcoded version patterns
10
+ * like "MORPH-SPEC v4.8.1". Version should only be in package.json.
11
+ *
12
+ * Checked extensions: .md, .cs, .css, .js (covers templates + source)
13
+ * Exceptions: CHANGELOG.md, node_modules/, test/, package.json, package-lock.json
14
+ *
15
+ * Fail-open: exits 0 on any error.
16
+ */
17
+
18
+ import { readStdin } from '../shared/stdin-reader.js';
19
+ import { getFilePath, getContentToValidate } from '../shared/payload-utils.js';
20
+ import { block, pass } from '../shared/hook-response.js';
21
+
22
+ const VERSION_PATTERN = /MORPH-SPEC\s+v\d+\.\d+\.\d+/;
23
+ const CHECKED_EXTENSIONS = ['.md', '.cs', '.css', '.js', '.html', '.txt'];
24
+
25
+ try {
26
+ const payload = await readStdin();
27
+ if (!payload) pass();
28
+
29
+ const filePath = getFilePath(payload);
30
+ if (!filePath) pass();
31
+
32
+ // Only check relevant file types
33
+ if (!CHECKED_EXTENSIONS.some(ext => filePath.endsWith(ext))) pass();
34
+
35
+ // Exceptions
36
+ if (filePath.includes('node_modules/')) pass();
37
+ if (filePath.endsWith('CHANGELOG.md')) pass();
38
+ if (filePath.includes('test/')) pass();
39
+ if (filePath.endsWith('package.json')) pass();
40
+ if (filePath.endsWith('package-lock.json')) pass();
41
+
42
+ const content = getContentToValidate(payload);
43
+ if (!content) pass();
44
+
45
+ if (VERSION_PATTERN.test(content)) {
46
+ block(
47
+ `MORPH-SPEC: Hardcoded version number detected in '${filePath}'.\n` +
48
+ `Version should only be in package.json. Use 'MORPH-SPEC by Polymorphism Tech' without version.\n` +
49
+ `Pattern found: ${content.match(VERSION_PATTERN)?.[0]}`
50
+ );
51
+ }
52
+
53
+ pass();
54
+ } catch {
55
+ // Fail-open
56
+ process.exit(0);
57
+ }
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Dev PostToolUse Hook: Standards Registry Sync Advisory
5
+ *
6
+ * Event: PostToolUse | Matcher: Write
7
+ * Scope: Framework codebase only (dev hook)
8
+ *
9
+ * After a Write to framework/standards/**/*.md, checks if the file
10
+ * is registered in framework/standards/STANDARDS.json.
11
+ * If not, injects an advisory to regenerate the registry.
12
+ *
13
+ * Fail-open: exits 0 on any error.
14
+ */
15
+
16
+ import { readFileSync, existsSync } from 'fs';
17
+ import { readStdin } from '../shared/stdin-reader.js';
18
+ import { getFilePath } from '../shared/payload-utils.js';
19
+ import { approve, pass } from '../shared/hook-response.js';
20
+
21
+ try {
22
+ const payload = await readStdin();
23
+ if (!payload) pass();
24
+
25
+ const filePath = getFilePath(payload);
26
+ if (!filePath) pass();
27
+
28
+ // Only check framework/standards/**/*.md
29
+ if (!filePath.includes('framework/standards/')) pass();
30
+ if (!filePath.endsWith('.md')) pass();
31
+
32
+ // Skip meta files
33
+ const basename = filePath.split('/').pop();
34
+ if (basename === 'README.md') pass();
35
+ if (basename === 'STANDARDS.json') pass();
36
+
37
+ // Extract relative path from framework/standards/
38
+ const standardsIdx = filePath.indexOf('framework/standards/');
39
+ if (standardsIdx === -1) pass();
40
+ const relativePath = filePath.slice(standardsIdx + 'framework/standards/'.length);
41
+
42
+ // Read STANDARDS.json
43
+ const registryPath = 'framework/standards/STANDARDS.json';
44
+ if (!existsSync(registryPath)) pass();
45
+
46
+ const registry = JSON.parse(readFileSync(registryPath, 'utf-8'));
47
+ const registeredPaths = (registry.standards || []).map(s => s.path);
48
+
49
+ if (!registeredPaths.includes(relativePath)) {
50
+ approve(
51
+ `MORPH-SPEC: Standard '${relativePath}' is not in STANDARDS.json.\n` +
52
+ `Run: node scripts/generate-standards-registry.js`
53
+ );
54
+ }
55
+
56
+ pass();
57
+ } catch {
58
+ // Fail-open
59
+ process.exit(0);
60
+ }
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Dev PostToolUse Hook: Template Registry Sync Advisory
5
+ *
6
+ * Event: PostToolUse | Matcher: Write
7
+ * Scope: Framework codebase only (dev hook)
8
+ *
9
+ * After a Write to framework/templates/**/*.md, checks if the file
10
+ * is registered in framework/templates/REGISTRY.json.
11
+ * If not, injects an advisory to add the entry.
12
+ *
13
+ * Fail-open: exits 0 on any error.
14
+ */
15
+
16
+ import { readFileSync, existsSync } from 'fs';
17
+ import { readStdin } from '../shared/stdin-reader.js';
18
+ import { getFilePath } from '../shared/payload-utils.js';
19
+ import { approve, pass } from '../shared/hook-response.js';
20
+
21
+ try {
22
+ const payload = await readStdin();
23
+ if (!payload) pass();
24
+
25
+ const filePath = getFilePath(payload);
26
+ if (!filePath) pass();
27
+
28
+ // Only check framework/templates/**/*.md
29
+ if (!filePath.includes('framework/templates/')) pass();
30
+ if (!filePath.endsWith('.md')) pass();
31
+
32
+ // Skip meta files
33
+ const basename = filePath.split('/').pop();
34
+ if (basename === 'README.md') pass();
35
+ if (basename === 'REGISTRY.json') pass();
36
+
37
+ // Extract relative path from framework/templates/
38
+ const templateIdx = filePath.indexOf('framework/templates/');
39
+ if (templateIdx === -1) pass();
40
+ const relativePath = filePath.slice(templateIdx + 'framework/templates/'.length);
41
+
42
+ // Read REGISTRY.json
43
+ const registryPath = 'framework/templates/REGISTRY.json';
44
+ if (!existsSync(registryPath)) pass();
45
+
46
+ const registry = JSON.parse(readFileSync(registryPath, 'utf-8'));
47
+ const registeredPaths = (registry.templates || []).map(t => t.path);
48
+
49
+ if (!registeredPaths.includes(relativePath)) {
50
+ approve(
51
+ `MORPH-SPEC: Template '${relativePath}' is not in REGISTRY.json.\n` +
52
+ `Add an entry to framework/templates/REGISTRY.json with id, path, phase, and outputName fields.`
53
+ );
54
+ }
55
+
56
+ pass();
57
+ } catch {
58
+ // Fail-open
59
+ process.exit(0);
60
+ }
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Dev PreToolUse Hook: Validate Skill Frontmatter Format
5
+ *
6
+ * Event: PreToolUse | Matcher: Write|Edit
7
+ * Scope: Framework codebase only (dev hook)
8
+ *
9
+ * Validates that SKILL.md files written to framework/skills/ have valid
10
+ * YAML frontmatter with required `name:` and `description:` fields.
11
+ *
12
+ * Only validates on Write (full content). Edit operations pass through.
13
+ * Simple regex parsing (no YAML library dependency).
14
+ *
15
+ * Fail-open: exits 0 on any error.
16
+ */
17
+
18
+ import { readStdin } from '../shared/stdin-reader.js';
19
+ import { getFilePath, getContentToValidate, isWriteOperation } from '../shared/payload-utils.js';
20
+ import { block, pass } from '../shared/hook-response.js';
21
+
22
+ try {
23
+ const payload = await readStdin();
24
+ if (!payload) pass();
25
+
26
+ const filePath = getFilePath(payload);
27
+ if (!filePath) pass();
28
+
29
+ // Only check framework/skills/**/SKILL.md
30
+ if (!filePath.includes('framework/skills/')) pass();
31
+ if (!filePath.endsWith('SKILL.md')) pass();
32
+
33
+ // Only validate full Write operations (not Edit patches)
34
+ if (!isWriteOperation(payload)) pass();
35
+
36
+ const content = getContentToValidate(payload);
37
+ if (!content) pass();
38
+
39
+ // Check for YAML frontmatter delimiters
40
+ const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
41
+ if (!frontmatterMatch) {
42
+ block(
43
+ `MORPH-SPEC: SKILL.md at '${filePath}' is missing YAML frontmatter.\n` +
44
+ 'All skill files must start with --- delimited YAML frontmatter containing name: and description: fields.'
45
+ );
46
+ }
47
+
48
+ const frontmatter = frontmatterMatch[1];
49
+ const missing = [];
50
+
51
+ if (!/^name:/m.test(frontmatter)) {
52
+ missing.push('name:');
53
+ }
54
+ if (!/^description:/m.test(frontmatter)) {
55
+ missing.push('description:');
56
+ }
57
+
58
+ if (missing.length > 0) {
59
+ block(
60
+ `MORPH-SPEC: SKILL.md at '${filePath}' is missing required frontmatter fields:\n` +
61
+ missing.map(m => ` - ${m}`).join('\n') + '\n\n' +
62
+ 'All skill files must have name: and description: in their YAML frontmatter.'
63
+ );
64
+ }
65
+
66
+ pass();
67
+ } catch {
68
+ // Fail-open
69
+ process.exit(0);
70
+ }
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Dev PreToolUse Hook: Validate Standard Format
5
+ *
6
+ * Event: PreToolUse | Matcher: Write|Edit
7
+ * Scope: Framework codebase only (dev hook)
8
+ *
9
+ * Validates that files written to framework/standards/ follow the required format:
10
+ * - `> **Scope:**` metadata header
11
+ * - `> **Layer:**` metadata header
12
+ * - `> **Keywords:**` metadata header
13
+ * - Footer: `*MORPH-SPEC by Polymorphism Tech*`
14
+ *
15
+ * Only validates on Write (full content). Edit operations pass through.
16
+ *
17
+ * Fail-open: exits 0 on any error.
18
+ */
19
+
20
+ import { readStdin } from '../shared/stdin-reader.js';
21
+ import { getFilePath, getContentToValidate, isWriteOperation } from '../shared/payload-utils.js';
22
+ import { block, pass } from '../shared/hook-response.js';
23
+
24
+ try {
25
+ const payload = await readStdin();
26
+ if (!payload) pass();
27
+
28
+ const filePath = getFilePath(payload);
29
+ if (!filePath) pass();
30
+
31
+ // Only check framework/standards/**/*.md
32
+ if (!filePath.includes('framework/standards/')) pass();
33
+ if (!filePath.endsWith('.md')) pass();
34
+
35
+ // Skip non-standard files
36
+ const basename = filePath.split('/').pop();
37
+ if (basename === 'README.md') pass();
38
+ if (basename === 'STANDARDS.json') pass();
39
+
40
+ // Only validate full Write operations (not Edit patches)
41
+ if (!isWriteOperation(payload)) pass();
42
+
43
+ const content = getContentToValidate(payload);
44
+ if (!content) pass();
45
+
46
+ const missing = [];
47
+
48
+ if (!/>\s*\*\*Scope:\*\*/.test(content)) {
49
+ missing.push('> **Scope:** metadata header');
50
+ }
51
+ if (!/>\s*\*\*Layer:\*\*/.test(content)) {
52
+ missing.push('> **Layer:** metadata header');
53
+ }
54
+ if (!/>\s*\*\*Keywords:\*\*/.test(content)) {
55
+ missing.push('> **Keywords:** metadata header');
56
+ }
57
+ if (!/\*MORPH-SPEC by Polymorphism Tech\*/.test(content)) {
58
+ missing.push('Footer: *MORPH-SPEC by Polymorphism Tech*');
59
+ }
60
+
61
+ if (missing.length > 0) {
62
+ block(
63
+ `MORPH-SPEC: Standard file '${basename}' is missing required format elements:\n` +
64
+ missing.map(m => ` - ${m}`).join('\n') + '\n\n' +
65
+ 'All framework standards must include Scope/Layer/Keywords metadata headers and the standard footer.'
66
+ );
67
+ }
68
+
69
+ pass();
70
+ } catch {
71
+ // Fail-open
72
+ process.exit(0);
73
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Shared payload utilities for Claude Code Write/Edit hooks.
3
+ *
4
+ * Extracts file path and content from tool_input payloads,
5
+ * normalizing between Write (content, file_path) and Edit (new_string, old_string, file_path).
6
+ */
7
+
8
+ /**
9
+ * Get the file path from a hook payload, normalizing backslashes.
10
+ * @param {Object} payload - Hook payload from stdin
11
+ * @returns {string} Normalized file path or empty string
12
+ */
13
+ export function getFilePath(payload) {
14
+ const raw = payload?.tool_input?.file_path || payload?.tool_input?.path || '';
15
+ return raw.replace(/\\/g, '/');
16
+ }
17
+
18
+ /**
19
+ * Get the content being written or edited.
20
+ * For Write: returns `content` (full file content).
21
+ * For Edit: returns `new_string` (replacement text).
22
+ * @param {Object} payload - Hook payload from stdin
23
+ * @returns {string} Content string or empty string
24
+ */
25
+ export function getContentToValidate(payload) {
26
+ const input = payload?.tool_input;
27
+ if (!input) return '';
28
+ // Write tool uses 'content', Edit tool uses 'new_string'
29
+ return input.content || input.new_string || '';
30
+ }
31
+
32
+ /**
33
+ * Check if this is a Write operation (full file content available).
34
+ * @param {Object} payload - Hook payload from stdin
35
+ * @returns {boolean} True if Write (content exists), false if Edit or unknown
36
+ */
37
+ export function isWriteOperation(payload) {
38
+ return typeof payload?.tool_input?.content === 'string';
39
+ }
@@ -73,15 +73,39 @@ export function getFeature(featureName, projectPath) {
73
73
  return state?.features?.[featureName] || null;
74
74
  }
75
75
 
76
+ /**
77
+ * Derive phase from filesystem (v5.0.0+: phase deleted from state).
78
+ * Checks for phase folders in descending order, returns highest present.
79
+ * @param {string} featureName
80
+ * @param {string} [projectPath]
81
+ * @returns {string} Phase name
82
+ */
83
+ export function derivePhaseForFeature(featureName, projectPath) {
84
+ const basePath = join(projectPath || process.cwd(), '.morph/features', featureName);
85
+ const phaseMap = [
86
+ ['4-implement', 'implement'],
87
+ ['3-tasks', 'tasks'],
88
+ ['2-ui', 'uiux'],
89
+ ['1-design', 'design'],
90
+ ['0-proposal', 'proposal'],
91
+ ];
92
+ for (const [folder, phase] of phaseMap) {
93
+ if (existsSync(join(basePath, folder))) return phase;
94
+ }
95
+ return 'setup';
96
+ }
97
+
76
98
  /**
77
99
  * Get the current phase of a feature.
100
+ * Falls back to filesystem derivation when phase is not in state (v5.0.0+).
78
101
  * @param {string} featureName
79
102
  * @param {string} [projectPath]
80
103
  * @returns {string|null}
81
104
  */
82
105
  export function getFeaturePhase(featureName, projectPath) {
83
106
  const feature = getFeature(featureName, projectPath);
84
- return feature?.phase || null;
107
+ if (!feature) return null;
108
+ return feature.phase || derivePhaseForFeature(featureName, projectPath);
85
109
  }
86
110
 
87
111
  /**
@@ -58,7 +58,7 @@ Run a checkpoint every 3 completed tasks:
58
58
  **Design Gate:** Before moving from Design → Tasks, spec must be approved.
59
59
  **Implementation Gate:** Before starting implementation, task list must be approved.
60
60
 
61
- Check approval status: `morph-spec state show {feature}`
61
+ Check approval status: `morph-spec approval-status {feature}`
62
62
 
63
63
  ---
64
64
 
@@ -0,0 +1,216 @@
1
+ ---
2
+ name: morph-init
3
+ description: >
4
+ LLM-powered project initialization. Installs morph-spec infrastructure if
5
+ needed, auto-installs required plugins (superpowers, context7), analyzes any
6
+ project structure intelligently, generates rich context/README.md and
7
+ config.json, and configures MCPs. Use once per project after installing
8
+ @polymorphism-tech/morph-spec. Re-run with /morph-init refresh to update
9
+ context as the project evolves.
10
+ argument-hint: "[refresh]"
11
+ user-invocable: true
12
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep
13
+ ---
14
+
15
+ # morph-init — LLM-Powered Project Initialization
16
+
17
+ > Run once after `npm install -g @polymorphism-tech/morph-spec`.
18
+ > Re-run as `/morph-init refresh` when your project evolves.
19
+
20
+ ---
21
+
22
+ ## Step 0 — Required Plugins
23
+
24
+ Check for required Claude Code plugins: **superpowers** and **context7**.
25
+
26
+ Read `~/.claude/plugins/installed_plugins.json` and check for:
27
+ - `superpowers@claude-plugins-official`
28
+ - `context7@claude-plugins-official`
29
+
30
+ For each missing plugin, run:
31
+
32
+ ```bash
33
+ morph-spec install-plugin superpowers
34
+ morph-spec install-plugin context7
35
+ ```
36
+
37
+ **If the command succeeds:** `✓ {plugin} installed. Restart Claude Code after /morph-init completes.`
38
+
39
+ **If the command fails:** Show this and **STOP** — do not continue:
40
+
41
+ ```
42
+ ┌─────────────────────────────────────────────────────────────┐
43
+ │ Plugin {plugin} requires manual installation: │
44
+ │ │
45
+ │ 1. Claude Code → Settings (Cmd/Ctrl+,) → Extensions │
46
+ │ 2. Browse → search "{plugin}" → Install │
47
+ │ 3. Restart Claude Code │
48
+ │ 4. Re-run /morph-init │
49
+ └─────────────────────────────────────────────────────────────┘
50
+ ```
51
+
52
+ Both `superpowers` and `context7` are required. Do not continue if either is missing.
53
+
54
+ ---
55
+
56
+ ## Step 1 — Infrastructure
57
+
58
+ Check if `.morph/` exists in the current directory.
59
+
60
+ **If MISSING:**
61
+ ```bash
62
+ morph-spec setup-infra
63
+ ```
64
+ Output confirms: `✓ MORPH-SPEC infrastructure installed.`
65
+
66
+ **If EXISTS and argument is `refresh`:** Continue — will overwrite context and config.
67
+
68
+ **If EXISTS and no argument:**
69
+ Ask: *"MORPH already initialized. Refresh context and config? (y/n)"*
70
+ If `n` → STOP.
71
+
72
+ ---
73
+
74
+ ## Step 2 — Analyze Project
75
+
76
+ Gather evidence to build a stack map. Run these in parallel:
77
+
78
+ | Tool | Pattern | Signal |
79
+ |------|---------|--------|
80
+ | `Glob` | `**/package.json` | Detect next, supabase, clerk, stripe in deps |
81
+ | `Glob` | `**/*.csproj` | .NET projects at any depth |
82
+ | `Glob` | `**/next.config.{js,ts,mjs}` | Next.js in any subdirectory |
83
+ | `Glob` | `**/components.json` | shadcn/ui |
84
+ | `Glob` | `**/docker-compose*.yml` | Container services |
85
+ | `Glob` | `database/migrations/**` | Supabase local dev |
86
+ | `Glob` | `supabase/**` | Supabase project config |
87
+ | `Glob` | `**/*.razor` | Blazor |
88
+ | `Read` | `.env.example` | Env vars reveal integrations |
89
+ | `Read` | `README.md` | Existing project description |
90
+ | `Grep` | `@supabase/supabase-js` | Supabase dep in any package.json |
91
+ | `Grep` | `clerk\|auth0\|nextauth` | Auth provider |
92
+ | `Grep` | `stripe\|asaas` | Payment provider |
93
+
94
+ Read each found `package.json` for dependency names. Build an **evidence map**:
95
+
96
+ ```
97
+ stack: [nextjs, dotnet, ...]
98
+ integrations: [supabase, docker, clerk, ...]
99
+ uiLibrary: shadcn | fluent-ui | mudblazor | null
100
+ monorepo: true | false
101
+ frontendPath: src/frontend (if monorepo)
102
+ backendPath: src/backend (if monorepo)
103
+ ```
104
+
105
+ ---
106
+
107
+ ## Step 3 — Ask Targeted Questions
108
+
109
+ **Rule: only ask what cannot be inferred with ≥90% confidence from files.**
110
+
111
+ Ask at most 3 questions, only those that apply:
112
+
113
+ | # | Question | Condition | Purpose |
114
+ |---|----------|-----------|---------|
115
+ | 1 | *"Em uma frase: qual é o objetivo principal do **[ProjectName]**?"* | Always | README.md Overview |
116
+ | 2 | *"Confirmo: frontend em `{frontendPath}`, backend em `{backendPath}`. Correto?"* | Monorepo detected | Validate paths before persisting |
117
+ | 3 | *"Supabase Cloud (managed) ou self-hosted?"* | Supabase detected | MCP URL configuration |
118
+
119
+ Do **not** ask about technology already confirmed by file evidence.
120
+
121
+ ---
122
+
123
+ ## Step 4 — Generate `context/README.md`
124
+
125
+ Write `.morph/context/README.md`:
126
+
127
+ ```markdown
128
+ # [ProjectName] — Project Context
129
+
130
+ ## Overview
131
+ [Answer from question 1]
132
+
133
+ ## Tech Stack
134
+ | Layer | Technology | Location |
135
+ |------------|-----------|----------|
136
+ [One row per detected layer — frontend, backend, database, UI library, auth, payments]
137
+
138
+ ## Architecture
139
+ [monorepo / single-stack / etc — describe layers and responsibilities]
140
+
141
+ ## Key Integrations
142
+ [Per integration: service → purpose → detected via: evidence file/dep]
143
+
144
+ ## Agent Notes
145
+ [Patterns from eslint/tsconfig/.editorconfig, important paths,
146
+ project-specific conventions for MORPH agents]
147
+ ```
148
+
149
+ ---
150
+
151
+ ## Step 5 — Update `config.json`
152
+
153
+ Read `.morph/config/config.json` and merge into `project`:
154
+
155
+ ```json
156
+ {
157
+ "framework": "global",
158
+ "frameworkVersion": "[current version]",
159
+ "project": {
160
+ "name": "[ProjectName]",
161
+ "description": "[answer from question 1]",
162
+ "stack": "[stacks joined with +, e.g. nextjs+dotnet]",
163
+ "architecture": "[monorepo | single-stack | detected pattern]",
164
+ "uiLibrary": "[detected or null]",
165
+ "integrations": ["supabase", "docker", "clerk"],
166
+ "frontendPath": "[path if monorepo, else omit]",
167
+ "backendPath": "[path if monorepo, else omit]"
168
+ }
169
+ }
170
+ ```
171
+
172
+ ---
173
+
174
+ ## Step 6 — Configure MCPs
175
+
176
+ For each detected integration with an available MCP:
177
+
178
+ **Supabase detected:**
179
+ > *"Configure Supabase MCP now? I'll need `SUPABASE_URL` and `SERVICE_ROLE_KEY`."*
180
+ - YES → collect credentials → add to `.claude/settings.local.json` under `mcpServers`
181
+ - NO → show snippet + `morph-spec mcp setup supabase`
182
+
183
+ **GitHub:**
184
+ > *"Configure GitHub MCP? I'll need a `GITHUB_PERSONAL_ACCESS_TOKEN`."*
185
+ - YES/NO → same pattern
186
+
187
+ Only offer Figma, Docker, Azure if explicitly detected in `.env.example`.
188
+
189
+ ---
190
+
191
+ ## Step 7 — Final Output
192
+
193
+ Before printing the summary, check `~/.claude/settings.local.json` for `env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`. If set to `"1"`, mark Agent Teams as enabled; otherwise show the warning.
194
+
195
+ ```
196
+ ✓ Plugins: superpowers ✓ context7 ✓
197
+ ✓ Infrastructure: .morph/ structure, hooks, agents, rules, skills
198
+ ✓ Agents: [N] total ([T1] orchestrators, [T2] domain leaders, [S] specialists)
199
+ ✓ context/README.md generated
200
+ ✓ config.json updated
201
+ Stack: [stack] | Architecture: [architecture]
202
+ Integrations: [list]
203
+ ✓ MCPs: [configured list]
204
+
205
+ [If CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS = "1":]
206
+ ✓ Agent Teams: enabled
207
+
208
+ [If CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS is NOT set:]
209
+ ⚠ Agent Teams not enabled. Multi-agent workflows require:
210
+ ~/.claude/settings.local.json → {"env": {"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"}}
211
+
212
+ [If any plugin was newly installed:]
213
+ ○ Restart Claude Code to activate newly installed plugins.
214
+
215
+ Next: /morph-proposal [feature-name]
216
+ ```
@@ -77,7 +77,7 @@ Gerar lista de telas para implementar na ordem correta:
77
77
  ### T001: Setup Design System
78
78
  - Criar/atualizar wwwroot/css/design-system.css
79
79
  - Adicionar todas as classes CSS listadas
80
- - Validar com `morph-spec validate-css`
80
+ - Validar com `morph-spec validate`
81
81
 
82
82
  ### T002: {Nome da Tela 1}
83
83
  - Ler: {prototype-path}/{tela1}.html
@@ -92,7 +92,7 @@ Gerar lista de telas para implementar na ordem correta:
92
92
 
93
93
  ### TXXX: Validacao Final
94
94
  - Build completo
95
- - `morph-spec validate-css`
95
+ - `morph-spec validate`
96
96
  - Testar responsividade
97
97
  ```
98
98
 
@@ -130,7 +130,7 @@ Para cada tela, seguir este fluxo:
130
130
 
131
131
  6. **Validar CSS**
132
132
  ```bash
133
- morph-spec validate-css src/MyApp.Web
133
+ morph-spec validate src/MyApp.Web
134
134
  ```
135
135
 
136
136
  ---
@@ -217,4 +217,4 @@ Mapeamento HTML → Blazor:
217
217
 
218
218
  ---
219
219
 
220
- *MORPH-SPEC v2.2.0 by Polymorphism Tech*
220
+ *MORPH-SPEC by Polymorphism Tech*