@polymorphism-tech/morph-spec 4.3.7 → 4.6.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 (394) hide show
  1. package/.morph/.morphversion +3 -3
  2. package/.morph/analytics/threads-log.jsonl +6 -9
  3. package/.morph/config/config.json +2 -3
  4. package/.morph/framework/standards/STANDARDS.json +812 -0
  5. package/.morph/{standards → framework/standards}/ai-agents/team-orchestration.md +3 -3
  6. package/.morph/{standards → framework/standards}/frontend/nextjs/nextjs-patterns.md +17 -0
  7. package/.morph/framework/standards/integration/mcp/mcp-tools.md +384 -0
  8. package/.morph/{templates → framework/templates}/README.md +17 -17
  9. package/.morph/{templates → framework/templates}/REGISTRY.json +48 -233
  10. package/.morph/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
  11. package/.morph/{templates → framework/templates}/context/CONTEXT-FEATURE.md +1 -1
  12. package/.morph/{templates → framework/templates}/context/CONTEXT.md +3 -3
  13. package/.morph/framework/templates/docs/clarifications.md +253 -0
  14. package/.morph/framework/templates/docs/onboarding.md +123 -0
  15. package/.morph/framework/templates/docs/schema-analysis.md +119 -0
  16. package/.morph/{templates → framework/templates}/docs/spec.md +149 -149
  17. package/.morph/framework/templates/docs/ui-components.md +124 -0
  18. package/.morph/framework/templates/docs/ui-design-system.md +76 -0
  19. package/.morph/framework/templates/docs/ui-flows.md +167 -0
  20. package/.morph/framework/templates/docs/ui-mockups.md +98 -0
  21. package/.morph/framework/templates/docs/user-stories.md +34 -0
  22. package/.morph/{templates → framework/templates}/examples/spec-examples.md +1 -1
  23. package/.morph/{templates → framework/templates}/infrastructure/github/README.md +11 -11
  24. package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
  25. package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  26. package/.morph/{templates → framework/templates}/meta-prompts/validators/pre-commit-validator.md +1 -1
  27. package/.morph/logs/tool-failures.log +7 -0
  28. package/.morph/memory/pre-compact-2026-02-23T15-43-03-521Z.json +16 -0
  29. package/.morph/state.json +1 -1
  30. package/CLAUDE.md +77 -155
  31. package/README.md +20 -18
  32. package/bin/detect-agents.js +1 -1
  33. package/bin/morph-spec.js +116 -266
  34. package/bin/task-manager.cjs +2 -2
  35. package/bin/validate.js +1 -1
  36. package/claude-plugin.json +14 -0
  37. package/docs/claude-alignment-report.md +137 -0
  38. package/docs/plans/2026-02-22-claude-docs-morph-alignment-analysis.md +512 -0
  39. package/docs/plans/2026-02-22-claude-settings.md +515 -0
  40. package/docs/plans/2026-02-22-morph-cc-alignment-impl.md +728 -0
  41. package/docs/plans/2026-02-22-morph-spec-next.md +478 -0
  42. package/docs/plans/2026-02-22-native-alignment-design.md +199 -0
  43. package/docs/plans/2026-02-22-native-alignment-impl.md +925 -0
  44. package/docs/plans/2026-02-22-native-enrichment-design.md +244 -0
  45. package/docs/plans/2026-02-22-native-enrichment.md +735 -0
  46. package/framework/CLAUDE.md +77 -0
  47. package/framework/{skills/level-2-domains → agents}/ai-agents/ai-system-architect.md +7 -3
  48. package/framework/{skills/level-2-domains → agents}/architecture/po-pm-advisor.md +7 -1
  49. package/framework/{skills/level-2-domains → agents}/architecture/prompt-engineer.md +7 -1
  50. package/framework/{skills/level-2-domains → agents}/architecture/seo-growth-hacker.md +7 -1
  51. package/framework/{skills/level-2-domains → agents}/architecture/standards-architect.md +10 -6
  52. package/framework/agents/backend/api-designer.md +103 -0
  53. package/framework/{skills/level-2-domains → agents}/backend/dotnet-senior.md +7 -1
  54. package/framework/agents/backend/ef-modeler.md +119 -0
  55. package/framework/{skills/level-2-domains → agents}/backend/hangfire-orchestrator.md +8 -4
  56. package/framework/{skills/level-2-domains → agents}/backend/ms-agent-expert.md +7 -3
  57. package/framework/{skills/level-2-domains → agents}/frontend/blazor-builder.md +7 -3
  58. package/framework/{skills/level-2-domains → agents}/frontend/nextjs-expert.md +7 -3
  59. package/framework/{skills/level-2-domains → agents}/frontend/ui-ux-designer.md +8 -2
  60. package/framework/{skills/level-2-domains → agents}/infrastructure/azure-architect.md +7 -1
  61. package/framework/{skills/level-2-domains → agents}/infrastructure/azure-deploy-specialist.md +7 -1
  62. package/framework/{skills/level-2-domains → agents}/infrastructure/bicep-architect.md +7 -3
  63. package/framework/{skills/level-2-domains → agents}/infrastructure/container-specialist.md +7 -3
  64. package/framework/{skills/level-2-domains → agents}/infrastructure/devops-engineer.md +7 -3
  65. package/framework/{skills/level-2-domains → agents}/integrations/asaas-financial.md +7 -3
  66. package/framework/{skills/level-2-domains → agents}/integrations/azure-identity.md +7 -3
  67. package/framework/{skills/level-2-domains → agents}/integrations/clerk-auth.md +7 -3
  68. package/framework/{skills/level-2-domains/integrations/hangfire-orchestrator.md → agents/integrations/hangfire-integration.md} +7 -1
  69. package/framework/{skills/level-2-domains → agents}/integrations/resend-email.md +7 -3
  70. package/framework/{skills/level-2-domains → agents}/quality/code-analyzer.md +9 -5
  71. package/framework/{skills/level-2-domains → agents}/quality/testing-specialist.md +7 -3
  72. package/framework/commands/morph-apply.md +9 -9
  73. package/framework/commands/morph-archive.md +8 -8
  74. package/framework/commands/morph-infra.md +1 -1
  75. package/framework/commands/morph-proposal.md +9 -9
  76. package/framework/commands/morph-status.md +3 -3
  77. package/framework/commands/morph-troubleshoot.md +1 -1
  78. package/framework/hooks/README.md +201 -282
  79. package/framework/hooks/claude-code/notification/approval-reminder.js +52 -0
  80. package/framework/hooks/claude-code/post-tool-use/dispatch.js +83 -0
  81. package/framework/hooks/claude-code/post-tool-use/handle-tool-failure.js +42 -0
  82. package/framework/hooks/claude-code/pre-compact/save-morph-context.js +61 -0
  83. package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +71 -0
  84. package/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +58 -0
  85. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +64 -0
  86. package/framework/hooks/claude-code/session-start/inject-morph-context.js +94 -0
  87. package/framework/hooks/claude-code/statusline.py +538 -0
  88. package/framework/hooks/claude-code/statusline.sh +7 -0
  89. package/framework/hooks/claude-code/stop/validate-completion.js +88 -0
  90. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +91 -0
  91. package/framework/hooks/shared/hook-response.js +45 -0
  92. package/framework/hooks/shared/phase-utils.js +129 -0
  93. package/framework/hooks/shared/state-reader.js +138 -0
  94. package/framework/hooks/shared/stdin-reader.js +26 -0
  95. package/framework/phases.json +145 -0
  96. package/framework/rules/csharp-standards.md +10 -0
  97. package/framework/rules/frontend-standards.md +14 -0
  98. package/framework/rules/infrastructure-standards.md +13 -0
  99. package/framework/rules/morph-workflow.md +86 -0
  100. package/framework/rules/testing-standards.md +11 -0
  101. package/framework/skills/README.md +66 -0
  102. package/framework/skills/level-0-meta/brainstorming/SKILL.md +135 -0
  103. package/framework/skills/level-0-meta/brainstorming/references/proposal-example.md +138 -0
  104. package/framework/skills/level-0-meta/{code-review.md → code-review/SKILL.md} +13 -4
  105. package/framework/skills/level-0-meta/code-review/references/review-example.md +164 -0
  106. package/framework/skills/level-0-meta/code-review/scripts/scan-csharp.mjs +121 -0
  107. package/framework/skills/level-0-meta/mcp-registry.json +207 -0
  108. package/framework/skills/level-0-meta/{morph-checklist.md → morph-checklist/SKILL.md} +8 -3
  109. package/framework/skills/{level-1-workflows/morph-replicate.md → level-0-meta/morph-replicate/SKILL.md} +13 -6
  110. package/framework/skills/level-0-meta/{simulation-checklist.md → simulation-checklist/SKILL.md} +9 -4
  111. package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +334 -0
  112. package/framework/skills/level-0-meta/verification-before-completion/SKILL.md +147 -0
  113. package/framework/skills/level-0-meta/verification-before-completion/scripts/check-phase-outputs.mjs +110 -0
  114. package/framework/skills/level-1-workflows/{phase-clarify.md → phase-clarify/SKILL.md} +65 -4
  115. package/framework/skills/level-1-workflows/phase-clarify/references/clarifications-example.md +117 -0
  116. package/framework/skills/level-1-workflows/phase-codebase-analysis/SKILL.md +181 -0
  117. package/framework/skills/level-1-workflows/phase-design/SKILL.md +303 -0
  118. package/framework/skills/level-1-workflows/phase-design/references/spec-example.md +253 -0
  119. package/framework/skills/level-1-workflows/phase-implement/SKILL.md +254 -0
  120. package/framework/skills/level-1-workflows/phase-implement/references/recap-example.md +132 -0
  121. package/framework/skills/level-1-workflows/phase-setup/SKILL.md +171 -0
  122. package/framework/skills/level-1-workflows/{phase-tasks.md → phase-tasks/SKILL.md} +89 -7
  123. package/framework/skills/level-1-workflows/phase-tasks/references/tasks-example.md +231 -0
  124. package/framework/skills/level-1-workflows/phase-tasks/scripts/validate-tasks.mjs +112 -0
  125. package/framework/skills/level-1-workflows/phase-uiux/SKILL.md +246 -0
  126. package/framework/standards/STANDARDS.json +812 -0
  127. package/framework/standards/ai-agents/team-orchestration.md +3 -3
  128. package/framework/standards/frontend/nextjs/nextjs-patterns.md +17 -0
  129. package/framework/standards/integration/mcp/mcp-tools.md +384 -0
  130. package/framework/templates/README.md +17 -17
  131. package/framework/templates/REGISTRY.json +48 -233
  132. package/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
  133. package/framework/templates/context/CONTEXT-FEATURE.md +1 -1
  134. package/framework/templates/context/CONTEXT.md +3 -3
  135. package/framework/templates/docs/clarifications.md +253 -0
  136. package/framework/templates/docs/onboarding.md +123 -0
  137. package/framework/templates/docs/schema-analysis.md +119 -0
  138. package/framework/templates/docs/spec.md +149 -149
  139. package/framework/templates/docs/ui-components.md +124 -0
  140. package/framework/templates/docs/ui-design-system.md +76 -0
  141. package/framework/templates/docs/ui-flows.md +167 -0
  142. package/framework/templates/docs/ui-mockups.md +98 -0
  143. package/framework/templates/docs/user-stories.md +34 -0
  144. package/framework/templates/examples/spec-examples.md +1 -1
  145. package/framework/templates/infrastructure/github/README.md +11 -11
  146. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
  147. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  148. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +1 -1
  149. package/framework/workflows/configs/express.json +45 -0
  150. package/framework/workflows/configs/spec-only.json +43 -0
  151. package/framework/workflows/docs/enforcement-pipeline.md +8 -8
  152. package/framework/workflows/docs/full-morph.md +3 -3
  153. package/package.json +3 -1
  154. package/scripts/generate-refs.js +336 -0
  155. package/scripts/generate-standards-registry.js +44 -0
  156. package/scripts/validate-real.mjs +255 -0
  157. package/src/commands/feature/create-story.js +362 -361
  158. package/src/commands/feature/shard-spec.js +225 -224
  159. package/src/commands/feature/sprint-status.js +1 -1
  160. package/src/commands/generation/generate-onboarding.js +169 -0
  161. package/src/commands/generation/generate.js +2 -2
  162. package/src/commands/mcp/mcp-setup.js +315 -0
  163. package/src/commands/project/changes.js +66 -0
  164. package/src/commands/project/checkpoint.js +209 -0
  165. package/src/commands/project/cost.js +179 -0
  166. package/src/commands/project/diff.js +278 -0
  167. package/src/commands/project/doctor.js +55 -7
  168. package/src/commands/project/init.js +318 -136
  169. package/src/commands/project/revert.js +173 -0
  170. package/src/commands/project/standards.js +80 -0
  171. package/src/commands/project/status.js +376 -0
  172. package/src/commands/project/update-agents.js +23 -0
  173. package/src/commands/project/update.js +60 -88
  174. package/src/commands/state/advance-phase.js +4 -3
  175. package/src/commands/state/state.js +10 -3
  176. package/src/commands/state/validate-phase.js +19 -2
  177. package/src/commands/templates/template-customize.js +4 -4
  178. package/src/commands/templates/template-render.js +1 -1
  179. package/src/commands/templates/template-show.js +1 -1
  180. package/src/commands/validation/validate-feature.js +359 -0
  181. package/src/core/orchestrator.js +3 -38
  182. package/src/core/paths/output-schema.js +135 -0
  183. package/src/core/state/state-manager.js +831 -592
  184. package/src/core/templates/template-registry.js +2 -2
  185. package/src/core/workflows/workflow-detector.js +17 -1
  186. package/src/lib/agents/micro-agent-factory.js +1 -1
  187. package/src/lib/context/context-bundler.js +2 -1
  188. package/src/lib/detectors/claude-config-detector.js +390 -0
  189. package/src/lib/detectors/conversation-analyzer.js +4 -4
  190. package/src/lib/detectors/design-system-detector.js +6 -5
  191. package/src/lib/detectors/standards-generator.js +2 -2
  192. package/src/lib/generators/context-generator.js +539 -538
  193. package/src/lib/generators/recap-generator.js +1 -1
  194. package/src/lib/generators/settings-generator.js +210 -0
  195. package/src/lib/hooks/hook-executor.js +1 -1
  196. package/src/lib/installers/mcp-installer.js +299 -0
  197. package/src/lib/learning/learning-system.js +3 -3
  198. package/src/lib/orchestration/team-orchestrator.js +1 -1
  199. package/src/lib/standards/standards-context-injector.js +7 -7
  200. package/src/lib/threads/thread-coordinator.js +1 -1
  201. package/src/lib/troubleshooting/troubleshoot-grep.js +1 -1
  202. package/src/lib/validators/contracts/contract-compliance-validator.js +274 -273
  203. package/src/lib/validators/design-system/design-system-validator.js +1 -1
  204. package/src/lib/validators/spec-validator.js +258 -258
  205. package/src/lib/validators/validation-runner.js +270 -269
  206. package/src/utils/agents-installer.js +206 -0
  207. package/src/utils/claude-settings-manager.js +258 -0
  208. package/src/utils/file-copier.js +1 -1
  209. package/src/utils/hooks-installer.js +354 -28
  210. package/src/utils/skills-installer.js +118 -0
  211. package/.morph/project/context/README.md +0 -17
  212. package/.morph/project/context/detection-log.md +0 -16
  213. package/.morph/project/standards/inferred.md +0 -59
  214. package/framework/hooks/agent-stop/validate-and-continue.js +0 -96
  215. package/framework/hooks/agent-stop/validate-checkpoints.js +0 -101
  216. package/framework/hooks/agent-stop/validate-tests.js +0 -109
  217. package/framework/hooks/agent-teams/dispatch.js +0 -67
  218. package/framework/hooks/agent-teams/phase-advanced.js +0 -80
  219. package/framework/hooks/agent-teams/task-completed.js +0 -76
  220. package/framework/hooks/agent-teams/teammate-idle.js +0 -70
  221. package/framework/skills/level-1-workflows/phase-design.md +0 -213
  222. package/framework/skills/level-1-workflows/phase-setup.md +0 -106
  223. package/framework/skills/level-1-workflows/phase-uiux.md +0 -169
  224. package/framework/skills/level-2-domains/backend/api-designer.md +0 -59
  225. package/framework/skills/level-2-domains/backend/ef-modeler.md +0 -58
  226. package/framework/skills/level-3-technologies/README.md +0 -7
  227. package/framework/skills/level-4-patterns/README.md +0 -7
  228. package/src/commands/agents/agents-fuse.js +0 -97
  229. package/src/commands/agents/micro-agent.js +0 -112
  230. package/src/commands/agents/spawn-team.js +0 -237
  231. package/src/commands/agents/squad-template.js +0 -146
  232. package/src/commands/analytics/analytics.js +0 -176
  233. package/src/commands/context/context-prime.js +0 -63
  234. package/src/commands/context/core-four.js +0 -54
  235. package/src/commands/generation/generate-context.js +0 -40
  236. package/src/commands/project/detect-agents.js +0 -207
  237. package/src/commands/project/detect-workflow.js +0 -174
  238. package/src/commands/threads/thread-template.js +0 -103
  239. package/src/commands/threads/threads.js +0 -261
  240. package/src/commands/utils/session-summary.js +0 -291
  241. package/src/llm/analyzer.js +0 -215
  242. package/src/llm/few-shot-examples.js +0 -216
  243. package/src/llm/project-config-schema.json +0 -188
  244. package/src/llm/prompt-builder.js +0 -96
  245. /package/.morph/{config → framework}/agents.json +0 -0
  246. /package/.morph/{standards → framework/standards}/ai-agents/blazor-ui.md +0 -0
  247. /package/.morph/{standards → framework/standards}/ai-agents/production.md +0 -0
  248. /package/.morph/{standards → framework/standards}/ai-agents/setup.md +0 -0
  249. /package/.morph/{standards → framework/standards}/ai-agents/workflows.md +0 -0
  250. /package/.morph/{standards → framework/standards}/architecture/ddd/aggregates.md +0 -0
  251. /package/.morph/{standards → framework/standards}/architecture/ddd/entities.md +0 -0
  252. /package/.morph/{standards → framework/standards}/architecture/ddd/value-objects.md +0 -0
  253. /package/.morph/{standards → framework/standards}/backend/api/minimal-api.md +0 -0
  254. /package/.morph/{standards → framework/standards}/backend/api/rest.md +0 -0
  255. /package/.morph/{standards → framework/standards}/backend/api/validation.md +0 -0
  256. /package/.morph/{standards → framework/standards}/backend/authentication/passkeys.md +0 -0
  257. /package/.morph/{standards → framework/standards}/backend/database/ef-core.md +0 -0
  258. /package/.morph/{standards → framework/standards}/backend/database/migrations.md +0 -0
  259. /package/.morph/{standards → framework/standards}/backend/database/postgresql/database.md +0 -0
  260. /package/.morph/{standards → framework/standards}/backend/database/repository-patterns.md +0 -0
  261. /package/.morph/{standards → framework/standards}/backend/database/vector-search-rag.md +0 -0
  262. /package/.morph/{standards → framework/standards}/backend/dotnet/async.md +0 -0
  263. /package/.morph/{standards → framework/standards}/backend/dotnet/core.md +0 -0
  264. /package/.morph/{standards → framework/standards}/backend/dotnet/di.md +0 -0
  265. /package/.morph/{standards → framework/standards}/backend/dotnet/program-cs-checklist.md +0 -0
  266. /package/.morph/{standards → framework/standards}/backend/integrations/asaas/asaas-api.md +0 -0
  267. /package/.morph/{standards → framework/standards}/backend/integrations/clerk/clerk-auth.md +0 -0
  268. /package/.morph/{standards → framework/standards}/backend/integrations/hangfire/hangfire-jobs.md +0 -0
  269. /package/.morph/{standards → framework/standards}/backend/integrations/resend/resend-email.md +0 -0
  270. /package/.morph/{standards → framework/standards}/context/analytics.md +0 -0
  271. /package/.morph/{standards → framework/standards}/context/bundles.md +0 -0
  272. /package/.morph/{standards → framework/standards}/context/priming.md +0 -0
  273. /package/.morph/{standards → framework/standards}/core/architecture.md +0 -0
  274. /package/.morph/{standards → framework/standards}/core/coding.md +0 -0
  275. /package/.morph/{standards → framework/standards}/core/git-branching-strategy.md +0 -0
  276. /package/.morph/{standards → framework/standards}/core/git.md +0 -0
  277. /package/.morph/{standards → framework/standards}/core/testing.md +0 -0
  278. /package/.morph/{standards → framework/standards}/data/nosql/blob-storage.md +0 -0
  279. /package/.morph/{standards → framework/standards}/data/nosql/cache/redis.md +0 -0
  280. /package/.morph/{standards → framework/standards}/data/nosql/cosmos-db.md +0 -0
  281. /package/.morph/{standards → framework/standards}/data/vector-search/azure-ai-search.md +0 -0
  282. /package/.morph/{standards → framework/standards}/data/vector-search/rag-chunking.md +0 -0
  283. /package/.morph/{standards → framework/standards}/frontend/blazor/design-checklist.md +0 -0
  284. /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui-setup.md +0 -0
  285. /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui.md +0 -0
  286. /package/.morph/{standards → framework/standards}/frontend/blazor/html-conversion.md +0 -0
  287. /package/.morph/{standards → framework/standards}/frontend/blazor/lifecycle.md +0 -0
  288. /package/.morph/{standards → framework/standards}/frontend/blazor/pitfalls.md +0 -0
  289. /package/.morph/{standards → framework/standards}/frontend/blazor/state.md +0 -0
  290. /package/.morph/{standards → framework/standards}/frontend/design-system/animations.md +0 -0
  291. /package/.morph/{standards → framework/standards}/frontend/design-system/naming.md +0 -0
  292. /package/.morph/{standards → framework/standards}/infrastructure/azure/azure.md +0 -0
  293. /package/.morph/{standards → framework/standards}/infrastructure/azure/bicep/bicep-patterns.md +0 -0
  294. /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/azure-devops-setup.md +0 -0
  295. /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/local-development.md +0 -0
  296. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/functions.md +0 -0
  297. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/service-bus.md +0 -0
  298. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/storage.md +0 -0
  299. /package/.morph/{standards → framework/standards}/infrastructure/docker/easypanel-deploy.md +0 -0
  300. /package/.morph/{standards → framework/standards}/infrastructure/supabase/mcp-setup.md +0 -0
  301. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-auth.md +0 -0
  302. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-pgvector.md +0 -0
  303. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-rls.md +0 -0
  304. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-storage.md +0 -0
  305. /package/.morph/{standards → framework/standards}/integration/api/graphql.md +0 -0
  306. /package/.morph/{standards → framework/standards}/integration/api/grpc.md +0 -0
  307. /package/.morph/{standards → framework/standards}/integration/api/rest-design.md +0 -0
  308. /package/.morph/{standards → framework/standards}/integration/event-driven/cqrs.md +0 -0
  309. /package/.morph/{standards → framework/standards}/integration/event-driven/event-sourcing.md +0 -0
  310. /package/.morph/{standards → framework/standards}/integration/event-driven/service-bus.md +0 -0
  311. /package/.morph/{standards → framework/standards}/observability/logging.md +0 -0
  312. /package/.morph/{standards → framework/standards}/observability/metrics.md +0 -0
  313. /package/.morph/{standards → framework/standards}/observability/monitoring.md +0 -0
  314. /package/.morph/{standards → framework/standards}/observability/tracing.md +0 -0
  315. /package/.morph/{standards → framework/standards}/workflows/parallel-execution.md +0 -0
  316. /package/.morph/{standards → framework/standards}/workflows/thread-management.md +0 -0
  317. /package/.morph/{templates → framework/templates}/.idea/morph-templates.xml +0 -0
  318. /package/.morph/{templates → framework/templates}/.vscode/morph-templates.code-snippets +0 -0
  319. /package/.morph/{templates → framework/templates}/IDE-SNIPPETS.md +0 -0
  320. /package/.morph/{templates → framework/templates}/code/dotnet/backend/repository.cs +0 -0
  321. /package/.morph/{templates → framework/templates}/code/dotnet/backend/service.cs +0 -0
  322. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Commands.cs +0 -0
  323. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Entities.cs +0 -0
  324. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Queries.cs +0 -0
  325. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/README.md +0 -0
  326. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/api-contracts.cs +0 -0
  327. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/contracts.cs +0 -0
  328. /package/.morph/{templates → framework/templates}/code/dotnet/database/migration.cs +0 -0
  329. /package/.morph/{templates → framework/templates}/code/dotnet/frontend/component.razor +0 -0
  330. /package/.morph/{templates → framework/templates}/code/dotnet/jobs/agent.cs +0 -0
  331. /package/.morph/{templates → framework/templates}/code/dotnet/jobs/job.cs +0 -0
  332. /package/.morph/{templates → framework/templates}/code/dotnet/test.cs +0 -0
  333. /package/.morph/{templates → framework/templates}/code/sql/rls-policy.sql +0 -0
  334. /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.sql +0 -0
  335. /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.template.sql +0 -0
  336. /package/.morph/{templates → framework/templates}/code/typescript/contracts.ts +0 -0
  337. /package/.morph/{templates → framework/templates}/docs/proposal.md +0 -0
  338. /package/.morph/{templates → framework/templates}/examples/design-system-examples.md +0 -0
  339. /package/.morph/{templates → framework/templates}/feature/decisions.md +0 -0
  340. /package/.morph/{templates → framework/templates}/feature/recap.md +0 -0
  341. /package/.morph/{templates → framework/templates}/feature/tasks.md +0 -0
  342. /package/.morph/{templates → framework/templates}/infrastructure/azure/Dockerfile.example +0 -0
  343. /package/.morph/{templates → framework/templates}/infrastructure/azure/README.md +0 -0
  344. /package/.morph/{templates → framework/templates}/infrastructure/azure/app-insights.bicep +0 -0
  345. /package/.morph/{templates → framework/templates}/infrastructure/azure/app-service.bicep +0 -0
  346. /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app-env.bicep +0 -0
  347. /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app.bicep +0 -0
  348. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy-checklist.md +0 -0
  349. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.ps1 +0 -0
  350. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.sh +0 -0
  351. /package/.morph/{templates → framework/templates}/infrastructure/azure/key-vault.bicep +0 -0
  352. /package/.morph/{templates → framework/templates}/infrastructure/azure/main.bicep +0 -0
  353. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.dev.json +0 -0
  354. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.prod.json +0 -0
  355. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.staging.json +0 -0
  356. /package/.morph/{templates → framework/templates}/infrastructure/azure/sql-database.bicep +0 -0
  357. /package/.morph/{templates → framework/templates}/infrastructure/azure/storage.bicep +0 -0
  358. /package/.morph/{templates → framework/templates}/infrastructure/docker/Dockerfile.template +0 -0
  359. /package/.morph/{templates → framework/templates}/infrastructure/docker/docker-compose.template.yml +0 -0
  360. /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-api.dockerfile +0 -0
  361. /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-web.dockerfile +0 -0
  362. /package/.morph/{templates → framework/templates}/infrastructure/docker/easypanel.template.json +0 -0
  363. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -0
  364. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -0
  365. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/health-check/action.yml.hbs +0 -0
  366. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -0
  367. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -0
  368. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -0
  369. /package/.morph/{templates → framework/templates}/integrations/asaas-client.cs +0 -0
  370. /package/.morph/{templates → framework/templates}/integrations/asaas-webhook.cs +0 -0
  371. /package/.morph/{templates → framework/templates}/integrations/azure-identity-config.cs +0 -0
  372. /package/.morph/{templates → framework/templates}/integrations/clerk-config.cs +0 -0
  373. /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-agent.md +0 -0
  374. /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-aggregator.md +0 -0
  375. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-retry.md +0 -0
  376. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-validation.md +0 -0
  377. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-wrapper.md +0 -0
  378. /package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-coordinator.md +0 -0
  379. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/backend-squad.md +0 -0
  380. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/frontend-squad.md +0 -0
  381. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/squad-leader.md +0 -0
  382. /package/.morph/{templates → framework/templates}/meta-prompts/validators/checkpoint-validator.md +0 -0
  383. /package/.morph/{templates → framework/templates}/saas/subscription.cs +0 -0
  384. /package/.morph/{templates → framework/templates}/saas/tenant.cs +0 -0
  385. /package/.morph/{templates → framework/templates}/state.template.json +0 -0
  386. /package/.morph/{templates → framework/templates}/ui/FluentDesignTheme.cs +0 -0
  387. /package/.morph/{templates → framework/templates}/ui/MudTheme.cs +0 -0
  388. /package/.morph/{templates → framework/templates}/ui/design-system.css +0 -0
  389. /package/framework/{skills/level-2-domains → agents}/README.md +0 -0
  390. /package/framework/hooks/{commit-msg → git/commit-msg}/conventional-commits.sh +0 -0
  391. /package/framework/hooks/{pre-commit → git/pre-commit}/agents.sh +0 -0
  392. /package/framework/hooks/{pre-commit → git/pre-commit}/orchestrator.sh +0 -0
  393. /package/framework/hooks/{pre-commit → git/pre-commit}/specs.sh +0 -0
  394. /package/framework/hooks/{pre-push → git/pre-push}/run-tests.sh +0 -0
