@polymorphism-tech/morph-spec 4.3.3 → 4.3.4

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 (401) hide show
  1. package/.morph/analytics/threads-log.jsonl +9 -0
  2. package/{stacks/blazor-azure/.morph → .morph}/config/config.json +9 -9
  3. package/.morph/state.json +48 -0
  4. package/bin/detect-agents.js +1 -2
  5. package/bin/morph-spec.js +2 -15
  6. package/{stacks/blazor-azure/.morph/config → framework}/agents.json +948 -948
  7. package/{stacks/nextjs-supabase/.claude → framework}/commands/morph-infra.md +1 -1
  8. package/framework/hooks/README.md +282 -0
  9. package/framework/hooks/agent-stop/validate-and-continue.js +96 -0
  10. package/framework/hooks/agent-stop/validate-checkpoints.js +101 -0
  11. package/framework/hooks/agent-stop/validate-tests.js +109 -0
  12. package/framework/hooks/agent-teams/dispatch.js +67 -0
  13. package/framework/hooks/agent-teams/phase-advanced.js +80 -0
  14. package/framework/hooks/agent-teams/task-completed.js +76 -0
  15. package/framework/hooks/agent-teams/teammate-idle.js +70 -0
  16. package/framework/hooks/commit-msg/conventional-commits.sh +33 -0
  17. package/framework/hooks/pre-commit/agents.sh +25 -0
  18. package/framework/hooks/pre-commit/orchestrator.sh +64 -0
  19. package/framework/hooks/pre-commit/specs.sh +50 -0
  20. package/framework/hooks/pre-push/run-tests.sh +44 -0
  21. package/framework/index/troubleshooting-index.json +184 -0
  22. package/framework/memory/patterns-learned.md +766 -0
  23. package/framework/skills/level-0-meta/README.md +7 -0
  24. package/framework/skills/level-0-meta/code-review.md +226 -0
  25. package/framework/skills/level-0-meta/morph-checklist.md +117 -0
  26. package/framework/skills/level-0-meta/simulation-checklist.md +77 -0
  27. package/framework/skills/level-1-workflows/README.md +7 -0
  28. package/framework/skills/level-1-workflows/morph-replicate.md +213 -0
  29. package/framework/skills/level-1-workflows/phase-clarify.md +131 -0
  30. package/framework/skills/level-1-workflows/phase-design.md +213 -0
  31. package/framework/skills/level-1-workflows/phase-setup.md +106 -0
  32. package/framework/skills/level-1-workflows/phase-tasks.md +164 -0
  33. package/framework/skills/level-1-workflows/phase-uiux.md +169 -0
  34. package/framework/skills/level-2-domains/README.md +14 -0
  35. package/framework/skills/level-2-domains/ai-agents/ai-system-architect.md +192 -0
  36. package/framework/skills/level-2-domains/architecture/po-pm-advisor.md +197 -0
  37. package/framework/skills/level-2-domains/architecture/prompt-engineer.md +189 -0
  38. package/framework/skills/level-2-domains/architecture/seo-growth-hacker.md +320 -0
  39. package/framework/skills/level-2-domains/architecture/standards-architect.md +156 -0
  40. package/framework/skills/level-2-domains/backend/api-designer.md +59 -0
  41. package/framework/skills/level-2-domains/backend/dotnet-senior.md +77 -0
  42. package/framework/skills/level-2-domains/backend/ef-modeler.md +58 -0
  43. package/framework/skills/level-2-domains/backend/hangfire-orchestrator.md +126 -0
  44. package/framework/skills/level-2-domains/backend/ms-agent-expert.md +45 -0
  45. package/framework/skills/level-2-domains/frontend/blazor-builder.md +210 -0
  46. package/framework/skills/level-2-domains/frontend/nextjs-expert.md +154 -0
  47. package/framework/skills/level-2-domains/frontend/ui-ux-designer.md +191 -0
  48. package/framework/skills/level-2-domains/infrastructure/azure-architect.md +142 -0
  49. package/framework/skills/level-2-domains/infrastructure/azure-deploy-specialist.md +699 -0
  50. package/framework/skills/level-2-domains/infrastructure/bicep-architect.md +126 -0
  51. package/framework/skills/level-2-domains/infrastructure/container-specialist.md +131 -0
  52. package/framework/skills/level-2-domains/infrastructure/devops-engineer.md +119 -0
  53. package/framework/skills/level-2-domains/integrations/asaas-financial.md +130 -0
  54. package/framework/skills/level-2-domains/integrations/azure-identity.md +142 -0
  55. package/framework/skills/level-2-domains/integrations/clerk-auth.md +108 -0
  56. package/framework/skills/level-2-domains/integrations/hangfire-orchestrator.md +64 -0
  57. package/framework/skills/level-2-domains/integrations/resend-email.md +119 -0
  58. package/framework/skills/level-2-domains/quality/code-analyzer.md +235 -0
  59. package/framework/skills/level-2-domains/quality/testing-specialist.md +126 -0
  60. package/framework/skills/level-3-technologies/README.md +7 -0
  61. package/framework/skills/level-4-patterns/README.md +7 -0
  62. package/framework/squad-templates/backend-only.json +34 -0
  63. package/framework/squad-templates/frontend-only.json +34 -0
  64. package/framework/squad-templates/full-stack.json +52 -0
  65. package/framework/templates/.idea/morph-templates.xml +92 -0
  66. package/framework/templates/.vscode/morph-templates.code-snippets +186 -0
  67. package/framework/templates/IDE-SNIPPETS.md +266 -0
  68. package/framework/templates/README.md +814 -0
  69. package/framework/templates/REGISTRY.json +1677 -0
  70. package/framework/templates/code/dotnet/backend/repository.cs +141 -0
  71. package/framework/templates/code/dotnet/backend/service.cs +139 -0
  72. package/framework/templates/code/dotnet/contracts/Commands.cs +74 -0
  73. package/framework/templates/code/dotnet/contracts/Entities.cs +25 -0
  74. package/framework/templates/code/dotnet/contracts/Queries.cs +74 -0
  75. package/framework/templates/code/dotnet/contracts/README.md +74 -0
  76. package/framework/templates/code/dotnet/contracts/api-contracts.cs +173 -0
  77. package/framework/templates/code/dotnet/contracts/contracts.cs +217 -0
  78. package/framework/templates/code/dotnet/database/migration.cs +83 -0
  79. package/framework/templates/code/dotnet/frontend/component.razor +239 -0
  80. package/framework/templates/code/dotnet/jobs/agent.cs +163 -0
  81. package/framework/templates/code/dotnet/jobs/job.cs +171 -0
  82. package/framework/templates/code/dotnet/test.cs +239 -0
  83. package/framework/templates/code/sql/rls-policy.sql +57 -0
  84. package/framework/templates/code/sql/supabase-migration.sql +100 -0
  85. package/framework/templates/code/sql/supabase-migration.template.sql +113 -0
  86. package/framework/templates/code/typescript/contracts.ts +168 -0
  87. package/framework/templates/context/CONTEXT-FEATURE.md +276 -0
  88. package/framework/templates/context/CONTEXT.md +181 -0
  89. package/framework/templates/docs/proposal.md +182 -0
  90. package/framework/templates/docs/spec.md +149 -0
  91. package/framework/templates/examples/design-system-examples.md +357 -0
  92. package/framework/templates/examples/spec-examples.md +90 -0
  93. package/framework/templates/feature/decisions.md +187 -0
  94. package/framework/templates/feature/recap.md +146 -0
  95. package/framework/templates/feature/tasks.md +199 -0
  96. package/framework/templates/infrastructure/azure/Dockerfile.example +82 -0
  97. package/framework/templates/infrastructure/azure/README.md +286 -0
  98. package/framework/templates/infrastructure/azure/app-insights.bicep +63 -0
  99. package/framework/templates/infrastructure/azure/app-service.bicep +164 -0
  100. package/framework/templates/infrastructure/azure/container-app-env.bicep +49 -0
  101. package/framework/templates/infrastructure/azure/container-app.bicep +156 -0
  102. package/framework/templates/infrastructure/azure/deploy-checklist.md +426 -0
  103. package/framework/templates/infrastructure/azure/deploy.ps1 +229 -0
  104. package/framework/templates/infrastructure/azure/deploy.sh +208 -0
  105. package/framework/templates/infrastructure/azure/key-vault.bicep +91 -0
  106. package/framework/templates/infrastructure/azure/main.bicep +189 -0
  107. package/framework/templates/infrastructure/azure/parameters.dev.json +29 -0
  108. package/framework/templates/infrastructure/azure/parameters.prod.json +29 -0
  109. package/framework/templates/infrastructure/azure/parameters.staging.json +29 -0
  110. package/framework/templates/infrastructure/azure/sql-database.bicep +103 -0
  111. package/framework/templates/infrastructure/azure/storage.bicep +106 -0
  112. package/framework/templates/infrastructure/docker/Dockerfile.template +58 -0
  113. package/framework/templates/infrastructure/docker/docker-compose.template.yml +67 -0
  114. package/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +38 -0
  115. package/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +48 -0
  116. package/framework/templates/infrastructure/docker/easypanel.template.json +54 -0
  117. package/framework/templates/infrastructure/github/README.md +593 -0
  118. package/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +22 -0
  119. package/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +45 -0
  120. package/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +27 -0
  121. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +61 -0
  122. package/framework/templates/infrastructure/github/workflows/deploy-easypanel.yml.hbs +31 -0
  123. package/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +59 -0
  124. package/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +39 -0
  125. package/framework/templates/integrations/asaas-client.cs +387 -0
  126. package/framework/templates/integrations/asaas-webhook.cs +351 -0
  127. package/framework/templates/integrations/azure-identity-config.cs +288 -0
  128. package/framework/templates/integrations/clerk-config.cs +258 -0
  129. package/framework/templates/meta-prompts/fusion/fusion-agent.md +76 -0
  130. package/framework/templates/meta-prompts/fusion/fusion-aggregator.md +100 -0
  131. package/framework/templates/meta-prompts/hops/hop-retry.md +78 -0
  132. package/framework/templates/meta-prompts/hops/hop-validation.md +97 -0
  133. package/framework/templates/meta-prompts/hops/hop-wrapper.md +36 -0
  134. package/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +113 -0
  135. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +80 -0
  136. package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +90 -0
  137. package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +126 -0
  138. package/framework/templates/meta-prompts/squad-leaders/squad-leader.md +43 -0
  139. package/framework/templates/meta-prompts/validators/checkpoint-validator.md +107 -0
  140. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +95 -0
  141. package/framework/templates/saas/subscription.cs +347 -0
  142. package/framework/templates/saas/tenant.cs +338 -0
  143. package/framework/templates/state.template.json +17 -0
  144. package/framework/templates/ui/FluentDesignTheme.cs +149 -0
  145. package/framework/templates/ui/MudTheme.cs +281 -0
  146. package/framework/templates/ui/design-system.css +226 -0
  147. package/framework/workflows/README.md +1041 -0
  148. package/framework/workflows/configs/design-impl.json +49 -0
  149. package/framework/workflows/configs/fast-track.json +42 -0
  150. package/framework/workflows/configs/full-morph.json +79 -0
  151. package/framework/workflows/configs/fusion.json +39 -0
  152. package/framework/workflows/configs/long-running.json +33 -0
  153. package/framework/workflows/configs/standard.json +60 -0
  154. package/framework/workflows/configs/ui-refresh.json +49 -0
  155. package/framework/workflows/configs/zero-touch.json +75 -0
  156. package/framework/workflows/docs/STORY-DRIVEN-DEVELOPMENT.md +392 -0
  157. package/framework/workflows/docs/design-impl.md +37 -0
  158. package/framework/workflows/docs/enforcement-pipeline.md +668 -0
  159. package/framework/workflows/docs/fast-track.md +29 -0
  160. package/framework/workflows/docs/full-morph.md +76 -0
  161. package/framework/workflows/docs/standard.md +44 -0
  162. package/framework/workflows/docs/ui-refresh.md +39 -0
  163. package/package.json +3 -3
  164. package/src/commands/feature/create-story.js +11 -7
  165. package/src/commands/project/detect-agents.js +1 -2
  166. package/src/commands/project/init.js +69 -32
  167. package/src/commands/project/update.js +2 -2
  168. package/src/commands/templates/template-customize.js +3 -17
  169. package/src/commands/templates/template-list.js +1 -15
  170. package/src/commands/templates/template-render.js +2 -3
  171. package/src/commands/templates/template-show.js +3 -5
  172. package/src/core/templates/template-registry.js +9 -23
  173. package/src/lib/detectors/structure-detector.js +3 -3
  174. package/src/lib/generators/context-generator.js +18 -6
  175. package/src/lib/hooks/hook-executor.js +0 -2
  176. package/src/lib/orchestration/team-orchestrator.js +1 -2
  177. package/src/lib/standards/standards-context-injector.js +3 -4
  178. package/src/lib/troubleshooting/troubleshoot-grep.js +3 -9
  179. package/src/lib/validators/validation-runner.js +1 -2
  180. package/src/utils/file-copier.js +1 -2
  181. package/docs/README.md +0 -144
  182. package/docs/api/fonts/Montserrat/Montserrat-Bold.eot +0 -0
  183. package/docs/api/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
  184. package/docs/api/fonts/Montserrat/Montserrat-Bold.woff +0 -0
  185. package/docs/api/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
  186. package/docs/api/fonts/Montserrat/Montserrat-Regular.eot +0 -0
  187. package/docs/api/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  188. package/docs/api/fonts/Montserrat/Montserrat-Regular.woff +0 -0
  189. package/docs/api/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
  190. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
  191. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +0 -978
  192. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
  193. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
  194. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
  195. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
  196. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +0 -1049
  197. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
  198. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
  199. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
  200. package/docs/api/scripts/collapse.js +0 -39
  201. package/docs/api/scripts/commonNav.js +0 -28
  202. package/docs/api/scripts/linenumber.js +0 -25
  203. package/docs/api/scripts/nav.js +0 -12
  204. package/docs/api/scripts/polyfill.js +0 -4
  205. package/docs/api/scripts/prettify/Apache-License-2.0.txt +0 -202
  206. package/docs/api/scripts/prettify/lang-css.js +0 -2
  207. package/docs/api/scripts/prettify/prettify.js +0 -28
  208. package/docs/api/scripts/search.js +0 -99
  209. package/docs/api/styles/jsdoc.css +0 -776
  210. package/docs/api/styles/prettify.css +0 -80
  211. package/docs/cli-auto-detection.md +0 -219
  212. package/docs/getting-started.md +0 -296
  213. package/docs/installation.md +0 -361
  214. package/docs/next-generation/AGENTS.md +0 -521
  215. package/docs/next-generation/ANALYSIS.md +0 -555
  216. package/docs/next-generation/ARCHITECTURE.md +0 -436
  217. package/docs/next-generation/CONTEXT-OPTIMIZATION.md +0 -267
  218. package/docs/next-generation/EXECUTION-FLOW.md +0 -274
  219. package/docs/next-generation/FEATURES.md +0 -688
  220. package/docs/next-generation/META-PROMPTS.md +0 -235
  221. package/docs/next-generation/MIGRATION-GUIDE.md +0 -253
  222. package/docs/next-generation/README.md +0 -231
  223. package/docs/next-generation/ROADMAP.md +0 -801
  224. package/docs/next-generation/THREAD-MANAGEMENT.md +0 -240
  225. package/docs/templates.md +0 -418
  226. package/docs/troubleshooting.md +0 -269
  227. package/docs/validation-checklist.md +0 -264
  228. package/scripts/postinstall.js +0 -132
  229. package/src/lib/stacks/index.js +0 -7
  230. package/src/lib/stacks/stack-resolver.js +0 -180
  231. package/stacks/blazor-azure/.claude/commands/morph-deploy.md +0 -529
  232. package/stacks/blazor-azure/.claude/commands/morph-infra.md +0 -209
  233. package/stacks/blazor-azure/.morph/.morphversion +0 -5
  234. package/stacks/blazor-azure/.morph/project/context/README.md +0 -17
  235. package/stacks/blazor-azure/CLAUDE.md +0 -155
  236. package/stacks/blazor-azure/README.md +0 -79
  237. package/stacks/nextjs-supabase/.claude/commands/morph-apply.md +0 -221
  238. package/stacks/nextjs-supabase/.claude/commands/morph-archive.md +0 -79
  239. package/stacks/nextjs-supabase/.claude/commands/morph-deploy.md +0 -529
  240. package/stacks/nextjs-supabase/.claude/commands/morph-preflight.md +0 -227
  241. package/stacks/nextjs-supabase/.claude/commands/morph-proposal.md +0 -122
  242. package/stacks/nextjs-supabase/.claude/commands/morph-status.md +0 -86
  243. package/stacks/nextjs-supabase/.claude/commands/morph-troubleshoot.md +0 -122
  244. package/stacks/nextjs-supabase/.morph/.morphversion +0 -5
  245. package/stacks/nextjs-supabase/.morph/config/agents.json +0 -345
  246. package/stacks/nextjs-supabase/.morph/config/config.json +0 -9
  247. package/stacks/nextjs-supabase/.morph/project/context/README.md +0 -17
  248. package/stacks/nextjs-supabase/.morph/standards/ai-agents/blazor-ui.md +0 -364
  249. package/stacks/nextjs-supabase/.morph/standards/ai-agents/production.md +0 -415
  250. package/stacks/nextjs-supabase/.morph/standards/ai-agents/setup.md +0 -418
  251. package/stacks/nextjs-supabase/.morph/standards/ai-agents/team-orchestration.md +0 -479
  252. package/stacks/nextjs-supabase/.morph/standards/ai-agents/workflows.md +0 -354
  253. package/stacks/nextjs-supabase/.morph/standards/architecture/ddd/aggregates.md +0 -120
  254. package/stacks/nextjs-supabase/.morph/standards/architecture/ddd/entities.md +0 -99
  255. package/stacks/nextjs-supabase/.morph/standards/architecture/ddd/value-objects.md +0 -124
  256. package/stacks/nextjs-supabase/.morph/standards/backend/api/minimal-api.md +0 -494
  257. package/stacks/nextjs-supabase/.morph/standards/backend/api/rest.md +0 -492
  258. package/stacks/nextjs-supabase/.morph/standards/backend/api/validation.md +0 -88
  259. package/stacks/nextjs-supabase/.morph/standards/backend/authentication/passkeys.md +0 -428
  260. package/stacks/nextjs-supabase/.morph/standards/backend/database/ef-core.md +0 -199
  261. package/stacks/nextjs-supabase/.morph/standards/backend/database/migrations.md +0 -393
  262. package/stacks/nextjs-supabase/.morph/standards/backend/database/postgresql/database.md +0 -352
  263. package/stacks/nextjs-supabase/.morph/standards/backend/database/repository-patterns.md +0 -528
  264. package/stacks/nextjs-supabase/.morph/standards/backend/database/vector-search-rag.md +0 -541
  265. package/stacks/nextjs-supabase/.morph/standards/backend/dotnet/async.md +0 -366
  266. package/stacks/nextjs-supabase/.morph/standards/backend/dotnet/core.md +0 -117
  267. package/stacks/nextjs-supabase/.morph/standards/backend/dotnet/di.md +0 -439
  268. package/stacks/nextjs-supabase/.morph/standards/backend/dotnet/program-cs-checklist.md +0 -92
  269. package/stacks/nextjs-supabase/.morph/standards/backend/integrations/asaas/asaas-api.md +0 -216
  270. package/stacks/nextjs-supabase/.morph/standards/backend/integrations/clerk/clerk-auth.md +0 -290
  271. package/stacks/nextjs-supabase/.morph/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -350
  272. package/stacks/nextjs-supabase/.morph/standards/backend/integrations/resend/resend-email.md +0 -385
  273. package/stacks/nextjs-supabase/.morph/standards/context/analytics.md +0 -96
  274. package/stacks/nextjs-supabase/.morph/standards/context/bundles.md +0 -110
  275. package/stacks/nextjs-supabase/.morph/standards/context/priming.md +0 -78
  276. package/stacks/nextjs-supabase/.morph/standards/core/architecture.md +0 -185
  277. package/stacks/nextjs-supabase/.morph/standards/core/coding.md +0 -214
  278. package/stacks/nextjs-supabase/.morph/standards/core/git-branching-strategy.md +0 -403
  279. package/stacks/nextjs-supabase/.morph/standards/core/git.md +0 -185
  280. package/stacks/nextjs-supabase/.morph/standards/core/testing.md +0 -295
  281. package/stacks/nextjs-supabase/.morph/standards/data/nosql/blob-storage.md +0 -102
  282. package/stacks/nextjs-supabase/.morph/standards/data/nosql/cache/redis.md +0 -97
  283. package/stacks/nextjs-supabase/.morph/standards/data/nosql/cosmos-db.md +0 -118
  284. package/stacks/nextjs-supabase/.morph/standards/data/vector-search/azure-ai-search.md +0 -121
  285. package/stacks/nextjs-supabase/.morph/standards/data/vector-search/rag-chunking.md +0 -104
  286. package/stacks/nextjs-supabase/.morph/standards/frontend/blazor/design-checklist.md +0 -222
  287. package/stacks/nextjs-supabase/.morph/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  288. package/stacks/nextjs-supabase/.morph/standards/frontend/blazor/fluent-ui.md +0 -137
  289. package/stacks/nextjs-supabase/.morph/standards/frontend/blazor/html-conversion.md +0 -184
  290. package/stacks/nextjs-supabase/.morph/standards/frontend/blazor/lifecycle.md +0 -195
  291. package/stacks/nextjs-supabase/.morph/standards/frontend/blazor/pitfalls.md +0 -198
  292. package/stacks/nextjs-supabase/.morph/standards/frontend/blazor/state.md +0 -191
  293. package/stacks/nextjs-supabase/.morph/standards/frontend/design-system/animations.md +0 -151
  294. package/stacks/nextjs-supabase/.morph/standards/frontend/design-system/naming.md +0 -64
  295. package/stacks/nextjs-supabase/.morph/standards/frontend/nextjs/nextjs-patterns.md +0 -198
  296. package/stacks/nextjs-supabase/.morph/standards/infrastructure/azure/azure.md +0 -624
  297. package/stacks/nextjs-supabase/.morph/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  298. package/stacks/nextjs-supabase/.morph/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  299. package/stacks/nextjs-supabase/.morph/standards/infrastructure/azure/devops/local-development.md +0 -520
  300. package/stacks/nextjs-supabase/.morph/standards/infrastructure/azure/services/functions.md +0 -486
  301. package/stacks/nextjs-supabase/.morph/standards/infrastructure/azure/services/service-bus.md +0 -459
  302. package/stacks/nextjs-supabase/.morph/standards/infrastructure/azure/services/storage.md +0 -407
  303. package/stacks/nextjs-supabase/.morph/standards/infrastructure/docker/easypanel-deploy.md +0 -196
  304. package/stacks/nextjs-supabase/.morph/standards/infrastructure/supabase/mcp-setup.md +0 -252
  305. package/stacks/nextjs-supabase/.morph/standards/infrastructure/supabase/supabase-auth.md +0 -176
  306. package/stacks/nextjs-supabase/.morph/standards/infrastructure/supabase/supabase-pgvector.md +0 -169
  307. package/stacks/nextjs-supabase/.morph/standards/infrastructure/supabase/supabase-rls.md +0 -184
  308. package/stacks/nextjs-supabase/.morph/standards/infrastructure/supabase/supabase-storage.md +0 -153
  309. package/stacks/nextjs-supabase/.morph/standards/integration/api/graphql.md +0 -91
  310. package/stacks/nextjs-supabase/.morph/standards/integration/api/grpc.md +0 -114
  311. package/stacks/nextjs-supabase/.morph/standards/integration/api/rest-design.md +0 -95
  312. package/stacks/nextjs-supabase/.morph/standards/integration/event-driven/cqrs.md +0 -101
  313. package/stacks/nextjs-supabase/.morph/standards/integration/event-driven/event-sourcing.md +0 -124
  314. package/stacks/nextjs-supabase/.morph/standards/integration/event-driven/service-bus.md +0 -95
  315. package/stacks/nextjs-supabase/.morph/standards/observability/logging.md +0 -131
  316. package/stacks/nextjs-supabase/.morph/standards/observability/metrics.md +0 -121
  317. package/stacks/nextjs-supabase/.morph/standards/observability/monitoring.md +0 -114
  318. package/stacks/nextjs-supabase/.morph/standards/observability/tracing.md +0 -132
  319. package/stacks/nextjs-supabase/.morph/standards/workflows/parallel-execution.md +0 -112
  320. package/stacks/nextjs-supabase/.morph/standards/workflows/thread-management.md +0 -113
  321. package/stacks/nextjs-supabase/CLAUDE.md +0 -155
  322. package/stacks/nextjs-supabase/README.md +0 -103
  323. /package/{stacks/blazor-azure/.claude → framework}/commands/morph-apply.md +0 -0
  324. /package/{stacks/blazor-azure/.claude → framework}/commands/morph-archive.md +0 -0
  325. /package/{stacks/blazor-azure/.claude → framework}/commands/morph-preflight.md +0 -0
  326. /package/{stacks/blazor-azure/.claude → framework}/commands/morph-proposal.md +0 -0
  327. /package/{stacks/blazor-azure/.claude → framework}/commands/morph-status.md +0 -0
  328. /package/{stacks/blazor-azure/.claude → framework}/commands/morph-troubleshoot.md +0 -0
  329. /package/{stacks/blazor-azure/.morph → framework}/standards/ai-agents/blazor-ui.md +0 -0
  330. /package/{stacks/blazor-azure/.morph → framework}/standards/ai-agents/production.md +0 -0
  331. /package/{stacks/blazor-azure/.morph → framework}/standards/ai-agents/setup.md +0 -0
  332. /package/{stacks/blazor-azure/.morph → framework}/standards/ai-agents/team-orchestration.md +0 -0
  333. /package/{stacks/blazor-azure/.morph → framework}/standards/ai-agents/workflows.md +0 -0
  334. /package/{stacks/blazor-azure/.morph → framework}/standards/architecture/ddd/aggregates.md +0 -0
  335. /package/{stacks/blazor-azure/.morph → framework}/standards/architecture/ddd/entities.md +0 -0
  336. /package/{stacks/blazor-azure/.morph → framework}/standards/architecture/ddd/value-objects.md +0 -0
  337. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/api/minimal-api.md +0 -0
  338. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/api/rest.md +0 -0
  339. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/api/validation.md +0 -0
  340. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/authentication/passkeys.md +0 -0
  341. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/database/ef-core.md +0 -0
  342. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/database/migrations.md +0 -0
  343. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/database/postgresql/database.md +0 -0
  344. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/database/repository-patterns.md +0 -0
  345. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/database/vector-search-rag.md +0 -0
  346. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/dotnet/async.md +0 -0
  347. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/dotnet/core.md +0 -0
  348. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/dotnet/di.md +0 -0
  349. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/dotnet/program-cs-checklist.md +0 -0
  350. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/integrations/asaas/asaas-api.md +0 -0
  351. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/integrations/clerk/clerk-auth.md +0 -0
  352. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -0
  353. /package/{stacks/blazor-azure/.morph → framework}/standards/backend/integrations/resend/resend-email.md +0 -0
  354. /package/{stacks/blazor-azure/.morph → framework}/standards/context/analytics.md +0 -0
  355. /package/{stacks/blazor-azure/.morph → framework}/standards/context/bundles.md +0 -0
  356. /package/{stacks/blazor-azure/.morph → framework}/standards/context/priming.md +0 -0
  357. /package/{stacks/blazor-azure/.morph → framework}/standards/core/architecture.md +0 -0
  358. /package/{stacks/blazor-azure/.morph → framework}/standards/core/coding.md +0 -0
  359. /package/{stacks/blazor-azure/.morph → framework}/standards/core/git-branching-strategy.md +0 -0
  360. /package/{stacks/blazor-azure/.morph → framework}/standards/core/git.md +0 -0
  361. /package/{stacks/blazor-azure/.morph → framework}/standards/core/testing.md +0 -0
  362. /package/{stacks/blazor-azure/.morph → framework}/standards/data/nosql/blob-storage.md +0 -0
  363. /package/{stacks/blazor-azure/.morph → framework}/standards/data/nosql/cache/redis.md +0 -0
  364. /package/{stacks/blazor-azure/.morph → framework}/standards/data/nosql/cosmos-db.md +0 -0
  365. /package/{stacks/blazor-azure/.morph → framework}/standards/data/vector-search/azure-ai-search.md +0 -0
  366. /package/{stacks/blazor-azure/.morph → framework}/standards/data/vector-search/rag-chunking.md +0 -0
  367. /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/blazor/design-checklist.md +0 -0
  368. /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/blazor/fluent-ui-setup.md +0 -0
  369. /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/blazor/fluent-ui.md +0 -0
  370. /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/blazor/html-conversion.md +0 -0
  371. /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/blazor/lifecycle.md +0 -0
  372. /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/blazor/pitfalls.md +0 -0
  373. /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/blazor/state.md +0 -0
  374. /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/design-system/animations.md +0 -0
  375. /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/design-system/naming.md +0 -0
  376. /package/{stacks/blazor-azure/.morph → framework}/standards/frontend/nextjs/nextjs-patterns.md +0 -0
  377. /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/azure/azure.md +0 -0
  378. /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -0
  379. /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -0
  380. /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/azure/devops/local-development.md +0 -0
  381. /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/azure/services/functions.md +0 -0
  382. /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/azure/services/service-bus.md +0 -0
  383. /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/azure/services/storage.md +0 -0
  384. /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/docker/easypanel-deploy.md +0 -0
  385. /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/supabase/mcp-setup.md +0 -0
  386. /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/supabase/supabase-auth.md +0 -0
  387. /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/supabase/supabase-pgvector.md +0 -0
  388. /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/supabase/supabase-rls.md +0 -0
  389. /package/{stacks/blazor-azure/.morph → framework}/standards/infrastructure/supabase/supabase-storage.md +0 -0
  390. /package/{stacks/blazor-azure/.morph → framework}/standards/integration/api/graphql.md +0 -0
  391. /package/{stacks/blazor-azure/.morph → framework}/standards/integration/api/grpc.md +0 -0
  392. /package/{stacks/blazor-azure/.morph → framework}/standards/integration/api/rest-design.md +0 -0
  393. /package/{stacks/blazor-azure/.morph → framework}/standards/integration/event-driven/cqrs.md +0 -0
  394. /package/{stacks/blazor-azure/.morph → framework}/standards/integration/event-driven/event-sourcing.md +0 -0
  395. /package/{stacks/blazor-azure/.morph → framework}/standards/integration/event-driven/service-bus.md +0 -0
  396. /package/{stacks/blazor-azure/.morph → framework}/standards/observability/logging.md +0 -0
  397. /package/{stacks/blazor-azure/.morph → framework}/standards/observability/metrics.md +0 -0
  398. /package/{stacks/blazor-azure/.morph → framework}/standards/observability/monitoring.md +0 -0
  399. /package/{stacks/blazor-azure/.morph → framework}/standards/observability/tracing.md +0 -0
  400. /package/{stacks/blazor-azure/.morph → framework}/standards/workflows/parallel-execution.md +0 -0
  401. /package/{stacks/blazor-azure/.morph → framework}/standards/workflows/thread-management.md +0 -0
