@atlashub/smartstack-cli 3.39.0 → 3.41.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 +6 -3
- 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 +95 -84
- package/templates/agents/efcore/db-deploy.md +85 -74
- package/templates/agents/efcore/db-reset.md +96 -85
- package/templates/agents/efcore/db-seed.md +72 -61
- package/templates/agents/efcore/db-status.md +97 -86
- package/templates/agents/efcore/migration.md +197 -186
- package/templates/agents/efcore/rebase-snapshot.md +119 -108
- package/templates/agents/efcore/scan.md +103 -92
- package/templates/agents/efcore/squash.md +172 -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 +168 -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 +95 -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,177 +1,177 @@
|
|
|
1
|
-
# IClientSeedDataProvider Template
|
|
2
|
-
|
|
3
|
-
> Referenced from `steps/step-03b-provider.md` — C# template for client project seed data providers.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Provider Class Template
|
|
8
|
-
|
|
9
|
-
**Location:** `Infrastructure/Persistence/Seeding/{AppPascalName}SeedDataProvider.cs`
|
|
10
|
-
|
|
11
|
-
Where `{AppPascalName}` is derived from the application code (e.g., `free-bike` → `FreeBike`).
|
|
12
|
-
|
|
13
|
-
```csharp
|
|
14
|
-
using Microsoft.EntityFrameworkCore;
|
|
15
|
-
using SmartStack.Application.Common.Interfaces;
|
|
16
|
-
using SmartStack.Domain.Navigation;
|
|
17
|
-
using SmartStack.Domain.Platform.Administration.Roles;
|
|
18
|
-
|
|
19
|
-
namespace {BaseNamespace}.Infrastructure.Persistence.Seeding;
|
|
20
|
-
|
|
21
|
-
/// <summary>
|
|
22
|
-
/// Seeds {AppLabel} navigation, roles, permissions, and role-permission data
|
|
23
|
-
/// into the SmartStack Core schema at application startup.
|
|
24
|
-
/// Implements <see cref="IClientSeedDataProvider"/> for runtime seeding
|
|
25
|
-
/// (no Core migrations required).
|
|
26
|
-
/// </summary>
|
|
27
|
-
public class {AppPascalName}SeedDataProvider : IClientSeedDataProvider
|
|
28
|
-
{
|
|
29
|
-
public int Order => 100;
|
|
30
|
-
|
|
31
|
-
public async Task SeedNavigationAsync(ICoreDbContext context, CancellationToken ct)
|
|
32
|
-
{
|
|
33
|
-
// --- Application (idempotent — reuse if already exists) ---
|
|
34
|
-
var appEntry = NavigationApplicationSeedData.GetApplicationEntry();
|
|
35
|
-
var existingApp = await context.NavigationApplications
|
|
36
|
-
.FirstOrDefaultAsync(a => a.Code == appEntry.Code, ct);
|
|
37
|
-
|
|
38
|
-
NavigationApplication app;
|
|
39
|
-
if (existingApp != null)
|
|
40
|
-
{
|
|
41
|
-
app = existingApp; // Reuse existing for module seeding below
|
|
42
|
-
}
|
|
43
|
-
else
|
|
44
|
-
{
|
|
45
|
-
app = NavigationApplication.Create(
|
|
46
|
-
appEntry.Code, appEntry.Label,
|
|
47
|
-
appEntry.Description, appEntry.Icon, appEntry.IconType,
|
|
48
|
-
appEntry.Route, appEntry.DisplayOrder);
|
|
49
|
-
context.NavigationApplications.Add(app);
|
|
50
|
-
await ((DbContext)context).SaveChangesAsync(ct);
|
|
51
|
-
|
|
52
|
-
// Application translations (only when creating new application)
|
|
53
|
-
foreach (var t in NavigationApplicationSeedData.GetTranslationEntries())
|
|
54
|
-
{
|
|
55
|
-
context.NavigationTranslations.Add(
|
|
56
|
-
NavigationTranslation.Create(t.EntityType, t.EntityId, t.LanguageCode, t.Label, t.Description));
|
|
57
|
-
}
|
|
58
|
-
await ((DbContext)context).SaveChangesAsync(ct);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// --- Modules (idempotent per-module) ---
|
|
62
|
-
// var mod1Exists = await context.NavigationModules.AnyAsync(
|
|
63
|
-
// m => m.Code == "{module_code}" && m.ApplicationId == app.Id, ct);
|
|
64
|
-
// if (!mod1Exists) { context.NavigationModules.Add(NavigationModule.Create(...)); }
|
|
65
|
-
// Repeat per module...
|
|
66
|
-
await ((DbContext)context).SaveChangesAsync(ct);
|
|
67
|
-
|
|
68
|
-
// Resolve module entities
|
|
69
|
-
// var mod1Entity = await context.NavigationModules.FirstAsync(
|
|
70
|
-
// m => m.Code == "{module_code}" && m.ApplicationId == app.Id, ct);
|
|
71
|
-
|
|
72
|
-
// --- Module translations (IDEMPOTENT — check before inserting) ---
|
|
73
|
-
// CRITICAL: nav_Translations has unique index IX_nav_Translations_EntityType_EntityId_LanguageCode
|
|
74
|
-
// Always guard with AnyAsync to prevent duplicate key errors on re-runs.
|
|
75
|
-
// if (!await context.NavigationTranslations.AnyAsync(
|
|
76
|
-
// t => t.EntityId == {Module}NavigationSeedData.{Module}ModuleId
|
|
77
|
-
// && t.EntityType == NavigationEntityType.Module, ct))
|
|
78
|
-
// { foreach (var t in {Module}NavigationSeedData.GetTranslationEntries()) { ... } }
|
|
79
|
-
await ((DbContext)context).SaveChangesAsync(ct);
|
|
80
|
-
|
|
81
|
-
// --- Sections (idempotent per-section) ---
|
|
82
|
-
// Check each section before inserting: AnyAsync(s => s.Code == secEntry.Code && s.ModuleId == ...)
|
|
83
|
-
|
|
84
|
-
// --- Section translations (IDEMPOTENT — same guard pattern as module translations) ---
|
|
85
|
-
// if (!await context.NavigationTranslations.AnyAsync(
|
|
86
|
-
// t => t.EntityId == secEntry.Id && t.EntityType == NavigationEntityType.Section, ct))
|
|
87
|
-
|
|
88
|
-
// --- Resources (idempotent — use ACTUAL section IDs from DB) ---
|
|
89
|
-
// CRITICAL: NavigationSection.Create() generates its own ID. Deterministic seed GUIDs
|
|
90
|
-
// do NOT match actual SectionId in DB → FK_nav_Resources_nav_Sections_SectionId violation.
|
|
91
|
-
// MUST query actual section: var actualSection = await context.NavigationSections
|
|
92
|
-
// .FirstAsync(s => s.Code == secEntry.Code && s.ModuleId == modEntity.Id, ct);
|
|
93
|
-
// Then use actualSection.Id (NOT secEntry.Id) for NavigationResource.Create() and AnyAsync
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
public async Task SeedRolesAsync(ICoreDbContext context, CancellationToken ct)
|
|
97
|
-
{
|
|
98
|
-
// Check idempotence
|
|
99
|
-
var applicationId = ApplicationRolesSeedData.ApplicationId;
|
|
100
|
-
var exists = await context.Roles
|
|
101
|
-
.AnyAsync(r => r.ApplicationId == applicationId, ct);
|
|
102
|
-
if (exists) return;
|
|
103
|
-
|
|
104
|
-
// Create application-scoped roles (Admin, Manager, Contributor, Viewer)
|
|
105
|
-
// Use data from ApplicationRolesSeedData.cs
|
|
106
|
-
foreach (var entry in ApplicationRolesSeedData.GetRoleEntries())
|
|
107
|
-
{
|
|
108
|
-
var role = Role.Create(
|
|
109
|
-
entry.Code,
|
|
110
|
-
entry.Name,
|
|
111
|
-
entry.Description,
|
|
112
|
-
entry.ApplicationId,
|
|
113
|
-
entry.IsSystem);
|
|
114
|
-
context.Roles.Add(role);
|
|
115
|
-
}
|
|
116
|
-
await ((DbContext)context).SaveChangesAsync(ct);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
public async Task SeedPermissionsAsync(ICoreDbContext context, CancellationToken ct)
|
|
120
|
-
{
|
|
121
|
-
// Check idempotence
|
|
122
|
-
var exists = await context.Permissions
|
|
123
|
-
.AnyAsync(p => p.Path == "{full_path}.*", ct);
|
|
124
|
-
if (exists) return;
|
|
125
|
-
|
|
126
|
-
// Retrieve modules by Code for FK resolution
|
|
127
|
-
// Use data from {Module}PermissionSeedData.cs
|
|
128
|
-
// Create via Permission.CreateForModule(...) and Permission.CreateWildcard(...)
|
|
129
|
-
// ...
|
|
130
|
-
await ((DbContext)context).SaveChangesAsync(ct);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
public async Task SeedRolePermissionsAsync(ICoreDbContext context, CancellationToken ct)
|
|
134
|
-
{
|
|
135
|
-
// Check idempotence
|
|
136
|
-
var exists = await context.RolePermissions
|
|
137
|
-
.AnyAsync(rp => rp.Permission!.Path.StartsWith("{full_path}."), ct);
|
|
138
|
-
if (exists) return;
|
|
139
|
-
|
|
140
|
-
// Retrieve existing roles and created permissions
|
|
141
|
-
// Use data from {Module}RolePermissionSeedData.cs
|
|
142
|
-
// Create via RolePermission.Create(roleId, permissionId, "system")
|
|
143
|
-
// ...
|
|
144
|
-
await ((DbContext)context).SaveChangesAsync(ct);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// Private helper methods fed by SeedData classes
|
|
148
|
-
// ...
|
|
149
|
-
}
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
## DI Registration
|
|
155
|
-
|
|
156
|
-
Modify `Infrastructure/DependencyInjection.cs` of the client project:
|
|
157
|
-
|
|
158
|
-
```csharp
|
|
159
|
-
// Add using:
|
|
160
|
-
using SmartStack.Application.Common.Interfaces;
|
|
161
|
-
|
|
162
|
-
// In the registration method:
|
|
163
|
-
services.AddScoped<IClientSeedDataProvider, {AppPascalName}SeedDataProvider>();
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
## Critical Rules
|
|
169
|
-
|
|
170
|
-
1. **Factory methods mandatory**: `NavigationModule.Create(...)`, `Role.Create(...)`, `Permission.CreateForModule(...)`, `RolePermission.Create(...)` — NEVER `new Entity()`
|
|
171
|
-
2. **Idempotence**: Each Seed method checks existence before inserting. **Translations require explicit `AnyAsync` guard** — unique index `IX_nav_Translations_EntityType_EntityId_LanguageCode` causes crashes on duplicate inserts
|
|
172
|
-
3. **Translation guard pattern**: `if (!await context.NavigationTranslations.AnyAsync(t => t.EntityId == {id} && t.EntityType == ..., ct))` — MANDATORY before every translation batch insert
|
|
173
|
-
4. **SaveChangesAsync per group**: Navigation → save → Roles → save → Permissions → save → RolePermissions → save
|
|
174
|
-
4. **Execution order**: `SeedRolesAsync()` MUST be called BEFORE `SeedRolePermissionsAsync()` (roles must exist before mapping)
|
|
175
|
-
5. **Deterministic GUIDs**: Use IDs from SeedData classes (not `Guid.NewGuid()`)
|
|
176
|
-
6. **Resolve FK by Code**: Parent modules and roles are found by `Code`, not hardcoded GUID
|
|
177
|
-
7. **Order property**: Use `100` as default. If multiple providers exist, they run in Order sequence
|
|
1
|
+
# IClientSeedDataProvider Template
|
|
2
|
+
|
|
3
|
+
> Referenced from `steps/step-03b-provider.md` — C# template for client project seed data providers.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Provider Class Template
|
|
8
|
+
|
|
9
|
+
**Location:** `Infrastructure/Persistence/Seeding/{AppPascalName}SeedDataProvider.cs`
|
|
10
|
+
|
|
11
|
+
Where `{AppPascalName}` is derived from the application code (e.g., `free-bike` → `FreeBike`).
|
|
12
|
+
|
|
13
|
+
```csharp
|
|
14
|
+
using Microsoft.EntityFrameworkCore;
|
|
15
|
+
using SmartStack.Application.Common.Interfaces;
|
|
16
|
+
using SmartStack.Domain.Navigation;
|
|
17
|
+
using SmartStack.Domain.Platform.Administration.Roles;
|
|
18
|
+
|
|
19
|
+
namespace {BaseNamespace}.Infrastructure.Persistence.Seeding;
|
|
20
|
+
|
|
21
|
+
/// <summary>
|
|
22
|
+
/// Seeds {AppLabel} navigation, roles, permissions, and role-permission data
|
|
23
|
+
/// into the SmartStack Core schema at application startup.
|
|
24
|
+
/// Implements <see cref="IClientSeedDataProvider"/> for runtime seeding
|
|
25
|
+
/// (no Core migrations required).
|
|
26
|
+
/// </summary>
|
|
27
|
+
public class {AppPascalName}SeedDataProvider : IClientSeedDataProvider
|
|
28
|
+
{
|
|
29
|
+
public int Order => 100;
|
|
30
|
+
|
|
31
|
+
public async Task SeedNavigationAsync(ICoreDbContext context, CancellationToken ct)
|
|
32
|
+
{
|
|
33
|
+
// --- Application (idempotent — reuse if already exists) ---
|
|
34
|
+
var appEntry = NavigationApplicationSeedData.GetApplicationEntry();
|
|
35
|
+
var existingApp = await context.NavigationApplications
|
|
36
|
+
.FirstOrDefaultAsync(a => a.Code == appEntry.Code, ct);
|
|
37
|
+
|
|
38
|
+
NavigationApplication app;
|
|
39
|
+
if (existingApp != null)
|
|
40
|
+
{
|
|
41
|
+
app = existingApp; // Reuse existing for module seeding below
|
|
42
|
+
}
|
|
43
|
+
else
|
|
44
|
+
{
|
|
45
|
+
app = NavigationApplication.Create(
|
|
46
|
+
appEntry.Code, appEntry.Label,
|
|
47
|
+
appEntry.Description, appEntry.Icon, appEntry.IconType,
|
|
48
|
+
appEntry.Route, appEntry.DisplayOrder);
|
|
49
|
+
context.NavigationApplications.Add(app);
|
|
50
|
+
await ((DbContext)context).SaveChangesAsync(ct);
|
|
51
|
+
|
|
52
|
+
// Application translations (only when creating new application)
|
|
53
|
+
foreach (var t in NavigationApplicationSeedData.GetTranslationEntries())
|
|
54
|
+
{
|
|
55
|
+
context.NavigationTranslations.Add(
|
|
56
|
+
NavigationTranslation.Create(t.EntityType, t.EntityId, t.LanguageCode, t.Label, t.Description));
|
|
57
|
+
}
|
|
58
|
+
await ((DbContext)context).SaveChangesAsync(ct);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// --- Modules (idempotent per-module) ---
|
|
62
|
+
// var mod1Exists = await context.NavigationModules.AnyAsync(
|
|
63
|
+
// m => m.Code == "{module_code}" && m.ApplicationId == app.Id, ct);
|
|
64
|
+
// if (!mod1Exists) { context.NavigationModules.Add(NavigationModule.Create(...)); }
|
|
65
|
+
// Repeat per module...
|
|
66
|
+
await ((DbContext)context).SaveChangesAsync(ct);
|
|
67
|
+
|
|
68
|
+
// Resolve module entities
|
|
69
|
+
// var mod1Entity = await context.NavigationModules.FirstAsync(
|
|
70
|
+
// m => m.Code == "{module_code}" && m.ApplicationId == app.Id, ct);
|
|
71
|
+
|
|
72
|
+
// --- Module translations (IDEMPOTENT — check before inserting) ---
|
|
73
|
+
// CRITICAL: nav_Translations has unique index IX_nav_Translations_EntityType_EntityId_LanguageCode
|
|
74
|
+
// Always guard with AnyAsync to prevent duplicate key errors on re-runs.
|
|
75
|
+
// if (!await context.NavigationTranslations.AnyAsync(
|
|
76
|
+
// t => t.EntityId == {Module}NavigationSeedData.{Module}ModuleId
|
|
77
|
+
// && t.EntityType == NavigationEntityType.Module, ct))
|
|
78
|
+
// { foreach (var t in {Module}NavigationSeedData.GetTranslationEntries()) { ... } }
|
|
79
|
+
await ((DbContext)context).SaveChangesAsync(ct);
|
|
80
|
+
|
|
81
|
+
// --- Sections (idempotent per-section) ---
|
|
82
|
+
// Check each section before inserting: AnyAsync(s => s.Code == secEntry.Code && s.ModuleId == ...)
|
|
83
|
+
|
|
84
|
+
// --- Section translations (IDEMPOTENT — same guard pattern as module translations) ---
|
|
85
|
+
// if (!await context.NavigationTranslations.AnyAsync(
|
|
86
|
+
// t => t.EntityId == secEntry.Id && t.EntityType == NavigationEntityType.Section, ct))
|
|
87
|
+
|
|
88
|
+
// --- Resources (idempotent — use ACTUAL section IDs from DB) ---
|
|
89
|
+
// CRITICAL: NavigationSection.Create() generates its own ID. Deterministic seed GUIDs
|
|
90
|
+
// do NOT match actual SectionId in DB → FK_nav_Resources_nav_Sections_SectionId violation.
|
|
91
|
+
// MUST query actual section: var actualSection = await context.NavigationSections
|
|
92
|
+
// .FirstAsync(s => s.Code == secEntry.Code && s.ModuleId == modEntity.Id, ct);
|
|
93
|
+
// Then use actualSection.Id (NOT secEntry.Id) for NavigationResource.Create() and AnyAsync
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
public async Task SeedRolesAsync(ICoreDbContext context, CancellationToken ct)
|
|
97
|
+
{
|
|
98
|
+
// Check idempotence
|
|
99
|
+
var applicationId = ApplicationRolesSeedData.ApplicationId;
|
|
100
|
+
var exists = await context.Roles
|
|
101
|
+
.AnyAsync(r => r.ApplicationId == applicationId, ct);
|
|
102
|
+
if (exists) return;
|
|
103
|
+
|
|
104
|
+
// Create application-scoped roles (Admin, Manager, Contributor, Viewer)
|
|
105
|
+
// Use data from ApplicationRolesSeedData.cs
|
|
106
|
+
foreach (var entry in ApplicationRolesSeedData.GetRoleEntries())
|
|
107
|
+
{
|
|
108
|
+
var role = Role.Create(
|
|
109
|
+
entry.Code,
|
|
110
|
+
entry.Name,
|
|
111
|
+
entry.Description,
|
|
112
|
+
entry.ApplicationId,
|
|
113
|
+
entry.IsSystem);
|
|
114
|
+
context.Roles.Add(role);
|
|
115
|
+
}
|
|
116
|
+
await ((DbContext)context).SaveChangesAsync(ct);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
public async Task SeedPermissionsAsync(ICoreDbContext context, CancellationToken ct)
|
|
120
|
+
{
|
|
121
|
+
// Check idempotence
|
|
122
|
+
var exists = await context.Permissions
|
|
123
|
+
.AnyAsync(p => p.Path == "{full_path}.*", ct);
|
|
124
|
+
if (exists) return;
|
|
125
|
+
|
|
126
|
+
// Retrieve modules by Code for FK resolution
|
|
127
|
+
// Use data from {Module}PermissionSeedData.cs
|
|
128
|
+
// Create via Permission.CreateForModule(...) and Permission.CreateWildcard(...)
|
|
129
|
+
// ...
|
|
130
|
+
await ((DbContext)context).SaveChangesAsync(ct);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
public async Task SeedRolePermissionsAsync(ICoreDbContext context, CancellationToken ct)
|
|
134
|
+
{
|
|
135
|
+
// Check idempotence
|
|
136
|
+
var exists = await context.RolePermissions
|
|
137
|
+
.AnyAsync(rp => rp.Permission!.Path.StartsWith("{full_path}."), ct);
|
|
138
|
+
if (exists) return;
|
|
139
|
+
|
|
140
|
+
// Retrieve existing roles and created permissions
|
|
141
|
+
// Use data from {Module}RolePermissionSeedData.cs
|
|
142
|
+
// Create via RolePermission.Create(roleId, permissionId, "system")
|
|
143
|
+
// ...
|
|
144
|
+
await ((DbContext)context).SaveChangesAsync(ct);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Private helper methods fed by SeedData classes
|
|
148
|
+
// ...
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## DI Registration
|
|
155
|
+
|
|
156
|
+
Modify `Infrastructure/DependencyInjection.cs` of the client project:
|
|
157
|
+
|
|
158
|
+
```csharp
|
|
159
|
+
// Add using:
|
|
160
|
+
using SmartStack.Application.Common.Interfaces;
|
|
161
|
+
|
|
162
|
+
// In the registration method:
|
|
163
|
+
services.AddScoped<IClientSeedDataProvider, {AppPascalName}SeedDataProvider>();
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Critical Rules
|
|
169
|
+
|
|
170
|
+
1. **Factory methods mandatory**: `NavigationModule.Create(...)`, `Role.Create(...)`, `Permission.CreateForModule(...)`, `RolePermission.Create(...)` — NEVER `new Entity()`
|
|
171
|
+
2. **Idempotence**: Each Seed method checks existence before inserting. **Translations require explicit `AnyAsync` guard** — unique index `IX_nav_Translations_EntityType_EntityId_LanguageCode` causes crashes on duplicate inserts
|
|
172
|
+
3. **Translation guard pattern**: `if (!await context.NavigationTranslations.AnyAsync(t => t.EntityId == {id} && t.EntityType == ..., ct))` — MANDATORY before every translation batch insert
|
|
173
|
+
4. **SaveChangesAsync per group**: Navigation → save → Roles → save → Permissions → save → RolePermissions → save
|
|
174
|
+
4. **Execution order**: `SeedRolesAsync()` MUST be called BEFORE `SeedRolePermissionsAsync()` (roles must exist before mapping)
|
|
175
|
+
5. **Deterministic GUIDs**: Use IDs from SeedData classes (not `Guid.NewGuid()`)
|
|
176
|
+
6. **Resolve FK by Code**: Parent modules and roles are found by `Code`, not hardcoded GUID
|
|
177
|
+
7. **Order property**: Use `100` as default. If multiple providers exist, they run in Order sequence
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
# Step 3: Client Project Handling (seeding_strategy = "provider")
|
|
2
|
-
|
|
3
|
-
> Referenced from `steps/step-03-roles.md` — Specific handling for client projects.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## ApplicationRolesSeedData.cs (ONCE per application)
|
|
8
|
-
|
|
9
|
-
**File:** `Infrastructure/Persistence/Seeding/Data/ApplicationRolesSeedData.cs`
|
|
10
|
-
|
|
11
|
-
**Purpose:** Defines the 4 standard application-scoped roles (Admin, Manager, Contributor, Viewer) with valid `Code` values.
|
|
12
|
-
|
|
13
|
-
**CRITICAL:** Without this file, role-permission mappings in `SeedRolePermissionsAsync()` will fail silently because `roles.FirstOrDefault(r => r.Code == mapping.RoleCode)` will return null.
|
|
14
|
-
|
|
15
|
-
See [references/application-roles-template.md](../references/application-roles-template.md) for the complete template.
|
|
16
|
-
|
|
17
|
-
**Key requirements:**
|
|
18
|
-
- Deterministic GUIDs based on `role-{applicationId}-{roleType}`
|
|
19
|
-
- 4 roles: Admin, Manager, Contributor, Viewer
|
|
20
|
-
- Each role has a valid `Code` property ("admin", "manager", "contributor", "viewer")
|
|
21
|
-
- `ApplicationId` references the navigation application GUID
|
|
22
|
-
- `IsSystem = false` (application-scoped, not system roles)
|
|
23
|
-
|
|
24
|
-
**Detection:** Check if ApplicationRolesSeedData.cs exists. If yes, skip creation (already exists from Module 1). If no, create it.
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## {Module}RolePermissionSeedData.cs (PER module)
|
|
29
|
-
|
|
30
|
-
**File:** `Infrastructure/Persistence/Seeding/Data/{Domain}/{Module}RolePermissionSeedData.cs`
|
|
31
|
-
|
|
32
|
-
**Purpose:** Maps permissions to roles by Code (e.g., "admin" → "{navRoute}.*").
|
|
33
|
-
|
|
34
|
-
Content: static class with method `GetRolePermissionEntries()` that returns the role-permission mapping data.
|
|
35
|
-
These entries will be consumed by the `IClientSeedDataProvider` at step 03b.
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## Default Role Mapping Table
|
|
40
|
-
|
|
41
|
-
Based on navigation application prefix:
|
|
42
|
-
|
|
43
|
-
| Application prefix | PlatformAdmin | TenantAdmin | StandardUser |
|
|
44
|
-
|---------|---------------|-------------|--------------|
|
|
45
|
-
| `administration.*` | Full CRUD | Read only | None |
|
|
46
|
-
| `*` (business apps) | Full CRUD | Full CRUD | Read only |
|
|
47
|
-
| `myspace.*` | None | Full CRUD | Full CRUD |
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## Summary
|
|
52
|
-
|
|
53
|
-
After creating both files:
|
|
54
|
-
- Proceed to step-03b-provider.md (which will skip for core projects)
|
|
55
|
-
- The provider will consume these SeedData files to seed roles and permissions at runtime
|
|
1
|
+
# Step 3: Client Project Handling (seeding_strategy = "provider")
|
|
2
|
+
|
|
3
|
+
> Referenced from `steps/step-03-roles.md` — Specific handling for client projects.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## ApplicationRolesSeedData.cs (ONCE per application)
|
|
8
|
+
|
|
9
|
+
**File:** `Infrastructure/Persistence/Seeding/Data/ApplicationRolesSeedData.cs`
|
|
10
|
+
|
|
11
|
+
**Purpose:** Defines the 4 standard application-scoped roles (Admin, Manager, Contributor, Viewer) with valid `Code` values.
|
|
12
|
+
|
|
13
|
+
**CRITICAL:** Without this file, role-permission mappings in `SeedRolePermissionsAsync()` will fail silently because `roles.FirstOrDefault(r => r.Code == mapping.RoleCode)` will return null.
|
|
14
|
+
|
|
15
|
+
See [references/application-roles-template.md](../references/application-roles-template.md) for the complete template.
|
|
16
|
+
|
|
17
|
+
**Key requirements:**
|
|
18
|
+
- Deterministic GUIDs based on `role-{applicationId}-{roleType}`
|
|
19
|
+
- 4 roles: Admin, Manager, Contributor, Viewer
|
|
20
|
+
- Each role has a valid `Code` property ("admin", "manager", "contributor", "viewer")
|
|
21
|
+
- `ApplicationId` references the navigation application GUID
|
|
22
|
+
- `IsSystem = false` (application-scoped, not system roles)
|
|
23
|
+
|
|
24
|
+
**Detection:** Check if ApplicationRolesSeedData.cs exists. If yes, skip creation (already exists from Module 1). If no, create it.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## {Module}RolePermissionSeedData.cs (PER module)
|
|
29
|
+
|
|
30
|
+
**File:** `Infrastructure/Persistence/Seeding/Data/{Domain}/{Module}RolePermissionSeedData.cs`
|
|
31
|
+
|
|
32
|
+
**Purpose:** Maps permissions to roles by Code (e.g., "admin" → "{navRoute}.*").
|
|
33
|
+
|
|
34
|
+
Content: static class with method `GetRolePermissionEntries()` that returns the role-permission mapping data.
|
|
35
|
+
These entries will be consumed by the `IClientSeedDataProvider` at step 03b.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Default Role Mapping Table
|
|
40
|
+
|
|
41
|
+
Based on navigation application prefix:
|
|
42
|
+
|
|
43
|
+
| Application prefix | PlatformAdmin | TenantAdmin | StandardUser |
|
|
44
|
+
|---------|---------------|-------------|--------------|
|
|
45
|
+
| `administration.*` | Full CRUD | Read only | None |
|
|
46
|
+
| `*` (business apps) | Full CRUD | Full CRUD | Read only |
|
|
47
|
+
| `myspace.*` | None | Full CRUD | Full CRUD |
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Summary
|
|
52
|
+
|
|
53
|
+
After creating both files:
|
|
54
|
+
- Proceed to step-03b-provider.md (which will skip for core projects)
|
|
55
|
+
- The provider will consume these SeedData files to seed roles and permissions at runtime
|