@@ -0,0 +1,86 @@
1
+ # MORPH-SPEC Workflow Rules
2
+
3
+ > Always-active rules for all MORPH-SPEC managed projects.
4
+
5
+ ---
6
+
7
+ ## Spec-First Mandate
8
+
9
+ **NEVER skip to code without a specification.** Every feature must progress through phases:
10
+
11
+ 1. **Proposal** — User story + acceptance criteria (`0-proposal/proposal.md`)
12
+ 2. **Design** — Technical spec + C# contracts + decisions (`1-design/`)
13
+ 3. **Tasks** — Atomic task list (`3-tasks/tasks.md`)
14
+ 4. **Implement** — Code + recap (`4-implement/recap.md`)
15
+
16
+ UI-heavy features also include **UI/UX** phase (`2-ui/`) between Design and Tasks.
17
+
18
+ ---
19
+
20
+ ## Phase Commands
21
+
22
+ | Command | Purpose |
23
+ |---------|---------|
24
+ | `/morph-proposal {feature}` | Full spec pipeline (phases 1–4, pauses for approval) |
25
+ | `/morph-apply {feature}` | Implement feature (phase 5) |
26
+ | `/morph-status` | Feature dashboard |
27
+
28
+ ---
29
+
30
+ ## Output Paths
31
+
32
+ All outputs go in `.morph/features/{feature}/`:
33
+
34
+ | Phase | Path |
35
+ |-------|------|
36
+ | Proposal | `0-proposal/proposal.md` |
37
+ | Spec | `1-design/spec.md` |
38
+ | Contracts | `1-design/contracts.cs` |
39
+ | Decisions | `1-design/decisions.md` |
40
+ | UI Design | `2-ui/design-system.md`, `mockups.md`, `components.md`, `flows.md` |
41
+ | Tasks | `3-tasks/tasks.md` |
42
+ | Recap | `4-implement/recap.md` |
43
+
44
+ ---
45
+
46
+ ## Checkpoints
47
+
48
+ Run a checkpoint every 3 completed tasks:
49
+ - Validate architecture compliance
50
+ - Check package versions
51
+ - Scan for security issues
52
+ - Verify design system adherence (UI features)
53
+
54
+ ---
55
+
56
+ ## Approval Gates
57
+
58
+ **Design Gate:** Before moving from Design → Tasks, spec must be approved.
59
+ **Implementation Gate:** Before starting implementation, task list must be approved.
60
+
61
+ Check approval status: `morph-spec state show {feature}`
62
+
63
+ ---
64
+
65
+ ## Protected Files
66
+
67
+ **NEVER directly edit:**
68
+ - `.morph/state.json` — Managed by CLI only
69
+ - `.morph/framework/**` — Read-only framework content
70
+
71
+ ---
72
+
73
+ ## Test File Policy
74
+
75
+ When a test fails, always follow this order:
76
+
77
+ 1. **Analyze first** — determine if the IMPLEMENTATION is wrong or the TEST SPEC is wrong
78
+ 2. **Fix implementation first** — the test is the spec; trust it by default
79
+ 3. **Only modify a test file if the test expectation itself is incorrect** — wrong expected value, wrong behavior modeled
80
+ 4. **Before modifying any test file, explain WHY the test spec is wrong** — what the correct behavior is and why the test doesn't model it
81
+
82
+ Do not modify test files to make a failing test pass when the implementation is the actual problem.
83
+
84
+ ---
85
+
86
+ *MORPH-SPEC by Polymorphism Tech*
@@ -0,0 +1,11 @@
1
+ ---
2
+ paths:
3
+ - "tests/**"
4
+ - "**/*.test.*"
5
+ - "**/*.spec.*"
6
+ - "**/*Tests.cs"
7
+ ---
8
+
9
+ # Testing Standards
10
+
11
+ @.morph/framework/standards/core/testing.md
@@ -0,0 +1,66 @@
1
+ # MORPH-SPEC Skills
2
+
3
+ Skills installed to `.claude/skills/` during `morph-spec init` (or `morph-spec update`).
4
+
5
+ Each skill is a directory: `{name}/SKILL.md` + optional `scripts/`, `references/`, `assets/`.
6
+
7
+ ---
8
+
9
+ ## level-0-meta — Utilities & Meta-Skills
10
+
11
+ | Skill | Description |
12
+ |-------|-------------|
13
+ | `tool-usage-guide` | Tool selection flowchart — which tool for which action |
14
+ | `morph-checklist` | Pre-session checklist for MORPH-SPEC projects |
15
+ | `simulation-checklist` | Checklist for AI simulation / prompt testing |
16
+ | `brainstorming` | Collaborative ideation → spec via dialogue |
17
+ | `verification-before-completion` | Gate check before marking any work done |
18
+ | `code-review` | .NET/C# review checklist (naming, arch, async, DI, DTOs) |
19
+ | `morph-replicate` | Convert HTML prototypes to Blazor components |
20
+
21
+ ### level-0-meta extras
22
+
23
+ | Skill | File | Purpose |
24
+ |-------|------|---------|
25
+ | `brainstorming` | `references/proposal-example.md` | Filled-in proposal.md example |
26
+ | `verification-before-completion` | `scripts/check-phase-outputs.mjs` | Validate required phase outputs exist |
27
+ | `code-review` | `references/review-example.md` | Filled-in review with finding format |
28
+ | `code-review` | `scripts/scan-csharp.mjs` | Scan .cs files for CRITICAL/HIGH violations |
29
+
30
+ ---
31
+
32
+ ## level-1-workflows — Phase Workflow Skills
33
+
34
+ Invoked internally by `/morph-proposal` and `/morph-apply`. Not user-invocable.
35
+
36
+ | Skill | Phase | Description |
37
+ |-------|-------|-------------|
38
+ | `phase-codebase-analysis` | 0 | Analyse existing codebase before design |
39
+ | `phase-setup` | 1 | Project scaffolding and initial setup |
40
+ | `phase-design` | 2 | Technical spec + contracts + decisions |
41
+ | `phase-uiux` | 3 | UI/UX design system + mockups + components |
42
+ | `phase-clarify` | 4 | Clarification questions → edge cases → spec update |
43
+ | `phase-tasks` | 5 | Break spec into ordered task list (tasks.md) |
44
+ | `phase-implement` | 6 | Implement tasks with TDD + checkpoints + recap |
45
+
46
+ ### level-1-workflows extras
47
+
48
+ | Skill | File | Purpose |
49
+ |-------|------|---------|
50
+ | `phase-design` | `references/spec-example.md` | Filled-in spec.md example |
51
+ | `phase-clarify` | `references/clarifications-example.md` | Filled-in clarifications Q&A |
52
+ | `phase-tasks` | `references/tasks-example.md` | Filled-in tasks.md with T### format |
53
+ | `phase-tasks` | `scripts/validate-tasks.mjs` | Validate tasks.md structure and IDs |
54
+ | `phase-implement` | `references/recap-example.md` | Filled-in recap.md example |
55
+
56
+ ---
57
+
58
+ ## Domain Agents
59
+
60
+ Domain specialist agents (`framework/agents/`) are installed separately as `.claude/agents/morph-domain-{name}.md` — they are subagents, not skills.
61
+
62
+ See `framework/agents/README.md` for the full list.
63
+
64
+ ---
65
+
66
+ *MORPH-SPEC by Polymorphism Tech*
@@ -0,0 +1,135 @@
1
+ ---
2
+ name: brainstorming
3
+ description: Morph-spec-aware brainstorming that loads project context, explores multiple design approaches, asks clarifying questions, and produces proposal.md or decisions.md. Use before designing a feature, when facing architectural decisions with multiple valid approaches, or when a feature needs requirements exploration before committing to a direction.
4
+ ---
5
+
6
+ # Brainstorming — MORPH-SPEC Integrated
7
+
8
+ > Explore context, ask questions, generate multiple approaches, and produce a design document before committing to implementation.
9
+ >
10
+ > **Example:** `references/proposal-example.md` — filled-in proposal.md showing expected quality.
11
+
12
+ ## When to Use
13
+
14
+ - **Phase 0 (Proposal):** Explore the feature request before writing `proposal.md`
15
+ - **Phase 2 (Design):** Explore architectural alternatives before writing `spec.md`
16
+ - **Any phase:** When facing a decision with multiple valid approaches
17
+
18
+ ## Prerequisites
19
+
20
+ Before brainstorming, load project context:
21
+
22
+ ```bash
23
+ # Load current state
24
+ npx morph-spec state get {feature-name}
25
+
26
+ # Read project config
27
+ Read: .morph/config/config.json
28
+
29
+ # Read existing proposal (if Phase 2)
30
+ Read: .morph/features/{feature}/0-proposal/proposal.md
31
+ ```
32
+
33
+ ---
34
+
35
+ ## Workflow
36
+
37
+ ### Step 1: Explore Context
38
+
39
+ **Gather information before generating ideas:**
40
+
41
+ 1. **Read state.json** — current phase, active agents, existing outputs
42
+ 2. **Read config.json** — stack, architecture, project name
43
+ 3. **Read existing outputs** — proposal.md, spec.md (if they exist)
44
+ 4. **Scan codebase** — use Glob/Grep to understand existing patterns
45
+ 5. **Check integrations.json** — available MCPs and plugins
46
+
47
+ **Use MCP tools when available:**
48
+ - **Context7** → look up library capabilities relevant to the feature
49
+ - **Supabase** → check existing schema for data-related features
50
+ - **GitHub** → check existing issues/PRs for related work
51
+
52
+ ### Step 2: Ask Clarifying Questions
53
+
54
+ Generate **3-5 focused questions** for the user:
55
+
56
+ ```markdown
57
+ ### Q1: Scope
58
+ What is the minimum viable version of this feature?
59
+
60
+ ### Q2: Constraints
61
+ Are there performance/budget/timeline constraints?
62
+
63
+ ### Q3: Integration
64
+ Does this need to integrate with existing features?
65
+
66
+ ### Q4: Users
67
+ Who are the primary users of this feature?
68
+
69
+ ### Q5: Success Criteria
70
+ How will we know this feature is working correctly?
71
+ ```
72
+
73
+ **Wait for user responses before proceeding.**
74
+
75
+ ### Step 3: Generate 2-3 Approaches
76
+
77
+ For each approach, document:
78
+
79
+ ```markdown
80
+ ## Approach A: {Name}
81
+
82
+ **Description:** {1-2 sentences}
83
+
84
+ **Pros:**
85
+ - Pro 1
86
+ - Pro 2
87
+
88
+ **Cons:**
89
+ - Con 1
90
+ - Con 2
91
+
92
+ **Complexity:** Low / Medium / High
93
+ **Estimated Tasks:** ~N
94
+ **Key Dependencies:** {list}
95
+ ```
96
+
97
+ ### Step 4: Recommend and Document
98
+
99
+ 1. **Recommend** the best approach with reasoning
100
+ 2. **Write output** to the appropriate location:
101
+ - Phase 0 → render `docs/proposal` template → `.morph/features/{feature}/0-proposal/proposal.md`
102
+ - Phase 2 → document in `decisions.md` as an ADR
103
+
104
+ 3. **Update state:**
105
+ ```bash
106
+ npx morph-spec state mark-output {feature-name} proposal # Phase 0
107
+ npx morph-spec state mark-output {feature-name} decisions # Phase 2
108
+ ```
109
+
110
+ ---
111
+
112
+ ## Integration with Superpowers
113
+
114
+ > Available when the `superpowers` plugin is installed.
115
+
116
+ This skill replaces `superpowers:brainstorming` within morph-spec workflows. It adds:
117
+ - Automatic context loading from `.morph/` state and config
118
+ - Template rendering for outputs (proposal.md, decisions.md)
119
+ - State tracking via `morph-spec state mark-output`
120
+ - MCP integration for research (Context7, Supabase)
121
+
122
+ For brainstorming **outside** morph-spec workflows, the original `superpowers:brainstorming` skill remains available.
123
+
124
+ ---
125
+
126
+ ## Anti-patterns
127
+
128
+ - Never skip brainstorming for features with multiple valid approaches
129
+ - Never commit to an approach without documenting alternatives
130
+ - Never brainstorm without loading project context first
131
+ - Never write code before completing the brainstorming output
132
+
133
+ ---
134
+
135
+ *MORPH-SPEC by Polymorphism Tech*
@@ -0,0 +1,138 @@
1
+ # Feature Proposal: Photo Processing Pipeline
2
+
3
+ > Example of a well-structured proposal.md. This is a filled-in reference — not a template.
4
+
5
+ ## Metadata
6
+
7
+ | Field | Value |
8
+ |-------|-------|
9
+ | **Proposed** | 2025-01-15 |
10
+ | **Author** | Product Team |
11
+ | **Status** | Approved |
12
+ | **Priority** | High |
13
+ | **Stack** | blazor-azure |
14
+
15
+ ---
16
+
17
+ ## Overview
18
+
19
+ Users currently cannot upload photos for AI-based transformations because no upload infrastructure exists. This feature adds an end-to-end photo upload, processing, and delivery pipeline using Azure Blob Storage and Hangfire background jobs.
20
+
21
+ ---
22
+
23
+ ## Problem Statement
24
+
25
+ ### What is the problem?
26
+
27
+ Users cannot submit photos for AI transformation, blocking the core product value proposition. The system has no file upload capability, no background processing queue, and no way to notify users when processing completes.
28
+
29
+ ### Who is affected?
30
+
31
+ All end users who want to use the photo transformation feature — the primary user journey is completely unavailable.
32
+
33
+ ### What is the impact?
34
+
35
+ - User productivity loss: 100% of core use case unavailable
36
+ - Revenue impact: Feature is the primary paid tier differentiator
37
+ - User satisfaction: Can't demo product to prospects
38
+
39
+ ---
40
+
41
+ ## Proposed Solution
42
+
43
+ ### Overview
44
+
45
+ A multi-step pipeline: user uploads a photo via a Blazor form → the file is stored in Azure Blob Storage → a Hangfire background job is queued for AI processing → the user polls for completion → the processed photo is returned via a download link.
46
+
47
+ ### Key Features
48
+
49
+ 1. **Upload endpoint** — Validates file type/size, stores in Azure Blob
50
+ 2. **Background processing** — Hangfire job calls AI API, stores result in Blob
51
+ 3. **Status polling** — User sees real-time progress (Pending → Processing → Completed)
52
+
53
+ ### User Journey
54
+
55
+ ```
56
+ 1. User selects a photo file on the upload page
57
+ 2. System validates (max 10MB, .jpg/.png only) and shows preview
58
+ 3. User clicks "Upload" → system enqueues job, redirects to /processing/{jobId}
59
+ 4. User sees progress bar polling every 5 seconds
60
+ 5. On completion: "Download" button appears, user gets processed photo
61
+ ```
62
+
63
+ ---
64
+
65
+ ## Success Metrics
66
+
67
+ | Metric | Current | Target |
68
+ |--------|---------|--------|
69
+ | Upload success rate | N/A | >99% |
70
+ | Processing time (p95) | N/A | <120s |
71
+ | Error recovery rate | N/A | >95% (auto-retry) |
72
+
73
+ ---
74
+
75
+ ## Scope
76
+
77
+ ### In Scope
78
+
79
+ - Photo upload (Blazor form, Azure Blob Storage)
80
+ - Background processing via Hangfire
81
+ - Status polling page with progress indicator
82
+ - Download link for processed photo
83
+ - Basic error handling and retry logic
84
+
85
+ ### Out of Scope
86
+
87
+ - Batch uploads (multiple photos at once)
88
+ - Email notifications when processing completes
89
+ - Photo editing before upload (crop, resize)
90
+
91
+ ### Future Considerations
92
+
93
+ - Webhooks for external integrations
94
+ - Processing history and gallery view
95
+
96
+ ---
97
+
98
+ ## Risks & Concerns
99
+
100
+ | Risk | Likelihood | Impact | Mitigation |
101
+ |------|------------|--------|------------|
102
+ | AI API unavailable | Medium | High | Retry with exponential backoff, fallback error state |
103
+ | Large file upload timeout | Low | Medium | Chunked upload or presigned URL direct to Blob |
104
+ | Blob storage costs unexpectedly high | Low | Low | Set blob lifecycle policy (auto-delete after 30 days) |
105
+
106
+ ---
107
+
108
+ ## Estimated Effort
109
+
110
+ | Phase | Estimate |
111
+ |-------|----------|
112
+ | Design & Spec | 2h |
113
+ | Implementation | 6h |
114
+ | Testing | 2h |
115
+ | **Total** | **10h** |
116
+
117
+ ---
118
+
119
+ ## Questions & Clarifications
120
+
121
+ 1. Maximum file size: 10MB or higher for pro users?
122
+ 2. Should processed photos be kept indefinitely or expire after 30 days?
123
+ 3. Does the AI API support async webhooks or only polling?
124
+
125
+ ---
126
+
127
+ ## Next Steps
128
+
129
+ Once approved:
130
+ 1. Create detailed `spec.md` with technical design
131
+ 2. Define contracts in `contracts.cs`
132
+ 3. Record decisions in `decisions.md`
133
+ 4. Break down into `tasks.md`
134
+ 5. Begin implementation
135
+
136
+ ---
137
+
138
+ *MORPH-SPEC by Polymorphism Tech*
@@ -1,9 +1,18 @@
1
+ ---
2
+ name: code-review
3
+ description: .NET/C# code review checklist covering naming conventions, architecture layer integrity, async patterns, logging, error handling, DI lifetimes, and DTO contracts. Use after implementing .NET code, before creating PRs, or when reviewing C# code for compliance with MORPH-SPEC standards.
4
+ user-invocable: true
5
+ allowed-tools: Read, Write, Edit, Bash, Glob, Grep
6
+ ---
7
+
1
8
  # Code Review Checklist
