@polymorphism-tech/morph-spec 4.11.1 → 4.13.0

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 (317) hide show
  1. package/README.md +21 -29
  2. package/bin/morph-spec.js +41 -24
  3. package/bin/task-manager.js +962 -1341
  4. package/bin/validate.js +1 -1
  5. package/claude-plugin.json +1 -1
  6. package/docs/CHEATSHEET.md +10 -11
  7. package/docs/QUICKSTART.md +15 -15
  8. package/framework/CLAUDE.md +5 -2
  9. package/framework/agents/README.md +3 -4
  10. package/framework/agents/ai-agents/ai-system-architect.md +6 -10
  11. package/framework/agents/architecture/seo-growth-hacker.md +166 -326
  12. package/framework/agents/architecture/standards-architect.md +21 -31
  13. package/framework/agents/backend/dotnet-senior.md +160 -86
  14. package/framework/agents/backend/ef-modeler.md +2 -6
  15. package/framework/agents/backend/hangfire-orchestrator.md +8 -9
  16. package/framework/agents/backend/ms-agent-expert.md +1 -1
  17. package/framework/agents/frontend/nextjs-expert.md +198 -133
  18. package/framework/agents/frontend/ui-ux-designer.md +226 -267
  19. package/framework/agents/infrastructure/infra-architect.md +191 -27
  20. package/framework/agents/integrations/clerk-auth.md +19 -26
  21. package/framework/agents/integrations/hangfire-integration.md +1 -4
  22. package/framework/agents.json +226 -1454
  23. package/framework/commands/morph-apply.md +4 -4
  24. package/framework/commands/morph-preflight.md +4 -26
  25. package/framework/commands/morph-proposal.md +19 -19
  26. package/framework/commands/morph-status.md +2 -2
  27. package/framework/commands/morph-troubleshoot.md +6 -13
  28. package/framework/hooks/README.md +1 -6
  29. package/framework/hooks/claude-code/post-tool-use/agent-complete.js +122 -0
  30. package/framework/hooks/claude-code/post-tool-use/validator-feedback.js +4 -6
  31. package/framework/hooks/claude-code/pre-compact/save-morph-context.js +12 -7
  32. package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +2 -2
  33. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +2 -2
  34. package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +5 -10
  35. package/framework/hooks/claude-code/session-start/inject-morph-context.js +63 -30
  36. package/framework/hooks/claude-code/session-start/resume-context.js +77 -0
  37. package/framework/hooks/claude-code/statusline.py +4 -5
  38. package/framework/hooks/claude-code/stop/validate-completion.js +4 -4
  39. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +8 -8
  40. package/framework/hooks/shared/compact-restore.js +28 -5
  41. package/framework/hooks/shared/dispatch-helpers.js +17 -0
  42. package/framework/hooks/shared/phase-utils.js +4 -8
  43. package/framework/hooks/shared/state-reader.js +34 -3
  44. package/framework/phases.json +7 -45
  45. package/framework/rules/ai-agents-standards.md +15 -0
  46. package/framework/rules/asaas-standards.md +13 -0
  47. package/framework/rules/clerk-standards.md +13 -0
  48. package/framework/rules/csharp-standards.md +8 -4
  49. package/framework/rules/data-standards.md +18 -0
  50. package/framework/rules/dotnet-templates.md +87 -0
  51. package/framework/rules/frontend-standards.md +13 -13
  52. package/framework/rules/hangfire-standards.md +13 -0
  53. package/framework/rules/infrastructure-standards.md +27 -16
  54. package/framework/rules/morph-workflow.md +73 -13
  55. package/framework/rules/nextjs-standards.md +1 -0
  56. package/framework/rules/nextjs-templates.md +40 -0
  57. package/framework/rules/resend-standards.md +12 -0
  58. package/framework/rules/supabase-standards.md +29 -0
  59. package/framework/skills/README.md +6 -8
  60. package/framework/skills/level-0-meta/mcp-registry.json +21 -99
  61. package/framework/{standards/ai-agents/team-orchestration.md → skills/level-0-meta/morph-agent-teams/SKILL.md} +472 -479
  62. package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +28 -1
  63. package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
  64. package/framework/skills/level-0-meta/morph-code-review/SKILL.md +1 -5
  65. package/framework/skills/level-0-meta/morph-code-review/scripts/scan-csharp.mjs +1 -1
  66. package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +23 -41
  67. package/framework/skills/level-0-meta/morph-init/SKILL.md +18 -14
  68. package/framework/skills/level-0-meta/morph-parallel-dispatch/SKILL.md +225 -0
  69. package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +20 -0
  70. package/framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md +4 -8
  71. package/framework/skills/level-0-meta/morph-tool-usage-guide/references/tools-per-phase.md +15 -59
  72. package/framework/skills/level-0-meta/morph-verification-before-completion/SKILL.md +7 -19
  73. package/framework/skills/level-0-meta/morph-verification-before-completion/scripts/check-phase-outputs.mjs +8 -8
  74. package/framework/skills/level-1-workflows/README.md +1 -1
  75. package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +49 -50
  76. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +58 -124
  77. package/framework/skills/level-1-workflows/morph-phase-design/references/architecture-analysis-guide.md +5 -50
  78. package/framework/skills/level-1-workflows/morph-phase-design/references/spec-example.md +1 -1
  79. package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +127 -159
  80. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +4 -3
  81. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/spec-reviewer-prompt.md +2 -2
  82. package/framework/skills/level-1-workflows/morph-phase-implement/references/recap-example.md +1 -1
  83. package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +17 -13
  84. package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +22 -40
  85. package/framework/skills/level-1-workflows/morph-phase-tasks/references/task-planning-patterns.md +0 -2
  86. package/framework/skills/level-1-workflows/morph-phase-tasks/references/tasks-example.md +5 -5
  87. package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +275 -61
  88. package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +1 -1
  89. package/framework/squad-templates/backend-only.json +6 -6
  90. package/framework/squad-templates/frontend-only.json +17 -8
  91. package/framework/squad-templates/full-stack.json +29 -24
  92. package/framework/standards/STANDARDS.json +1021 -2338
  93. package/framework/standards/backend/dotnet/fluent-validation-vsa.md +200 -0
  94. package/framework/standards/backend/dotnet/result-pattern.md +213 -0
  95. package/framework/standards/backend/dotnet/scalar-ui.md +172 -0
  96. package/framework/standards/backend/dotnet/scrutor.md +158 -0
  97. package/framework/standards/backend/dotnet/vsa-handler-patterns.md +274 -0
  98. package/framework/standards/frontend/nextjs/motion-patterns.md +1 -1
  99. package/framework/standards/infrastructure/supabase/mcp-setup.md +83 -193
  100. package/framework/standards/integration/mcp/mcp-tools.md +91 -77
  101. package/framework/templates/IDE-SNIPPETS.md +2 -6
  102. package/framework/templates/README.md +709 -814
  103. package/framework/templates/REGISTRY.json +223 -762
  104. package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -0
  105. package/framework/templates/code/dotnet/abstractions/error.cs +60 -0
  106. package/framework/templates/code/dotnet/abstractions/handler.cs +12 -0
  107. package/framework/templates/code/dotnet/abstractions/result.cs +74 -0
  108. package/framework/templates/code/dotnet/backend/repository.cs +148 -141
  109. package/framework/templates/code/dotnet/constants/api-tags.cs +6 -0
  110. package/framework/templates/code/dotnet/exceptions/exception-handler.cs +32 -0
  111. package/framework/templates/code/dotnet/extensions/database-extensions.cs +20 -0
  112. package/framework/templates/code/dotnet/extensions/handler-registration.cs +38 -0
  113. package/framework/templates/code/dotnet/extensions/health-checks.cs +24 -0
  114. package/framework/templates/code/dotnet/extensions/map-endpoints.cs +35 -0
  115. package/framework/templates/code/dotnet/extensions/result-extensions.cs +29 -0
  116. package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -0
  117. package/framework/templates/code/dotnet/feature/entity.cs.hbs +8 -0
  118. package/framework/templates/code/dotnet/feature/errors.cs.hbs +8 -0
  119. package/framework/templates/code/dotnet/feature/handler.cs.hbs +24 -0
  120. package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -0
  121. package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -0
  122. package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -0
  123. package/framework/templates/code/dotnet/jobs/job.cs +21 -17
  124. package/framework/templates/code/dotnet/pipelines/logging-decorator.cs +31 -0
  125. package/framework/templates/code/dotnet/pipelines/validation-decorator.cs +97 -0
  126. package/framework/templates/code/dotnet/test.cs +192 -106
  127. package/framework/templates/context/ARCHITECTURE.md +89 -0
  128. package/framework/templates/context/CONTEXT-FEATURE.md +2 -2
  129. package/framework/templates/context/CONTEXT.md +180 -181
  130. package/framework/templates/context/design-system.md +342 -211
  131. package/framework/templates/docs/onboarding.md +2 -3
  132. package/framework/templates/docs/proposal.md +171 -182
  133. package/framework/templates/docs/spec.md +1 -3
  134. package/framework/templates/docs/ui-components.md +0 -72
  135. package/framework/templates/examples/design-system-examples.md +4 -4
  136. package/framework/templates/feature/decisions.md +0 -66
  137. package/framework/templates/feature/recap.md +1 -2
  138. package/framework/templates/infrastructure/github/README.md +56 -593
  139. package/framework/templates/integrations/clerk-config.cs +0 -41
  140. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  141. package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -2
  142. package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +83 -126
  143. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +2 -2
  144. package/framework/templates/project/validate.js +2 -4
  145. package/framework/templates/ui/design-system.css +1 -1
  146. package/framework/workflows/README.md +8 -8
  147. package/framework/workflows/configs/fast-track.json +51 -0
  148. package/framework/workflows/configs/full.json +68 -0
  149. package/framework/workflows/configs/standard.json +7 -3
  150. package/framework/workflows/docs/STORY-DRIVEN-DEVELOPMENT.md +1 -1
  151. package/framework/workflows/docs/enforcement-pipeline.md +18 -19
  152. package/framework/workflows/docs/full-morph.md +69 -76
  153. package/framework/workflows/docs/standard.md +49 -44
  154. package/framework/workflows/docs/ui-refresh.md +1 -1
  155. package/package.json +3 -3
  156. package/src/commands/agents/dispatch-agents.js +55 -116
  157. package/src/commands/context/context-refresh.js +79 -0
  158. package/src/commands/mcp/mcp-setup.js +28 -6
  159. package/src/commands/phase/phase-reset.js +1 -1
  160. package/src/commands/project/doctor.js +10 -32
  161. package/src/commands/project/init.js +32 -1
  162. package/src/commands/project/status.js +6 -12
  163. package/src/commands/scaffold/scaffold.js +131 -0
  164. package/src/commands/scope/escalate.js +1 -1
  165. package/src/commands/state/advance-phase.js +15 -29
  166. package/src/commands/state/state.js +20 -5
  167. package/src/commands/tasks/task.js +0 -30
  168. package/src/commands/validation/validate-feature.js +3 -10
  169. package/src/core/paths/output-schema.js +12 -13
  170. package/src/core/state/phase-state-machine.js +211 -217
  171. package/src/core/state/state-manager.js +9 -9
  172. package/src/lib/agents/agents-manager.js +2 -2
  173. package/src/lib/agents/output-collector.js +1 -2
  174. package/src/lib/detectors/design-system-detector.js +4 -4
  175. package/src/lib/detectors/index.js +1 -11
  176. package/src/lib/generators/architecture-scanner.js +640 -0
  177. package/src/lib/generators/context-generator.js +3 -3
  178. package/src/lib/generators/design-system-generator.js +508 -298
  179. package/src/lib/generators/index.js +12 -10
  180. package/src/lib/generators/metadata-extractor.js +386 -387
  181. package/src/lib/generators/recap-generator.js +4 -4
  182. package/src/lib/generators/scaffold-generator.js +317 -0
  183. package/src/lib/generators/settings-generator.js +0 -1
  184. package/src/lib/phase-chain/phase-validator.js +64 -42
  185. package/src/lib/stack/stack-profile.js +2 -2
  186. package/src/lib/standards/digest-builder.js +72 -285
  187. package/src/lib/tasks/task-parser.js +11 -5
  188. package/src/lib/validators/architecture/architecture-validator.js +259 -387
  189. package/src/lib/validators/content/content-validator.js +287 -287
  190. package/src/lib/validators/css/css-validator.js +340 -352
  191. package/src/lib/validators/design-system/design-system-validator.js +11 -5
  192. package/src/lib/validators/packages/package-validator.js +347 -360
  193. package/src/lib/validators/shared/issue-counter.js +14 -18
  194. package/src/lib/validators/validation-runner.js +3 -19
  195. package/src/scripts/setup-infra.js +1 -1
  196. package/src/utils/agents-installer.js +24 -3
  197. package/src/utils/file-copier.js +1 -0
  198. package/src/utils/hooks-installer.js +21 -19
  199. package/src/utils/skills-installer.js +178 -178
  200. package/framework/agents/architecture/prompt-engineer.md +0 -195
  201. package/framework/agents/backend/api-designer.md +0 -106
  202. package/framework/agents/frontend/blazor-builder.md +0 -229
  203. package/framework/agents/frontend/nextjs-ui-specialist.md +0 -218
  204. package/framework/agents/infrastructure/azure-architect.md +0 -150
  205. package/framework/agents/infrastructure/azure-deploy-specialist.md +0 -707
  206. package/framework/agents/infrastructure/bicep-architect.md +0 -132
  207. package/framework/agents/infrastructure/container-specialist.md +0 -137
  208. package/framework/agents/infrastructure/devops-engineer.md +0 -126
  209. package/framework/agents/integrations/azure-identity.md +0 -148
  210. package/framework/agents/quality/code-analyzer.md +0 -239
  211. package/framework/agents/quality/testing-specialist.md +0 -130
  212. package/framework/hooks/claude-code/notification/approval-reminder.js +0 -57
  213. package/framework/hooks/claude-code/post-tool-use/context-refresh.js +0 -109
  214. package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +0 -78
  215. package/framework/index/troubleshooting-index.json +0 -184
  216. package/framework/rules/testing-standards.md +0 -14
  217. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +0 -230
  218. package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +0 -70
  219. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +0 -256
  220. package/framework/skills/level-1-workflows/morph-phase-clarify/references/clarifications-example.md +0 -117
  221. package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +0 -269
  222. package/framework/standards/ai-agents/blazor-ui.md +0 -364
  223. package/framework/standards/architecture/ddd/aggregates.md +0 -120
  224. package/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
  225. package/framework/standards/architecture/ddd/complexity-levels.md +0 -108
  226. package/framework/standards/architecture/ddd/entities.md +0 -99
  227. package/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
  228. package/framework/standards/architecture/ddd/value-objects.md +0 -124
  229. package/framework/standards/backend/api/minimal-api.md +0 -494
  230. package/framework/standards/backend/api/rest.md +0 -492
  231. package/framework/standards/backend/authentication/passkeys.md +0 -428
  232. package/framework/standards/backend/database/ef-core.md +0 -199
  233. package/framework/standards/backend/database/migrations.md +0 -393
  234. package/framework/standards/backend/database/repository-patterns.md +0 -528
  235. package/framework/standards/backend/dotnet/async.md +0 -366
  236. package/framework/standards/backend/dotnet/core.md +0 -117
  237. package/framework/standards/backend/dotnet/di.md +0 -439
  238. package/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  239. package/framework/standards/context/analytics.md +0 -96
  240. package/framework/standards/context/bundles.md +0 -110
  241. package/framework/standards/context/priming.md +0 -78
  242. package/framework/standards/core/architecture.md +0 -185
  243. package/framework/standards/core/coding.md +0 -214
  244. package/framework/standards/core/git-branching-strategy.md +0 -403
  245. package/framework/standards/core/git.md +0 -185
  246. package/framework/standards/core/testing.md +0 -295
  247. package/framework/standards/data/nosql/blob-storage.md +0 -102
  248. package/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  249. package/framework/standards/frontend/blazor/design-checklist.md +0 -222
  250. package/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  251. package/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  252. package/framework/standards/frontend/blazor/html-conversion.md +0 -184
  253. package/framework/standards/frontend/blazor/lifecycle.md +0 -195
  254. package/framework/standards/frontend/blazor/pitfalls.md +0 -198
  255. package/framework/standards/frontend/blazor/state.md +0 -191
  256. package/framework/standards/frontend/design-system/aesthetic-direction.md +0 -213
  257. package/framework/standards/infrastructure/azure/azure.md +0 -624
  258. package/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  259. package/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  260. package/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  261. package/framework/standards/infrastructure/azure/services/functions.md +0 -486
  262. package/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  263. package/framework/standards/infrastructure/azure/services/storage.md +0 -407
  264. package/framework/standards/infrastructure/vercel/vercel-database.md +0 -106
  265. package/framework/standards/integration/api/graphql.md +0 -91
  266. package/framework/standards/integration/api/grpc.md +0 -114
  267. package/framework/standards/integration/api/rest-design.md +0 -95
  268. package/framework/standards/integration/event-driven/cqrs.md +0 -101
  269. package/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  270. package/framework/standards/integration/event-driven/service-bus.md +0 -95
  271. package/framework/standards/observability/logging.md +0 -131
  272. package/framework/standards/observability/metrics.md +0 -121
  273. package/framework/standards/observability/monitoring.md +0 -114
  274. package/framework/standards/observability/tracing.md +0 -132
  275. package/framework/standards/workflows/parallel-execution.md +0 -112
  276. package/framework/standards/workflows/thread-management.md +0 -113
  277. package/framework/templates/code/dotnet/backend/service.cs +0 -139
  278. package/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  279. package/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  280. package/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  281. package/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  282. package/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
  283. package/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
  284. package/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
  285. package/framework/templates/code/dotnet/frontend/component.razor +0 -239
  286. package/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  287. package/framework/templates/infrastructure/azure/README.md +0 -286
  288. package/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  289. package/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  290. package/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  291. package/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  292. package/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  293. package/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  294. package/framework/templates/infrastructure/azure/deploy.sh +0 -208
  295. package/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  296. package/framework/templates/infrastructure/azure/main.bicep +0 -189
  297. package/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  298. package/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  299. package/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  300. package/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  301. package/framework/templates/infrastructure/azure/storage.bicep +0 -106
  302. package/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  303. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  304. package/framework/templates/integrations/azure-identity-config.cs +0 -288
  305. package/framework/templates/project-structure/dotnet-ddd.md +0 -70
  306. package/framework/templates/saas/subscription.cs +0 -347
  307. package/framework/templates/saas/tenant.cs +0 -338
  308. package/framework/templates/ui/FluentDesignTheme.cs +0 -149
  309. package/framework/templates/ui/MudTheme.cs +0 -281
  310. package/framework/workflows/configs/nodejs-cli.json +0 -40
  311. package/src/commands/standards/context-budget.js +0 -89
  312. package/src/lib/standards/index.js +0 -7
  313. package/src/lib/standards/standards-context-injector.js +0 -302
  314. package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +0 -316
  315. package/src/lib/validators/blazor/blazor-state-validator.js +0 -279
  316. package/src/lib/validators/blazor/blazor-validator.js +0 -369
  317. package/src/lib/validators/blazor/index.js +0 -9
