@polymorphism-tech/morph-spec 3.0.1 → 3.1.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 (273) hide show
  1. package/CLAUDE.md +52 -88
  2. package/LICENSE +72 -72
  3. package/README.md +198 -76
  4. package/bin/detect-agents.js +3 -1
  5. package/bin/morph-spec.js +10 -0
  6. package/bin/render-template.js +5 -4
  7. package/bin/semantic-detect-agents.js +2 -1
  8. package/bin/{task-manager.js → task-manager.cjs} +12 -1
  9. package/bin/validate-agents-skills.js +10 -4
  10. package/bin/validate-agents.js +4 -3
  11. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +977 -977
  12. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1048 -1048
  13. package/docs/api/scripts/collapse.js +38 -38
  14. package/docs/api/scripts/commonNav.js +28 -28
  15. package/docs/api/scripts/linenumber.js +25 -25
  16. package/docs/api/scripts/nav.js +12 -12
  17. package/docs/api/scripts/polyfill.js +3 -3
  18. package/docs/api/scripts/prettify/Apache-License-2.0.txt +202 -202
  19. package/docs/api/scripts/prettify/lang-css.js +2 -2
  20. package/docs/api/scripts/prettify/prettify.js +28 -28
  21. package/docs/api/scripts/search.js +98 -98
  22. package/docs/api/styles/jsdoc.css +776 -776
  23. package/docs/api/styles/prettify.css +80 -80
  24. package/docs/examples.md +328 -328
  25. package/docs/getting-started.md +3 -3
  26. package/docs/templates.md +418 -418
  27. package/package.json +3 -3
  28. package/scripts/postinstall.js +132 -132
  29. package/scripts/reorganize-skills.cjs +1 -1
  30. package/scripts/validate-agents-structure.cjs +1 -1
  31. package/scripts/validate-skills.cjs +2 -2
  32. package/src/commands/analyze-blazor-concurrency.js +193 -193
  33. package/src/commands/create-story.js +5 -2
  34. package/src/commands/deploy.js +780 -780
  35. package/src/commands/detect-agents.js +4 -2
  36. package/src/commands/generate.js +149 -149
  37. package/src/commands/lint-fluent.js +352 -352
  38. package/src/commands/rollback-phase.js +185 -185
  39. package/src/commands/session-summary.js +291 -291
  40. package/src/commands/shard-spec.js +224 -224
  41. package/src/commands/sprint-status.js +250 -250
  42. package/src/commands/task.js +1 -1
  43. package/src/commands/troubleshoot.js +222 -222
  44. package/src/commands/validate-blazor-state.js +210 -210
  45. package/src/commands/validate-blazor.js +156 -156
  46. package/src/commands/validate-css.js +84 -84
  47. package/src/commands/validate-phase.js +221 -221
  48. package/src/lib/blazor-concurrency-analyzer.js +288 -288
  49. package/src/lib/blazor-state-validator.js +291 -291
  50. package/src/lib/blazor-validator.js +374 -374
  51. package/src/lib/context-generator.js +7 -4
  52. package/src/lib/css-validator.js +352 -352
  53. package/src/lib/design-system-generator.js +298 -298
  54. package/src/lib/hook-executor.js +2 -1
  55. package/src/lib/learning-system.js +520 -520
  56. package/src/lib/mockup-generator.js +366 -366
  57. package/src/lib/stack-resolver.js +148 -0
  58. package/src/lib/standards-context-injector.js +4 -3
  59. package/src/lib/team-orchestrator.js +2 -1
  60. package/src/lib/troubleshoot-grep.js +204 -194
  61. package/src/lib/troubleshoot-index.js +144 -144
  62. package/src/lib/ui-detector.js +350 -350
  63. package/src/lib/validation-runner.js +2 -1
  64. package/src/lib/validators/architecture-validator.js +387 -387
  65. package/src/lib/validators/package-validator.js +360 -360
  66. package/src/lib/validators/ui-contrast-validator.js +422 -422
  67. package/src/utils/file-copier.js +3 -1
  68. package/src/utils/logger.js +32 -32
  69. package/src/utils/version-checker.js +175 -175
  70. package/{content → stacks/blazor-azure}/.azure/README.md +2 -2
  71. package/{content → stacks/blazor-azure}/.azure/pipelines/pipeline-variables.yml +1 -1
  72. package/{content → stacks/blazor-azure}/.azure/pipelines/prod-pipeline.yml +1 -1
  73. package/{content → stacks/blazor-azure}/.azure/pipelines/staging-pipeline.yml +1 -1
  74. package/{content → stacks/blazor-azure}/.claude/commands/morph-preflight.md +227 -227
  75. package/{content → stacks/blazor-azure}/.claude/commands/morph-troubleshoot.md +122 -122
  76. package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-setup.md +1 -1
  77. package/{content → stacks/blazor-azure}/.morph/docs/workflows/enforcement-pipeline.md +3 -3
  78. package/{content → stacks/blazor-azure}/.morph/hooks/README.md +12 -12
  79. package/{content → stacks/blazor-azure}/.morph/standards/agent-teams-workflow.md +2 -2
  80. package/{content → stacks/blazor-azure}/.morph/standards/migration-guide.md +2 -2
  81. package/{content → stacks/blazor-azure}/.morph/templates/infra/deploy-checklist.md +426 -426
  82. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/backend/dotnet-supabase.md +244 -0
  83. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/frontend/nextjs-supabase.md +335 -0
  84. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/infrastructure/easypanel-deployer.md +189 -0
  85. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +170 -0
  86. package/stacks/nextjs-supabase/.morph/config/agents.json +345 -0
  87. package/stacks/nextjs-supabase/.morph/config/config.template.json +92 -0
  88. package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +169 -0
  89. package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +247 -0
  90. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +697 -0
  91. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +85 -0
  92. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +86 -0
  93. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +498 -0
  94. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +121 -0
  95. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +138 -0
  96. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +162 -0
  97. package/stacks/nextjs-supabase/.morph/project.md +168 -0
  98. package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +191 -0
  99. package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +193 -0
  100. package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +171 -0
  101. package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +164 -0
  102. package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +179 -0
  103. package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +148 -0
  104. package/stacks/nextjs-supabase/.morph/templates/contracts.cs +173 -0
  105. package/stacks/nextjs-supabase/.morph/templates/contracts.ts +168 -0
  106. package/stacks/nextjs-supabase/.morph/templates/decisions.md +115 -0
  107. package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +38 -0
  108. package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +48 -0
  109. package/stacks/nextjs-supabase/.morph/templates/proposal.md +145 -0
  110. package/stacks/nextjs-supabase/.morph/templates/recap.md +134 -0
  111. package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +57 -0
  112. package/stacks/nextjs-supabase/.morph/templates/spec.md +231 -0
  113. package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +100 -0
  114. package/stacks/nextjs-supabase/.morph/templates/tasks.md +257 -0
  115. package/stacks/nextjs-supabase/CLAUDE.md +149 -0
  116. package/stacks/nextjs-supabase/README.md +112 -0
  117. /package/{content → stacks/blazor-azure}/.azure/docs/azure-devops-setup.md +0 -0
  118. /package/{content → stacks/blazor-azure}/.azure/docs/branch-strategy.md +0 -0
  119. /package/{content → stacks/blazor-azure}/.azure/docs/local-development.md +0 -0
  120. /package/{content → stacks/blazor-azure}/.azure/pipelines/templates/build-dotnet.yml +0 -0
  121. /package/{content → stacks/blazor-azure}/.azure/pipelines/templates/deploy-app-service.yml +0 -0
  122. /package/{content → stacks/blazor-azure}/.azure/pipelines/templates/deploy-container-app.yml +0 -0
  123. /package/{content → stacks/blazor-azure}/.azure/pipelines/templates/infra-deploy.yml +0 -0
  124. /package/{content → stacks/blazor-azure}/.claude/commands/morph-apply.md +0 -0
  125. /package/{content → stacks/blazor-azure}/.claude/commands/morph-archive.md +0 -0
  126. /package/{content → stacks/blazor-azure}/.claude/commands/morph-deploy.md +0 -0
  127. /package/{content → stacks/blazor-azure}/.claude/commands/morph-infra.md +0 -0
  128. /package/{content → stacks/blazor-azure}/.claude/commands/morph-proposal.md +0 -0
  129. /package/{content → stacks/blazor-azure}/.claude/commands/morph-status.md +0 -0
  130. /package/{content → stacks/blazor-azure}/.claude/settings.local.json +0 -0
  131. /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/README.md +0 -0
  132. /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/code-review.md +0 -0
  133. /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/morph-checklist.md +0 -0
  134. /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/simulation-checklist.md +0 -0
  135. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/README.md +0 -0
  136. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/morph-replicate.md +0 -0
  137. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-clarify.md +0 -0
  138. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-design.md +0 -0
  139. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-tasks.md +0 -0
  140. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-uiux.md +0 -0
  141. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/README.md +0 -0
  142. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +0 -0
  143. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/architecture/po-pm-advisor.md +0 -0
  144. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/architecture/prompt-engineer.md +0 -0
  145. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/architecture/seo-growth-hacker.md +0 -0
  146. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/architecture/standards-architect.md +0 -0
  147. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/dotnet-senior.md +0 -0
  148. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/ef-modeler.md +0 -0
  149. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +0 -0
  150. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/ms-agent-expert.md +0 -0
  151. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/frontend/blazor-builder.md +0 -0
  152. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/frontend/nextjs-expert.md +0 -0
  153. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +0 -0
  154. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/azure-architect.md +0 -0
  155. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/azure-deploy-specialist.md +0 -0
  156. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +0 -0
  157. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/container-specialist.md +0 -0
  158. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +0 -0
  159. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/asaas-financial.md +0 -0
  160. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/azure-identity.md +0 -0
  161. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/clerk-auth.md +0 -0
  162. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/resend-email.md +0 -0
  163. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/quality/code-analyzer.md +0 -0
  164. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/quality/testing-specialist.md +0 -0
  165. /package/{content → stacks/blazor-azure}/.claude/skills/level-3-technologies/README.md +0 -0
  166. /package/{content → stacks/blazor-azure}/.claude/skills/level-4-patterns/README.md +0 -0
  167. /package/{content → stacks/blazor-azure}/.morph/.morphversion +0 -0
  168. /package/{content → stacks/blazor-azure}/.morph/archive/.gitkeep +0 -0
  169. /package/{content → stacks/blazor-azure}/.morph/config/agents.json +0 -0
  170. /package/{content → stacks/blazor-azure}/.morph/config/config.template.json +0 -0
  171. /package/{content → stacks/blazor-azure}/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +0 -0
  172. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/design-impl.md +0 -0
  173. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/fast-track.md +0 -0
  174. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/full-morph.md +0 -0
  175. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/standard.md +0 -0
  176. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/ui-refresh.md +0 -0
  177. /package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/README.md +0 -0
  178. /package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/contracts.ts +0 -0
  179. /package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/spec.md +0 -0
  180. /package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/tasks.md +0 -0
  181. /package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/README.md +0 -0
  182. /package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/contracts.cs +0 -0
  183. /package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/decisions.md +0 -0
  184. /package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/spec.md +0 -0
  185. /package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/tasks.md +0 -0
  186. /package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/README.md +0 -0
  187. /package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/contracts.cs +0 -0
  188. /package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/spec.md +0 -0
  189. /package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/tasks.md +0 -0
  190. /package/{content → stacks/blazor-azure}/.morph/examples/scheduled-reports/decisions.md +0 -0
  191. /package/{content → stacks/blazor-azure}/.morph/examples/scheduled-reports/proposal.md +0 -0
  192. /package/{content → stacks/blazor-azure}/.morph/examples/scheduled-reports/spec.md +0 -0
  193. /package/{content → stacks/blazor-azure}/.morph/examples/state-v3.json +0 -0
  194. /package/{content → stacks/blazor-azure}/.morph/features/.gitkeep +0 -0
  195. /package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-agents.sh +0 -0
  196. /package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-all.sh +0 -0
  197. /package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-specs.sh +0 -0
  198. /package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-tests.sh +0 -0
  199. /package/{content → stacks/blazor-azure}/.morph/hooks/task-completed.js +0 -0
  200. /package/{content → stacks/blazor-azure}/.morph/hooks/teammate-idle.js +0 -0
  201. /package/{content → stacks/blazor-azure}/.morph/project.md +0 -0
  202. /package/{content → stacks/blazor-azure}/.morph/schemas/agent.schema.json +0 -0
  203. /package/{content → stacks/blazor-azure}/.morph/schemas/tasks.schema.json +0 -0
  204. /package/{content → stacks/blazor-azure}/.morph/specs/.gitkeep +0 -0
  205. /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-blazor-ui.md +0 -0
  206. /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-production.md +0 -0
  207. /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-setup.md +0 -0
  208. /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-workflows.md +0 -0
  209. /package/{content → stacks/blazor-azure}/.morph/standards/architecture.md +0 -0
  210. /package/{content → stacks/blazor-azure}/.morph/standards/azure.md +0 -0
  211. /package/{content → stacks/blazor-azure}/.morph/standards/coding.md +0 -0
  212. /package/{content → stacks/blazor-azure}/.morph/standards/dotnet10-migration.md +0 -0
  213. /package/{content → stacks/blazor-azure}/.morph/standards/fluent-ui-setup.md +0 -0
  214. /package/{content → stacks/blazor-azure}/.morph/standards/passkeys-auth.md +0 -0
  215. /package/{content → stacks/blazor-azure}/.morph/standards/vector-search-rag.md +0 -0
  216. /package/{content → stacks/blazor-azure}/.morph/state.json +0 -0
  217. /package/{content → stacks/blazor-azure}/.morph/templates/CONTEXT-FEATURE.md +0 -0
  218. /package/{content → stacks/blazor-azure}/.morph/templates/CONTEXT.md +0 -0
  219. /package/{content → stacks/blazor-azure}/.morph/templates/FluentDesignTheme.cs +0 -0
  220. /package/{content → stacks/blazor-azure}/.morph/templates/MudTheme.cs +0 -0
  221. /package/{content → stacks/blazor-azure}/.morph/templates/agent.cs +0 -0
  222. /package/{content → stacks/blazor-azure}/.morph/templates/clarify-questions.md +0 -0
  223. /package/{content → stacks/blazor-azure}/.morph/templates/component.razor +0 -0
  224. /package/{content → stacks/blazor-azure}/.morph/templates/contracts/Commands.cs +0 -0
  225. /package/{content → stacks/blazor-azure}/.morph/templates/contracts/Entities.cs +0 -0
  226. /package/{content → stacks/blazor-azure}/.morph/templates/contracts/Queries.cs +0 -0
  227. /package/{content → stacks/blazor-azure}/.morph/templates/contracts/README.md +0 -0
  228. /package/{content → stacks/blazor-azure}/.morph/templates/contracts.cs +0 -0
  229. /package/{content → stacks/blazor-azure}/.morph/templates/decisions.md +0 -0
  230. /package/{content → stacks/blazor-azure}/.morph/templates/design-system.css +0 -0
  231. /package/{content → stacks/blazor-azure}/.morph/templates/infra/.dockerignore.example +0 -0
  232. /package/{content → stacks/blazor-azure}/.morph/templates/infra/Dockerfile.example +0 -0
  233. /package/{content → stacks/blazor-azure}/.morph/templates/infra/README.md +0 -0
  234. /package/{content → stacks/blazor-azure}/.morph/templates/infra/app-insights.bicep +0 -0
  235. /package/{content → stacks/blazor-azure}/.morph/templates/infra/app-service.bicep +0 -0
  236. /package/{content → stacks/blazor-azure}/.morph/templates/infra/azure-pipelines-deploy.yml +0 -0
  237. /package/{content → stacks/blazor-azure}/.morph/templates/infra/container-app-env.bicep +0 -0
  238. /package/{content → stacks/blazor-azure}/.morph/templates/infra/container-app.bicep +0 -0
  239. /package/{content → stacks/blazor-azure}/.morph/templates/infra/deploy.ps1 +0 -0
  240. /package/{content → stacks/blazor-azure}/.morph/templates/infra/deploy.sh +0 -0
  241. /package/{content → stacks/blazor-azure}/.morph/templates/infra/key-vault.bicep +0 -0
  242. /package/{content → stacks/blazor-azure}/.morph/templates/infra/main.bicep +0 -0
  243. /package/{content → stacks/blazor-azure}/.morph/templates/infra/parameters.dev.json +0 -0
  244. /package/{content → stacks/blazor-azure}/.morph/templates/infra/parameters.prod.json +0 -0
  245. /package/{content → stacks/blazor-azure}/.morph/templates/infra/parameters.staging.json +0 -0
  246. /package/{content → stacks/blazor-azure}/.morph/templates/infra/sql-database.bicep +0 -0
  247. /package/{content → stacks/blazor-azure}/.morph/templates/infra/storage.bicep +0 -0
  248. /package/{content → stacks/blazor-azure}/.morph/templates/integrations/asaas-client.cs +0 -0
  249. /package/{content → stacks/blazor-azure}/.morph/templates/integrations/asaas-webhook.cs +0 -0
  250. /package/{content → stacks/blazor-azure}/.morph/templates/integrations/azure-identity-config.cs +0 -0
  251. /package/{content → stacks/blazor-azure}/.morph/templates/integrations/clerk-config.cs +0 -0
  252. /package/{content → stacks/blazor-azure}/.morph/templates/job.cs +0 -0
  253. /package/{content → stacks/blazor-azure}/.morph/templates/migration.cs +0 -0
  254. /package/{content → stacks/blazor-azure}/.morph/templates/proposal.md +0 -0
  255. /package/{content → stacks/blazor-azure}/.morph/templates/recap.md +0 -0
  256. /package/{content → stacks/blazor-azure}/.morph/templates/repository.cs +0 -0
  257. /package/{content → stacks/blazor-azure}/.morph/templates/saas/subscription.cs +0 -0
  258. /package/{content → stacks/blazor-azure}/.morph/templates/saas/tenant.cs +0 -0
  259. /package/{content → stacks/blazor-azure}/.morph/templates/service.cs +0 -0
  260. /package/{content → stacks/blazor-azure}/.morph/templates/simulation.md +0 -0
  261. /package/{content → stacks/blazor-azure}/.morph/templates/spec.md +0 -0
  262. /package/{content → stacks/blazor-azure}/.morph/templates/sprint-status.yaml +0 -0
  263. /package/{content → stacks/blazor-azure}/.morph/templates/state.template.json +0 -0
  264. /package/{content → stacks/blazor-azure}/.morph/templates/story.md +0 -0
  265. /package/{content → stacks/blazor-azure}/.morph/templates/tasks.md +0 -0
  266. /package/{content → stacks/blazor-azure}/.morph/templates/test.cs +0 -0
  267. /package/{content → stacks/blazor-azure}/.morph/templates/ui-components.md +0 -0
  268. /package/{content → stacks/blazor-azure}/.morph/templates/ui-design-system.md +0 -0
  269. /package/{content → stacks/blazor-azure}/.morph/templates/ui-flows.md +0 -0
  270. /package/{content → stacks/blazor-azure}/.morph/templates/ui-mockups.md +0 -0
  271. /package/{content → stacks/blazor-azure}/.morph/test-infra/example.bicep +0 -0
  272. /package/{content → stacks/blazor-azure}/CLAUDE.md +0 -0
  273. /package/{content → stacks/blazor-azure}/README.md +0 -0