2
9
 
3
10
  > Comprehensive checklist for .NET code review: naming, architecture, clean code, duplication, and runtime patterns.
4
- > **Ref:** `framework/standards/coding.md` for naming conventions and style.
5
- > **Ref:** `framework/standards/architecture.md` for layer rules and SOLID.
6
- > **Ref:** `framework/standards/blazor-efcore.md` for DbContext patterns and background ops.
11
+ > **Ref:** `framework/standards/core/coding.md` for naming conventions and style.
12
+ > **Ref:** `framework/standards/core/architecture.md` for layer rules and SOLID.
13
+ > **Ref:** `framework/standards/backend/database/ef-core.md` for DbContext patterns and background ops.
14
+ > **Example:** `references/review-example.md` — filled-in review showing expected finding format and severity levels.
15
+ > **Script:** `scripts/scan-csharp.mjs` — automated scan for CRITICAL/HIGH violations before manual review.
7
16
 
8
17
  ---
9
18
 
@@ -223,4 +232,4 @@ public enum OrderStatus
223
232
  ---
224
233
 
225
234
  *Consolidated from: code-review-services.md + code-review-background.md + code-review-contracts.md + architecture/clean-code/duplication analysis.*
226
- *MORPH-SPEC by Polymorphism Tech*
235
+ *MORPH-SPEC by Polymorphism Tech*
@@ -0,0 +1,164 @@
1
+ # Code Review Report — Photo Processing Pipeline
2
+
3
+ > Example of a well-structured code review output. Filled-in reference — not a template.
4
+
5
+ **Scope:** `src/Application/PhotoProcessing/` + `src/Web/Endpoints/PhotoProcessingEndpoints.cs`
6
+ **Date:** 2025-01-22
7
+ **Reviewer:** code-review skill
8
+
9
+ ---
10
+
11
+ ## Findings by Severity
12
+
13
+ | Severity | Count |
14
+ |----------|-------|
15
+ | CRITICAL | 1 |
16
+ | HIGH | 2 |
17
+ | MEDIUM | 2 |
18
+ | LOW | 1 |
19
+
20
+ ---
21
+
22
+ ### [CRITICAL] Naming: UPPER_SNAKE_CASE constant
23
+
24
+ **File:** `src/Application/PhotoProcessing/PhotoProcessingService.cs:14`
25
+
26
+ **Current code:**
27
+ ```csharp
28
+ private const int MAX_RETRY_COUNT = 3;
29
+ private const int DEFAULT_TIMEOUT_SECONDS = 30;
30
+ ```
31
+
32
+ **Suggested fix:**
33
+ ```csharp
34
+ private const int MaxRetryCount = 3;
35
+ private const int DefaultTimeoutSeconds = 30;
36
+ ```
37
+
38
+ **Why:** `ALL_CAPS` constants violate C# conventions (§ coding.md). Pascal case is the .NET standard.
39
+
40
+ ---
41
+
42
+ ### [HIGH] Async: Missing CancellationToken propagation
43
+
44
+ **File:** `src/Infrastructure/Storage/AzureBlobStorageService.cs:28`
45
+
46
+ **Current code:**
47
+ ```csharp
48
+ public async Task<string> UploadAsync(Stream content, string blobName)
49
+ {
50
+ var blobClient = _containerClient.GetBlobClient(blobName);
51
+ await blobClient.UploadAsync(content); // no CT
52
+ return blobClient.Uri.ToString();
53
+ }
54
+ ```
55
+
56
+ **Suggested fix:**
57
+ ```csharp
58
+ public async Task<string> UploadAsync(Stream content, string blobName, CancellationToken ct = default)
59
+ {
60
+ var blobClient = _containerClient.GetBlobClient(blobName);
61
+ await blobClient.UploadAsync(content, cancellationToken: ct);
62
+ return blobClient.Uri.ToString();
63
+ }
64
+ ```
65
+
66
+ **Why:** Cancellation cannot propagate into the Blob SDK call, meaning a cancelled HTTP request still holds the upload open.
67
+
68
+ ---
69
+
70
+ ### [HIGH] Logging: String interpolation in ILogger call
71
+
72
+ **File:** `src/Application/PhotoProcessing/PhotoProcessingJob.cs:52`
73
+
74
+ **Current code:**
75
+ ```csharp
76
+ _logger.LogError($"Job {jobId} failed after {retryCount} retries: {ex.Message}");
77
+ ```
78
+
79
+ **Suggested fix:**
80
+ ```csharp
81
+ _logger.LogError("Job {JobId} failed after {RetryCount} retries: {ErrorMessage}",
82
+ jobId, retryCount, ex.Message);
83
+ ```
84
+
85
+ **Why:** String interpolation allocates eagerly even if the log level is filtered. Message templates are structured and queryable in Application Insights / Seq.
86
+
87
+ ---
88
+
89
+ ### [MEDIUM] Architecture: Controller logic exceeds 50 lines
90
+
91
+ **File:** `src/Web/Endpoints/PhotoProcessingEndpoints.cs`
92
+
93
+ **Issue:** The upload endpoint inline lambda is 60+ lines — includes validation, service call, response mapping, and error handling all inline.
94
+
95
+ **Suggested fix:** Extract a `UploadPhotoRequestHandler` or move validation to a FluentValidation `IValidator<UploadPhotoCommand>`. The endpoint lambda should be < 10 lines.
96
+
97
+ **Why:** Fat endpoints are hard to test and violate the "thin API layer" rule (§ architecture.md).
98
+
99
+ ---
100
+
101
+ ### [MEDIUM] Error Handling: Generic catch without context
102
+
103
+ **File:** `src/Application/PhotoProcessing/PhotoProcessingService.cs:89`
104
+
105
+ **Current code:**
106
+ ```csharp
107
+ catch (Exception ex)
108
+ {
109
+ _logger.LogError(ex, "Upload failed");
110
+ throw;
111
+ }
112
+ ```
113
+
114
+ **Suggested fix:**
115
+ ```csharp
116
+ catch (Exception ex)
117
+ {
118
+ _logger.LogError(ex, "Upload failed for user {UserId}", userId);
119
+ throw;
120
+ }
121
+ ```
122
+
123
+ **Why:** Log entries without correlation IDs (UserId, JobId) are unqueryable in production. Always include the relevant entity ID.
124
+
125
+ ---
126
+
127
+ ### [LOW] Dead Code: Unused private method
128
+
129
+ **File:** `src/Application/PhotoProcessing/PhotoProcessingService.cs:110`
130
+
131
+ **Current code:**
132
+ ```csharp
133
+ private string BuildBlobPath(Guid jobId, string suffix)
134
+ => $"uploads/{jobId}/{suffix}";
135
+ // Called 0 times — path built inline everywhere
136
+ ```
137
+
138
+ **Suggested fix:** Either use `BuildBlobPath` consistently or delete it.
139
+
140
+ **Why:** Dead code misleads future readers and increases maintenance surface.
141
+
142
+ ---
143
+
144
+ ## Top Priorities
145
+
146
+ 1. `PhotoProcessingService.cs:14` — CRITICAL naming violation (5 min fix)
147
+ 2. `AzureBlobStorageService.cs:28` — HIGH missing CancellationToken (10 min fix)
148
+ 3. `PhotoProcessingJob.cs:52` — HIGH structured logging (5 min fix)
149
+ 4. `PhotoProcessingEndpoints.cs` — MEDIUM endpoint refactor (30 min)
150
+
151
+ ---
152
+
153
+ ## Passed Checks ✅
154
+
155
+ - Layer integrity: Domain has no Infrastructure references
156
+ - All async methods have `Async` suffix
157
+ - Private fields use `_camelCase`
158
+ - No hardcoded connection strings or secrets
159
+ - External services accessed through interfaces (`IBlobStorageService`, `IPhotoProcessingJob`)
160
+ - `ProcessingJob` entity uses private setters + domain methods
161
+
162
+ ---
163
+
164
+ *MORPH-SPEC by Polymorphism Tech*