@@ -57,9 +57,9 @@ Do NOT proceed until all phases are complete and all gates approved.
57
57
  Read all prerequisite files in a single parallel call — every file listed here matters for implementation quality:
58
58
 
59
59
  ```
60
- Read: .morph/features/$ARGUMENTS/1-design/spec.md (→ functional requirements, API contracts)
61
- + Read: .morph/features/$ARGUMENTS/1-design/contracts.cs (or contracts.ts / contracts-vsa.cs → C# interfaces)
62
- + Read: .morph/features/$ARGUMENTS/1-design/decisions.md (→ ADRs, architectural choices)
60
+ Read: .morph/features/$ARGUMENTS/2-design/spec.md (→ functional requirements, API contracts)
61
+ + Read: .morph/features/$ARGUMENTS/2-design/contracts.cs (or contracts.ts / contracts-vsa.cs → C# interfaces)
62
+ + Read: .morph/features/$ARGUMENTS/2-design/decisions.md (→ ADRs, architectural choices)
63
63
  + Read: .morph/features/$ARGUMENTS/3-plan/plan.md (→ TDD structure, execution strategy)
64
64
  + Read: .morph/features/$ARGUMENTS/4-tasks/tasks.md (→ task breakdown with T### IDs)
65
65
  + Read: .morph/config/config.json (→ architecture.style for VSA routing)
@@ -96,7 +96,7 @@ This shows which agents are active for implementation and how tasks can be group
96
96
  morph-spec dispatch-agents $ARGUMENTS implement
97
97
  ```
