@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,227 +1,227 @@
|
|
|
1
|
-
# Application Roles Seed Data Template
|
|
2
|
-
|
|
3
|
-
> Referenced from `core-seed-data.md` and `step-03-roles.md` — C# template for application-scoped roles in client projects.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Problem Statement
|
|
8
|
-
|
|
9
|
-
When using `IClientSeedDataProvider` (client projects with `seeding_strategy = "provider"`), role-permission mappings reference roles by their `Code`:
|
|
10
|
-
|
|
11
|
-
```csharp
|
|
12
|
-
var role = roles.FirstOrDefault(r => r.Code == mapping.RoleCode); // "admin", "manager", "contributor", "viewer"
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
**However**, the current templates do NOT create these application-scoped roles. They assume:
|
|
16
|
-
- System roles (SuperAdmin, PlatformAdmin, TenantAdmin, StandardUser) exist in Core
|
|
17
|
-
- Application-scoped roles (Admin, Manager, Contributor, Viewer) already exist with valid `Code` values
|
|
18
|
-
|
|
19
|
-
**Result:** Role-permission mappings fail silently when `role == null`.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Solution: Application Roles Seed Data
|
|
24
|
-
|
|
25
|
-
Create application-scoped roles with deterministic GUIDs and valid `Code` values.
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## File Location
|
|
30
|
-
|
|
31
|
-
**Path:** `Infrastructure/Persistence/Seeding/Data/ApplicationRolesSeedData.cs`
|
|
32
|
-
|
|
33
|
-
This file should be created **ONCE per application** (not per module).
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## Template
|
|
38
|
-
|
|
39
|
-
```csharp
|
|
40
|
-
using SmartStack.Domain.Platform.Administration.Roles;
|
|
41
|
-
|
|
42
|
-
namespace {BaseNamespace}.Infrastructure.Persistence.Seeding.Data;
|
|
43
|
-
|
|
44
|
-
/// <summary>
|
|
45
|
-
/// Application-scoped role seed data for {AppLabel}.
|
|
46
|
-
/// Defines the 4 standard application roles: Admin, Manager, Contributor, Viewer.
|
|
47
|
-
/// Consumed by IClientSeedDataProvider at application startup.
|
|
48
|
-
/// </summary>
|
|
49
|
-
public static class ApplicationRolesSeedData
|
|
50
|
-
{
|
|
51
|
-
// Deterministic GUIDs for application roles
|
|
52
|
-
// Generated from: "role-{applicationId}-{roleType}"
|
|
53
|
-
public static readonly Guid ApplicationId = NavigationApplicationSeedData.ApplicationId;
|
|
54
|
-
|
|
55
|
-
public static readonly Guid AdminRoleId = GenerateRoleGuid("admin");
|
|
56
|
-
public static readonly Guid ManagerRoleId = GenerateRoleGuid("manager");
|
|
57
|
-
public static readonly Guid ContributorRoleId = GenerateRoleGuid("contributor");
|
|
58
|
-
public static readonly Guid ViewerRoleId = GenerateRoleGuid("viewer");
|
|
59
|
-
|
|
60
|
-
/// <summary>
|
|
61
|
-
/// Returns application-scoped role entries for seeding into core.auth_Roles.
|
|
62
|
-
/// </summary>
|
|
63
|
-
public static IEnumerable<ApplicationRoleSeedEntry> GetRoleEntries()
|
|
64
|
-
{
|
|
65
|
-
yield return new ApplicationRoleSeedEntry
|
|
66
|
-
{
|
|
67
|
-
Id = AdminRoleId,
|
|
68
|
-
Code = "admin",
|
|
69
|
-
Name = "{AppLabel} Admin",
|
|
70
|
-
Description = "Full administrative access to {AppLabel}",
|
|
71
|
-
ApplicationId = ApplicationId,
|
|
72
|
-
IsSystem = false,
|
|
73
|
-
IsActive = true,
|
|
74
|
-
DisplayOrder = 1
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
yield return new ApplicationRoleSeedEntry
|
|
78
|
-
{
|
|
79
|
-
Id = ManagerRoleId,
|
|
80
|
-
Code = "manager",
|
|
81
|
-
Name = "{AppLabel} Manager",
|
|
82
|
-
Description = "Management access to {AppLabel} (Create, Read, Update)",
|
|
83
|
-
ApplicationId = ApplicationId,
|
|
84
|
-
IsSystem = false,
|
|
85
|
-
IsActive = true,
|
|
86
|
-
DisplayOrder = 2
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
yield return new ApplicationRoleSeedEntry
|
|
90
|
-
{
|
|
91
|
-
Id = ContributorRoleId,
|
|
92
|
-
Code = "contributor",
|
|
93
|
-
Name = "{AppLabel} Contributor",
|
|
94
|
-
Description = "Contributor access to {AppLabel} (Create, Read)",
|
|
95
|
-
ApplicationId = ApplicationId,
|
|
96
|
-
IsSystem = false,
|
|
97
|
-
IsActive = true,
|
|
98
|
-
DisplayOrder = 3
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
yield return new ApplicationRoleSeedEntry
|
|
102
|
-
{
|
|
103
|
-
Id = ViewerRoleId,
|
|
104
|
-
Code = "viewer",
|
|
105
|
-
Name = "{AppLabel} Viewer",
|
|
106
|
-
Description = "Read-only access to {AppLabel}",
|
|
107
|
-
ApplicationId = ApplicationId,
|
|
108
|
-
IsSystem = false,
|
|
109
|
-
IsActive = true,
|
|
110
|
-
DisplayOrder = 4
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
private static Guid GenerateRoleGuid(string roleType)
|
|
115
|
-
{
|
|
116
|
-
using var sha256 = System.Security.Cryptography.SHA256.Create();
|
|
117
|
-
var hash = sha256.ComputeHash(System.Text.Encoding.UTF8.GetBytes($"role-{ApplicationId}-{roleType}"));
|
|
118
|
-
return new Guid(hash.Take(16).ToArray());
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/// <summary>Seed entry DTO for application role.</summary>
|
|
123
|
-
public class ApplicationRoleSeedEntry
|
|
124
|
-
{
|
|
125
|
-
public Guid Id { get; init; }
|
|
126
|
-
public string Code { get; init; } = null!;
|
|
127
|
-
public string Name { get; init; } = null!;
|
|
128
|
-
public string Description { get; init; } = null!;
|
|
129
|
-
public Guid ApplicationId { get; init; }
|
|
130
|
-
public bool IsSystem { get; init; }
|
|
131
|
-
public bool IsActive { get; init; }
|
|
132
|
-
public int DisplayOrder { get; init; }
|
|
133
|
-
}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
---
|
|
137
|
-
|
|
138
|
-
## Placeholder Replacement
|
|
139
|
-
|
|
140
|
-
| Placeholder | Description | Example |
|
|
141
|
-
|-------------|-------------|---------|
|
|
142
|
-
| `{BaseNamespace}` | Root namespace of the client project | `SmartStack.Modules.RessourcesHumaines` |
|
|
143
|
-
| `{AppLabel}` | Human-readable application label (EN) | `Human Resources` |
|
|
144
|
-
| `ApplicationId` | Deterministic GUID from `NavigationApplicationSeedData.ApplicationId` — NO placeholder needed | Auto-resolved |
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
## Integration into IClientSeedDataProvider
|
|
149
|
-
|
|
150
|
-
Add a new method `SeedRolesAsync()` to the provider:
|
|
151
|
-
|
|
152
|
-
```csharp
|
|
153
|
-
public async Task SeedRolesAsync(ICoreDbContext context, CancellationToken ct)
|
|
154
|
-
{
|
|
155
|
-
// Check idempotence
|
|
156
|
-
var exists = await context.Roles
|
|
157
|
-
.AnyAsync(r => r.ApplicationId == ApplicationRolesSeedData.ApplicationId, ct);
|
|
158
|
-
if (exists) return;
|
|
159
|
-
|
|
160
|
-
// Create application-scoped roles using factory method
|
|
161
|
-
foreach (var entry in ApplicationRolesSeedData.GetRoleEntries())
|
|
162
|
-
{
|
|
163
|
-
var role = Role.Create(
|
|
164
|
-
entry.Code,
|
|
165
|
-
entry.Name,
|
|
166
|
-
entry.Description,
|
|
167
|
-
entry.ApplicationId,
|
|
168
|
-
entry.IsSystem);
|
|
169
|
-
|
|
170
|
-
context.Roles.Add(role);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
await ((DbContext)context).SaveChangesAsync(ct);
|
|
174
|
-
}
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
---
|
|
178
|
-
|
|
179
|
-
## Execution Order in Provider
|
|
180
|
-
|
|
181
|
-
**CRITICAL:** Roles must be created BEFORE role-permission mappings.
|
|
182
|
-
|
|
183
|
-
```
|
|
184
|
-
1. SeedNavigationAsync() → Creates application + modules + translations
|
|
185
|
-
2. SeedRolesAsync() → Creates application-scoped roles (NEW)
|
|
186
|
-
3. SeedPermissionsAsync() → Creates permissions
|
|
187
|
-
4. SeedRolePermissionsAsync() → Maps roles to permissions (now succeeds because roles exist)
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
---
|
|
191
|
-
|
|
192
|
-
## Verification Checklist
|
|
193
|
-
|
|
194
|
-
Before marking the task as completed, verify:
|
|
195
|
-
|
|
196
|
-
- [ ] `ApplicationRolesSeedData.cs` created in `Infrastructure/Persistence/Seeding/Data/`
|
|
197
|
-
- [ ] Deterministic GUIDs used (NEVER `Guid.NewGuid()`)
|
|
198
|
-
- [ ] 4 roles defined: Admin, Manager, Contributor, Viewer
|
|
199
|
-
- [ ] Each role has a valid `Code` value ("admin", "manager", "contributor", "viewer")
|
|
200
|
-
- [ ] Each role has `ApplicationId` set to the application GUID
|
|
201
|
-
- [ ] `SeedRolesAsync()` method added to `IClientSeedDataProvider`
|
|
202
|
-
- [ ] `SeedRolesAsync()` is idempotent (checks existence before inserting)
|
|
203
|
-
- [ ] `Role.Create()` factory method used (NEVER `new Role()`)
|
|
204
|
-
- [ ] `SaveChangesAsync()` called after role creation
|
|
205
|
-
- [ ] Execution order: Navigation → Roles → Permissions → RolePermissions
|
|
206
|
-
- [ ] `dotnet build` passes after generation
|
|
207
|
-
|
|
208
|
-
---
|
|
209
|
-
|
|
210
|
-
## Notes
|
|
211
|
-
|
|
212
|
-
- **Application ID source:** Read from the navigation application created in `SeedNavigationAsync()` or from `{AppPascal}NavigationSeedData.cs`
|
|
213
|
-
- **Role factory method:** Use `Role.Create(code, name, description, applicationId, isSystem)` from SmartStack.Domain
|
|
214
|
-
- **Code uniqueness:** Role codes must be unique within the application scope
|
|
215
|
-
- **System roles:** These are NOT system roles (IsSystem = false) - they are application-scoped roles
|
|
216
|
-
- **Tenant isolation:** Application-scoped roles are automatically tenant-isolated via the Core authorization system
|
|
217
|
-
|
|
218
|
-
---
|
|
219
|
-
|
|
220
|
-
## Migration Impact
|
|
221
|
-
|
|
222
|
-
**For existing projects without application roles:**
|
|
223
|
-
1. Generate `ApplicationRolesSeedData.cs` using this template
|
|
224
|
-
2. Add `SeedRolesAsync()` method to the existing `IClientSeedDataProvider`
|
|
225
|
-
3. Update the provider's execution to call `SeedRolesAsync()` BEFORE `SeedRolePermissionsAsync()`
|
|
226
|
-
4. Run the application - roles will be created on next startup
|
|
227
|
-
5. Role-permission mappings will now succeed
|
|
1
|
+
# Application Roles Seed Data Template
|
|
2
|
+
|
|
3
|
+
> Referenced from `core-seed-data.md` and `step-03-roles.md` — C# template for application-scoped roles in client projects.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Problem Statement
|
|
8
|
+
|
|
9
|
+
When using `IClientSeedDataProvider` (client projects with `seeding_strategy = "provider"`), role-permission mappings reference roles by their `Code`:
|
|
10
|
+
|
|
11
|
+
```csharp
|
|
12
|
+
var role = roles.FirstOrDefault(r => r.Code == mapping.RoleCode); // "admin", "manager", "contributor", "viewer"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
**However**, the current templates do NOT create these application-scoped roles. They assume:
|
|
16
|
+
- System roles (SuperAdmin, PlatformAdmin, TenantAdmin, StandardUser) exist in Core
|
|
17
|
+
- Application-scoped roles (Admin, Manager, Contributor, Viewer) already exist with valid `Code` values
|
|
18
|
+
|
|
19
|
+
**Result:** Role-permission mappings fail silently when `role == null`.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Solution: Application Roles Seed Data
|
|
24
|
+
|
|
25
|
+
Create application-scoped roles with deterministic GUIDs and valid `Code` values.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## File Location
|
|
30
|
+
|
|
31
|
+
**Path:** `Infrastructure/Persistence/Seeding/Data/ApplicationRolesSeedData.cs`
|
|
32
|
+
|
|
33
|
+
This file should be created **ONCE per application** (not per module).
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Template
|
|
38
|
+
|
|
39
|
+
```csharp
|
|
40
|
+
using SmartStack.Domain.Platform.Administration.Roles;
|
|
41
|
+
|
|
42
|
+
namespace {BaseNamespace}.Infrastructure.Persistence.Seeding.Data;
|
|
43
|
+
|
|
44
|
+
/// <summary>
|
|
45
|
+
/// Application-scoped role seed data for {AppLabel}.
|
|
46
|
+
/// Defines the 4 standard application roles: Admin, Manager, Contributor, Viewer.
|
|
47
|
+
/// Consumed by IClientSeedDataProvider at application startup.
|
|
48
|
+
/// </summary>
|
|
49
|
+
public static class ApplicationRolesSeedData
|
|
50
|
+
{
|
|
51
|
+
// Deterministic GUIDs for application roles
|
|
52
|
+
// Generated from: "role-{applicationId}-{roleType}"
|
|
53
|
+
public static readonly Guid ApplicationId = NavigationApplicationSeedData.ApplicationId;
|
|
54
|
+
|
|
55
|
+
public static readonly Guid AdminRoleId = GenerateRoleGuid("admin");
|
|
56
|
+
public static readonly Guid ManagerRoleId = GenerateRoleGuid("manager");
|
|
57
|
+
public static readonly Guid ContributorRoleId = GenerateRoleGuid("contributor");
|
|
58
|
+
public static readonly Guid ViewerRoleId = GenerateRoleGuid("viewer");
|
|
59
|
+
|
|
60
|
+
/// <summary>
|
|
61
|
+
/// Returns application-scoped role entries for seeding into core.auth_Roles.
|
|
62
|
+
/// </summary>
|
|
63
|
+
public static IEnumerable<ApplicationRoleSeedEntry> GetRoleEntries()
|
|
64
|
+
{
|
|
65
|
+
yield return new ApplicationRoleSeedEntry
|
|
66
|
+
{
|
|
67
|
+
Id = AdminRoleId,
|
|
68
|
+
Code = "admin",
|
|
69
|
+
Name = "{AppLabel} Admin",
|
|
70
|
+
Description = "Full administrative access to {AppLabel}",
|
|
71
|
+
ApplicationId = ApplicationId,
|
|
72
|
+
IsSystem = false,
|
|
73
|
+
IsActive = true,
|
|
74
|
+
DisplayOrder = 1
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
yield return new ApplicationRoleSeedEntry
|
|
78
|
+
{
|
|
79
|
+
Id = ManagerRoleId,
|
|
80
|
+
Code = "manager",
|
|
81
|
+
Name = "{AppLabel} Manager",
|
|
82
|
+
Description = "Management access to {AppLabel} (Create, Read, Update)",
|
|
83
|
+
ApplicationId = ApplicationId,
|
|
84
|
+
IsSystem = false,
|
|
85
|
+
IsActive = true,
|
|
86
|
+
DisplayOrder = 2
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
yield return new ApplicationRoleSeedEntry
|
|
90
|
+
{
|
|
91
|
+
Id = ContributorRoleId,
|
|
92
|
+
Code = "contributor",
|
|
93
|
+
Name = "{AppLabel} Contributor",
|
|
94
|
+
Description = "Contributor access to {AppLabel} (Create, Read)",
|
|
95
|
+
ApplicationId = ApplicationId,
|
|
96
|
+
IsSystem = false,
|
|
97
|
+
IsActive = true,
|
|
98
|
+
DisplayOrder = 3
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
yield return new ApplicationRoleSeedEntry
|
|
102
|
+
{
|
|
103
|
+
Id = ViewerRoleId,
|
|
104
|
+
Code = "viewer",
|
|
105
|
+
Name = "{AppLabel} Viewer",
|
|
106
|
+
Description = "Read-only access to {AppLabel}",
|
|
107
|
+
ApplicationId = ApplicationId,
|
|
108
|
+
IsSystem = false,
|
|
109
|
+
IsActive = true,
|
|
110
|
+
DisplayOrder = 4
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
private static Guid GenerateRoleGuid(string roleType)
|
|
115
|
+
{
|
|
116
|
+
using var sha256 = System.Security.Cryptography.SHA256.Create();
|
|
117
|
+
var hash = sha256.ComputeHash(System.Text.Encoding.UTF8.GetBytes($"role-{ApplicationId}-{roleType}"));
|
|
118
|
+
return new Guid(hash.Take(16).ToArray());
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/// <summary>Seed entry DTO for application role.</summary>
|
|
123
|
+
public class ApplicationRoleSeedEntry
|
|
124
|
+
{
|
|
125
|
+
public Guid Id { get; init; }
|
|
126
|
+
public string Code { get; init; } = null!;
|
|
127
|
+
public string Name { get; init; } = null!;
|
|
128
|
+
public string Description { get; init; } = null!;
|
|
129
|
+
public Guid ApplicationId { get; init; }
|
|
130
|
+
public bool IsSystem { get; init; }
|
|
131
|
+
public bool IsActive { get; init; }
|
|
132
|
+
public int DisplayOrder { get; init; }
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Placeholder Replacement
|
|
139
|
+
|
|
140
|
+
| Placeholder | Description | Example |
|
|
141
|
+
|-------------|-------------|---------|
|
|
142
|
+
| `{BaseNamespace}` | Root namespace of the client project | `SmartStack.Modules.RessourcesHumaines` |
|
|
143
|
+
| `{AppLabel}` | Human-readable application label (EN) | `Human Resources` |
|
|
144
|
+
| `ApplicationId` | Deterministic GUID from `NavigationApplicationSeedData.ApplicationId` — NO placeholder needed | Auto-resolved |
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Integration into IClientSeedDataProvider
|
|
149
|
+
|
|
150
|
+
Add a new method `SeedRolesAsync()` to the provider:
|
|
151
|
+
|
|
152
|
+
```csharp
|
|
153
|
+
public async Task SeedRolesAsync(ICoreDbContext context, CancellationToken ct)
|
|
154
|
+
{
|
|
155
|
+
// Check idempotence
|
|
156
|
+
var exists = await context.Roles
|
|
157
|
+
.AnyAsync(r => r.ApplicationId == ApplicationRolesSeedData.ApplicationId, ct);
|
|
158
|
+
if (exists) return;
|
|
159
|
+
|
|
160
|
+
// Create application-scoped roles using factory method
|
|
161
|
+
foreach (var entry in ApplicationRolesSeedData.GetRoleEntries())
|
|
162
|
+
{
|
|
163
|
+
var role = Role.Create(
|
|
164
|
+
entry.Code,
|
|
165
|
+
entry.Name,
|
|
166
|
+
entry.Description,
|
|
167
|
+
entry.ApplicationId,
|
|
168
|
+
entry.IsSystem);
|
|
169
|
+
|
|
170
|
+
context.Roles.Add(role);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
await ((DbContext)context).SaveChangesAsync(ct);
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Execution Order in Provider
|
|
180
|
+
|
|
181
|
+
**CRITICAL:** Roles must be created BEFORE role-permission mappings.
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
1. SeedNavigationAsync() → Creates application + modules + translations
|
|
185
|
+
2. SeedRolesAsync() → Creates application-scoped roles (NEW)
|
|
186
|
+
3. SeedPermissionsAsync() → Creates permissions
|
|
187
|
+
4. SeedRolePermissionsAsync() → Maps roles to permissions (now succeeds because roles exist)
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Verification Checklist
|
|
193
|
+
|
|
194
|
+
Before marking the task as completed, verify:
|
|
195
|
+
|
|
196
|
+
- [ ] `ApplicationRolesSeedData.cs` created in `Infrastructure/Persistence/Seeding/Data/`
|
|
197
|
+
- [ ] Deterministic GUIDs used (NEVER `Guid.NewGuid()`)
|
|
198
|
+
- [ ] 4 roles defined: Admin, Manager, Contributor, Viewer
|
|
199
|
+
- [ ] Each role has a valid `Code` value ("admin", "manager", "contributor", "viewer")
|
|
200
|
+
- [ ] Each role has `ApplicationId` set to the application GUID
|
|
201
|
+
- [ ] `SeedRolesAsync()` method added to `IClientSeedDataProvider`
|
|
202
|
+
- [ ] `SeedRolesAsync()` is idempotent (checks existence before inserting)
|
|
203
|
+
- [ ] `Role.Create()` factory method used (NEVER `new Role()`)
|
|
204
|
+
- [ ] `SaveChangesAsync()` called after role creation
|
|
205
|
+
- [ ] Execution order: Navigation → Roles → Permissions → RolePermissions
|
|
206
|
+
- [ ] `dotnet build` passes after generation
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## Notes
|
|
211
|
+
|
|
212
|
+
- **Application ID source:** Read from the navigation application created in `SeedNavigationAsync()` or from `{AppPascal}NavigationSeedData.cs`
|
|
213
|
+
- **Role factory method:** Use `Role.Create(code, name, description, applicationId, isSystem)` from SmartStack.Domain
|
|
214
|
+
- **Code uniqueness:** Role codes must be unique within the application scope
|
|
215
|
+
- **System roles:** These are NOT system roles (IsSystem = false) - they are application-scoped roles
|
|
216
|
+
- **Tenant isolation:** Application-scoped roles are automatically tenant-isolated via the Core authorization system
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Migration Impact
|
|
221
|
+
|
|
222
|
+
**For existing projects without application roles:**
|
|
223
|
+
1. Generate `ApplicationRolesSeedData.cs` using this template
|
|
224
|
+
2. Add `SeedRolesAsync()` method to the existing `IClientSeedDataProvider`
|
|
225
|
+
3. Update the provider's execution to call `SeedRolesAsync()` BEFORE `SeedRolePermissionsAsync()`
|
|
226
|
+
4. Run the application - roles will be created on next startup
|
|
227
|
+
5. Role-permission mappings will now succeed
|
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
# Controller NavRoute and Folder Hierarchy
|
|
2
|
-
|
|
3
|
-
> Referenced from `steps/step-04-backend.md` — Controller file organization and NavRoute conventions.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Controller File Location
|
|
8
|
-
|
|
9
|
-
Controllers are organized by **application** (matching SmartStack.app pattern):
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
Api/Controllers/
|
|
13
|
-
├── Administration/ ← administration.*
|
|
14
|
-
│ ├── {Module}/ ← Module sub-folder (e.g., AI/, Communications/, Tenants/)
|
|
15
|
-
│ │ └── {EntityName}Controller.cs
|
|
16
|
-
│ └── {EntityName}Controller.cs ← Direct controllers (no module sub-folder)
|
|
17
|
-
├── Support/ ← support.*
|
|
18
|
-
│ └── {EntityName}Controller.cs
|
|
19
|
-
├── {ApplicationPascal}/ ← Other applications (e.g., Sales/, HumanResources/)
|
|
20
|
-
│ └── {EntityName}Controller.cs
|
|
21
|
-
├── MySpace/ ← myspace.*
|
|
22
|
-
│ └── {EntityName}Controller.cs
|
|
23
|
-
└── {SharedControllers}.cs ← Root-level (Auth, Config, Navigation, etc.)
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## Application-to-Folder Mapping
|
|
27
|
-
|
|
28
|
-
| NavRoute Application | Controller Folder | Example |
|
|
29
|
-
|-----------------|-------------------|---------|
|
|
30
|
-
| `administration` | `Administration` | `Controllers/Administration/TenantsController.cs` |
|
|
31
|
-
| `administration.{module}` | `Administration/{Module}` | `Controllers/Administration/AI/AiPromptsController.cs` |
|
|
32
|
-
| `support` | `Support` | `Controllers/Support/TicketsController.cs` |
|
|
33
|
-
| `{application}` | `{ApplicationPascal}` | `Controllers/Sales/ProductsController.cs` |
|
|
34
|
-
| `myspace` | `MySpace` | `Controllers/MySpace/PreferencesController.cs` |
|
|
35
|
-
|
|
36
|
-
## Controller Attributes
|
|
37
|
-
|
|
38
|
-
The generated controller uses NavRoute attribute:
|
|
39
|
-
|
|
40
|
-
```csharp
|
|
41
|
-
[NavRoute("{full_path}")]
|
|
42
|
-
[ApiController]
|
|
43
|
-
[Authorize]
|
|
44
|
-
public class {EntityName}Controller : ControllerBase
|
|
45
|
-
{
|
|
46
|
-
[HttpGet]
|
|
47
|
-
[RequirePermission(Permissions.{Application}.{Module}.Read)]
|
|
48
|
-
public async Task<ActionResult<IEnumerable<{EntityName}Dto>>> GetAll() { ... }
|
|
49
|
-
|
|
50
|
-
// ... other CRUD methods
|
|
51
|
-
}
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
This ensures:
|
|
55
|
-
- API route is derived from navigation path
|
|
56
|
-
- Permissions use the constants from Permissions.cs
|
|
57
|
-
- Frontend can discover API path from NavRoute registry
|
|
58
|
-
- Controller file is in the correct application folder
|
|
1
|
+
# Controller NavRoute and Folder Hierarchy
|
|
2
|
+
|
|
3
|
+
> Referenced from `steps/step-04-backend.md` — Controller file organization and NavRoute conventions.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Controller File Location
|
|
8
|
+
|
|
9
|
+
Controllers are organized by **application** (matching SmartStack.app pattern):
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Api/Controllers/
|
|
13
|
+
├── Administration/ ← administration.*
|
|
14
|
+
│ ├── {Module}/ ← Module sub-folder (e.g., AI/, Communications/, Tenants/)
|
|
15
|
+
│ │ └── {EntityName}Controller.cs
|
|
16
|
+
│ └── {EntityName}Controller.cs ← Direct controllers (no module sub-folder)
|
|
17
|
+
├── Support/ ← support.*
|
|
18
|
+
│ └── {EntityName}Controller.cs
|
|
19
|
+
├── {ApplicationPascal}/ ← Other applications (e.g., Sales/, HumanResources/)
|
|
20
|
+
│ └── {EntityName}Controller.cs
|
|
21
|
+
├── MySpace/ ← myspace.*
|
|
22
|
+
│ └── {EntityName}Controller.cs
|
|
23
|
+
└── {SharedControllers}.cs ← Root-level (Auth, Config, Navigation, etc.)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Application-to-Folder Mapping
|
|
27
|
+
|
|
28
|
+
| NavRoute Application | Controller Folder | Example |
|
|
29
|
+
|-----------------|-------------------|---------|
|
|
30
|
+
| `administration` | `Administration` | `Controllers/Administration/TenantsController.cs` |
|
|
31
|
+
| `administration.{module}` | `Administration/{Module}` | `Controllers/Administration/AI/AiPromptsController.cs` |
|
|
32
|
+
| `support` | `Support` | `Controllers/Support/TicketsController.cs` |
|
|
33
|
+
| `{application}` | `{ApplicationPascal}` | `Controllers/Sales/ProductsController.cs` |
|
|
34
|
+
| `myspace` | `MySpace` | `Controllers/MySpace/PreferencesController.cs` |
|
|
35
|
+
|
|
36
|
+
## Controller Attributes
|
|
37
|
+
|
|
38
|
+
The generated controller uses NavRoute attribute:
|
|
39
|
+
|
|
40
|
+
```csharp
|
|
41
|
+
[NavRoute("{full_path}")]
|
|
42
|
+
[ApiController]
|
|
43
|
+
[Authorize]
|
|
44
|
+
public class {EntityName}Controller : ControllerBase
|
|
45
|
+
{
|
|
46
|
+
[HttpGet]
|
|
47
|
+
[RequirePermission(Permissions.{Application}.{Module}.Read)]
|
|
48
|
+
public async Task<ActionResult<IEnumerable<{EntityName}Dto>>> GetAll() { ... }
|
|
49
|
+
|
|
50
|
+
// ... other CRUD methods
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
This ensures:
|
|
55
|
+
- API route is derived from navigation path
|
|
56
|
+
- Permissions use the constants from Permissions.cs
|
|
57
|
+
- Frontend can discover API path from NavRoute registry
|
|
58
|
+
- Controller file is in the correct application folder
|