@polymorphism-tech/morph-spec 4.7.2 → 4.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/LICENSE +1 -2
  2. package/README.md +379 -414
  3. package/bin/morph-spec.js +57 -394
  4. package/bin/validate.js +2 -26
  5. package/claude-plugin.json +2 -2
  6. package/docs/CHEATSHEET.md +203 -221
  7. package/docs/QUICKSTART.md +2 -8
  8. package/framework/CLAUDE.md +1 -1
  9. package/framework/commands/morph-proposal.md +3 -3
  10. package/framework/hooks/README.md +2 -5
  11. package/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +4 -55
  12. package/framework/hooks/claude-code/session-start/inject-morph-context.js +20 -5
  13. package/framework/hooks/claude-code/statusline.py +6 -1
  14. package/framework/hooks/dev/check-sync-health.js +117 -0
  15. package/framework/hooks/dev/guard-version-numbers.js +57 -0
  16. package/framework/hooks/dev/sync-standards-registry.js +60 -0
  17. package/framework/hooks/dev/sync-template-registry.js +60 -0
  18. package/framework/hooks/dev/validate-skill-format.js +70 -0
  19. package/framework/hooks/dev/validate-standard-format.js +73 -0
  20. package/framework/hooks/shared/payload-utils.js +39 -0
  21. package/framework/hooks/shared/state-reader.js +25 -1
  22. package/framework/rules/morph-workflow.md +1 -1
  23. package/framework/skills/level-0-meta/morph-init/SKILL.md +216 -0
  24. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +4 -4
  25. package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +4 -4
  26. package/framework/skills/level-0-meta/verification-before-completion/SKILL.md +1 -1
  27. package/framework/skills/level-1-workflows/phase-clarify/SKILL.md +192 -191
  28. package/framework/skills/level-1-workflows/phase-codebase-analysis/SKILL.md +181 -180
  29. package/framework/skills/level-1-workflows/phase-design/SKILL.md +339 -338
  30. package/framework/skills/level-1-workflows/phase-implement/SKILL.md +254 -253
  31. package/framework/skills/level-1-workflows/phase-setup/SKILL.md +168 -170
  32. package/framework/skills/level-1-workflows/phase-tasks/SKILL.md +284 -283
  33. package/framework/skills/level-1-workflows/phase-uiux/SKILL.md +246 -245
  34. package/framework/templates/examples/design-system-examples.md +1 -1
  35. package/framework/templates/ui/FluentDesignTheme.cs +1 -1
  36. package/framework/templates/ui/MudTheme.cs +1 -1
  37. package/framework/templates/ui/design-system.css +1 -1
  38. package/package.json +7 -5
  39. package/src/commands/agents/index.js +1 -2
  40. package/src/commands/index.js +13 -16
  41. package/src/commands/project/doctor.js +100 -14
  42. package/src/commands/project/index.js +7 -10
  43. package/src/commands/project/init.js +398 -528
  44. package/src/commands/project/install-plugin-cmd.js +28 -0
  45. package/src/commands/project/setup-infra-cmd.js +12 -0
  46. package/src/commands/project/tutorial.js +115 -0
  47. package/src/commands/state/approve.js +213 -221
  48. package/src/commands/state/index.js +0 -1
  49. package/src/commands/state/state.js +337 -365
  50. package/src/commands/templates/index.js +0 -4
  51. package/src/commands/trust/trust.js +1 -93
  52. package/src/commands/utils/index.js +1 -5
  53. package/src/commands/validation/index.js +1 -5
  54. package/src/core/registry/command-registry.js +11 -285
  55. package/src/core/state/state-manager.js +5 -2
  56. package/src/lib/detectors/index.js +81 -87
  57. package/src/lib/detectors/structure-detector.js +275 -273
  58. package/src/lib/generators/recap-generator.js +232 -225
  59. package/src/scripts/global-install.js +34 -0
  60. package/src/scripts/install-plugin.js +126 -0
  61. package/src/scripts/setup-infra.js +203 -0
  62. package/src/utils/agents-installer.js +10 -1
  63. package/src/utils/hooks-installer.js +66 -3
  64. package/.morph/.morphversion +0 -5
  65. package/.morph/analytics/threads-log.jsonl +0 -5
  66. package/.morph/config/config.json +0 -8
  67. package/.morph/framework/agents.json +0 -1815
  68. package/.morph/framework/hooks/README.md +0 -205
  69. package/.morph/framework/hooks/claude-code/notification/approval-reminder.js +0 -54
  70. package/.morph/framework/hooks/claude-code/post-tool-use/dispatch.js +0 -83
  71. package/.morph/framework/hooks/claude-code/post-tool-use/handle-tool-failure.js +0 -42
  72. package/.morph/framework/hooks/claude-code/pre-compact/save-morph-context.js +0 -61
  73. package/.morph/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +0 -71
  74. package/.morph/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +0 -58
  75. package/.morph/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +0 -64
  76. package/.morph/framework/hooks/claude-code/session-start/inject-morph-context.js +0 -94
  77. package/.morph/framework/hooks/claude-code/statusline.py +0 -538
  78. package/.morph/framework/hooks/claude-code/statusline.sh +0 -7
  79. package/.morph/framework/hooks/claude-code/stop/validate-completion.js +0 -88
  80. package/.morph/framework/hooks/claude-code/user-prompt/enrich-prompt.js +0 -91
  81. package/.morph/framework/hooks/git/commit-msg/conventional-commits.sh +0 -33
  82. package/.morph/framework/hooks/git/pre-commit/agents.sh +0 -25
  83. package/.morph/framework/hooks/git/pre-commit/orchestrator.sh +0 -64
  84. package/.morph/framework/hooks/git/pre-commit/specs.sh +0 -50
  85. package/.morph/framework/hooks/git/pre-push/run-tests.sh +0 -44
  86. package/.morph/framework/hooks/shared/hook-response.js +0 -45
  87. package/.morph/framework/hooks/shared/phase-utils.js +0 -129
  88. package/.morph/framework/hooks/shared/state-reader.js +0 -138
  89. package/.morph/framework/hooks/shared/stdin-reader.js +0 -26
  90. package/.morph/framework/standards/STANDARDS.json +0 -933
  91. package/.morph/framework/standards/ai-agents/blazor-ui.md +0 -364
  92. package/.morph/framework/standards/ai-agents/production.md +0 -415
  93. package/.morph/framework/standards/ai-agents/setup.md +0 -418
  94. package/.morph/framework/standards/ai-agents/team-orchestration.md +0 -479
  95. package/.morph/framework/standards/ai-agents/workflows.md +0 -354
  96. package/.morph/framework/standards/architecture/ddd/aggregates.md +0 -120
  97. package/.morph/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
  98. package/.morph/framework/standards/architecture/ddd/complexity-levels.md +0 -108
  99. package/.morph/framework/standards/architecture/ddd/entities.md +0 -99
  100. package/.morph/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
  101. package/.morph/framework/standards/architecture/ddd/value-objects.md +0 -124
  102. package/.morph/framework/standards/backend/api/minimal-api.md +0 -494
  103. package/.morph/framework/standards/backend/api/rest.md +0 -492
  104. package/.morph/framework/standards/backend/api/validation.md +0 -88
  105. package/.morph/framework/standards/backend/authentication/passkeys.md +0 -428
  106. package/.morph/framework/standards/backend/database/ef-core.md +0 -199
  107. package/.morph/framework/standards/backend/database/migrations.md +0 -393
  108. package/.morph/framework/standards/backend/database/postgresql/database.md +0 -352
  109. package/.morph/framework/standards/backend/database/repository-patterns.md +0 -528
  110. package/.morph/framework/standards/backend/database/vector-search-rag.md +0 -541
  111. package/.morph/framework/standards/backend/dotnet/async.md +0 -366
  112. package/.morph/framework/standards/backend/dotnet/core.md +0 -117
  113. package/.morph/framework/standards/backend/dotnet/di.md +0 -439
  114. package/.morph/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  115. package/.morph/framework/standards/backend/integrations/asaas/asaas-api.md +0 -216
  116. package/.morph/framework/standards/backend/integrations/clerk/clerk-auth.md +0 -290
  117. package/.morph/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -350
  118. package/.morph/framework/standards/backend/integrations/resend/resend-email.md +0 -385
  119. package/.morph/framework/standards/context/analytics.md +0 -96
  120. package/.morph/framework/standards/context/bundles.md +0 -110
  121. package/.morph/framework/standards/context/priming.md +0 -78
  122. package/.morph/framework/standards/core/architecture.md +0 -185
  123. package/.morph/framework/standards/core/coding.md +0 -214
  124. package/.morph/framework/standards/core/git-branching-strategy.md +0 -403
  125. package/.morph/framework/standards/core/git.md +0 -185
  126. package/.morph/framework/standards/core/testing.md +0 -295
  127. package/.morph/framework/standards/data/nosql/blob-storage.md +0 -102
  128. package/.morph/framework/standards/data/nosql/cache/redis.md +0 -97
  129. package/.morph/framework/standards/data/nosql/cosmos-db.md +0 -118
  130. package/.morph/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  131. package/.morph/framework/standards/data/vector-search/rag-chunking.md +0 -104
  132. package/.morph/framework/standards/frontend/blazor/design-checklist.md +0 -222
  133. package/.morph/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  134. package/.morph/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  135. package/.morph/framework/standards/frontend/blazor/html-conversion.md +0 -184
  136. package/.morph/framework/standards/frontend/blazor/lifecycle.md +0 -195
  137. package/.morph/framework/standards/frontend/blazor/pitfalls.md +0 -198
  138. package/.morph/framework/standards/frontend/blazor/state.md +0 -191
  139. package/.morph/framework/standards/frontend/design-system/animations.md +0 -151
  140. package/.morph/framework/standards/frontend/design-system/naming.md +0 -64
  141. package/.morph/framework/standards/frontend/nextjs/app-router.md +0 -123
  142. package/.morph/framework/standards/frontend/nextjs/components.md +0 -132
  143. package/.morph/framework/standards/frontend/nextjs/data-fetching.md +0 -126
  144. package/.morph/framework/standards/frontend/nextjs/forms.md +0 -128
  145. package/.morph/framework/standards/frontend/nextjs/naming-conventions.md +0 -67
  146. package/.morph/framework/standards/frontend/nextjs/nextjs-patterns.md +0 -215
  147. package/.morph/framework/standards/frontend/nextjs/project-structure.md +0 -102
  148. package/.morph/framework/standards/frontend/nextjs/state-management.md +0 -72
  149. package/.morph/framework/standards/frontend/nextjs/testing.md +0 -111
  150. package/.morph/framework/standards/infrastructure/azure/azure.md +0 -624
  151. package/.morph/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  152. package/.morph/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  153. package/.morph/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  154. package/.morph/framework/standards/infrastructure/azure/services/functions.md +0 -486
  155. package/.morph/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  156. package/.morph/framework/standards/infrastructure/azure/services/storage.md +0 -407
  157. package/.morph/framework/standards/infrastructure/docker/easypanel-deploy.md +0 -196
  158. package/.morph/framework/standards/infrastructure/supabase/mcp-setup.md +0 -252
  159. package/.morph/framework/standards/infrastructure/supabase/supabase-auth.md +0 -176
  160. package/.morph/framework/standards/infrastructure/supabase/supabase-pgvector.md +0 -169
  161. package/.morph/framework/standards/infrastructure/supabase/supabase-rls.md +0 -184
  162. package/.morph/framework/standards/infrastructure/supabase/supabase-storage.md +0 -153
  163. package/.morph/framework/standards/integration/api/graphql.md +0 -91
  164. package/.morph/framework/standards/integration/api/grpc.md +0 -114
  165. package/.morph/framework/standards/integration/api/rest-design.md +0 -95
  166. package/.morph/framework/standards/integration/event-driven/cqrs.md +0 -101
  167. package/.morph/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  168. package/.morph/framework/standards/integration/event-driven/service-bus.md +0 -95
  169. package/.morph/framework/standards/integration/mcp/mcp-tools.md +0 -384
  170. package/.morph/framework/standards/observability/logging.md +0 -131
  171. package/.morph/framework/standards/observability/metrics.md +0 -121
  172. package/.morph/framework/standards/observability/monitoring.md +0 -114
  173. package/.morph/framework/standards/observability/tracing.md +0 -132
  174. package/.morph/framework/standards/workflows/parallel-execution.md +0 -112
  175. package/.morph/framework/standards/workflows/thread-management.md +0 -113
  176. package/.morph/framework/templates/.idea/morph-templates.xml +0 -92
  177. package/.morph/framework/templates/.vscode/morph-templates.code-snippets +0 -186
  178. package/.morph/framework/templates/IDE-SNIPPETS.md +0 -266
  179. package/.morph/framework/templates/README.md +0 -814
  180. package/.morph/framework/templates/REGISTRY.json +0 -1888
  181. package/.morph/framework/templates/code/dotnet/backend/repository.cs +0 -141
  182. package/.morph/framework/templates/code/dotnet/backend/service.cs +0 -139
  183. package/.morph/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  184. package/.morph/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  185. package/.morph/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  186. package/.morph/framework/templates/code/dotnet/contracts/README.md +0 -74
  187. package/.morph/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  188. package/.morph/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
  189. package/.morph/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
  190. package/.morph/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
  191. package/.morph/framework/templates/code/dotnet/database/migration.cs +0 -83
  192. package/.morph/framework/templates/code/dotnet/frontend/component.razor +0 -239
  193. package/.morph/framework/templates/code/dotnet/jobs/agent.cs +0 -163
  194. package/.morph/framework/templates/code/dotnet/jobs/job.cs +0 -171
  195. package/.morph/framework/templates/code/dotnet/test.cs +0 -239
  196. package/.morph/framework/templates/code/sql/rls-policy.sql +0 -57
  197. package/.morph/framework/templates/code/sql/supabase-migration.sql +0 -100
  198. package/.morph/framework/templates/code/sql/supabase-migration.template.sql +0 -113
  199. package/.morph/framework/templates/code/typescript/contracts.ts +0 -168
  200. package/.morph/framework/templates/context/CONTEXT-FEATURE.md +0 -276
  201. package/.morph/framework/templates/context/CONTEXT.md +0 -181
  202. package/.morph/framework/templates/docs/clarifications.md +0 -253
  203. package/.morph/framework/templates/docs/onboarding.md +0 -123
  204. package/.morph/framework/templates/docs/proposal.md +0 -182
  205. package/.morph/framework/templates/docs/schema-analysis.md +0 -119
  206. package/.morph/framework/templates/docs/spec.md +0 -198
  207. package/.morph/framework/templates/docs/ui-components.md +0 -124
  208. package/.morph/framework/templates/docs/ui-design-system.md +0 -76
  209. package/.morph/framework/templates/docs/ui-flows.md +0 -167
  210. package/.morph/framework/templates/docs/ui-mockups.md +0 -98
  211. package/.morph/framework/templates/docs/user-stories.md +0 -34
  212. package/.morph/framework/templates/examples/design-system-examples.md +0 -357
  213. package/.morph/framework/templates/examples/spec-examples.md +0 -90
  214. package/.morph/framework/templates/feature/decisions.md +0 -187
  215. package/.morph/framework/templates/feature/recap.md +0 -146
  216. package/.morph/framework/templates/feature/tasks.md +0 -199
  217. package/.morph/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +0 -43
  218. package/.morph/framework/templates/frontend/nextjs/client-component.tsx.hbs +0 -26
  219. package/.morph/framework/templates/frontend/nextjs/env.mjs.hbs +0 -32
  220. package/.morph/framework/templates/frontend/nextjs/feature-form.tsx.hbs +0 -56
  221. package/.morph/framework/templates/frontend/nextjs/page.tsx.hbs +0 -22
  222. package/.morph/framework/templates/frontend/nextjs/tsconfig.json.hbs +0 -26
  223. package/.morph/framework/templates/frontend/nextjs/use-feature.ts.hbs +0 -54
  224. package/.morph/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  225. package/.morph/framework/templates/infrastructure/azure/README.md +0 -286
  226. package/.morph/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  227. package/.morph/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  228. package/.morph/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  229. package/.morph/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  230. package/.morph/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  231. package/.morph/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  232. package/.morph/framework/templates/infrastructure/azure/deploy.sh +0 -208
  233. package/.morph/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  234. package/.morph/framework/templates/infrastructure/azure/main.bicep +0 -189
  235. package/.morph/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  236. package/.morph/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  237. package/.morph/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  238. package/.morph/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  239. package/.morph/framework/templates/infrastructure/azure/storage.bicep +0 -106
  240. package/.morph/framework/templates/infrastructure/docker/Dockerfile.template +0 -58
  241. package/.morph/framework/templates/infrastructure/docker/docker-compose.template.yml +0 -67
  242. package/.morph/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +0 -38
  243. package/.morph/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +0 -48
  244. package/.morph/framework/templates/infrastructure/docker/easypanel.template.json +0 -54
  245. package/.morph/framework/templates/infrastructure/github/README.md +0 -593
  246. package/.morph/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  247. package/.morph/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -45
  248. package/.morph/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +0 -27
  249. package/.morph/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  250. package/.morph/framework/templates/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -31
  251. package/.morph/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -59
  252. package/.morph/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -39
  253. package/.morph/framework/templates/integrations/asaas-client.cs +0 -387
  254. package/.morph/framework/templates/integrations/asaas-webhook.cs +0 -351
  255. package/.morph/framework/templates/integrations/azure-identity-config.cs +0 -288
  256. package/.morph/framework/templates/integrations/clerk-config.cs +0 -258
  257. package/.morph/framework/templates/meta-prompts/fusion/fusion-agent.md +0 -76
  258. package/.morph/framework/templates/meta-prompts/fusion/fusion-aggregator.md +0 -100
  259. package/.morph/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
  260. package/.morph/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
  261. package/.morph/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
  262. package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
  263. package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
  264. package/.morph/framework/templates/meta-prompts/squad-leaders/backend-squad.md +0 -90
  265. package/.morph/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +0 -126
  266. package/.morph/framework/templates/meta-prompts/squad-leaders/squad-leader.md +0 -43
  267. package/.morph/framework/templates/meta-prompts/validators/checkpoint-validator.md +0 -107
  268. package/.morph/framework/templates/meta-prompts/validators/pre-commit-validator.md +0 -95
  269. package/.morph/framework/templates/project-structure/dotnet-ddd.md +0 -70
  270. package/.morph/framework/templates/saas/subscription.cs +0 -347
  271. package/.morph/framework/templates/saas/tenant.cs +0 -338
  272. package/.morph/framework/templates/state.template.json +0 -17
  273. package/.morph/framework/templates/ui/FluentDesignTheme.cs +0 -149
  274. package/.morph/framework/templates/ui/MudTheme.cs +0 -281
  275. package/.morph/framework/templates/ui/design-system.css +0 -226
  276. package/.morph/logs/tool-failures.log +0 -17
  277. package/.morph/memory/pre-compact-2026-02-24T17-43-30-049Z.json +0 -16
  278. package/.morph/plans/eager-watching-bunny.md +0 -105
  279. package/.morph/plans/temporal-seeking-nebula.md +0 -45
  280. package/.morph/state.json +0 -48
  281. package/CLAUDE.md +0 -77
  282. package/docs/ARCHITECTURE.md +0 -331
  283. package/docs/COMMAND-FLOWS.md +0 -368
  284. package/docs/claude-alignment-report.md +0 -137
  285. package/docs/examples/order-management/contracts.cs +0 -84
  286. package/docs/examples/order-management/proposal.md +0 -24
  287. package/docs/examples/order-management/spec.md +0 -162
  288. package/docs/plans/2026-02-22-claude-docs-morph-alignment-analysis.md +0 -512
  289. package/docs/plans/2026-02-22-claude-settings.md +0 -515
  290. package/docs/plans/2026-02-22-morph-cc-alignment-impl.md +0 -728
  291. package/docs/plans/2026-02-22-morph-spec-next.md +0 -478
  292. package/docs/plans/2026-02-22-native-alignment-design.md +0 -199
  293. package/docs/plans/2026-02-22-native-alignment-impl.md +0 -925
  294. package/docs/plans/2026-02-22-native-enrichment-design.md +0 -244
  295. package/docs/plans/2026-02-22-native-enrichment.md +0 -735
  296. package/docs/plans/2026-02-23-ddd-architecture-refactor.md +0 -1153
  297. package/docs/plans/2026-02-23-ddd-nextsteps.md +0 -682
  298. package/docs/plans/2026-02-23-infra-architect-refactor.md +0 -437
  299. package/docs/plans/2026-02-23-nextjs-code-review-design.md +0 -156
  300. package/docs/plans/2026-02-23-nextjs-code-review-impl.md +0 -1254
  301. package/docs/plans/2026-02-23-nextjs-standards-design.md +0 -149
  302. package/docs/plans/2026-02-23-nextjs-standards-impl.md +0 -1846
  303. package/scripts/generate-refs.js +0 -336
  304. package/scripts/generate-standards-registry.js +0 -44
  305. package/scripts/scan-nextjs.mjs +0 -169
  306. package/scripts/validate-real.mjs +0 -255
  307. package/src/commands/feature/create-story.js +0 -362
  308. package/src/commands/feature/index.js +0 -6
  309. package/src/commands/feature/shard-spec.js +0 -225
  310. package/src/commands/feature/sprint-status.js +0 -250
  311. package/src/commands/generation/generate-onboarding.js +0 -169
  312. package/src/commands/generation/generate.js +0 -276
  313. package/src/commands/generation/index.js +0 -5
  314. package/src/commands/learning/capture-pattern.js +0 -121
  315. package/src/commands/learning/index.js +0 -5
  316. package/src/commands/learning/search-patterns.js +0 -126
  317. package/src/commands/mcp/mcp.js +0 -102
  318. package/src/commands/project/changes.js +0 -66
  319. package/src/commands/project/cost.js +0 -179
  320. package/src/commands/project/diff.js +0 -278
  321. package/src/commands/project/revert.js +0 -173
  322. package/src/commands/project/standards.js +0 -80
  323. package/src/commands/project/sync.js +0 -167
  324. package/src/commands/project/update-agents.js +0 -23
  325. package/src/commands/state/rollback-phase.js +0 -185
  326. package/src/commands/templates/template-customize.js +0 -87
  327. package/src/commands/templates/template-list.js +0 -114
  328. package/src/commands/templates/template-show.js +0 -129
  329. package/src/commands/templates/template-validate.js +0 -91
  330. package/src/commands/utils/troubleshoot.js +0 -222
  331. package/src/commands/validation/analyze-blazor-concurrency.js +0 -193
  332. package/src/commands/validation/lint-fluent.js +0 -352
  333. package/src/commands/validation/validate-blazor-state.js +0 -210
  334. package/src/commands/validation/validate-blazor.js +0 -156
  335. package/src/commands/validation/validate-css.js +0 -84
  336. package/src/lib/detectors/conversation-analyzer.js +0 -163
  337. package/src/lib/learning/index.js +0 -7
  338. package/src/lib/learning/learning-system.js +0 -520
  339. package/src/lib/troubleshooting/index.js +0 -8
  340. package/src/lib/troubleshooting/troubleshoot-grep.js +0 -198
  341. package/src/lib/troubleshooting/troubleshoot-index.js +0 -144
  342. package/src/llm/environment-detector.js +0 -43
