@atlashub/smartstack-cli 3.53.0 → 4.0.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 +1748 -780
- package/dist/index.js.map +1 -1
- package/dist/mcp-entry.mjs +1353 -158
- package/dist/mcp-entry.mjs.map +1 -1
- package/package.json +115 -115
- package/templates/skills/apex/SKILL.md +11 -9
- package/templates/skills/apex/references/agent-teams-protocol.md +32 -16
- package/templates/skills/apex/references/core-seed-data.md +27 -1
- package/templates/skills/apex/references/smartstack-api.md +40 -0
- package/templates/skills/apex/references/smartstack-layers.md +125 -118
- package/templates/skills/apex/steps/step-02-plan.md +33 -18
- package/templates/skills/apex/steps/step-03-execute.md +297 -120
- package/templates/skills/apex/steps/step-04-examine.md +15 -6
- package/templates/skills/apex/steps/step-07-tests.md +60 -40
- package/templates/skills/apex/steps/step-08-run-tests.md +5 -3
- package/templates/skills/application/references/backend-table-prefix-mapping.md +1 -0
- package/templates/skills/business-analyse/patterns/suggestion-catalog.md +2 -0
|
@@ -95,83 +95,11 @@ Web → Application (via API clients)
|
|
|
95
95
|
|
|
96
96
|
---
|
|
97
97
|
|
|
98
|
-
## Layer 1 —
|
|
99
|
-
|
|
100
|
-
**Services:** `Application/Services/{App}/{Module}/` (interface)
|
|
101
|
-
**Service impls:** `Infrastructure/Services/{App}/{Module}/` (implementation)
|
|
102
|
-
**DTOs:** `Application/DTOs/{App}/{Module}/`
|
|
103
|
-
**Validators:** `Application/Validators/{App}/{Module}/`
|
|
104
|
-
|
|
105
|
-
| Action | Tool |
|
|
106
|
-
|--------|------|
|
|
107
|
-
| Create service/DTO | MCP `scaffold_extension` |
|
|
108
|
-
| Complex service logic | /application skill |
|
|
109
|
-
| Validate | MCP `validate_conventions` |
|
|
110
|
-
|
|
111
|
-
**Rules:**
|
|
112
|
-
- **Tenant injection depends on entity tenant mode** (see entity rules below):
|
|
113
|
-
- **strict mode (default):** Inject `ICurrentTenantService` + guard clause: `var tenantId = _currentTenant.TenantId ?? throw new TenantContextRequiredException();` (mandatory, returns 400)
|
|
114
|
-
- **optional mode:** Inject `ICurrentTenantService`, no guard: `var tenantId = _currentTenant.TenantId;` (nullable). EF global filter handles shared+tenant data.
|
|
115
|
-
- **scoped mode:** Inject `ICurrentTenantService`, validate Scope + TenantId consistency. Tenant scope requires TenantId.
|
|
116
|
-
- **none mode:** No `ICurrentTenantService` injection needed (cross-tenant data, no filtering)
|
|
117
|
-
- **ALL services MUST inject `ICurrentUserService`** for audit trails
|
|
118
|
-
- **ALL services MUST inject `ILogger<T>`** for production diagnostics
|
|
119
|
-
- CQRS with MediatR
|
|
120
|
-
- FluentValidation for all commands — **MUST register validators via DI:**
|
|
121
|
-
`services.AddValidatorsFromAssemblyContaining<Create{Entity}DtoValidator>();`
|
|
122
|
-
Without DI registration, `[FromBody]` DTOs are never validated (POST-CHECK 38)
|
|
123
|
-
- **Date fields in DTOs MUST use `DateOnly`**, not `string` (POST-CHECK 39). See `smartstack-api.md` DTO Type Mapping.
|
|
124
|
-
- DTOs separate from domain entities
|
|
125
|
-
- Service interfaces in Application, implementations in Infrastructure
|
|
126
|
-
- **FORBIDDEN:** `tenantId: Guid.Empty`, `TenantId!.Value`, queries without TenantId filter, `ICurrentUser` (does not exist — use `ICurrentUserService` + `ICurrentTenantService`), `string` type for date fields
|
|
127
|
-
- **Person Extension services:** If entity has `personRoleConfig`:
|
|
128
|
-
- `Include(x => x.User)` on ALL queries (mandatory)
|
|
129
|
-
- Inject `ICoreDbContext` for User existence checks
|
|
130
|
-
- Mandatory: search on `User.FirstName`, `User.LastName`, `User.Email`
|
|
131
|
-
- Optional: search fallback `User.FirstName ?? x.FirstName`
|
|
132
|
-
- CreateAsync: verify User exists + no duplicate `(TenantId, UserId)`
|
|
133
|
-
- ResponseDto: include `Display*` fields resolved from User join
|
|
134
|
-
|
|
135
|
-
---
|
|
136
|
-
|
|
137
|
-
## Layer 1 — API (parallel with Application)
|
|
138
|
-
|
|
139
|
-
**Controllers:** `Api/Controllers/{AppPascal}/{Entity}Controller.cs`
|
|
140
|
-
|
|
141
|
-
| Action | Tool |
|
|
142
|
-
|--------|------|
|
|
143
|
-
| Simple CRUD controller | MCP `scaffold_extension` |
|
|
144
|
-
| Complex controller | /controller skill |
|
|
145
|
-
| Validate | MCP `validate_security` |
|
|
146
|
-
|
|
147
|
-
**Rules:**
|
|
148
|
-
- `[RequirePermission(Permissions.{Module}.{Action})]` on EVERY endpoint
|
|
149
|
-
- **NavRoute minimum 2 segments** (application.module):
|
|
150
|
-
- `[NavRoute("human-resources.employees")]` (CORRECT — module-level, 2 segments)
|
|
151
|
-
- `[NavRoute("human-resources.employees.departments")]` (CORRECT — section-level, 3 segments)
|
|
152
|
-
- `[NavRoute("administration.ai", Suffix = "prompts")]` (CORRECT — sub-resource with Suffix)
|
|
153
|
-
- **NavRoute values MUST use kebab-case for ALL multi-word segments:**
|
|
154
|
-
- `[NavRoute("human-resources.employees")]` (CORRECT)
|
|
155
|
-
- `[NavRoute("humanresources.employees")]` (WRONG — missing hyphens)
|
|
156
|
-
- `[NavRoute("project-management.projects")]` (CORRECT)
|
|
157
|
-
- `[NavRoute("projectmanagement.projects")]` (WRONG)
|
|
158
|
-
- Permission paths MUST use kebab-case matching NavRoute codes (e.g., `human-resources.employees.read`)
|
|
159
|
-
- FORBIDDEN: concatenated segments like `humanresources` — must be `human-resources`
|
|
160
|
-
- POST-CHECK 32 detects non-kebab-case NavRoute values. POST-CHECK 33 detects non-kebab-case permissions
|
|
161
|
-
- **FORBIDDEN:** `[Route("api/...")]` alongside `[NavRoute]` — causes 404s (POST-CHECK 41)
|
|
162
|
-
- `[NavRoute]` is the ONLY route attribute needed — resolves routes from DB at startup
|
|
163
|
-
- NEVER use `[Authorize]` without specific permission
|
|
164
|
-
- Swagger XML documentation
|
|
165
|
-
- Return DTOs, never domain entities
|
|
166
|
-
- **Person Extension DTOs:** ResponseDto MUST include `Display*` fields (`DisplayFirstName`, `DisplayLastName`, `DisplayEmail`) resolved from User join. Mandatory CreateDto: `Guid UserId` only. Optional CreateDto: `Guid? UserId` + person fields.
|
|
167
|
-
|
|
168
|
-
---
|
|
169
|
-
|
|
170
|
-
## Layer 1 — Seed Data (parallel)
|
|
98
|
+
## Layer 1 — Seed Data (DEDICATED LAYER — sequential)
|
|
171
99
|
|
|
172
100
|
**Folder:** `Infrastructure/Persistence/Seeding/Data/{ModulePascal}/`
|
|
173
101
|
|
|
174
|
-
> **Detailed templates:** See
|
|
102
|
+
> **Detailed templates:** See `references/core-seed-data.md` for complete C# code templates.
|
|
175
103
|
> Navigation hierarchy: Application → Module → Section → Resource (ALL levels need seed data).
|
|
176
104
|
|
|
177
105
|
| Action | Tool |
|
|
@@ -268,7 +196,79 @@ var sectionRoute = $"{moduleRoute}/{ToKebabCase(sectionCode)}";
|
|
|
268
196
|
|
|
269
197
|
---
|
|
270
198
|
|
|
271
|
-
## Layer 2 —
|
|
199
|
+
## Layer 2 — Application (parallel with API within layer)
|
|
200
|
+
|
|
201
|
+
**Services:** `Application/Services/{App}/{Module}/` (interface)
|
|
202
|
+
**Service impls:** `Infrastructure/Services/{App}/{Module}/` (implementation)
|
|
203
|
+
**DTOs:** `Application/DTOs/{App}/{Module}/`
|
|
204
|
+
**Validators:** `Application/Validators/{App}/{Module}/`
|
|
205
|
+
|
|
206
|
+
| Action | Tool |
|
|
207
|
+
|--------|------|
|
|
208
|
+
| Create service/DTO | MCP `scaffold_extension` |
|
|
209
|
+
| Complex service logic | /application skill |
|
|
210
|
+
| Validate | MCP `validate_conventions` |
|
|
211
|
+
|
|
212
|
+
**Rules:**
|
|
213
|
+
- **Tenant injection depends on entity tenant mode** (see entity rules below):
|
|
214
|
+
- **strict mode (default):** Inject `ICurrentTenantService` + guard clause: `var tenantId = _currentTenant.TenantId ?? throw new TenantContextRequiredException();` (mandatory, returns 400)
|
|
215
|
+
- **optional mode:** Inject `ICurrentTenantService`, no guard: `var tenantId = _currentTenant.TenantId;` (nullable). EF global filter handles shared+tenant data.
|
|
216
|
+
- **scoped mode:** Inject `ICurrentTenantService`, validate Scope + TenantId consistency. Tenant scope requires TenantId.
|
|
217
|
+
- **none mode:** No `ICurrentTenantService` injection needed (cross-tenant data, no filtering)
|
|
218
|
+
- **ALL services MUST inject `ICurrentUserService`** for audit trails
|
|
219
|
+
- **ALL services MUST inject `ILogger<T>`** for production diagnostics
|
|
220
|
+
- CQRS with MediatR
|
|
221
|
+
- FluentValidation for all commands — **MUST register validators via DI:**
|
|
222
|
+
`services.AddValidatorsFromAssemblyContaining<Create{Entity}DtoValidator>();`
|
|
223
|
+
Without DI registration, `[FromBody]` DTOs are never validated (POST-CHECK 38)
|
|
224
|
+
- **Date fields in DTOs MUST use `DateOnly`**, not `string` (POST-CHECK 39). See `smartstack-api.md` DTO Type Mapping.
|
|
225
|
+
- DTOs separate from domain entities
|
|
226
|
+
- Service interfaces in Application, implementations in Infrastructure
|
|
227
|
+
- **FORBIDDEN:** `tenantId: Guid.Empty`, `TenantId!.Value`, queries without TenantId filter, `ICurrentUser` (does not exist — use `ICurrentUserService` + `ICurrentTenantService`), `string` type for date fields
|
|
228
|
+
- **Person Extension services:** If entity has `personRoleConfig`:
|
|
229
|
+
- `Include(x => x.User)` on ALL queries (mandatory)
|
|
230
|
+
- Inject `ICoreDbContext` for User existence checks
|
|
231
|
+
- Mandatory: search on `User.FirstName`, `User.LastName`, `User.Email`
|
|
232
|
+
- Optional: search fallback `User.FirstName ?? x.FirstName`
|
|
233
|
+
- CreateAsync: verify User exists + no duplicate `(TenantId, UserId)`
|
|
234
|
+
- ResponseDto: include `Display*` fields resolved from User join
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## Layer 2 — API (parallel with Application within layer)
|
|
239
|
+
|
|
240
|
+
**Controllers:** `Api/Controllers/{AppPascal}/{Entity}Controller.cs`
|
|
241
|
+
|
|
242
|
+
| Action | Tool |
|
|
243
|
+
|--------|------|
|
|
244
|
+
| Simple CRUD controller | MCP `scaffold_extension` |
|
|
245
|
+
| Complex controller | /controller skill |
|
|
246
|
+
| Validate | MCP `validate_security` |
|
|
247
|
+
|
|
248
|
+
**Rules:**
|
|
249
|
+
- `[RequirePermission(Permissions.{Module}.{Action})]` on EVERY endpoint
|
|
250
|
+
- **NavRoute minimum 2 segments** (application.module):
|
|
251
|
+
- `[NavRoute("human-resources.employees")]` (CORRECT — module-level, 2 segments)
|
|
252
|
+
- `[NavRoute("human-resources.employees.departments")]` (CORRECT — section-level, 3 segments)
|
|
253
|
+
- `[NavRoute("administration.ai", Suffix = "prompts")]` (CORRECT — sub-resource with Suffix)
|
|
254
|
+
- **NavRoute values MUST use kebab-case for ALL multi-word segments:**
|
|
255
|
+
- `[NavRoute("human-resources.employees")]` (CORRECT)
|
|
256
|
+
- `[NavRoute("humanresources.employees")]` (WRONG — missing hyphens)
|
|
257
|
+
- `[NavRoute("project-management.projects")]` (CORRECT)
|
|
258
|
+
- `[NavRoute("projectmanagement.projects")]` (WRONG)
|
|
259
|
+
- Permission paths MUST use kebab-case matching NavRoute codes (e.g., `human-resources.employees.read`)
|
|
260
|
+
- FORBIDDEN: concatenated segments like `humanresources` — must be `human-resources`
|
|
261
|
+
- POST-CHECK 32 detects non-kebab-case NavRoute values. POST-CHECK 33 detects non-kebab-case permissions
|
|
262
|
+
- **FORBIDDEN:** `[Route("api/...")]` alongside `[NavRoute]` — causes 404s (POST-CHECK 41)
|
|
263
|
+
- `[NavRoute]` is the ONLY route attribute needed — resolves routes from DB at startup
|
|
264
|
+
- NEVER use `[Authorize]` without specific permission
|
|
265
|
+
- Swagger XML documentation
|
|
266
|
+
- Return DTOs, never domain entities
|
|
267
|
+
- **Person Extension DTOs:** ResponseDto MUST include `Display*` fields (`DisplayFirstName`, `DisplayLastName`, `DisplayEmail`) resolved from User join. Mandatory CreateDto: `Guid UserId` only. Optional CreateDto: `Guid? UserId` + person fields.
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## Layer 3 — Frontend (parallel with I18n within layer)
|
|
272
272
|
|
|
273
273
|
> **Detailed patterns:** See `references/smartstack-frontend.md` for complete code templates.
|
|
274
274
|
|
|
@@ -390,7 +390,7 @@ See `references/smartstack-frontend.md` section 6 for the full `EntityLookup` co
|
|
|
390
390
|
|
|
391
391
|
---
|
|
392
392
|
|
|
393
|
-
## Layer
|
|
393
|
+
## Layer 3 — I18n
|
|
394
394
|
|
|
395
395
|
> **Template:** See `references/smartstack-frontend.md` Section 2 for complete JSON template.
|
|
396
396
|
|
|
@@ -409,7 +409,7 @@ t('{module}:actions.create', 'Create entity') // ALWAYS with namespace prefix
|
|
|
409
409
|
|
|
410
410
|
---
|
|
411
411
|
|
|
412
|
-
## Layer
|
|
412
|
+
## Layer 3 — Documentation (after frontend pages exist)
|
|
413
413
|
|
|
414
414
|
> **After frontend pages are created, generate module documentation.**
|
|
415
415
|
|
|
@@ -428,19 +428,19 @@ See `references/smartstack-frontend.md` section 7 for the component pattern.
|
|
|
428
428
|
|
|
429
429
|
---
|
|
430
430
|
|
|
431
|
-
## Layer
|
|
431
|
+
## Layer 4 — DevData (optional)
|
|
432
|
+
|
|
433
|
+
**Folder:** `Infrastructure/Persistence/Seeding/DevData/`
|
|
432
434
|
|
|
433
435
|
| Action | Tool |
|
|
434
436
|
|--------|------|
|
|
435
|
-
|
|
|
436
|
-
| Unit tests (app) | MCP `scaffold_tests` (target_layer: application) |
|
|
437
|
-
| Integration tests (api) | MCP `scaffold_tests` (target_layer: api, type: integration) |
|
|
438
|
-
| Security tests | MCP `scaffold_tests` (type: security) |
|
|
439
|
-
| Coverage check | MCP `analyze_test_coverage` |
|
|
440
|
-
| Scenarios | MCP `suggest_test_scenarios` |
|
|
437
|
+
| Create DevDataSeeder | Manual / template |
|
|
441
438
|
|
|
442
|
-
**
|
|
443
|
-
|
|
439
|
+
**Rules:**
|
|
440
|
+
- Business test data for development/demo environments
|
|
441
|
+
- ALL DevData entities MUST include `TenantId`
|
|
442
|
+
- DevData depends on seed data (navigation, permissions) being in place
|
|
443
|
+
- Optional — skip if no meaningful test data needed
|
|
444
444
|
|
|
445
445
|
---
|
|
446
446
|
|
|
@@ -466,23 +466,28 @@ For EACH file in the plan, specify HOW it will be created/modified:
|
|
|
466
466
|
| 2 | Infrastructure/.../EntityConfiguration.cs | create | MCP scaffold_extension |
|
|
467
467
|
| 3 | Infrastructure/Migrations/ | create | MCP suggest_migration + dotnet ef |
|
|
468
468
|
|
|
469
|
-
**Layer 1 —
|
|
469
|
+
**Layer 1 — Seed Data (sequential):**
|
|
470
|
+
|
|
471
|
+
| # | File | Action | Tool |
|
|
472
|
+
|---|------|--------|------|
|
|
473
|
+
| 4 | Seeding/Data/NavigationApplicationSeedData.cs | create | Reference core-seed-data.md (once per app) |
|
|
474
|
+
| 4b | Seeding/Data/ApplicationRolesSeedData.cs | create | Reference core-seed-data.md (once per app) |
|
|
475
|
+
| 5 | Seeding/Data/.../NavigationModuleSeedData.cs | create | Reference core-seed-data.md (4 langs) |
|
|
476
|
+
| 5b | Application/Authorization/Permissions.cs | create | MCP generate_permissions |
|
|
477
|
+
| 6 | Seeding/Data/.../PermissionsSeedData.cs | create | MCP generate_permissions |
|
|
478
|
+
| 7 | Seeding/Data/.../RolesSeedData.cs | create | Reference core-seed-data.md |
|
|
479
|
+
| 7b | Seeding/{App}SeedDataProvider.cs | create | Reference core-seed-data.md (IClientSeedDataProvider + DI) |
|
|
480
|
+
|
|
481
|
+
**Layer 2 — Backend (parallel within layer):**
|
|
470
482
|
|
|
471
483
|
| # | File | Action | Tool |
|
|
472
484
|
|---|------|--------|------|
|
|
473
|
-
|
|
|
474
|
-
|
|
|
475
|
-
|
|
|
476
|
-
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
| 8 | Seeding/Data/.../NavigationModuleSeedData.cs | create | Reference core-seed-data.md (4 langs) |
|
|
480
|
-
| 8b | Application/Authorization/Permissions.cs | create | MCP generate_permissions |
|
|
481
|
-
| 9 | Seeding/Data/.../PermissionsSeedData.cs | create | MCP generate_permissions |
|
|
482
|
-
| 10 | Seeding/Data/.../RolesSeedData.cs | create | Reference Layer 1 Seed Data |
|
|
483
|
-
| 10b | Seeding/{App}SeedDataProvider.cs | create | Reference core-seed-data.md (IClientSeedDataProvider + DI) |
|
|
484
|
-
|
|
485
|
-
**Layer 1 — Frontend (parallel):**
|
|
485
|
+
| 8 | Application/Services/.../Service.cs | create | MCP scaffold_extension |
|
|
486
|
+
| 9 | Application/DTOs/.../Dto.cs | create | MCP scaffold_extension |
|
|
487
|
+
| 9b | Infrastructure/Services/CodeGeneration/ | create | Reference code-generation.md (if codePattern != manual) |
|
|
488
|
+
| 10 | Api/Controllers/.../Controller.cs | create | /controller skill or MCP scaffold_extension |
|
|
489
|
+
|
|
490
|
+
**Layer 3 — Frontend + I18n + Documentation (parallel within layer):**
|
|
486
491
|
|
|
487
492
|
| # | File | Action | Tool |
|
|
488
493
|
|---|------|--------|------|
|
|
@@ -492,30 +497,32 @@ For EACH file in the plan, specify HOW it will be created/modified:
|
|
|
492
497
|
| 12 | src/services/api/{module}Api.ts | create | MCP scaffold_api_client |
|
|
493
498
|
| 13 | src/routes/{module}.tsx | create | MCP scaffold_routes |
|
|
494
499
|
| 14 | src/i18n/locales/{lang}/{module}.json | create | Reference smartstack-frontend.md (4 languages) |
|
|
495
|
-
|
|
496
|
-
**Layer 2b — Documentation (after frontend):**
|
|
497
|
-
|
|
498
|
-
| # | File | Action | Tool |
|
|
499
|
-
|---|------|--------|------|
|
|
500
500
|
| 14b | src/pages/docs/business/{app}/{module}/doc-data.ts | create | /documentation skill |
|
|
501
501
|
| 14c | src/pages/docs/business/{app}/{module}/index.tsx | create | /documentation skill |
|
|
502
502
|
|
|
503
|
-
**Layer 3 — Tests (sequential):**
|
|
504
|
-
|
|
505
|
-
| # | File | Action | Tool |
|
|
506
|
-
|---|------|--------|------|
|
|
507
|
-
| 15 | tests/.../EntityTests.cs | create | MCP scaffold_tests |
|
|
508
|
-
| 16 | tests/.../ServiceTests.cs | create | MCP scaffold_tests |
|
|
509
|
-
|
|
510
503
|
**FK Field Guidance:** If step-01 identified `fkFields[]`, every Create/Edit page MUST use `EntityLookup` for those fields (see `smartstack-frontend.md` section 6).
|
|
511
504
|
|
|
512
505
|
---
|
|
513
506
|
|
|
514
507
|
## Parallelization Strategy (Agent Teams)
|
|
515
508
|
|
|
516
|
-
|
|
509
|
+
> **Cross-layer parallelism is FORBIDDEN.** Layers execute sequentially: 0 → 1 → 2 → 3 → 4.
|
|
510
|
+
> Agent teams are used **within** a layer to parallelize multi-entity work.
|
|
511
|
+
|
|
512
|
+
If NOT economy_mode AND a layer has multiple entities to process:
|
|
513
|
+
|
|
514
|
+
**Create agent teams WITHIN the layer to parallelize multi-entity work.**
|
|
515
|
+
|
|
516
|
+
- **Layer 2 (Backend):** If multiple entities, spawn entity-specific teammates (each handles service + controller for one entity)
|
|
517
|
+
- **Layer 3 (Frontend):** If multiple entities, spawn entity-specific teammates (each handles pages + i18n for one entity)
|
|
517
518
|
|
|
518
|
-
|
|
519
|
+
| Condition | Action |
|
|
520
|
+
|-----------|--------|
|
|
521
|
+
| economy_mode = true | NO teams, all sequential |
|
|
522
|
+
| Single entity | NO teams, agent principal handles all layers |
|
|
523
|
+
| Multiple entities, Layer 2 | Teams: one teammate per entity (service + controller) |
|
|
524
|
+
| Multiple entities, Layer 3 | Teams: one teammate per entity (pages + i18n) |
|
|
525
|
+
| Analysis phase (step-01) | Teams: scan-backend + scan-frontend + scan-context |
|
|
519
526
|
|
|
520
527
|
See `references/agent-teams-protocol.md` for team creation, teammate spawning, task coordination, and shutdown.
|
|
521
528
|
|
|
@@ -528,10 +535,10 @@ When `/ralph-loop` invokes `/apex -d {prd_path}`, PRD tasks already define the s
|
|
|
528
535
|
Map each PRD task to a layer based on `task.category`:
|
|
529
536
|
- `domain` → Layer 0
|
|
530
537
|
- `infrastructure` → Layer 0
|
|
531
|
-
- `application` → Layer 1
|
|
532
|
-
- `api` → Layer 1
|
|
533
538
|
- `seedData` → Layer 1
|
|
534
|
-
- `
|
|
535
|
-
- `
|
|
539
|
+
- `application` → Layer 2
|
|
540
|
+
- `api` → Layer 2
|
|
541
|
+
- `frontend` → Layer 3
|
|
542
|
+
- `test` → inline (Layer 2 backend tests, Layer 3 frontend tests)
|
|
536
543
|
|
|
537
544
|
For each task: infer file_path, action, and tool from category. SKIP user checkpoint. Jump to "Estimated Commits" section.
|
|
@@ -28,11 +28,11 @@ IF delegate_mode:
|
|
|
28
28
|
Map each PRD task to a layer based on task.category:
|
|
29
29
|
domain → Layer 0
|
|
30
30
|
infrastructure → Layer 0
|
|
31
|
-
application → Layer 1
|
|
32
|
-
api → Layer 1
|
|
33
31
|
seedData → Layer 1
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
application → Layer 2
|
|
33
|
+
api → Layer 2
|
|
34
|
+
frontend → Layer 3
|
|
35
|
+
test → inline (Layer 2 backend tests, Layer 3 frontend tests)
|
|
36
36
|
|
|
37
37
|
For each task:
|
|
38
38
|
file_path = task.files_changed.created[0] (primary file)
|
|
@@ -56,12 +56,12 @@ IF delegate_mode:
|
|
|
56
56
|
## 1-3. Layer Mapping, Skill Assignment, Parallelization
|
|
57
57
|
|
|
58
58
|
> **Reference:** All planning procedures are now in `references/smartstack-layers.md` (already loaded above):
|
|
59
|
-
> - Layer assignment matrix (Domain/Infrastructure/Application/API/
|
|
59
|
+
> - Layer assignment matrix (Domain/Infrastructure/Seed/Application/API/Frontend/DevData)
|
|
60
60
|
> - Entity definition template (tenantMode, codePattern, fkFields, ACs)
|
|
61
61
|
> - Skill/MCP assignment table (per file, per layer)
|
|
62
|
-
> - Layer 0/1/
|
|
62
|
+
> - Layer 0/1/2/3/4 file lists with tools (see "Planning Template" section)
|
|
63
63
|
> - FK field guidance (EntityLookup + backend ?search= parameter)
|
|
64
|
-
> - Parallelization strategy (Agent Teams
|
|
64
|
+
> - Parallelization strategy (Agent Teams within Layer 2/3 for multi-entity)
|
|
65
65
|
> - Delegate mode fast path (PRD task mapping to layers)
|
|
66
66
|
|
|
67
67
|
```
|
|
@@ -69,12 +69,22 @@ Layer 0: SEQUENTIAL (agent principal)
|
|
|
69
69
|
→ domain + infra + migration
|
|
70
70
|
→ dotnet build --no-restore (BLOCKING)
|
|
71
71
|
|
|
72
|
-
Layer 1:
|
|
73
|
-
→
|
|
74
|
-
→
|
|
72
|
+
Layer 1: SEQUENTIAL (agent principal)
|
|
73
|
+
→ seed data (navigation, permissions, roles)
|
|
74
|
+
→ dotnet build (BLOCKING)
|
|
75
75
|
|
|
76
|
-
Layer 2:
|
|
77
|
-
→
|
|
76
|
+
Layer 2: PARALLEL WITHIN LAYER (Agent Teams if multi-entity)
|
|
77
|
+
→ services + controllers
|
|
78
|
+
→ dotnet build (BLOCKING)
|
|
79
|
+
→ backend tests inline (scaffold + run + fix max 3)
|
|
80
|
+
|
|
81
|
+
Layer 3: PARALLEL WITHIN LAYER (Agent Teams if multi-entity)
|
|
82
|
+
→ pages + i18n + documentation
|
|
83
|
+
→ compliance gate (BLOCKING)
|
|
84
|
+
→ frontend tests inline (scaffold + run + fix max 3)
|
|
85
|
+
|
|
86
|
+
Layer 4: OPTIONAL (agent principal)
|
|
87
|
+
→ DevData seeder
|
|
78
88
|
```
|
|
79
89
|
|
|
80
90
|
If economy_mode: ALL layers sequential, agent principal only.
|
|
@@ -87,14 +97,15 @@ Verify the plan respects dependencies:
|
|
|
87
97
|
|
|
88
98
|
```
|
|
89
99
|
- Migration AFTER EF configs (always)
|
|
100
|
+
- Seed data AFTER migration (Layer 1 depends on Layer 0 build gate)
|
|
90
101
|
- Application services AFTER domain entities (always)
|
|
91
102
|
- Code generator service AFTER entity + EF config (needs DbSet for sequence query)
|
|
92
103
|
- CreateDto adjustments AFTER code pattern decision (remove Code property if auto-generated)
|
|
93
104
|
- Controllers AFTER application services (always)
|
|
105
|
+
- Backend tests AFTER services + controllers (inline in Layer 2)
|
|
94
106
|
- Frontend AFTER API controllers (API contract needed)
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
- Build check between Layer 0 and Layer 1 (BLOCKING)
|
|
107
|
+
- Frontend tests AFTER pages created (inline in Layer 3)
|
|
108
|
+
- Build gate between EVERY layer (BLOCKING): Layer 0 → 1 → 2 → 3 → 4
|
|
98
109
|
```
|
|
99
110
|
|
|
100
111
|
---
|
|
@@ -103,12 +114,16 @@ Verify the plan respects dependencies:
|
|
|
103
114
|
|
|
104
115
|
```
|
|
105
116
|
feat({module}): [domain+infra] {description}
|
|
117
|
+
feat({module}): [seed] navigation, permissions, roles
|
|
106
118
|
feat({module}): [app+api] {description}
|
|
107
|
-
|
|
108
|
-
feat({module}): [
|
|
109
|
-
|
|
119
|
+
test({module}): backend unit and integration tests
|
|
120
|
+
feat({module}): [frontend] pages, routes, i18n, documentation
|
|
121
|
+
test({module}): frontend form tests
|
|
122
|
+
feat({module}): [devdata] test data for development # if applicable
|
|
110
123
|
```
|
|
111
124
|
|
|
125
|
+
**Maximum 7 commits per module.**
|
|
126
|
+
|
|
112
127
|
---
|
|
113
128
|
|
|
114
129
|
## 6. User Checkpoint (if NOT auto_mode)
|