@polymorphism-tech/morph-spec 3.0.0 → 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 (240) hide show
  1. package/CLAUDE.md +68 -400
  2. package/README.md +198 -76
  3. package/bin/detect-agents.js +227 -225
  4. package/bin/morph-spec.js +10 -0
  5. package/bin/render-template.js +303 -302
  6. package/bin/semantic-detect-agents.js +247 -246
  7. package/bin/{task-manager.js → task-manager.cjs} +12 -1
  8. package/bin/validate-agents-skills.js +257 -251
  9. package/bin/validate-agents.js +70 -69
  10. package/bin/validate-phase.js +263 -263
  11. package/docs/getting-started.md +3 -3
  12. package/package.json +3 -4
  13. package/scripts/reorganize-skills.cjs +175 -0
  14. package/scripts/validate-agents-structure.cjs +52 -0
  15. package/scripts/validate-skills.cjs +180 -0
  16. package/src/commands/create-story.js +354 -351
  17. package/src/commands/detect-agents.js +13 -2
  18. package/src/commands/detect.js +104 -104
  19. package/src/commands/state.js +334 -333
  20. package/src/commands/sync.js +167 -167
  21. package/src/commands/task.js +1 -1
  22. package/src/commands/update.js +13 -1
  23. package/src/lib/context-generator.js +7 -4
  24. package/{detectors → src/lib/detectors}/config-detector.js +223 -223
  25. package/{detectors → src/lib/detectors}/conversation-analyzer.js +163 -163
  26. package/{detectors → src/lib/detectors}/index.js +84 -84
  27. package/{detectors → src/lib/detectors}/standards-generator.js +275 -275
  28. package/src/lib/hook-executor.js +2 -1
  29. package/src/lib/stack-resolver.js +148 -0
  30. package/src/lib/standards-context-injector.js +4 -3
  31. package/src/lib/state-manager.js +21 -4
  32. package/src/lib/team-orchestrator.js +2 -1
  33. package/src/lib/troubleshoot-grep.js +13 -3
  34. package/src/lib/validation-runner.js +2 -1
  35. package/src/utils/file-copier.js +3 -1
  36. package/{content → stacks/blazor-azure}/.azure/README.md +293 -293
  37. package/{content → stacks/blazor-azure}/.azure/docs/azure-devops-setup.md +454 -454
  38. package/{content → stacks/blazor-azure}/.azure/docs/branch-strategy.md +398 -398
  39. package/{content → stacks/blazor-azure}/.azure/docs/local-development.md +515 -515
  40. package/{content → stacks/blazor-azure}/.azure/pipelines/pipeline-variables.yml +34 -34
  41. package/{content → stacks/blazor-azure}/.azure/pipelines/prod-pipeline.yml +319 -319
  42. package/{content → stacks/blazor-azure}/.azure/pipelines/staging-pipeline.yml +234 -234
  43. package/{content → stacks/blazor-azure}/.azure/pipelines/templates/build-dotnet.yml +75 -75
  44. package/{content → stacks/blazor-azure}/.azure/pipelines/templates/deploy-app-service.yml +94 -94
  45. package/{content → stacks/blazor-azure}/.azure/pipelines/templates/deploy-container-app.yml +120 -120
  46. package/{content → stacks/blazor-azure}/.azure/pipelines/templates/infra-deploy.yml +90 -90
  47. package/{content → stacks/blazor-azure}/.claude/commands/morph-archive.md +79 -79
  48. package/{content → stacks/blazor-azure}/.claude/commands/morph-deploy.md +529 -529
  49. package/{content → stacks/blazor-azure}/.claude/commands/morph-infra.md +209 -209
  50. package/{content → stacks/blazor-azure}/.claude/commands/morph-troubleshoot.md +1 -1
  51. package/{content → stacks/blazor-azure}/.claude/settings.local.json +15 -15
  52. package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-setup.md +1 -1
  53. package/{content/.claude/skills/specialists → stacks/blazor-azure/.claude/skills/level-2-domains/architecture}/prompt-engineer.md +189 -189
  54. package/{content/.claude/skills/specialists → stacks/blazor-azure/.claude/skills/level-2-domains/architecture}/seo-growth-hacker.md +320 -320
  55. package/{content/.claude/skills/infra → stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure}/azure-deploy-specialist.md +699 -699
  56. package/{content → stacks/blazor-azure}/.morph/.morphversion +5 -5
  57. package/{content → stacks/blazor-azure}/.morph/archive/.gitkeep +25 -25
  58. package/{content → stacks/blazor-azure}/.morph/config/agents.json +7 -5
  59. package/{content → stacks/blazor-azure}/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +392 -392
  60. package/{content → stacks/blazor-azure}/.morph/docs/workflows/enforcement-pipeline.md +3 -3
  61. package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/README.md +241 -241
  62. package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/contracts.ts +307 -307
  63. package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/spec.md +399 -399
  64. package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/tasks.md +168 -168
  65. package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/README.md +125 -125
  66. package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/contracts.cs +358 -358
  67. package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/decisions.md +246 -246
  68. package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/spec.md +236 -236
  69. package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/tasks.md +150 -150
  70. package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/README.md +309 -309
  71. package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/contracts.cs +433 -433
  72. package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/spec.md +479 -479
  73. package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/tasks.md +185 -185
  74. package/{content → stacks/blazor-azure}/.morph/examples/state-v3.json +188 -188
  75. package/{content → stacks/blazor-azure}/.morph/features/.gitkeep +25 -25
  76. package/{content → stacks/blazor-azure}/.morph/hooks/README.md +12 -12
  77. package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-all.sh +48 -48
  78. package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-specs.sh +49 -49
  79. package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-tests.sh +60 -60
  80. package/{content → stacks/blazor-azure}/.morph/project.md +160 -160
  81. package/{content → stacks/blazor-azure}/.morph/schemas/agent.schema.json +296 -296
  82. package/{content → stacks/blazor-azure}/.morph/specs/.gitkeep +20 -20
  83. package/{content → stacks/blazor-azure}/.morph/standards/agent-teams-workflow.md +2 -2
  84. package/{content → stacks/blazor-azure}/.morph/standards/coding.md +377 -377
  85. package/{content → stacks/blazor-azure}/.morph/standards/fluent-ui-setup.md +590 -590
  86. package/{content → stacks/blazor-azure}/.morph/standards/migration-guide.md +514 -514
  87. package/{content → stacks/blazor-azure}/.morph/standards/passkeys-auth.md +423 -423
  88. package/{content → stacks/blazor-azure}/.morph/standards/vector-search-rag.md +536 -536
  89. package/{content → stacks/blazor-azure}/.morph/state.json +17 -17
  90. package/{content → stacks/blazor-azure}/.morph/templates/FluentDesignTheme.cs +149 -149
  91. package/{content → stacks/blazor-azure}/.morph/templates/MudTheme.cs +281 -281
  92. package/{content → stacks/blazor-azure}/.morph/templates/component.razor +239 -239
  93. package/{content → stacks/blazor-azure}/.morph/templates/contracts.cs +217 -217
  94. package/{content → stacks/blazor-azure}/.morph/templates/design-system.css +226 -226
  95. package/{content → stacks/blazor-azure}/.morph/templates/infra/.dockerignore.example +89 -89
  96. package/{content → stacks/blazor-azure}/.morph/templates/infra/Dockerfile.example +82 -82
  97. package/{content → stacks/blazor-azure}/.morph/templates/infra/README.md +286 -286
  98. package/{content → stacks/blazor-azure}/.morph/templates/infra/app-insights.bicep +63 -63
  99. package/{content → stacks/blazor-azure}/.morph/templates/infra/app-service.bicep +164 -164
  100. package/{content → stacks/blazor-azure}/.morph/templates/infra/azure-pipelines-deploy.yml +480 -480
  101. package/{content → stacks/blazor-azure}/.morph/templates/infra/container-app-env.bicep +49 -49
  102. package/{content → stacks/blazor-azure}/.morph/templates/infra/container-app.bicep +156 -156
  103. package/{content → stacks/blazor-azure}/.morph/templates/infra/deploy.ps1 +229 -229
  104. package/{content → stacks/blazor-azure}/.morph/templates/infra/deploy.sh +208 -208
  105. package/{content → stacks/blazor-azure}/.morph/templates/infra/key-vault.bicep +91 -91
  106. package/{content → stacks/blazor-azure}/.morph/templates/infra/main.bicep +189 -189
  107. package/{content → stacks/blazor-azure}/.morph/templates/infra/parameters.dev.json +29 -29
  108. package/{content → stacks/blazor-azure}/.morph/templates/infra/parameters.prod.json +29 -29
  109. package/{content → stacks/blazor-azure}/.morph/templates/infra/parameters.staging.json +29 -29
  110. package/{content → stacks/blazor-azure}/.morph/templates/infra/sql-database.bicep +103 -103
  111. package/{content → stacks/blazor-azure}/.morph/templates/infra/storage.bicep +106 -106
  112. package/{content → stacks/blazor-azure}/.morph/templates/integrations/asaas-client.cs +387 -387
  113. package/{content → stacks/blazor-azure}/.morph/templates/integrations/asaas-webhook.cs +351 -351
  114. package/{content → stacks/blazor-azure}/.morph/templates/integrations/azure-identity-config.cs +288 -288
  115. package/{content → stacks/blazor-azure}/.morph/templates/integrations/clerk-config.cs +258 -258
  116. package/{content → stacks/blazor-azure}/.morph/templates/job.cs +171 -171
  117. package/{content → stacks/blazor-azure}/.morph/templates/migration.cs +83 -83
  118. package/{content → stacks/blazor-azure}/.morph/templates/repository.cs +141 -141
  119. package/{content → stacks/blazor-azure}/.morph/templates/saas/subscription.cs +347 -347
  120. package/{content → stacks/blazor-azure}/.morph/templates/saas/tenant.cs +338 -338
  121. package/{content → stacks/blazor-azure}/.morph/templates/service.cs +139 -139
  122. package/{content → stacks/blazor-azure}/.morph/templates/sprint-status.yaml +68 -68
  123. package/{content → stacks/blazor-azure}/.morph/templates/story.md +143 -143
  124. package/{content → stacks/blazor-azure}/.morph/templates/test.cs +239 -239
  125. package/{content → stacks/blazor-azure}/.morph/templates/ui-design-system.md +286 -286
  126. package/{content → stacks/blazor-azure}/.morph/templates/ui-flows.md +336 -336
  127. package/{content → stacks/blazor-azure}/.morph/templates/ui-mockups.md +133 -133
  128. package/{content → stacks/blazor-azure}/.morph/test-infra/example.bicep +59 -59
  129. package/{content → stacks/blazor-azure}/README.md +79 -79
  130. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/backend/dotnet-supabase.md +244 -0
  131. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/frontend/nextjs-supabase.md +335 -0
  132. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/infrastructure/easypanel-deployer.md +189 -0
  133. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +170 -0
  134. package/stacks/nextjs-supabase/.morph/config/agents.json +345 -0
  135. package/stacks/nextjs-supabase/.morph/config/config.template.json +92 -0
  136. package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +169 -0
  137. package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +247 -0
  138. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +697 -0
  139. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +85 -0
  140. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +86 -0
  141. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +498 -0
  142. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +121 -0
  143. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +138 -0
  144. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +162 -0
  145. package/stacks/nextjs-supabase/.morph/project.md +168 -0
  146. package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +191 -0
  147. package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +193 -0
  148. package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +171 -0
  149. package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +164 -0
  150. package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +179 -0
  151. package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +148 -0
  152. package/stacks/nextjs-supabase/.morph/templates/contracts.cs +173 -0
  153. package/stacks/nextjs-supabase/.morph/templates/contracts.ts +168 -0
  154. package/stacks/nextjs-supabase/.morph/templates/decisions.md +115 -0
  155. package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +38 -0
  156. package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +48 -0
  157. package/stacks/nextjs-supabase/.morph/templates/proposal.md +145 -0
  158. package/stacks/nextjs-supabase/.morph/templates/recap.md +134 -0
  159. package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +57 -0
  160. package/stacks/nextjs-supabase/.morph/templates/spec.md +231 -0
  161. package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +100 -0
  162. package/stacks/nextjs-supabase/.morph/templates/tasks.md +257 -0
  163. package/stacks/nextjs-supabase/CLAUDE.md +149 -0
  164. package/stacks/nextjs-supabase/README.md +112 -0
  165. /package/{detectors → src/lib/detectors}/structure-detector.js +0 -0
  166. /package/{content → stacks/blazor-azure}/.claude/commands/morph-apply.md +0 -0
  167. /package/{content → stacks/blazor-azure}/.claude/commands/morph-preflight.md +0 -0
  168. /package/{content → stacks/blazor-azure}/.claude/commands/morph-proposal.md +0 -0
  169. /package/{content → stacks/blazor-azure}/.claude/commands/morph-status.md +0 -0
  170. /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/README.md +0 -0
  171. /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/code-review.md +0 -0
  172. /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/morph-checklist.md +0 -0
  173. /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/simulation-checklist.md +0 -0
  174. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/README.md +0 -0
  175. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/morph-replicate.md +0 -0
  176. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-clarify.md +0 -0
  177. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-design.md +0 -0
  178. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-tasks.md +0 -0
  179. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-uiux.md +0 -0
  180. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/README.md +0 -0
  181. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +0 -0
  182. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/architecture/po-pm-advisor.md +0 -0
  183. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/architecture/standards-architect.md +0 -0
  184. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/dotnet-senior.md +0 -0
  185. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/ef-modeler.md +0 -0
  186. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +0 -0
  187. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/ms-agent-expert.md +0 -0
  188. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/frontend/blazor-builder.md +0 -0
  189. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/frontend/nextjs-expert.md +0 -0
  190. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +0 -0
  191. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/azure-architect.md +0 -0
  192. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +0 -0
  193. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/container-specialist.md +0 -0
  194. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +0 -0
  195. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/asaas-financial.md +0 -0
  196. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/azure-identity.md +0 -0
  197. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/clerk-auth.md +0 -0
  198. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/resend-email.md +0 -0
  199. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/quality/code-analyzer.md +0 -0
  200. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/quality/testing-specialist.md +0 -0
  201. /package/{content → stacks/blazor-azure}/.claude/skills/level-3-technologies/README.md +0 -0
  202. /package/{content → stacks/blazor-azure}/.claude/skills/level-4-patterns/README.md +0 -0
  203. /package/{content → stacks/blazor-azure}/.morph/config/config.template.json +0 -0
  204. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/design-impl.md +0 -0
  205. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/fast-track.md +0 -0
  206. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/full-morph.md +0 -0
  207. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/standard.md +0 -0
  208. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/ui-refresh.md +0 -0
  209. /package/{content → stacks/blazor-azure}/.morph/examples/scheduled-reports/decisions.md +0 -0
  210. /package/{content → stacks/blazor-azure}/.morph/examples/scheduled-reports/proposal.md +0 -0
  211. /package/{content → stacks/blazor-azure}/.morph/examples/scheduled-reports/spec.md +0 -0
  212. /package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-agents.sh +0 -0
  213. /package/{content → stacks/blazor-azure}/.morph/hooks/task-completed.js +0 -0
  214. /package/{content → stacks/blazor-azure}/.morph/hooks/teammate-idle.js +0 -0
  215. /package/{content → stacks/blazor-azure}/.morph/schemas/tasks.schema.json +0 -0
  216. /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-blazor-ui.md +0 -0
  217. /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-production.md +0 -0
  218. /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-setup.md +0 -0
  219. /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-workflows.md +0 -0
  220. /package/{content → stacks/blazor-azure}/.morph/standards/architecture.md +0 -0
  221. /package/{content → stacks/blazor-azure}/.morph/standards/azure.md +0 -0
  222. /package/{content → stacks/blazor-azure}/.morph/standards/dotnet10-migration.md +0 -0
  223. /package/{content → stacks/blazor-azure}/.morph/templates/CONTEXT-FEATURE.md +0 -0
  224. /package/{content → stacks/blazor-azure}/.morph/templates/CONTEXT.md +0 -0
  225. /package/{content → stacks/blazor-azure}/.morph/templates/agent.cs +0 -0
  226. /package/{content → stacks/blazor-azure}/.morph/templates/clarify-questions.md +0 -0
  227. /package/{content → stacks/blazor-azure}/.morph/templates/contracts/Commands.cs +0 -0
  228. /package/{content → stacks/blazor-azure}/.morph/templates/contracts/Entities.cs +0 -0
  229. /package/{content → stacks/blazor-azure}/.morph/templates/contracts/Queries.cs +0 -0
  230. /package/{content → stacks/blazor-azure}/.morph/templates/contracts/README.md +0 -0
  231. /package/{content → stacks/blazor-azure}/.morph/templates/decisions.md +0 -0
  232. /package/{content → stacks/blazor-azure}/.morph/templates/infra/deploy-checklist.md +0 -0
  233. /package/{content → stacks/blazor-azure}/.morph/templates/proposal.md +0 -0
  234. /package/{content → stacks/blazor-azure}/.morph/templates/recap.md +0 -0
  235. /package/{content → stacks/blazor-azure}/.morph/templates/simulation.md +0 -0
  236. /package/{content → stacks/blazor-azure}/.morph/templates/spec.md +0 -0
  237. /package/{content → stacks/blazor-azure}/.morph/templates/state.template.json +0 -0
  238. /package/{content → stacks/blazor-azure}/.morph/templates/tasks.md +0 -0
  239. /package/{content → stacks/blazor-azure}/.morph/templates/ui-components.md +0 -0
  240. /package/{content → stacks/blazor-azure}/CLAUDE.md +0 -0