98
98
 
99
- The JSON output includes `shouldDispatch`, `agents[]`, and `taskGroups` for multi-agent coordination.
99
+ The JSON output includes `shouldDispatch`, `recommended` (agents by group), and `tasks` (task IDs by group) for multi-agent coordination.
100
100
 
101
101
  ---
102
102
 
@@ -117,27 +117,7 @@ docker build --check .
117
117
 
118
118
  ---
119
119
 
120
- ### 4. Blazor .NET 10 Assets
121
-
122
- **What it checks:**
123
- - `RequiresAspNetWebAssets` is `true` (if Blazor + .NET 10)
124
- - Static web assets configured correctly
125
-
126
- **How to check:**
127
- ```bash
128
- grep -r "RequiresAspNetWebAssets" *.csproj
129
- ```
130
-
131
- **Fix:**
132
- ```xml
133
- <PropertyGroup>
134
- <RequiresAspNetWebAssets>true</RequiresAspNetWebAssets>
135
- </PropertyGroup>
136
- ```
137
-
138
- ---
139
-
140
- ### 5. Bicep Syntax Validation
120
+ ### 4. Bicep Syntax Validation
141
121
 
142
122
  **What it checks:**
143
123
  - `.bicep` files without syntax errors
@@ -151,7 +131,7 @@ az bicep build --file infra/main.bicep --stdout > /dev/null
151
131
 
