@polymorphism-tech/morph-spec 4.12.0 → 4.14.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 (316) hide show
  1. package/CLAUDE.md +7 -7
  2. package/README.md +28 -34
  3. package/bin/morph-spec.js +41 -24
  4. package/bin/task-manager.js +962 -1341
  5. package/bin/validate.js +1 -1
  6. package/claude-plugin.json +1 -1
  7. package/docs/CHEATSHEET.md +14 -16
  8. package/docs/QUICKSTART.md +15 -15
  9. package/framework/CLAUDE.md +5 -2
  10. package/framework/agents/README.md +3 -4
  11. package/framework/agents/ai-agents/ai-system-architect.md +6 -10
  12. package/framework/agents/architecture/seo-growth-hacker.md +166 -326
  13. package/framework/agents/architecture/standards-architect.md +21 -31
  14. package/framework/agents/backend/dotnet-senior.md +160 -86
  15. package/framework/agents/backend/ef-modeler.md +2 -6
  16. package/framework/agents/backend/hangfire-orchestrator.md +8 -9
  17. package/framework/agents/backend/ms-agent-expert.md +1 -1
  18. package/framework/agents/frontend/nextjs-expert.md +198 -133
  19. package/framework/agents/frontend/ui-ux-designer.md +226 -267
  20. package/framework/agents/infrastructure/infra-architect.md +191 -27
  21. package/framework/agents/integrations/clerk-auth.md +19 -26
  22. package/framework/agents/integrations/hangfire-integration.md +1 -4
  23. package/framework/agents.json +1084 -2278
  24. package/framework/commands/morph-apply.md +4 -6
  25. package/framework/commands/morph-preflight.md +192 -269
  26. package/framework/commands/morph-proposal.md +210 -238
  27. package/framework/commands/morph-status.md +72 -92
  28. package/framework/commands/morph-troubleshoot.md +6 -13
  29. package/framework/hooks/README.md +1 -6
  30. package/framework/hooks/claude-code/post-tool-use/validator-feedback.js +4 -6
  31. package/framework/hooks/claude-code/pre-compact/save-morph-context.js +12 -7
  32. package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +2 -2
  33. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +2 -2
  34. package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +5 -10
  35. package/framework/hooks/claude-code/session-start/inject-morph-context.js +63 -30
  36. package/framework/hooks/claude-code/session-start/resume-context.js +77 -0
  37. package/framework/hooks/claude-code/statusline.py +4 -5
  38. package/framework/hooks/claude-code/stop/validate-completion.js +4 -4
  39. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +8 -8
  40. package/framework/hooks/shared/compact-restore.js +28 -5
  41. package/framework/hooks/shared/phase-utils.js +4 -8
  42. package/framework/hooks/shared/state-reader.js +34 -3
  43. package/framework/phases.json +162 -200
  44. package/framework/rules/ai-agents-standards.md +15 -0
  45. package/framework/rules/asaas-standards.md +13 -0
  46. package/framework/rules/clerk-standards.md +13 -0
  47. package/framework/rules/csharp-standards.md +8 -4
  48. package/framework/rules/data-standards.md +18 -0
  49. package/framework/rules/dotnet-templates.md +87 -0
  50. package/framework/rules/frontend-standards.md +13 -13
  51. package/framework/rules/hangfire-standards.md +13 -0
  52. package/framework/rules/infrastructure-standards.md +27 -16
  53. package/framework/rules/morph-workflow.md +73 -13
  54. package/framework/rules/nextjs-standards.md +1 -0
  55. package/framework/rules/nextjs-templates.md +40 -0
  56. package/framework/rules/resend-standards.md +12 -0
  57. package/framework/rules/supabase-standards.md +29 -0
  58. package/framework/skills/README.md +6 -8
  59. package/framework/skills/level-0-meta/mcp-registry.json +21 -99
  60. package/framework/{standards/ai-agents/team-orchestration.md → skills/level-0-meta/morph-agent-teams/SKILL.md} +472 -479
  61. package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +28 -1
  62. package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
  63. package/framework/skills/level-0-meta/morph-code-review/SKILL.md +1 -5
  64. package/framework/skills/level-0-meta/morph-code-review/scripts/scan-csharp.mjs +1 -1
  65. package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +23 -41
  66. package/framework/skills/level-0-meta/morph-init/SKILL.md +18 -14
  67. package/framework/skills/level-0-meta/morph-parallel-dispatch/SKILL.md +225 -0
  68. package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +20 -0
  69. package/framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md +4 -8
  70. package/framework/skills/level-0-meta/morph-tool-usage-guide/references/tools-per-phase.md +15 -59
  71. package/framework/skills/level-0-meta/morph-verification-before-completion/SKILL.md +7 -19
  72. package/framework/skills/level-0-meta/morph-verification-before-completion/scripts/check-phase-outputs.mjs +8 -8
  73. package/framework/skills/level-1-workflows/README.md +1 -1
  74. package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +49 -50
  75. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +57 -123
  76. package/framework/skills/level-1-workflows/morph-phase-design/references/architecture-analysis-guide.md +5 -50
  77. package/framework/skills/level-1-workflows/morph-phase-design/references/spec-example.md +1 -1
  78. package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +127 -159
  79. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/code-quality-reviewer-prompt.md +1 -1
  80. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +4 -3
  81. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/spec-reviewer-prompt.md +2 -2
  82. package/framework/skills/level-1-workflows/morph-phase-implement/references/recap-example.md +1 -1
  83. package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +17 -13
  84. package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +22 -40
  85. package/framework/skills/level-1-workflows/morph-phase-tasks/references/task-planning-patterns.md +143 -172
  86. package/framework/skills/level-1-workflows/morph-phase-tasks/references/tasks-example.md +5 -5
  87. package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +57 -77
  88. package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +1 -1
  89. package/framework/squad-templates/backend-only.json +6 -6
  90. package/framework/squad-templates/frontend-only.json +17 -8
  91. package/framework/squad-templates/full-stack.json +29 -24
  92. package/framework/standards/STANDARDS.json +1021 -2369
  93. package/framework/standards/backend/dotnet/fluent-validation-vsa.md +200 -0
  94. package/framework/standards/backend/dotnet/result-pattern.md +213 -0
  95. package/framework/standards/backend/dotnet/scalar-ui.md +172 -0
  96. package/framework/standards/backend/dotnet/scrutor.md +158 -0
  97. package/framework/standards/backend/dotnet/vsa-handler-patterns.md +274 -0
  98. package/framework/standards/frontend/nextjs/motion-patterns.md +1 -1
  99. package/framework/standards/infrastructure/supabase/mcp-setup.md +83 -193
  100. package/framework/standards/integration/mcp/mcp-tools.md +91 -77
  101. package/framework/templates/IDE-SNIPPETS.md +2 -6
  102. package/framework/templates/README.md +709 -814
  103. package/framework/templates/REGISTRY.json +223 -762
  104. package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -0
  105. package/framework/templates/code/dotnet/abstractions/error.cs +60 -0
  106. package/framework/templates/code/dotnet/abstractions/handler.cs +12 -0
  107. package/framework/templates/code/dotnet/abstractions/result.cs +74 -0
  108. package/framework/templates/code/dotnet/backend/repository.cs +148 -141
  109. package/framework/templates/code/dotnet/constants/api-tags.cs +6 -0
  110. package/framework/templates/code/dotnet/exceptions/exception-handler.cs +32 -0
  111. package/framework/templates/code/dotnet/extensions/database-extensions.cs +20 -0
  112. package/framework/templates/code/dotnet/extensions/handler-registration.cs +38 -0
  113. package/framework/templates/code/dotnet/extensions/health-checks.cs +24 -0
  114. package/framework/templates/code/dotnet/extensions/map-endpoints.cs +35 -0
  115. package/framework/templates/code/dotnet/extensions/result-extensions.cs +29 -0
  116. package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -0
  117. package/framework/templates/code/dotnet/feature/entity.cs.hbs +8 -0
  118. package/framework/templates/code/dotnet/feature/errors.cs.hbs +8 -0
  119. package/framework/templates/code/dotnet/feature/handler.cs.hbs +24 -0
  120. package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -0
  121. package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -0
  122. package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -0
  123. package/framework/templates/code/dotnet/jobs/job.cs +21 -17
  124. package/framework/templates/code/dotnet/pipelines/logging-decorator.cs +31 -0
  125. package/framework/templates/code/dotnet/pipelines/validation-decorator.cs +97 -0
  126. package/framework/templates/code/dotnet/test.cs +192 -106
  127. package/framework/templates/context/ARCHITECTURE.md +89 -0
  128. package/framework/templates/context/CONTEXT-FEATURE.md +2 -2
  129. package/framework/templates/context/CONTEXT.md +180 -181
  130. package/framework/templates/context/design-system.md +1 -5
  131. package/framework/templates/docs/onboarding.md +2 -3
  132. package/framework/templates/docs/proposal.md +171 -182
  133. package/framework/templates/docs/spec.md +1 -3
  134. package/framework/templates/docs/ui-components.md +0 -72
  135. package/framework/templates/examples/design-system-examples.md +4 -4
  136. package/framework/templates/feature/decisions.md +0 -66
  137. package/framework/templates/feature/recap.md +1 -2
  138. package/framework/templates/infrastructure/github/README.md +56 -593
  139. package/framework/templates/integrations/clerk-config.cs +0 -41
  140. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  141. package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -2
  142. package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +83 -126
  143. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +2 -2
  144. package/framework/templates/project/validate.js +2 -4
  145. package/framework/templates/ui/design-system.css +1 -1
  146. package/framework/workflows/README.md +8 -8
  147. package/framework/workflows/configs/fast-track.json +51 -0
  148. package/framework/workflows/configs/full.json +68 -0
  149. package/framework/workflows/configs/standard.json +7 -3
  150. package/framework/workflows/docs/STORY-DRIVEN-DEVELOPMENT.md +1 -1
  151. package/framework/workflows/docs/enforcement-pipeline.md +18 -19
  152. package/framework/workflows/docs/full-morph.md +69 -76
  153. package/framework/workflows/docs/standard.md +49 -44
  154. package/framework/workflows/docs/ui-refresh.md +1 -1
  155. package/package.json +3 -3
  156. package/src/commands/agents/dispatch-agents.js +55 -116
  157. package/src/commands/context/context-refresh.js +79 -0
  158. package/src/commands/phase/phase-reset.js +1 -1
  159. package/src/commands/project/doctor.js +10 -32
  160. package/src/commands/project/init.js +12 -0
  161. package/src/commands/project/status.js +6 -12
  162. package/src/commands/scaffold/scaffold.js +131 -0
  163. package/src/commands/scope/escalate.js +1 -1
  164. package/src/commands/state/advance-phase.js +15 -29
  165. package/src/commands/state/state.js +20 -5
  166. package/src/commands/tasks/task.js +0 -30
  167. package/src/commands/validation/validate-feature.js +3 -10
  168. package/src/core/paths/output-schema.js +12 -13
  169. package/src/core/state/phase-state-machine.js +211 -217
  170. package/src/core/state/state-manager.js +9 -9
  171. package/src/lib/agents/agents-manager.js +2 -2
  172. package/src/lib/agents/output-collector.js +1 -2
  173. package/src/lib/detectors/design-system-detector.js +4 -4
  174. package/src/lib/detectors/index.js +1 -11
  175. package/src/lib/generators/architecture-scanner.js +640 -0
  176. package/src/lib/generators/context-generator.js +3 -3
  177. package/src/lib/generators/design-system-generator.js +508 -587
  178. package/src/lib/generators/index.js +12 -10
  179. package/src/lib/generators/metadata-extractor.js +386 -387
  180. package/src/lib/generators/recap-generator.js +4 -4
  181. package/src/lib/generators/scaffold-generator.js +317 -0
  182. package/src/lib/generators/settings-generator.js +0 -1
  183. package/src/lib/phase-chain/phase-validator.js +64 -42
  184. package/src/lib/stack/stack-profile.js +2 -2
  185. package/src/lib/standards/digest-builder.js +72 -285
  186. package/src/lib/tasks/task-parser.js +11 -5
  187. package/src/lib/validators/architecture/architecture-validator.js +259 -387
  188. package/src/lib/validators/content/content-validator.js +287 -287
  189. package/src/lib/validators/css/css-validator.js +340 -352
  190. package/src/lib/validators/packages/package-validator.js +347 -360
  191. package/src/lib/validators/shared/issue-counter.js +14 -18
  192. package/src/lib/validators/validation-runner.js +3 -19
  193. package/src/scripts/setup-infra.js +1 -1
  194. package/src/utils/agents-installer.js +61 -10
  195. package/src/utils/file-copier.js +1 -0
  196. package/src/utils/hooks-installer.js +11 -19
  197. package/src/utils/skills-installer.js +178 -178
  198. package/framework/agents/architecture/prompt-engineer.md +0 -195
  199. package/framework/agents/backend/api-designer.md +0 -106
  200. package/framework/agents/frontend/blazor-builder.md +0 -229
  201. package/framework/agents/frontend/nextjs-ui-specialist.md +0 -218
  202. package/framework/agents/infrastructure/azure-architect.md +0 -150
  203. package/framework/agents/infrastructure/azure-deploy-specialist.md +0 -707
  204. package/framework/agents/infrastructure/bicep-architect.md +0 -132
  205. package/framework/agents/infrastructure/container-specialist.md +0 -137
  206. package/framework/agents/infrastructure/devops-engineer.md +0 -126
  207. package/framework/agents/integrations/azure-identity.md +0 -148
  208. package/framework/agents/quality/code-analyzer.md +0 -239
  209. package/framework/agents/quality/testing-specialist.md +0 -130
  210. package/framework/hooks/claude-code/notification/approval-reminder.js +0 -57
  211. package/framework/hooks/claude-code/post-tool-use/context-refresh.js +0 -109
  212. package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +0 -78
  213. package/framework/index/troubleshooting-index.json +0 -184
  214. package/framework/rules/testing-standards.md +0 -14
  215. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +0 -230
  216. package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +0 -70
  217. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +0 -256
  218. package/framework/skills/level-1-workflows/morph-phase-clarify/references/clarifications-example.md +0 -117
  219. package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +0 -269
  220. package/framework/standards/ai-agents/blazor-ui.md +0 -364
  221. package/framework/standards/architecture/ddd/aggregates.md +0 -120
  222. package/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
  223. package/framework/standards/architecture/ddd/complexity-levels.md +0 -108
  224. package/framework/standards/architecture/ddd/entities.md +0 -99
  225. package/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
  226. package/framework/standards/architecture/ddd/value-objects.md +0 -124
  227. package/framework/standards/backend/api/minimal-api.md +0 -494
  228. package/framework/standards/backend/api/rest.md +0 -492
  229. package/framework/standards/backend/authentication/passkeys.md +0 -428
  230. package/framework/standards/backend/database/ef-core.md +0 -199
  231. package/framework/standards/backend/database/migrations.md +0 -393
  232. package/framework/standards/backend/database/repository-patterns.md +0 -528
  233. package/framework/standards/backend/dotnet/async.md +0 -366
  234. package/framework/standards/backend/dotnet/core.md +0 -117
  235. package/framework/standards/backend/dotnet/di.md +0 -439
  236. package/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  237. package/framework/standards/context/analytics.md +0 -96
  238. package/framework/standards/context/bundles.md +0 -110
  239. package/framework/standards/context/priming.md +0 -78
  240. package/framework/standards/core/architecture.md +0 -185
  241. package/framework/standards/core/coding.md +0 -214
  242. package/framework/standards/core/git-branching-strategy.md +0 -403
  243. package/framework/standards/core/git.md +0 -185
  244. package/framework/standards/core/testing.md +0 -295
  245. package/framework/standards/data/nosql/blob-storage.md +0 -102
  246. package/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  247. package/framework/standards/frontend/blazor/design-checklist.md +0 -222
  248. package/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  249. package/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  250. package/framework/standards/frontend/blazor/html-conversion.md +0 -184
  251. package/framework/standards/frontend/blazor/lifecycle.md +0 -195
  252. package/framework/standards/frontend/blazor/pitfalls.md +0 -198
  253. package/framework/standards/frontend/blazor/state.md +0 -191
  254. package/framework/standards/frontend/design-system/aesthetic-direction.md +0 -266
  255. package/framework/standards/frontend/design-system/design-trends.md +0 -171
  256. package/framework/standards/infrastructure/azure/azure.md +0 -624
  257. package/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  258. package/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  259. package/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  260. package/framework/standards/infrastructure/azure/services/functions.md +0 -486
  261. package/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  262. package/framework/standards/infrastructure/azure/services/storage.md +0 -407
  263. package/framework/standards/infrastructure/vercel/vercel-database.md +0 -106
  264. package/framework/standards/integration/api/graphql.md +0 -91
  265. package/framework/standards/integration/api/grpc.md +0 -114
  266. package/framework/standards/integration/api/rest-design.md +0 -95
  267. package/framework/standards/integration/event-driven/cqrs.md +0 -101
  268. package/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  269. package/framework/standards/integration/event-driven/service-bus.md +0 -95
  270. package/framework/standards/observability/logging.md +0 -131
  271. package/framework/standards/observability/metrics.md +0 -121
  272. package/framework/standards/observability/monitoring.md +0 -114
  273. package/framework/standards/observability/tracing.md +0 -132
  274. package/framework/standards/workflows/parallel-execution.md +0 -112
  275. package/framework/standards/workflows/thread-management.md +0 -113
  276. package/framework/templates/code/dotnet/backend/service.cs +0 -139
  277. package/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  278. package/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  279. package/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  280. package/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  281. package/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
  282. package/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
  283. package/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
  284. package/framework/templates/code/dotnet/frontend/component.razor +0 -239
  285. package/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  286. package/framework/templates/infrastructure/azure/README.md +0 -286
  287. package/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  288. package/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  289. package/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  290. package/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  291. package/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  292. package/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  293. package/framework/templates/infrastructure/azure/deploy.sh +0 -208
  294. package/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  295. package/framework/templates/infrastructure/azure/main.bicep +0 -189
  296. package/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  297. package/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  298. package/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  299. package/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  300. package/framework/templates/infrastructure/azure/storage.bicep +0 -106
  301. package/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  302. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  303. package/framework/templates/integrations/azure-identity-config.cs +0 -288
  304. package/framework/templates/project-structure/dotnet-ddd.md +0 -70
  305. package/framework/templates/saas/subscription.cs +0 -347
  306. package/framework/templates/saas/tenant.cs +0 -338
  307. package/framework/templates/ui/FluentDesignTheme.cs +0 -149
  308. package/framework/templates/ui/MudTheme.cs +0 -281
  309. package/framework/workflows/configs/nodejs-cli.json +0 -40
  310. package/src/commands/standards/context-budget.js +0 -89
  311. package/src/lib/standards/index.js +0 -7
  312. package/src/lib/standards/standards-context-injector.js +0 -302
  313. package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +0 -316
  314. package/src/lib/validators/blazor/blazor-state-validator.js +0 -279
  315. package/src/lib/validators/blazor/blazor-validator.js +0 -369
  316. package/src/lib/validators/blazor/index.js +0 -9
