@polymorphism-tech/morph-spec 3.2.0 → 4.3.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 (386) hide show
  1. package/README.md +1 -14
  2. package/bin/detect-agents.js +1 -1
  3. package/bin/morph-spec.js +403 -40
  4. package/bin/validate.js +5 -5
  5. package/docs/getting-started.md +0 -5
  6. package/docs/next-generation/AGENTS.md +521 -0
  7. package/docs/next-generation/ANALYSIS.md +555 -0
  8. package/docs/next-generation/ARCHITECTURE.md +436 -0
  9. package/docs/next-generation/CONTEXT-OPTIMIZATION.md +267 -0
  10. package/docs/next-generation/EXECUTION-FLOW.md +274 -0
  11. package/docs/next-generation/FEATURES.md +688 -0
  12. package/docs/next-generation/META-PROMPTS.md +235 -0
  13. package/docs/next-generation/MIGRATION-GUIDE.md +253 -0
  14. package/docs/next-generation/README.md +231 -0
  15. package/docs/next-generation/ROADMAP.md +801 -0
  16. package/docs/next-generation/THREAD-MANAGEMENT.md +240 -0
  17. package/docs/validation-checklist.md +0 -1
  18. package/package.json +5 -5
  19. package/src/commands/agents/agents-fuse.js +96 -0
  20. package/src/commands/agents/index.js +4 -0
  21. package/src/commands/agents/micro-agent.js +112 -0
  22. package/src/commands/{spawn-team.js → agents/spawn-team.js} +237 -172
  23. package/src/commands/agents/squad-template.js +146 -0
  24. package/src/commands/analytics/analytics.js +176 -0
  25. package/src/commands/context/context-prime.js +63 -0
  26. package/src/commands/context/core-four.js +54 -0
  27. package/src/commands/{create-story.js → feature/create-story.js} +357 -354
  28. package/src/commands/feature/index.js +6 -0
  29. package/src/commands/{shard-spec.js → feature/shard-spec.js} +2 -2
  30. package/src/commands/{sprint-status.js → feature/sprint-status.js} +1 -1
  31. package/src/commands/{generate-context.js → generation/generate-context.js} +40 -40
  32. package/src/commands/{generate.js → generation/generate.js} +4 -4
  33. package/src/commands/generation/index.js +5 -0
  34. package/src/commands/index.js +16 -0
  35. package/src/commands/{capture-pattern.js → learning/capture-pattern.js} +121 -121
  36. package/src/commands/learning/index.js +5 -0
  37. package/src/commands/mcp/mcp.js +102 -0
  38. package/src/commands/{detect-agents.js → project/detect-agents.js} +178 -178
  39. package/src/commands/project/detect-workflow.js +174 -0
  40. package/src/commands/{detect.js → project/detect.js} +104 -104
  41. package/src/commands/{doctor.js → project/doctor.js} +221 -4
  42. package/src/commands/project/index.js +10 -0
  43. package/src/commands/{init.js → project/init.js} +305 -295
  44. package/src/commands/{sync.js → project/sync.js} +167 -167
  45. package/src/commands/{update.js → project/update.js} +240 -240
  46. package/src/commands/{advance-phase.js → state/advance-phase.js} +101 -25
  47. package/src/commands/{approve.js → state/approve.js} +221 -221
  48. package/src/commands/state/index.js +8 -0
  49. package/src/commands/{rollback-phase.js → state/rollback-phase.js} +185 -185
  50. package/src/commands/{state.js → state/state.js} +334 -334
  51. package/src/commands/{validate-phase.js → state/validate-phase.js} +221 -221
  52. package/src/commands/tasks/index.js +4 -0
  53. package/src/commands/{task.js → tasks/task.js} +78 -78
  54. package/src/commands/templates/index.js +8 -0
  55. package/src/commands/templates/template-customize.js +101 -0
  56. package/src/commands/templates/template-list.js +128 -0
  57. package/src/commands/templates/template-render.js +174 -0
  58. package/src/commands/templates/template-show.js +131 -0
  59. package/src/commands/templates/template-validate.js +91 -0
  60. package/src/commands/threads/thread-template.js +103 -0
  61. package/src/commands/threads/threads.js +261 -0
  62. package/src/commands/trust/trust.js +205 -0
  63. package/src/commands/utils/index.js +7 -0
  64. package/src/commands/{session-summary.js → utils/session-summary.js} +291 -291
  65. package/src/commands/{troubleshoot.js → utils/troubleshoot.js} +222 -222
  66. package/src/commands/{analyze-blazor-concurrency.js → validation/analyze-blazor-concurrency.js} +193 -193
  67. package/src/commands/validation/index.js +8 -0
  68. package/src/commands/{lint-fluent.js → validation/lint-fluent.js} +352 -352
  69. package/src/commands/{validate-blazor-state.js → validation/validate-blazor-state.js} +210 -210
  70. package/src/commands/{validate-blazor.js → validation/validate-blazor.js} +156 -156
  71. package/src/commands/{validate-css.js → validation/validate-css.js} +84 -84
  72. package/src/core/index.js +10 -0
  73. package/src/{orchestrator.js → core/orchestrator.js} +8 -8
  74. package/src/core/registry/command-registry.js +302 -0
  75. package/src/core/registry/index.js +8 -0
  76. package/src/core/registry/validator-registry.js +204 -0
  77. package/src/core/state/index.js +8 -0
  78. package/src/{lib → core/state}/phase-state-machine.js +214 -214
  79. package/src/{lib → core/state}/state-manager.js +588 -534
  80. package/src/core/templates/index.js +9 -0
  81. package/src/core/templates/template-registry.js +335 -0
  82. package/src/core/templates/template-renderer.js +477 -0
  83. package/src/core/templates/template-validator.js +296 -0
  84. package/src/core/workflows/index.js +7 -0
  85. package/src/core/workflows/workflow-detector.js +452 -0
  86. package/src/lib/agents/micro-agent-factory.js +161 -0
  87. package/src/lib/{complexity-analyzer.js → analysis/complexity-analyzer.js} +441 -441
  88. package/src/lib/analysis/index.js +7 -0
  89. package/src/lib/analytics/analytics-engine.js +345 -0
  90. package/src/lib/{checkpoint-hooks.js → checkpoints/checkpoint-hooks.js} +35 -0
  91. package/src/lib/checkpoints/index.js +7 -0
  92. package/src/lib/context/context-bundler.js +240 -0
  93. package/src/lib/context/context-optimizer.js +212 -0
  94. package/src/lib/context/context-tracker.js +273 -0
  95. package/src/lib/context/core-four-tracker.js +201 -0
  96. package/src/lib/context/mcp-optimizer.js +200 -0
  97. package/src/lib/detectors/config-detector.js +223 -223
  98. package/src/lib/detectors/conversation-analyzer.js +163 -163
  99. package/src/lib/{design-system-detector.js → detectors/design-system-detector.js} +187 -187
  100. package/src/lib/detectors/index.js +87 -84
  101. package/src/lib/detectors/standards-generator.js +275 -275
  102. package/src/lib/detectors/structure-detector.js +245 -245
  103. package/src/lib/execution/fusion-executor.js +304 -0
  104. package/src/lib/execution/parallel-executor.js +270 -0
  105. package/src/lib/{context-generator.js → generators/context-generator.js} +526 -516
  106. package/src/lib/generators/index.js +10 -0
  107. package/src/lib/{metadata-extractor.js → generators/metadata-extractor.js} +387 -380
  108. package/src/lib/{recap-generator.js → generators/recap-generator.js} +205 -205
  109. package/src/lib/hooks/hook-executor.js +169 -0
  110. package/src/lib/hooks/stop-hook-executor.js +286 -0
  111. package/src/lib/hops/hop-composer.js +221 -0
  112. package/src/lib/learning/index.js +7 -0
  113. package/src/lib/orchestration/index.js +7 -0
  114. package/src/lib/{team-orchestrator.js → orchestration/team-orchestrator.js} +323 -323
  115. package/src/lib/stacks/index.js +7 -0
  116. package/src/lib/{stack-resolver.js → stacks/stack-resolver.js} +180 -148
  117. package/src/lib/standards/index.js +7 -0
  118. package/src/lib/{standards-context-injector.js → standards/standards-context-injector.js} +298 -288
  119. package/src/lib/threads/thread-coordinator.js +238 -0
  120. package/src/lib/threads/thread-manager.js +317 -0
  121. package/src/lib/tracking/artifact-trail.js +202 -0
  122. package/src/lib/troubleshooting/index.js +8 -0
  123. package/src/lib/{troubleshoot-grep.js → troubleshooting/troubleshoot-grep.js} +204 -204
  124. package/src/lib/{troubleshoot-index.js → troubleshooting/troubleshoot-index.js} +144 -144
  125. package/src/lib/trust/trust-manager.js +269 -0
  126. package/src/lib/validators/{architecture-validator.js → architecture/architecture-validator.js} +8 -8
  127. package/src/lib/validators/architecture/index.js +7 -0
  128. package/src/lib/{blazor-concurrency-analyzer.js → validators/blazor/blazor-concurrency-analyzer.js} +277 -288
  129. package/src/lib/{blazor-state-validator.js → validators/blazor/blazor-state-validator.js} +279 -291
  130. package/src/lib/{blazor-validator.js → validators/blazor/blazor-validator.js} +369 -374
  131. package/src/lib/validators/blazor/index.js +9 -0
  132. package/src/lib/validators/{content-validator.js → content/content-validator.js} +351 -351
  133. package/src/lib/validators/content/index.js +7 -0
  134. package/src/lib/validators/{contract-compliance-validator.js → contracts/contract-compliance-validator.js} +273 -273
  135. package/src/lib/validators/contracts/index.js +7 -0
  136. package/src/lib/{css-validator.js → validators/css/css-validator.js} +352 -352
  137. package/src/lib/validators/css/index.js +7 -0
  138. package/src/lib/validators/{design-system-validator.js → design-system/design-system-validator.js} +231 -231
  139. package/src/lib/validators/design-system/index.js +7 -0
  140. package/src/lib/validators/packages/index.js +7 -0
  141. package/src/lib/validators/shared/index.js +12 -0
  142. package/src/lib/validators/shared/issue-counter.js +18 -0
  143. package/src/lib/validators/shared/result-formatter.js +124 -0
  144. package/src/lib/{spec-validator.js → validators/spec-validator.js} +258 -258
  145. package/src/lib/validators/ui/index.js +7 -0
  146. package/src/lib/{validation-runner.js → validators/validation-runner.js} +286 -284
  147. package/src/ui/wizard-questions.js +0 -2
  148. package/src/utils/color-utils.js +70 -0
  149. package/src/utils/file-copier.js +188 -189
  150. package/src/utils/process-handler.js +97 -0
  151. package/stacks/blazor-azure/.morph/config/agents.json +948 -764
  152. package/stacks/blazor-azure/.morph/hooks/{pre-commit-tests.sh → pre-commit/tests-csharp.sh} +3 -2
  153. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +41 -0
  154. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +24 -0
  155. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +23 -0
  156. package/stacks/nextjs-supabase/.morph/config/agents.json +345 -345
  157. package/stacks/nextjs-supabase/.morph/hooks/pre-commit/tests-typescript.sh +61 -0
  158. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +22 -0
  159. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +22 -0
  160. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +35 -0
  161. package/stacks/nextjs-supabase/README.md +6 -15
  162. package/CLAUDE.md +0 -648
  163. package/bin/render-template.js +0 -349
  164. package/bin/semantic-detect-agents.js +0 -247
  165. package/bin/validate-agents-skills.js +0 -257
  166. package/bin/validate-agents.js +0 -70
  167. package/bin/validate-phase.js +0 -263
  168. package/docs/examples.md +0 -328
  169. package/docs/llm-interaction-config.md +0 -735
  170. package/scripts/reorganize-skills.cjs +0 -175
  171. package/scripts/validate-agents-structure.cjs +0 -52
  172. package/scripts/validate-skills.cjs +0 -180
  173. package/src/commands/deploy.js +0 -780
  174. package/src/commands/migrate-state.js +0 -158
  175. package/src/commands/upgrade.js +0 -346
  176. package/src/lib/continuous-validator.js +0 -421
  177. package/src/lib/decision-constraint-loader.js +0 -109
  178. package/src/lib/design-system-scaffolder.js +0 -299
  179. package/src/lib/hook-executor.js +0 -257
  180. package/src/lib/mockup-generator.js +0 -366
  181. package/src/lib/ui-detector.js +0 -350
  182. package/src/llm/schema-validator.js +0 -121
  183. package/src/sanitizer/.gitkeep +0 -0
  184. package/src/scanner/.gitkeep +0 -0
  185. package/src/types/index.js +0 -477
  186. package/src/ui/.gitkeep +0 -0
  187. package/src/writer/.gitkeep +0 -0
  188. package/stacks/blazor-azure/.azure/README.md +0 -293
  189. package/stacks/blazor-azure/.azure/docs/azure-devops-setup.md +0 -454
  190. package/stacks/blazor-azure/.azure/docs/branch-strategy.md +0 -398
  191. package/stacks/blazor-azure/.azure/docs/local-development.md +0 -515
  192. package/stacks/blazor-azure/.azure/pipelines/pipeline-variables.yml +0 -34
  193. package/stacks/blazor-azure/.azure/pipelines/prod-pipeline.yml +0 -319
  194. package/stacks/blazor-azure/.azure/pipelines/staging-pipeline.yml +0 -234
  195. package/stacks/blazor-azure/.azure/pipelines/templates/build-dotnet.yml +0 -75
  196. package/stacks/blazor-azure/.azure/pipelines/templates/deploy-app-service.yml +0 -94
  197. package/stacks/blazor-azure/.azure/pipelines/templates/deploy-container-app.yml +0 -120
  198. package/stacks/blazor-azure/.azure/pipelines/templates/infra-deploy.yml +0 -90
  199. package/stacks/blazor-azure/.claude/commands/morph-apply.md +0 -221
  200. package/stacks/blazor-azure/.claude/commands/morph-archive.md +0 -79
  201. package/stacks/blazor-azure/.claude/commands/morph-deploy.md +0 -529
  202. package/stacks/blazor-azure/.claude/commands/morph-infra.md +0 -209
  203. package/stacks/blazor-azure/.claude/commands/morph-preflight.md +0 -227
  204. package/stacks/blazor-azure/.claude/commands/morph-proposal.md +0 -122
  205. package/stacks/blazor-azure/.claude/commands/morph-status.md +0 -86
  206. package/stacks/blazor-azure/.claude/commands/morph-troubleshoot.md +0 -122
  207. package/stacks/blazor-azure/.claude/settings.local.json +0 -15
  208. package/stacks/blazor-azure/.claude/skills/level-0-meta/README.md +0 -7
  209. package/stacks/blazor-azure/.claude/skills/level-0-meta/code-review.md +0 -226
  210. package/stacks/blazor-azure/.claude/skills/level-0-meta/morph-checklist.md +0 -117
  211. package/stacks/blazor-azure/.claude/skills/level-0-meta/simulation-checklist.md +0 -77
  212. package/stacks/blazor-azure/.claude/skills/level-1-workflows/README.md +0 -7
  213. package/stacks/blazor-azure/.claude/skills/level-1-workflows/morph-replicate.md +0 -213
  214. package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-clarify.md +0 -131
  215. package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-design.md +0 -213
  216. package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-setup.md +0 -106
  217. package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-tasks.md +0 -164
  218. package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-uiux.md +0 -169
  219. package/stacks/blazor-azure/.claude/skills/level-2-domains/README.md +0 -14
  220. package/stacks/blazor-azure/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +0 -192
  221. package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/po-pm-advisor.md +0 -197
  222. package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/prompt-engineer.md +0 -189
  223. package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/seo-growth-hacker.md +0 -320
  224. package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/standards-architect.md +0 -156
  225. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/dotnet-senior.md +0 -287
  226. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ef-modeler.md +0 -113
  227. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +0 -126
  228. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ms-agent-expert.md +0 -109
  229. package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/blazor-builder.md +0 -210
  230. package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/nextjs-expert.md +0 -154
  231. package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +0 -191
  232. package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/azure-architect.md +0 -142
  233. package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/azure-deploy-specialist.md +0 -699
  234. package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +0 -126
  235. package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/container-specialist.md +0 -131
  236. package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +0 -119
  237. package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/asaas-financial.md +0 -130
  238. package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/azure-identity.md +0 -142
  239. package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/clerk-auth.md +0 -108
  240. package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/resend-email.md +0 -119
  241. package/stacks/blazor-azure/.claude/skills/level-2-domains/quality/code-analyzer.md +0 -235
  242. package/stacks/blazor-azure/.claude/skills/level-2-domains/quality/testing-specialist.md +0 -126
  243. package/stacks/blazor-azure/.claude/skills/level-3-technologies/README.md +0 -7
  244. package/stacks/blazor-azure/.claude/skills/level-4-patterns/README.md +0 -7
  245. package/stacks/blazor-azure/.morph/archive/.gitkeep +0 -25
  246. package/stacks/blazor-azure/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +0 -392
  247. package/stacks/blazor-azure/.morph/docs/workflows/design-impl.md +0 -37
  248. package/stacks/blazor-azure/.morph/docs/workflows/enforcement-pipeline.md +0 -668
  249. package/stacks/blazor-azure/.morph/docs/workflows/fast-track.md +0 -29
  250. package/stacks/blazor-azure/.morph/docs/workflows/full-morph.md +0 -76
  251. package/stacks/blazor-azure/.morph/docs/workflows/standard.md +0 -44
  252. package/stacks/blazor-azure/.morph/docs/workflows/ui-refresh.md +0 -39
  253. package/stacks/blazor-azure/.morph/examples/api-nextjs/README.md +0 -241
  254. package/stacks/blazor-azure/.morph/examples/api-nextjs/contracts.ts +0 -307
  255. package/stacks/blazor-azure/.morph/examples/api-nextjs/spec.md +0 -399
  256. package/stacks/blazor-azure/.morph/examples/api-nextjs/tasks.md +0 -168
  257. package/stacks/blazor-azure/.morph/examples/micro-saas/README.md +0 -125
  258. package/stacks/blazor-azure/.morph/examples/micro-saas/contracts.cs +0 -358
  259. package/stacks/blazor-azure/.morph/examples/micro-saas/decisions.md +0 -246
  260. package/stacks/blazor-azure/.morph/examples/micro-saas/spec.md +0 -236
  261. package/stacks/blazor-azure/.morph/examples/micro-saas/tasks.md +0 -150
  262. package/stacks/blazor-azure/.morph/examples/multi-agent/README.md +0 -309
  263. package/stacks/blazor-azure/.morph/examples/multi-agent/contracts.cs +0 -433
  264. package/stacks/blazor-azure/.morph/examples/multi-agent/spec.md +0 -479
  265. package/stacks/blazor-azure/.morph/examples/multi-agent/tasks.md +0 -185
  266. package/stacks/blazor-azure/.morph/examples/scheduled-reports/decisions.md +0 -158
  267. package/stacks/blazor-azure/.morph/examples/scheduled-reports/proposal.md +0 -95
  268. package/stacks/blazor-azure/.morph/examples/scheduled-reports/spec.md +0 -267
  269. package/stacks/blazor-azure/.morph/examples/state-v3.json +0 -188
  270. package/stacks/blazor-azure/.morph/features/.gitkeep +0 -25
  271. package/stacks/blazor-azure/.morph/hooks/README.md +0 -348
  272. package/stacks/blazor-azure/.morph/hooks/pre-commit-agents.sh +0 -24
  273. package/stacks/blazor-azure/.morph/hooks/pre-commit-all.sh +0 -48
  274. package/stacks/blazor-azure/.morph/hooks/pre-commit-specs.sh +0 -49
  275. package/stacks/blazor-azure/.morph/hooks/task-completed.js +0 -73
  276. package/stacks/blazor-azure/.morph/hooks/teammate-idle.js +0 -68
  277. package/stacks/blazor-azure/.morph/schemas/agent.schema.json +0 -296
  278. package/stacks/blazor-azure/.morph/schemas/tasks.schema.json +0 -220
  279. package/stacks/blazor-azure/.morph/specs/.gitkeep +0 -20
  280. package/stacks/blazor-azure/.morph/standards/agent-framework-blazor-ui.md +0 -359
  281. package/stacks/blazor-azure/.morph/standards/agent-framework-production.md +0 -410
  282. package/stacks/blazor-azure/.morph/standards/agent-framework-setup.md +0 -413
  283. package/stacks/blazor-azure/.morph/standards/agent-framework-workflows.md +0 -349
  284. package/stacks/blazor-azure/.morph/standards/agent-teams-workflow.md +0 -474
  285. package/stacks/blazor-azure/.morph/standards/architecture.md +0 -325
  286. package/stacks/blazor-azure/.morph/standards/azure.md +0 -605
  287. package/stacks/blazor-azure/.morph/standards/coding.md +0 -377
  288. package/stacks/blazor-azure/.morph/standards/dotnet10-migration.md +0 -520
  289. package/stacks/blazor-azure/.morph/standards/fluent-ui-setup.md +0 -590
  290. package/stacks/blazor-azure/.morph/standards/migration-guide.md +0 -514
  291. package/stacks/blazor-azure/.morph/standards/passkeys-auth.md +0 -423
  292. package/stacks/blazor-azure/.morph/standards/vector-search-rag.md +0 -536
  293. package/stacks/blazor-azure/.morph/templates/CONTEXT-FEATURE.md +0 -276
  294. package/stacks/blazor-azure/.morph/templates/CONTEXT.md +0 -170
  295. package/stacks/blazor-azure/.morph/templates/FluentDesignTheme.cs +0 -149
  296. package/stacks/blazor-azure/.morph/templates/MudTheme.cs +0 -281
  297. package/stacks/blazor-azure/.morph/templates/agent.cs +0 -163
  298. package/stacks/blazor-azure/.morph/templates/clarify-questions.md +0 -159
  299. package/stacks/blazor-azure/.morph/templates/component.razor +0 -239
  300. package/stacks/blazor-azure/.morph/templates/contracts/Commands.cs +0 -74
  301. package/stacks/blazor-azure/.morph/templates/contracts/Entities.cs +0 -25
  302. package/stacks/blazor-azure/.morph/templates/contracts/Queries.cs +0 -74
  303. package/stacks/blazor-azure/.morph/templates/contracts/README.md +0 -74
  304. package/stacks/blazor-azure/.morph/templates/contracts.cs +0 -217
  305. package/stacks/blazor-azure/.morph/templates/decisions.md +0 -123
  306. package/stacks/blazor-azure/.morph/templates/design-system.css +0 -226
  307. package/stacks/blazor-azure/.morph/templates/infra/.dockerignore.example +0 -89
  308. package/stacks/blazor-azure/.morph/templates/infra/Dockerfile.example +0 -82
  309. package/stacks/blazor-azure/.morph/templates/infra/README.md +0 -286
  310. package/stacks/blazor-azure/.morph/templates/infra/app-insights.bicep +0 -63
  311. package/stacks/blazor-azure/.morph/templates/infra/app-service.bicep +0 -164
  312. package/stacks/blazor-azure/.morph/templates/infra/azure-pipelines-deploy.yml +0 -480
  313. package/stacks/blazor-azure/.morph/templates/infra/container-app-env.bicep +0 -49
  314. package/stacks/blazor-azure/.morph/templates/infra/container-app.bicep +0 -156
  315. package/stacks/blazor-azure/.morph/templates/infra/deploy-checklist.md +0 -426
  316. package/stacks/blazor-azure/.morph/templates/infra/deploy.ps1 +0 -229
  317. package/stacks/blazor-azure/.morph/templates/infra/deploy.sh +0 -208
  318. package/stacks/blazor-azure/.morph/templates/infra/key-vault.bicep +0 -91
  319. package/stacks/blazor-azure/.morph/templates/infra/main.bicep +0 -189
  320. package/stacks/blazor-azure/.morph/templates/infra/parameters.dev.json +0 -29
  321. package/stacks/blazor-azure/.morph/templates/infra/parameters.prod.json +0 -29
  322. package/stacks/blazor-azure/.morph/templates/infra/parameters.staging.json +0 -29
  323. package/stacks/blazor-azure/.morph/templates/infra/sql-database.bicep +0 -103
  324. package/stacks/blazor-azure/.morph/templates/infra/storage.bicep +0 -106
  325. package/stacks/blazor-azure/.morph/templates/integrations/asaas-client.cs +0 -387
  326. package/stacks/blazor-azure/.morph/templates/integrations/asaas-webhook.cs +0 -351
  327. package/stacks/blazor-azure/.morph/templates/integrations/azure-identity-config.cs +0 -288
  328. package/stacks/blazor-azure/.morph/templates/integrations/clerk-config.cs +0 -258
  329. package/stacks/blazor-azure/.morph/templates/job.cs +0 -171
  330. package/stacks/blazor-azure/.morph/templates/migration.cs +0 -83
  331. package/stacks/blazor-azure/.morph/templates/proposal.md +0 -141
  332. package/stacks/blazor-azure/.morph/templates/recap.md +0 -94
  333. package/stacks/blazor-azure/.morph/templates/repository.cs +0 -141
  334. package/stacks/blazor-azure/.morph/templates/saas/subscription.cs +0 -347
  335. package/stacks/blazor-azure/.morph/templates/saas/tenant.cs +0 -338
  336. package/stacks/blazor-azure/.morph/templates/service.cs +0 -139
  337. package/stacks/blazor-azure/.morph/templates/simulation.md +0 -353
  338. package/stacks/blazor-azure/.morph/templates/spec.md +0 -149
  339. package/stacks/blazor-azure/.morph/templates/sprint-status.yaml +0 -68
  340. package/stacks/blazor-azure/.morph/templates/state.template.json +0 -222
  341. package/stacks/blazor-azure/.morph/templates/story.md +0 -143
  342. package/stacks/blazor-azure/.morph/templates/tasks.md +0 -257
  343. package/stacks/blazor-azure/.morph/templates/test.cs +0 -239
  344. package/stacks/blazor-azure/.morph/templates/ui-components.md +0 -362
  345. package/stacks/blazor-azure/.morph/templates/ui-design-system.md +0 -286
  346. package/stacks/blazor-azure/.morph/templates/ui-flows.md +0 -336
  347. package/stacks/blazor-azure/.morph/templates/ui-mockups.md +0 -133
  348. package/stacks/blazor-azure/.morph/test-infra/example.bicep +0 -59
  349. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/backend/dotnet-supabase.md +0 -244
  350. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/frontend/nextjs-supabase.md +0 -335
  351. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/infrastructure/easypanel-deployer.md +0 -189
  352. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +0 -170
  353. package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +0 -169
  354. package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +0 -247
  355. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +0 -697
  356. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +0 -85
  357. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +0 -86
  358. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +0 -498
  359. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +0 -121
  360. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +0 -138
  361. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +0 -162
  362. package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +0 -191
  363. package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +0 -193
  364. package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +0 -171
  365. package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +0 -164
  366. package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +0 -179
  367. package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +0 -148
  368. package/stacks/nextjs-supabase/.morph/templates/contracts.cs +0 -173
  369. package/stacks/nextjs-supabase/.morph/templates/contracts.ts +0 -168
  370. package/stacks/nextjs-supabase/.morph/templates/decisions.md +0 -115
  371. package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +0 -38
  372. package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +0 -48
  373. package/stacks/nextjs-supabase/.morph/templates/proposal.md +0 -145
  374. package/stacks/nextjs-supabase/.morph/templates/recap.md +0 -134
  375. package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +0 -57
  376. package/stacks/nextjs-supabase/.morph/templates/spec.md +0 -231
  377. package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +0 -100
  378. package/stacks/nextjs-supabase/.morph/templates/tasks.md +0 -257
  379. /package/src/commands/{search-patterns.js → learning/search-patterns.js} +0 -0
  380. /package/src/{lib → core/templates}/template-data-sources.js +0 -0
  381. /package/src/lib/{design-system-generator.js → generators/design-system-generator.js} +0 -0
  382. /package/src/lib/{learning-system.js → learning/learning-system.js} +0 -0
  383. /package/src/lib/validators/{package-validator.js → packages/package-validator.js} +0 -0
  384. /package/src/lib/validators/{ui-contrast-validator.js → ui/ui-contrast-validator.js} +0 -0
  385. /package/{src/generator → stacks/blazor-azure/.morph/templates}/.gitkeep +0 -0
  386. /package/{src/llm → stacks/nextjs-supabase/.morph/templates}/.gitkeep +0 -0
@@ -1,108 +0,0 @@
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*
@@ -1,119 +0,0 @@
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*
@@ -1,235 +0,0 @@
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*
@@ -1,126 +0,0 @@
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*
@@ -1,7 +0,0 @@
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.**
@@ -1,7 +0,0 @@
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.**
@@ -1,25 +0,0 @@
1
- # Features Arquivadas
2
-
3
- Esta pasta contém o histórico de features CONCLUÍDAS.
4
-
5
- ## Estrutura
6
-
7
- ```
8
- archive/
9
- └── {feature-name}/
10
- ├── proposal.md # Proposta original
11
- ├── spec.md # Especificação final
12
- ├── tasks.md # Tasks completadas
13
- ├── contracts.cs # Contracts finais
14
- ├── decisions.md # ADRs
15
- └── recap.md # Resumo e métricas
16
- ```
17
-
18
- ## Por que arquivar?
19
-
20
- 1. Manter histórico de decisões
21
- 2. Referência para features similares
22
- 3. Métricas de produtividade
23
- 4. Lições aprendidas
24
-
25
- *Gerado pelo MORPH Framework*