152
132
  ---
153
133
 
154
- ### 6. Key Vault Configuration
134
+ ### 5. Key Vault Configuration
155
135
 
156
136
  **What it checks:**
157
137
  - Key Vault URI configured in `appsettings.json` or environment
@@ -175,7 +155,7 @@ if (!builder.Environment.IsDevelopment())
175
155
 
176
156
  ---
177
157
 
178
- ### 7. Connection Strings Security
158
+ ### 6. Connection Strings Security
179
159
 
180
160
  **What it checks:**
181
161
  - Connection strings not hardcoded in code
@@ -199,14 +179,13 @@ grep -rE "(Password=|Pwd=|Secret=)" appsettings*.json | grep -v Development
199
179
  ✅ Packages: No version conflicts detected
200
180
  ✅ Migrations: No pending model changes
201
181
  ✅ Dockerfile: Valid multi-stage build
202
- ✅ Blazor Assets: RequiresAspNetWebAssets=true
203
182
  ✅ Bicep: Syntax valid
204
183
  ❌ Key Vault: URI not configured in appsettings.Production.json
205
184
  ⚠️ Connection Strings: Found password in appsettings.Staging.json
206
185
 
207
186
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
208
187
 
209
- 📋 Summary: 5 passed, 1 failed, 1 warning
188
+ 📋 Summary: 4 passed, 1 failed, 1 warning
210
189
 
211
190
  ❌ BLOCKED: Fix Key Vault configuration before deploy!
212
191
 
@@ -262,7 +241,6 @@ Recommended fixes:
262
241
 
263
242
  - [azure.md](../../standards/azure.md) - Azure Standards
264
243
  - [dotnet10-migration.md](../../standards/dotnet10-migration.md) - Breaking changes .NET 10
265
- - [blazor-efcore.md](../../../../framework/standards/blazor-efcore.md) - EF Core patterns
266
244
 
267
245
  ---
268
246
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: MORPH Spec Pipeline — creates or resumes feature planning through phases 0-6 with mandatory approval pauses. Use whenever the user wants to plan, spec, or design a new feature, or when they say /morph-proposal. This is the primary entry point for all MORPH-SPEC feature work.
2
+ description: MORPH Spec Pipeline — creates or resumes feature planning through phases 0-8 with mandatory approval pauses. Use whenever the user wants to plan, spec, or design a new feature, or when they say /morph-proposal. This is the primary entry point for all MORPH-SPEC feature work.
3
3
  argument-hint: <feature-name>
4
4
  allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
5
5
  ---
@@ -65,7 +65,7 @@ Fill every section of the template. In particular:
65
65
  - **Risks**: table with likelihood, impact, mitigation
66
66
  - **Dependencies**: checklist of prerequisites
67
67
  - **Estimated Effort**: broken down by phase (in hours)
68
- - **Questions & Clarifications**: seed 3-6 questions for the clarify phase — these become input for phase 3
68
+ - **Questions & Clarifications**: seed 3-6 questions for the clarify phase — these become input for phase 4
69
69
 
70
70
  ### Step 5: Register state
71
71
 
