@atlashub/smartstack-cli 3.39.0 → 3.40.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.
- package/.documentation/apex.html +644 -644
- package/.documentation/css/styles.css +2320 -2320
- package/.documentation/init.html +1377 -1377
- package/.documentation/js/app.js +780 -780
- package/.documentation/prd-json-v2.0.0.md +396 -396
- package/.documentation/testing-ba-e2e.md +462 -462
- package/config/default-config.json +95 -95
- package/config/mcp-defaults.json +62 -62
- package/config/settings.json +53 -53
- package/config/settings.local.example.json +16 -16
- package/dist/index.js.map +1 -1
- package/dist/mcp-entry.mjs +6 -4
- package/dist/mcp-entry.mjs.map +1 -1
- package/package.json +115 -115
- package/scripts/extract-api-endpoints.ts +325 -325
- package/scripts/extract-business-rules.ts +440 -440
- package/scripts/generate-doc-with-mock-ui.ts +804 -804
- package/scripts/health-check.sh +168 -168
- package/scripts/postinstall.js +18 -18
- package/templates/agents/action.md +37 -37
- package/templates/agents/ba-reader.md +378 -378
- package/templates/agents/ba-writer.md +861 -861
- package/templates/agents/code-reviewer.md +163 -163
- package/templates/agents/db-reader.md +149 -149
- package/templates/agents/docs-context-reader.md +143 -143
- package/templates/agents/docs-sync-checker.md +122 -122
- package/templates/agents/efcore/conflicts.md +84 -84
- package/templates/agents/efcore/db-deploy.md +74 -74
- package/templates/agents/efcore/db-reset.md +85 -85
- package/templates/agents/efcore/db-seed.md +61 -61
- package/templates/agents/efcore/db-status.md +86 -86
- package/templates/agents/efcore/migration.md +186 -186
- package/templates/agents/efcore/rebase-snapshot.md +108 -108
- package/templates/agents/efcore/scan.md +92 -92
- package/templates/agents/efcore/squash.md +161 -161
- package/templates/agents/explore-codebase.md +66 -66
- package/templates/agents/explore-docs.md +98 -98
- package/templates/agents/fix-grammar.md +50 -50
- package/templates/agents/gitflow/abort.md +45 -45
- package/templates/agents/gitflow/cleanup.md +96 -96
- package/templates/agents/gitflow/commit.md +236 -236
- package/templates/agents/gitflow/exec.md +48 -48
- package/templates/agents/gitflow/finish.md +146 -146
- package/templates/agents/gitflow/init-clone.md +199 -199
- package/templates/agents/gitflow/init-detect.md +137 -137
- package/templates/agents/gitflow/init-validate.md +225 -225
- package/templates/agents/gitflow/init.md +340 -340
- package/templates/agents/gitflow/merge.md +145 -145
- package/templates/agents/gitflow/plan.md +42 -42
- package/templates/agents/gitflow/pr.md +191 -191
- package/templates/agents/gitflow/review.md +49 -49
- package/templates/agents/gitflow/start.md +147 -147
- package/templates/agents/gitflow/status.md +95 -95
- package/templates/agents/mcp-healthcheck.md +163 -163
- package/templates/agents/snipper.md +37 -37
- package/templates/agents/websearch.md +46 -46
- package/templates/hooks/appsettings-guard.sh +76 -76
- package/templates/hooks/docs-drift-check.md +96 -96
- package/templates/hooks/ef-migration-check.md +139 -139
- package/templates/hooks/hooks.json +58 -58
- package/templates/hooks/mcp-check.md +64 -64
- package/templates/hooks/ralph-mcp-logger.sh +46 -46
- package/templates/hooks/ralph-session-end.sh +69 -69
- package/templates/hooks/stop-hook.sh +177 -177
- package/templates/hooks/wsl-dotnet-cleanup.sh +24 -24
- package/templates/mcp-scaffolding/component.tsx.hbs +318 -318
- package/templates/mcp-scaffolding/controller.cs.hbs +192 -192
- package/templates/mcp-scaffolding/entity-extension.cs.hbs +239 -239
- package/templates/mcp-scaffolding/frontend/api-client.ts.hbs +116 -116
- package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +133 -133
- package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +126 -126
- package/templates/mcp-scaffolding/migrations/seed-roles.cs.hbs +261 -261
- package/templates/mcp-scaffolding/service-extension.cs.hbs +53 -53
- package/templates/mcp-scaffolding/tests/controller.test.cs.hbs +436 -436
- package/templates/mcp-scaffolding/tests/entity.test.cs.hbs +239 -239
- package/templates/mcp-scaffolding/tests/repository.test.cs.hbs +441 -441
- package/templates/mcp-scaffolding/tests/security.test.cs.hbs +442 -442
- package/templates/mcp-scaffolding/tests/service.test.cs.hbs +402 -402
- package/templates/mcp-scaffolding/tests/validator.test.cs.hbs +428 -428
- package/templates/project/DependencyInjection.Application.cs.template +25 -25
- package/templates/project/DependencyInjection.Infrastructure.cs.template +61 -61
- package/templates/project/DesignTimeExtensionsDbContextFactory.cs.template +70 -70
- package/templates/project/ExampleEntity.cs.template +116 -116
- package/templates/project/ExampleEntityConfiguration.cs.template +64 -64
- package/templates/project/ExampleService.cs.template +146 -146
- package/templates/project/ExtensionsDbContext.cs.template +41 -41
- package/templates/project/IExtensionsDbContext.cs.template +22 -22
- package/templates/project/Program.cs.template +47 -47
- package/templates/project/README.md +79 -79
- package/templates/project/api.ts.template +12 -12
- package/templates/project/appsettings.json.template +170 -170
- package/templates/project/claude-settings.json.template +5 -5
- package/templates/project/test-frontend/msw/handlers.ts +58 -58
- package/templates/project/test-frontend/msw/server.ts +25 -25
- package/templates/project/test-frontend/setup.ts +16 -16
- package/templates/project/test-frontend/test-utils.tsx +59 -59
- package/templates/project/test-frontend/vitest.config.ts +31 -31
- package/templates/ralph/README.md +93 -93
- package/templates/ralph/ralph.config.yaml +113 -113
- package/templates/scripts/setup-ralph-loop.sh +173 -173
- package/templates/skills/_resources/config-safety.md +61 -61
- package/templates/skills/_resources/context-digest-template.md +53 -53
- package/templates/skills/_resources/doc-context-cache.md +60 -60
- package/templates/skills/_resources/docs-manifest-schema.md +155 -155
- package/templates/skills/_resources/formatting-guide.md +124 -124
- package/templates/skills/_resources/mcp-validate-documentation-spec.md +181 -181
- package/templates/skills/_shared.md +228 -228
- package/templates/skills/admin/SKILL.md +48 -48
- package/templates/skills/ai-prompt/SKILL.md +107 -107
- package/templates/skills/ai-prompt/steps/step-00-init.md +47 -47
- package/templates/skills/ai-prompt/steps/step-01-implementation.md +122 -122
- package/templates/skills/apex/SKILL.md +168 -168
- package/templates/skills/apex/_shared.md +141 -141
- package/templates/skills/apex/references/agent-teams-protocol.md +164 -164
- package/templates/skills/apex/references/analysis-methods.md +141 -141
- package/templates/skills/apex/references/challenge-questions.md +145 -145
- package/templates/skills/apex/references/code-generation.md +412 -412
- package/templates/skills/apex/references/core-seed-data.md +1437 -1437
- package/templates/skills/apex/references/error-classification.md +144 -144
- package/templates/skills/apex/references/examine-build-validation.md +82 -82
- package/templates/skills/apex/references/execution-frontend-gates.md +177 -177
- package/templates/skills/apex/references/execution-frontend-patterns.md +105 -105
- package/templates/skills/apex/references/execution-layer1-rules.md +96 -96
- package/templates/skills/apex/references/initialization-challenge-flow.md +110 -110
- package/templates/skills/apex/references/planning-layer-mapping.md +151 -151
- package/templates/skills/apex/references/post-checks.md +1584 -1584
- package/templates/skills/apex/references/smartstack-api.md +1053 -1053
- package/templates/skills/apex/references/smartstack-frontend.md +1571 -1571
- package/templates/skills/apex/references/smartstack-layers.md +402 -402
- package/templates/skills/apex/steps/step-00-init.md +307 -307
- package/templates/skills/apex/steps/step-01-analyze.md +165 -165
- package/templates/skills/apex/steps/step-02-plan.md +144 -144
- package/templates/skills/apex/steps/step-03-execute.md +328 -328
- package/templates/skills/apex/steps/step-04-examine.md +263 -263
- package/templates/skills/apex/steps/step-05-deep-review.md +129 -129
- package/templates/skills/apex/steps/step-06-resolve.md +101 -101
- package/templates/skills/apex/steps/step-07-tests.md +238 -238
- package/templates/skills/apex/steps/step-08-run-tests.md +125 -125
- package/templates/skills/application/SKILL.md +4 -4
- package/templates/skills/application/references/application-roles-template.md +227 -227
- package/templates/skills/application/references/backend-controller-hierarchy.md +58 -58
- package/templates/skills/application/references/backend-entity-seeding.md +72 -72
- package/templates/skills/application/references/backend-seeding-and-dto-output.md +83 -83
- package/templates/skills/application/references/backend-table-prefix-mapping.md +79 -79
- package/templates/skills/application/references/backend-verification.md +88 -88
- package/templates/skills/application/references/frontend-i18n-and-output.md +67 -67
- package/templates/skills/application/references/frontend-route-naming.md +117 -117
- package/templates/skills/application/references/frontend-route-wiring-app-tsx.md +107 -107
- package/templates/skills/application/references/frontend-verification.md +156 -156
- package/templates/skills/application/references/migration-checklist-troubleshooting.md +1 -1
- package/templates/skills/application/references/provider-template.md +177 -177
- package/templates/skills/application/references/roles-client-project-handling.md +55 -55
- package/templates/skills/application/references/roles-fallback-procedure.md +149 -149
- package/templates/skills/application/references/test-coverage-requirements.md +213 -213
- package/templates/skills/application/references/test-frontend.md +73 -73
- package/templates/skills/application/references/test-prerequisites.md +72 -72
- package/templates/skills/application/steps/step-05-frontend.md +176 -176
- package/templates/skills/application/steps/step-06-migration.md +193 -193
- package/templates/skills/application/steps/step-07-tests.md +356 -356
- package/templates/skills/application/steps/step-08-documentation.md +137 -137
- package/templates/skills/application/templates-backend.md +463 -463
- package/templates/skills/application/templates-frontend.md +685 -685
- package/templates/skills/application/templates-i18n.md +520 -520
- package/templates/skills/application/templates-seed.md +1096 -1096
- package/templates/skills/business-analyse/SKILL.md +327 -327
- package/templates/skills/business-analyse/_architecture.md +123 -123
- package/templates/skills/business-analyse/_elicitation.md +206 -206
- package/templates/skills/business-analyse/_module-loop.md +115 -115
- package/templates/skills/business-analyse/_shared.md +383 -383
- package/templates/skills/business-analyse/_suggestions.md +34 -34
- package/templates/skills/business-analyse/html/ba-interactive.html +4477 -4477
- package/templates/skills/business-analyse/html/build-html.js +77 -77
- package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +150 -150
- package/templates/skills/business-analyse/html/src/scripts/02-navigation.js +227 -227
- package/templates/skills/business-analyse/html/src/scripts/03-render-cadrage.js +199 -199
- package/templates/skills/business-analyse/html/src/scripts/04-render-modules.js +205 -205
- package/templates/skills/business-analyse/html/src/scripts/05-render-specs.js +647 -647
- package/templates/skills/business-analyse/html/src/scripts/06-render-consolidation.js +195 -195
- package/templates/skills/business-analyse/html/src/scripts/07-render-handoff.js +92 -92
- package/templates/skills/business-analyse/html/src/scripts/08-editing.js +135 -135
- package/templates/skills/business-analyse/html/src/scripts/09-export.js +168 -168
- package/templates/skills/business-analyse/html/src/scripts/10-comments.js +171 -171
- package/templates/skills/business-analyse/html/src/scripts/11-review-panel.js +166 -166
- package/templates/skills/business-analyse/html/src/styles/01-variables.css +38 -38
- package/templates/skills/business-analyse/html/src/styles/02-layout.css +101 -101
- package/templates/skills/business-analyse/html/src/styles/03-navigation.css +120 -120
- package/templates/skills/business-analyse/html/src/styles/04-cards.css +196 -196
- package/templates/skills/business-analyse/html/src/styles/05-modules.css +454 -454
- package/templates/skills/business-analyse/html/src/styles/06-wireframes.css +272 -272
- package/templates/skills/business-analyse/html/src/styles/07-comments.css +184 -184
- package/templates/skills/business-analyse/html/src/styles/08-review-panel.css +241 -241
- package/templates/skills/business-analyse/html/src/template.html +516 -516
- package/templates/skills/business-analyse/patterns/suggestion-catalog.md +546 -546
- package/templates/skills/business-analyse/questionnaire/00-application.md +160 -160
- package/templates/skills/business-analyse/questionnaire/00b-project.md +85 -85
- package/templates/skills/business-analyse/questionnaire/01-context.md +185 -185
- package/templates/skills/business-analyse/questionnaire/02-stakeholders.md +189 -189
- package/templates/skills/business-analyse/questionnaire/03-scope.md +164 -164
- package/templates/skills/business-analyse/questionnaire/04-data.md +88 -88
- package/templates/skills/business-analyse/questionnaire/05-integrations.md +58 -58
- package/templates/skills/business-analyse/questionnaire/06-security.md +68 -68
- package/templates/skills/business-analyse/questionnaire/07-ui.md +76 -76
- package/templates/skills/business-analyse/questionnaire/08-performance.md +42 -42
- package/templates/skills/business-analyse/questionnaire/09-constraints.md +45 -45
- package/templates/skills/business-analyse/questionnaire/10-documentation.md +43 -43
- package/templates/skills/business-analyse/questionnaire/11-data-lifecycle.md +59 -59
- package/templates/skills/business-analyse/questionnaire/12-migration.md +58 -58
- package/templates/skills/business-analyse/questionnaire/13-cross-module.md +69 -69
- package/templates/skills/business-analyse/questionnaire/14-risk-assumptions.md +135 -135
- package/templates/skills/business-analyse/questionnaire/15-success-metrics.md +136 -136
- package/templates/skills/business-analyse/questionnaire.md +337 -337
- package/templates/skills/business-analyse/react/application-viewer.md +242 -242
- package/templates/skills/business-analyse/react/components.md +551 -551
- package/templates/skills/business-analyse/react/i18n-template.md +306 -306
- package/templates/skills/business-analyse/references/acceptance-criteria.md +169 -169
- package/templates/skills/business-analyse/references/agent-module-prompt.md +362 -362
- package/templates/skills/business-analyse/references/agent-pooling-best-practices.md +557 -557
- package/templates/skills/business-analyse/references/analysis-semantic-checks.md +190 -190
- package/templates/skills/business-analyse/references/cache-warming-strategy.md +566 -566
- package/templates/skills/business-analyse/references/cadrage-challenge-patterns.md +41 -41
- package/templates/skills/business-analyse/references/cadrage-coverage-matrix.md +74 -74
- package/templates/skills/business-analyse/references/cadrage-pre-analysis.md +115 -115
- package/templates/skills/business-analyse/references/cadrage-shared-modules.md +68 -69
- package/templates/skills/business-analyse/references/cadrage-structure-cards.md +85 -85
- package/templates/skills/business-analyse/references/compilation-structure-cards.md +297 -297
- package/templates/skills/business-analyse/references/consolidation-structural-checks.md +107 -107
- package/templates/skills/business-analyse/references/deploy-data-build.md +180 -180
- package/templates/skills/business-analyse/references/deploy-modes.md +118 -118
- package/templates/skills/business-analyse/references/detection-strategies.md +424 -424
- package/templates/skills/business-analyse/references/entity-architecture-decision.md +218 -218
- package/templates/skills/business-analyse/references/handoff-file-templates.md +120 -120
- package/templates/skills/business-analyse/references/handoff-mappings.md +81 -81
- package/templates/skills/business-analyse/references/handoff-seeddata-generation.md +312 -312
- package/templates/skills/business-analyse/references/html-data-mapping.md +299 -299
- package/templates/skills/business-analyse/references/init-schema-deployment.md +65 -65
- package/templates/skills/business-analyse/references/naming-conventions.md +243 -243
- package/templates/skills/business-analyse/references/prd-generation.md +258 -258
- package/templates/skills/business-analyse/references/review-data-mapping.md +363 -363
- package/templates/skills/business-analyse/references/robustness-checks.md +542 -542
- package/templates/skills/business-analyse/references/spec-auto-inference.md +111 -111
- package/templates/skills/business-analyse/references/team-orchestration.md +1022 -1022
- package/templates/skills/business-analyse/references/ui-dashboard-spec.md +85 -85
- package/templates/skills/business-analyse/references/ui-resource-cards.md +259 -259
- package/templates/skills/business-analyse/references/validate-incremental-html.md +121 -121
- package/templates/skills/business-analyse/references/validation-checklist.md +347 -347
- package/templates/skills/business-analyse/references/wireframe-svg-style-guide.md +335 -335
- package/templates/skills/business-analyse/schemas/application-schema.json +453 -453
- package/templates/skills/business-analyse/schemas/feature-schema.json +53 -53
- package/templates/skills/business-analyse/schemas/project-schema.json +485 -485
- package/templates/skills/business-analyse/schemas/sections/analysis-schema.json +201 -201
- package/templates/skills/business-analyse/schemas/sections/discovery-schema.json +82 -82
- package/templates/skills/business-analyse/schemas/sections/handoff-schema.json +80 -80
- package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +70 -70
- package/templates/skills/business-analyse/schemas/sections/specification-schema.json +547 -547
- package/templates/skills/business-analyse/schemas/sections/validation-schema.json +93 -93
- package/templates/skills/business-analyse/schemas/shared/common-defs.json +226 -226
- package/templates/skills/business-analyse/steps/step-00-init.md +575 -576
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +767 -767
- package/templates/skills/business-analyse/steps/step-01b-applications.md +419 -419
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +387 -387
- package/templates/skills/business-analyse/steps/step-03a-data.md +16 -16
- package/templates/skills/business-analyse/steps/step-03a1-setup.md +506 -506
- package/templates/skills/business-analyse/steps/step-03a2-analysis.md +252 -252
- package/templates/skills/business-analyse/steps/step-03b-ui.md +425 -425
- package/templates/skills/business-analyse/steps/step-03c-compile.md +611 -611
- package/templates/skills/business-analyse/steps/step-03d-validate.md +783 -783
- package/templates/skills/business-analyse/steps/step-04-consolidation.md +17 -17
- package/templates/skills/business-analyse/steps/step-04a-collect.md +415 -415
- package/templates/skills/business-analyse/steps/step-04b-analyze.md +163 -163
- package/templates/skills/business-analyse/steps/step-04c-decide.md +186 -186
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +840 -840
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +522 -522
- package/templates/skills/business-analyse/steps/step-05c-ralph-readiness.md +703 -703
- package/templates/skills/business-analyse/steps/step-06-review.md +278 -278
- package/templates/skills/business-analyse/templates/tpl-frd.md +168 -168
- package/templates/skills/business-analyse/templates/tpl-handoff.md +186 -186
- package/templates/skills/business-analyse/templates/tpl-launch-displays.md +59 -59
- package/templates/skills/business-analyse/templates/tpl-progress.md +172 -172
- package/templates/skills/business-analyse/templates-frd.md +476 -476
- package/templates/skills/business-analyse/templates-react.md +574 -574
- package/templates/skills/cc-agent/SKILL.md +129 -129
- package/templates/skills/cc-agent/references/agent-behavior-patterns.md +95 -95
- package/templates/skills/cc-agent/references/agent-frontmatter.md +213 -213
- package/templates/skills/cc-agent/references/permission-modes.md +102 -102
- package/templates/skills/cc-agent/references/tools-reference.md +144 -144
- package/templates/skills/cc-agent/steps/step-00-init.md +134 -134
- package/templates/skills/cc-agent/steps/step-01-design.md +186 -186
- package/templates/skills/cc-agent/steps/step-02-generate.md +131 -131
- package/templates/skills/cc-agent/steps/step-03-validate.md +130 -130
- package/templates/skills/cc-agent/templates/agent-categorized.md +67 -67
- package/templates/skills/cc-agent/templates/agent-standalone.md +56 -56
- package/templates/skills/cc-agent/templates/agent-with-skills.md +94 -94
- package/templates/skills/cc-audit/SKILL.md +108 -108
- package/templates/skills/cc-audit/references/agent-checklist.md +91 -91
- package/templates/skills/cc-audit/references/hook-checklist.md +110 -110
- package/templates/skills/cc-audit/references/skill-checklist.md +70 -70
- package/templates/skills/cc-audit/steps/step-00-init.md +98 -98
- package/templates/skills/cc-audit/steps/step-01-scan.md +142 -142
- package/templates/skills/cc-audit/steps/step-02-analyze.md +158 -158
- package/templates/skills/cc-audit/steps/step-03-report.md +142 -142
- package/templates/skills/cc-skill/SKILL.md +134 -134
- package/templates/skills/cc-skill/references/best-practices.md +167 -167
- package/templates/skills/cc-skill/references/frontmatter-reference.md +182 -182
- package/templates/skills/cc-skill/references/skill-patterns.md +199 -199
- package/templates/skills/cc-skill/steps/step-00-init.md +119 -119
- package/templates/skills/cc-skill/steps/step-01-design.md +199 -199
- package/templates/skills/cc-skill/steps/step-02-generate.md +145 -145
- package/templates/skills/cc-skill/steps/step-03-steps.md +151 -151
- package/templates/skills/cc-skill/steps/step-04-validate.md +124 -124
- package/templates/skills/cc-skill/templates/skill-forked.md +85 -85
- package/templates/skills/cc-skill/templates/skill-progressive.md +102 -102
- package/templates/skills/cc-skill/templates/skill-simple.md +75 -75
- package/templates/skills/cc-skill/templates/step-template.md +82 -82
- package/templates/skills/check-version/SKILL.md +196 -196
- package/templates/skills/controller/SKILL.md +162 -162
- package/templates/skills/controller/postman-templates.md +614 -614
- package/templates/skills/controller/references/controller-code-templates.md +159 -159
- package/templates/skills/controller/references/mcp-scaffold-workflow.md +209 -209
- package/templates/skills/controller/references/permission-sync-templates.md +149 -149
- package/templates/skills/controller/steps/step-00-init.md +193 -191
- package/templates/skills/controller/steps/step-01-analyze.md +146 -146
- package/templates/skills/controller/steps/step-02-plan.md +176 -176
- package/templates/skills/controller/steps/step-03-generate.md +189 -189
- package/templates/skills/controller/steps/step-04-perms.md +80 -80
- package/templates/skills/controller/steps/step-05-validate.md +107 -107
- package/templates/skills/controller/templates.md +1555 -1555
- package/templates/skills/debug/SKILL.md +70 -70
- package/templates/skills/debug/references/team-protocol.md +232 -232
- package/templates/skills/debug/steps/step-00-init.md +57 -57
- package/templates/skills/debug/steps/step-01-analyze.md +219 -219
- package/templates/skills/debug/steps/step-02-resolve.md +85 -85
- package/templates/skills/documentation/SKILL.md +132 -132
- package/templates/skills/documentation/data-schema.md +227 -227
- package/templates/skills/documentation/steps/step-00-init.md +70 -70
- package/templates/skills/documentation/steps/step-01-scan.md +113 -113
- package/templates/skills/documentation/steps/step-02-generate.md +231 -231
- package/templates/skills/documentation/steps/step-03-validate.md +251 -238
- package/templates/skills/documentation/templates.md +662 -663
- package/templates/skills/efcore/SKILL.md +167 -167
- package/templates/skills/efcore/references/both-contexts.md +32 -32
- package/templates/skills/efcore/references/database-operations.md +67 -67
- package/templates/skills/efcore/references/destructive-operations.md +38 -38
- package/templates/skills/efcore/references/reset-operations.md +81 -81
- package/templates/skills/efcore/references/seed-methods.md +86 -86
- package/templates/skills/efcore/references/shared-init-functions.md +250 -250
- package/templates/skills/efcore/references/sql-objects-injection.md +61 -61
- package/templates/skills/efcore/references/troubleshooting.md +81 -81
- package/templates/skills/efcore/references/zero-downtime-patterns.md +227 -227
- package/templates/skills/efcore/steps/db/step-deploy.md +217 -217
- package/templates/skills/efcore/steps/db/step-reset.md +186 -186
- package/templates/skills/efcore/steps/db/step-seed.md +166 -166
- package/templates/skills/efcore/steps/db/step-status.md +173 -173
- package/templates/skills/efcore/steps/migration/step-00-init.md +102 -102
- package/templates/skills/efcore/steps/migration/step-01-check.md +164 -164
- package/templates/skills/efcore/steps/migration/step-02-create.md +160 -160
- package/templates/skills/efcore/steps/migration/step-03-validate.md +168 -168
- package/templates/skills/efcore/steps/rebase-snapshot/step-00-init.md +173 -173
- package/templates/skills/efcore/steps/rebase-snapshot/step-01-backup.md +100 -100
- package/templates/skills/efcore/steps/rebase-snapshot/step-02-fetch.md +115 -115
- package/templates/skills/efcore/steps/rebase-snapshot/step-03-create.md +112 -112
- package/templates/skills/efcore/steps/rebase-snapshot/step-04-validate.md +157 -157
- package/templates/skills/efcore/steps/shared/step-00-init.md +131 -131
- package/templates/skills/efcore/steps/squash/step-00-init.md +141 -141
- package/templates/skills/efcore/steps/squash/step-01-backup.md +120 -120
- package/templates/skills/efcore/steps/squash/step-02-fetch.md +168 -168
- package/templates/skills/efcore/steps/squash/step-03-create.md +184 -184
- package/templates/skills/efcore/steps/squash/step-04-validate.md +174 -174
- package/templates/skills/explore/SKILL.md +98 -98
- package/templates/skills/feature-full/SKILL.md +111 -111
- package/templates/skills/feature-full/steps/step-00-init.md +57 -57
- package/templates/skills/feature-full/steps/step-01-implementation.md +120 -120
- package/templates/skills/gitflow/SKILL.md +377 -377
- package/templates/skills/gitflow/_shared.md +620 -620
- package/templates/skills/gitflow/phases/abort.md +189 -189
- package/templates/skills/gitflow/phases/cleanup.md +234 -234
- package/templates/skills/gitflow/phases/status.md +192 -192
- package/templates/skills/gitflow/references/commit-message-generation.md +58 -58
- package/templates/skills/gitflow/references/commit-migration-validation.md +49 -49
- package/templates/skills/gitflow/references/finish-cleanup.md +55 -55
- package/templates/skills/gitflow/references/finish-version-bumping.md +45 -45
- package/templates/skills/gitflow/references/init-config-template.md +135 -135
- package/templates/skills/gitflow/references/init-environment-detection.md +41 -41
- package/templates/skills/gitflow/references/init-name-normalization.md +103 -103
- package/templates/skills/gitflow/references/init-questions.md +185 -185
- package/templates/skills/gitflow/references/init-structure-creation.md +75 -75
- package/templates/skills/gitflow/references/init-version-detection.md +21 -21
- package/templates/skills/gitflow/references/init-workspace-detection.md +43 -43
- package/templates/skills/gitflow/references/merge-ci-status.md +36 -36
- package/templates/skills/gitflow/references/merge-execution.md +62 -62
- package/templates/skills/gitflow/references/merge-pr-context.md +76 -76
- package/templates/skills/gitflow/references/plan-template.md +69 -69
- package/templates/skills/gitflow/references/pr-build-checks.md +60 -60
- package/templates/skills/gitflow/references/pr-generation.md +58 -58
- package/templates/skills/gitflow/references/start-branch-normalization.md +28 -28
- package/templates/skills/gitflow/references/start-efcore-preflight.md +70 -70
- package/templates/skills/gitflow/references/start-local-config.md +113 -113
- package/templates/skills/gitflow/references/start-worktree-creation.md +50 -50
- package/templates/skills/gitflow/references/sync-push-verify.md +44 -44
- package/templates/skills/gitflow/references/sync-rebase-conflicts.md +38 -38
- package/templates/skills/gitflow/steps/step-commit.md +199 -199
- package/templates/skills/gitflow/steps/step-finish.md +147 -147
- package/templates/skills/gitflow/steps/step-init.md +190 -190
- package/templates/skills/gitflow/steps/step-merge.md +85 -85
- package/templates/skills/gitflow/steps/step-plan.md +151 -151
- package/templates/skills/gitflow/steps/step-pr.md +199 -199
- package/templates/skills/gitflow/steps/step-start.md +195 -195
- package/templates/skills/gitflow/steps/step-sync.md +161 -161
- package/templates/skills/gitflow/templates/config.json +72 -72
- package/templates/skills/mcp/SKILL.md +62 -62
- package/templates/skills/mcp/steps/step-01-healthcheck.md +108 -108
- package/templates/skills/mcp/steps/step-02-tools.md +73 -73
- package/templates/skills/notification/SKILL.md +173 -173
- package/templates/skills/quick-search/SKILL.md +99 -99
- package/templates/skills/ralph-loop/SKILL.md +234 -234
- package/templates/skills/ralph-loop/references/category-completeness.md +185 -185
- package/templates/skills/ralph-loop/references/category-rules.md +96 -96
- package/templates/skills/ralph-loop/references/compact-loop.md +300 -300
- package/templates/skills/ralph-loop/references/init-resume-recovery.md +127 -127
- package/templates/skills/ralph-loop/references/module-transition.md +151 -151
- package/templates/skills/ralph-loop/references/multi-module-queue.md +171 -171
- package/templates/skills/ralph-loop/references/parallel-execution.md +246 -246
- package/templates/skills/ralph-loop/references/section-splitting.md +439 -439
- package/templates/skills/ralph-loop/references/task-transform-legacy.md +256 -256
- package/templates/skills/ralph-loop/references/team-orchestration.md +547 -547
- package/templates/skills/ralph-loop/steps/step-00-init.md +150 -150
- package/templates/skills/ralph-loop/steps/step-01-task.md +174 -174
- package/templates/skills/ralph-loop/steps/step-02-execute.md +177 -177
- package/templates/skills/ralph-loop/steps/step-03-commit.md +92 -92
- package/templates/skills/ralph-loop/steps/step-04-check.md +207 -207
- package/templates/skills/ralph-loop/steps/step-05-report.md +175 -175
- package/templates/skills/refactor/SKILL.md +56 -56
- package/templates/skills/refactor/steps/step-01-discover.md +60 -60
- package/templates/skills/refactor/steps/step-02-execute.md +67 -67
- package/templates/skills/review-code/SKILL.md +94 -94
- package/templates/skills/review-code/references/clean-code-principles.md +292 -292
- package/templates/skills/review-code/references/code-quality-metrics.md +174 -174
- package/templates/skills/review-code/references/feedback-patterns.md +149 -149
- package/templates/skills/review-code/references/owasp-api-top10.md +243 -243
- package/templates/skills/review-code/references/security-checklist.md +212 -212
- package/templates/skills/review-code/steps/step-01-smartstack.md +96 -96
- package/templates/skills/review-code/steps/step-02-detailed-review.md +80 -80
- package/templates/skills/review-code/steps/step-03-react.md +44 -44
- package/templates/skills/ui-components/SKILL.md +137 -137
- package/templates/skills/ui-components/accessibility.md +170 -170
- package/templates/skills/ui-components/patterns/dashboard-chart.md +327 -327
- package/templates/skills/ui-components/patterns/data-table.md +39 -39
- package/templates/skills/ui-components/patterns/entity-card.md +77 -77
- package/templates/skills/ui-components/patterns/grid-layout.md +91 -91
- package/templates/skills/ui-components/patterns/kanban.md +43 -43
- package/templates/skills/ui-components/responsive-guidelines.md +278 -278
- package/templates/skills/ui-components/style-guide.md +113 -113
- package/templates/skills/utils/SKILL.md +44 -44
- package/templates/skills/utils/subcommands/test-web-config.md +152 -152
- package/templates/skills/utils/subcommands/test-web.md +123 -123
- package/templates/skills/validate/SKILL.md +181 -181
- package/templates/skills/validate-feature/SKILL.md +101 -101
- package/templates/skills/validate-feature/references/api-smoke-tests.md +140 -140
- package/templates/skills/validate-feature/references/db-validation-checks.md +180 -180
- package/templates/skills/validate-feature/steps/step-00-dependencies.md +121 -121
- package/templates/skills/validate-feature/steps/step-01-compile.md +39 -39
- package/templates/skills/validate-feature/steps/step-02-unit-tests.md +45 -45
- package/templates/skills/validate-feature/steps/step-03-integration-tests.md +53 -53
- package/templates/skills/validate-feature/steps/step-04-api-smoke.md +94 -94
- package/templates/skills/validate-feature/steps/step-05-db-validation.md +149 -149
- package/templates/skills/workflow/SKILL.md +127 -127
- package/templates/skills/workflow/steps/step-00-init.md +57 -57
- package/templates/skills/workflow/steps/step-01-implementation.md +84 -84
- package/templates/test-web/api-health.json +38 -38
- package/templates/test-web/minimal.json +19 -19
- package/templates/test-web/npm-package.json +46 -46
- package/templates/test-web/seo-check.json +54 -54
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
# EF Core Troubleshooting
|
|
2
|
-
|
|
3
|
-
## Database Status
|
|
4
|
-
|
|
5
|
-
### Troubleshooting (if connection fails)
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
TROUBLESHOOTING
|
|
9
|
-
├── SQL Server running?
|
|
10
|
-
├── appsettings.Local.json configured?
|
|
11
|
-
├── Database exists?
|
|
12
|
-
└── Commands: /efcore db-reset, /efcore db-deploy
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Deploy Errors
|
|
16
|
-
|
|
17
|
-
| Error | Resolution |
|
|
18
|
-
|-------|------------|
|
|
19
|
-
| Connection failed | Check SQL Server, credentials |
|
|
20
|
-
| Migration error | Review migration, consider reset |
|
|
21
|
-
| Constraint violation | Check data, may need seed |
|
|
22
|
-
|
|
23
|
-
## Reset Protections
|
|
24
|
-
|
|
25
|
-
| Protection | Description |
|
|
26
|
-
|------------|-------------|
|
|
27
|
-
| Env Display | Shows database BEFORE confirmation |
|
|
28
|
-
| Confirmation | Explicit request with database NAME |
|
|
29
|
-
| Production Block | Blocks if Production detected |
|
|
30
|
-
| EF Core Only | No raw SQL |
|
|
31
|
-
|
|
32
|
-
## Seed Setup Guide
|
|
33
|
-
|
|
34
|
-
If no seed methods detected, display guide:
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
SEED SETUP GUIDE
|
|
38
|
-
================
|
|
39
|
-
|
|
40
|
-
Option 1: HasData() in Configuration (RECOMMENDED)
|
|
41
|
-
--------------------------------------------------
|
|
42
|
-
// In UserConfiguration.cs
|
|
43
|
-
builder.HasData(new User {
|
|
44
|
-
Id = Guid.Parse("7f3c9a2e-8d1b-4e5f-a6c8-9b4d2f7e1a3c"),
|
|
45
|
-
Name = "Admin",
|
|
46
|
-
Email = "admin@example.com"
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
// Then run:
|
|
50
|
-
dotnet ef migrations add SeedData
|
|
51
|
-
|
|
52
|
-
Option 2: IDataSeeder Class
|
|
53
|
-
---------------------------
|
|
54
|
-
public class UserSeeder : IDataSeeder
|
|
55
|
-
{
|
|
56
|
-
public async Task SeedAsync(DbContext context)
|
|
57
|
-
{
|
|
58
|
-
if (!await context.Users.AnyAsync())
|
|
59
|
-
{
|
|
60
|
-
context.Users.Add(new User { ... });
|
|
61
|
-
await context.SaveChangesAsync();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// Register in Program.cs and call via --seed argument
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## Migration from SQL
|
|
70
|
-
|
|
71
|
-
```csharp
|
|
72
|
-
// BEFORE (FORBIDDEN): scripts/seed.sql
|
|
73
|
-
INSERT INTO Users (Id, Name) VALUES (1, 'Admin');
|
|
74
|
-
|
|
75
|
-
// AFTER (CORRECT): UserConfiguration.cs
|
|
76
|
-
builder.HasData(new User {
|
|
77
|
-
Id = Guid.Parse("7f3c9a2e-8d1b-4e5f-a6c8-9b4d2f7e1a3c"),
|
|
78
|
-
Name = "Admin"
|
|
79
|
-
});
|
|
80
|
-
// Then: dotnet ef migrations add SeedData
|
|
81
|
-
```
|
|
1
|
+
# EF Core Troubleshooting
|
|
2
|
+
|
|
3
|
+
## Database Status
|
|
4
|
+
|
|
5
|
+
### Troubleshooting (if connection fails)
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
TROUBLESHOOTING
|
|
9
|
+
├── SQL Server running?
|
|
10
|
+
├── appsettings.Local.json configured?
|
|
11
|
+
├── Database exists?
|
|
12
|
+
└── Commands: /efcore db-reset, /efcore db-deploy
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Deploy Errors
|
|
16
|
+
|
|
17
|
+
| Error | Resolution |
|
|
18
|
+
|-------|------------|
|
|
19
|
+
| Connection failed | Check SQL Server, credentials |
|
|
20
|
+
| Migration error | Review migration, consider reset |
|
|
21
|
+
| Constraint violation | Check data, may need seed |
|
|
22
|
+
|
|
23
|
+
## Reset Protections
|
|
24
|
+
|
|
25
|
+
| Protection | Description |
|
|
26
|
+
|------------|-------------|
|
|
27
|
+
| Env Display | Shows database BEFORE confirmation |
|
|
28
|
+
| Confirmation | Explicit request with database NAME |
|
|
29
|
+
| Production Block | Blocks if Production detected |
|
|
30
|
+
| EF Core Only | No raw SQL |
|
|
31
|
+
|
|
32
|
+
## Seed Setup Guide
|
|
33
|
+
|
|
34
|
+
If no seed methods detected, display guide:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
SEED SETUP GUIDE
|
|
38
|
+
================
|
|
39
|
+
|
|
40
|
+
Option 1: HasData() in Configuration (RECOMMENDED)
|
|
41
|
+
--------------------------------------------------
|
|
42
|
+
// In UserConfiguration.cs
|
|
43
|
+
builder.HasData(new User {
|
|
44
|
+
Id = Guid.Parse("7f3c9a2e-8d1b-4e5f-a6c8-9b4d2f7e1a3c"),
|
|
45
|
+
Name = "Admin",
|
|
46
|
+
Email = "admin@example.com"
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// Then run:
|
|
50
|
+
dotnet ef migrations add SeedData
|
|
51
|
+
|
|
52
|
+
Option 2: IDataSeeder Class
|
|
53
|
+
---------------------------
|
|
54
|
+
public class UserSeeder : IDataSeeder
|
|
55
|
+
{
|
|
56
|
+
public async Task SeedAsync(DbContext context)
|
|
57
|
+
{
|
|
58
|
+
if (!await context.Users.AnyAsync())
|
|
59
|
+
{
|
|
60
|
+
context.Users.Add(new User { ... });
|
|
61
|
+
await context.SaveChangesAsync();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Register in Program.cs and call via --seed argument
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Migration from SQL
|
|
70
|
+
|
|
71
|
+
```csharp
|
|
72
|
+
// BEFORE (FORBIDDEN): scripts/seed.sql
|
|
73
|
+
INSERT INTO Users (Id, Name) VALUES (1, 'Admin');
|
|
74
|
+
|
|
75
|
+
// AFTER (CORRECT): UserConfiguration.cs
|
|
76
|
+
builder.HasData(new User {
|
|
77
|
+
Id = Guid.Parse("7f3c9a2e-8d1b-4e5f-a6c8-9b4d2f7e1a3c"),
|
|
78
|
+
Name = "Admin"
|
|
79
|
+
});
|
|
80
|
+
// Then: dotnet ef migrations add SeedData
|
|
81
|
+
```
|
|
@@ -1,227 +1,227 @@
|
|
|
1
|
-
<overview>
|
|
2
|
-
Zero-downtime migration patterns for EF Core. Use when a migration contains destructive operations (column rename, type change, column drop) that could cause downtime during deployment.
|
|
3
|
-
|
|
4
|
-
These patterns apply to production deployments where the application runs continuously. For development environments, standard migrations are sufficient.
|
|
5
|
-
</overview>
|
|
6
|
-
|
|
7
|
-
<when_to_use>
|
|
8
|
-
## When These Patterns Apply
|
|
9
|
-
|
|
10
|
-
**Destructive operations requiring zero-downtime strategy:**
|
|
11
|
-
- `RenameColumn` / `RenameTable`
|
|
12
|
-
- `DropColumn` / `DropTable`
|
|
13
|
-
- `AlterColumn` (type change, nullability change)
|
|
14
|
-
|
|
15
|
-
**Safe operations (no special handling needed):**
|
|
16
|
-
- `AddColumn` (nullable or with default value)
|
|
17
|
-
- `CreateTable`
|
|
18
|
-
- `CreateIndex`
|
|
19
|
-
- `AddForeignKey`
|
|
20
|
-
</when_to_use>
|
|
21
|
-
|
|
22
|
-
<column_rename>
|
|
23
|
-
## Pattern 1: Column Rename (5 phases)
|
|
24
|
-
|
|
25
|
-
A column rename cannot be done atomically without downtime. Use a phased approach across multiple deployments.
|
|
26
|
-
|
|
27
|
-
### Phase 1 - Add New Column (Migration 1)
|
|
28
|
-
```csharp
|
|
29
|
-
protected override void Up(MigrationBuilder migrationBuilder)
|
|
30
|
-
{
|
|
31
|
-
migrationBuilder.AddColumn<string>(
|
|
32
|
-
name: "FullName",
|
|
33
|
-
table: "auth_users",
|
|
34
|
-
schema: "core",
|
|
35
|
-
type: "nvarchar(256)",
|
|
36
|
-
nullable: true); // Must be nullable initially
|
|
37
|
-
|
|
38
|
-
// Backfill existing data
|
|
39
|
-
migrationBuilder.Sql(
|
|
40
|
-
"UPDATE core.auth_users SET FullName = DisplayName WHERE FullName IS NULL");
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
protected override void Down(MigrationBuilder migrationBuilder)
|
|
44
|
-
{
|
|
45
|
-
migrationBuilder.DropColumn(name: "FullName", table: "auth_users", schema: "core");
|
|
46
|
-
}
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### Phase 2 - Dual-Write Code (Application deployment)
|
|
50
|
-
```csharp
|
|
51
|
-
// Entity writes to BOTH columns during transition
|
|
52
|
-
public void UpdateName(string name)
|
|
53
|
-
{
|
|
54
|
-
DisplayName = name; // Old column
|
|
55
|
-
FullName = name; // New column
|
|
56
|
-
}
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### Phase 3 - Backfill Remaining Data (Migration 2, optional)
|
|
60
|
-
```csharp
|
|
61
|
-
protected override void Up(MigrationBuilder migrationBuilder)
|
|
62
|
-
{
|
|
63
|
-
// Catch any rows missed during dual-write transition
|
|
64
|
-
migrationBuilder.Sql(
|
|
65
|
-
"UPDATE core.auth_users SET FullName = DisplayName WHERE FullName IS NULL");
|
|
66
|
-
|
|
67
|
-
// Make new column non-nullable
|
|
68
|
-
migrationBuilder.AlterColumn<string>(
|
|
69
|
-
name: "FullName",
|
|
70
|
-
table: "auth_users",
|
|
71
|
-
schema: "core",
|
|
72
|
-
type: "nvarchar(256)",
|
|
73
|
-
nullable: false,
|
|
74
|
-
defaultValue: "");
|
|
75
|
-
}
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### Phase 4 - Switch Reads (Application deployment)
|
|
79
|
-
```csharp
|
|
80
|
-
// Entity now reads from new column only
|
|
81
|
-
public string Name => FullName;
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
### Phase 5 - Drop Old Column (Migration 3)
|
|
85
|
-
```csharp
|
|
86
|
-
protected override void Up(MigrationBuilder migrationBuilder)
|
|
87
|
-
{
|
|
88
|
-
migrationBuilder.DropColumn(name: "DisplayName", table: "auth_users", schema: "core");
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
protected override void Down(MigrationBuilder migrationBuilder)
|
|
92
|
-
{
|
|
93
|
-
migrationBuilder.AddColumn<string>(
|
|
94
|
-
name: "DisplayName",
|
|
95
|
-
table: "auth_users",
|
|
96
|
-
schema: "core",
|
|
97
|
-
type: "nvarchar(256)",
|
|
98
|
-
nullable: false,
|
|
99
|
-
defaultValue: "");
|
|
100
|
-
|
|
101
|
-
migrationBuilder.Sql(
|
|
102
|
-
"UPDATE core.auth_users SET DisplayName = FullName");
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
</column_rename>
|
|
106
|
-
|
|
107
|
-
<column_type_change>
|
|
108
|
-
## Pattern 2: Column Type Change (4 phases)
|
|
109
|
-
|
|
110
|
-
Changing a column type (e.g., `int` to `string`, `string` to `decimal`) follows the same dual-column approach.
|
|
111
|
-
|
|
112
|
-
### Phase 1 - Add New Typed Column
|
|
113
|
-
```csharp
|
|
114
|
-
protected override void Up(MigrationBuilder migrationBuilder)
|
|
115
|
-
{
|
|
116
|
-
migrationBuilder.AddColumn<decimal>(
|
|
117
|
-
name: "PriceDecimal",
|
|
118
|
-
table: "extensions_products",
|
|
119
|
-
schema: "extensions",
|
|
120
|
-
type: "decimal(18,2)",
|
|
121
|
-
nullable: true);
|
|
122
|
-
|
|
123
|
-
migrationBuilder.Sql(
|
|
124
|
-
"UPDATE extensions.extensions_products SET PriceDecimal = CAST(Price AS decimal(18,2))");
|
|
125
|
-
}
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### Phase 2 - Dual-Write in Code
|
|
129
|
-
### Phase 3 - Make Non-Nullable + Switch Reads
|
|
130
|
-
### Phase 4 - Drop Old Column
|
|
131
|
-
|
|
132
|
-
Same phased pattern as column rename.
|
|
133
|
-
</column_type_change>
|
|
134
|
-
|
|
135
|
-
<large_table_operations>
|
|
136
|
-
## Pattern 3: Large Table Backfill
|
|
137
|
-
|
|
138
|
-
For tables with millions of rows, batch the backfill to avoid lock escalation.
|
|
139
|
-
|
|
140
|
-
```csharp
|
|
141
|
-
protected override void Up(MigrationBuilder migrationBuilder)
|
|
142
|
-
{
|
|
143
|
-
migrationBuilder.AddColumn<string>(
|
|
144
|
-
name: "NormalizedEmail",
|
|
145
|
-
table: "auth_users",
|
|
146
|
-
schema: "core",
|
|
147
|
-
type: "nvarchar(256)",
|
|
148
|
-
nullable: true);
|
|
149
|
-
|
|
150
|
-
// Batched backfill to avoid table locks
|
|
151
|
-
migrationBuilder.Sql(@"
|
|
152
|
-
DECLARE @BatchSize INT = 5000;
|
|
153
|
-
DECLARE @RowsAffected INT = 1;
|
|
154
|
-
|
|
155
|
-
WHILE @RowsAffected > 0
|
|
156
|
-
BEGIN
|
|
157
|
-
UPDATE TOP (@BatchSize) core.auth_users
|
|
158
|
-
SET NormalizedEmail = UPPER(Email)
|
|
159
|
-
WHERE NormalizedEmail IS NULL;
|
|
160
|
-
|
|
161
|
-
SET @RowsAffected = @@ROWCOUNT;
|
|
162
|
-
END
|
|
163
|
-
");
|
|
164
|
-
}
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
**Rules:**
|
|
168
|
-
- Batch size: 1,000-10,000 rows depending on table width
|
|
169
|
-
- Always include a `WHERE` clause to avoid re-processing
|
|
170
|
-
- Monitor transaction log growth during execution
|
|
171
|
-
- Run during low-traffic windows if possible
|
|
172
|
-
</large_table_operations>
|
|
173
|
-
|
|
174
|
-
<rollback_strategy>
|
|
175
|
-
## Rollback Strategies
|
|
176
|
-
|
|
177
|
-
### Migration Down() Method
|
|
178
|
-
Every migration MUST have a functional `Down()` method for rollback:
|
|
179
|
-
|
|
180
|
-
```csharp
|
|
181
|
-
protected override void Down(MigrationBuilder migrationBuilder)
|
|
182
|
-
{
|
|
183
|
-
// Reverse the operation
|
|
184
|
-
migrationBuilder.DropColumn(name: "NewColumn", table: "auth_users", schema: "core");
|
|
185
|
-
}
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
### Rollback Command
|
|
189
|
-
```bash
|
|
190
|
-
# Rollback to specific migration
|
|
191
|
-
dotnet ef database update {PreviousMigrationName} \
|
|
192
|
-
--context $DBCONTEXT \
|
|
193
|
-
--project $INFRA_PROJECT \
|
|
194
|
-
--startup-project $STARTUP_PROJECT
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
### Pre-Deployment Checklist
|
|
198
|
-
- [ ] `Down()` method tested locally
|
|
199
|
-
- [ ] Database backup taken before deployment
|
|
200
|
-
- [ ] Application compatible with both old and new schema (dual-write phase)
|
|
201
|
-
- [ ] Rollback procedure documented in deployment notes
|
|
202
|
-
- [ ] Monitoring alerts configured for error spike
|
|
203
|
-
</rollback_strategy>
|
|
204
|
-
|
|
205
|
-
<decision_guide>
|
|
206
|
-
## Decision Guide
|
|
207
|
-
|
|
208
|
-
| Operation | Risk | Strategy |
|
|
209
|
-
|-----------|------|----------|
|
|
210
|
-
| Add nullable column | Low | Standard migration |
|
|
211
|
-
| Add column with default | Low | Standard migration |
|
|
212
|
-
| Create table | Low | Standard migration |
|
|
213
|
-
| Create index | Medium | `CREATE INDEX CONCURRENTLY` if supported |
|
|
214
|
-
| Rename column | High | 5-phase pattern |
|
|
215
|
-
| Change column type | High | 4-phase pattern |
|
|
216
|
-
| Drop column | High | Verify no reads, then drop |
|
|
217
|
-
| Drop table | High | Verify no references, then drop |
|
|
218
|
-
| Make column non-nullable | Medium | Ensure no NULL values exist first |
|
|
219
|
-
|
|
220
|
-
**Rule of thumb:** If the operation would cause a `SqlException` on running code, use a phased approach.
|
|
221
|
-
</decision_guide>
|
|
222
|
-
|
|
223
|
-
<sources>
|
|
224
|
-
- EF Core Migrations documentation
|
|
225
|
-
- Zero-Downtime Deployments with EF Core (Microsoft patterns)
|
|
226
|
-
- Blue-Green Deployment pattern (Martin Fowler)
|
|
227
|
-
</sources>
|
|
1
|
+
<overview>
|
|
2
|
+
Zero-downtime migration patterns for EF Core. Use when a migration contains destructive operations (column rename, type change, column drop) that could cause downtime during deployment.
|
|
3
|
+
|
|
4
|
+
These patterns apply to production deployments where the application runs continuously. For development environments, standard migrations are sufficient.
|
|
5
|
+
</overview>
|
|
6
|
+
|
|
7
|
+
<when_to_use>
|
|
8
|
+
## When These Patterns Apply
|
|
9
|
+
|
|
10
|
+
**Destructive operations requiring zero-downtime strategy:**
|
|
11
|
+
- `RenameColumn` / `RenameTable`
|
|
12
|
+
- `DropColumn` / `DropTable`
|
|
13
|
+
- `AlterColumn` (type change, nullability change)
|
|
14
|
+
|
|
15
|
+
**Safe operations (no special handling needed):**
|
|
16
|
+
- `AddColumn` (nullable or with default value)
|
|
17
|
+
- `CreateTable`
|
|
18
|
+
- `CreateIndex`
|
|
19
|
+
- `AddForeignKey`
|
|
20
|
+
</when_to_use>
|
|
21
|
+
|
|
22
|
+
<column_rename>
|
|
23
|
+
## Pattern 1: Column Rename (5 phases)
|
|
24
|
+
|
|
25
|
+
A column rename cannot be done atomically without downtime. Use a phased approach across multiple deployments.
|
|
26
|
+
|
|
27
|
+
### Phase 1 - Add New Column (Migration 1)
|
|
28
|
+
```csharp
|
|
29
|
+
protected override void Up(MigrationBuilder migrationBuilder)
|
|
30
|
+
{
|
|
31
|
+
migrationBuilder.AddColumn<string>(
|
|
32
|
+
name: "FullName",
|
|
33
|
+
table: "auth_users",
|
|
34
|
+
schema: "core",
|
|
35
|
+
type: "nvarchar(256)",
|
|
36
|
+
nullable: true); // Must be nullable initially
|
|
37
|
+
|
|
38
|
+
// Backfill existing data
|
|
39
|
+
migrationBuilder.Sql(
|
|
40
|
+
"UPDATE core.auth_users SET FullName = DisplayName WHERE FullName IS NULL");
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
protected override void Down(MigrationBuilder migrationBuilder)
|
|
44
|
+
{
|
|
45
|
+
migrationBuilder.DropColumn(name: "FullName", table: "auth_users", schema: "core");
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Phase 2 - Dual-Write Code (Application deployment)
|
|
50
|
+
```csharp
|
|
51
|
+
// Entity writes to BOTH columns during transition
|
|
52
|
+
public void UpdateName(string name)
|
|
53
|
+
{
|
|
54
|
+
DisplayName = name; // Old column
|
|
55
|
+
FullName = name; // New column
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Phase 3 - Backfill Remaining Data (Migration 2, optional)
|
|
60
|
+
```csharp
|
|
61
|
+
protected override void Up(MigrationBuilder migrationBuilder)
|
|
62
|
+
{
|
|
63
|
+
// Catch any rows missed during dual-write transition
|
|
64
|
+
migrationBuilder.Sql(
|
|
65
|
+
"UPDATE core.auth_users SET FullName = DisplayName WHERE FullName IS NULL");
|
|
66
|
+
|
|
67
|
+
// Make new column non-nullable
|
|
68
|
+
migrationBuilder.AlterColumn<string>(
|
|
69
|
+
name: "FullName",
|
|
70
|
+
table: "auth_users",
|
|
71
|
+
schema: "core",
|
|
72
|
+
type: "nvarchar(256)",
|
|
73
|
+
nullable: false,
|
|
74
|
+
defaultValue: "");
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Phase 4 - Switch Reads (Application deployment)
|
|
79
|
+
```csharp
|
|
80
|
+
// Entity now reads from new column only
|
|
81
|
+
public string Name => FullName;
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Phase 5 - Drop Old Column (Migration 3)
|
|
85
|
+
```csharp
|
|
86
|
+
protected override void Up(MigrationBuilder migrationBuilder)
|
|
87
|
+
{
|
|
88
|
+
migrationBuilder.DropColumn(name: "DisplayName", table: "auth_users", schema: "core");
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
protected override void Down(MigrationBuilder migrationBuilder)
|
|
92
|
+
{
|
|
93
|
+
migrationBuilder.AddColumn<string>(
|
|
94
|
+
name: "DisplayName",
|
|
95
|
+
table: "auth_users",
|
|
96
|
+
schema: "core",
|
|
97
|
+
type: "nvarchar(256)",
|
|
98
|
+
nullable: false,
|
|
99
|
+
defaultValue: "");
|
|
100
|
+
|
|
101
|
+
migrationBuilder.Sql(
|
|
102
|
+
"UPDATE core.auth_users SET DisplayName = FullName");
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
</column_rename>
|
|
106
|
+
|
|
107
|
+
<column_type_change>
|
|
108
|
+
## Pattern 2: Column Type Change (4 phases)
|
|
109
|
+
|
|
110
|
+
Changing a column type (e.g., `int` to `string`, `string` to `decimal`) follows the same dual-column approach.
|
|
111
|
+
|
|
112
|
+
### Phase 1 - Add New Typed Column
|
|
113
|
+
```csharp
|
|
114
|
+
protected override void Up(MigrationBuilder migrationBuilder)
|
|
115
|
+
{
|
|
116
|
+
migrationBuilder.AddColumn<decimal>(
|
|
117
|
+
name: "PriceDecimal",
|
|
118
|
+
table: "extensions_products",
|
|
119
|
+
schema: "extensions",
|
|
120
|
+
type: "decimal(18,2)",
|
|
121
|
+
nullable: true);
|
|
122
|
+
|
|
123
|
+
migrationBuilder.Sql(
|
|
124
|
+
"UPDATE extensions.extensions_products SET PriceDecimal = CAST(Price AS decimal(18,2))");
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Phase 2 - Dual-Write in Code
|
|
129
|
+
### Phase 3 - Make Non-Nullable + Switch Reads
|
|
130
|
+
### Phase 4 - Drop Old Column
|
|
131
|
+
|
|
132
|
+
Same phased pattern as column rename.
|
|
133
|
+
</column_type_change>
|
|
134
|
+
|
|
135
|
+
<large_table_operations>
|
|
136
|
+
## Pattern 3: Large Table Backfill
|
|
137
|
+
|
|
138
|
+
For tables with millions of rows, batch the backfill to avoid lock escalation.
|
|
139
|
+
|
|
140
|
+
```csharp
|
|
141
|
+
protected override void Up(MigrationBuilder migrationBuilder)
|
|
142
|
+
{
|
|
143
|
+
migrationBuilder.AddColumn<string>(
|
|
144
|
+
name: "NormalizedEmail",
|
|
145
|
+
table: "auth_users",
|
|
146
|
+
schema: "core",
|
|
147
|
+
type: "nvarchar(256)",
|
|
148
|
+
nullable: true);
|
|
149
|
+
|
|
150
|
+
// Batched backfill to avoid table locks
|
|
151
|
+
migrationBuilder.Sql(@"
|
|
152
|
+
DECLARE @BatchSize INT = 5000;
|
|
153
|
+
DECLARE @RowsAffected INT = 1;
|
|
154
|
+
|
|
155
|
+
WHILE @RowsAffected > 0
|
|
156
|
+
BEGIN
|
|
157
|
+
UPDATE TOP (@BatchSize) core.auth_users
|
|
158
|
+
SET NormalizedEmail = UPPER(Email)
|
|
159
|
+
WHERE NormalizedEmail IS NULL;
|
|
160
|
+
|
|
161
|
+
SET @RowsAffected = @@ROWCOUNT;
|
|
162
|
+
END
|
|
163
|
+
");
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Rules:**
|
|
168
|
+
- Batch size: 1,000-10,000 rows depending on table width
|
|
169
|
+
- Always include a `WHERE` clause to avoid re-processing
|
|
170
|
+
- Monitor transaction log growth during execution
|
|
171
|
+
- Run during low-traffic windows if possible
|
|
172
|
+
</large_table_operations>
|
|
173
|
+
|
|
174
|
+
<rollback_strategy>
|
|
175
|
+
## Rollback Strategies
|
|
176
|
+
|
|
177
|
+
### Migration Down() Method
|
|
178
|
+
Every migration MUST have a functional `Down()` method for rollback:
|
|
179
|
+
|
|
180
|
+
```csharp
|
|
181
|
+
protected override void Down(MigrationBuilder migrationBuilder)
|
|
182
|
+
{
|
|
183
|
+
// Reverse the operation
|
|
184
|
+
migrationBuilder.DropColumn(name: "NewColumn", table: "auth_users", schema: "core");
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Rollback Command
|
|
189
|
+
```bash
|
|
190
|
+
# Rollback to specific migration
|
|
191
|
+
dotnet ef database update {PreviousMigrationName} \
|
|
192
|
+
--context $DBCONTEXT \
|
|
193
|
+
--project $INFRA_PROJECT \
|
|
194
|
+
--startup-project $STARTUP_PROJECT
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Pre-Deployment Checklist
|
|
198
|
+
- [ ] `Down()` method tested locally
|
|
199
|
+
- [ ] Database backup taken before deployment
|
|
200
|
+
- [ ] Application compatible with both old and new schema (dual-write phase)
|
|
201
|
+
- [ ] Rollback procedure documented in deployment notes
|
|
202
|
+
- [ ] Monitoring alerts configured for error spike
|
|
203
|
+
</rollback_strategy>
|
|
204
|
+
|
|
205
|
+
<decision_guide>
|
|
206
|
+
## Decision Guide
|
|
207
|
+
|
|
208
|
+
| Operation | Risk | Strategy |
|
|
209
|
+
|-----------|------|----------|
|
|
210
|
+
| Add nullable column | Low | Standard migration |
|
|
211
|
+
| Add column with default | Low | Standard migration |
|
|
212
|
+
| Create table | Low | Standard migration |
|
|
213
|
+
| Create index | Medium | `CREATE INDEX CONCURRENTLY` if supported |
|
|
214
|
+
| Rename column | High | 5-phase pattern |
|
|
215
|
+
| Change column type | High | 4-phase pattern |
|
|
216
|
+
| Drop column | High | Verify no reads, then drop |
|
|
217
|
+
| Drop table | High | Verify no references, then drop |
|
|
218
|
+
| Make column non-nullable | Medium | Ensure no NULL values exist first |
|
|
219
|
+
|
|
220
|
+
**Rule of thumb:** If the operation would cause a `SqlException` on running code, use a phased approach.
|
|
221
|
+
</decision_guide>
|
|
222
|
+
|
|
223
|
+
<sources>
|
|
224
|
+
- EF Core Migrations documentation
|
|
225
|
+
- Zero-Downtime Deployments with EF Core (Microsoft patterns)
|
|
226
|
+
- Blue-Green Deployment pattern (Martin Fowler)
|
|
227
|
+
</sources>
|