@polymorphism-tech/morph-spec 4.3.7 → 4.6.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 (394) hide show
  1. package/.morph/.morphversion +3 -3
  2. package/.morph/analytics/threads-log.jsonl +6 -9
  3. package/.morph/config/config.json +2 -3
  4. package/.morph/framework/standards/STANDARDS.json +812 -0
  5. package/.morph/{standards → framework/standards}/ai-agents/team-orchestration.md +3 -3
  6. package/.morph/{standards → framework/standards}/frontend/nextjs/nextjs-patterns.md +17 -0
  7. package/.morph/framework/standards/integration/mcp/mcp-tools.md +384 -0
  8. package/.morph/{templates → framework/templates}/README.md +17 -17
  9. package/.morph/{templates → framework/templates}/REGISTRY.json +48 -233
  10. package/.morph/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
  11. package/.morph/{templates → framework/templates}/context/CONTEXT-FEATURE.md +1 -1
  12. package/.morph/{templates → framework/templates}/context/CONTEXT.md +3 -3
  13. package/.morph/framework/templates/docs/clarifications.md +253 -0
  14. package/.morph/framework/templates/docs/onboarding.md +123 -0
  15. package/.morph/framework/templates/docs/schema-analysis.md +119 -0
  16. package/.morph/{templates → framework/templates}/docs/spec.md +149 -149
  17. package/.morph/framework/templates/docs/ui-components.md +124 -0
  18. package/.morph/framework/templates/docs/ui-design-system.md +76 -0
  19. package/.morph/framework/templates/docs/ui-flows.md +167 -0
  20. package/.morph/framework/templates/docs/ui-mockups.md +98 -0
  21. package/.morph/framework/templates/docs/user-stories.md +34 -0
  22. package/.morph/{templates → framework/templates}/examples/spec-examples.md +1 -1
  23. package/.morph/{templates → framework/templates}/infrastructure/github/README.md +11 -11
  24. package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
  25. package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  26. package/.morph/{templates → framework/templates}/meta-prompts/validators/pre-commit-validator.md +1 -1
  27. package/.morph/logs/tool-failures.log +7 -0
  28. package/.morph/memory/pre-compact-2026-02-23T15-43-03-521Z.json +16 -0
  29. package/.morph/state.json +1 -1
  30. package/CLAUDE.md +77 -155
  31. package/README.md +20 -18
  32. package/bin/detect-agents.js +1 -1
  33. package/bin/morph-spec.js +116 -266
  34. package/bin/task-manager.cjs +2 -2
  35. package/bin/validate.js +1 -1
  36. package/claude-plugin.json +14 -0
  37. package/docs/claude-alignment-report.md +137 -0
  38. package/docs/plans/2026-02-22-claude-docs-morph-alignment-analysis.md +512 -0
  39. package/docs/plans/2026-02-22-claude-settings.md +515 -0
  40. package/docs/plans/2026-02-22-morph-cc-alignment-impl.md +728 -0
  41. package/docs/plans/2026-02-22-morph-spec-next.md +478 -0
  42. package/docs/plans/2026-02-22-native-alignment-design.md +199 -0
  43. package/docs/plans/2026-02-22-native-alignment-impl.md +925 -0
  44. package/docs/plans/2026-02-22-native-enrichment-design.md +244 -0
  45. package/docs/plans/2026-02-22-native-enrichment.md +735 -0
  46. package/framework/CLAUDE.md +77 -0
  47. package/framework/{skills/level-2-domains → agents}/ai-agents/ai-system-architect.md +7 -3
  48. package/framework/{skills/level-2-domains → agents}/architecture/po-pm-advisor.md +7 -1
  49. package/framework/{skills/level-2-domains → agents}/architecture/prompt-engineer.md +7 -1
  50. package/framework/{skills/level-2-domains → agents}/architecture/seo-growth-hacker.md +7 -1
  51. package/framework/{skills/level-2-domains → agents}/architecture/standards-architect.md +10 -6
  52. package/framework/agents/backend/api-designer.md +103 -0
  53. package/framework/{skills/level-2-domains → agents}/backend/dotnet-senior.md +7 -1
  54. package/framework/agents/backend/ef-modeler.md +119 -0
  55. package/framework/{skills/level-2-domains → agents}/backend/hangfire-orchestrator.md +8 -4
  56. package/framework/{skills/level-2-domains → agents}/backend/ms-agent-expert.md +7 -3
  57. package/framework/{skills/level-2-domains → agents}/frontend/blazor-builder.md +7 -3
  58. package/framework/{skills/level-2-domains → agents}/frontend/nextjs-expert.md +7 -3
  59. package/framework/{skills/level-2-domains → agents}/frontend/ui-ux-designer.md +8 -2
  60. package/framework/{skills/level-2-domains → agents}/infrastructure/azure-architect.md +7 -1
  61. package/framework/{skills/level-2-domains → agents}/infrastructure/azure-deploy-specialist.md +7 -1
  62. package/framework/{skills/level-2-domains → agents}/infrastructure/bicep-architect.md +7 -3
  63. package/framework/{skills/level-2-domains → agents}/infrastructure/container-specialist.md +7 -3
  64. package/framework/{skills/level-2-domains → agents}/infrastructure/devops-engineer.md +7 -3
  65. package/framework/{skills/level-2-domains → agents}/integrations/asaas-financial.md +7 -3
  66. package/framework/{skills/level-2-domains → agents}/integrations/azure-identity.md +7 -3
  67. package/framework/{skills/level-2-domains → agents}/integrations/clerk-auth.md +7 -3
  68. package/framework/{skills/level-2-domains/integrations/hangfire-orchestrator.md → agents/integrations/hangfire-integration.md} +7 -1
  69. package/framework/{skills/level-2-domains → agents}/integrations/resend-email.md +7 -3
  70. package/framework/{skills/level-2-domains → agents}/quality/code-analyzer.md +9 -5
  71. package/framework/{skills/level-2-domains → agents}/quality/testing-specialist.md +7 -3
  72. package/framework/commands/morph-apply.md +9 -9
  73. package/framework/commands/morph-archive.md +8 -8
  74. package/framework/commands/morph-infra.md +1 -1
  75. package/framework/commands/morph-proposal.md +9 -9
  76. package/framework/commands/morph-status.md +3 -3
  77. package/framework/commands/morph-troubleshoot.md +1 -1
  78. package/framework/hooks/README.md +201 -282
  79. package/framework/hooks/claude-code/notification/approval-reminder.js +52 -0
  80. package/framework/hooks/claude-code/post-tool-use/dispatch.js +83 -0
  81. package/framework/hooks/claude-code/post-tool-use/handle-tool-failure.js +42 -0
  82. package/framework/hooks/claude-code/pre-compact/save-morph-context.js +61 -0
  83. package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +71 -0
  84. package/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +58 -0
  85. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +64 -0
  86. package/framework/hooks/claude-code/session-start/inject-morph-context.js +94 -0
  87. package/framework/hooks/claude-code/statusline.py +538 -0
  88. package/framework/hooks/claude-code/statusline.sh +7 -0
  89. package/framework/hooks/claude-code/stop/validate-completion.js +88 -0
  90. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +91 -0
  91. package/framework/hooks/shared/hook-response.js +45 -0
  92. package/framework/hooks/shared/phase-utils.js +129 -0
  93. package/framework/hooks/shared/state-reader.js +138 -0
  94. package/framework/hooks/shared/stdin-reader.js +26 -0
  95. package/framework/phases.json +145 -0
  96. package/framework/rules/csharp-standards.md +10 -0
  97. package/framework/rules/frontend-standards.md +14 -0
  98. package/framework/rules/infrastructure-standards.md +13 -0
  99. package/framework/rules/morph-workflow.md +86 -0
  100. package/framework/rules/testing-standards.md +11 -0
  101. package/framework/skills/README.md +66 -0
  102. package/framework/skills/level-0-meta/brainstorming/SKILL.md +135 -0
  103. package/framework/skills/level-0-meta/brainstorming/references/proposal-example.md +138 -0
  104. package/framework/skills/level-0-meta/{code-review.md → code-review/SKILL.md} +13 -4
  105. package/framework/skills/level-0-meta/code-review/references/review-example.md +164 -0
  106. package/framework/skills/level-0-meta/code-review/scripts/scan-csharp.mjs +121 -0
  107. package/framework/skills/level-0-meta/mcp-registry.json +207 -0
  108. package/framework/skills/level-0-meta/{morph-checklist.md → morph-checklist/SKILL.md} +8 -3
  109. package/framework/skills/{level-1-workflows/morph-replicate.md → level-0-meta/morph-replicate/SKILL.md} +13 -6
  110. package/framework/skills/level-0-meta/{simulation-checklist.md → simulation-checklist/SKILL.md} +9 -4
  111. package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +334 -0
  112. package/framework/skills/level-0-meta/verification-before-completion/SKILL.md +147 -0
  113. package/framework/skills/level-0-meta/verification-before-completion/scripts/check-phase-outputs.mjs +110 -0
  114. package/framework/skills/level-1-workflows/{phase-clarify.md → phase-clarify/SKILL.md} +65 -4
  115. package/framework/skills/level-1-workflows/phase-clarify/references/clarifications-example.md +117 -0
  116. package/framework/skills/level-1-workflows/phase-codebase-analysis/SKILL.md +181 -0
  117. package/framework/skills/level-1-workflows/phase-design/SKILL.md +303 -0
  118. package/framework/skills/level-1-workflows/phase-design/references/spec-example.md +253 -0
  119. package/framework/skills/level-1-workflows/phase-implement/SKILL.md +254 -0
  120. package/framework/skills/level-1-workflows/phase-implement/references/recap-example.md +132 -0
  121. package/framework/skills/level-1-workflows/phase-setup/SKILL.md +171 -0
  122. package/framework/skills/level-1-workflows/{phase-tasks.md → phase-tasks/SKILL.md} +89 -7
  123. package/framework/skills/level-1-workflows/phase-tasks/references/tasks-example.md +231 -0
  124. package/framework/skills/level-1-workflows/phase-tasks/scripts/validate-tasks.mjs +112 -0
  125. package/framework/skills/level-1-workflows/phase-uiux/SKILL.md +246 -0
  126. package/framework/standards/STANDARDS.json +812 -0
  127. package/framework/standards/ai-agents/team-orchestration.md +3 -3
  128. package/framework/standards/frontend/nextjs/nextjs-patterns.md +17 -0
  129. package/framework/standards/integration/mcp/mcp-tools.md +384 -0
  130. package/framework/templates/README.md +17 -17
  131. package/framework/templates/REGISTRY.json +48 -233
  132. package/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
  133. package/framework/templates/context/CONTEXT-FEATURE.md +1 -1
  134. package/framework/templates/context/CONTEXT.md +3 -3
  135. package/framework/templates/docs/clarifications.md +253 -0
  136. package/framework/templates/docs/onboarding.md +123 -0
  137. package/framework/templates/docs/schema-analysis.md +119 -0
  138. package/framework/templates/docs/spec.md +149 -149
  139. package/framework/templates/docs/ui-components.md +124 -0
  140. package/framework/templates/docs/ui-design-system.md +76 -0
  141. package/framework/templates/docs/ui-flows.md +167 -0
  142. package/framework/templates/docs/ui-mockups.md +98 -0
  143. package/framework/templates/docs/user-stories.md +34 -0
  144. package/framework/templates/examples/spec-examples.md +1 -1
  145. package/framework/templates/infrastructure/github/README.md +11 -11
  146. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
  147. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  148. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +1 -1
  149. package/framework/workflows/configs/express.json +45 -0
  150. package/framework/workflows/configs/spec-only.json +43 -0
  151. package/framework/workflows/docs/enforcement-pipeline.md +8 -8
  152. package/framework/workflows/docs/full-morph.md +3 -3
  153. package/package.json +3 -1
  154. package/scripts/generate-refs.js +336 -0
  155. package/scripts/generate-standards-registry.js +44 -0
  156. package/scripts/validate-real.mjs +255 -0
  157. package/src/commands/feature/create-story.js +362 -361
  158. package/src/commands/feature/shard-spec.js +225 -224
  159. package/src/commands/feature/sprint-status.js +1 -1
  160. package/src/commands/generation/generate-onboarding.js +169 -0
  161. package/src/commands/generation/generate.js +2 -2
  162. package/src/commands/mcp/mcp-setup.js +315 -0
  163. package/src/commands/project/changes.js +66 -0
  164. package/src/commands/project/checkpoint.js +209 -0
  165. package/src/commands/project/cost.js +179 -0
  166. package/src/commands/project/diff.js +278 -0
  167. package/src/commands/project/doctor.js +55 -7
  168. package/src/commands/project/init.js +318 -136
  169. package/src/commands/project/revert.js +173 -0
  170. package/src/commands/project/standards.js +80 -0
  171. package/src/commands/project/status.js +376 -0
  172. package/src/commands/project/update-agents.js +23 -0
  173. package/src/commands/project/update.js +60 -88
  174. package/src/commands/state/advance-phase.js +4 -3
  175. package/src/commands/state/state.js +10 -3
  176. package/src/commands/state/validate-phase.js +19 -2
  177. package/src/commands/templates/template-customize.js +4 -4
  178. package/src/commands/templates/template-render.js +1 -1
  179. package/src/commands/templates/template-show.js +1 -1
  180. package/src/commands/validation/validate-feature.js +359 -0
  181. package/src/core/orchestrator.js +3 -38
  182. package/src/core/paths/output-schema.js +135 -0
  183. package/src/core/state/state-manager.js +831 -592
  184. package/src/core/templates/template-registry.js +2 -2
  185. package/src/core/workflows/workflow-detector.js +17 -1
  186. package/src/lib/agents/micro-agent-factory.js +1 -1
  187. package/src/lib/context/context-bundler.js +2 -1
  188. package/src/lib/detectors/claude-config-detector.js +390 -0
  189. package/src/lib/detectors/conversation-analyzer.js +4 -4
  190. package/src/lib/detectors/design-system-detector.js +6 -5
  191. package/src/lib/detectors/standards-generator.js +2 -2
  192. package/src/lib/generators/context-generator.js +539 -538
  193. package/src/lib/generators/recap-generator.js +1 -1
  194. package/src/lib/generators/settings-generator.js +210 -0
  195. package/src/lib/hooks/hook-executor.js +1 -1
  196. package/src/lib/installers/mcp-installer.js +299 -0
  197. package/src/lib/learning/learning-system.js +3 -3
  198. package/src/lib/orchestration/team-orchestrator.js +1 -1
  199. package/src/lib/standards/standards-context-injector.js +7 -7
  200. package/src/lib/threads/thread-coordinator.js +1 -1
  201. package/src/lib/troubleshooting/troubleshoot-grep.js +1 -1
  202. package/src/lib/validators/contracts/contract-compliance-validator.js +274 -273
  203. package/src/lib/validators/design-system/design-system-validator.js +1 -1
  204. package/src/lib/validators/spec-validator.js +258 -258
  205. package/src/lib/validators/validation-runner.js +270 -269
  206. package/src/utils/agents-installer.js +206 -0
  207. package/src/utils/claude-settings-manager.js +258 -0
  208. package/src/utils/file-copier.js +1 -1
  209. package/src/utils/hooks-installer.js +354 -28
  210. package/src/utils/skills-installer.js +118 -0
  211. package/.morph/project/context/README.md +0 -17
  212. package/.morph/project/context/detection-log.md +0 -16
  213. package/.morph/project/standards/inferred.md +0 -59
  214. package/framework/hooks/agent-stop/validate-and-continue.js +0 -96
  215. package/framework/hooks/agent-stop/validate-checkpoints.js +0 -101
  216. package/framework/hooks/agent-stop/validate-tests.js +0 -109
  217. package/framework/hooks/agent-teams/dispatch.js +0 -67
  218. package/framework/hooks/agent-teams/phase-advanced.js +0 -80
  219. package/framework/hooks/agent-teams/task-completed.js +0 -76
  220. package/framework/hooks/agent-teams/teammate-idle.js +0 -70
  221. package/framework/skills/level-1-workflows/phase-design.md +0 -213
  222. package/framework/skills/level-1-workflows/phase-setup.md +0 -106
  223. package/framework/skills/level-1-workflows/phase-uiux.md +0 -169
  224. package/framework/skills/level-2-domains/backend/api-designer.md +0 -59
  225. package/framework/skills/level-2-domains/backend/ef-modeler.md +0 -58
  226. package/framework/skills/level-3-technologies/README.md +0 -7
  227. package/framework/skills/level-4-patterns/README.md +0 -7
  228. package/src/commands/agents/agents-fuse.js +0 -97
  229. package/src/commands/agents/micro-agent.js +0 -112
  230. package/src/commands/agents/spawn-team.js +0 -237
  231. package/src/commands/agents/squad-template.js +0 -146
  232. package/src/commands/analytics/analytics.js +0 -176
  233. package/src/commands/context/context-prime.js +0 -63
  234. package/src/commands/context/core-four.js +0 -54
  235. package/src/commands/generation/generate-context.js +0 -40
  236. package/src/commands/project/detect-agents.js +0 -207
  237. package/src/commands/project/detect-workflow.js +0 -174
  238. package/src/commands/threads/thread-template.js +0 -103
  239. package/src/commands/threads/threads.js +0 -261
  240. package/src/commands/utils/session-summary.js +0 -291
  241. package/src/llm/analyzer.js +0 -215
  242. package/src/llm/few-shot-examples.js +0 -216
  243. package/src/llm/project-config-schema.json +0 -188
  244. package/src/llm/prompt-builder.js +0 -96
  245. /package/.morph/{config → framework}/agents.json +0 -0
  246. /package/.morph/{standards → framework/standards}/ai-agents/blazor-ui.md +0 -0
  247. /package/.morph/{standards → framework/standards}/ai-agents/production.md +0 -0
  248. /package/.morph/{standards → framework/standards}/ai-agents/setup.md +0 -0
  249. /package/.morph/{standards → framework/standards}/ai-agents/workflows.md +0 -0
  250. /package/.morph/{standards → framework/standards}/architecture/ddd/aggregates.md +0 -0
  251. /package/.morph/{standards → framework/standards}/architecture/ddd/entities.md +0 -0
  252. /package/.morph/{standards → framework/standards}/architecture/ddd/value-objects.md +0 -0
  253. /package/.morph/{standards → framework/standards}/backend/api/minimal-api.md +0 -0
  254. /package/.morph/{standards → framework/standards}/backend/api/rest.md +0 -0
  255. /package/.morph/{standards → framework/standards}/backend/api/validation.md +0 -0
  256. /package/.morph/{standards → framework/standards}/backend/authentication/passkeys.md +0 -0
  257. /package/.morph/{standards → framework/standards}/backend/database/ef-core.md +0 -0
  258. /package/.morph/{standards → framework/standards}/backend/database/migrations.md +0 -0
  259. /package/.morph/{standards → framework/standards}/backend/database/postgresql/database.md +0 -0
  260. /package/.morph/{standards → framework/standards}/backend/database/repository-patterns.md +0 -0
  261. /package/.morph/{standards → framework/standards}/backend/database/vector-search-rag.md +0 -0
  262. /package/.morph/{standards → framework/standards}/backend/dotnet/async.md +0 -0
  263. /package/.morph/{standards → framework/standards}/backend/dotnet/core.md +0 -0
  264. /package/.morph/{standards → framework/standards}/backend/dotnet/di.md +0 -0
  265. /package/.morph/{standards → framework/standards}/backend/dotnet/program-cs-checklist.md +0 -0
  266. /package/.morph/{standards → framework/standards}/backend/integrations/asaas/asaas-api.md +0 -0
  267. /package/.morph/{standards → framework/standards}/backend/integrations/clerk/clerk-auth.md +0 -0
  268. /package/.morph/{standards → framework/standards}/backend/integrations/hangfire/hangfire-jobs.md +0 -0
  269. /package/.morph/{standards → framework/standards}/backend/integrations/resend/resend-email.md +0 -0
  270. /package/.morph/{standards → framework/standards}/context/analytics.md +0 -0
  271. /package/.morph/{standards → framework/standards}/context/bundles.md +0 -0
  272. /package/.morph/{standards → framework/standards}/context/priming.md +0 -0
  273. /package/.morph/{standards → framework/standards}/core/architecture.md +0 -0
  274. /package/.morph/{standards → framework/standards}/core/coding.md +0 -0
  275. /package/.morph/{standards → framework/standards}/core/git-branching-strategy.md +0 -0
  276. /package/.morph/{standards → framework/standards}/core/git.md +0 -0
  277. /package/.morph/{standards → framework/standards}/core/testing.md +0 -0
  278. /package/.morph/{standards → framework/standards}/data/nosql/blob-storage.md +0 -0
  279. /package/.morph/{standards → framework/standards}/data/nosql/cache/redis.md +0 -0
  280. /package/.morph/{standards → framework/standards}/data/nosql/cosmos-db.md +0 -0
  281. /package/.morph/{standards → framework/standards}/data/vector-search/azure-ai-search.md +0 -0
  282. /package/.morph/{standards → framework/standards}/data/vector-search/rag-chunking.md +0 -0
  283. /package/.morph/{standards → framework/standards}/frontend/blazor/design-checklist.md +0 -0
  284. /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui-setup.md +0 -0
  285. /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui.md +0 -0
  286. /package/.morph/{standards → framework/standards}/frontend/blazor/html-conversion.md +0 -0
  287. /package/.morph/{standards → framework/standards}/frontend/blazor/lifecycle.md +0 -0
  288. /package/.morph/{standards → framework/standards}/frontend/blazor/pitfalls.md +0 -0
  289. /package/.morph/{standards → framework/standards}/frontend/blazor/state.md +0 -0
  290. /package/.morph/{standards → framework/standards}/frontend/design-system/animations.md +0 -0
  291. /package/.morph/{standards → framework/standards}/frontend/design-system/naming.md +0 -0
  292. /package/.morph/{standards → framework/standards}/infrastructure/azure/azure.md +0 -0
  293. /package/.morph/{standards → framework/standards}/infrastructure/azure/bicep/bicep-patterns.md +0 -0
  294. /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/azure-devops-setup.md +0 -0
  295. /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/local-development.md +0 -0
  296. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/functions.md +0 -0
  297. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/service-bus.md +0 -0
  298. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/storage.md +0 -0
  299. /package/.morph/{standards → framework/standards}/infrastructure/docker/easypanel-deploy.md +0 -0
  300. /package/.morph/{standards → framework/standards}/infrastructure/supabase/mcp-setup.md +0 -0
  301. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-auth.md +0 -0
  302. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-pgvector.md +0 -0
  303. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-rls.md +0 -0
  304. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-storage.md +0 -0
  305. /package/.morph/{standards → framework/standards}/integration/api/graphql.md +0 -0
  306. /package/.morph/{standards → framework/standards}/integration/api/grpc.md +0 -0
  307. /package/.morph/{standards → framework/standards}/integration/api/rest-design.md +0 -0
  308. /package/.morph/{standards → framework/standards}/integration/event-driven/cqrs.md +0 -0
  309. /package/.morph/{standards → framework/standards}/integration/event-driven/event-sourcing.md +0 -0
  310. /package/.morph/{standards → framework/standards}/integration/event-driven/service-bus.md +0 -0
  311. /package/.morph/{standards → framework/standards}/observability/logging.md +0 -0
  312. /package/.morph/{standards → framework/standards}/observability/metrics.md +0 -0
  313. /package/.morph/{standards → framework/standards}/observability/monitoring.md +0 -0
  314. /package/.morph/{standards → framework/standards}/observability/tracing.md +0 -0
  315. /package/.morph/{standards → framework/standards}/workflows/parallel-execution.md +0 -0
  316. /package/.morph/{standards → framework/standards}/workflows/thread-management.md +0 -0
  317. /package/.morph/{templates → framework/templates}/.idea/morph-templates.xml +0 -0
  318. /package/.morph/{templates → framework/templates}/.vscode/morph-templates.code-snippets +0 -0
  319. /package/.morph/{templates → framework/templates}/IDE-SNIPPETS.md +0 -0
  320. /package/.morph/{templates → framework/templates}/code/dotnet/backend/repository.cs +0 -0
  321. /package/.morph/{templates → framework/templates}/code/dotnet/backend/service.cs +0 -0
  322. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Commands.cs +0 -0
  323. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Entities.cs +0 -0
  324. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Queries.cs +0 -0
  325. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/README.md +0 -0
  326. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/api-contracts.cs +0 -0
  327. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/contracts.cs +0 -0
  328. /package/.morph/{templates → framework/templates}/code/dotnet/database/migration.cs +0 -0
  329. /package/.morph/{templates → framework/templates}/code/dotnet/frontend/component.razor +0 -0
  330. /package/.morph/{templates → framework/templates}/code/dotnet/jobs/agent.cs +0 -0
  331. /package/.morph/{templates → framework/templates}/code/dotnet/jobs/job.cs +0 -0
  332. /package/.morph/{templates → framework/templates}/code/dotnet/test.cs +0 -0
  333. /package/.morph/{templates → framework/templates}/code/sql/rls-policy.sql +0 -0
  334. /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.sql +0 -0
  335. /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.template.sql +0 -0
  336. /package/.morph/{templates → framework/templates}/code/typescript/contracts.ts +0 -0
  337. /package/.morph/{templates → framework/templates}/docs/proposal.md +0 -0
  338. /package/.morph/{templates → framework/templates}/examples/design-system-examples.md +0 -0
  339. /package/.morph/{templates → framework/templates}/feature/decisions.md +0 -0
  340. /package/.morph/{templates → framework/templates}/feature/recap.md +0 -0
  341. /package/.morph/{templates → framework/templates}/feature/tasks.md +0 -0
  342. /package/.morph/{templates → framework/templates}/infrastructure/azure/Dockerfile.example +0 -0
  343. /package/.morph/{templates → framework/templates}/infrastructure/azure/README.md +0 -0
  344. /package/.morph/{templates → framework/templates}/infrastructure/azure/app-insights.bicep +0 -0
  345. /package/.morph/{templates → framework/templates}/infrastructure/azure/app-service.bicep +0 -0
  346. /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app-env.bicep +0 -0
  347. /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app.bicep +0 -0
  348. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy-checklist.md +0 -0
  349. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.ps1 +0 -0
  350. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.sh +0 -0
  351. /package/.morph/{templates → framework/templates}/infrastructure/azure/key-vault.bicep +0 -0
  352. /package/.morph/{templates → framework/templates}/infrastructure/azure/main.bicep +0 -0
  353. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.dev.json +0 -0
  354. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.prod.json +0 -0
  355. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.staging.json +0 -0
  356. /package/.morph/{templates → framework/templates}/infrastructure/azure/sql-database.bicep +0 -0
  357. /package/.morph/{templates → framework/templates}/infrastructure/azure/storage.bicep +0 -0
  358. /package/.morph/{templates → framework/templates}/infrastructure/docker/Dockerfile.template +0 -0
  359. /package/.morph/{templates → framework/templates}/infrastructure/docker/docker-compose.template.yml +0 -0
  360. /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-api.dockerfile +0 -0
  361. /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-web.dockerfile +0 -0
  362. /package/.morph/{templates → framework/templates}/infrastructure/docker/easypanel.template.json +0 -0
  363. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -0
  364. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -0
  365. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/health-check/action.yml.hbs +0 -0
  366. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -0
  367. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -0
  368. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -0
  369. /package/.morph/{templates → framework/templates}/integrations/asaas-client.cs +0 -0
  370. /package/.morph/{templates → framework/templates}/integrations/asaas-webhook.cs +0 -0
  371. /package/.morph/{templates → framework/templates}/integrations/azure-identity-config.cs +0 -0
  372. /package/.morph/{templates → framework/templates}/integrations/clerk-config.cs +0 -0
  373. /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-agent.md +0 -0
  374. /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-aggregator.md +0 -0
  375. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-retry.md +0 -0
  376. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-validation.md +0 -0
  377. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-wrapper.md +0 -0
  378. /package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-coordinator.md +0 -0
  379. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/backend-squad.md +0 -0
  380. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/frontend-squad.md +0 -0
  381. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/squad-leader.md +0 -0
  382. /package/.morph/{templates → framework/templates}/meta-prompts/validators/checkpoint-validator.md +0 -0
  383. /package/.morph/{templates → framework/templates}/saas/subscription.cs +0 -0
  384. /package/.morph/{templates → framework/templates}/saas/tenant.cs +0 -0
  385. /package/.morph/{templates → framework/templates}/state.template.json +0 -0
  386. /package/.morph/{templates → framework/templates}/ui/FluentDesignTheme.cs +0 -0
  387. /package/.morph/{templates → framework/templates}/ui/MudTheme.cs +0 -0
  388. /package/.morph/{templates → framework/templates}/ui/design-system.css +0 -0
  389. /package/framework/{skills/level-2-domains → agents}/README.md +0 -0
  390. /package/framework/hooks/{commit-msg → git/commit-msg}/conventional-commits.sh +0 -0
  391. /package/framework/hooks/{pre-commit → git/pre-commit}/agents.sh +0 -0
  392. /package/framework/hooks/{pre-commit → git/pre-commit}/orchestrator.sh +0 -0
  393. /package/framework/hooks/{pre-commit → git/pre-commit}/specs.sh +0 -0
  394. /package/framework/hooks/{pre-push → git/pre-push}/run-tests.sh +0 -0