@@ -1,393 +0,0 @@
1
- # EF Core Migrations Standards
2
-
3
- > **Scope:** blazor-azure,nextjs-supabase
4
- > **Layer:** 1 (on domain)
5
- > **Keywords:** migration, schema, database update, ef migrations
6
- > **Load When:** database work
7
-
8
- Migration naming, creation, and deployment best practices
9
-
10
- ---
11
-
12
- ## Migration Naming
13
-
14
- ### Format
15
-
16
- ```
17
- {Timestamp}_{DescriptiveAction}
18
-
19
- Examples:
20
- 20260216103000_CreateUserTable
21
- 20260216104500_AddEmailIndexToUsers
22
- 20260216110000_AlterOrdersAddTotalColumn
23
- ```
24
-
25
- ### Naming Convention
26
-
27
- - Use PascalCase
28
- - Start with action verb: `Create`, `Add`, `Alter`, `Remove`, `Update`
29
- - Be specific about what changed
30
- - Keep under 50 characters
31
-
32
- ```bash
33
- # ✅ GOOD
34
- dotnet ef migrations add CreateUserTable
35
- dotnet ef migrations add AddEmailIndexToUsers
36
- dotnet ef migrations add AlterOrdersAddStatusColumn
37
-
38
- # ❌ BAD
39
- dotnet ef migrations add Update
40
- dotnet ef migrations add Changes
41
- dotnet ef migrations add Fix
42
- ```
43
-
44
- ---
45
-
46
- ## Creating Migrations
47
-
48
- ### Command
49
-
50
- ```bash
51
- # Create migration
52
- dotnet ef migrations add CreateUserTable --project Infrastructure --startup-project Web
53
-
54
- # Create migration with output folder
55
- dotnet ef migrations add AddOrderEntity --output-dir Data/Migrations
56
- ```
57
-
58
- ### Before Creating Migration
59
-
60
- 1. **Build project** - Ensure no compilation errors
61
- 2. **Review model changes** - Verify entity changes are correct
62
- 3. **Check DbContext** - Ensure DbSet and OnModelCreating are updated
63
-
64
- ---
65
-
66
- ## Migration Content
67
-
68
- ### Up Method (Apply Changes)
69
-
70
- ```csharp
71
- protected override void Up(MigrationBuilder migrationBuilder)
72
- {
73
- // Create table
74
- migrationBuilder.CreateTable(
75
- name: "Users",
76
- columns: table => new
77
- {
78
- Id = table.Column<int>(nullable: false)
79
- .Annotation("SqlServer:Identity", "1, 1"),
80
- Email = table.Column<string>(maxLength: 256, nullable: false),
81
- PasswordHash = table.Column<string>(nullable: false),
82
- CreatedAt = table.Column<DateTime>(nullable: false, defaultValueSql: "GETUTCDATE()")
83
- },
84
- constraints: table =>
85
- {
86
- table.PrimaryKey("PK_Users", x => x.Id);
87
- });
88
-
89
- // Create index
90
- migrationBuilder.CreateIndex(
91
- name: "IX_Users_Email",
92
- table: "Users",
93
- column: "Email",
94
- unique: true);
95
- }
96
- ```
97
-
98
- ### Down Method (Rollback Changes)
99
-
100
- ```csharp
101
- protected override void Down(MigrationBuilder migrationBuilder)
102
- {
103
- // Drop in reverse order
104
- migrationBuilder.DropIndex(
105
- name: "IX_Users_Email",
106
- table: "Users");
107
-
108
- migrationBuilder.DropTable(
109
- name: "Users");
110
- }
111
- ```
112
-
113
- ---
114
-
115
- ## Data Seeding in Migrations
116
-
117
- ### Seed Required Data
118
-
119
- ```csharp
120
- protected override void Up(MigrationBuilder migrationBuilder)
121
- {
122
- // Create table
123
- migrationBuilder.CreateTable(...);
124
-
125
- // Seed data
126
- migrationBuilder.InsertData(
127
- table: "Roles",
128
- columns: new[] { "Id", "Name" },
129
- values: new object[,]
130
- {
131
- { 1, "Admin" },
132
- { 2, "User" }
133
- });
134
- }
135
-
136
- protected override void Down(MigrationBuilder migrationBuilder)
137
- {
138
- // Delete data
139
- migrationBuilder.DeleteData(
140
- table: "Roles",
141
- keyColumn: "Id",
142
- keyValues: new object[] { 1, 2 });
143
-
144
- migrationBuilder.DropTable("Roles");
145
- }
146
- ```
147
-
148
- ---
149
-
150
- ## Applying Migrations
151
-
152
- ### Development
153
-
154
- ```bash
155
- # Apply all pending migrations
156
- dotnet ef database update
157
-
158
- # Apply to specific migration
159
- dotnet ef database update CreateUserTable
160
-
161
- # Rollback to previous migration
162
- dotnet ef database update PreviousMigrationName
163
-
164
- # Rollback all migrations
165
- dotnet ef database update 0
166
- ```
167
-
168
- ### Production
169
-
170
- **Option 1: SQL Script (Recommended)**
171
-
172
- ```bash
173
- # Generate SQL script for all pending migrations
174
- dotnet ef migrations script --output migrate.sql
175
-
176
- # Generate SQL from specific range
177
- dotnet ef migrations script FromMigration ToMigration --output migrate.sql
178
-
179
- # Idempotent script (can run multiple times)
180
- dotnet ef migrations script --idempotent --output migrate.sql
181
- ```
182
-
183
- **Option 2: Automatic (Startup)**
184
-
185
- ```csharp
186
- // Program.cs
187
- using (var scope = app.Services.CreateScope())
188
- {
189
- var context = scope.ServiceProvider.GetRequiredService<AppDbContext>();
190
-
191
- if (builder.Environment.IsDevelopment())
192
- {
193
- await context.Database.MigrateAsync(); // ✅ Dev only
194
- }
195
- }
196
- ```
197
-
198
- ---
199
-
200
- ## Handling Production Data
201
-
202
- ### Adding Column with Default
203
-
204
- ```csharp
205
- protected override void Up(MigrationBuilder migrationBuilder)
206
- {
207
- // Add column with default value (safe for existing rows)
208
- migrationBuilder.AddColumn<string>(
209
- name: "Status",
210
- table: "Orders",
211
- nullable: false,
212
- defaultValue: "Pending"); // ✅ Default prevents NULL for existing rows
213
- }
214
- ```
215
-
216
- ### Renaming Column (Preserve Data)
217
-
218
- ```csharp
219
- protected override void Up(MigrationBuilder migrationBuilder)
220
- {
221
- // Rename column (data preserved)
222
- migrationBuilder.RenameColumn(
223
- name: "OldName",
224
- table: "Users",
225
- newName: "NewName");
226
- }
227
-
228
- protected override void Down(MigrationBuilder migrationBuilder)
229
- {
230
- migrationBuilder.RenameColumn(
231
- name: "NewName",
232
- table: "Users",
233
- newName: "OldName");
234
- }
235
- ```
236
-
237
- ### Altering Column Type (Risky)
238
-
239
- ```csharp
240
- protected override void Up(MigrationBuilder migrationBuilder)
241
- {
242
- // ⚠️ RISKY: May lose data if not compatible
243
- // Example: VARCHAR(50) → VARCHAR(100) is safe
244
- // VARCHAR(100) → VARCHAR(50) may truncate
245
- // NVARCHAR → INT will fail
246
-
247
- migrationBuilder.AlterColumn<string>(
248
- name: "Email",
249
- table: "Users",
250
- maxLength: 512, // Increased from 256
251
- nullable: false,
252
- oldClrType: typeof(string),
253
- oldMaxLength: 256);
254
- }
255
- ```
256
-
257
- ---
258
-
259
- ## Best Practices
260
-
261
- ### DO
262
-
263
- ✅ **Review generated migration before applying**
264
-
265
- ```bash
266
- dotnet ef migrations add AddUserEntity
267
- # Review Migrations/xxxxx_AddUserEntity.cs file
268
- # Verify Up and Down methods are correct
269
- dotnet ef database update
270
- ```
271
-
272
- ✅ **Create migrations for each logical change**
273
-
274
- ```bash
275
- # ✅ GOOD (separate migrations)
276
- dotnet ef migrations add CreateUserTable
277
- dotnet ef migrations add CreateOrderTable
278
-
279
- # ❌ BAD (one big migration)
280
- dotnet ef migrations add CreateAllTables
281
- ```
282
-
283
- ✅ **Test migrations in dev before production**
284
-
285
- ```bash
286
- # Test migration
287
- dotnet ef database update
288
-
289
- # Test rollback
290
- dotnet ef database update PreviousMigration
291
-
292
- # Test re-apply
293
- dotnet ef database update LatestMigration
294
- ```
295
-
296
- ✅ **Use idempotent scripts for production**
297
-
298
- ```bash
299
- dotnet ef migrations script --idempotent --output deploy.sql
300
- ```
301
-
302
- ### DON'T
303
-
304
- ❌ **Don't modify applied migrations**
305
-
306
- ```csharp
307
- // ❌ WRONG (migration already applied in prod)
308
- protected override void Up(MigrationBuilder migrationBuilder)
309
- {
310
- // Changed this after already deployed - will cause issues!
311
- migrationBuilder.CreateTable(...);
312
- }
313
-
314
- // ✅ CORRECT (create new migration)
315
- dotnet ef migrations add FixUserTable
316
- ```
317
-
318
- ❌ **Don't delete migrations already in production**
319
-
320
- ```bash
321
- # ❌ WRONG (will break production)
322
- rm Migrations/20260216_CreateUserTable.cs
323
-
324
- # ✅ CORRECT (rollback properly)
325
- dotnet ef migrations remove
326
- ```
327
-
328
- ❌ **Don't use database.EnsureCreated() with migrations**
329
-
330
- ```csharp
331
- // ❌ WRONG (conflicts with migrations)
332
- context.Database.EnsureCreated();
333
-
334
- // ✅ CORRECT
335
- context.Database.Migrate();
336
- ```
337
-
338
- ---
339
-
340
- ## Troubleshooting
341
-
342
- ### Migration Pending Error
343
-
344
- ```
345
- Error: Pending model changes detected
346
- ```
347
-
348
- **Solution:**
349
-
350
- ```bash
351
- dotnet ef migrations add FixPendingChanges
352
- dotnet ef database update
353
- ```
354
-
355
- ### Migration Already Applied
356
-
357
- ```
358
- Error: Migration 'xxx' has already been applied
359
- ```
360
-
361
- **Solution:**
362
-
363
- ```bash
364
- # Remove last migration (if not in prod)
365
- dotnet ef migrations remove
366
-
367
- # Or create new migration
368
- dotnet ef migrations add AdditionalChanges
369
- ```
370
-
371
- ### Rollback Failed
372
-
373
- ```
374
- Error: Could not rollback migration
375
- ```
376
-
377
- **Solution:**
378
-
379
- ```bash
380
- # Manually fix database state, then:
381
- dotnet ef database update LastGoodMigration --force
382
- ```
383
-
384
- ---
385
-
386
- ## Related Standards
387
-
388
- - [EF Core Standards](./ef-core.md)
389
- - [Database Performance](./performance.md)
390
-
391
- ---
392
-
393
- *MORPH-SPEC by Polymorphism Tech*