@@ -0,0 +1,108 @@
1
+ # Clerk Auth
2
+
3
+ > **Layer:** 2 | **Load:** on-keyword | **Keywords:** clerk, auth, login, signup, authentication, session, jwt, user
4
+
5
+ Autenticação SaaS com Clerk para .NET/Blazor. SDK: `Clerk.Net.AspNetCore.Security`.
6
+
7
+ ## Setup
8
+
9
+ ```csharp
10
+ // appsettings.json
11
+ { "Clerk": { "SecretKey": "${CLERK_SECRET_KEY}", "PublishableKey": "pk_test_xxx" } }
12
+
13
+ // Program.cs
14
+ builder.Services.AddClerk(builder.Configuration);
15
+ builder.Services.AddAuthentication(ClerkAuthenticationDefaults.AuthenticationScheme)
16
+ .AddClerk(o => { o.Authority = "https://clerk.{instance}.com"; o.ValidAudiences = ["your-app-id"]; });
17
+ builder.Services.AddAuthorization();
18
+ app.UseAuthentication();
19
+ app.UseAuthorization();
20
+ ```
21
+
22
+ ## Protected Endpoints
23
+
24
+ ```csharp
25
+ // Minimal API
26
+ app.MapGet("/api/profile", async (ClaimsPrincipal user, IClerkClient clerk) =>
27
+ {
28
+ var userId = user.FindFirstValue(ClaimTypes.NameIdentifier);
29
+ if (userId is null) return Results.Unauthorized();
30
+ var u = await clerk.Users.GetUserAsync(userId);
31
+ return Results.Ok(new { u.Id, Email = u.EmailAddresses.FirstOrDefault()?.EmailAddress });
32
+ }).RequireAuthorization();
33
+
34
+ // Controller: same pattern with [Authorize] + User.FindFirstValue()
35
+ // Role-based: [Authorize(Roles = "admin")]
36
+ ```
37
+
38
+ ## Blazor Server
39
+
40
+ > **Ref:** Same `CascadingAuthenticationState` + `AuthorizeRouteView` pattern as `azure-identity.md`
41
+
42
+ ```razor
43
+ @* RedirectToLogin.razor *@
44
+ @inject NavigationManager Nav
45
+ @code {
46
+ protected override void OnInitialized() =>
47
+ Nav.NavigateTo($"/sign-in?redirect_url={Uri.EscapeDataString(Nav.Uri)}", forceLoad: true);
48
+ }
49
+
50
+ @* Protected page *@
51
+ @page "/dashboard"
52
+ @attribute [Authorize]
53
+ <AuthorizeView><Authorized>Welcome, @context.User.Identity?.Name!</Authorized></AuthorizeView>
54
+ <AuthorizeView Roles="admin"><Authorized><AdminPanel /></Authorized></AuthorizeView>
55
+ ```
56
+
57
+ ## Client Operations
58
+
59
+ ```csharp
60
+ var user = await _clerk.Users.GetUserAsync(userId); // Get
61
+ var users = await _clerk.Users.GetUserListAsync(new() { Limit = 10 }); // List
62
+ await _clerk.Users.UpdateUserMetadataAsync(userId, new() // Update metadata
63
+ { PublicMetadata = new Dictionary<string, object> { ["plan"] = "pro" } });
64
+ await _clerk.Users.DeleteUserAsync(userId); // Delete
65
+ ```
66
+
67
+ ## Webhooks
68
+
69
+ ```csharp
70
+ [ApiController, Route("api/webhooks/clerk")]
71
+ public class ClerkWebhookController(IUserService users) : ControllerBase
72
+ {
73
+ [HttpPost]
74
+ public async Task<IActionResult> Handle([FromBody] ClerkWebhookPayload payload)
75
+ {
76
+ switch (payload.Type)
77
+ {
78
+ case "user.created": await users.SyncUserAsync(payload.Data); break;
79
+ case "user.updated": await users.UpdateUserAsync(payload.Data); break;
80
+ case "user.deleted": await users.DeleteUserAsync(payload.Data.Id); break;
81
+ }
82
+ return Ok();
83
+ }
84
+ }
85
+ ```
86
+
87
+ ## Clerk vs Azure Identity
88
+
89
+ | Aspecto | Clerk | Azure Identity |
90
+ |---------|-------|----------------|
91
+ | Setup | Faster | More complex |
92
+ | Cost | Freemium (5k MAU free) | Free (Azure AD) |
93
+ | Social login | 20+ providers | Limited |
94
+ | UI components | Pre-built | Build your own |
95
+ | Best for | SaaS B2C, MVPs | Enterprise/Azure |
96
+
97
+ ## Checklist
98
+
99
+ - [ ] Secret Key in Key Vault (not hardcoded)
100
+ - [ ] Authentication scheme configured
101
+ - [ ] Authorization policies defined
102
+ - [ ] Webhook endpoint + signature validation
103
+ - [ ] Redirect after login configured
104
+ - [ ] Error handling for expired sessions
105
+
106
+ ---
107
+
108
+ *MORPH-SPEC by Polymorphism Tech*
@@ -0,0 +1,64 @@
1
+ # Hangfire Orchestrator
2
+
3
+ **Tier:** 3 (Specialist)
4
+ **Always Active:** No
5
+ **Keywords:** scheduled, job, background, cron, recurring, batch, queue, hangfire
6
+ **Reports to:** dotnet-senior
7
+
8
+ ---
9
+
10
+ ## Role
11
+
12
+ Hangfire specialist for background jobs, scheduled tasks, and asynchronous processing.
13
+
14
+ ---
15
+
16
+ ## Standards Applied
17
+
18
+ ```
19
+ framework/standards/core/coding.md
20
+ framework/standards/backend/dotnet/async.md
21
+ framework/standards/backend/database/repository-patterns.md (Factory pattern for scoped repos)
22
+ framework/standards/backend/integrations/hangfire/setup.md
23
+ framework/standards/backend/integrations/hangfire/jobs.md
24
+ ```
25
+
26
+ ---
27
+
28
+ ## Responsibilities
29
+
30
+ - Configure Hangfire with SQL Server storage
31
+ - Create fire-and-forget jobs
32
+ - Schedule recurring jobs with cron expressions
33
+ - Implement delayed and continuation jobs
34
+ - Use IRepositoryFactory for DbContext in jobs (NOT direct injection)
35
+ - Configure Hangfire Dashboard with authentication
36
+ - Handle job failures and retries
37
+
38
+ ---
39
+
40
+ ## When to Use
41
+
42
+ - Background processing (emails, reports, cleanup)
43
+ - Scheduled tasks (daily/hourly jobs)
44
+ - Delayed operations (abandoned cart after 24h)
45
+ - Long-running operations outside HTTP request
46
+
47
+ ---
48
+
49
+ ## Critical Pattern
50
+
51
+ **ALWAYS use IRepositoryFactory in Hangfire jobs** - DbContext is scoped to HTTP request and won't exist in background jobs.
52
+
53
+ ---
54
+
55
+ ## Collaborates With
56
+
57
+ - **dotnet-senior** - Service layer triggering jobs
58
+ - **ef-modeler** - Repository factory implementation
59
+ - **azure-architect** - Hangfire dashboard security
60
+ - **resend-email** - Email jobs coordination
61
+
62
+ ---
63
+
64
+ *MORPH-SPEC by Polymorphism Tech*
@@ -0,0 +1,119 @@
1
+ # Resend Email
2
+
3
+ > **Layer:** 2 | **Load:** on-keyword | **Keywords:** resend, email, envio, transactional, notification, send email, template
4
+
5
+ Transactional email via Resend for .NET. REST API, no official SDK. Simple, developer-friendly.
6
+
7
+ ## Setup
8
+
9
+ ```csharp
10
+ // appsettings.json
11
+ { "Resend": { "BaseUrl": "https://api.resend.com", "ApiKey": "${RESEND_API_KEY}", "FromEmail": "noreply@yourdomain.com" } }
12
+
13
+ // Program.cs
14
+ builder.Services.Configure<ResendOptions>(builder.Configuration.GetSection("Resend"));
15
+ builder.Services.AddHttpClient<IResendClient, ResendClient>((sp, client) =>
16
+ {
17
+ var options = sp.GetRequiredService<IOptions<ResendOptions>>().Value;
18
+ client.BaseAddress = new Uri(options.BaseUrl);
19
+ client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", options.ApiKey);
20
+ });
21
+ ```
22
+
23
+ ## Client Interface
24
+
25
+ ```csharp
26
+ public interface IResendClient
27
+ {
28
+ Task<EmailResponse> SendAsync(SendEmailRequest request, CancellationToken ct = default);
29
+ Task<EmailResponse> SendBatchAsync(IEnumerable<SendEmailRequest> requests, CancellationToken ct = default);
30
+ Task<EmailDetails> GetEmailAsync(string emailId, CancellationToken ct = default);
31
+ }
32
+ ```
33
+
34
+ Implementation: `HttpClient.PostAsJsonAsync("/emails")` + `ReadFromJsonAsync<EmailResponse>`. Log errors, throw `ResendException` on failure.
35
+
36
+ ## DTOs
37
+
38
+ ```csharp
39
+ public record SendEmailRequest
40
+ {
41
+ [JsonPropertyName("from")] public required string From { get; init; }
42
+ [JsonPropertyName("to")] public required string[] To { get; init; }
43
+ [JsonPropertyName("subject")] public required string Subject { get; init; }
44
+ [JsonPropertyName("html")] public string? Html { get; init; }
45
+ [JsonPropertyName("text")] public string? Text { get; init; }
46
+ [JsonPropertyName("reply_to")] public string? ReplyTo { get; init; }
47
+ [JsonPropertyName("tags")] public Tag[]? Tags { get; init; }
48
+ }
49
+
50
+ public record EmailResponse
51
+ {
52
+ [JsonPropertyName("id")] public string Id { get; init; } = "";
53
+ }
54
+
55
+ public record Tag
56
+ {
57
+ [JsonPropertyName("name")] public required string Name { get; init; }
58
+ [JsonPropertyName("value")] public required string Value { get; init; }
59
+ }
60
+ ```
61
+
62
+ ## Webhooks
63
+
64
+ ```csharp
65
+ [ApiController, Route("api/webhooks/resend")]
66
+ public class ResendWebhookController(IEmailTrackingService tracking, ILogger<ResendWebhookController> logger) : ControllerBase
67
+ {
68
+ [HttpPost]
69
+ public async Task<IActionResult> Handle([FromBody] ResendWebhookPayload payload)
70
+ {
71
+ logger.LogInformation("Resend webhook: {Type} for {EmailId}", payload.Type, payload.Data?.EmailId);
72
+ switch (payload.Type)
73
+ {
74
+ case "email.delivered": await tracking.MarkDeliveredAsync(payload.Data!.EmailId); break;
75
+ case "email.bounced": await tracking.MarkBouncedAsync(payload.Data!.EmailId); break;
76
+ case "email.complained": await tracking.MarkComplainedAsync(payload.Data!.EmailId); break;
77
+ }
78
+ return Ok();
79
+ }
80
+ }
81
+ ```
82
+
83
+ ## Abstraction Pattern
84
+
85
+ ```csharp
86
+ // Use IEmailService abstraction over IResendClient for testability
87
+ public interface IEmailService
88
+ {
89
+ Task<string> SendTransactionalAsync(string to, string subject, string htmlBody, CancellationToken ct = default);
90
+ }
91
+
92
+ // ResendEmailService implements IEmailService using IResendClient
93
+ // FakeEmailClient implements IEmailService for simulation mode
94
+ ```
95
+
96
+ ## Gotchas
97
+
98
+ | Issue | Fix |
99
+ |-------|-----|
100
+ | Rate limit: 100 req/sec (free), 1000 (pro) | Queue emails via Hangfire for bulk sends |
101
+ | Domain verification required for production | Verify in Resend dashboard, add DNS records |
102
+ | `from` must match verified domain | Use `noreply@yourdomain.com` |
103
+ | HTML email rendering varies | Test with Litmus/Email on Acid, use MJML |
104
+ | Webhook signature validation | Verify `svix-signature` header in production |
105
+
106
+ ## Checklist
107
+
108
+ - [ ] API Key in Key Vault (not hardcoded)
109
+ - [ ] HttpClient with `Authorization: Bearer` header
110
+ - [ ] Domain verified in Resend dashboard
111
+ - [ ] `IEmailService` abstraction for testability
112
+ - [ ] Webhook endpoint + signature validation
113
+ - [ ] Rate limiting handled (queue for bulk)
114
+ - [ ] Tags used for tracking/analytics
115
+ - [ ] Simulation mode (`FakeEmailClient`) for dev
116
+
117
+ ---
118
+
119
+ *MORPH-SPEC by Polymorphism Tech*
@@ -0,0 +1,235 @@
1
+ # Code Analyzer
2
+
3
+ > **Layer:** 2 | **Load:** on-keyword | **Keywords:** analyze, review, refactor, clean, smell, duplicate, architecture, quality, debt, unused, dead code, code review, code quality
4
+
5
+ Deep code analysis specialist. Automates architecture review, clean code checks, and duplication detection.
6
+
7
+ > **Ref:** `framework/standards/coding.md` for naming conventions.
8
+ > **Ref:** `framework/standards/architecture.md` for architectural patterns.
9
+ > **Ref:** `.claude/skills/checklists/code-review.md` for runtime pattern checks.
10
+
11
+ ---
12
+
13
+ ## When to Run
14
+
15
+ | Trigger | Automatic? | Scope |
16
+ |---------|-----------|-------|
17
+ | FASE 5 completion (`/morph-apply` done) | Yes | Full feature code |
18
+ | Checkpoint (every 3 tasks) | Yes | Code since last checkpoint |
19
+ | Manual: `analyze`, `review code`, `code quality` | No | Specified scope |
20
+ | Pre-merge review | Recommended | All changed files |
21
+
22
+ ---
23
+
24
+ ## 3 Analysis Modes
25
+
26
+ Run all 3 modes by default. Use `--mode architecture`, `--mode clean`, or `--mode duplication` for targeted analysis.
27
+
28
+ ---
29
+
30
+ ### Mode 1: Architecture Analysis
31
+
32
+ Analyze the codebase for structural and architectural issues.
33
+
34
+ #### Checklist
35
+
36
+ **Layer Integrity:**
37
+ - [ ] `[CRITICAL]` Domain project has zero references to Infrastructure or Web
38
+ - [ ] `[CRITICAL]` Application does NOT reference Web project
39
+ - [ ] `[HIGH]` No circular dependencies between projects
40
+ - [ ] `[HIGH]` Infrastructure details don't leak into Application (no EF types in DTOs)
41
+
42
+ **Responsibility Separation:**
43
+ - [ ] `[HIGH]` Each class has a single, clear responsibility (< 300 lines)
44
+ - [ ] `[HIGH]` Controllers/pages are thin (< 50 lines logic, delegate to services)
45
+ - [ ] `[MEDIUM]` Interfaces are focused (< 7 methods per interface)
46
+ - [ ] `[MEDIUM]` No "God classes" (classes with 10+ dependencies)
47
+
48
+ **Abstractions:**
49
+ - [ ] `[MEDIUM]` External services accessed through interfaces (testable)
50
+ - [ ] `[LOW]` No over-abstraction (interfaces with exactly 1 implementation that's never mocked)
51
+ - [ ] `[MEDIUM]` Missing abstractions: direct HTTP calls, file I/O, or DB access without interface
52
+
53
+ **File Organization:**
54
+ - [ ] `[MEDIUM]` One class per file (file name matches class name)
55
+ - [ ] `[MEDIUM]` Files in correct project/folder per architecture.md
56
+ - [ ] `[LOW]` Consistent folder structure across all layers
57
+
58
+ **Configuration:**
59
+ - [ ] `[HIGH]` No hardcoded connection strings, URLs, or secrets
60
+ - [ ] `[MEDIUM]` Configuration via Options pattern (`IOptions<T>`)
61
+ - [ ] `[LOW]` No duplicate configuration across projects
62
+
63
+ **Unused Code:**
64
+ - [ ] `[MEDIUM]` No unused classes or interfaces (search for zero references)
65
+ - [ ] `[MEDIUM]` No dead code paths (unreachable branches)
66
+ - [ ] `[LOW]` No commented-out code blocks (> 3 lines)
67
+ - [ ] `[LOW]` No empty or near-empty files (< 10 lines of actual code)
68
+
69
+ ---
70
+
71
+ ### Mode 2: Clean Code Analysis
72
+
73
+ Analyze for code smells, style violations, and improvement opportunities.
74
+
75
+ #### Checklist
76
+
77
+ **Naming (ref: coding.md):**
78
+ - [ ] `[HIGH]` All naming follows coding.md conventions (PascalCase constants, _camelCase fields, etc.)
79
+ - [ ] `[HIGH]` No Hungarian notation (`strName`, `iCount`, `btnSubmit`)
80
+ - [ ] `[HIGH]` No ALL_CAPS constants (`MAX_RETRY` -> `MaxRetry`)
81
+ - [ ] `[MEDIUM]` Descriptive names (no `data`, `info`, `item`, `result` without context)
82
+ - [ ] `[MEDIUM]` No abbreviations in public APIs (`repo` -> `repository`)
83
+
84
+ **Method Quality:**
85
+ - [ ] `[HIGH]` No methods > 30 lines (extract sub-methods)
86
+ - [ ] `[HIGH]` No methods with > 4 parameters (use request object)
87
+ - [ ] `[MEDIUM]` No nested conditionals > 3 levels (extract or use early return)
88
+ - [ ] `[MEDIUM]` No complex conditionals (> 3 conditions in one `if` — extract to named bool or method)
89
+
90
+ **Class Quality:**
91
+ - [ ] `[HIGH]` No classes > 300 lines (SRP violation — split)
92
+ - [ ] `[HIGH]` No classes with > 7 constructor dependencies (God class — split)
93
+ - [ ] `[MEDIUM]` Classes are `sealed` unless designed for inheritance
94
+
95
+ **Magic Values:**
96
+ - [ ] `[HIGH]` No magic strings in comparisons (`if (status == "active")` -> use enum or constant)
97
+ - [ ] `[HIGH]` No magic numbers (`if (items.Count > 50)` -> extract `const int MaxItemsPerPage = 50`)
98
+ - [ ] `[MEDIUM]` No hardcoded URLs, file paths, or configuration values
99
+
100
+ **Dead Code:**
101
+ - [ ] `[MEDIUM]` No unused private methods (zero callers)
102
+ - [ ] `[MEDIUM]` No unused parameters in methods
103
+ - [ ] `[LOW]` No TODO/FIXME/HACK comments older than 2 sprints
104
+ - [ ] `[LOW]` No `#if DEBUG` blocks with substantial logic
105
+
106
+ **Error Handling:**
107
+ - [ ] `[CRITICAL]` No empty catch blocks
108
+ - [ ] `[HIGH]` No generic `catch (Exception)` without re-throw
109
+ - [ ] `[HIGH]` Result pattern used for business errors (not exceptions)
110
+ - [ ] `[MEDIUM]` Consistent error handling pattern across all services
111
+
112
+ **Logging:**
113
+ - [ ] `[HIGH]` No `$""` string interpolation in log methods (use message templates)
114
+ - [ ] `[HIGH]` Critical operations have entry/exit/error logging
115
+ - [ ] `[MEDIUM]` Log messages include correlation IDs (OrderId, UserId)
116
+ - [ ] `[MEDIUM]` Consistent log levels across similar operations
117
+
118
+ ---
119
+
120
+ ### Mode 3: Duplication Detection
121
+
122
+ Find redundant, duplicate, and unnecessary code.
123
+
124
+ #### Targets
125
+
126
+ **Exact/Near-Exact Duplicates:**
127
+ - [ ] `[HIGH]` Methods with identical or near-identical logic in different classes
128
+ - Same method body, different class -> extract to shared service or extension
129
+ - Same logic with different types -> extract to generic method
130
+ - [ ] `[HIGH]` Repeated code blocks (> 5 lines identical in 2+ locations)
131
+
132
+ **Thin Wrappers:**
133
+ - [ ] `[MEDIUM]` Methods that only delegate to another method with same parameters
134
+ ```csharp
135
+ // SMELL: Thin wrapper with no added value
136
+ public Task<Order> GetOrderAsync(int id, CancellationToken ct)
137
+ => _innerService.GetOrderAsync(id, ct);
138
+ ```
139
+ - [ ] `[MEDIUM]` Service methods that only call a repository method (no logic added)
140
+
141
+ **Interface Redundancy:**
142
+ - [ ] `[MEDIUM]` Same method signature appearing in multiple interfaces (extract base interface)
143
+ - [ ] `[LOW]` Interface that exactly mirrors another interface (merge or inherit)
144
+
145
+ **Passthrough Delegates:**
146
+ - [ ] `[MEDIUM]` Controller/page methods that only call one service method and return result
147
+ - If no validation, auth, or mapping: consider simplifying the layer
148
+
149
+ **DTO/Model Duplication:**
150
+ - [ ] `[HIGH]` Duplicate model definitions (same properties in different classes)
151
+ - [ ] `[MEDIUM]` Request/Response DTOs that are identical (merge or use shared base)
152
+ - [ ] `[MEDIUM]` Enums defined in multiple projects (centralize in Domain)
153
+
154
+ ---
155
+
156
+ ## Output Format
157
+
158
+ For each finding, report:
159
+
160
+ ```
161
+ ### [{SEVERITY}] {Category}: {Short Description}
162
+
163
+ **File:** `path/to/file.cs:42`
164
+ **Rule:** {rule reference from checklist above}
165
+
166
+ **Current code:**
167
+ ```csharp
168
+ // problematic code snippet
169
+ ```
170
+
171
+ **Suggested fix:**
172
+ ```csharp
173
+ // corrected code snippet
174
+ ```
175
+
176
+ **Why:** {brief explanation of the problem and impact}
177
+ ```
178
+
179
+ ---
180
+
181
+ ## Summary Template
182
+
183
+ After analysis, generate a summary:
184
+
185
+ ```markdown
186
+ ## Code Analysis Summary
187
+
188
+ **Scope:** {files/feature analyzed}
189
+ **Date:** {date}
190
+ **Modes:** Architecture | Clean Code | Duplication
191
+
192
+ ### Findings by Severity
193
+
194
+ | Severity | Count |
195
+ |----------|-------|
196
+ | CRITICAL | {n} |
197
+ | HIGH | {n} |
198
+ | MEDIUM | {n} |
199
+ | LOW | {n} |
200
+
201
+ ### Top 5 Priorities
202
+
203
+ 1. {Most critical finding with file:line}
204
+ 2. {Second most critical}
205
+ 3. ...
206
+
207
+ ### Estimated Effort
208
+
209
+ | Category | Findings | Effort |
210
+ |----------|----------|--------|
211
+ | Quick fixes (naming, style) | {n} | ~{h}h |
212
+ | Refactoring (extraction, splitting) | {n} | ~{h}h |
213
+ | Architecture (layer changes) | {n} | ~{h}h |
214
+
215
+ ### Recommendations
216
+
217
+ - {Key recommendation 1}
218
+ - {Key recommendation 2}
219
+ - {Key recommendation 3}
220
+ ```
221
+
222
+ ---
223
+
224
+ ## Integration with Other Specialists
225
+
226
+ | Specialist | Handoff |
227
+ |------------|---------|
228
+ | **Standards Architect** | Code Analyzer validates naming rules defined by Standards Architect |
229
+ | **.NET Senior Engineer** | Code Analyzer reviews code produced by dotnet-senior |
230
+ | **Code Review Checklist** | Code Analyzer runs architecture/clean code checks; code-review.md covers runtime patterns |
231
+ | **Testing Specialist** | Findings may generate new test requirements |
232
+
233
+ ---
234
+
235
+ *MORPH-SPEC by Polymorphism Tech*
@@ -0,0 +1,126 @@
1
+ # Testing Specialist
2
+
3
+ > **Layer:** 2 | **Load:** on-keyword | **Keywords:** test, testing, mock, fake, simulation, unit test, integration test
4
+
5
+ Especialista em testes, mocking e simulação para projetos .NET.
6
+
7
+ ## Strategy
8
+
9
+ | Level | What | Tools |
10
+ |-------|------|-------|
11
+ | **Unit** | Business logic, domain, handlers | xUnit + Moq + FluentAssertions |
12
+ | **Integration** | API flows, DB operations | WebApplicationFactory + TestContainers |
13
+ | **Component** | Blazor rendering, events | bUnit |
14
+ | **E2E** | Critical user journeys | Playwright (if needed) |
15
+
16
+ **Focus:** Critical/complex code. Don't aim for 100%, aim for value. Cover edge cases and error paths.
17
+
18
+ ---
19
+
20
+ ## Core Patterns
21
+
22
+ ### AAA (Arrange-Act-Assert)
23
+
24
+ ```csharp
25
+ [Fact]
26
+ public async Task CreateOrder_Should_ReturnSuccess_When_ValidInput()
27
+ {
28
+ // Arrange
29
+ var command = new CreateOrderCommand { CustomerId = 1, Items = [...] };
30
+ var handler = new CreateOrderHandler(_mockRepo.Object);
31
+ // Act
32
+ var result = await handler.Handle(command, CancellationToken.None);
33
+ // Assert
34
+ result.IsSuccess.Should().BeTrue();
35
+ }
36
+ ```
37
+
38
+ ### Naming Convention
39
+ ```
40
+ [Method]_Should_[ExpectedResult]_When_[Condition]
41
+ ```
42
+
43
+ ### Test Data Builders
44
+ Use builder pattern for complex test entities: `new OrderBuilder().WithCustomer(123).WithStatus(Completed).Build()`
45
+
46
+ ### Mocking (Moq)
47
+ ```csharp
48
+ var mockRepo = new Mock<IOrderRepository>();
49
+ mockRepo.Setup(r => r.GetByIdAsync(It.IsAny<int>())).ReturnsAsync(new Order { Id = 1 });
50
+ mockRepo.Verify(r => r.SaveAsync(It.IsAny<Order>()), Times.Once);
51
+ ```
52
+
53
+ ### Integration Tests (WebApplicationFactory)
54
+ Replace real DB with in-memory in `ConfigureServices`, use `CreateClient()` for HTTP calls.
55
+
56
+ ### bUnit (Blazor)
57
+ `RenderComponent<Counter>()` → `Find("button").Click()` → assert `TextContent`.
58
+
59
+ ---
60
+
61
+ ## Libraries
62
+
63
+ | Library | Purpose | NuGet |
64
+ |---------|---------|-------|
65
+ | xUnit | Test framework | `xunit` |
66
+ | Moq | Mocking | `Moq` |
67
+ | FluentAssertions | Readable assertions | `FluentAssertions` |
68
+ | Bogus | Fake data | `Bogus` |
69
+ | TestContainers | DB containers | `Testcontainers` |
70
+ | Respawn | DB reset | `Respawn` |
71
+ | WireMock | HTTP mocking | `WireMock.Net` |
72
+ | bUnit | Blazor testing | `bunit` |
73
+
74
+ ## Folder Structure
75
+
76
+ ```
77
+ tests/
78
+ ├── Unit/{Domain,Application,Builders}/
79
+ ├── Integration/{Api,Fixtures}/
80
+ └── E2E/
81
+ ```
82
+
83
+ ## Anti-Patterns
84
+ 1. **Fragile tests** — test behavior, not implementation
85
+ 2. **Slow tests** — use mocks, not real DB for unit tests
86
+ 3. **Coupled tests** — each test independent
87
+ 4. **Vague assertions** — use specific FluentAssertions
88
+ 5. **Giant setup** — extract to builders/fixtures
89
+
90
+ ---
91
+
92
+ ## Simulation of External Services
93
+
94
+ > **Ref:** `.claude/skills/checklists/simulation-checklist.md` for complete checklist
95
+
96
+ ### Key Rules
97
+
98
+ | Mock Type | Characteristic | DI Lifetime |
99
+ |-----------|---------------|-------------|
100
+ | **Stateful** (Dictionary, List) | Keeps data between calls | `Singleton` |
101
+ | **Stateless** | No state | `Scoped` |
102
+
103
+ ```csharp
104
+ // ❌ Stateful with Scoped = loses state between requests
105
+ services.AddScoped<IReplicateClient, FakeReplicateClient>();
106
+ // ✅ Stateful with Singleton
107
+ services.AddSingleton<IReplicateClient, FakeReplicateClient>();
108
+ ```
109
+
110
+ **Before implementing mocks:** Map ALL dependencies (interfaces, transitive deps, lifetimes).
111
+
112
+ ---
113
+
114
+ ## Checklists
115
+
116
+ ### Per Test Type
117
+ | Target | Test |
118
+ |--------|------|
119
+ | Entity/Domain | Creation validation, state transitions (valid + invalid), invariants |
120
+ | Handler/Service | Happy path, invalid input, not found (404), auth error, timeout |
121
+ | API | Status codes, response body, request validation, auth |
122
+ | Blazor Component | Initial render, user events, states (loading/error/empty), form validation |
123
+
124
+ ---
125
+
126
+ *MORPH-SPEC by Polymorphism Tech*
@@ -0,0 +1,7 @@
1
+ # Level 3: Technologies
2
+
3
+ Technology-specific implementation patterns.
4
+
5
+ **Purpose:** Skills for specific technologies (EF Core, Blazor, Hangfire, SignalR, etc.).
6
+
7
+ **To be populated in Phase 8/9.**
@@ -0,0 +1,7 @@
1
+ # Level 4: Patterns
2
+
3
+ Architectural and design patterns.
4
+
5
+ **Purpose:** Skills for specific patterns (CQRS, Event Sourcing, DDD, Repository, etc.).
6
+
7
+ **To be populated later.**