@atlashub/smartstack-cli 3.37.0 → 3.38.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/dist/index.js +16 -24
- package/dist/index.js.map +1 -1
- package/dist/mcp-entry.mjs +201 -256
- package/dist/mcp-entry.mjs.map +1 -1
- package/package.json +1 -1
- package/scripts/extract-api-endpoints.ts +5 -5
- package/scripts/generate-doc-with-mock-ui.ts +10 -17
- package/templates/agents/ba-reader.md +9 -9
- package/templates/agents/ba-writer.md +12 -15
- package/templates/agents/code-reviewer.md +1 -1
- package/templates/agents/docs-context-reader.md +1 -1
- package/templates/agents/gitflow/merge.md +0 -4
- package/templates/agents/gitflow/pr.md +0 -4
- package/templates/agents/gitflow/start.md +30 -5
- package/templates/mcp-scaffolding/frontend/nav-routes.ts.hbs +20 -20
- package/templates/mcp-scaffolding/frontend/routes.tsx.hbs +16 -24
- package/templates/mcp-scaffolding/migrations/seed-roles.cs.hbs +2 -2
- package/templates/skills/_resources/mcp-validate-documentation-spec.md +3 -3
- package/templates/skills/_shared.md +15 -17
- package/templates/skills/ai-prompt/SKILL.md +1 -1
- package/templates/skills/ai-prompt/steps/step-00-init.md +47 -0
- package/templates/skills/apex/SKILL.md +3 -4
- package/templates/skills/apex/_shared.md +10 -20
- package/templates/skills/apex/references/analysis-methods.md +141 -0
- package/templates/skills/apex/references/challenge-questions.md +1 -21
- package/templates/skills/apex/references/core-seed-data.md +35 -57
- package/templates/skills/apex/references/examine-build-validation.md +87 -0
- package/templates/skills/apex/references/execution-frontend-gates.md +177 -0
- package/templates/skills/apex/references/execution-frontend-patterns.md +105 -0
- package/templates/skills/apex/references/execution-layer1-rules.md +96 -0
- package/templates/skills/apex/references/initialization-challenge-flow.md +110 -0
- package/templates/skills/apex/references/planning-layer-mapping.md +151 -0
- package/templates/skills/apex/references/post-checks.md +145 -40
- package/templates/skills/apex/references/smartstack-api.md +35 -51
- package/templates/skills/apex/references/smartstack-frontend.md +17 -17
- package/templates/skills/apex/references/smartstack-layers.md +38 -62
- package/templates/skills/apex/steps/step-00-init.md +14 -26
- package/templates/skills/apex/steps/step-01-analyze.md +10 -143
- package/templates/skills/apex/steps/step-02-plan.md +10 -92
- package/templates/skills/apex/steps/step-03-execute.md +47 -249
- package/templates/skills/apex/steps/step-04-examine.md +14 -78
- package/templates/skills/apex/steps/step-05-deep-review.md +2 -2
- package/templates/skills/apex/steps/step-08-run-tests.md +2 -0
- package/templates/skills/application/SKILL.md +6 -7
- package/templates/skills/application/references/backend-controller-hierarchy.md +16 -16
- package/templates/skills/application/references/backend-seeding-and-dto-output.md +83 -0
- package/templates/skills/application/references/backend-table-prefix-mapping.md +79 -0
- package/templates/skills/application/references/backend-verification.md +1 -1
- package/templates/skills/application/references/frontend-i18n-and-output.md +67 -0
- package/templates/skills/application/references/frontend-route-naming.md +117 -0
- package/templates/skills/application/references/frontend-route-wiring-app-tsx.md +107 -0
- package/templates/skills/application/references/frontend-verification.md +12 -12
- package/templates/skills/application/references/init-parameter-detection.md +120 -0
- package/templates/skills/application/references/migration-checklist-troubleshooting.md +100 -0
- package/templates/skills/application/references/nav-fallback-procedure.md +5 -6
- package/templates/skills/application/references/provider-template.md +2 -6
- package/templates/skills/application/references/roles-client-project-handling.md +55 -0
- package/templates/skills/application/references/roles-fallback-procedure.md +149 -0
- package/templates/skills/application/references/test-coverage-requirements.md +213 -0
- package/templates/skills/application/references/test-frontend.md +3 -3
- package/templates/skills/application/steps/step-00-init.md +11 -141
- package/templates/skills/application/steps/step-01-navigation.md +3 -3
- package/templates/skills/application/steps/step-02-permissions.md +4 -4
- package/templates/skills/application/steps/step-03-roles.md +18 -175
- package/templates/skills/application/steps/step-03b-provider.md +1 -2
- package/templates/skills/application/steps/step-04-backend.md +19 -110
- package/templates/skills/application/steps/step-05-frontend.md +17 -143
- package/templates/skills/application/steps/step-06-migration.md +12 -60
- package/templates/skills/application/steps/step-07-tests.md +9 -76
- package/templates/skills/application/templates-backend.md +29 -27
- package/templates/skills/application/templates-frontend.md +48 -48
- package/templates/skills/application/templates-seed.md +57 -131
- package/templates/skills/business-analyse/SKILL.md +27 -30
- package/templates/skills/business-analyse/_architecture.md +6 -6
- package/templates/skills/business-analyse/_shared.md +60 -88
- package/templates/skills/business-analyse/questionnaire/04-data.md +3 -3
- package/templates/skills/business-analyse/questionnaire/06-security.md +1 -1
- package/templates/skills/business-analyse/questionnaire/13-cross-module.md +1 -1
- package/templates/skills/business-analyse/react/application-viewer.md +12 -12
- package/templates/skills/business-analyse/react/components.md +8 -12
- package/templates/skills/business-analyse/react/schema.md +11 -11
- package/templates/skills/business-analyse/references/agent-module-prompt.md +2 -3
- package/templates/skills/business-analyse/references/analysis-semantic-checks.md +190 -0
- package/templates/skills/business-analyse/references/cache-warming-strategy.md +2 -2
- package/templates/skills/business-analyse/references/cadrage-challenge-patterns.md +41 -0
- package/templates/skills/business-analyse/references/cadrage-coverage-matrix.md +74 -0
- package/templates/skills/business-analyse/references/cadrage-shared-modules.md +69 -0
- package/templates/skills/business-analyse/references/cadrage-structure-cards.md +1 -1
- package/templates/skills/business-analyse/references/compilation-structure-cards.md +297 -0
- package/templates/skills/business-analyse/references/consolidation-structural-checks.md +2 -2
- package/templates/skills/business-analyse/references/deploy-modes.md +5 -5
- package/templates/skills/business-analyse/references/detection-strategies.md +7 -7
- package/templates/skills/business-analyse/references/handoff-file-templates.md +14 -22
- package/templates/skills/business-analyse/references/handoff-mappings.md +4 -4
- package/templates/skills/business-analyse/references/handoff-seeddata-generation.md +312 -0
- package/templates/skills/business-analyse/references/init-schema-deployment.md +3 -3
- package/templates/skills/business-analyse/references/naming-conventions.md +22 -24
- package/templates/skills/business-analyse/references/prd-generation.md +2 -2
- package/templates/skills/business-analyse/references/review-data-mapping.md +2 -2
- package/templates/skills/business-analyse/references/robustness-checks.md +1 -1
- package/templates/skills/business-analyse/references/spec-auto-inference.md +3 -3
- package/templates/skills/business-analyse/references/team-orchestration.md +49 -6
- package/templates/skills/business-analyse/references/ui-dashboard-spec.md +1 -1
- package/templates/skills/business-analyse/references/ui-resource-cards.md +18 -18
- package/templates/skills/business-analyse/references/validate-incremental-html.md +2 -2
- package/templates/skills/business-analyse/references/validation-checklist.md +2 -2
- package/templates/skills/business-analyse/schemas/application-schema.json +4 -5
- package/templates/skills/business-analyse/schemas/project-schema.json +1 -6
- package/templates/skills/business-analyse/schemas/sections/metadata-schema.json +2 -3
- package/templates/skills/business-analyse/schemas/sections/specification-schema.json +4 -4
- package/templates/skills/business-analyse/steps/step-00-init.md +8 -17
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +35 -198
- package/templates/skills/business-analyse/steps/step-01b-applications.md +16 -20
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +1 -1
- package/templates/skills/business-analyse/steps/step-03a1-setup.md +4 -4
- package/templates/skills/business-analyse/steps/step-03a2-analysis.md +1 -1
- package/templates/skills/business-analyse/steps/step-03b-ui.md +4 -4
- package/templates/skills/business-analyse/steps/step-03c-compile.md +66 -140
- package/templates/skills/business-analyse/steps/step-03d-validate.md +2 -2
- package/templates/skills/business-analyse/steps/step-04a-collect.md +2 -2
- package/templates/skills/business-analyse/steps/step-04b-analyze.md +42 -160
- package/templates/skills/business-analyse/steps/step-04c-decide.md +1 -1
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +74 -104
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +13 -11
- package/templates/skills/business-analyse/steps/step-06-review.md +3 -3
- package/templates/skills/business-analyse/templates/tpl-frd.md +13 -13
- package/templates/skills/business-analyse/templates/tpl-handoff.md +12 -12
- package/templates/skills/business-analyse/templates-frd.md +25 -25
- package/templates/skills/business-analyse/templates-react.md +15 -21
- package/templates/skills/controller/SKILL.md +1 -1
- package/templates/skills/controller/postman-templates.md +1 -1
- package/templates/skills/controller/references/controller-code-templates.md +2 -2
- package/templates/skills/controller/references/mcp-scaffold-workflow.md +209 -0
- package/templates/skills/controller/references/permission-sync-templates.md +13 -16
- package/templates/skills/controller/steps/step-00-init.md +11 -11
- package/templates/skills/controller/steps/step-03-generate.md +64 -103
- package/templates/skills/controller/templates.md +67 -71
- package/templates/skills/debug/SKILL.md +13 -218
- package/templates/skills/debug/steps/step-00-init.md +57 -0
- package/templates/skills/debug/steps/step-01-analyze.md +219 -0
- package/templates/skills/debug/steps/step-02-resolve.md +85 -0
- package/templates/skills/documentation/SKILL.md +49 -345
- package/templates/skills/documentation/data-schema.md +11 -8
- package/templates/skills/documentation/steps/step-00-init.md +70 -0
- package/templates/skills/documentation/steps/step-01-scan.md +113 -0
- package/templates/skills/documentation/steps/step-02-generate.md +231 -0
- package/templates/skills/documentation/steps/step-03-validate.md +238 -0
- package/templates/skills/documentation/templates.md +480 -322
- package/templates/skills/efcore/references/both-contexts.md +32 -0
- package/templates/skills/efcore/references/database-operations.md +67 -0
- package/templates/skills/efcore/references/destructive-operations.md +38 -0
- package/templates/skills/efcore/references/reset-operations.md +81 -0
- package/templates/skills/efcore/references/seed-methods.md +86 -0
- package/templates/skills/efcore/references/shared-init-functions.md +250 -0
- package/templates/skills/efcore/references/sql-objects-injection.md +61 -0
- package/templates/skills/efcore/references/troubleshooting.md +81 -0
- package/templates/skills/efcore/steps/db/step-deploy.md +1 -32
- package/templates/skills/efcore/steps/db/step-reset.md +7 -103
- package/templates/skills/efcore/steps/db/step-seed.md +10 -132
- package/templates/skills/efcore/steps/db/step-status.md +5 -44
- package/templates/skills/efcore/steps/migration/step-03-validate.md +8 -62
- package/templates/skills/efcore/steps/rebase-snapshot/step-03-create.md +1 -57
- package/templates/skills/efcore/steps/shared/step-00-init.md +11 -254
- package/templates/skills/efcore/steps/squash/step-03-create.md +1 -58
- package/templates/skills/feature-full/SKILL.md +1 -1
- package/templates/skills/feature-full/steps/step-00-init.md +57 -0
- package/templates/skills/feature-full/steps/step-01-implementation.md +1 -1
- package/templates/skills/gitflow/SKILL.md +1 -1
- package/templates/skills/gitflow/_shared.md +23 -0
- package/templates/skills/gitflow/references/commit-message-generation.md +58 -0
- package/templates/skills/gitflow/references/commit-migration-validation.md +49 -0
- package/templates/skills/gitflow/references/finish-cleanup.md +51 -0
- package/templates/skills/gitflow/references/finish-version-bumping.md +45 -0
- package/templates/skills/gitflow/references/init-environment-detection.md +41 -0
- package/templates/skills/gitflow/references/init-questions.md +185 -0
- package/templates/skills/gitflow/references/init-structure-creation.md +71 -0
- package/templates/skills/gitflow/references/init-version-detection.md +21 -0
- package/templates/skills/gitflow/references/init-workspace-detection.md +43 -0
- package/templates/skills/gitflow/references/merge-ci-status.md +36 -0
- package/templates/skills/gitflow/references/merge-execution.md +62 -0
- package/templates/skills/gitflow/references/merge-pr-context.md +76 -0
- package/templates/skills/gitflow/references/pr-build-checks.md +60 -0
- package/templates/skills/gitflow/references/pr-generation.md +58 -0
- package/templates/skills/gitflow/references/start-branch-normalization.md +28 -0
- package/templates/skills/gitflow/references/start-worktree-creation.md +50 -0
- package/templates/skills/gitflow/references/sync-push-verify.md +44 -0
- package/templates/skills/gitflow/references/sync-rebase-conflicts.md +38 -0
- package/templates/skills/gitflow/steps/step-commit.md +12 -91
- package/templates/skills/gitflow/steps/step-finish.md +15 -159
- package/templates/skills/gitflow/steps/step-init.md +24 -326
- package/templates/skills/gitflow/steps/step-merge.md +17 -176
- package/templates/skills/gitflow/steps/step-pr.md +10 -116
- package/templates/skills/gitflow/steps/step-start.md +16 -109
- package/templates/skills/gitflow/steps/step-sync.md +6 -69
- package/templates/skills/ralph-loop/SKILL.md +6 -0
- package/templates/skills/ralph-loop/references/category-completeness.md +185 -0
- package/templates/skills/ralph-loop/references/compact-loop.md +1 -1
- package/templates/skills/ralph-loop/references/init-resume-recovery.md +127 -0
- package/templates/skills/ralph-loop/references/module-transition.md +151 -0
- package/templates/skills/ralph-loop/references/multi-module-queue.md +171 -0
- package/templates/skills/ralph-loop/references/parallel-execution.md +246 -0
- package/templates/skills/ralph-loop/references/task-transform-legacy.md +6 -9
- package/templates/skills/ralph-loop/references/team-orchestration.md +45 -3
- package/templates/skills/ralph-loop/steps/step-00-init.md +36 -109
- package/templates/skills/ralph-loop/steps/step-01-task.md +15 -163
- package/templates/skills/ralph-loop/steps/step-02-execute.md +8 -154
- package/templates/skills/ralph-loop/steps/step-04-check.md +21 -73
- package/templates/skills/review-code/references/owasp-api-top10.md +5 -5
- package/templates/skills/review-code/references/smartstack-conventions.md +11 -11
- package/templates/skills/validate-feature/references/api-smoke-tests.md +140 -0
- package/templates/skills/validate-feature/references/db-validation-checks.md +180 -0
- package/templates/skills/validate-feature/steps/step-01-compile.md +5 -2
- package/templates/skills/validate-feature/steps/step-04-api-smoke.md +34 -145
- package/templates/skills/validate-feature/steps/step-05-db-validation.md +74 -260
- package/templates/skills/workflow/SKILL.md +1 -1
- package/templates/skills/workflow/steps/step-00-init.md +57 -0
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
|
|
8
8
|
## Layer 0 — Domain (sequential)
|
|
9
9
|
|
|
10
|
-
**Entities:** `Domain/Entities/{
|
|
11
|
-
**Enums:** `Domain/Enums/{
|
|
12
|
-
**Exceptions:** `Domain/Exceptions/{
|
|
10
|
+
**Entities:** `Domain/Entities/{App}/{Module}/`
|
|
11
|
+
**Enums:** `Domain/Enums/{App}/{Module}/`
|
|
12
|
+
**Exceptions:** `Domain/Exceptions/{App}/{Module}/`
|
|
13
13
|
|
|
14
14
|
| Action | Tool |
|
|
15
15
|
|--------|------|
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
|
|
33
33
|
## Layer 0 — Infrastructure: EF Core (sequential)
|
|
34
34
|
|
|
35
|
-
**Configs:** `Infrastructure/Persistence/Configurations/{
|
|
35
|
+
**Configs:** `Infrastructure/Persistence/Configurations/{App}/{Module}/`
|
|
36
36
|
**Migrations:** `Infrastructure/Persistence/Migrations/` (NEVER subdirectories)
|
|
37
37
|
|
|
38
38
|
| Action | Tool |
|
|
@@ -60,10 +60,10 @@
|
|
|
60
60
|
|
|
61
61
|
## Layer 1 — Application (parallel with API)
|
|
62
62
|
|
|
63
|
-
**Services:** `Application/Services/{
|
|
64
|
-
**Service impls:** `Infrastructure/Services/{
|
|
65
|
-
**DTOs:** `Application/DTOs/{
|
|
66
|
-
**Validators:** `Application/Validators/{
|
|
63
|
+
**Services:** `Application/Services/{App}/{Module}/` (interface)
|
|
64
|
+
**Service impls:** `Infrastructure/Services/{App}/{Module}/` (implementation)
|
|
65
|
+
**DTOs:** `Application/DTOs/{App}/{Module}/`
|
|
66
|
+
**Validators:** `Application/Validators/{App}/{Module}/`
|
|
67
67
|
|
|
68
68
|
| Action | Tool |
|
|
69
69
|
|--------|------|
|
|
@@ -92,14 +92,7 @@
|
|
|
92
92
|
|
|
93
93
|
## Layer 1 — API (parallel with Application)
|
|
94
94
|
|
|
95
|
-
**Controllers:** `Api/Controllers/{
|
|
96
|
-
|
|
97
|
-
| Context | Controller Folder |
|
|
98
|
-
|---------|-------------------|
|
|
99
|
-
| `platform.administration` | `Admin` |
|
|
100
|
-
| `platform.support` | `Support` |
|
|
101
|
-
| `business.*` | `Business` |
|
|
102
|
-
| `personal.*` | `User` |
|
|
95
|
+
**Controllers:** `Api/Controllers/{AppPascal}/{Entity}Controller.cs`
|
|
103
96
|
|
|
104
97
|
| Action | Tool |
|
|
105
98
|
|--------|------|
|
|
@@ -110,13 +103,13 @@
|
|
|
110
103
|
**Rules:**
|
|
111
104
|
- `[RequirePermission(Permissions.{Module}.{Action})]` on EVERY endpoint
|
|
112
105
|
- **NavRoute values MUST use kebab-case for ALL multi-word segments:**
|
|
113
|
-
- `[NavRoute("
|
|
114
|
-
- `[NavRoute("
|
|
115
|
-
- `[NavRoute("
|
|
116
|
-
- `[NavRoute("
|
|
117
|
-
- Permission paths MUST use kebab-case matching NavRoute codes (e.g., `
|
|
106
|
+
- `[NavRoute("human-resources.employees")]` (CORRECT)
|
|
107
|
+
- `[NavRoute("humanresources.employees")]` (WRONG — missing hyphens)
|
|
108
|
+
- `[NavRoute("project-management.projects")]` (CORRECT)
|
|
109
|
+
- `[NavRoute("projectmanagement.projects")]` (WRONG)
|
|
110
|
+
- Permission paths MUST use kebab-case matching NavRoute codes (e.g., `human-resources.employees.read`)
|
|
118
111
|
- FORBIDDEN: concatenated segments like `humanresources` — must be `human-resources`
|
|
119
|
-
- POST-CHECK 48 detects non-kebab-case NavRoute values. POST-CHECK 41 detects non-kebab-case permissions
|
|
112
|
+
- POST-CHECK 48 detects non-kebab-case NavRoute values. POST-CHECK 41 detects non-kebab-case permissions
|
|
120
113
|
- **FORBIDDEN:** `[Route("api/...")]` alongside `[NavRoute]` — causes 404s (POST-CHECK 50)
|
|
121
114
|
- `[NavRoute]` is the ONLY route attribute needed — resolves routes from DB at startup
|
|
122
115
|
- NEVER use `[Authorize]` without specific permission
|
|
@@ -130,7 +123,7 @@
|
|
|
130
123
|
**Folder:** `Infrastructure/Persistence/Seeding/Data/{ModulePascal}/`
|
|
131
124
|
|
|
132
125
|
> **Detailed templates:** See ralph-loop `references/core-seed-data.md` for complete C# code templates.
|
|
133
|
-
> Navigation hierarchy:
|
|
126
|
+
> Navigation hierarchy: Application → Module → Section → Resource (ALL levels need seed data).
|
|
134
127
|
|
|
135
128
|
| Action | Tool |
|
|
136
129
|
|--------|------|
|
|
@@ -163,20 +156,11 @@
|
|
|
163
156
|
|
|
164
157
|
### Deterministic GUID Pattern
|
|
165
158
|
|
|
166
|
-
> **CRITICAL — NavigationContext IDs are NEVER generated.**
|
|
167
|
-
> Contexts (`business`, `platform`, `personal`) are pre-seeded by SmartStack core with hardcoded GUIDs.
|
|
168
|
-
> Look up the context at runtime: `db.NavigationContexts.FirstOrDefaultAsync(c => c.Code == "business", ct)`
|
|
169
|
-
> **FORBIDDEN:** `GenerateDeterministicGuid("nav:business")` or any ContextId in SeedConstants.
|
|
170
|
-
|
|
171
159
|
```csharp
|
|
172
160
|
// Use SHA256 for deterministic GUIDs (reproducible across environments)
|
|
173
161
|
// NOTE: Application/Module/Section/Resource IDs are deterministic.
|
|
174
|
-
// Context IDs are NOT — they are pre-seeded by SmartStack core.
|
|
175
162
|
public static readonly Guid ModuleId = GenerateDeterministicGuid("nav-module-{app}-{module}");
|
|
176
163
|
|
|
177
|
-
// FORBIDDEN — Context IDs must NOT be generated:
|
|
178
|
-
// public static readonly Guid BusinessContextId = GenerateDeterministicGuid("nav:business"); // WRONG!
|
|
179
|
-
|
|
180
164
|
private static Guid GenerateDeterministicGuid(string input)
|
|
181
165
|
{
|
|
182
166
|
var hash = System.Security.Cryptography.SHA256.HashData(
|
|
@@ -192,19 +176,18 @@ private static Guid GenerateDeterministicGuid(string input)
|
|
|
192
176
|
> **Routes stored in DB drive the platform menu AND application-tracking.**
|
|
193
177
|
> Short routes (e.g., `humanresources`) cause **400 Bad Request** on every page navigation.
|
|
194
178
|
|
|
195
|
-
**Route format: `/{
|
|
179
|
+
**Route format: `/{app-kebab}/{module-kebab}/{section-kebab}`**
|
|
196
180
|
|
|
197
181
|
| Level | Code (C#) | Route (DB) |
|
|
198
182
|
|-------|-----------|-----------|
|
|
199
|
-
| Application | `human-resources` | `/
|
|
200
|
-
| Module | `employees` | `/
|
|
201
|
-
| Section | `departments` | `/
|
|
202
|
-
| Resource | `export` | `/
|
|
183
|
+
| Application | `human-resources` | `/human-resources` |
|
|
184
|
+
| Module | `employees` | `/human-resources/employees` |
|
|
185
|
+
| Section | `departments` | `/human-resources/employees/departments` |
|
|
186
|
+
| Resource | `export` | `/human-resources/employees/departments/export` |
|
|
203
187
|
|
|
204
|
-
**
|
|
205
|
-
- `/
|
|
206
|
-
- `/
|
|
207
|
-
- `/personal/myspace/profile` (not `profile`)
|
|
188
|
+
**Examples (verified from SmartStack.app):**
|
|
189
|
+
- `/administration` (not `administration` without `/`)
|
|
190
|
+
- `/administration/users` (not `users`)
|
|
208
191
|
|
|
209
192
|
- PascalCase for C# code identifiers (`HumanResources`)
|
|
210
193
|
- **kebab-case** for ALL URL routes in seed data (`human-resources`)
|
|
@@ -216,32 +199,31 @@ private static string ToKebabCase(string value)
|
|
|
216
199
|
=> System.Text.RegularExpressions.Regex.Replace(value, "([a-z])([A-Z])", "$1-$2").ToLowerInvariant();
|
|
217
200
|
|
|
218
201
|
// Route construction:
|
|
219
|
-
var appRoute = $"/{ToKebabCase(
|
|
220
|
-
// → "/
|
|
202
|
+
var appRoute = $"/{ToKebabCase(appCode)}";
|
|
203
|
+
// → "/human-resources"
|
|
221
204
|
|
|
222
205
|
var moduleRoute = $"{appRoute}/{ToKebabCase(moduleCode)}";
|
|
223
|
-
// → "/
|
|
206
|
+
// → "/human-resources/employees"
|
|
224
207
|
|
|
225
208
|
var sectionRoute = $"{moduleRoute}/{ToKebabCase(sectionCode)}";
|
|
226
|
-
// → "/
|
|
209
|
+
// → "/human-resources/employees/departments"
|
|
227
210
|
```
|
|
228
211
|
|
|
229
212
|
**ROUTE SPECIAL CASES (list and detail sections):**
|
|
230
213
|
> `list` and `detail` are view modes of the module, NOT functional sub-areas.
|
|
231
|
-
> - `list` section route = module route (e.g., `/
|
|
232
|
-
> - `detail` section route = module route + `/:id` (e.g., `/
|
|
214
|
+
> - `list` section route = module route (e.g., `/human-resources/employees`) — NO `/list` suffix
|
|
215
|
+
> - `detail` section route = module route + `/:id` (e.g., `/human-resources/employees/:id`) — NOT `/detail/:id`
|
|
233
216
|
> - FORBIDDEN: `/employees/list`, `/employees/detail/:id`
|
|
234
217
|
> - Other sections (dashboard, approve, import) = module route + `/{section-kebab}` (normal)
|
|
235
218
|
|
|
236
219
|
**FORBIDDEN:**
|
|
237
220
|
- `Guid.NewGuid()` → use deterministic GUIDs (SHA256)
|
|
238
|
-
- `DeterministicGuid("nav:business")` for ContextId → context IDs are pre-seeded by SmartStack core, look up by code at runtime
|
|
239
221
|
- Missing translations (must have fr, en, it, de)
|
|
240
222
|
- Empty seed classes with no seeding logic
|
|
241
223
|
- PascalCase in route URLs → always kebab-case
|
|
242
224
|
- Missing NavigationApplicationSeedData → menu invisible
|
|
243
|
-
- **Short routes without `/` prefix** → `"humanresources"` must be `"/
|
|
244
|
-
- **Routes without parent hierarchy** → `"employees"` must be `"/
|
|
225
|
+
- **Short routes without `/` prefix** → `"humanresources"` must be `"/human-resources"`
|
|
226
|
+
- **Routes without parent hierarchy** → `"employees"` must be `"/human-resources/employees"`
|
|
245
227
|
|
|
246
228
|
---
|
|
247
229
|
|
|
@@ -249,7 +231,7 @@ var sectionRoute = $"{moduleRoute}/{ToKebabCase(sectionCode)}";
|
|
|
249
231
|
|
|
250
232
|
> **Detailed patterns:** See `references/smartstack-frontend.md` for complete code templates.
|
|
251
233
|
|
|
252
|
-
**Pages:** `src/pages/{
|
|
234
|
+
**Pages:** `src/pages/{AppPascal}/{Module}/`
|
|
253
235
|
**Components:** `src/components/{Module}/`
|
|
254
236
|
|
|
255
237
|
| Action | Tool |
|
|
@@ -259,13 +241,7 @@ var sectionRoute = $"{moduleRoute}/{ToKebabCase(sectionCode)}";
|
|
|
259
241
|
| Complex pages | /ui-components skill + `smartstack-frontend.md` patterns |
|
|
260
242
|
| Validate routes | MCP `validate_frontend_routes` |
|
|
261
243
|
|
|
262
|
-
**Layout mapping:**
|
|
263
|
-
|
|
264
|
-
| Context | Layout | Route prefix |
|
|
265
|
-
|---------|--------|-------------|
|
|
266
|
-
| `platform.*` | `AdminLayout` | `/platform` |
|
|
267
|
-
| `business.*` | `BusinessLayout` | `/business` |
|
|
268
|
-
| `personal.*` | `UserLayout` | `/personal/myspace` |
|
|
244
|
+
**Layout mapping:** Configured per application in the routing configuration.
|
|
269
245
|
|
|
270
246
|
### Lazy Loading (MANDATORY)
|
|
271
247
|
|
|
@@ -273,7 +249,7 @@ ALL page components MUST be lazy-loaded using `React.lazy()`:
|
|
|
273
249
|
|
|
274
250
|
```tsx
|
|
275
251
|
const EmployeesPage = lazy(() =>
|
|
276
|
-
import('@/pages/
|
|
252
|
+
import('@/pages/HumanResources/Employees/EmployeesPage')
|
|
277
253
|
.then(m => ({ default: m.EmployeesPage }))
|
|
278
254
|
);
|
|
279
255
|
|
|
@@ -326,7 +302,7 @@ If the module defines `{sections}`, generate frontend routes for EACH section as
|
|
|
326
302
|
{ path: '{section-kebab}/:id/edit', element: <Suspense fallback={<PageLoader />}><Edit{Section}Page /></Suspense> },
|
|
327
303
|
```
|
|
328
304
|
|
|
329
|
-
Section pages live in `src/pages/{
|
|
305
|
+
Section pages live in `src/pages/{AppPascal}/{Module}/{Section}/`.
|
|
330
306
|
|
|
331
307
|
### FK Fields in Forms (CRITICAL)
|
|
332
308
|
|
|
@@ -335,7 +311,7 @@ Any entity property that is a FK Guid (e.g., `EmployeeId`, `DepartmentId`) MUST
|
|
|
335
311
|
```tsx
|
|
336
312
|
// CORRECT — EntityLookup for FK field (ONLY acceptable pattern)
|
|
337
313
|
<EntityLookup
|
|
338
|
-
apiEndpoint="/api/
|
|
314
|
+
apiEndpoint="/api/human-resources/employees"
|
|
339
315
|
value={formData.employeeId}
|
|
340
316
|
onChange={(id) => handleChange('employeeId', id)}
|
|
341
317
|
label={t('module:form.employee', 'Employee')}
|
|
@@ -358,7 +334,7 @@ Any entity property that is a FK Guid (e.g., `EmployeeId`, `DepartmentId`) MUST
|
|
|
358
334
|
See `references/smartstack-frontend.md` section 6 for the full `EntityLookup` component definition and usage patterns.
|
|
359
335
|
|
|
360
336
|
**FORBIDDEN:**
|
|
361
|
-
- `src/pages/{Module}/` (flat, missing
|
|
337
|
+
- `src/pages/{Module}/` (flat, missing App)
|
|
362
338
|
- `import axios` → use `@/services/api/apiClient`
|
|
363
339
|
- `<table>` → use SmartTable
|
|
364
340
|
- `<input type="text">` for FK Guid fields → use `EntityLookup`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: step-00-init
|
|
3
|
-
description: Parse flags, detect
|
|
3
|
+
description: Parse flags, detect application, verify MCP, define hierarchy (4 levels), challenge the need
|
|
4
4
|
model: sonnet
|
|
5
5
|
next_step: steps/step-01-analyze.md
|
|
6
6
|
---
|
|
@@ -62,7 +62,6 @@ IF delegate_mode:
|
|
|
62
62
|
Read prd.json from {delegate_prd_path}
|
|
63
63
|
|
|
64
64
|
Extract context:
|
|
65
|
-
{context_code} = prd.project.context (e.g., "business")
|
|
66
65
|
{app_name} = prd.project.application (e.g., "HumanResources")
|
|
67
66
|
{module_code} = prd.project.module (e.g., "EmployeeManagement")
|
|
68
67
|
{prd_path} = {delegate_prd_path}
|
|
@@ -89,13 +88,13 @@ IF delegate_mode:
|
|
|
89
88
|
{has_dependencies} = prd.tasks.some(t => t.dependencies.length > 0) ? "references" : "none"
|
|
90
89
|
{key_properties} = [] (extracted during step-01 from feature.json if available)
|
|
91
90
|
|
|
92
|
-
SKIP sections 2 (detect
|
|
91
|
+
SKIP sections 2 (detect application), 4 (hierarchy), 5 (challenge questions)
|
|
93
92
|
Jump to section 3 (MCP verify) → then section 6 (determine needs, already set) → section 9 (summary)
|
|
94
93
|
```
|
|
95
94
|
|
|
96
95
|
---
|
|
97
96
|
|
|
98
|
-
## 2. Detect SmartStack
|
|
97
|
+
## 2. Detect SmartStack Application
|
|
99
98
|
|
|
100
99
|
Scan the project to identify the SmartStack hierarchy:
|
|
101
100
|
|
|
@@ -107,7 +106,6 @@ Scan the project to identify the SmartStack hierarchy:
|
|
|
107
106
|
```
|
|
108
107
|
|
|
109
108
|
**From task description, infer:**
|
|
110
|
-
- `{context_code}`: business (default), platform, personal
|
|
111
109
|
- `{app_name}`: application name
|
|
112
110
|
- `{module_code}`: target module
|
|
113
111
|
- `{sections}`: sections being added/modified
|
|
@@ -116,7 +114,7 @@ Scan the project to identify the SmartStack hierarchy:
|
|
|
116
114
|
- `{prd_path}`: `.ralph/prd-{module_code}.json` if exists
|
|
117
115
|
- `{feature_path}`: `docs/business/{app}/{module}/business-analyse/*/feature.json` if exists
|
|
118
116
|
|
|
119
|
-
If hierarchy cannot be inferred → load
|
|
117
|
+
If hierarchy cannot be inferred → load application question from `references/challenge-questions.md`.
|
|
120
118
|
|
|
121
119
|
---
|
|
122
120
|
|
|
@@ -131,24 +129,14 @@ IF failure → warn user, continue in degraded mode (manual tools only)
|
|
|
131
129
|
|
|
132
130
|
---
|
|
133
131
|
|
|
134
|
-
## 4. Define Navigation Hierarchy (
|
|
132
|
+
## 4. Define Navigation Hierarchy (4 Levels)
|
|
135
133
|
|
|
136
|
-
> **
|
|
137
|
-
>
|
|
138
|
-
>
|
|
139
|
-
>
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
Load and execute application question from `references/challenge-questions.md` section 4a.
|
|
144
|
-
|
|
145
|
-
### 4b. Validate Module Level
|
|
146
|
-
|
|
147
|
-
Load and execute module question from `references/challenge-questions.md` section 4b.
|
|
148
|
-
|
|
149
|
-
### 4c. Define Sections (MANDATORY — at least one)
|
|
150
|
-
|
|
151
|
-
Load and execute section questions from `references/challenge-questions.md` section 4c (includes validation and storage format).
|
|
134
|
+
> **Reference:** Load `references/initialization-challenge-flow.md` for detailed challenge flow:
|
|
135
|
+
> - 4-level hierarchy structure (Application → Module → Section → Resource)
|
|
136
|
+
> - Challenge questions (4a: Application, 4b: Module, 4c: Sections)
|
|
137
|
+
> - Validation rules (sections MUST have at least one entry)
|
|
138
|
+
> - Storage format for each level
|
|
139
|
+
> - Delegate mode skip (if -d)
|
|
152
140
|
|
|
153
141
|
### 4d. Resources (Optional)
|
|
154
142
|
|
|
@@ -163,8 +151,8 @@ Resources are OPTIONAL — only define if explicitly mentioned or inferred.
|
|
|
163
151
|
Display before proceeding:
|
|
164
152
|
|
|
165
153
|
```
|
|
166
|
-
{
|
|
167
|
-
Routes: /{
|
|
154
|
+
{app_name} ({app_code}) → {module_code} → [{sections[].code}]
|
|
155
|
+
Routes: /{app-kebab}/{module-kebab}/{section-kebab}
|
|
168
156
|
```
|
|
169
157
|
|
|
170
158
|
---
|
|
@@ -305,7 +293,7 @@ IF save_mode:
|
|
|
305
293
|
```
|
|
306
294
|
APEX INIT COMPLETE — v{{SMARTSTACK_VERSION}}
|
|
307
295
|
Task: {task_description}
|
|
308
|
-
|
|
296
|
+
Hierarchy: {app_name} → {module_code} → {sections[].code}
|
|
309
297
|
Entities: {entities} | Complexity: {module_complexity} | Deps: {has_dependencies}
|
|
310
298
|
PRD: {prd_path||none} | Feature: {feature_path||none} | Flags: {active_flags}
|
|
311
299
|
MCP: {available|degraded} | Needs: migration/seed/workflow/notification = {yes|no}
|
|
@@ -141,149 +141,16 @@ Identify: NavigationModuleSeedData, PermissionsSeedData, RolesSeedData, SeedCons
|
|
|
141
141
|
|
|
142
142
|
---
|
|
143
143
|
|
|
144
|
-
## 4.
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
-
|
|
148
|
-
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
---
|
|
155
|
-
|
|
156
|
-
## 4a. Tenant Mode Decision
|
|
157
|
-
|
|
158
|
-
For each entity found (or to be created), determine the `tenantMode`:
|
|
159
|
-
|
|
160
|
-
- **`strict`** (default) — Data belongs to a specific tenant. Examples: Employee, Order, Invoice, CustomerInteraction
|
|
161
|
-
- **`optional`** — Data can be shared across tenants OR tenant-specific. Examples: Department, Currency, JobTitle, Language
|
|
162
|
-
- **`scoped`** — Data has explicit visibility scope controlled by workflow/feature rules. Examples: Settings, Workflow, EmailTemplate, ApprovalConfig
|
|
163
|
-
- **`none`** — Platform-wide data (never tenant-filtered). Examples: Navigation, Permission, User, SystemConfiguration
|
|
164
|
-
|
|
165
|
-
**Why:** Tenant mode drives EF query filters, seed data generation, and API access control. Must be decided before planning.
|
|
166
|
-
|
|
167
|
-
**Reference:** See `references/smartstack-api.md` for TenantId handling patterns and `smartstack-layers.md` for seed data strategies per tenant mode.
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
|
-
## 4b. Code Pattern Detection
|
|
172
|
-
|
|
173
|
-
For each entity found (or to be created), identify code generation needs:
|
|
174
|
-
|
|
175
|
-
```
|
|
176
|
-
IF feature.json exists AND entity has codePattern:
|
|
177
|
-
→ Use codePattern config from feature.json (strategy, prefix, digits, etc.)
|
|
178
|
-
→ Record in analysis: entity has auto-generated code
|
|
179
|
-
|
|
180
|
-
ELSE IF feature.json exists BUT entity has NO codePattern:
|
|
181
|
-
→ Record: entity needs codePattern decision in step-02
|
|
182
|
-
→ Apply heuristic default based on entity name:
|
|
183
|
-
Invoice/Order/Receipt → timestamp-daily
|
|
184
|
-
Ticket/Incident → timestamp-minute
|
|
185
|
-
Contract/Policy → year-sequential
|
|
186
|
-
Reference/Category → uuid-short
|
|
187
|
-
Employee/Customer/Project → sequential
|
|
188
|
-
|
|
189
|
-
ELSE (no feature.json):
|
|
190
|
-
→ Propose codePattern during step-02 planning based on task description
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
**Why:** Code generation strategy drives CreateDto structure (Code field removed when auto-generated), service injection (ICodeGenerator<T>), and DI registration. Must be decided before planning.
|
|
194
|
-
|
|
195
|
-
**Reference:** See `references/code-generation.md` for strategy table, volume-to-digits calculation, and backend patterns.
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
## 5. Gap Analysis
|
|
200
|
-
|
|
201
|
-
Compare what EXISTS vs what the TASK REQUIRES:
|
|
202
|
-
|
|
203
|
-
```
|
|
204
|
-
For each element: EXISTS+COMPLETE → "skip" | EXISTS+INCOMPLETE → "modify" | MISSING → "create"
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
Cross-reference with step-00 challenge responses:
|
|
208
|
-
- Each entity: entity, EF config, service, controller, frontend pages → exists/missing
|
|
209
|
-
- Each section: NavigationSectionSeedData, frontend route → exists/missing
|
|
210
|
-
- If dependencies: verify FK target entities and their `?search=` support
|
|
211
|
-
|
|
212
|
-
---
|
|
213
|
-
|
|
214
|
-
## 5b. Scope Re-Check (after exploration)
|
|
215
|
-
|
|
216
|
-
> **Re-validate scope after code exploration reveals the true entity count.**
|
|
217
|
-
> Step-00 guard uses the user's description (may undercount). Now we know the actual entities.
|
|
218
|
-
|
|
219
|
-
```
|
|
220
|
-
IF NOT delegate_mode:
|
|
221
|
-
actual_entities = count of entities marked "create" in gap analysis
|
|
222
|
-
actual_sections = count of sections marked "create"
|
|
223
|
-
|
|
224
|
-
IF actual_entities > 6:
|
|
225
|
-
WARNING: "Code exploration reveals {actual_entities} entities to create.
|
|
226
|
-
This exceeds the recommended maximum (4) for a single /apex invocation.
|
|
227
|
-
Risk: incomplete migrations, lost conventions, missing pages.
|
|
228
|
-
Consider: split into {ceil(actual_entities/4)} iterations of ~4 entities each."
|
|
229
|
-
|
|
230
|
-
AskUserQuestion: (same options as step-00 section 5d)
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
---
|
|
234
|
-
|
|
235
|
-
## 6. Analysis Validation (User Checkpoint)
|
|
236
|
-
|
|
237
|
-
> **Objective:** Present findings and validate scope with the user BEFORE planning.
|
|
238
|
-
|
|
239
|
-
### 6a. Present Findings
|
|
240
|
-
|
|
241
|
-
```
|
|
242
|
-
ANALYSIS FINDINGS
|
|
243
|
-
═══════════════════════════════════════════════════════════════
|
|
244
|
-
|
|
245
|
-
Entities expected / found / to create: {summary}
|
|
246
|
-
Sections expected / found / to create: {summary}
|
|
247
|
-
FK Relationships: {fkFields summary}
|
|
248
|
-
Dependencies: {cross-module refs or "none"}
|
|
249
|
-
Complexity: {module_complexity}
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
### 6b. Validate with User (if NOT auto_mode)
|
|
253
|
-
|
|
254
|
-
```yaml
|
|
255
|
-
questions:
|
|
256
|
-
- header: "Scope"
|
|
257
|
-
question: "Based on the analysis above, is the scope accurate?"
|
|
258
|
-
options:
|
|
259
|
-
- label: "Scope is correct (Recommended)"
|
|
260
|
-
description: "Proceed to planning with the identified elements"
|
|
261
|
-
- label: "Add elements"
|
|
262
|
-
description: "I need to add entities, properties, or sections"
|
|
263
|
-
- label: "Reduce scope"
|
|
264
|
-
description: "Remove some elements — smaller first iteration"
|
|
265
|
-
- label: "Change approach"
|
|
266
|
-
description: "The analysis reveals issues — let's adjust"
|
|
267
|
-
multiSelect: false
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
If "Add elements": update `{entities}`, `{sections}`, `{key_properties}`, re-run gap analysis.
|
|
271
|
-
If "Reduce scope": update variables accordingly.
|
|
272
|
-
If "Change approach": discuss with user, potentially restart from step-00.
|
|
273
|
-
|
|
274
|
-
---
|
|
275
|
-
|
|
276
|
-
## 7. Analysis Summary
|
|
277
|
-
|
|
278
|
-
```
|
|
279
|
-
**APEX SmartStack - Analysis Complete**
|
|
280
|
-
Navigation: {context_code} → {app_name} → {module_code} → {sections[].code}
|
|
281
|
-
Entities: {entity_name → create | modify | skip}
|
|
282
|
-
Existing: entities, configs, services, controllers, pages, seed data, tests (with paths)
|
|
283
|
-
Required: create / modify / skip lists
|
|
284
|
-
Profile: complexity, dependencies, FK fields, workflow, notifications
|
|
285
|
-
ACs: AC1..ACn (inferred from PRD/feature/task/challenge)
|
|
286
|
-
```
|
|
144
|
+
## 4-7. Analysis Methods & Validation
|
|
145
|
+
|
|
146
|
+
> **Reference:** Load `references/analysis-methods.md` for detailed analysis procedures:
|
|
147
|
+
> - FK field detection (frontend EntityLookup + backend search support)
|
|
148
|
+
> - Tenant mode decision (strict/optional/scoped/none)
|
|
149
|
+
> - Code pattern detection (auto-generated strategies)
|
|
150
|
+
> - Gap analysis (exists/missing/modify classification)
|
|
151
|
+
> - Scope re-check (entity count validation)
|
|
152
|
+
> - Analysis validation checkpoint (user confirmation)
|
|
153
|
+
> - Analysis summary output format
|
|
287
154
|
|
|
288
155
|
---
|
|
289
156
|
|
|
@@ -52,98 +52,16 @@ IF delegate_mode:
|
|
|
52
52
|
|
|
53
53
|
---
|
|
54
54
|
|
|
55
|
-
## 1.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
| 1 | API (controllers) | Parallel |
|
|
66
|
-
| 1 | Infrastructure - Seed Data | Parallel |
|
|
67
|
-
| 2 | Frontend (pages, components) | Parallel |
|
|
68
|
-
| 2 | I18n (translations) | Parallel |
|
|
69
|
-
| 3 | Tests | Sequential |
|
|
70
|
-
|
|
71
|
-
**Entity Definition Template:** Each entity in the plan MUST include:
|
|
72
|
-
```
|
|
73
|
-
Entity: {EntityName}
|
|
74
|
-
- tenantMode: strict | optional | scoped | none
|
|
75
|
-
- codePattern: auto-generated strategy (if applicable)
|
|
76
|
-
- fkFields: [{field, targetEntity}] (if applicable)
|
|
77
|
-
- acceptance criteria: [AC1, AC2, ...]
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
The `tenantMode` decision (from step-01, section 4a) drives EF query filters, seed data approach, and API authorization. See `smartstack-layers.md` for tenant mode seed data strategies.
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
## 2. Assign Skill/MCP per File
|
|
85
|
-
|
|
86
|
-
For EACH file in the plan, specify HOW it will be created/modified:
|
|
87
|
-
|
|
88
|
-
```markdown
|
|
89
|
-
### Layer 0 — Domain + Infrastructure (sequential)
|
|
90
|
-
|
|
91
|
-
| # | File | Action | Tool |
|
|
92
|
-
|---|------|--------|------|
|
|
93
|
-
| 1 | Domain/Entities/.../MyEntity.cs | create | MCP scaffold_extension |
|
|
94
|
-
| 2 | Infrastructure/.../MyEntityConfiguration.cs | create | MCP scaffold_extension |
|
|
95
|
-
| 3 | Migration | create | MCP suggest_migration + dotnet ef |
|
|
96
|
-
|
|
97
|
-
### Layer 1 — Application + API (parallel)
|
|
98
|
-
|
|
99
|
-
| # | File | Action | Tool |
|
|
100
|
-
|---|------|--------|------|
|
|
101
|
-
| 4 | Application/Services/.../MyService.cs | create | MCP scaffold_extension |
|
|
102
|
-
| 5 | Application/DTOs/.../MyDto.cs | create | MCP scaffold_extension |
|
|
103
|
-
| 6 | Api/Controllers/.../MyController.cs | create | /controller skill |
|
|
104
|
-
| 7 | Seeding/Data/NavigationApplicationSeedData.cs | create | ref smartstack-layers.md (once per app) |
|
|
105
|
-
| 7b | Seeding/Data/ApplicationRolesSeedData.cs | create | ref smartstack-layers.md (once per app) |
|
|
106
|
-
| 7c | Infrastructure/Services/CodeGeneration/ | create | ref code-generation.md (ICodeGenerator<T> + DI, per entity with codePattern != manual) |
|
|
107
|
-
| 8 | Seeding/Data/.../NavigationModuleSeedData.cs | create | ref smartstack-layers.md |
|
|
108
|
-
| 8b | Application/Authorization/Permissions.cs | create | MCP generate_permissions → static constants |
|
|
109
|
-
| 9 | Seeding/Data/.../PermissionsSeedData.cs | create | MCP generate_permissions |
|
|
110
|
-
| 10 | Seeding/Data/.../RolesSeedData.cs | create | ref smartstack-layers.md |
|
|
111
|
-
|
|
112
|
-
### Layer 2 — Frontend + I18n (parallel)
|
|
113
|
-
|
|
114
|
-
| # | File | Action | Tool |
|
|
115
|
-
|---|------|--------|------|
|
|
116
|
-
| 11 | src/pages/{Ctx}/{App}/{Mod}/ListPage.tsx | create | /ui-components skill |
|
|
117
|
-
| 11b | src/pages/{Ctx}/{App}/{Mod}/CreatePage.tsx | create | /ui-components skill (EntityLookup for FK fields) |
|
|
118
|
-
| 11c | src/pages/{Ctx}/{App}/{Mod}/EditPage.tsx | create | /ui-components skill (EntityLookup for FK fields) |
|
|
119
|
-
| 11d | src/pages/{Ctx}/{App}/{Mod}/{Section}Page.tsx | create | /ui-components skill (per section in `{sections}`) |
|
|
120
|
-
| 11e | src/pages/{Ctx}/{App}/{Mod}/{Section}DetailPage.tsx | create | /ui-components skill (per section in `{sections}`) |
|
|
121
|
-
| 12 | src/services/api/{module}Api.ts | create | MCP scaffold_api_client |
|
|
122
|
-
| 13 | src/routes/{module}.tsx | create | MCP scaffold_routes |
|
|
123
|
-
| 14 | src/i18n/locales/{lang}/{module}.json | create | ref smartstack-frontend.md (4 languages: fr, en, it, de) |
|
|
124
|
-
|
|
125
|
-
**FK Field Guidance:** If step-01 identified `fkFields[]`, every Create/Edit page MUST use `EntityLookup` for those fields (see `smartstack-frontend.md` section 6). The corresponding backend GetAll endpoints (Layer 1) MUST support `?search=` parameter.
|
|
126
|
-
|
|
127
|
-
### Layer 2b — Documentation (after frontend pages exist)
|
|
128
|
-
|
|
129
|
-
| # | File | Action | Tool |
|
|
130
|
-
|---|------|--------|------|
|
|
131
|
-
| 14b | src/pages/docs/business/{app}/{module}/doc-data.ts | create | /documentation skill |
|
|
132
|
-
| 14c | src/pages/docs/business/{app}/{module}/index.tsx | create | /documentation skill |
|
|
133
|
-
|
|
134
|
-
### Layer 3 — Tests (sequential)
|
|
135
|
-
|
|
136
|
-
| # | File | Action | Tool |
|
|
137
|
-
|---|------|--------|------|
|
|
138
|
-
| 15 | tests/.../MyEntityTests.cs | create | MCP scaffold_tests |
|
|
139
|
-
| 16 | tests/.../MyServiceTests.cs | create | MCP scaffold_tests |
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
---
|
|
143
|
-
|
|
144
|
-
## 3. Identify Parallelization (Agent Teams)
|
|
145
|
-
|
|
146
|
-
If NOT economy_mode AND Layer 1 has both backend and frontend work:
|
|
55
|
+
## 1-3. Layer Mapping, Skill Assignment, Parallelization
|
|
56
|
+
|
|
57
|
+
> **Reference:** Load `references/planning-layer-mapping.md` for detailed planning procedures:
|
|
58
|
+
> - Layer assignment matrix (Domain/Infrastructure/Application/API/Seed/Frontend/Tests)
|
|
59
|
+
> - Entity definition template (tenantMode, codePattern, fkFields, ACs)
|
|
60
|
+
> - Skill/MCP assignment table (per file, per layer)
|
|
61
|
+
> - Layer 0/1/2b/3 file lists with tools
|
|
62
|
+
> - FK field guidance (EntityLookup + backend ?search= parameter)
|
|
63
|
+
> - Parallelization strategy (Agent Teams for Layer 1 backend+frontend)
|
|
64
|
+
> - Delegate mode fast path (PRD task mapping to layers)
|
|
147
65
|
|
|
148
66
|
```
|
|
149
67
|
Layer 0: SEQUENTIAL (agent principal)
|