@@ -0,0 +1,231 @@
1
+ # Tasks - Photo Processing Pipeline
2
+
3
+ > Example of a well-structured tasks.md. This is a filled-in reference — not a template.
4
+ > All tasks are atomic (15–60 min), independently commitable, and directly traceable to spec.md.
5
+
6
+ | Task ID | Type | Title | Status |
7
+ |---------|------|-------|--------|
8
+ | T001 | Contract | Define C# contracts and interfaces | Done |
9
+ | T002 | Domain | Create ProcessingJob entity and enum | Done |
10
+ | T003 | Infra | EF Core migration and DbContext setup | Done |
11
+ | T004 | Infra | Azure Blob Storage service | Done |
12
+ | T005 | Service | Implement PhotoProcessingService | In Progress |
13
+ | T006 | Job | Implement Hangfire background job | Pending |
14
+ | T007 | API | Upload and status endpoints (Minimal API) | Pending |
15
+ | T008 | UI | Blazor upload page component | Pending |
16
+ | T009 | UI | Blazor status polling page | Pending |
17
+ | T010 | Test | Unit tests for PhotoProcessingService | Pending |
18
+ | T011 | Test | Integration tests for upload + status API | Pending |
19
+
20
+ **Status Values:** `Pending | In Progress | Blocked | Done`
21
+
22
+ ---
23
+
24
+ ## Phase 1: Contracts & Data Model
25
+
26
+ ### T001: Define C# contracts and interfaces
27
+ - **Type:** Contract
28
+ - **Priority:** 1
29
+ - **Estimate:** 30min
30
+ - **Assigned:** dotnet-senior
31
+ - **Dependencies:** None
32
+
33
+ **Description:**
34
+ Define all service interfaces, command/result records, and DTOs needed for the feature. These become the API contract other tasks depend on — implement data model and services against these interfaces.
35
+
36
+ **Deliverables:**
37
+ - [ ] Create: `src/Application/PhotoProcessing/Interfaces/IPhotoProcessingService.cs`
38
+ - [ ] Create: `src/Application/PhotoProcessing/Commands/UploadPhotoCommand.cs`
39
+ - [ ] Create: `src/Application/PhotoProcessing/Queries/GetJobStatusQuery.cs`
40
+ - [ ] Create: `src/Application/PhotoProcessing/DTOs/JobStatusDto.cs`
41
+
42
+ ---
43
+
44
+ ### T002: Create ProcessingJob entity and enum
45
+ - **Type:** Domain
46
+ - **Priority:** 1
47
+ - **Estimate:** 30min
48
+ - **Assigned:** dotnet-senior
49
+ - **Dependencies:** T001
50
+
51
+ **Description:**
52
+ Create the `ProcessingJob` domain entity and `ProcessingStatus` enum per the data model in spec.md. Entity must use private setters and expose domain methods for state transitions (`MarkProcessing()`, `MarkCompleted()`, `MarkFailed()`).
53
+
54
+ **Deliverables:**
55
+ - [ ] Create: `src/Domain/Entities/ProcessingJob.cs`
56
+ - [ ] Create: `src/Domain/Enums/ProcessingStatus.cs`
57
+
58
+ ---
59
+
60
+ ### T003: EF Core migration and DbContext setup
61
+ - **Type:** Infrastructure
62
+ - **Priority:** 1
63
+ - **Estimate:** 45min
64
+ - **Assigned:** dotnet-senior
65
+ - **Dependencies:** T002
66
+
67
+ **Description:**
68
+ Add `ProcessingJob` to `AppDbContext`, configure via Fluent API (column lengths, indexes, defaults), and create initial migration. Verify migration applies cleanly to a local SQL Server instance.
69
+
70
+ **Deliverables:**
71
+ - [ ] Update: `src/Infrastructure/Persistence/AppDbContext.cs`
72
+ - [ ] Create: `src/Infrastructure/Persistence/Configurations/ProcessingJobConfiguration.cs`
73
+ - [ ] Run: `dotnet ef migrations add AddProcessingJob`
74
+ - [ ] Verify: migration applies without errors
75
+
76
+ ---
77
+
78
+ ## Phase 2: Infrastructure Services
79
+
80
+ ### T004: Azure Blob Storage service
81
+ - **Type:** Infrastructure
82
+ - **Priority:** 1
83
+ - **Estimate:** 45min
84
+ - **Assigned:** azure-architect
85
+ - **Dependencies:** None
86
+
87
+ **Description:**
88
+ Implement `IBlobStorageService` with upload and generate-URL operations using `Azure.Storage.Blobs` SDK. Register as scoped in DI. Add connection string to `appsettings.json` (placeholder) and Key Vault reference for production.
89
+
90
+ **Deliverables:**
91
+ - [ ] Create: `src/Infrastructure/Storage/IBlobStorageService.cs`
92
+ - [ ] Create: `src/Infrastructure/Storage/AzureBlobStorageService.cs`
93
+ - [ ] Create: `src/Infrastructure/Storage/FakeBlobStorageService.cs` (for simulation mode)
94
+ - [ ] Update: `src/Infrastructure/DependencyInjection.cs`
95
+
96
+ ---
97
+
98
+ ### T005: Implement PhotoProcessingService
99
+ - **Type:** Service
100
+ - **Priority:** 2
101
+ - **Estimate:** 1h
102
+ - **Assigned:** dotnet-senior
103
+ - **Dependencies:** T001, T002, T003, T004
104
+
105
+ **Description:**
106
+ Implement `IPhotoProcessingService` with `UploadAsync` (validate → blob upload → create job → enqueue Hangfire job) and `GetStatusAsync`. Use result pattern for validation errors; throw `NotFoundException` for missing jobs.
107
+
108
+ **Deliverables:**
109
+ - [ ] Create: `src/Application/PhotoProcessing/PhotoProcessingService.cs`
110
+ - [ ] Update: `src/Application/DependencyInjection.cs`
111
+
112
+ ---
113
+
114
+ ### T006: Implement Hangfire background job
115
+ - **Type:** Job
116
+ - **Priority:** 2
117
+ - **Estimate:** 1h
118
+ - **Assigned:** dotnet-senior
119
+ - **Dependencies:** T002, T004
120
+
121
+ **Description:**
122
+ Implement `IPhotoProcessingJob` that: sets status = Processing → downloads original from Blob → calls AI API → uploads processed photo → sets status = Completed. On exception: increment RetryCount, set Failed if >= 3. Add `[AutomaticRetry(Attempts = 3)]` attribute.
123
+
124
+ **Deliverables:**
125
+ - [ ] Create: `src/Application/PhotoProcessing/PhotoProcessingJob.cs`
126
+ - [ ] Create: `src/Application/PhotoProcessing/FakePhotoProcessingJob.cs` (simulation mode)
127
+
128
+ ---
129
+
130
+ ## Phase 3: API Endpoints
131
+
132
+ ### T007: Upload and status endpoints (Minimal API)
133
+ - **Type:** API
134
+ - **Priority:** 2
135
+ - **Estimate:** 45min
136
+ - **Assigned:** dotnet-senior
137
+ - **Dependencies:** T005
138
+
139
+ **Description:**
140
+ Create two endpoints per spec.md:
141
+ - `POST /api/upload` — multipart/form-data, returns `{ jobId }`, maps to `UploadPhotoCommand`
142
+ - `GET /api/status/{jobId}` — returns `JobStatusDto`
143
+ - `GET /api/download/{jobId}` — redirects to Blob URL if Completed, else 404
144
+
145
+ **Deliverables:**
146
+ - [ ] Create: `src/Web/Endpoints/PhotoProcessingEndpoints.cs`
147
+ - [ ] Update: `src/Web/Program.cs` to register endpoint group
148
+
149
+ ---
150
+
151
+ ## Phase 4: UI Components
152
+
153
+ ### T008: Blazor upload page component
154
+ - **Type:** UI
155
+ - **Priority:** 2
156
+ - **Estimate:** 1h
157
+ - **Assigned:** blazor-builder
158
+ - **Dependencies:** T007
159
+
160
+ **Description:**
161
+ Blazor Server page at `/upload`. File input with client-side validation (type + size before submit). Loading state during upload. Redirect to `/processing/{jobId}` on success. Error message display per spec wireframe.
162
+
163
+ **Deliverables:**
164
+ - [ ] Create: `src/Web/Pages/Upload.razor`
165
+ - [ ] Create: `src/Web/Pages/Upload.razor.cs`
166
+
167
+ ---
168
+
169
+ ### T009: Blazor status polling page
170
+ - **Type:** UI
171
+ - **Priority:** 3
172
+ - **Estimate:** 1h
173
+ - **Assigned:** blazor-builder
174
+ - **Dependencies:** T007
175
+
176
+ **Description:**
177
+ Blazor Server page at `/processing/{jobId}`. Polls `GET /api/status/{jobId}` every 5 seconds using `PeriodicTimer`. Shows status label + progress indicator. "Download" button when Completed. "Retry" suggestion when Failed. Stops polling on terminal state.
178
+
179
+ **Deliverables:**
180
+ - [ ] Create: `src/Web/Pages/ProcessingStatus.razor`
181
+ - [ ] Create: `src/Web/Pages/ProcessingStatus.razor.cs`
182
+
183
+ ---
184
+
185
+ ## Phase 5: Tests
186
+
187
+ ### T010: Unit tests for PhotoProcessingService
188
+ - **Type:** Test
189
+ - **Priority:** 2
190
+ - **Estimate:** 1h
191
+ - **Assigned:** dotnet-senior
192
+ - **Dependencies:** T005
193
+
194
+ **Description:**
195
+ Unit tests covering: happy path upload, invalid file type rejection, file too large rejection, status retrieval for each status value, not-found case. Use Moq for `IBlobStorageService` and `IProcessingJobRepository`. FluentAssertions for assertions.
196
+
197
+ **Deliverables:**
198
+ - [ ] Create: `tests/Unit/Application/PhotoProcessing/PhotoProcessingServiceTests.cs`
199
+
200
+ ---
201
+
202
+ ### T011: Integration tests for upload + status API
203
+ - **Type:** Test
204
+ - **Priority:** 3
205
+ - **Estimate:** 1h
206
+ - **Assigned:** dotnet-senior
207
+ - **Dependencies:** T007, T010
208
+
209
+ **Description:**
210
+ Integration tests using `WebApplicationFactory` + in-memory SQLite (or TestContainers for SQL Server). Tests: POST /api/upload returns 200 with jobId, GET /api/status/{jobId} returns correct status, GET /api/download/{completedJobId} returns redirect.
211
+
212
+ **Deliverables:**
213
+ - [ ] Create: `tests/Integration/Api/PhotoProcessingEndpointTests.cs`
214
+ - [ ] Create: `tests/Integration/Fixtures/PhotoProcessingApiFixture.cs`
215
+
216
+ ---
217
+
218
+ ## Summary
219
+
220
+ | Phase | Tasks | Estimate |
221
+ |-------|-------|----------|
222
+ | Contracts & Data Model | T001–T003 | 1h45m |
223
+ | Infrastructure Services | T004–T006 | 2h45m |
224
+ | API Endpoints | T007 | 45m |
225
+ | UI Components | T008–T009 | 2h |
226
+ | Tests | T010–T011 | 2h |
227
+ | **Total** | **11 tasks** | **~9h15m** |
228
+
229
+ ---
230
+
231
+ *MORPH-SPEC by Polymorphism Tech*
@@ -0,0 +1,112 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * validate-tasks.mjs
4
+ *
5
+ * Validates a MORPH-SPEC tasks.md file for structure and completeness.
6
+ * Executed locally by Claude via Bash — output returned to Claude.
7
+ *
8
+ * Usage:
9
+ * node validate-tasks.mjs <tasks-file>
10
+ * node validate-tasks.mjs .morph/features/my-feature/3-tasks/tasks.md
11
+ *
12
+ * Checks:
13
+ * - Summary table exists with T### IDs and valid statuses
14
+ * - Each task header has T### format
15
+ * - Each task has Type, Priority, Estimate, Dependencies fields
16
+ * - Each task has at least one deliverable checkbox
17
+ * - Task IDs are sequential (no gaps)
18
+ * - Reports counts by status
19
+ */
20
+
21
+ import { readFileSync, existsSync } from 'fs';
22
+
23
+ const taskFile = process.argv[2];
24
+
25
+ if (!taskFile) {
26
+ console.error(JSON.stringify({ error: 'Usage: validate-tasks.mjs <tasks-file>' }));
27
+ process.exit(1);
28
+ }
29
+
30
+ if (!existsSync(taskFile)) {
31
+ console.error(JSON.stringify({ error: `File not found: ${taskFile}` }));
32
+ process.exit(1);
33
+ }
34
+
35
+ const content = readFileSync(taskFile, 'utf-8');
36
+ const lines = content.split('\n');
37
+
38
+ const errors = [];
39
+ const warnings = [];
40
+
41
+ // 1. Parse summary table (| T001 | Type | Title | Status |)
42
+ const tableRows = lines.filter(l => /^\|\s*T\d{3}/.test(l));
43
+ const VALID_STATUSES = new Set(['Pending', 'In Progress', 'Blocked', 'Done']);
44
+ const summaryTasks = [];
45
+
46
+ for (const row of tableRows) {
47
+ const parts = row.split('|').map(s => s.trim()).filter(Boolean);
48
+ if (parts.length < 4) continue;
49
+ const [id, , , status] = parts;
50
+ summaryTasks.push({ id, status });
51
+ if (!VALID_STATUSES.has(status)) {
52
+ errors.push(`Task ${id}: invalid status '${status}' — must be one of: ${[...VALID_STATUSES].join(', ')}`);
53
+ }
54
+ }
55
+
56
+ if (summaryTasks.length === 0) {
57
+ errors.push('No summary table found — expected rows matching | T### | Type | Title | Status |');
58
+ }
59
+
60
+ // 2. Parse task headers (### T001: Title)
61
+ const taskHeaders = lines
62
+ .map((l, i) => ({ line: i + 1, match: l.match(/^###\s+(T\d{3}):\s+(.+)/) }))
63
+ .filter(r => r.match);
64
+
65
+ // Check sequential IDs
66
+ const ids = taskHeaders.map(r => parseInt(r.match[1].slice(1)));
67
+ for (let i = 0; i < ids.length; i++) {
68
+ if (ids[i] !== i + 1) {
69
+ warnings.push(`Task ID gap or duplicate near T${String(ids[i]).padStart(3, '0')} (expected T${String(i + 1).padStart(3, '0')})`);
70
+ break;
71
+ }
72
+ }
73
+
74
+ // 3. Check each task section has required fields
75
+ for (const { line, match } of taskHeaders) {
76
+ const taskId = match[1];
77
+ // Collect lines in this task section (until next ### or end)
78
+ const start = line; // 1-indexed
79
+ let end = lines.length;
80
+ for (let i = start; i < lines.length; i++) {
81
+ if (i > start - 1 && /^#{1,3}\s/.test(lines[i])) { end = i; break; }
82
+ }
83
+ const section = lines.slice(start, end).join('\n');
84
+
85
+ if (!/\*\*Type:\*\*/.test(section)) errors.push(`${taskId}: missing **Type:** field`);
86
+ if (!/\*\*Priority:\*\*/.test(section)) errors.push(`${taskId}: missing **Priority:** field`);
87
+ if (!/\*\*Estimate:\*\*/.test(section)) errors.push(`${taskId}: missing **Estimate:** field`);
88
+ if (!/\*\*Dependencies:\*\*/.test(section)) warnings.push(`${taskId}: missing **Dependencies:** field`);
89
+ if (!/- \[ \]/.test(section)) warnings.push(`${taskId}: no deliverable checkboxes found`);
90
+ }
91
+
92
+ // 4. Status counts
93
+ const statusCounts = {};
94
+ for (const { status } of summaryTasks) {
95
+ statusCounts[status] = (statusCounts[status] ?? 0) + 1;
96
+ }
97
+
98
+ const result = {
99
+ file: taskFile,
100
+ valid: errors.length === 0,
101
+ tasks: {
102
+ total: summaryTasks.length,
103
+ byStatus: statusCounts,
104
+ completed: statusCounts['Done'] ?? 0,
105
+ remaining: (summaryTasks.length) - (statusCounts['Done'] ?? 0),
106
+ },
107
+ errors,
108
+ warnings,
109
+ };
110
+
111
+ console.log(JSON.stringify(result, null, 2));
112
+ process.exit(errors.length > 0 ? 1 : 0);
@@ -0,0 +1,246 @@
1
+ ---
2
+ name: phase-uiux
3
+ description: MORPH-SPEC Phase 1.5 (UI/UX). Creates design-system.md, mockups.md, components.md, and flows.md using Figma/Playwright/Context7 MCPs. Use after setup for features with frontend UI components, pages, dashboards, forms, wizards, or visual interactions requiring design documentation.
4
+ argument-hint: "[feature-name]"
5
+ user-invocable: false
6
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep
7
+ ---
8
+
9
+ # MORPH UI/UX Design - FASE 1.5
10
+
11
+ > INTERNAL: Workflow skill used by /morph-proposal during automated phase orchestration. Not a user command.
12
+
13
+ Fase condicional para features com front-end. Coleta requisitos de UI/UX, gera wireframes, specs de componentes e fluxos de usuário.
14
+
15
+ ## Pré-requisitos
16
+
17
+ - [ ] FASE 1 (Setup) concluída
18
+ - [ ] Feature tem keywords de UI detectadas (blazor, ui, component, page, dashboard, wizard, form, chart)
19
+ - [ ] `uiux-designer` agent ativado
20
+
21
+ ## Ferramentas Recomendadas
22
+
23
+ > **Ref:** `framework/skills/level-0-meta/tool-usage-guide/SKILL.md` para guia completo.
24
+ > **Ref:** `framework/standards/integration/mcp/mcp-tools.md` para referência MCP.
25
+
26
+ | Ação | Ferramenta | Alternativa |
27
+ |------|------------|-------------|
28
+ | Verificar design system existente | **Read** `.morph/context/design-system.md` | — |
29
+ | Ler screenshots do usuário | **Read** (arquivo de imagem) | — |
30
+ | Buscar variáveis CSS existentes | **Grep** `--root:` em `*.css,*.scss` | — |
31
+ | Encontrar componentes existentes | **Glob** `**/Components/**/*.razor` ou `**/components/**/*.tsx` | — |
32
+ | Extrair design tokens do Figma | **Figma MCP** `get_file({ fileKey })` | Read CSS/SCSS variables |
33
+ | Documentação de componentes UI | **Context7 MCP** `query_docs({ libraryId, query })` | **WebSearch** + **WebFetch** |
34
+ | Preview de página existente | **Playwright MCP** `browser_navigate()` + `browser_take_screenshot()` | **WebFetch** URL |
35
+ | Inspecionar estrutura da página | **Playwright MCP** `browser_snapshot()` | **WebFetch** + parse manual |
36
+ | Testar layout responsivo | **Playwright MCP** `browser_resize()` + `browser_take_screenshot()` | Manual testing |
37
+ | Referências de design externas | **WebSearch** + **WebFetch** | — |
38
+ | Renderizar templates UI | **Bash** `npx morph-spec template render docs/ui-mockups ...` | — |
39
+ | Gerar design system de CSS existente | **Bash** `npx morph-spec generate design-system --scan` | — |
40
+ | Atualizar state | **Bash** `npx morph-spec state mark-output ...` | — |
41
+
42
+ **MCPs desta fase:** Figma (design tokens), Playwright (preview, inspeção, responsividade), Context7 (docs de componentes).
43
+
44
+ **Anti-padrões:**
45
+ - ❌ WebSearch para docs MudBlazor (use Context7 MCP — mais preciso)
46
+ - ❌ Task agent para ler um screenshot (use Read direto na imagem)
47
+ - ❌ Adivinhar props de componentes (use Context7 para API real)
48
+
49
+ ---
50
+
51
+ ## Workflow
52
+
53
+ ### Passo 0: Verificar Design System Existe
54
+
55
+ **CRITICAL:** Antes de iniciar a FASE UI/UX, verifique se um design system existe:
56
+
57
+ ```bash
58
+ npx morph-spec detect-agents "{feature description}"
59
+ ```
60
+
61
+ Se nenhum design system for detectado (verificar output):
62
+
63
+ 1. **Opção A - Scaffold automático:**
64
+ - O sistema criará automaticamente um design system ao avançar para implementação
65
+ - Você pode gerar manualmente agora: `npx morph-spec generate design-system`
66
+
67
+ 2. **Opção B - Criar manualmente:**
68
+ - Crie `.morph/context/design-system.md` (project-level, compartilhado)
69
+ - Ou `.morph/features/$ARGUMENTS/2-ui/design-system.md` (feature-specific)
70
+
71
+ 3. **Opção C - Scan existing CSS:**
72
+ - Se o projeto já tem CSS com variáveis: `npx morph-spec generate design-system --scan`
73
+
74
+ **⚠️ IMPORTANTE:**
75
+ - Design system é **obrigatório** para features UI
76
+ - Gate automático bloqueará implementação (FASE 5) se design system não existir
77
+ - Melhor criar agora para garantir consistência visual
78
+
79
+ ### Passo 1: Detectar Se Fase É Necessária
80
+
81
+ Verifique se agentes ativos incluem `uiux-designer`:
82
+
83
+ ```bash
84
+ npx morph-spec state get $ARGUMENTS
85
+ ```
86
+
87
+ Se `uiux-designer` NÃO estiver nos `activeAgents`, pule esta fase e continue para FASE 2 (Design).
88
+
89
+ ### Passo 2: Coletar Input do Usuário
90
+
91
+ **SEMPRE perguntar ao usuário PRIMEIRO:**
92
+
93
+ 1. **Layout e estilo**:
94
+ - Você tem alguma ideia de layout em mente?
95
+ - Tem alguma referência visual? (sites, apps, screenshots)
96
+ - Como imagina o fluxo do usuário?
97
+
98
+ 2. **Componentes e interações**:
99
+ - Quais os principais componentes desta tela/página?
100
+ - Quais estados precisam ser considerados? (loading, error, empty, success)
101
+
102
+ 3. **Imagens de referência**:
103
+ - Tem imagens de exemplo que eu possa analisar?
104
+ - Se SIM: use Read tool para ler screenshots e extrair padrões
105
+
106
+ ### Passo 3: Decidir Biblioteca UI
107
+
108
+ Escolha entre **Fluent UI Blazor** (recomendado para AI-first) ou **MudBlazor** (componentes complexos):
109
+
110
+ **Critérios:**
111
+ - Fluent UI: Para dashboards, forms simples, AI components, Microsoft design language
112
+ - MudBlazor: Para data grids avançadas, charts complexos, material design
113
+
114
+ **Documente a decisão em `decisions.md`.**
115
+
116
+ ### Passo 4: Gerar Deliverables
117
+
118
+ Crie os seguintes arquivos em `.morph/features/$ARGUMENTS/`:
119
+
120
+ > **Use templates:** Utilize `npx morph-spec template render` para gerar os arquivos a partir dos templates em `.morph/framework/templates/docs/`. Templates disponíveis: `ui-design-system`, `ui-mockups`, `ui-components`, `ui-flows`.
121
+
122
+ #### 4.1. `ui-design-system.md`
123
+
124
+ **Se design system project-level existe (`.morph/context/design-system.md`):**
125
+ - Referencie-o nos specs: "Uses project design system at .morph/context/design-system.md"
126
+ - Crie `ui-design-system.md` apenas se houver cores/componentes **específicos** da feature
127
+
128
+ **Se não existe:**
129
+ - Crie design system feature-level completo com:
130
+ - Paleta de cores (primary, secondary, accent, semantic)
131
+ - Tipografia (heading scales, body text, code)
132
+ - Spacing e layout (grid, margins, paddings)
133
+ - Componentes base (buttons, inputs, cards)
134
+
135
+ #### 4.2. `ui-mockups.md`
136
+
137
+ Wireframes ASCII + descrições:
138
+ - Layout geral de cada tela/página
139
+ - Posicionamento de componentes
140
+ - Responsividade (desktop, tablet, mobile)
141
+ - Estados (loading, error, empty, success)
142
+
143
+ #### 4.3. `ui-components.md`
144
+
145
+ Specs técnicas de componentes Fluent UI/MudBlazor:
146
+ - Componente a usar (FluentButton, MudDataGrid, etc.)
147
+ - Props e configurações
148
+ - Eventos e bindings
149
+ - Validações e estados
150
+
151
+ #### 4.4. `ui-flows.md`
152
+
153
+ Fluxos de usuário completos:
154
+ - User stories
155
+ - Diagramas de fluxo (texto/ASCII)
156
+ - Edge cases (o que acontece se...?)
157
+ - Validações e feedback
158
+
159
+ ### CHECKPOINT: Validar Deliverables UI
160
+
161
+ **⏸️ PAUSE - Antes de prosseguir para acessibilidade:**
162
+
163
+ - [ ] Design system definido (project-level ou feature-level)?
164
+ - [ ] Wireframes cobrem TODOS os estados (loading, error, empty, success)?
165
+ - [ ] Componentes especificados com props reais da biblioteca UI escolhida?
166
+ - [ ] Fluxos de usuário completos com edge cases?
167
+ - [ ] Biblioteca UI escolhida documentada como ADR em `decisions.md`?
168
+
169
+ **❌ Se alguma checkbox NÃO estiver marcada:**
170
+ → Voltar e completar o deliverable faltante
171
+
172
+ **✅ Se TODAS as checkboxes estiverem marcadas:**
173
+ → Prosseguir para validação de acessibilidade
174
+
175
+ ---
176
+
177
+ ### Passo 5: Validar Acessibilidade e Responsividade
178
+
179
+ Documente nos arquivos UI:
180
+ - **WCAG 2.1 Level AA** compliance
181
+ - Contraste de cores adequado
182
+ - Labels acessíveis para screen readers
183
+ - Navegação por teclado
184
+ - **Responsive breakpoints**
185
+ - Desktop (>1200px)
186
+ - Tablet (768px - 1199px)
187
+ - Mobile (<768px)
188
+
189
+ ### Passo 6: Atualizar State
190
+
191
+ ```bash
192
+ npx morph-spec state set $ARGUMENTS phase uiux-design
193
+ npx morph-spec state mark-output $ARGUMENTS ui-design-system
194
+ npx morph-spec state mark-output $ARGUMENTS ui-mockups
195
+ npx morph-spec state mark-output $ARGUMENTS ui-components
196
+ npx morph-spec state mark-output $ARGUMENTS ui-flows
197
+ ```
198
+
199
+ > **Nota sobre formatos:** Os comandos `mark-output` aceitam TANTO kebab-case (`ui-design-system`)
200
+ > QUANTO camelCase (`uiDesignSystem`). Ambos os formatos funcionam igualmente! Use o que for mais
201
+ > confortável para você. Exemplos:
202
+ > - `npx morph-spec state mark-output my-feature uiDesignSystem` ✅
203
+ > - `npx morph-spec state mark-output my-feature ui-design-system` ✅
204
+
205
+ ## Outputs Gerados
206
+
207
+ - `.morph/features/$ARGUMENTS/2-ui/design-system.md`
208
+ - `.morph/features/$ARGUMENTS/2-ui/mockups.md`
209
+ - `.morph/features/$ARGUMENTS/2-ui/components.md`
210
+ - `.morph/features/$ARGUMENTS/2-ui/flows.md`
211
+ - `.morph/features/$ARGUMENTS/1-design/decisions.md` (atualizado com ADR UI library)
212
+
213
+ ## PAUSA OBRIGATÓRIA
214
+
215
+ Apresente ao usuário 3 ações sugeridas:
216
+
217
+ 1. **Aprovar UI/UX e prosseguir para design técnico**
218
+ 2. **Ajustar wireframes/componentes de telas específicas**
219
+ 3. **Revisar biblioteca UI escolhida (Fluent UI / MudBlazor)**
220
+
221
+ ## Critérios de Avanço
222
+
223
+ - [x] Input do usuário coletado (layout, referências)
224
+ - [x] Biblioteca UI escolhida e justificada (ADR)
225
+ - [x] 4 deliverables criados (design-system, mockups, components, flows)
226
+ - [x] Acessibilidade WCAG 2.1 documentada
227
+ - [x] Responsividade especificada
228
+ - [x] State atualizado
229
+ - [x] Usuário aprovou UI/UX
230
+
231
+ ---
232
+
233
+ ## Outputs desta Fase
234
+
235
+ <!-- morph:outputs:uiux -->
236
+ | Output | Caminho |
237
+ |--------|---------|
238
+ | `uiDesignSystem` | `.morph/features/{feature}/2-ui/design-system.md` |
239
+ | `uiMockups` | `.morph/features/{feature}/2-ui/mockups.md` |
240
+ | `uiComponents` | `.morph/features/{feature}/2-ui/components.md` |
241
+ | `uiFlows` | `.morph/features/{feature}/2-ui/flows.md` |
242
+ <!-- /morph:outputs -->
243
+
244
+ ---
245
+
246
+ Continuar automaticamente para FASE 2 (Design) após aprovação.