@@ -83,15 +83,15 @@ morph-spec state mark-output {feature-name} proposal
83
83
  ```
84
84
  TaskCreate: "Phase 0: Proposal" → description: "Define feature scope and approach" → activeForm: "Proposal"
85
85
  TaskCreate: "Phase 1: Setup" → description: "Load context, detect agents, confirm stack" → activeForm: "Setup"
86
- TaskCreate: "Phase 2: Design" → description: "Schema analysis, spec, contracts, decisions" → activeForm: "Design"
87
- TaskCreate: "Phase 3: Clarify" → description: "Resolve ambiguities and edge cases" → activeForm: "Clarify"
88
- TaskCreate: "Phase 4: Plan" → description: "Implementation plan with TDD and file paths" → activeForm: "Plan"
89
- TaskCreate: "Phase 5: Tasks" → description: "Break spec into T001-T00N with dependencies" → activeForm: "Tasks"
86
+ TaskCreate: "Phase 3: Design" → description: "Schema analysis, spec, contracts, decisions" → activeForm: "Design"
87
+ TaskCreate: "Phase 4: Clarify" → description: "Resolve ambiguities and edge cases" → activeForm: "Clarify"
88
+ TaskCreate: "Phase 5: Plan" → description: "Implementation plan with TDD and file paths" → activeForm: "Plan"
89
+ TaskCreate: "Phase 6: Tasks" → description: "Break spec into T001-T00N with dependencies" → activeForm: "Tasks"
90
90
  ```
91
91
 
92
92
  If `ui-designer` is among the activated agents, also create:
93
93
  ```
94
- TaskCreate: "Phase 1.5: UI/UX" → description: "Design system, mockups, components, flows" → activeForm: "UI/UX"
94
+ TaskCreate: "Phase 2: UI/UX" → description: "Design system, mockups, components, flows" → activeForm: "UI/UX"
95
95
  ```
96
96
 
97
97
  Wire dependencies (addBlockedBy) matching the phase sequence:
@@ -135,13 +135,13 @@ Summary: load project context, confirm stack, list active agents, update state.
135
135
 
136
136
  ---
137
137
 
138
- ## 4. PHASE 1.5: UI/UX (conditional)
138
+ ## 4. PHASE 2: UI/UX (conditional)
139
139
 
140
140
  Check if `ui-designer` is in `activeAgents`:
141
141
  - **Yes:** Invoke the `morph-phase-uiux` skill. **MANDATORY PAUSE** after generating UI deliverables.
142
- - **No:** Skip to PHASE 2.
142
+ - **No:** Skip to PHASE 3.
143
143
 
144
- > **Task lifecycle:** `TaskUpdate` the "Phase 1: Setup" task → `completed`. `TaskUpdate` the "Phase 1.5: UI/UX" task → `in_progress` (if UI/UX), or the "Phase 2: Design" task → `in_progress` (if skipping UI/UX).
144
+ > **Task lifecycle:** `TaskUpdate` the "Phase 1: Setup" task → `completed`. `TaskUpdate` the "Phase 2: UI/UX" task → `in_progress` (if UI/UX), or the "Phase 3: Design" task → `in_progress` (if skipping UI/UX).
145
145
 
146
146
  After approval:
147
147
  ```bash
@@ -151,9 +151,9 @@ morph-spec phase advance {feature-name}
151
151
 
152
152
  ---
153
153
 
154
- ## 5. PHASE 2: DESIGN
154
+ ## 5. PHASE 3: DESIGN
155
155
 
156
- > **Task lifecycle:** `TaskUpdate` the completing phase task (UI/UX or Setup) → `completed`. `TaskUpdate` the "Phase 2: Design" task → `in_progress`.
156
+ > **Task lifecycle:** `TaskUpdate` the completing phase task (UI/UX or Setup) → `completed`. `TaskUpdate` the "Phase 3: Design" task → `in_progress`.
157
157
 
158
158
  Invoke the `morph-phase-design` skill.
159
159
 
@@ -171,9 +171,9 @@ morph-spec phase advance {feature-name}
171
171
 
172
172
  ---
173
173
 
174
- ## 6. PHASE 3: CLARIFY (interactive)
174
+ ## 6. PHASE 4: CLARIFY (interactive)
175
175
 
176
- > **Task lifecycle:** `TaskUpdate` the "Phase 2: Design" task → `completed`. `TaskUpdate` the "Phase 3: Clarify" task → `in_progress`.
176
+ > **Task lifecycle:** `TaskUpdate` the "Phase 3: Design" task → `completed`. `TaskUpdate` the "Phase 4: Clarify" task → `in_progress`.
177
177
 
178
178
  Invoke the `morph-phase-clarify` skill.
179
179
 
@@ -183,9 +183,9 @@ Summary: identify ambiguities in spec.md, generate 3-7 targeted questions (build
183
183
 
184
184
  ---
185
185
 
186
- ## 7. PHASE 4: PLAN
186
+ ## 7. PHASE 5: PLAN
187
187
 
188
- > **Task lifecycle:** `TaskUpdate` the "Phase 3: Clarify" task → `completed`. `TaskUpdate` the "Phase 4: Plan" task → `in_progress`.
188
+ > **Task lifecycle:** `TaskUpdate` the "Phase 4: Clarify" task → `completed`. `TaskUpdate` the "Phase 5: Plan" task → `in_progress`.
189
189
 
190
190
  Invoke the `morph-phase-plan` skill.
191
191
 
@@ -203,9 +203,9 @@ morph-spec phase advance {feature-name}
203
203
 
204
204
  ---
205
205
 
206
- ## 8. PHASE 5: TASKS
206
+ ## 8. PHASE 6: TASKS
207
207
 
208
- > **Task lifecycle:** `TaskUpdate` the "Phase 4: Plan" task → `completed`. `TaskUpdate` the "Phase 5: Tasks" task → `in_progress`.
208
+ > **Task lifecycle:** `TaskUpdate` the "Phase 5: Plan" task → `completed`. `TaskUpdate` the "Phase 6: Tasks" task → `in_progress`.
209
209
 
210
210
  Invoke the `morph-phase-tasks` skill.
211
211
 
@@ -225,7 +225,7 @@ morph-spec phase advance {feature-name}
225
225
 
226
226
  ## 9. Planning Complete
227
227
 
228
- > **Task lifecycle:** `TaskUpdate` the "Phase 5: Tasks" task → `completed`.
228
+ > **Task lifecycle:** `TaskUpdate` the "Phase 6: Tasks" task → `completed`.
229
229
 
230
230
  After task approval:
231
231
 
@@ -58,13 +58,13 @@ The `morph-spec state list` command automatically generates a formatted dashboar
58
58
  ║ MORPH-SPEC PROJECT STATUS ║
59
59
  ╠════════════════════════════════════════════════════════════════╣
60
60
  ║ Project: {PROJECT_NAME} ║
61
- ║ Type: blazor-server ║
61
+ ║ Type: dotnet-nextjs ║
62
62
  ╠════════════════════════════════════════════════════════════════╣
63
63
  ║ FEATURES ║
64
64
  ╠════════════════════════════════════════════════════════════════╣
65
65
  ║ 📝 {feature-1} ║
66
66
  ║ Phase: implement │ Tasks: 5/12 ║
67
- ║ Agents: blazor-builder ef-modeler hangfire-orchestrator ║
67
+ ║ Agents: ef-modeler hangfire-orchestrator ║
68
68
  ╠════════════════════════════════════════════════════════════════╣
69
69
  ║ 📝 {feature-2} ║
70
70
  ║ Phase: design │ Tasks: 0/0 ║
@@ -1,12 +1,12 @@
1
1
  ---
2
- description: Find solutions for common .NET/Blazor/Azure development errors with root-cause analysis
2
+ description: Find solutions for common .NET/Next.js development errors with root-cause analysis
3
3
  argument-hint: "[error-message]"
4
4
  allowed-tools: Read, Bash, Glob, Grep
5
5
  ---
6
6
 
7
7
  # Troubleshoot - Find Solutions for Errors
8
8
 
9
- Find solutions for common .NET/Blazor/Azure development errors and problems.
9
+ Find solutions for common .NET/Next.js development errors and problems.
10
10
 
11
11
  ## Usage
12
12
 
@@ -17,11 +17,10 @@ Find solutions for common .NET/Blazor/Azure development errors and problems.
17
17
  ## Examples
18
18
 
19
19
  ```bash
