@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
@@ -0,0 +1,231 @@
1
+ # Feature Specification: {{FEATURE_NAME_TITLE}}
2
+
3
+ | Field | Value |
4
+ |-------|-------|
5
+ | **ID** | {{FEATURE_NAME}} |
6
+ | **Status** | Draft / In Review / Approved / In Progress / Done |
7
+ | **Created** | {{DATE}} |
8
+ | **Stack** | Next.js + Supabase + .NET API |
9
+ | **Complexity** | Low / Medium / High |
10
+ | **Estimated Cost** | $X/month |
11
+ | **Agents** | Core: All / Specialists: {list} |
12
+
13
+ ---
14
+
15
+ ## Overview
16
+
17
+ **Problem:** {What problem this feature solves}
18
+
19
+ **Solution:** {High-level solution}
20
+
21
+ **Success Criteria:**
22
+ - [ ] {Criterion 1}
23
+ - [ ] {Criterion 2}
24
+
25
+ ---
26
+
27
+ ## Requirements
28
+
29
+ ### Functional Requirements
30
+
31
+ | ID | Description | Priority |
32
+ |----|-------------|----------|
33
+ | FR1 | {requirement} | Must |
34
+ | FR2 | {requirement} | Must |
35
+ | FR3 | {requirement} | Should |
36
+
37
+ ### Non-Functional Requirements
38
+
39
+ | ID | Category | Target |
40
+ |----|----------|--------|
41
+ | NFR1 | Performance | {e.g., API response < 200ms p95} |
42
+ | NFR2 | Reliability | {e.g., 99.9% uptime} |
43
+ | NFR3 | Security | {e.g., All data access via RLS} |
44
+
45
+ ---
46
+
47
+ ## Technical Architecture
48
+
49
+ ### Stack
50
+
51
+ | Component | Technology | Purpose |
52
+ |-----------|-----------|---------|
53
+ | Database | Supabase PostgreSQL | Data storage, RLS, Auth |
54
+ | Storage | Supabase Storage | File uploads |
55
+ | Realtime | Supabase Realtime | Live updates |
56
+ | Backend API | .NET 10 Minimal API | Business logic, integrations |
57
+ | Frontend | Next.js 15 (App Router) | SSR, UI, client interactions |
58
+ | Auth | Supabase Auth (@supabase/ssr) | Authentication, JWT |
59
+ | UI | shadcn/ui + Tailwind CSS | Components, styling |
60
+ | Deployment | EasyPanel + Docker | Hosting, SSL |
61
+
62
+ ### Architecture Diagram
63
+
64
+ ```
65
+ [Browser] --HTTPS--> [Next.js (SSR)]
66
+ |
67
+ [Supabase Client] --RLS--> [Supabase PostgreSQL]
68
+ | |
69
+ [.NET API] ---service_role----> [Supabase]
70
+ |
71
+ [External Services]
72
+ ```
73
+
74
+ ---
75
+
76
+ ## Data Model (Supabase)
77
+
78
+ ### {TableName}
79
+
80
+ | Column | Type | Constraints | Default |
81
+ |--------|------|-------------|---------|
82
+ | id | uuid | PK | gen_random_uuid() |
83
+ | user_id | uuid | FK -> auth.users(id), NOT NULL | |
84
+ | {column} | {type} | {constraints} | {default} |
85
+ | created_at | timestamptz | NOT NULL | now() |
86
+ | updated_at | timestamptz | | |
87
+
88
+ ### RLS Policies
89
+
90
+ | Table | Policy | Operation | Rule |
91
+ |-------|--------|-----------|------|
92
+ | {table} | Users read own | SELECT | auth.uid() = user_id |
93
+ | {table} | Users insert own | INSERT | auth.uid() = user_id |
94
+ | {table} | Users update own | UPDATE | auth.uid() = user_id |
95
+
96
+ ### Indexes
97
+
98
+ | Table | Columns | Type | Purpose |
99
+ |-------|---------|------|---------|
100
+ | {table} | user_id | btree | Filter by owner |
101
+ | {table} | created_at | btree | Sort by date |
102
+
103
+ ---
104
+
105
+ ## API Design (.NET Minimal API)
106
+
107
+ ### Endpoints
108
+
109
+ | Method | Path | Description | Auth |
110
+ |--------|------|-------------|------|
111
+ | GET | /api/{{FEATURE_NAME}}/{id} | Get by ID | Required |
112
+ | GET | /api/{{FEATURE_NAME}} | List (paginated) | Required |
113
+ | POST | /api/{{FEATURE_NAME}} | Create | Required |
114
+ | PUT | /api/{{FEATURE_NAME}}/{id} | Update | Required |
115
+ | DELETE | /api/{{FEATURE_NAME}}/{id} | Delete | Required |
116
+
117
+ ### Request/Response Examples
118
+
119
+ ```json
120
+ // POST /api/{{FEATURE_NAME}}
121
+ // Request
122
+ {
123
+ "name": "Example",
124
+ "description": "Example description"
125
+ }
126
+
127
+ // Response 201
128
+ {
129
+ "id": "uuid",
130
+ "name": "Example",
131
+ "description": "Example description",
132
+ "createdAt": "2026-01-01T00:00:00Z"
133
+ }
134
+ ```
135
+
136
+ ---
137
+
138
+ ## Frontend Design (Next.js)
139
+
140
+ ### Pages
141
+
142
+ | Route | Type | Description |
143
+ |-------|------|-------------|
144
+ | /{{FEATURE_NAME}} | Server | List page with SSR |
145
+ | /{{FEATURE_NAME}}/[id] | Server | Detail page |
146
+ | /{{FEATURE_NAME}}/new | Client | Create form |
147
+
148
+ ### Components
149
+
150
+ | Component | Type | Props |
151
+ |-----------|------|-------|
152
+ | {{FEATURE_NAME_PASCAL}}List | Client | initialData, pagination |
153
+ | {{FEATURE_NAME_PASCAL}}Form | Client | onSuccess, defaultValues? |
154
+ | {{FEATURE_NAME_PASCAL}}Card | Server | item |
155
+
156
+ ### State Management
157
+
158
+ | State | Location | Strategy |
159
+ |-------|----------|----------|
160
+ | Server data | React Query | Cache + invalidation |
161
+ | Form state | react-hook-form | Local |
162
+ | Auth state | Supabase client | Cookie-based session |
163
+ | Realtime | Supabase channel | Invalidate query on change |
164
+
165
+ ---
166
+
167
+ ## Infrastructure (EasyPanel)
168
+
169
+ ### Services
170
+
171
+ | Service | Image | Port | Resources |
172
+ |---------|-------|------|-----------|
173
+ | api | Custom (.NET) | 8080 | 256MB / 0.25 CPU |
174
+ | web | Custom (Next.js) | 3000 | 256MB / 0.25 CPU |
175
+
176
+ ### Environment Variables
177
+
178
+ | Variable | Service | Source |
179
+ |----------|---------|--------|
180
+ | SUPABASE_URL | api, web | EasyPanel secrets |
181
+ | SUPABASE_ANON_KEY | web | EasyPanel secrets |
182
+ | SUPABASE_SERVICE_KEY | api | EasyPanel secrets |
183
+ | SUPABASE_JWT_SECRET | api | EasyPanel secrets |
184
+
185
+ ---
186
+
187
+ ## Packages
188
+
189
+ ### Backend (.NET)
190
+
191
+ | Package | Version | Purpose |
192
+ |---------|---------|---------|
193
+ | Npgsql | latest | PostgreSQL driver |
194
+ | Dapper | latest | Micro-ORM |
195
+ | Microsoft.AspNetCore.Authentication.JwtBearer | 10.0.x | JWT auth |
196
+
197
+ ### Frontend (npm)
198
+
199
+ | Package | Version | Purpose |
200
+ |---------|---------|---------|
201
+ | @supabase/ssr | latest | Supabase SSR client |
202
+ | @tanstack/react-query | ^5 | Data fetching |
203
+ | react-hook-form | ^7 | Form management |
204
+ | zod | ^3 | Validation |
205
+ | @hookform/resolvers | latest | Zod integration |
206
+
207
+ ---
208
+
209
+ ## Security
210
+
211
+ | Action | Required Policy |
212
+ |--------|-----------------|
213
+ | View | RLS: auth.uid() = user_id |
214
+ | Create | RLS: auth.uid() = user_id |
215
+ | Update | RLS: auth.uid() = user_id |
216
+ | Delete | RLS: auth.uid() = user_id |
217
+ | Admin | .NET API with service_role key |
218
+
219
+ ---
220
+
221
+ ## Definition of Done
222
+
223
+ - [ ] Database migrations applied
224
+ - [ ] RLS policies tested
225
+ - [ ] API endpoints implemented and tested
226
+ - [ ] Frontend pages and components built
227
+ - [ ] Auth flow working (login, signup, protected routes)
228
+ - [ ] Tests > 80% coverage
229
+ - [ ] Docker images building successfully
230
+ - [ ] Deploy to EasyPanel verified
231
+ - [ ] Recap.md generated
@@ -0,0 +1,100 @@
1
+ -- ============================================================
2
+ -- Migration: {{FEATURE_NAME_TITLE}}
3
+ -- Stack: Next.js + Supabase
4
+ -- Generated by MORPH Framework
5
+ -- Date: {{DATE}}
6
+ -- Run: supabase db push
7
+ -- ============================================================
8
+
9
+ -- ============================================================
10
+ -- 1. TABLE CREATION
11
+ -- ============================================================
12
+
13
+ create table if not exists public.{{TABLE_NAME}} (
14
+ id uuid primary key default gen_random_uuid(),
15
+ user_id uuid not null references auth.users(id) on delete cascade,
16
+ name text not null,
17
+ status text not null default 'draft'
18
+ check (status in ('draft', 'active', 'completed', 'archived', 'failed', 'cancelled')),
19
+ -- Add feature-specific columns here
20
+ metadata jsonb default '{}'::jsonb,
21
+ created_at timestamptz not null default now(),
22
+ updated_at timestamptz
23
+ );
24
+
25
+ -- Comment on table
26
+ comment on table public.{{TABLE_NAME}} is '{{FEATURE_NAME_TITLE}} - managed by MORPH Framework';
27
+
28
+ -- ============================================================
29
+ -- 2. INDEXES
30
+ -- ============================================================
31
+
32
+ -- Index for filtering by owner
33
+ create index if not exists idx_{{TABLE_NAME}}_user_id
34
+ on public.{{TABLE_NAME}} (user_id);
35
+
36
+ -- Index for filtering by status
37
+ create index if not exists idx_{{TABLE_NAME}}_status
38
+ on public.{{TABLE_NAME}} (status);
39
+
40
+ -- Index for sorting by creation date
41
+ create index if not exists idx_{{TABLE_NAME}}_created_at
42
+ on public.{{TABLE_NAME}} (created_at desc);
43
+
44
+ -- ============================================================
45
+ -- 3. UPDATED_AT TRIGGER
46
+ -- ============================================================
47
+
48
+ -- Function to auto-update updated_at
49
+ create or replace function public.update_updated_at_column()
50
+ returns trigger as $$
51
+ begin
52
+ new.updated_at = now();
53
+ return new;
54
+ end;
55
+ $$ language plpgsql;
56
+
57
+ -- Trigger for auto-updating updated_at
58
+ create trigger set_{{TABLE_NAME}}_updated_at
59
+ before update on public.{{TABLE_NAME}}
60
+ for each row execute function public.update_updated_at_column();
61
+
62
+ -- ============================================================
63
+ -- 4. ROW LEVEL SECURITY
64
+ -- ============================================================
65
+
66
+ -- Enable RLS
67
+ alter table public.{{TABLE_NAME}} enable row level security;
68
+
69
+ -- Users can read their own rows
70
+ create policy "Users can read own {{TABLE_NAME}}"
71
+ on public.{{TABLE_NAME}}
72
+ for select
73
+ using (auth.uid() = user_id);
74
+
75
+ -- Users can insert rows for themselves
76
+ create policy "Users can insert own {{TABLE_NAME}}"
77
+ on public.{{TABLE_NAME}}
78
+ for insert
79
+ with check (auth.uid() = user_id);
80
+
81
+ -- Users can update their own rows
82
+ create policy "Users can update own {{TABLE_NAME}}"
83
+ on public.{{TABLE_NAME}}
84
+ for update
85
+ using (auth.uid() = user_id)
86
+ with check (auth.uid() = user_id);
87
+
88
+ -- Users can delete their own rows
89
+ create policy "Users can delete own {{TABLE_NAME}}"
90
+ on public.{{TABLE_NAME}}
91
+ for delete
92
+ using (auth.uid() = user_id);
93
+
94
+ -- ============================================================
95
+ -- 5. GRANTS
96
+ -- ============================================================
97
+
98
+ -- Grant access to authenticated users (via Supabase API)
99
+ grant select, insert, update, delete on public.{{TABLE_NAME}} to authenticated;
100
+ grant usage on schema public to authenticated;
@@ -0,0 +1,257 @@
1
+ # Tasks - {{FEATURE_NAME_TITLE}}
2
+
3
+ > Implementation checklist for the feature.
4
+ > Update status as you progress.
5
+
6
+ ## Summary
7
+
8
+ | Metric | Value |
9
+ |--------|-------|
10
+ | **Total Tasks** | 0 |
11
+ | **Completed** | 0 |
12
+ | **In Progress** | 0 |
13
+ | **Pending** | 0 |
14
+ | **Estimated** | 0h |
15
+ | **Actual** | 0h |
16
+
17
+ ---
18
+
19
+ ## Task Granularity
20
+
21
+ ### Ideal Task
22
+ - 15-60 minutes of implementation
23
+ - 1-5 files modified
24
+ - Testable in isolation
25
+ - Independent commit possible
26
+
27
+ ### Signs of Too Broad (Split)
28
+ **Bad example:** "Implement document upload"
29
+ **Split into:**
30
+ - T001: Create Supabase migration for documents table + RLS
31
+ - T002: Create .NET DTOs and service interface
32
+ - T003: Implement Dapper repository
33
+ - T004: Create API endpoints
34
+ - T005: Build Next.js upload form component
35
+
36
+ ### Signs of Too Granular (Merge)
37
+ **Bad example:** "Create title field", "Create content field"
38
+ **Merge into:** "Create documents table with all columns"
39
+
40
+ ---
41
+
42
+ ## Checkpoints
43
+
44
+ | After | Type | Description | Status |
45
+ |-------|------|-------------|--------|
46
+ | T003 | Review | Review database schema and RLS policies | Pending |
47
+ | T006 | Review | Review API implementation | Pending |
48
+ | T009 | Approval | Approve UI before testing | Pending |
49
+
50
+ ---
51
+
52
+ ## Phase 1: Database & Migrations
53
+
54
+ ### T001: Create Supabase migration
55
+ - **Type:** Database
56
+ - **Priority:** 1
57
+ - **Estimate:** 30min
58
+ - **Status:** [ ] Pending
59
+
60
+ **Description:**
61
+ Create migration with table definition, indexes, RLS policies.
62
+
63
+ **Files:**
64
+ - [ ] Create: `supabase/migrations/{timestamp}_create_{feature}_table.sql`
65
+
66
+ ---
67
+
68
+ ### T002: Create RLS policies
69
+ - **Type:** Security
70
+ - **Priority:** 1
71
+ - **Estimate:** 20min
72
+ - **Status:** [ ] Pending
73
+ - **Dependencies:** T001
74
+
75
+ **Description:**
76
+ Define row-level security policies for all CRUD operations.
77
+
78
+ **Files:**
79
+ - [ ] Modify: `supabase/migrations/{timestamp}_create_{feature}_table.sql`
80
+
81
+ ---
82
+
83
+ ### T003: Generate TypeScript types
84
+ - **Type:** Contract
85
+ - **Priority:** 1
86
+ - **Estimate:** 15min
87
+ - **Status:** [ ] Pending
88
+ - **Dependencies:** T001
89
+ - **Checkpoint:** Review after this task
90
+
91
+ **Description:**
92
+ Run `supabase gen types typescript` and update Database type.
93
+
94
+ **Files:**
95
+ - [ ] Modify: `frontend/src/types/database.ts`
96
+
97
+ ---
98
+
99
+ ## Phase 2: Backend API (.NET)
100
+
101
+ ### T004: Define contracts (interfaces + DTOs)
102
+ - **Type:** Contract
103
+ - **Priority:** 1
104
+ - **Estimate:** 30min
105
+ - **Status:** [ ] Pending
106
+
107
+ **Description:**
108
+ Create service interface with all required methods. DTOs as records.
109
+
110
+ **Files:**
111
+ - [ ] Create: `backend/src/Application/Features/{Feature}/I{Feature}Service.cs`
112
+ - [ ] Create: `backend/src/Application/Features/{Feature}/{Feature}Dtos.cs`
113
+
114
+ ---
115
+
116
+ ### T005: Implement Dapper repository
117
+ - **Type:** Infrastructure
118
+ - **Priority:** 2
119
+ - **Estimate:** 45min
120
+ - **Status:** [ ] Pending
121
+ - **Dependencies:** T001, T004
122
+
123
+ **Description:**
124
+ Implement data access with Dapper + NpgsqlDataSource.
125
+
126
+ **Files:**
127
+ - [ ] Create: `backend/src/Infrastructure/Repositories/{Feature}Repository.cs`
128
+
129
+ ---
130
+
131
+ ### T006: Create Minimal API endpoints
132
+ - **Type:** API
133
+ - **Priority:** 2
134
+ - **Estimate:** 45min
135
+ - **Status:** [ ] Pending
136
+ - **Dependencies:** T004, T005
137
+ - **Checkpoint:** Review after this task
138
+
139
+ **Description:**
140
+ Map endpoints with auth, validation, and proper HTTP status codes.
141
+
142
+ **Files:**
143
+ - [ ] Create: `backend/src/Api/Endpoints/{Feature}Endpoints.cs`
144
+ - [ ] Modify: `backend/src/Api/Program.cs`
145
+
146
+ ---
147
+
148
+ ## Phase 3: Frontend (Next.js)
149
+
150
+ ### T007: Create React Query hooks
151
+ - **Type:** Frontend
152
+ - **Priority:** 2
153
+ - **Estimate:** 30min
154
+ - **Status:** [ ] Pending
155
+ - **Dependencies:** T003
156
+
157
+ **Description:**
158
+ Create hooks for data fetching with Supabase client or API.
159
+
160
+ **Files:**
161
+ - [ ] Create: `frontend/src/hooks/use-{feature}.ts`
162
+
163
+ ---
164
+
165
+ ### T008: Create list page (Server Component)
166
+ - **Type:** UI
167
+ - **Priority:** 2
168
+ - **Estimate:** 45min
169
+ - **Status:** [ ] Pending
170
+ - **Dependencies:** T007
171
+
172
+ **Description:**
173
+ Server-rendered list page with initial data fetch.
174
+
175
+ **Files:**
176
+ - [ ] Create: `frontend/src/app/{feature}/page.tsx`
177
+ - [ ] Create: `frontend/src/components/{feature}/{feature}-list.tsx`
178
+
179
+ ---
180
+
181
+ ### T009: Create form component (Client Component)
182
+ - **Type:** UI
183
+ - **Priority:** 2
184
+ - **Estimate:** 1h
185
+ - **Status:** [ ] Pending
186
+ - **Dependencies:** T007
187
+ - **Checkpoint:** Approval after this task
188
+
189
+ **Description:**
190
+ Form with react-hook-form + zod validation.
191
+
192
+ **Files:**
193
+ - [ ] Create: `frontend/src/app/{feature}/new/page.tsx`
194
+ - [ ] Create: `frontend/src/components/{feature}/{feature}-form.tsx`
195
+
196
+ ---
197
+
198
+ ## Phase 4: Testing
199
+
200
+ ### T010: Write backend unit tests
201
+ - **Type:** Test
202
+ - **Priority:** 2
203
+ - **Estimate:** 1h
204
+ - **Status:** [ ] Pending
205
+ - **Dependencies:** T006
206
+
207
+ **Description:**
208
+ Unit tests for service layer and endpoints.
209
+
210
+ **Files:**
211
+ - [ ] Create: `backend/tests/Unit/{Feature}ServiceTests.cs`
212
+
213
+ ---
214
+
215
+ ### T011: Write frontend tests
216
+ - **Type:** Test
217
+ - **Priority:** 3
218
+ - **Estimate:** 45min
219
+ - **Status:** [ ] Pending
220
+ - **Dependencies:** T009
221
+
222
+ **Description:**
223
+ Component tests with testing-library.
224
+
225
+ **Files:**
226
+ - [ ] Create: `frontend/src/components/{feature}/__tests__/{feature}-form.test.tsx`
227
+
228
+ ---
229
+
230
+ ## Phase 5: Deployment
231
+
232
+ ### T012: Create Dockerfiles
233
+ - **Type:** Infra
234
+ - **Priority:** 2
235
+ - **Estimate:** 30min
236
+ - **Status:** [ ] Pending
237
+ - **Dependencies:** T006, T009
238
+
239
+ **Description:**
240
+ Multi-stage Dockerfiles for API and Web.
241
+
242
+ **Files:**
243
+ - [ ] Create: `backend/Dockerfile`
244
+ - [ ] Create: `frontend/Dockerfile`
245
+
246
+ ---
247
+
248
+ ## Status Legend
249
+
250
+ - [ ] Pending
251
+ - [~] In Progress
252
+ - [x] Completed
253
+ - [!] Blocked
254
+
255
+ ---
256
+
257
+ *Generated by MORPH Framework*