@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,419 +1,419 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: step-01b-applications
|
|
3
|
-
description: Application identity confirmation (single-app) or full application decomposition (multi-app)
|
|
4
|
-
model: opus
|
|
5
|
-
next_step: steps/step-02-decomposition.md
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
> **Context files:** `_shared.md`
|
|
9
|
-
|
|
10
|
-
# Step 1b: Application Identity & Decomposition
|
|
11
|
-
|
|
12
|
-
## MANDATORY EXECUTION RULES
|
|
13
|
-
|
|
14
|
-
- ALWAYS use ULTRATHINK mode
|
|
15
|
-
- ALL communication in `{language}`
|
|
16
|
-
- This step ALWAYS runs. It has two modes:
|
|
17
|
-
- **Single-app mode** (`workflow.mode !== "project"`): Lightweight application identity confirmation — name, code, context, route, icon, table prefix validation, application roles recap. Creates the `seedDataCore.navigationApplications` entry.
|
|
18
|
-
- **Multi-app mode** (`workflow.mode === "project"`): Full application decomposition as defined in sections 1-7 below.
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## MODE GATE
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
IF workflow.mode === "project":
|
|
26
|
-
→ Execute FULL multi-app flow (sections 1-7 below)
|
|
27
|
-
ELSE:
|
|
28
|
-
→ Execute LIGHTWEIGHT single-app identity (sections 0a-0f below)
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## SINGLE-APP PATH (sections 0a-0f)
|
|
34
|
-
|
|
35
|
-
> This path runs when `workflow.mode !== "project"` (single application, most common case).
|
|
36
|
-
> It confirms the application-level identity (Level 2 of the navigation hierarchy) before proceeding to module decomposition.
|
|
37
|
-
|
|
38
|
-
### 0a. Read Application Context
|
|
39
|
-
|
|
40
|
-
```
|
|
41
|
-
appFeature = ba-reader.findFeature({feature_id})
|
|
42
|
-
→ Read metadata: application, context, tablePrefix
|
|
43
|
-
→ Read cadrage: applicationRoles, coverageMatrix, globalScope
|
|
44
|
-
→ Read cadrage.codebaseContext (if exists)
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### 0b. Derive Application Identity
|
|
48
|
-
|
|
49
|
-
From the cadrage data, derive the formal application identity:
|
|
50
|
-
|
|
51
|
-
```javascript
|
|
52
|
-
applicationCode = toPascalCase(metadata.application) // e.g., "HumanResources"
|
|
53
|
-
applicationLabel = metadata.application // e.g., "Ressources Humaines" (human-readable)
|
|
54
|
-
applicationRoute = `/${toKebabCase(applicationCode)}` // e.g., "/human-resources"
|
|
55
|
-
applicationIcon = suggestIconFromDomain(applicationCode) // e.g., "users" for HR, "shopping-cart" for Sales
|
|
56
|
-
tablePrefix = metadata.tablePrefix // e.g., "rh_" (already defined in step-01)
|
|
57
|
-
sort = 1 // First (and only) application
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
**Icon suggestion heuristics:**
|
|
61
|
-
| Domain pattern | Suggested icon |
|
|
62
|
-
|---------------|---------------|
|
|
63
|
-
| HR, Employee, Staff, Personnel | `users` |
|
|
64
|
-
| Sales, Commerce, Revenue | `shopping-cart` |
|
|
65
|
-
| Finance, Accounting, Budget | `wallet` |
|
|
66
|
-
| Inventory, Stock, Warehouse | `package` |
|
|
67
|
-
| CRM, Customer, Client | `contact` |
|
|
68
|
-
| Project, Task, Planning | `clipboard-list` |
|
|
69
|
-
| Support, Ticket, Help | `headphones` |
|
|
70
|
-
| Reporting, Analytics, Dashboard | `bar-chart-2` |
|
|
71
|
-
| Other | `layout-grid` |
|
|
72
|
-
|
|
73
|
-
### 0c. Confirm Application Identity (BLOCKING)
|
|
74
|
-
|
|
75
|
-
Display the application identity:
|
|
76
|
-
|
|
77
|
-
```
|
|
78
|
-
{language == "fr"
|
|
79
|
-
? "## Identité de l'application\n\nVoici l'identité de votre application dans la hiérarchie de navigation SmartStack :"
|
|
80
|
-
: "## Application Identity\n\nHere is your application's identity in the SmartStack navigation hierarchy:"}
|
|
81
|
-
|
|
82
|
-
| {language == "fr" ? "Niveau" : "Level"} | {language == "fr" ? "Valeur" : "Value"} |
|
|
83
|
-
|-------|-------|
|
|
84
|
-
| Application Code | `{applicationCode}` |
|
|
85
|
-
| Application Name | `{applicationLabel}` |
|
|
86
|
-
| Route | `{applicationRoute}` |
|
|
87
|
-
| Icon | `{applicationIcon}` |
|
|
88
|
-
| Table Prefix | `{tablePrefix}` |
|
|
89
|
-
| Sort Order | `{sort}` |
|
|
90
|
-
|
|
91
|
-
{language == "fr"
|
|
92
|
-
? "### Rôles applicatifs\n\nCes rôles seront hérités par tous les modules :"
|
|
93
|
-
: "### Application Roles\n\nThese roles will be inherited by all modules:"}
|
|
94
|
-
|
|
95
|
-
| Role | Level | Permission Pattern |
|
|
96
|
-
|------|-------|--------------------|
|
|
97
|
-
{for each role in cadrage.applicationRoles: role.role | role.level | {kebab(applicationCode)}.* }
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
Ask via AskUserQuestion:
|
|
101
|
-
```
|
|
102
|
-
question: "{language == 'fr' ? 'Cette identité d\'application est-elle correcte ?' : 'Is this application identity correct?'}"
|
|
103
|
-
header: "Application"
|
|
104
|
-
options:
|
|
105
|
-
- label: "{language == 'fr' ? 'Oui, parfait' : 'Yes, perfect'}"
|
|
106
|
-
description: "{language == 'fr' ? 'Code, route, icône et rôles sont corrects' : 'Code, route, icon and roles are correct'}"
|
|
107
|
-
- label: "{language == 'fr' ? 'Modifier' : 'Modify'}"
|
|
108
|
-
description: "{language == 'fr' ? 'Changer le code, la route, l\'icône ou les rôles' : 'Change code, route, icon or roles'}"
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
**IF "Modify":**
|
|
112
|
-
→ Ask which field(s) to change via follow-up AskUserQuestion
|
|
113
|
-
→ Apply changes
|
|
114
|
-
→ Re-display and re-confirm (loop until validated)
|
|
115
|
-
|
|
116
|
-
### 0d. Build Application SeedData Entries
|
|
117
|
-
|
|
118
|
-
Create the `navigationApplications` entry (Level 1 hierarchy entry):
|
|
119
|
-
|
|
120
|
-
```json
|
|
121
|
-
{
|
|
122
|
-
"navigationApplications": [
|
|
123
|
-
{
|
|
124
|
-
"code": "{applicationCode}",
|
|
125
|
-
"label": "{applicationLabel}",
|
|
126
|
-
"icon": "{applicationIcon}",
|
|
127
|
-
"route": "{applicationRoute}",
|
|
128
|
-
"sort": 1
|
|
129
|
-
}
|
|
130
|
-
]
|
|
131
|
-
}
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
Create the `applicationRoles` entries (from cadrage.applicationRoles):
|
|
135
|
-
|
|
136
|
-
```json
|
|
137
|
-
{
|
|
138
|
-
"applicationRoles": [
|
|
139
|
-
{ "code": "admin", "name": "{applicationLabel} Admin", "permissions": "*" },
|
|
140
|
-
{ "code": "manager", "name": "{applicationLabel} Manager", "permissions": "CRU" },
|
|
141
|
-
{ "code": "contributor", "name": "{applicationLabel} Contributor", "permissions": "CR" },
|
|
142
|
-
{ "code": "viewer", "name": "{applicationLabel} Viewer", "permissions": "R" }
|
|
143
|
-
]
|
|
144
|
-
}
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
> **NOTE:** The roles map from `cadrage.applicationRoles` levels. If the cadrage defined custom roles beyond the standard 4, include them here too.
|
|
148
|
-
|
|
149
|
-
### 0e. Write Application Identity to Feature.json
|
|
150
|
-
|
|
151
|
-
```
|
|
152
|
-
ba-writer.enrichSection({
|
|
153
|
-
featureId: {feature_id},
|
|
154
|
-
section: "metadata",
|
|
155
|
-
data: {
|
|
156
|
-
applicationCode: "{applicationCode}",
|
|
157
|
-
applicationRoute: "{applicationRoute}",
|
|
158
|
-
applicationIcon: "{applicationIcon}"
|
|
159
|
-
}
|
|
160
|
-
})
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
> **NOTE:** The full `seedDataCore` arrays (`navigationApplications`, `applicationRoles`) will be written in step-03c when compiling the first module's specification. Here we only persist the identity fields in metadata so they are available to step-02 and step-03.
|
|
164
|
-
|
|
165
|
-
### 0f. Summary and Continue
|
|
166
|
-
|
|
167
|
-
```
|
|
168
|
-
{language == "fr"
|
|
169
|
-
? "✅ Application **{applicationCode}** identifiée\n\n- Route : `{applicationRoute}`\n- Icône : `{applicationIcon}`\n- Préfixe : `{tablePrefix}`\n- Rôles : {roleCount} rôles applicatifs définis\n\n→ Prochaine étape : décomposition en modules"
|
|
170
|
-
: "✅ Application **{applicationCode}** identified\n\n- Route: `{applicationRoute}`\n- Icon: `{applicationIcon}`\n- Prefix: `{tablePrefix}`\n- Roles: {roleCount} application roles defined\n\n→ Next step: module decomposition"}
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
→ Load `steps/step-02-decomposition.md`
|
|
174
|
-
|
|
175
|
-
---
|
|
176
|
-
|
|
177
|
-
## MULTI-APP PATH (sections 1-7)
|
|
178
|
-
|
|
179
|
-
> This path runs when `workflow.mode === "project"` (multi-application mode).
|
|
180
|
-
> It takes the candidate applications identified during cadrage and formalizes them.
|
|
181
|
-
|
|
182
|
-
### 1. Load Project Context
|
|
183
|
-
|
|
184
|
-
```
|
|
185
|
-
projectFeature = ba-reader.findProjectFeature()
|
|
186
|
-
globalRoles = projectFeature.cadrage.globalRoles (if defined)
|
|
187
|
-
globalScope = projectFeature.cadrage.globalScope
|
|
188
|
-
|
|
189
|
-
// Candidate applications: PRE-IDENTIFIED from step-00 prompt analysis + enriched by step-01 cadrage
|
|
190
|
-
candidateApps = projectFeature.metadata.candidateApplications
|
|
191
|
-
// These candidates already have: name, description, modules[], context, dependencies[]
|
|
192
|
-
// They may also include transversal apps extracted from shared modules (step-01 section 5b)
|
|
193
|
-
|
|
194
|
-
IF candidateApps is null or empty:
|
|
195
|
-
// Fallback: derive from coverage matrix (legacy path)
|
|
196
|
-
candidateApps = projectFeature.cadrage.coverageMatrix grouped by domain
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
### 2. Application Identity (per candidate)
|
|
200
|
-
|
|
201
|
-
For EACH candidate application from the cadrage analysis:
|
|
202
|
-
|
|
203
|
-
#### 2a. Confirm Application Name and Context
|
|
204
|
-
|
|
205
|
-
Display proposed application:
|
|
206
|
-
```
|
|
207
|
-
{language == "fr"
|
|
208
|
-
? "### Application : {suggestedName}\n\n**Description :** {description based on coverage matrix items}"
|
|
209
|
-
: "### Application: {suggestedName}\n\n**Description:** {description based on coverage matrix items}"}
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
Ask via AskUserQuestion:
|
|
213
|
-
```
|
|
214
|
-
question: "{language == 'fr' ? 'Cette application vous convient-elle ?' : 'Does this application suit you?'}"
|
|
215
|
-
header: "{appName}"
|
|
216
|
-
options:
|
|
217
|
-
- label: "{language == 'fr' ? 'Oui, parfait' : 'Yes, perfect'}"
|
|
218
|
-
description: "{language == 'fr' ? 'Nom et description corrects' : 'Name and description are correct'}"
|
|
219
|
-
- label: "{language == 'fr' ? 'Modifier' : 'Modify'}"
|
|
220
|
-
description: "{language == 'fr' ? 'Changer le nom ou la description' : 'Change name or description'}"
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
#### 2b. Table Prefix (per application)
|
|
224
|
-
|
|
225
|
-
Each application MUST have its own unique table prefix.
|
|
226
|
-
|
|
227
|
-
1. Derive suggested prefix from application name (2-5 lowercase letters + `_`)
|
|
228
|
-
2. Validate:
|
|
229
|
-
- Format: `^[a-z]{2,5}_$`
|
|
230
|
-
- No collision with platform prefixes: `auth_`, `nav_`, `usr_`, `ai_`, `cfg_`, `wkf_`, `support_`, `entra_`, `ref_`, `loc_`, `lic_`, `tenant_`
|
|
231
|
-
- No collision with other applications in this project
|
|
232
|
-
3. Ask via AskUserQuestion for confirmation
|
|
233
|
-
|
|
234
|
-
#### 2c. Application-Specific Roles
|
|
235
|
-
|
|
236
|
-
Based on global roles from cadrage + application-specific needs:
|
|
237
|
-
|
|
238
|
-
```
|
|
239
|
-
{language == "fr"
|
|
240
|
-
? "### Rôles pour {appName}\n\nVoici les rôles hérités des rôles globaux, adaptés à cette application :"
|
|
241
|
-
: "### Roles for {appName}\n\nHere are the roles inherited from global roles, adapted for this application:"}
|
|
242
|
-
|
|
243
|
-
| Role | Level | Permission Pattern |
|
|
244
|
-
|------|-------|--------------------|
|
|
245
|
-
{for each role: name | admin/manager/contributor/viewer | app.* pattern}
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
Ask via AskUserQuestion if additional roles are needed for this specific application.
|
|
249
|
-
|
|
250
|
-
#### 2d. Application Scope
|
|
251
|
-
|
|
252
|
-
Extract the subset of global scope that applies to this application:
|
|
253
|
-
|
|
254
|
-
```
|
|
255
|
-
applicationScope = {
|
|
256
|
-
mustHave: globalScope.mustHave.filter(item => belongsToApp(item, appCode)),
|
|
257
|
-
shouldHave: globalScope.shouldHave.filter(item => belongsToApp(item, appCode)),
|
|
258
|
-
couldHave: globalScope.couldHave.filter(item => belongsToApp(item, appCode))
|
|
259
|
-
}
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
Display and confirm with user.
|
|
263
|
-
|
|
264
|
-
### 3. Inter-Application Dependency Analysis
|
|
265
|
-
|
|
266
|
-
After all applications are defined:
|
|
267
|
-
|
|
268
|
-
1. **Identify dependencies:** For each pair of applications:
|
|
269
|
-
- Shared entities (e.g., Employee defined in HR, referenced by Self-Service)
|
|
270
|
-
- Event flows (e.g., HR publishes "EmployeeCreated", Self-Service subscribes)
|
|
271
|
-
- Authentication delegation (e.g., Self-Service uses HR's employee data for auth)
|
|
272
|
-
- Data dependencies (e.g., Self-Service reads HR data)
|
|
273
|
-
|
|
274
|
-
2. **Build dependency graph:**
|
|
275
|
-
```
|
|
276
|
-
applicationDependencyGraph = {
|
|
277
|
-
edges: [
|
|
278
|
-
{ from: "EmployeeSelfService", to: "HumanResources", type: "data-dependency", description: "Reads employee data" }
|
|
279
|
-
],
|
|
280
|
-
topologicalOrder: ["HumanResources", "EmployeeSelfService"],
|
|
281
|
-
layers: [
|
|
282
|
-
{ layer: 0, applications: ["HumanResources"] },
|
|
283
|
-
{ layer: 1, applications: ["EmployeeSelfService"] }
|
|
284
|
-
]
|
|
285
|
-
}
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
3. **Cycle detection:** If circular dependencies detected → BLOCKING ERROR
|
|
289
|
-
- Display the cycle
|
|
290
|
-
- Ask user to resolve (merge applications or remove dependency)
|
|
291
|
-
|
|
292
|
-
### 4. Client Checkpoint (BLOCKING)
|
|
293
|
-
|
|
294
|
-
Display the full application structure:
|
|
295
|
-
|
|
296
|
-
```
|
|
297
|
-
{language == "fr"
|
|
298
|
-
? "### Structure du projet\n\nVoici les applications identifiées :"
|
|
299
|
-
: "### Project Structure\n\nHere are the identified applications:"}
|
|
300
|
-
|
|
301
|
-
| # | Application | Préfixe | Rôles | Dépendances |
|
|
302
|
-
|---|-------------|---------|-------|-------------|
|
|
303
|
-
{for each app: index | name | prefix | role count | dependency list}
|
|
304
|
-
|
|
305
|
-
{language == "fr"
|
|
306
|
-
? "### Ordre de traitement\n\nLes applications seront traitées dans cet ordre (fondations d'abord) :"
|
|
307
|
-
: "### Processing Order\n\nApplications will be processed in this order (foundations first):"}
|
|
308
|
-
|
|
309
|
-
{for each layer: "Layer {n}: {app1}, {app2}, ..."}
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
Ask via AskUserQuestion:
|
|
313
|
-
```
|
|
314
|
-
question: "{language == 'fr' ? 'Cette structure de projet vous convient-elle ?' : 'Does this project structure suit you?'}"
|
|
315
|
-
header: "Validation"
|
|
316
|
-
options:
|
|
317
|
-
- label: "{language == 'fr' ? 'Oui, continuer' : 'Yes, continue'}"
|
|
318
|
-
description: "{language == 'fr' ? 'Passer à la décomposition en modules' : 'Proceed to module decomposition'}"
|
|
319
|
-
- label: "{language == 'fr' ? 'Modifier' : 'Modify'}"
|
|
320
|
-
description: "{language == 'fr' ? 'Ajouter, supprimer ou modifier des applications' : 'Add, remove, or modify applications'}"
|
|
321
|
-
- label: "{language == 'fr' ? 'Fusionner en une seule' : 'Merge into one'}"
|
|
322
|
-
description: "{language == 'fr' ? 'Finalement, c\'est une seule application avec plusieurs modules' : 'Actually, this is one application with multiple modules'}"
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
**IF "Merge into one":**
|
|
326
|
-
→ Convert back to single-application mode
|
|
327
|
-
→ Delete project-level feature.json
|
|
328
|
-
→ Create application-level feature.json with all scope items
|
|
329
|
-
→ Execute single-app path (sections 0a-0f above)
|
|
330
|
-
|
|
331
|
-
### 5. Create Per-Application Feature.json Files
|
|
332
|
-
|
|
333
|
-
For EACH application in topological order:
|
|
334
|
-
|
|
335
|
-
```
|
|
336
|
-
ba-writer.createApplicationFeature({
|
|
337
|
-
id: generate_feature_id(),
|
|
338
|
-
version: "1.0",
|
|
339
|
-
scope: "application",
|
|
340
|
-
status: "draft",
|
|
341
|
-
metadata: {
|
|
342
|
-
application: {app.code},
|
|
343
|
-
applicationCode: {toPascalCase(app.code)},
|
|
344
|
-
applicationRoute: {`/${toKebabCase(app.code)}`},
|
|
345
|
-
applicationIcon: {app.icon},
|
|
346
|
-
language: {language},
|
|
347
|
-
featureDescription: {app.description},
|
|
348
|
-
workflowType: "new",
|
|
349
|
-
analysisMode: "interactive",
|
|
350
|
-
mcpAvailable: true,
|
|
351
|
-
tablePrefix: {app.tablePrefix},
|
|
352
|
-
projectRef: {project_id},
|
|
353
|
-
workflow: {
|
|
354
|
-
mode: "application",
|
|
355
|
-
moduleOrder: [],
|
|
356
|
-
currentModuleIndex: 0,
|
|
357
|
-
completedModules: [],
|
|
358
|
-
currentModule: null
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
})
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
Store the created feature.json path in the project feature.json `applications[].featureJsonPath`.
|
|
365
|
-
|
|
366
|
-
### 6. Write to Project Feature.json
|
|
367
|
-
|
|
368
|
-
```
|
|
369
|
-
ba-writer.enrichApplicationRegistry({
|
|
370
|
-
projectId: {project_id},
|
|
371
|
-
applications: [
|
|
372
|
-
{
|
|
373
|
-
code: {app1.code},
|
|
374
|
-
name: {app1.name},
|
|
375
|
-
tablePrefix: {app1.tablePrefix},
|
|
376
|
-
icon: {app1.icon},
|
|
377
|
-
route: {app1.route},
|
|
378
|
-
description: {app1.description},
|
|
379
|
-
applicationRoles: [{...}],
|
|
380
|
-
scope: { mustHave: [...], shouldHave: [...], couldHave: [...] },
|
|
381
|
-
modules: [],
|
|
382
|
-
dependencies: [{...}],
|
|
383
|
-
status: "pending",
|
|
384
|
-
featureJsonPath: {app1.featureJsonPath},
|
|
385
|
-
estimatedComplexity: {app1.estimatedComplexity}
|
|
386
|
-
},
|
|
387
|
-
// ... more applications
|
|
388
|
-
],
|
|
389
|
-
applicationDependencyGraph: {
|
|
390
|
-
edges: [...],
|
|
391
|
-
topologicalOrder: [...],
|
|
392
|
-
layers: [...]
|
|
393
|
-
}
|
|
394
|
-
})
|
|
395
|
-
|
|
396
|
-
ba-writer.updateStatus({project_id}, "decomposed")
|
|
397
|
-
```
|
|
398
|
-
|
|
399
|
-
### 7. Display Summary
|
|
400
|
-
|
|
401
|
-
```
|
|
402
|
-
{language == "fr"
|
|
403
|
-
? "### Décomposition en applications terminée\n\n"
|
|
404
|
-
: "### Application decomposition complete\n\n"}
|
|
405
|
-
|
|
406
|
-
| Application | Préfixe | Route | Feature ID |
|
|
407
|
-
|-------------|---------|-------|------------|
|
|
408
|
-
{for each app: name | prefix | route | FEAT-NNN}
|
|
409
|
-
|
|
410
|
-
{language == "fr"
|
|
411
|
-
? "→ Prochaine étape : décomposition en modules pour **{firstApp}** (application {1}/{total})"
|
|
412
|
-
: "→ Next step: module decomposition for **{firstApp}** (application {1}/{total})"}
|
|
413
|
-
```
|
|
414
|
-
|
|
415
|
-
---
|
|
416
|
-
|
|
417
|
-
## NEXT STEP
|
|
418
|
-
|
|
419
|
-
Load: `./step-02-decomposition.md` (for the first application in topological order, or the single application)
|
|
1
|
+
---
|
|
2
|
+
name: step-01b-applications
|
|
3
|
+
description: Application identity confirmation (single-app) or full application decomposition (multi-app)
|
|
4
|
+
model: opus
|
|
5
|
+
next_step: steps/step-02-decomposition.md
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
> **Context files:** `_shared.md`
|
|
9
|
+
|
|
10
|
+
# Step 1b: Application Identity & Decomposition
|
|
11
|
+
|
|
12
|
+
## MANDATORY EXECUTION RULES
|
|
13
|
+
|
|
14
|
+
- ALWAYS use ULTRATHINK mode
|
|
15
|
+
- ALL communication in `{language}`
|
|
16
|
+
- This step ALWAYS runs. It has two modes:
|
|
17
|
+
- **Single-app mode** (`workflow.mode !== "project"`): Lightweight application identity confirmation — name, code, context, route, icon, table prefix validation, application roles recap. Creates the `seedDataCore.navigationApplications` entry.
|
|
18
|
+
- **Multi-app mode** (`workflow.mode === "project"`): Full application decomposition as defined in sections 1-7 below.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## MODE GATE
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
IF workflow.mode === "project":
|
|
26
|
+
→ Execute FULL multi-app flow (sections 1-7 below)
|
|
27
|
+
ELSE:
|
|
28
|
+
→ Execute LIGHTWEIGHT single-app identity (sections 0a-0f below)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## SINGLE-APP PATH (sections 0a-0f)
|
|
34
|
+
|
|
35
|
+
> This path runs when `workflow.mode !== "project"` (single application, most common case).
|
|
36
|
+
> It confirms the application-level identity (Level 2 of the navigation hierarchy) before proceeding to module decomposition.
|
|
37
|
+
|
|
38
|
+
### 0a. Read Application Context
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
appFeature = ba-reader.findFeature({feature_id})
|
|
42
|
+
→ Read metadata: application, context, tablePrefix
|
|
43
|
+
→ Read cadrage: applicationRoles, coverageMatrix, globalScope
|
|
44
|
+
→ Read cadrage.codebaseContext (if exists)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 0b. Derive Application Identity
|
|
48
|
+
|
|
49
|
+
From the cadrage data, derive the formal application identity:
|
|
50
|
+
|
|
51
|
+
```javascript
|
|
52
|
+
applicationCode = toPascalCase(metadata.application) // e.g., "HumanResources"
|
|
53
|
+
applicationLabel = metadata.application // e.g., "Ressources Humaines" (human-readable)
|
|
54
|
+
applicationRoute = `/${toKebabCase(applicationCode)}` // e.g., "/human-resources"
|
|
55
|
+
applicationIcon = suggestIconFromDomain(applicationCode) // e.g., "users" for HR, "shopping-cart" for Sales
|
|
56
|
+
tablePrefix = metadata.tablePrefix // e.g., "rh_" (already defined in step-01)
|
|
57
|
+
sort = 1 // First (and only) application
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Icon suggestion heuristics:**
|
|
61
|
+
| Domain pattern | Suggested icon |
|
|
62
|
+
|---------------|---------------|
|
|
63
|
+
| HR, Employee, Staff, Personnel | `users` |
|
|
64
|
+
| Sales, Commerce, Revenue | `shopping-cart` |
|
|
65
|
+
| Finance, Accounting, Budget | `wallet` |
|
|
66
|
+
| Inventory, Stock, Warehouse | `package` |
|
|
67
|
+
| CRM, Customer, Client | `contact` |
|
|
68
|
+
| Project, Task, Planning | `clipboard-list` |
|
|
69
|
+
| Support, Ticket, Help | `headphones` |
|
|
70
|
+
| Reporting, Analytics, Dashboard | `bar-chart-2` |
|
|
71
|
+
| Other | `layout-grid` |
|
|
72
|
+
|
|
73
|
+
### 0c. Confirm Application Identity (BLOCKING)
|
|
74
|
+
|
|
75
|
+
Display the application identity:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
{language == "fr"
|
|
79
|
+
? "## Identité de l'application\n\nVoici l'identité de votre application dans la hiérarchie de navigation SmartStack :"
|
|
80
|
+
: "## Application Identity\n\nHere is your application's identity in the SmartStack navigation hierarchy:"}
|
|
81
|
+
|
|
82
|
+
| {language == "fr" ? "Niveau" : "Level"} | {language == "fr" ? "Valeur" : "Value"} |
|
|
83
|
+
|-------|-------|
|
|
84
|
+
| Application Code | `{applicationCode}` |
|
|
85
|
+
| Application Name | `{applicationLabel}` |
|
|
86
|
+
| Route | `{applicationRoute}` |
|
|
87
|
+
| Icon | `{applicationIcon}` |
|
|
88
|
+
| Table Prefix | `{tablePrefix}` |
|
|
89
|
+
| Sort Order | `{sort}` |
|
|
90
|
+
|
|
91
|
+
{language == "fr"
|
|
92
|
+
? "### Rôles applicatifs\n\nCes rôles seront hérités par tous les modules :"
|
|
93
|
+
: "### Application Roles\n\nThese roles will be inherited by all modules:"}
|
|
94
|
+
|
|
95
|
+
| Role | Level | Permission Pattern |
|
|
96
|
+
|------|-------|--------------------|
|
|
97
|
+
{for each role in cadrage.applicationRoles: role.role | role.level | {kebab(applicationCode)}.* }
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Ask via AskUserQuestion:
|
|
101
|
+
```
|
|
102
|
+
question: "{language == 'fr' ? 'Cette identité d\'application est-elle correcte ?' : 'Is this application identity correct?'}"
|
|
103
|
+
header: "Application"
|
|
104
|
+
options:
|
|
105
|
+
- label: "{language == 'fr' ? 'Oui, parfait' : 'Yes, perfect'}"
|
|
106
|
+
description: "{language == 'fr' ? 'Code, route, icône et rôles sont corrects' : 'Code, route, icon and roles are correct'}"
|
|
107
|
+
- label: "{language == 'fr' ? 'Modifier' : 'Modify'}"
|
|
108
|
+
description: "{language == 'fr' ? 'Changer le code, la route, l\'icône ou les rôles' : 'Change code, route, icon or roles'}"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**IF "Modify":**
|
|
112
|
+
→ Ask which field(s) to change via follow-up AskUserQuestion
|
|
113
|
+
→ Apply changes
|
|
114
|
+
→ Re-display and re-confirm (loop until validated)
|
|
115
|
+
|
|
116
|
+
### 0d. Build Application SeedData Entries
|
|
117
|
+
|
|
118
|
+
Create the `navigationApplications` entry (Level 1 hierarchy entry):
|
|
119
|
+
|
|
120
|
+
```json
|
|
121
|
+
{
|
|
122
|
+
"navigationApplications": [
|
|
123
|
+
{
|
|
124
|
+
"code": "{applicationCode}",
|
|
125
|
+
"label": "{applicationLabel}",
|
|
126
|
+
"icon": "{applicationIcon}",
|
|
127
|
+
"route": "{applicationRoute}",
|
|
128
|
+
"sort": 1
|
|
129
|
+
}
|
|
130
|
+
]
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Create the `applicationRoles` entries (from cadrage.applicationRoles):
|
|
135
|
+
|
|
136
|
+
```json
|
|
137
|
+
{
|
|
138
|
+
"applicationRoles": [
|
|
139
|
+
{ "code": "admin", "name": "{applicationLabel} Admin", "permissions": "*" },
|
|
140
|
+
{ "code": "manager", "name": "{applicationLabel} Manager", "permissions": "CRU" },
|
|
141
|
+
{ "code": "contributor", "name": "{applicationLabel} Contributor", "permissions": "CR" },
|
|
142
|
+
{ "code": "viewer", "name": "{applicationLabel} Viewer", "permissions": "R" }
|
|
143
|
+
]
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
> **NOTE:** The roles map from `cadrage.applicationRoles` levels. If the cadrage defined custom roles beyond the standard 4, include them here too.
|
|
148
|
+
|
|
149
|
+
### 0e. Write Application Identity to Feature.json
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
ba-writer.enrichSection({
|
|
153
|
+
featureId: {feature_id},
|
|
154
|
+
section: "metadata",
|
|
155
|
+
data: {
|
|
156
|
+
applicationCode: "{applicationCode}",
|
|
157
|
+
applicationRoute: "{applicationRoute}",
|
|
158
|
+
applicationIcon: "{applicationIcon}"
|
|
159
|
+
}
|
|
160
|
+
})
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
> **NOTE:** The full `seedDataCore` arrays (`navigationApplications`, `applicationRoles`) will be written in step-03c when compiling the first module's specification. Here we only persist the identity fields in metadata so they are available to step-02 and step-03.
|
|
164
|
+
|
|
165
|
+
### 0f. Summary and Continue
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
{language == "fr"
|
|
169
|
+
? "✅ Application **{applicationCode}** identifiée\n\n- Route : `{applicationRoute}`\n- Icône : `{applicationIcon}`\n- Préfixe : `{tablePrefix}`\n- Rôles : {roleCount} rôles applicatifs définis\n\n→ Prochaine étape : décomposition en modules"
|
|
170
|
+
: "✅ Application **{applicationCode}** identified\n\n- Route: `{applicationRoute}`\n- Icon: `{applicationIcon}`\n- Prefix: `{tablePrefix}`\n- Roles: {roleCount} application roles defined\n\n→ Next step: module decomposition"}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
→ Load `steps/step-02-decomposition.md`
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## MULTI-APP PATH (sections 1-7)
|
|
178
|
+
|
|
179
|
+
> This path runs when `workflow.mode === "project"` (multi-application mode).
|
|
180
|
+
> It takes the candidate applications identified during cadrage and formalizes them.
|
|
181
|
+
|
|
182
|
+
### 1. Load Project Context
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
projectFeature = ba-reader.findProjectFeature()
|
|
186
|
+
globalRoles = projectFeature.cadrage.globalRoles (if defined)
|
|
187
|
+
globalScope = projectFeature.cadrage.globalScope
|
|
188
|
+
|
|
189
|
+
// Candidate applications: PRE-IDENTIFIED from step-00 prompt analysis + enriched by step-01 cadrage
|
|
190
|
+
candidateApps = projectFeature.metadata.candidateApplications
|
|
191
|
+
// These candidates already have: name, description, modules[], context, dependencies[]
|
|
192
|
+
// They may also include transversal apps extracted from shared modules (step-01 section 5b)
|
|
193
|
+
|
|
194
|
+
IF candidateApps is null or empty:
|
|
195
|
+
// Fallback: derive from coverage matrix (legacy path)
|
|
196
|
+
candidateApps = projectFeature.cadrage.coverageMatrix grouped by domain
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### 2. Application Identity (per candidate)
|
|
200
|
+
|
|
201
|
+
For EACH candidate application from the cadrage analysis:
|
|
202
|
+
|
|
203
|
+
#### 2a. Confirm Application Name and Context
|
|
204
|
+
|
|
205
|
+
Display proposed application:
|
|
206
|
+
```
|
|
207
|
+
{language == "fr"
|
|
208
|
+
? "### Application : {suggestedName}\n\n**Description :** {description based on coverage matrix items}"
|
|
209
|
+
: "### Application: {suggestedName}\n\n**Description:** {description based on coverage matrix items}"}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Ask via AskUserQuestion:
|
|
213
|
+
```
|
|
214
|
+
question: "{language == 'fr' ? 'Cette application vous convient-elle ?' : 'Does this application suit you?'}"
|
|
215
|
+
header: "{appName}"
|
|
216
|
+
options:
|
|
217
|
+
- label: "{language == 'fr' ? 'Oui, parfait' : 'Yes, perfect'}"
|
|
218
|
+
description: "{language == 'fr' ? 'Nom et description corrects' : 'Name and description are correct'}"
|
|
219
|
+
- label: "{language == 'fr' ? 'Modifier' : 'Modify'}"
|
|
220
|
+
description: "{language == 'fr' ? 'Changer le nom ou la description' : 'Change name or description'}"
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
#### 2b. Table Prefix (per application)
|
|
224
|
+
|
|
225
|
+
Each application MUST have its own unique table prefix.
|
|
226
|
+
|
|
227
|
+
1. Derive suggested prefix from application name (2-5 lowercase letters + `_`)
|
|
228
|
+
2. Validate:
|
|
229
|
+
- Format: `^[a-z]{2,5}_$`
|
|
230
|
+
- No collision with platform prefixes: `auth_`, `nav_`, `usr_`, `ai_`, `cfg_`, `wkf_`, `support_`, `entra_`, `ref_`, `loc_`, `lic_`, `tenant_`
|
|
231
|
+
- No collision with other applications in this project
|
|
232
|
+
3. Ask via AskUserQuestion for confirmation
|
|
233
|
+
|
|
234
|
+
#### 2c. Application-Specific Roles
|
|
235
|
+
|
|
236
|
+
Based on global roles from cadrage + application-specific needs:
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
{language == "fr"
|
|
240
|
+
? "### Rôles pour {appName}\n\nVoici les rôles hérités des rôles globaux, adaptés à cette application :"
|
|
241
|
+
: "### Roles for {appName}\n\nHere are the roles inherited from global roles, adapted for this application:"}
|
|
242
|
+
|
|
243
|
+
| Role | Level | Permission Pattern |
|
|
244
|
+
|------|-------|--------------------|
|
|
245
|
+
{for each role: name | admin/manager/contributor/viewer | app.* pattern}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Ask via AskUserQuestion if additional roles are needed for this specific application.
|
|
249
|
+
|
|
250
|
+
#### 2d. Application Scope
|
|
251
|
+
|
|
252
|
+
Extract the subset of global scope that applies to this application:
|
|
253
|
+
|
|
254
|
+
```
|
|
255
|
+
applicationScope = {
|
|
256
|
+
mustHave: globalScope.mustHave.filter(item => belongsToApp(item, appCode)),
|
|
257
|
+
shouldHave: globalScope.shouldHave.filter(item => belongsToApp(item, appCode)),
|
|
258
|
+
couldHave: globalScope.couldHave.filter(item => belongsToApp(item, appCode))
|
|
259
|
+
}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Display and confirm with user.
|
|
263
|
+
|
|
264
|
+
### 3. Inter-Application Dependency Analysis
|
|
265
|
+
|
|
266
|
+
After all applications are defined:
|
|
267
|
+
|
|
268
|
+
1. **Identify dependencies:** For each pair of applications:
|
|
269
|
+
- Shared entities (e.g., Employee defined in HR, referenced by Self-Service)
|
|
270
|
+
- Event flows (e.g., HR publishes "EmployeeCreated", Self-Service subscribes)
|
|
271
|
+
- Authentication delegation (e.g., Self-Service uses HR's employee data for auth)
|
|
272
|
+
- Data dependencies (e.g., Self-Service reads HR data)
|
|
273
|
+
|
|
274
|
+
2. **Build dependency graph:**
|
|
275
|
+
```
|
|
276
|
+
applicationDependencyGraph = {
|
|
277
|
+
edges: [
|
|
278
|
+
{ from: "EmployeeSelfService", to: "HumanResources", type: "data-dependency", description: "Reads employee data" }
|
|
279
|
+
],
|
|
280
|
+
topologicalOrder: ["HumanResources", "EmployeeSelfService"],
|
|
281
|
+
layers: [
|
|
282
|
+
{ layer: 0, applications: ["HumanResources"] },
|
|
283
|
+
{ layer: 1, applications: ["EmployeeSelfService"] }
|
|
284
|
+
]
|
|
285
|
+
}
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
3. **Cycle detection:** If circular dependencies detected → BLOCKING ERROR
|
|
289
|
+
- Display the cycle
|
|
290
|
+
- Ask user to resolve (merge applications or remove dependency)
|
|
291
|
+
|
|
292
|
+
### 4. Client Checkpoint (BLOCKING)
|
|
293
|
+
|
|
294
|
+
Display the full application structure:
|
|
295
|
+
|
|
296
|
+
```
|
|
297
|
+
{language == "fr"
|
|
298
|
+
? "### Structure du projet\n\nVoici les applications identifiées :"
|
|
299
|
+
: "### Project Structure\n\nHere are the identified applications:"}
|
|
300
|
+
|
|
301
|
+
| # | Application | Préfixe | Rôles | Dépendances |
|
|
302
|
+
|---|-------------|---------|-------|-------------|
|
|
303
|
+
{for each app: index | name | prefix | role count | dependency list}
|
|
304
|
+
|
|
305
|
+
{language == "fr"
|
|
306
|
+
? "### Ordre de traitement\n\nLes applications seront traitées dans cet ordre (fondations d'abord) :"
|
|
307
|
+
: "### Processing Order\n\nApplications will be processed in this order (foundations first):"}
|
|
308
|
+
|
|
309
|
+
{for each layer: "Layer {n}: {app1}, {app2}, ..."}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
Ask via AskUserQuestion:
|
|
313
|
+
```
|
|
314
|
+
question: "{language == 'fr' ? 'Cette structure de projet vous convient-elle ?' : 'Does this project structure suit you?'}"
|
|
315
|
+
header: "Validation"
|
|
316
|
+
options:
|
|
317
|
+
- label: "{language == 'fr' ? 'Oui, continuer' : 'Yes, continue'}"
|
|
318
|
+
description: "{language == 'fr' ? 'Passer à la décomposition en modules' : 'Proceed to module decomposition'}"
|
|
319
|
+
- label: "{language == 'fr' ? 'Modifier' : 'Modify'}"
|
|
320
|
+
description: "{language == 'fr' ? 'Ajouter, supprimer ou modifier des applications' : 'Add, remove, or modify applications'}"
|
|
321
|
+
- label: "{language == 'fr' ? 'Fusionner en une seule' : 'Merge into one'}"
|
|
322
|
+
description: "{language == 'fr' ? 'Finalement, c\'est une seule application avec plusieurs modules' : 'Actually, this is one application with multiple modules'}"
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
**IF "Merge into one":**
|
|
326
|
+
→ Convert back to single-application mode
|
|
327
|
+
→ Delete project-level feature.json
|
|
328
|
+
→ Create application-level feature.json with all scope items
|
|
329
|
+
→ Execute single-app path (sections 0a-0f above)
|
|
330
|
+
|
|
331
|
+
### 5. Create Per-Application Feature.json Files
|
|
332
|
+
|
|
333
|
+
For EACH application in topological order:
|
|
334
|
+
|
|
335
|
+
```
|
|
336
|
+
ba-writer.createApplicationFeature({
|
|
337
|
+
id: generate_feature_id(),
|
|
338
|
+
version: "1.0",
|
|
339
|
+
scope: "application",
|
|
340
|
+
status: "draft",
|
|
341
|
+
metadata: {
|
|
342
|
+
application: {app.code},
|
|
343
|
+
applicationCode: {toPascalCase(app.code)},
|
|
344
|
+
applicationRoute: {`/${toKebabCase(app.code)}`},
|
|
345
|
+
applicationIcon: {app.icon},
|
|
346
|
+
language: {language},
|
|
347
|
+
featureDescription: {app.description},
|
|
348
|
+
workflowType: "new",
|
|
349
|
+
analysisMode: "interactive",
|
|
350
|
+
mcpAvailable: true,
|
|
351
|
+
tablePrefix: {app.tablePrefix},
|
|
352
|
+
projectRef: {project_id},
|
|
353
|
+
workflow: {
|
|
354
|
+
mode: "application",
|
|
355
|
+
moduleOrder: [],
|
|
356
|
+
currentModuleIndex: 0,
|
|
357
|
+
completedModules: [],
|
|
358
|
+
currentModule: null
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
})
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
Store the created feature.json path in the project feature.json `applications[].featureJsonPath`.
|
|
365
|
+
|
|
366
|
+
### 6. Write to Project Feature.json
|
|
367
|
+
|
|
368
|
+
```
|
|
369
|
+
ba-writer.enrichApplicationRegistry({
|
|
370
|
+
projectId: {project_id},
|
|
371
|
+
applications: [
|
|
372
|
+
{
|
|
373
|
+
code: {app1.code},
|
|
374
|
+
name: {app1.name},
|
|
375
|
+
tablePrefix: {app1.tablePrefix},
|
|
376
|
+
icon: {app1.icon},
|
|
377
|
+
route: {app1.route},
|
|
378
|
+
description: {app1.description},
|
|
379
|
+
applicationRoles: [{...}],
|
|
380
|
+
scope: { mustHave: [...], shouldHave: [...], couldHave: [...] },
|
|
381
|
+
modules: [],
|
|
382
|
+
dependencies: [{...}],
|
|
383
|
+
status: "pending",
|
|
384
|
+
featureJsonPath: {app1.featureJsonPath},
|
|
385
|
+
estimatedComplexity: {app1.estimatedComplexity}
|
|
386
|
+
},
|
|
387
|
+
// ... more applications
|
|
388
|
+
],
|
|
389
|
+
applicationDependencyGraph: {
|
|
390
|
+
edges: [...],
|
|
391
|
+
topologicalOrder: [...],
|
|
392
|
+
layers: [...]
|
|
393
|
+
}
|
|
394
|
+
})
|
|
395
|
+
|
|
396
|
+
ba-writer.updateStatus({project_id}, "decomposed")
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
### 7. Display Summary
|
|
400
|
+
|
|
401
|
+
```
|
|
402
|
+
{language == "fr"
|
|
403
|
+
? "### Décomposition en applications terminée\n\n"
|
|
404
|
+
: "### Application decomposition complete\n\n"}
|
|
405
|
+
|
|
406
|
+
| Application | Préfixe | Route | Feature ID |
|
|
407
|
+
|-------------|---------|-------|------------|
|
|
408
|
+
{for each app: name | prefix | route | FEAT-NNN}
|
|
409
|
+
|
|
410
|
+
{language == "fr"
|
|
411
|
+
? "→ Prochaine étape : décomposition en modules pour **{firstApp}** (application {1}/{total})"
|
|
412
|
+
: "→ Next step: module decomposition for **{firstApp}** (application {1}/{total})"}
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
---
|
|
416
|
+
|
|
417
|
+
## NEXT STEP
|
|
418
|
+
|
|
419
|
+
Load: `./step-02-decomposition.md` (for the first application in topological order, or the single application)
|