@@ -1,185 +1,185 @@
1
- /**
2
- * MORPH-SPEC Rollback Phase Command
3
- *
4
- * Rolls back a feature to a previous phase, marking outputs as draft.
5
- *
6
- * Usage:
7
- * morph-spec rollback <feature-name> <target-phase>
8
- *
9
- * Example:
10
- * morph-spec rollback scheduled-reports design
11
- */
12
-
13
- import fs from 'fs';
14
- import path from 'path';
15
- import chalk from 'chalk';
16
- import { loadState, saveState, getFeature, updateFeature } from '../lib/state-manager.js';
17
-
18
- // Phase order
19
- const PHASE_ORDER = ['proposal', 'setup', 'uiux', 'design', 'clarify', 'tasks', 'implement', 'sync'];
20
-
21
- /**
22
- * Get phase index
23
- */
24
- function getPhaseIndex(phase) {
25
- return PHASE_ORDER.indexOf(phase);
26
- }
27
-
28
- /**
29
- * Get outputs that should be marked as draft when rolling back
30
- */
31
- function getOutputsToReset(fromPhase, toPhase) {
32
- const fromIndex = getPhaseIndex(fromPhase);
33
- const toIndex = getPhaseIndex(toPhase);
34
-
35
- // Map phases to their outputs
36
- const phaseOutputs = {
37
- 'proposal': ['proposal'],
38
- 'setup': [],
39
- 'uiux': ['uiDesignSystem', 'uiMockups', 'uiComponents', 'uiFlows'],
40
- 'design': ['spec', 'contracts', 'decisions'],
41
- 'clarify': [],
42
- 'tasks': ['tasks'],
43
- 'implement': ['recap'],
44
- 'sync': []
45
- };
46
-
47
- const outputsToReset = [];
48
-
49
- // Collect all outputs from phases after target
50
- for (let i = toIndex + 1; i <= fromIndex; i++) {
51
- const phase = PHASE_ORDER[i];
52
- if (phaseOutputs[phase]) {
53
- outputsToReset.push(...phaseOutputs[phase]);
54
- }
55
- }
56
-
57
- return outputsToReset;
58
- }
59
-
60
- /**
61
- * Main command handler
62
- */
63
- export async function rollbackPhaseCommand(feature, targetPhase, options = {}) {
64
- console.log(chalk.cyan('\n╔════════════════════════════════════════════════╗'));
65
- console.log(chalk.cyan('║ MORPH-SPEC ROLLBACK ║'));
66
- console.log(chalk.cyan('╚════════════════════════════════════════════════╝\n'));
67
-
68
- // Validate target phase
69
- if (!PHASE_ORDER.includes(targetPhase)) {
70
- console.log(chalk.red(`❌ Invalid phase: ${targetPhase}`));
71
- console.log(chalk.gray('\nValid phases:'));
72
- PHASE_ORDER.forEach(p => console.log(chalk.gray(` - ${p}`)));
73
- process.exit(1);
74
- }
75
-
76
- // Get current feature state
77
- let featureState;
78
- try {
79
- featureState = getFeature(feature);
80
- } catch (error) {
81
- console.log(chalk.red(`❌ Feature not found: ${feature}`));
82
- console.log(chalk.gray(' Run: morph-spec state list'));
83
- process.exit(1);
84
- }
85
-
86
- if (!featureState) {
87
- console.log(chalk.red(`❌ Feature not found: ${feature}`));
88
- process.exit(1);
89
- }
90
-
91
- const currentPhase = featureState.phase || 'proposal';
92
- const currentIndex = getPhaseIndex(currentPhase);
93
- const targetIndex = getPhaseIndex(targetPhase);
94
-
95
- // Check if rollback makes sense
96
- if (targetIndex >= currentIndex) {
97
- console.log(chalk.yellow(`⚠️ Cannot rollback: target phase '${targetPhase}' is not before current phase '${currentPhase}'`));
98
- process.exit(1);
99
- }
100
-
101
- // Get outputs to reset
102
- const outputsToReset = getOutputsToReset(currentPhase, targetPhase);
103
-
104
- // Show what will happen
105
- console.log(chalk.gray('Feature:'), feature);
106
- console.log(chalk.gray('Current Phase:'), currentPhase);
107
- console.log(chalk.gray('Target Phase:'), targetPhase);
108
- console.log('');
109
-
110
- if (outputsToReset.length > 0) {
111
- console.log(chalk.yellow('Outputs that will be marked as draft:'));
112
- outputsToReset.forEach(o => {
113
- console.log(chalk.gray(` - ${o}`));
114
- });
115
- console.log('');
116
- }
117
-
118
- // Confirm unless --force
119
- if (!options.force) {
120
- console.log(chalk.yellow('⚠️ This will:'));
121
- console.log(chalk.gray(' 1. Set phase back to: ' + targetPhase));
122
- console.log(chalk.gray(' 2. Reset task progress'));
123
- console.log(chalk.gray(' 3. Mark outputs as not created (files remain on disk)'));
124
- console.log('');
125
- console.log(chalk.gray('Run with --force to confirm.'));
126
- process.exit(1);
127
- }
128
-
129
- // Perform rollback
130
- try {
131
- const state = loadState();
132
-
133
- // Update phase
134
- state.features[feature].phase = targetPhase;
135
- state.features[feature].status = 'in_progress';
136
- state.features[feature].updatedAt = new Date().toISOString();
137
-
138
- // Reset outputs
139
- for (const output of outputsToReset) {
140
- if (state.features[feature].outputs[output]) {
141
- state.features[feature].outputs[output].created = false;
142
- }
143
- }
144
-
145
- // Reset tasks if rolling back before tasks phase
146
- if (targetIndex < getPhaseIndex('tasks')) {
147
- state.features[feature].tasks = {
148
- total: 0,
149
- completed: 0,
150
- inProgress: 0,
151
- pending: 0
152
- };
153
- }
154
-
155
- // Add checkpoint for rollback
156
- state.features[feature].checkpoints = state.features[feature].checkpoints || [];
157
- state.features[feature].checkpoints.push({
158
- timestamp: new Date().toISOString(),
159
- phase: targetPhase,
160
- completedTasks: 0,
161
- note: `Rollback from ${currentPhase} to ${targetPhase}`
162
- });
163
-
164
- // Track skipped phases (if any were skipped)
165
- if (!state.features[feature].skippedPhases) {
166
- state.features[feature].skippedPhases = [];
167
- }
168
-
169
- saveState(state);
170
-
171
- console.log(chalk.green('✅ Rollback completed!'));
172
- console.log('');
173
- console.log(chalk.gray('Current state:'));
174
- console.log(chalk.gray(` Phase: ${targetPhase}`));
175
- console.log(chalk.gray(` Status: in_progress`));
176
- console.log('');
177
- console.log(chalk.cyan('Next steps:'));
178
- console.log(chalk.gray(` 1. Review and update outputs for phase: ${targetPhase}`));
179
- console.log(chalk.gray(` 2. Run: morph-spec session-summary ${feature}`));
180
-
181
- } catch (error) {
182
- console.log(chalk.red(`❌ Rollback failed: ${error.message}`));
183
- process.exit(1);
184
- }
185
- }
1
+ /**
2
+ * MORPH-SPEC Rollback Phase Command
3
+ *
4
+ * Rolls back a feature to a previous phase, marking outputs as draft.
5
+ *
6
+ * Usage:
7
+ * morph-spec rollback <feature-name> <target-phase>
8
+ *
9
+ * Example:
10
+ * morph-spec rollback scheduled-reports design
11
+ */
12
+
13
+ import fs from 'fs';
14
+ import path from 'path';
15
+ import chalk from 'chalk';
16
+ import { loadState, saveState, getFeature, updateFeature } from '../lib/state-manager.js';
17
+
18
+ // Phase order
19
+ const PHASE_ORDER = ['proposal', 'setup', 'uiux', 'design', 'clarify', 'tasks', 'implement', 'sync'];
20
+
21
+ /**
22
+ * Get phase index
23
+ */
24
+ function getPhaseIndex(phase) {
25
+ return PHASE_ORDER.indexOf(phase);
26
+ }
27
+
28
+ /**
29
+ * Get outputs that should be marked as draft when rolling back
30
+ */
31
+ function getOutputsToReset(fromPhase, toPhase) {
32
+ const fromIndex = getPhaseIndex(fromPhase);
33
+ const toIndex = getPhaseIndex(toPhase);
34
+
35
+ // Map phases to their outputs
36
+ const phaseOutputs = {
37
+ 'proposal': ['proposal'],
38
+ 'setup': [],
39
+ 'uiux': ['uiDesignSystem', 'uiMockups', 'uiComponents', 'uiFlows'],
40
+ 'design': ['spec', 'contracts', 'decisions'],
41
+ 'clarify': [],
42
+ 'tasks': ['tasks'],
43
+ 'implement': ['recap'],
44
+ 'sync': []
45
+ };
46
+
47
+ const outputsToReset = [];
48
+
49
+ // Collect all outputs from phases after target
50
+ for (let i = toIndex + 1; i <= fromIndex; i++) {
51
+ const phase = PHASE_ORDER[i];
52
+ if (phaseOutputs[phase]) {
53
+ outputsToReset.push(...phaseOutputs[phase]);
54
+ }
55
+ }
56
+
57
+ return outputsToReset;
58
+ }
59
+
60
+ /**
61
+ * Main command handler
62
+ */
63
+ export async function rollbackPhaseCommand(feature, targetPhase, options = {}) {
64
+ console.log(chalk.cyan('\n╔════════════════════════════════════════════════╗'));
65
+ console.log(chalk.cyan('║ MORPH-SPEC ROLLBACK ║'));
66
+ console.log(chalk.cyan('╚════════════════════════════════════════════════╝\n'));
67
+
68
+ // Validate target phase
69
+ if (!PHASE_ORDER.includes(targetPhase)) {
70
+ console.log(chalk.red(`❌ Invalid phase: ${targetPhase}`));
71
+ console.log(chalk.gray('\nValid phases:'));
72
+ PHASE_ORDER.forEach(p => console.log(chalk.gray(` - ${p}`)));
73
+ process.exit(1);
74
+ }
75
+
76
+ // Get current feature state
77
+ let featureState;
78
+ try {
79
+ featureState = getFeature(feature);
80
+ } catch (error) {
81
+ console.log(chalk.red(`❌ Feature not found: ${feature}`));
82
+ console.log(chalk.gray(' Run: morph-spec state list'));
83
+ process.exit(1);
84
+ }
85
+
86
+ if (!featureState) {
87
+ console.log(chalk.red(`❌ Feature not found: ${feature}`));
88
+ process.exit(1);
89
+ }
90
+
91
+ const currentPhase = featureState.phase || 'proposal';
92
+ const currentIndex = getPhaseIndex(currentPhase);
93
+ const targetIndex = getPhaseIndex(targetPhase);
94
+
95
+ // Check if rollback makes sense
96
+ if (targetIndex >= currentIndex) {
97
+ console.log(chalk.yellow(`⚠️ Cannot rollback: target phase '${targetPhase}' is not before current phase '${currentPhase}'`));
98
+ process.exit(1);
99
+ }
100
+
101
+ // Get outputs to reset
102
+ const outputsToReset = getOutputsToReset(currentPhase, targetPhase);
103
+
104
+ // Show what will happen
105
+ console.log(chalk.gray('Feature:'), feature);
106
+ console.log(chalk.gray('Current Phase:'), currentPhase);
107
+ console.log(chalk.gray('Target Phase:'), targetPhase);
108
+ console.log('');
109
+
110
+ if (outputsToReset.length > 0) {
111
+ console.log(chalk.yellow('Outputs that will be marked as draft:'));
112
+ outputsToReset.forEach(o => {
113
+ console.log(chalk.gray(` - ${o}`));
114
+ });
115
+ console.log('');
116
+ }
117
+
118
+ // Confirm unless --force
119
+ if (!options.force) {
120
+ console.log(chalk.yellow('⚠️ This will:'));
121
+ console.log(chalk.gray(' 1. Set phase back to: ' + targetPhase));
122
+ console.log(chalk.gray(' 2. Reset task progress'));
123
+ console.log(chalk.gray(' 3. Mark outputs as not created (files remain on disk)'));
124
+ console.log('');
125
+ console.log(chalk.gray('Run with --force to confirm.'));
126
+ process.exit(1);
127
+ }
128
+
129
+ // Perform rollback
130
+ try {
131
+ const state = loadState();
132
+
133
+ // Update phase
134
+ state.features[feature].phase = targetPhase;
135
+ state.features[feature].status = 'in_progress';
136
+ state.features[feature].updatedAt = new Date().toISOString();
137
+
138
+ // Reset outputs
139
+ for (const output of outputsToReset) {
140
+ if (state.features[feature].outputs[output]) {
141
+ state.features[feature].outputs[output].created = false;
142
+ }
143
+ }
144
+
145
+ // Reset tasks if rolling back before tasks phase
146
+ if (targetIndex < getPhaseIndex('tasks')) {
147
+ state.features[feature].tasks = {
148
+ total: 0,
149
+ completed: 0,
150
+ inProgress: 0,
151
+ pending: 0
152
+ };
153
+ }
154
+
155
+ // Add checkpoint for rollback
156
+ state.features[feature].checkpoints = state.features[feature].checkpoints || [];
157
+ state.features[feature].checkpoints.push({
158
+ timestamp: new Date().toISOString(),
159
+ phase: targetPhase,
160
+ completedTasks: 0,
161
+ note: `Rollback from ${currentPhase} to ${targetPhase}`
162
+ });
163
+
164
+ // Track skipped phases (if any were skipped)
165
+ if (!state.features[feature].skippedPhases) {
166
+ state.features[feature].skippedPhases = [];
167
+ }
168
+
169
+ saveState(state);
170
+
171
+ console.log(chalk.green('✅ Rollback completed!'));
172
+ console.log('');
173
+ console.log(chalk.gray('Current state:'));
174
+ console.log(chalk.gray(` Phase: ${targetPhase}`));
175
+ console.log(chalk.gray(` Status: in_progress`));
176
+ console.log('');
177
+ console.log(chalk.cyan('Next steps:'));
178
+ console.log(chalk.gray(` 1. Review and update outputs for phase: ${targetPhase}`));
179
+ console.log(chalk.gray(` 2. Run: morph-spec session-summary ${feature}`));
180
+
181
+ } catch (error) {
182
+ console.log(chalk.red(`❌ Rollback failed: ${error.message}`));
183
+ process.exit(1);
184
+ }
185
+ }