20
- /morph-troubleshoot blazor.web.js 404
21
20
  /morph-troubleshoot DbContext second operation
22
- /morph-troubleshoot Azure.Identity NU1605
23
21
  /morph-troubleshoot Include returns empty
24
22
  /morph-troubleshoot PendingModelChanges
23
+ /morph-troubleshoot next/navigation error
25
24
  ```
26
25
 
27
26
  ## 3-Level Workflow
@@ -60,13 +59,11 @@ site:github.com/dotnet/aspnetcore {error}
60
59
  site:github.com/dotnet/efcore {error}
61
60
 
62
61
  # Stack Overflow
63
- site:stackoverflow.com [blazor] {error}
64
62
  site:stackoverflow.com [entity-framework-core] {error}
65
- site:stackoverflow.com [azure] {error}
63
+ site:stackoverflow.com [next.js] {error}
66
64
 
67
65
  # Microsoft Documentation
68
66
  site:learn.microsoft.com {error}
69
- site:learn.microsoft.com/azure {error}
70
67
  ```
71
68
 
72
69
  **WebSearch usage example:**
@@ -80,9 +77,8 @@ If the user asks about a SignalR error:
80
77
 
81
78
  | Category | Description |
82
79
  |-----------|-----------|
83
- | `blazor` | Blazor Server/WASM, components, lifecycle, rendering |
84
80
  | `efcore` | Entity Framework Core, DbContext, migrations, queries |
85
- | `azure` | Azure services, deploy, identity, Key Vault |
81
+ | `nextjs` | Next.js App Router, pages, components, routing |
86
82
  | `auth` | Authentication, authorization, tokens, claims |
87
83
  | `deploy` | Deployment, CI/CD, pipelines, containers |
88
84
 
@@ -118,13 +114,10 @@ When finding a solution, present in the following format:
118
114
 
119
115
  | Error | Quick Fix |
120
116
  |------|----------------|
121
- | `blazor.web.js 404` | `<RequiresAspNetWebAssets>true</RequiresAspNetWebAssets>` |
122
117
  | `PendingModelChangesWarning` | `dotnet ef migrations add <Name>` before update |
123
118
  | `DbContext second operation` | Use `IDbContextFactory` for background tasks |
124
119
  | `Include()` empty | Use `HasMany(x => x.Nav)` instead of `HasMany<T>()` |
125
- | `Azure.Identity NU1605` | Specify explicit version in .csproj |
126
- | `Key Vault won't load` | Don't condition on environment (IsDevelopment) |
127
- | `DefaultAzureCredential slow` | Disable unused credentials |
120
+ | `next/navigation error` | Check App Router vs Pages Router usage |
128
121
 
129
122
  ---
130
123
 
@@ -15,14 +15,11 @@ framework/hooks/
15
15
  │ │ ├── protect-spec-files.js # Block edits to approved spec artifacts
16
16
  │ │ └── enforce-phase-writes.js # Enforce writes to correct phase dir
17
17
  │ ├── post-tool-use/
18
- │ │ ├── dispatch.js # Dispatch on CLI commands (auto-checkpoint)
19
- │ │ └── context-refresh.js # Auto-refresh context on structural git commits
18
+ │ │ └── dispatch.js # Dispatch on CLI commands (auto-checkpoint)
20
19
  │ ├── stop/
21
20
  │ │ └── validate-completion.js # Advisory: warn about incomplete work
22
21
  │ ├── pre-compact/
23
22
  │ │ └── save-morph-context.js # Snapshot state before compaction
24
- │ └── notification/
25
- │ └── approval-reminder.js # Remind about pending approvals
26
23
  ├── shared/ # Reusable utilities for all hooks
27
24
  │ ├── state-reader.js # Read-only state.json accessor
28
25
  │ ├── phase-utils.js # Phase constants and path utilities
@@ -51,11 +48,9 @@ framework/hooks/
51
48
  | **PreToolUse** (Write\|Edit) | enforce-phase-writes.js | Block | Ensures writes go to current phase directory |
52
49
  | **PreToolUse** (Bash) | _(prompt-type inline guard)_ | Block | Blocks `rm -rf .morph/` and direct state edits via Claude's reasoning |
53
50
  | **PostToolUse** (Bash) | dispatch.js | Dispatch | Triggers checkpoints on task completion |
54
- | **PostToolUse** (Bash) | context-refresh.js | Inject context | Detects `git commit` with structural changes → instructs Claude to update `.morph/context/README.md` and `.morph/config/config.json` |
55
51
  | **PostToolUseFailure** | handle-tool-failure.js | Logging | Appends structured JSON to .morph/logs/tool-failures.log |
56
52
  | **Stop** | validate-completion.js | Advisory | Warns about incomplete tasks/missing outputs/pending gates |