@@ -59,7 +59,7 @@ Before: Hardcoded AGENT_VALIDATOR_MAP in validation-runner.js made it impossible
59
59
  # Validators run automatically on task completion
60
60
  morph-spec task done my-feature T001
61
61
 
62
- # To customize: edit content/.morph/config/agents.json
62
+ # To customize: edit .morph/config/agents.json
63
63
  {
64
64
  "my-custom-agent": {
65
65
  "validators": ["architecture", "custom-validator"]
@@ -89,7 +89,7 @@ Before: Specialists had to manually read standards files, often missing relevant
89
89
  export function loadStandardsForAgent(agentId, projectPath) {
90
90
  // Resolution order:
91
91
  // 1. .morph/project/standards/{file}.md (project overrides)
92
- // 2. content/.morph/standards/{file}.md (content standards)
92
+ // 2. .morph/standards/{file}.md (content standards)
93
93
  // 3. framework/standards/{file}.md (framework standards)
94
94
 
95
95
  return {
@@ -512,7 +512,7 @@ morph-spec phase advance {feature} --skip-warnings
512
512
 
513
513
  **Check:**
514
514
  1. Is agent active? `morph-spec state get {feature}` → check activeAgents
515
- 2. Is validator mapped? Check `content/.morph/config/agents.json` → agent's `validators` array
515
+ 2. Is validator mapped? Check `.morph/config/agents.json` → agent's `validators` array
516
516
  3. Is agents.json readable? Run `morph-spec validate-agents-skills`
517
517
 
518
518
  **Fix:**
@@ -1,241 +1,241 @@
1
- # API .NET + Next.js Example
2
-
3
- Exemplo de arquitetura full-stack com .NET API backend e Next.js frontend.
4
-
5
- ## Stack
6
-
7
- | Camada | Tecnologia |
8
- |--------|------------|
9
- | **Frontend** | Next.js 14 (App Router) |
10
- | **Backend** | .NET 8 Minimal APIs |
11
- | **Database** | SQL Server / PostgreSQL |
12
- | **Auth** | Clerk (SSO) |
13
- | **API Communication** | REST + React Query |
14
- | **Infra** | Azure Container Apps |
15
-
16
- ## Arquitetura
17
-
18
- ```
19
- ┌─────────────────────────────────────────────────────────────┐
20
- │ Next.js Frontend │
21
- │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
22
- │ │ Pages │ │ Components │ │ Hooks │ │
23
- │ │ /dashboard │ │ DataTable │ │ useProducts() │ │
24
- │ │ /products │ │ Forms │ │ useOrders() │ │
25
- │ │ /orders │ │ Charts │ │ useAuth() │ │
26
- │ └─────────────┘ └─────────────┘ └─────────────────────┘ │
27
- └─────────────────────────────────────────────────────────────┘
28
-
29
- │ REST API
30
-
31
- ┌─────────────────────────────────────────────────────────────┐
32
- │ .NET API │
33
- │ ┌─────────────────────────────────────────────────────┐ │
34
- │ │ Endpoints: /api/products, /api/orders, /api/users │ │
35
- │ └─────────────────────────────────────────────────────┘ │
36
- │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
37
- │ │ Services │ │ Validators │ │ Middlewares │ │
38
- │ └──────────────┘ └──────────────┘ └──────────────────┘ │
39
- └─────────────────────────────────────────────────────────────┘
40
-
41
-
42
- ┌─────────────────────────────────────────────────────────────┐
43
- │ Infrastructure │
44
- │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
45
- │ │ EF Core │ │ Redis │ │ Blob Storage │ │
46
- │ │ Repository │ │ Cache │ │ (files) │ │
47
- │ └──────────────┘ └──────────────┘ └──────────────────┘ │
48
- └─────────────────────────────────────────────────────────────┘
49
- ```
50
-
51
- ## Estrutura de Pastas
52
-
53
- ```
54
- project/
55
- ├── src/
56
- │ ├── api/ # .NET Backend
57
- │ │ ├── Api/
58
- │ │ │ ├── Endpoints/
59
- │ │ │ │ ├── ProductEndpoints.cs
60
- │ │ │ │ ├── OrderEndpoints.cs
61
- │ │ │ │ └── UserEndpoints.cs
62
- │ │ │ ├── Middleware/
63
- │ │ │ └── Program.cs
64
- │ │ ├── Application/
65
- │ │ │ ├── Services/
66
- │ │ │ └── Validators/
67
- │ │ ├── Domain/
68
- │ │ │ ├── Entities/
69
- │ │ │ └── Interfaces/
70
- │ │ └── Infrastructure/
71
- │ │ ├── Data/
72
- │ │ └── Repositories/
73
- │ │
74
- │ └── web/ # Next.js Frontend
75
- │ ├── app/
76
- │ │ ├── (auth)/
77
- │ │ │ ├── sign-in/
78
- │ │ │ └── sign-up/
79
- │ │ ├── (dashboard)/
80
- │ │ │ ├── dashboard/
81
- │ │ │ ├── products/
82
- │ │ │ └── orders/
83
- │ │ ├── layout.tsx
84
- │ │ └── page.tsx
85
- │ ├── components/
86
- │ │ ├── ui/
87
- │ │ └── shared/
88
- │ ├── hooks/
89
- │ │ ├── use-products.ts
90
- │ │ └── use-orders.ts
91
- │ ├── lib/
92
- │ │ ├── api-client.ts
93
- │ │ └── utils.ts
94
- │ └── types/
95
-
96
- ├── infra/ # Infrastructure as Code
97
- │ ├── main.bicep
98
- │ └── modules/
99
-
100
- └── docker-compose.yml
101
- ```
102
-
103
- ## Quick Start
104
-
105
- ### Backend (.NET)
106
-
107
- ```bash
108
- cd src/api
109
- dotnet restore
110
- dotnet ef database update
111
- dotnet run
112
- ```
113
-
114
- ### Frontend (Next.js)
115
-
116
- ```bash
117
- cd src/web
118
- npm install
119
- npm run dev
120
- ```
121
-
122
- ### Docker Compose
123
-
124
- ```bash
125
- docker-compose up -d
126
- ```
127
-
128
- ## Features
129
-
130
- ### Backend
131
- - Minimal APIs com OpenAPI
132
- - FluentValidation para validação
133
- - EF Core com Repository Pattern
134
- - JWT Bearer Authentication
135
- - Health Checks
136
- - Structured Logging
137
-
138
- ### Frontend
139
- - App Router (Next.js 14)
140
- - Server Components + Client Components
141
- - React Query para data fetching
142
- - Tailwind CSS + shadcn/ui
143
- - Form handling com React Hook Form
144
- - TypeScript estrito
145
-
146
- ## Autenticação
147
-
148
- ### Fluxo
149
-
150
- ```mermaid
151
- sequenceDiagram
152
- participant User
153
- participant NextJS
154
- participant Clerk
155
- participant API
156
-
157
- User->>NextJS: Acessa /sign-in
158
- NextJS->>Clerk: Redirect para Clerk
159
- User->>Clerk: Login
160
- Clerk-->>NextJS: JWT Token
161
- NextJS->>API: Request com Bearer Token
162
- API->>Clerk: Valida token (JWKS)
163
- API-->>NextJS: Response
164
- NextJS-->>User: Renderiza página
165
- ```
166
-
167
- ### Configuração Clerk (Next.js)
168
-
169
- ```typescript
170
- // middleware.ts
171
- import { clerkMiddleware } from "@clerk/nextjs/server";
172
-
173
- export default clerkMiddleware();
174
-
175
- export const config = {
176
- matcher: ["/((?!.*\\..*|_next).*)", "/", "/(api|trpc)(.*)"],
177
- };
178
- ```
179
-
180
- ### Configuração JWT (API)
181
-
182
- ```csharp
183
- // Program.cs
184
- builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
185
- .AddJwtBearer(options =>
186
- {
187
- options.Authority = builder.Configuration["Clerk:Authority"];
188
- options.TokenValidationParameters = new TokenValidationParameters
189
- {
190
- ValidateAudience = false,
191
- NameClaimType = "sub"
192
- };
193
- });
194
- ```
195
-
196
- ## API Client (Frontend)
197
-
198
- ```typescript
199
- // lib/api-client.ts
200
- import { auth } from "@clerk/nextjs/server";
201
-
202
- const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL;
203
-
204
- export async function apiClient<T>(
205
- endpoint: string,
206
- options: RequestInit = {}
207
- ): Promise<T> {
208
- const { getToken } = auth();
209
- const token = await getToken();
210
-
211
- const response = await fetch(`${API_BASE_URL}${endpoint}`, {
212
- ...options,
213
- headers: {
214
- "Content-Type": "application/json",
215
- Authorization: `Bearer ${token}`,
216
- ...options.headers,
217
- },
218
- });
219
-
220
- if (!response.ok) {
221
- throw new Error(`API Error: ${response.statusText}`);
222
- }
223
-
224
- return response.json();
225
- }
226
- ```
227
-
228
- ## Custos Estimados
229
-
230
- | Recurso | Tier | Custo/mês |
231
- |---------|------|-----------|
232
- | Container App (API) | Consumption | ~$0-5 |
233
- | Container App (Web) | Consumption | ~$0-5 |
234
- | SQL Database | Free 32GB | $0 |
235
- | Clerk | Free 10k MAU | $0 |
236
-
237
- **Total**: < $10/mês para MVPs
238
-
239
- ---
240
-
241
- *MORPH-SPEC by Polymorphism Tech*
1
+ # API .NET + Next.js Example
2
+
3
+ Exemplo de arquitetura full-stack com .NET API backend e Next.js frontend.
4
+
5
+ ## Stack
6
+
7
+ | Camada | Tecnologia |
8
+ |--------|------------|
9
+ | **Frontend** | Next.js 14 (App Router) |
10
+ | **Backend** | .NET 8 Minimal APIs |
11
+ | **Database** | SQL Server / PostgreSQL |
12
+ | **Auth** | Clerk (SSO) |
13
+ | **API Communication** | REST + React Query |
14
+ | **Infra** | Azure Container Apps |
15
+
16
+ ## Arquitetura
17
+
18
+ ```
19
+ ┌─────────────────────────────────────────────────────────────┐
20
+ │ Next.js Frontend │
21
+ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
22
+ │ │ Pages │ │ Components │ │ Hooks │ │
23
+ │ │ /dashboard │ │ DataTable │ │ useProducts() │ │
24
+ │ │ /products │ │ Forms │ │ useOrders() │ │
25
+ │ │ /orders │ │ Charts │ │ useAuth() │ │
26
+ │ └─────────────┘ └─────────────┘ └─────────────────────┘ │
27
+ └─────────────────────────────────────────────────────────────┘
28
+
29
+ │ REST API
30
+
31
+ ┌─────────────────────────────────────────────────────────────┐
32
+ │ .NET API │
33
+ │ ┌─────────────────────────────────────────────────────┐ │
34
+ │ │ Endpoints: /api/products, /api/orders, /api/users │ │
35
+ │ └─────────────────────────────────────────────────────┘ │
36
+ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
37
+ │ │ Services │ │ Validators │ │ Middlewares │ │
38
+ │ └──────────────┘ └──────────────┘ └──────────────────┘ │
39
+ └─────────────────────────────────────────────────────────────┘
40
+
41
+
42
+ ┌─────────────────────────────────────────────────────────────┐
43
+ │ Infrastructure │
44
+ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
45
+ │ │ EF Core │ │ Redis │ │ Blob Storage │ │
46
+ │ │ Repository │ │ Cache │ │ (files) │ │
47
+ │ └──────────────┘ └──────────────┘ └──────────────────┘ │
48
+ └─────────────────────────────────────────────────────────────┘
49
+ ```
50
+
51
+ ## Estrutura de Pastas
52
+
53
+ ```
54
+ project/
55
+ ├── src/
56
+ │ ├── api/ # .NET Backend
57
+ │ │ ├── Api/
58
+ │ │ │ ├── Endpoints/
59
+ │ │ │ │ ├── ProductEndpoints.cs
60
+ │ │ │ │ ├── OrderEndpoints.cs
61
+ │ │ │ │ └── UserEndpoints.cs
62
+ │ │ │ ├── Middleware/
63
+ │ │ │ └── Program.cs
64
+ │ │ ├── Application/
65
+ │ │ │ ├── Services/
66
+ │ │ │ └── Validators/
67
+ │ │ ├── Domain/
68
+ │ │ │ ├── Entities/
69
+ │ │ │ └── Interfaces/
70
+ │ │ └── Infrastructure/
71
+ │ │ ├── Data/
72
+ │ │ └── Repositories/
73
+ │ │
74
+ │ └── web/ # Next.js Frontend
75
+ │ ├── app/
76
+ │ │ ├── (auth)/
77
+ │ │ │ ├── sign-in/
78
+ │ │ │ └── sign-up/
79
+ │ │ ├── (dashboard)/
80
+ │ │ │ ├── dashboard/
81
+ │ │ │ ├── products/
82
+ │ │ │ └── orders/
83
+ │ │ ├── layout.tsx
84
+ │ │ └── page.tsx
85
+ │ ├── components/
86
+ │ │ ├── ui/
87
+ │ │ └── shared/
88
+ │ ├── hooks/
89
+ │ │ ├── use-products.ts
90
+ │ │ └── use-orders.ts
91
+ │ ├── lib/
92
+ │ │ ├── api-client.ts
93
+ │ │ └── utils.ts
94
+ │ └── types/
95
+
96
+ ├── infra/ # Infrastructure as Code
97
+ │ ├── main.bicep
98
+ │ └── modules/
99
+
100
+ └── docker-compose.yml
101
+ ```
102
+
103
+ ## Quick Start
104
+
105
+ ### Backend (.NET)
106
+
107
+ ```bash
108
+ cd src/api
109
+ dotnet restore
110
+ dotnet ef database update
111
+ dotnet run
112
+ ```
113
+
114
+ ### Frontend (Next.js)
115
+
116
+ ```bash
117
+ cd src/web
118
+ npm install
119
+ npm run dev
120
+ ```
121
+
122
+ ### Docker Compose
123
+
124
+ ```bash
125
+ docker-compose up -d
126
+ ```
127
+
128
+ ## Features
129
+
130
+ ### Backend
131
+ - Minimal APIs com OpenAPI
132
+ - FluentValidation para validação
133
+ - EF Core com Repository Pattern
134
+ - JWT Bearer Authentication
135
+ - Health Checks
136
+ - Structured Logging
137
+
138
+ ### Frontend
139
+ - App Router (Next.js 14)
140
+ - Server Components + Client Components
141
+ - React Query para data fetching
142
+ - Tailwind CSS + shadcn/ui
143
+ - Form handling com React Hook Form
144
+ - TypeScript estrito
145
+
146
+ ## Autenticação
147
+
148
+ ### Fluxo
149
+
150
+ ```mermaid
151
+ sequenceDiagram
152
+ participant User
153
+ participant NextJS
154
+ participant Clerk
155
+ participant API
156
+
157
+ User->>NextJS: Acessa /sign-in
158
+ NextJS->>Clerk: Redirect para Clerk
159
+ User->>Clerk: Login
160
+ Clerk-->>NextJS: JWT Token
161
+ NextJS->>API: Request com Bearer Token
162
+ API->>Clerk: Valida token (JWKS)
163
+ API-->>NextJS: Response
164
+ NextJS-->>User: Renderiza página
165
+ ```
166
+
167
+ ### Configuração Clerk (Next.js)
168
+
169
+ ```typescript
170
+ // middleware.ts
171
+ import { clerkMiddleware } from "@clerk/nextjs/server";
172
+
173
+ export default clerkMiddleware();
174
+
175
+ export const config = {
176
+ matcher: ["/((?!.*\\..*|_next).*)", "/", "/(api|trpc)(.*)"],
177
+ };
178
+ ```
179
+
180
+ ### Configuração JWT (API)
181
+
182
+ ```csharp
183
+ // Program.cs
184
+ builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
185
+ .AddJwtBearer(options =>
186
+ {
187
+ options.Authority = builder.Configuration["Clerk:Authority"];
188
+ options.TokenValidationParameters = new TokenValidationParameters
189
+ {
190
+ ValidateAudience = false,
191
+ NameClaimType = "sub"
192
+ };
193
+ });
194
+ ```
195
+
196
+ ## API Client (Frontend)
197
+
198
+ ```typescript
199
+ // lib/api-client.ts
200
+ import { auth } from "@clerk/nextjs/server";
201
+
202
+ const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL;
203
+
204
+ export async function apiClient<T>(
205
+ endpoint: string,
206
+ options: RequestInit = {}
207
+ ): Promise<T> {
208
+ const { getToken } = auth();
209
+ const token = await getToken();
210
+
211
+ const response = await fetch(`${API_BASE_URL}${endpoint}`, {
212
+ ...options,
213
+ headers: {
214
+ "Content-Type": "application/json",
215
+ Authorization: `Bearer ${token}`,
216
+ ...options.headers,
217
+ },
218
+ });
219
+
220
+ if (!response.ok) {
221
+ throw new Error(`API Error: ${response.statusText}`);
222
+ }
223
+
224
+ return response.json();
225
+ }
226
+ ```
227
+
228
+ ## Custos Estimados
229
+
230
+ | Recurso | Tier | Custo/mês |
231
+ |---------|------|-----------|
232
+ | Container App (API) | Consumption | ~$0-5 |
233
+ | Container App (Web) | Consumption | ~$0-5 |
234
+ | SQL Database | Free 32GB | $0 |
235
+ | Clerk | Free 10k MAU | $0 |
236
+
237
+ **Total**: < $10/mês para MVPs
238
+
239
+ ---
240
+
241
+ *MORPH-SPEC by Polymorphism Tech*