@@ -1,221 +1,203 @@
1
- # morph-spec Cheat Sheet
2
-
3
- ## Setup
4
-
5
- ```bash
6
- npm install -g @polymorphism-tech/morph-spec # install globally
7
- morph-spec init # initialize project
8
- morph-spec init --wizard # interactive wizard
9
- morph-spec init --force # overwrite existing
10
- morph-spec update # sync framework files
11
- morph-spec doctor # health check
12
- morph-spec --version
13
- ```
14
-
15
- ---
16
-
17
- ## Phase workflow
18
-
19
- ```
20
- proposal → setup → [uiux] → design → clarify → tasks → implement → [sync]
21
- ```
22
-
23
- Phases in brackets are optional.
24
-
25
- | Phase | Directory | Output files | Gate |
26
- |-------|-----------|--------------|------|
27
- | proposal | `0-proposal/` | `proposal.md` | ✅ Approval |
28
- | setup | *(no output)* | context loaded | — |
29
- | uiux *(optional)* | `2-ui/` | `design-system.md`, `mockups.md`, `components.md`, `flows.md` | ✅ Approval |
30
- | design | `1-design/` | `spec.md`, `contracts.cs`, `decisions.md` | ✅ Approval |
31
- | clarify | `1-design/` | spec updated | — |
32
- | tasks | `3-tasks/` | `tasks.md` | ✅ Approval |
33
- | implement | `4-implement/` | code + `recap.md` | — |
34
- | sync *(optional)* | `.morph/context/` | standards updated | — |
35
-
36
- ---
37
-
38
- ## Slash commands (Claude Code)
39
-
40
- | Command | Description |
41
- |---------|-------------|
42
- | `/morph-proposal {feature}` | Full spec pipeline — phases 0–4 with approval gates |
43
- | `/morph-apply {feature}` | Implement approved feature — phase 5 |
44
- | `/morph-status` | Project-wide feature status dashboard |
45
- | `/morph-preflight` | Pre-implementation validation (7 checks) |
46
-
47
- ---
48
-
49
- ## CLI — project management
50
-
51
- ```bash
52
- morph-spec init [--wizard] [--force] [--skip-detection] [--skip-mcp]
53
- morph-spec update [--wizard] [--templates] [--standards]
54
- morph-spec doctor
55
- morph-spec detect [--verbose]
56
- morph-spec update-agents # refresh .claude/agents/
57
- ```
58
-
59
- ---
60
-
61
- ## CLI — feature workflow
62
-
63
- ```bash
64
- morph-spec state list # all features
65
- morph-spec state get {feature} [--json] # feature detail
66
- morph-spec state show {feature} # phase + approval status
67
- morph-spec state set {feature} {key} {value} # update property
68
- morph-spec state checkpoint {feature} "note" # manual checkpoint
69
- morph-spec phase advance {feature} # advance to next phase
70
- morph-spec status {feature} [--json] [--verbose]
71
- morph-spec diff {feature} # spec changes since snapshot
72
- morph-spec diff-save {feature} # save snapshot
73
- morph-spec rollback {feature} --to {phase} # revert to phase
74
- morph-spec task done {feature} # mark task complete
75
- morph-spec task start {feature} # start next task
76
- morph-spec task next {feature} # preview next task
77
- ```
78
-
79
- ---
80
-
81
- ## CLI validation
82
-
83
- ```bash
84
- morph-spec validate # all validators
85
- morph-spec validate architecture
86
- morph-spec validate packages
87
- morph-spec validate contrast [--wcag-aaa]
88
- morph-spec validate-blazor [path]
89
- morph-spec validate-blazor-state [path]
90
- morph-spec analyze-blazor-concurrency [path]
91
- morph-spec validate-css [path]
92
- morph-spec validate-feature {feature} [--phase {phase}] [--json]
93
- ```
94
-
95
- ---
96
-
97
- ## CLI — standards
98
-
99
- ```bash
100
- morph-spec standards --list
101
- morph-spec standards --list --category {name} # categories: core, backend, frontend, infra, ...
102
- morph-spec standards --search {query}
103
- morph-spec standards --show {id}
104
- morph-spec standards --json
105
- ```
106
-
107
- ---
108
-
109
- ## CLI utilities
110
-
111
- ```bash
112
- morph-spec cost {bicep-file} # Azure cost estimate
113
- morph-spec cost {bicep-file} --verbose
114
- morph-spec cost {bicep-file} --strict # exit 1 if over limit
115
- morph-spec troubleshoot {keywords}
116
- morph-spec troubleshoot --category {name}
117
- morph-spec session-summary {feature}
118
- ```
119
-
120
- ---
121
-
122
- ## State — mark-output
123
-
124
- ```bash
125
- morph-spec state mark-output {feature} proposal
126
- morph-spec state mark-output {feature} spec
127
- morph-spec state mark-output {feature} contracts
128
- morph-spec state mark-output {feature} decisions
129
- morph-spec state mark-output {feature} tasks
130
- morph-spec state mark-output {feature} recap
131
-
132
- # UI outputs (camelCase or kebab-case both work)
133
- morph-spec state mark-output {feature} uiDesignSystem
134
- morph-spec state mark-output {feature} uiMockups
135
- morph-spec state mark-output {feature} uiComponents
136
- morph-spec state mark-output {feature} uiFlows
137
- ```
138
-
139
- ---
140
-
141
- ## State — agents
142
-
143
- ```bash
144
- morph-spec state add-agent {feature} {agent-id}
145
- morph-spec state remove-agent {feature} {agent-id}
146
- morph-spec detect-agents "{description}" # detect agents for request
147
- morph-spec detect-agents --json "{description}" # with standards
148
- morph-spec detect-agents --ids-only "{description}"
149
- ```
150
-
151
- ---
152
-
153
- ## Checkpoints
154
-
155
- ```bash
156
- morph-spec checkpoint-save {feature}
157
- morph-spec checkpoint-restore {feature}
158
- morph-spec checkpoint-list {feature}
159
- ```
160
-
161
- ---
162
-
163
- ## Directory structure
164
-
165
- ```
166
- .morph/
167
- ├── config/
168
- │ └── config.json # project config (editable)
169
- ├── framework/ # READ-ONLY
170
- ├── agents.json # 37 agents, 4 tiers
171
- ├── standards/ # 74 standards across 11 categories
172
- │ └── templates/ # code and IaC templates
173
- ├── context/ # project context (editable)
174
- ├── README.md
175
- │ └── standards.md
176
- ├── features/
177
- │ └── {feature}/
178
- │ ├── 0-proposal/proposal.md
179
- │ ├── 1-design/spec.md, contracts.cs, decisions.md
180
- │ ├── 2-ui/design-system.md, mockups.md, components.md, flows.md
181
- │ ├── 3-tasks/tasks.md
182
- │ └── 4-implement/recap.md
183
- ├── checkpoints/
184
- ├── logs/
185
- └── state.json # READ-ONLY CLI managed
186
-
187
- .claude/
188
- ├── commands/ # slash commands
189
- ├── skills/ # framework skills (SKILL.md per dir)
190
- ├── agents/ # native subagents (37)
191
- │ ├── morph-{id}.md # tier 1-2 agents
192
- │ └── morph-domain-{name}.md # tier 3 domain agents
193
- ├── rules/ # path-scoped rules (5 files)
194
- └── settings.local.json # hooks (11)
195
- ```
196
-
197
- ---
198
-
199
- ## Protected files
200
-
201
- These files are never edited directly. Use CLI commands or `morph-spec update` instead:
202
-
203
- | Path | Protected by |
204
- |------|-------------|
205
- | `.morph/state.json` | `permissions.deny` |
206
- | `.morph/framework/**` | `permissions.deny` |
207
- | Approved spec/contracts | `protect-spec-files.js` hook |
208
-
209
- ---
210
-
211
- ## Links
212
-
213
- - [QUICKSTART.md](QUICKSTART.md) — step-by-step guide
214
- - [ARCHITECTURE.md](ARCHITECTURE.md) — system design
215
- - [CHANGELOG.md](../CHANGELOG.md) — release history
216
- - [npm](https://www.npmjs.com/package/@polymorphism-tech/morph-spec)
217
- - support@polymorphism.com.br
218
-
219
- ---
220
-
221
- *morph-spec v4.6.0 by Polymorphism Tech*
1
+ # morph-spec Cheat Sheet
2
+
3
+ ## Setup
4
+
5
+ ```bash
6
+ npm install -g @polymorphism-tech/morph-spec # install globally
7
+ morph-spec init # initialize project
8
+ morph-spec init --wizard # interactive wizard
9
+ morph-spec init --force # overwrite existing
10
+ morph-spec update # sync framework files
11
+ morph-spec doctor # health check
12
+ morph-spec --version
13
+ ```
14
+
15
+ ---
16
+
17
+ ## Phase workflow
18
+
19
+ ```
20
+ proposal → setup → [uiux] → design → clarify → tasks → implement → [sync]
21
+ ```
22
+
23
+ Phases in brackets are optional.
24
+
25
+ | Phase | Directory | Output files | Gate |
26
+ |-------|-----------|--------------|------|
27
+ | proposal | `0-proposal/` | `proposal.md` | ✅ Approval |
28
+ | setup | *(no output)* | context loaded | — |
29
+ | uiux *(optional)* | `2-ui/` | `design-system.md`, `mockups.md`, `components.md`, `flows.md` | ✅ Approval |
30
+ | design | `1-design/` | `spec.md`, `contracts.cs`, `decisions.md` | ✅ Approval |
31
+ | clarify | `1-design/` | spec updated | — |
32
+ | tasks | `3-tasks/` | `tasks.md` | ✅ Approval |
33
+ | implement | `4-implement/` | code + `recap.md` | — |
34
+ | sync *(optional)* | `.morph/context/` | standards updated | — |
35
+
36
+ ---
37
+
38
+ ## Slash commands (Claude Code)
39
+
40
+ | Command | Description |
41
+ |---------|-------------|
42
+ | `/morph-proposal {feature}` | Full spec pipeline — phases 0–4 with approval gates |
43
+ | `/morph-apply {feature}` | Implement approved feature — phase 5 |
44
+ | `/morph-status` | Project-wide feature status dashboard |
45
+ | `/morph-preflight` | Pre-implementation validation (7 checks) |
46
+
47
+ ---
48
+
49
+ ## CLI — project management
50
+
51
+ ```bash
52
+ morph-spec init [--force] [--skip-mcp]
53
+ morph-spec update [--templates] [--standards]
54
+ morph-spec doctor
55
+ ```
56
+
57
+ ---
58
+
59
+ ## CLI — feature workflow
60
+
61
+ ```bash
62
+ morph-spec state list # all features
63
+ morph-spec state get {feature} [--json] # feature detail
64
+ morph-spec state set {feature} {key} {value} # update property
65
+ morph-spec phase advance {feature} # advance to next phase
66
+ morph-spec status {feature} [--json] [--verbose]
67
+ morph-spec task done {feature} # mark task complete
68
+ morph-spec task start {feature} # start next task
69
+ morph-spec task next {feature} # preview next task
70
+ ```
71
+
72
+ ---
73
+
74
+ ## CLI validation
75
+
76
+ ```bash
77
+ morph-spec validate # all validators
78
+ morph-spec validate architecture
79
+ morph-spec validate packages
80
+ morph-spec validate contrast [--wcag-aaa]
81
+ morph-spec validate-feature {feature} [--phase {phase}] [--json]
82
+ ```
83
+
84
+ ---
85
+
86
+ ## CLI — utilities
87
+
88
+ ```bash
89
+ morph-spec generate recap {feature} # auto-generate recap.md
90
+ morph-spec template render {id} {output} {vars-json}
91
+ morph-spec trust status [feature]
92
+ morph-spec trust set {feature} {level} [reason]
93
+ morph-spec mcp setup [name] [--list] [--auto]
94
+ ```
95
+
96
+ ---
97
+
98
+ ## State — mark-output
99
+
100
+ ```bash
101
+ morph-spec state mark-output {feature} proposal
102
+ morph-spec state mark-output {feature} spec
103
+ morph-spec state mark-output {feature} contracts
104
+ morph-spec state mark-output {feature} decisions
105
+ morph-spec state mark-output {feature} tasks
106
+ morph-spec state mark-output {feature} recap
107
+
108
+ # UI outputs (camelCase or kebab-case both work)
109
+ morph-spec state mark-output {feature} uiDesignSystem
110
+ morph-spec state mark-output {feature} uiMockups
111
+ morph-spec state mark-output {feature} uiComponents
112
+ morph-spec state mark-output {feature} uiFlows
113
+ ```
114
+
115
+ ---
116
+
117
+ ## State — agents
118
+
119
+ ```bash
120
+ morph-spec state add-agent {feature} {agent-id}
121
+ morph-spec state remove-agent {feature} {agent-id}
122
+ ```
123
+
124
+ ---
125
+
126
+ ## Checkpoints
127
+
128
+ ```bash
129
+ morph-spec checkpoint-save {feature}
130
+ morph-spec checkpoint-restore {feature}
131
+ morph-spec checkpoint-list {feature}
132
+ ```
133
+
134
+ ---
135
+
136
+ ## Approvals
137
+
138
+ ```bash
139
+ morph-spec approve {feature} {gate} # approve a gate
140
+ morph-spec approval-status {feature} # show gate status
141
+ ```
142
+
143
+ ---
144
+
145
+ ## Directory structure
146
+
147
+ ```
148
+ .morph/
149
+ ├── config/
150
+ │ └── config.json # project config (editable)
151
+ ├── framework/ # READ-ONLY
152
+ │ ├── agents.json # 38 agents, 4 tiers
153
+ │ ├── standards/ # 82 standards across 11 categories
154
+ │ └── templates/ # code and IaC templates
155
+ ├── context/ # project context (editable)
156
+ │ ├── README.md
157
+ │ └── standards.md
158
+ ├── features/
159
+ │ └── {feature}/
160
+ │ ├── 0-proposal/proposal.md
161
+ │ ├── 1-design/spec.md, contracts.cs, decisions.md
162
+ │ ├── 2-ui/design-system.md, mockups.md, components.md, flows.md
163
+ │ ├── 3-tasks/tasks.md
164
+ │ └── 4-implement/recap.md
165
+ ├── checkpoints/
166
+ ├── logs/
167
+ └── state.json # READ-ONLY — CLI managed
168
+
169
+ .claude/
170
+ ├── commands/ # slash commands
171
+ ├── skills/ # framework skills (SKILL.md per dir)
172
+ ├── agents/ # native subagents (38)
173
+ ├── morph-{id}.md # tier 1-2 agents
174
+ └── morph-domain-{name}.md # tier 3 domain agents
175
+ ├── rules/ # path-scoped rules (6 files)
176
+ └── settings.local.json # hooks (11)
177
+ ```
178
+
179
+ ---
180
+
181
+ ## Protected files
182
+
183
+ These files are never edited directly. Use CLI commands or `morph-spec update` instead:
184
+
185
+ | Path | Protected by |
186
+ |------|-------------|
187
+ | `.morph/state.json` | `permissions.deny` |
188
+ | `.morph/framework/**` | `permissions.deny` |
189
+ | Approved spec/contracts | `protect-spec-files.js` hook |
190
+
191
+ ---
192
+
193
+ ## Links
194
+
195
+ - [QUICKSTART.md](QUICKSTART.md) — step-by-step guide
196
+ - [ARCHITECTURE.md](ARCHITECTURE.md) — system design
197
+ - [CHANGELOG.md](../CHANGELOG.md) — release history
198
+ - [npm](https://www.npmjs.com/package/@polymorphism-tech/morph-spec)
199
+ - support@polymorphism.com.br
200
+
201
+ ---
202
+
203
+ *morph-spec v4.8.4 by Polymorphism Tech*
@@ -29,7 +29,7 @@ morph-spec init
29
29
  - Creates `.morph/` with framework files, standards, and templates
30
30
  - Creates `.morph/context/` with inferred project context
31
31
  - Installs `.claude/skills/`, `.claude/agents/`, `.claude/rules/`
32
- - Writes `.claude/settings.local.json` with 11 Claude Code hooks
32
+ - Writes `.claude/settings.local.json` with 10 Claude Code hooks
33
33
  - Copies `CLAUDE.md` with runtime instructions
34
34
 
35
35
  Verify the installation:
@@ -118,12 +118,6 @@ morph-spec state get my-feature
118
118
  morph-spec status my-feature
119
119
  ```
120
120
 
121
- See what phase the feature is in and which approval gates have been passed:
122
-
123
- ```bash
124
- morph-spec state show my-feature
125
- ```
126
-
127
121
  Advance to the next phase manually (when needed):
128
122
 
129
123
  ```bash
@@ -209,4 +203,4 @@ morph-spec doctor
209
203
 
210
204
  ---
211
205
 
212
- *morph-spec v4.6.0 by Polymorphism Tech*
206
+ *morph-spec v4.8.4 by Polymorphism Tech*
@@ -74,4 +74,4 @@ MCP tools load on-demand instead of all at startup — keeps context clean for a
74
74
 
75
75
  ---
76
76
 
77
- *MORPH-SPEC v4.5.0 by Polymorphism Tech*
77
+ *MORPH-SPEC by Polymorphism Tech*
@@ -22,9 +22,9 @@ npx morph-spec state get {feature-name}
22
22
  ### Workflow
23
23
 
24
24
  1. **Detecte agentes automaticamente:**
25
- ```bash
26
- npx morph-spec detect-agents "$ARGUMENTS"
27
- ```
25
+ - Read `.morph/framework/agents.json`
26
+ - Para cada agente, compare `domains` e `keywords` com a feature solicitada
27
+ - Registre os agentes relevantes: `npx morph-spec state add-agent {feature-name} {agent-id}`
28
28
 
29
29
  2. **Invoque skills dos agentes detectados:**
30
30
  - Para agentes com `skillPath` em agents.json, consulte o Skill correspondente
@@ -12,12 +12,10 @@ framework/hooks/
12
12
  │ ├── user-prompt/
13
13
  │ │ └── enrich-prompt.js # Context-aware prompt enrichment
14
14
  │ ├── pre-tool-use/
15
- │ │ ├── protect-readonly-files.js # Block edits to state.json & framework/
16
15
  │ │ ├── protect-spec-files.js # Block edits to approved spec artifacts
17
16
  │ │ └── enforce-phase-writes.js # Enforce writes to correct phase dir
18
17
  │ ├── post-tool-use/
19
- │ │ ├── track-output-creation.js # Auto-mark outputs as created
20
- │ │ └── dispatch.js # Dispatch on CLI commands
18
+ │ │ └── dispatch.js # Dispatch on CLI commands (auto-checkpoint)
21
19
  │ ├── stop/
22
20
  │ │ └── validate-completion.js # Advisory: warn about incomplete work
23
21
  │ ├── pre-compact/
@@ -85,7 +83,6 @@ The installer writes to `.claude/settings.local.json`:
85
83
  { "matcher": "Bash", "hooks": [...] }
86
84
  ],
87
85
  "PostToolUse": [
88
- { "matcher": "Write", "hooks": [...] },
89
86
  { "matcher": "Bash", "hooks": [...] }
90
87
  ],
91
88
  "Stop": [{ "hooks": [...] }],
@@ -202,4 +199,4 @@ morph-spec doctor --reset
202
199
 
203
200
  ---
204
201
 
205
- *MORPH-SPEC v4.5.0 — Hooks Architecture v2.5*
202
+ *MORPH-SPEC by Polymorphism Tech — Hooks Architecture v2.5*
@@ -1,58 +1,7 @@
1
1
  #!/usr/bin/env node
2
-
3
2
  /**
4
- * PreToolUse Hook: Protect state.json & Framework Files
5
- *
6
- * Event: PreToolUse | Matcher: Write|Edit
7
- *
8
- * Blocks direct edits to:
9
- * - .morph/state.json → must use CLI commands
10
- * - .morph/framework/** → read-only framework files
11
- *
12
- * Fail-open: exits 0 on any error.
3
+ * DEPRECATED This hook has been replaced by native permissions.deny in settings.local.json.
4
+ * The file is kept as an empty stub. It is NOT registered in hooks-installer.js.
5
+ * Safe to delete.
13
6
  */
14
-
15
- import { readStdin } from '../../shared/stdin-reader.js';
16
- import { stateExists } from '../../shared/state-reader.js';
17
- import { isStatePath, isFrameworkPath } from '../../shared/phase-utils.js';
18
- import { block, pass } from '../../shared/hook-response.js';
19
-
20
- try {
21
- // Skip if not a morph-spec project
22
- if (!stateExists()) {
23
- pass();
24
- }
25
-
26
- const payload = await readStdin();
27
- if (!payload) pass();
28
-
29
- const filePath = payload?.tool_input?.file_path || payload?.tool_input?.path || '';
30
- if (!filePath) pass();
31
-
32
- // Block edits to state.json
33
- if (isStatePath(filePath)) {
34
- block(
35
- 'MORPH-SPEC: Direct edits to .morph/state.json are blocked.\n' +
36
- 'Use CLI commands instead:\n' +
37
- ' morph-spec state set <feature> <key> <value>\n' +
38
- ' morph-spec phase advance <feature>\n' +
39
- ' morph-spec task done <feature> <taskId>\n' +
40
- ' morph-spec approve <feature> <gate>'
41
- );
42
- }
43
-
44
- // Block edits to framework files
45
- if (isFrameworkPath(filePath)) {
46
- block(
47
- 'MORPH-SPEC: Files in .morph/framework/ are read-only.\n' +
48
- 'These files are managed by the framework and overwritten on update.\n' +
49
- 'To customize, create project-specific overrides in .morph/context/ or .morph/config/.'
50
- );
51
- }
52
-
53
- // All other files are allowed
54
- pass();
55
- } catch {
56
- // Fail-open
57
- process.exit(0);
58
- }
7
+ process.exit(0);
@@ -11,13 +11,26 @@
11
11
  * Fail-open: exits 0 on any error.
12
12
  */
13
13
 
14
- import { loadState, getActiveFeature, getPendingGates, getMissingOutputs } from '../../shared/state-reader.js';
14
+ import { loadState, getActiveFeature, getPendingGates, getMissingOutputs, derivePhaseForFeature } from '../../shared/state-reader.js';
15
15
  import { stateExists } from '../../shared/state-reader.js';
16
16
  import { injectContext, pass } from '../../shared/hook-response.js';
17
17
  import { readFileSync, existsSync } from 'fs';
18
18
  import { join } from 'path';
19
19
 
20
- const SPEC_MAX_CHARS = 3000;
20
+ const DEFAULT_SPEC_MAX_CHARS = 3000;
21
+
22
+ function getSpecMaxChars() {
23
+ try {
24
+ const configPath = join(process.cwd(), '.morph/config/config.json');
25
+ if (!existsSync(configPath)) return DEFAULT_SPEC_MAX_CHARS;
26
+ const cfg = JSON.parse(readFileSync(configPath, 'utf-8'));
27
+ return cfg?.hooks?.specInjectionLimit ?? DEFAULT_SPEC_MAX_CHARS;
28
+ } catch {
29
+ return DEFAULT_SPEC_MAX_CHARS;
30
+ }
31
+ }
32
+
33
+ const SPEC_MAX_CHARS = getSpecMaxChars();
21
34
 
22
35
  try {
23
36
  if (!stateExists()) pass();
@@ -30,7 +43,8 @@ try {
30
43
 
31
44
  if (active) {
32
45
  const { name, feature } = active;
33
- lines.push(`- Active feature: ${name} (phase: ${feature.phase}, workflow: ${feature.workflow || 'auto'})`);
46
+ const phase = derivePhaseForFeature(name);
47
+ lines.push(`- Active feature: ${name} (phase: ${phase}, workflow: ${feature.workflow || 'auto'})`);
34
48
  lines.push(`- Status: ${feature.status}`);
35
49
 
36
50
  // Task progress
@@ -78,8 +92,9 @@ try {
78
92
  const featureNames = Object.keys(state.features);
79
93
  lines.push(`- Features: ${featureNames.length} (${featureNames.join(', ')})`);
80
94
 
81
- for (const [name, feature] of Object.entries(state.features)) {
82
- lines.push(` - ${name}: phase=${feature.phase}, status=${feature.status}`);
95
+ for (const [fname, feat] of Object.entries(state.features)) {
96
+ const fPhase = derivePhaseForFeature(fname);
97
+ lines.push(` - ${fname}: phase=${fPhase}, status=${feat.status}`);
83
98
  }
84
99
  }
85
100
 
@@ -347,7 +347,12 @@ def get_session_name(entries):
347
347
  def get_block_start(transcript_path, entries):
348
348
  """Find start of current 5-hour billing block. Cached per transcript."""
349
349
  h = hashlib.sha256(transcript_path.encode()).hexdigest()[:16]
350
- cache_dir = Path.home() / '.cache' / 'morph-spec'
350
+ # Use platform-appropriate cache directory
351
+ if os.name == 'nt':
352
+ base = Path(os.environ.get('LOCALAPPDATA', str(Path.home() / 'AppData' / 'Local')))
353
+ cache_dir = base / 'morph-spec' / 'cache'
354
+ else:
355
+ cache_dir = Path.home() / '.cache' / 'morph-spec'
351
356
  cache_file = cache_dir / f'block-{h}.json'
352
357
  now = time.time()
353
358
  block_s = 5 * 3600