57
53
  | **PreCompact** | save-morph-context.js | Snapshot | Saves state to .morph/memory/ before compaction |
58
- | **Notification** | approval-reminder.js | Advisory | Reminds about pending approval gates |
59
54
 
60
55
  ## Design Principles
61
56
 
@@ -0,0 +1,122 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * PostToolUse Hook: Agent Completion Tracker
5
+ *
6
+ * Event: PostToolUse | Matcher: Agent
7
+ *
8
+ * Detects when morph-spec subagents complete (dispatched via the Agent tool)
9
+ * and injects status notifications:
10
+ * - Partial: shows which agents are still pending
11
+ * - Complete: instructs to run validate-feature
12
+ *
13
+ * Only tracks tier 1-3 agents (not validators: morph-validator-*).
14
+ *
15
+ * Fail-open: exits 0 on any error.
16
+ */
17
+
18
+ import { readStdin } from '../../shared/stdin-reader.js';
19
+ import { stateExists, getActiveFeature, getFeature, getFeaturePhase } from '../../shared/state-reader.js';
20
+ import { pass, injectContext } from '../../shared/hook-response.js';
21
+ import { logHookActivity } from '../../shared/activity-logger.js';
22
+ import { subagentTypeToAgentId } from '../../shared/dispatch-helpers.js';
23
+
24
+ try {
25
+ if (!stateExists()) pass();
26
+
27
+ const payload = await readStdin();
28
+ if (!payload) pass();
29
+
30
+ const subagentType = payload?.tool_input?.subagent_type || '';
31
+ if (!subagentType) pass();
32
+
33
+ // Only track morph-* agents (not external subagents)
34
+ if (!subagentType.startsWith('morph-')) pass();
35
+
36
+ // Skip validators (tier 4) — they have their own tracking
37
+ if (subagentType.startsWith('morph-validator-')) pass();
38
+
39
+ const result = buildAgentCompleteContext(subagentType);
40
+ if (result) {
41
+ logHookActivity('agent-complete', 'PostToolUse', result.type);
42
+ injectContext(result.text);
43
+ }
44
+
45
+ pass();
46
+ } catch {
47
+ // Fail-open
48
+ process.exit(0);
49
+ }
50
+
51
+ /**
52
+ * Build the agent completion notification context.
53
+ *
54
+ * @param {string} subagentType - e.g. 'morph-nextjs-expert'
55
+ * @returns {{ text: string, type: string }|null}
56
+ */
57
+ function buildAgentCompleteContext(subagentType) {
58
+ // Get active feature
59
+ const active = getActiveFeature();
60
+ if (!active) return null;
61
+
62
+ const { name: featureName, feature } = active;
63
+
64
+ // Only track during implement phase
65
+ const phase = getFeaturePhase(featureName);
66
+ if (phase !== 'implement') return null;
67
+
68
+ // Get dispatch log
69
+ const dispatchLog = feature.dispatchLog;
70
+ if (!Array.isArray(dispatchLog) || dispatchLog.length === 0) return null;
71
+
72
+ // Get the most recent dispatch entry
73
+ const latestDispatch = dispatchLog[dispatchLog.length - 1];
74
+ const agents = latestDispatch?.agents;
75
+ if (!Array.isArray(agents) || agents.length === 0) return null;
76
+
77
+ // Find the completing agent in the dispatch
78
+ const agentId = subagentTypeToAgentId(subagentType);
79
+ let matchedAgent = agents.find(a => a.subagentType === subagentType);
80
+ if (!matchedAgent && agentId) {
81
+ matchedAgent = agents.find(a => a.id === agentId);
82
+ }
83
+
84
+ if (!matchedAgent) return null;
85
+
86
+ // Mark this agent as completed (in-memory for evaluation only)
87
+ // Check which agents are still pending (no completedAt)
88
+ const pendingAgents = agents.filter(a => {
89
+ if (a === matchedAgent) return false; // The one just completed
90
+ return !a.completedAt;
91
+ });
92
+
93
+ const totalAgents = agents.length;
94
+ const completedCount = totalAgents - pendingAgents.length;
95
+
96
+ if (pendingAgents.length === 0) {
97
+ // All agents complete
98
+ return {
99
+ type: 'all_complete',
100
+ text: [
101
+ '✅ ALL MORPH-SPEC AGENTS COMPLETE',
102
+ '════════════════════════════════════════',
103
+ `All ${totalAgents} dispatched agents have completed their tasks.`,
104
+ '',
105
+ 'NEXT STEP:',
106
+ ` morph-spec validate-feature ${featureName} --phase implement`,
107
+ ].join('\n'),
108
+ };
109
+ }
110
+
111
+ // Partial completion
112
+ const remainingList = pendingAgents
113
+ .map(a => a.title || a.id || 'unknown')
114
+ .join(', ');
115
+
116
+ const agentTitle = matchedAgent.title || matchedAgent.id || subagentType;
117
+
118
+ return {
119
+ type: 'partial_complete',
120
+ text: `✅ Agent '${agentTitle}' completed (${completedCount}/${totalAgents}). Remaining: ${remainingList}`,
121
+ };
122
+ }
@@ -24,12 +24,11 @@ import { parseTaskDoneCommand } from '../../shared/dispatch-helpers.js';
24
24
 
25
25
  // Standard IDs referenced in remediation messages
26
26
  const STANDARD_REFS = {
27
- 'di': 'backend/dotnet/core.md#dependency-injection',
28
- 'async': 'backend/dotnet/async.md#cancellation-token-pattern',
29
- 'security': 'core/architecture.md#security-patterns',
30
- 'packages': 'backend/dotnet/program-cs-checklist.md#nuget-packages',
27
+ 'di': 'dependency injection best practices',
28
+ 'async': 'async/await and CancellationToken patterns',
29
+ 'security': 'security best practices',
30
+ 'packages': 'NuGet package compatibility',
31
31
  'design-system': 'frontend/design-system/naming.md#css-class-conventions',
32
- 'blazor': 'frontend/blazor/pitfalls.md#dbcontext-in-blazor',
33
32
  };
34
33
 
35
34
  try {
@@ -142,6 +141,5 @@ function getRefKey(ruleOrValidator) {
142
141
  if (lower.includes('security') || lower.includes('sql') || lower.includes('xss')) return 'security';
143
142
  if (lower.includes('package') || lower.includes('nuget')) return 'packages';
144
143
  if (lower.includes('design') || lower.includes('css') || lower.includes('naming')) return 'design-system';
145
- if (lower.includes('blazor') || lower.includes('dbcontext')) return 'blazor';
146
144
  return null;
147
145
  }
@@ -26,9 +26,9 @@ import { logHookActivity } from '../../shared/activity-logger.js';
26
26
  import { buildRichContext, DECISIONS_MAX_CHARS, MAX_PENDING_TASKS } from '../../shared/compact-restore.js';
27
27
 
28
28
  const PHASE_POSITIONS = {
29
- proposal: 1, setup: 1,
29
+ proposal: 1,
30
30
  uiux: 2, design: 2,
31
- clarify: 3,
31
+ plan: 3,
32
32
  tasks: 4,
33
33
  implement: 5, sync: 5,
34
34
  };
@@ -39,7 +39,7 @@ const NEXT_STEP_HINT = {
39
39
  design: (n) => `Approve design gate: morph-spec approve ${n} design`,
40
40
  uiux: (n) => `Approve UI gate: morph-spec approve ${n} uiux`,
41
41
  tasks: (n) => `Approve tasks gate: morph-spec approve ${n} tasks`,
42
- implement: (n) => `Continue implementation: morph-spec task next ${n}`,
42
+ implement: (n) => `Continue implementation: morph-spec task start ${n} <next-task-id>`,
43
43
  };
44
44
 
45
45
  try {
@@ -77,11 +77,16 @@ try {
77
77
  const { name: activeName, feature: activeFeature } = active;
78
78
  const activePhase = derivePhaseForFeature(activeName);
79
79
  let decisionsContent = '';
80
- const decisionsPath = join(cwd, `.morph/features/${activeName}/1-design/decisions.md`);
80
+ const decisionsPath = join(cwd, `.morph/features/${activeName}/2-design/decisions.md`);
81
81
  if (existsSync(decisionsPath)) {
82
82
  try { decisionsContent = readFileSync(decisionsPath, 'utf-8'); } catch { /* ignore */ }
83
83
  }
84
- snapshot.richContext = buildRichContext(activeFeature, activePhase, decisionsContent);
84
+ let specContent = '';
85
+ const specPath2 = join(cwd, `.morph/features/${activeName}/2-design/spec.md`);
86
+ if (existsSync(specPath2)) {
87
+ try { specContent = readFileSync(specPath2, 'utf-8'); } catch { /* ignore */ }
88
+ }
89
+ snapshot.richContext = buildRichContext(activeFeature, activePhase, decisionsContent, specContent);
85
90
  } catch { /* fail-open: richContext is optional */ }
86
91
  }
87
92
  // ─────────────────────────────────────────────────────────────────────────
@@ -132,7 +137,7 @@ try {
132
137
  lines.push('Next pending tasks:');
133
138
  for (const t of pending) lines.push(` [${t.id}] ${t.title}`);
134
139
  if (taskList.filter(t => t.status === 'pending').length > MAX_PENDING_TASKS) {
135
- lines.push(` ... (use morph-spec task next ${name} for full list)`);
140
+ lines.push(` ... (see tasks.md for full list)`);
136
141
  }
137
142
  }
138
143
 
@@ -164,7 +169,7 @@ try {
164
169
  }
165
170
 
166
171
  // Key decisions (truncated to stay within context budget)
167
- const decisionsPath = join(cwd, `.morph/features/${name}/1-design/decisions.md`);
172
+ const decisionsPath = join(cwd, `.morph/features/${name}/2-design/decisions.md`);
168
173
  if (existsSync(decisionsPath)) {
169
174
  try {
170
175
  const raw = readFileSync(decisionsPath, 'utf-8');
@@ -7,8 +7,8 @@
7
7
  *
8
8
  * Ensures writes to .morph/features/{feature}/ go to the current phase's subfolder:
9
9
  * proposal → only 0-proposal/
10
- * design, clarify → only 1-design/
11
- * uiux → only 2-ui/
10
+ * uiux → only 1-ui/
11
+ * design, clarify → only 2-design/
12
12
  * tasks → only 4-tasks/
13
13
  * implement → 5-implement/ + any source code (unrestricted)
14
14
  *
@@ -6,9 +6,9 @@
6
6
  * Event: PreToolUse | Matcher: Write|Edit
7
7
  *
8
8
  * Blocks Write/Edit to spec artifacts after their approval gate has passed:
9
- * - 1-design/spec.md, contracts.cs, etc. → blocked if 'design' gate approved
9
+ * - 2-design/spec.md, contracts.cs, etc. → blocked if 'design' gate approved
10
10
  * - 4-tasks/tasks.md → blocked if 'tasks' gate approved
11
- * - 2-ui/design-system.md, etc. → blocked if 'uiux' gate approved
11
+ * - 1-ui/design-system.md, etc. → blocked if 'uiux' gate approved
12
12
  *
13
13
  * Fail-open: exits 0 on any error.
14
14
  */
@@ -36,23 +36,18 @@ try {
36
36
  const phase = feature.phase || derivePhaseForFeature(name);
37
37
  if (phase !== 'implement') pass();
38
38
 
39
- // Check if any task is in_progress
40
- // Method 1: tasks.inProgress counter (v3 state format)
39
+ // Check if any task is in_progress (read directly from taskList)
40
+ if (feature.taskList?.some(t => t.status === 'in_progress')) pass();
41
+ // Fallback: legacy counter check
41
42
  if (feature.tasks?.inProgress > 0) pass();
42
43
 
43
- // Method 2: taskList array (v2 state format)
44
- if (feature.taskList) {
45
- const hasActive = feature.taskList.some(t => t.status === 'in_progress');
46
- if (hasActive) pass();
47
- }
48
-
49
44
  // No task in_progress — inject advisory warning
50
45
  approve(
51
46
  `[morph-spec] WARNING: No active task tracking detected during implement phase.\n` +
52
47
  `Before writing code, start a task:\n` +
53
- ` morph-spec task next ${name} # see what's next\n` +
54
48
  ` morph-spec task start ${name} <id> # mark it in progress\n` +
55
- `Task tracking ensures validators run, checkpoints fire, and progress is recorded.`
49
+ `Task tracking ensures validators run, checkpoints fire, and progress is recorded.\n` +
50
+ `If a task is more complex than expected, use: morph-spec task expand ${name} <id> --into "T00Xa: Sub" "T00Xb: Sub"`
56
51
  );
57
52
  } catch {
58
53
  // Fail-open