@atlashub/smartstack-cli 4.40.0 → 4.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlashub/smartstack-cli",
3
- "version": "4.40.0",
3
+ "version": "4.41.0",
4
4
  "description": "SmartStack Claude Code automation toolkit - GitFlow, EF Core migrations, prompts and more",
5
5
  "author": {
6
6
  "name": "SmartStack",
@@ -147,6 +147,7 @@ Execute incremental SmartStack development using the APEX methodology. This skil
147
147
 
148
148
  <execution_rules>
149
149
 
150
+ - **ULTRA THINK at each step transition** — Deep reasoning about scope, existing code, and whether elements need to be CREATED or MODIFIED before acting. This is critical when updating an existing module (adding sections/resources to existing seed data, permissions, roles).
150
151
  - **Load one step at a time** - Progressive loading to manage context
151
152
  - **ORCHESTRATE, never generate** - All SmartStack code via skills (/controller, /application, etc.) or MCP tools
152
153
  - **MCP-first** - Use MCP scaffold/validate tools before manual approaches
@@ -90,6 +90,30 @@ Cross-reference with step-00 challenge responses:
90
90
  - Each section: NavigationSectionSeedData, frontend route → exists/missing
91
91
  - If dependencies: verify FK target entities and their `?search=` support
92
92
 
93
+ ### Seed Data Completeness Criteria (CRITICAL)
94
+
95
+ > **A seed file EXISTS does NOT mean it's COMPLETE.** When adding sections/resources to an existing module, seed files are the most commonly missed update.
96
+
97
+ For seed data files, apply these SPECIFIC completeness criteria:
98
+
99
+ | File | COMPLETE if | INCOMPLETE if |
100
+ |------|-------------|---------------|
101
+ | NavigationModuleSeedData.cs | Contains entries for ALL {sections} from step-00 scope | Missing GetSectionEntries/GetResourceEntries for ANY new section |
102
+ | Permissions.cs | Has constants for ALL {sections} (Read/Create/Update/Delete/Wildcard per section) | Missing permission constants for ANY new section |
103
+ | PermissionsSeedData.cs | Has HasData() entries for ALL permissions in Permissions.cs | Missing HasData() for ANY new permission |
104
+ | RolesSeedData.cs | Has role-permission mappings for ALL permissions | Missing mappings for ANY new permission |
105
+ | {App}SeedDataProvider.cs | Calls seed methods that cover ALL modules/sections | Missing calls for new module/section seed data |
106
+
107
+ **Decision matrix:**
108
+
109
+ ```
110
+ Seed file NOT found → "create"
111
+ Seed file found + covers ALL target sections → "skip"
112
+ Seed file found + MISSING some target sections → "modify" ← THIS IS THE COMMON MISS
113
+ ```
114
+
115
+ > **ULTRA THINK:** When the task says "add absence management to HR module" and NavigationModuleSeedData.cs already has entries for "employees" section — the file EXISTS but is INCOMPLETE (missing "absences" section). Action = "modify", NOT "skip".
116
+
93
117
  ---
94
118
 
95
119
  ## Scope Re-Check (after exploration)
@@ -7,6 +7,8 @@ next_step: steps/step-01-analyze.md
7
7
 
8
8
  # Step 0: Initialize
9
9
 
10
+ **ULTRA THINK about whether this is a NEW module (create from scratch) or an UPDATE to an existing module (add sections/resources/entities to existing code). This distinction drives every downstream decision — especially seed data, permissions, and roles.**
11
+
10
12
  **Before anything else**, display the version banner:
11
13
 
12
14
  ```
@@ -8,6 +8,8 @@ next_step: steps/step-02-plan.md
8
8
 
9
9
  # Step 1: Analyze
10
10
 
11
+ **ULTRA THINK about existing code structure. Pay special attention to seed data files — they may exist but be INCOMPLETE (missing sections, permissions, or roles for the new scope). An existing file does NOT mean it's complete.**
12
+
11
13
  **Goal:** Understand what EXISTS in the codebase. Pure exploration, NO planning.
12
14
 
13
15
  ## LOAD CONDITIONALLY
@@ -135,7 +137,9 @@ Agent(subagent_type='Explore', model='sonnet',
135
137
 
136
138
  ---
137
139
 
138
- ## 3. Seed Data Inventory
140
+ ## 3. Seed Data Inventory (CONTENT-AWARE)
141
+
142
+ > **CRITICAL:** Finding that a seed file EXISTS is not enough. You must READ it and compare its content against the target scope to determine if it needs MODIFICATION.
139
143
 
140
144
  ```
141
145
  Glob("**/Seeding/Data/{module_code}/*SeedData.cs")
@@ -144,6 +148,42 @@ Glob("**/Seeding/*SeedDataProvider.cs")
144
148
 
145
149
  Identify: NavigationModuleSeedData, PermissionsSeedData, RolesSeedData, SeedConstants, IClientSeedDataProvider (+ DI registration).
146
150
 
151
+ ### 3b. Seed Data Content Analysis (if files exist)
152
+
153
+ For each existing seed file, READ IT and extract what's already covered:
154
+
155
+ ```
156
+ NavigationModuleSeedData.cs:
157
+ → Extract existing section codes (from GetSectionEntries or similar methods)
158
+ → Extract existing resource codes (from GetResourceEntries or similar methods)
159
+ → Compare against {sections} from step-00
160
+ → Mark MISSING sections/resources → these need "modify" action
161
+
162
+ Permissions.cs:
163
+ → Extract existing permission constants (Read, Create, Update, Delete per section)
164
+ → Compare against {sections} from step-00
165
+ → Mark sections WITHOUT permissions → these need "modify" action
166
+
167
+ PermissionsSeedData.cs:
168
+ → Extract existing permission paths from HasData() entries
169
+ → Mark missing paths → "modify"
170
+
171
+ RolesSeedData.cs:
172
+ → Extract existing role-permission mappings
173
+ → Mark missing mappings for new sections → "modify"
174
+
175
+ {App}SeedDataProvider.cs:
176
+ → Check which seed methods are called (SeedNavigationAsync, SeedPermissionsAsync, etc.)
177
+ → Check if new module/section seed classes are referenced → "modify" if missing
178
+ ```
179
+
180
+ **Result:** For each seed file, set action to:
181
+ - `"skip"` — file exists AND covers ALL target sections/entities
182
+ - `"modify"` — file exists BUT is MISSING entries for new sections/entities
183
+ - `"create"` — file does not exist
184
+
185
+ > **Common mistake:** Marking seed files as "skip" just because the file exists. A `NavigationModuleSeedData.cs` that covers sections A and B MUST be marked "modify" if the task adds section C.
186
+
147
187
  ---
148
188
 
149
189
  ## 4-7. Analysis Methods & Validation
@@ -8,6 +8,8 @@ next_step: steps/step-03-execute.md
8
8
 
9
9
  # Step 2: Plan
10
10
 
11
+ **ULTRA THINK about the execution strategy. For each file: is it CREATE (new) or MODIFY (exists but needs additions for new sections/entities)? Seed data files are frequently marked "skip" by mistake when they should be "modify" — verify this explicitly.**
12
+
11
13
  **Goal:** Create a precise, file-by-file plan. Each file mapped to a SKILL or MCP tool.
12
14
 
13
15
  ## LOAD CONDITIONALLY
@@ -8,6 +8,8 @@ next_step: steps/step-04-examine.md
8
8
 
9
9
  # Step 3: Execute — Orchestrator
10
10
 
11
+ **ULTRA THINK about the full execution context. Before dispatching layers, verify: are we creating a NEW module or UPDATING an existing one? This is critical for Layer 1 (seed data) — existing seed files must be MODIFIED, not recreated or skipped.**
12
+
11
13
  /apex ORCHESTRATES. It does not write SmartStack code directly.
12
14
  All code goes through skills (/controller, /application, /ui-components, /efcore) or MCP tools.
13
15
 
@@ -5,6 +5,8 @@ model: opus
5
5
  parent_step: steps/step-03-execute.md
6
6
  ---
7
7
 
8
+ **ULTRA THINK about domain entities: which are NEW (create) vs which EXIST (modify/extend)?**
9
+
8
10
  ## Layer 0 — Domain + Infrastructure (sequential, agent principal)
9
11
 
10
12
  ### Task Progress
@@ -5,6 +5,8 @@ model: opus
5
5
  parent_step: steps/step-03-execute.md
6
6
  ---
7
7
 
8
+ **ULTRA THINK about seed data completeness: is this a NEW module (create all seed files from scratch) or an UPDATE to an existing module (modify existing seed files to add new sections/resources/permissions)? Read existing files BEFORE deciding what to generate.**
9
+
8
10
  ## Layer 1 — Seed Data (DEDICATED LAYER — sequential, agent principal)
9
11
 
10
12
  ### Task Progress
@@ -15,7 +17,33 @@ TaskUpdate(taskId: progress_tracker_id,
15
17
 
16
18
  > This layer is required. Seed data makes modules visible in the UI. Without it, the module exists in code but is invisible to users. Reference: `references/core-seed-data.md` (loaded above) for complete C# templates.
17
19
 
18
- ### Application-Level Seed Data (ONCE per application)
20
+ ---
21
+
22
+ ### Mode Detection: CREATE vs UPDATE
23
+
24
+ > **CRITICAL — Run this BEFORE generating any seed data.**
25
+
26
+ ```
27
+ Glob("**/Seeding/Data/{module_code}/*SeedData.cs") → existing_seed_files
28
+ Glob("**/Seeding/Data/NavigationApplicationSeedData.cs") → app_seed_exists
29
+ Glob("**/Seeding/*SeedDataProvider.cs") → provider_exists
30
+
31
+ IF existing_seed_files is EMPTY:
32
+ SEED_MODE = "CREATE"
33
+ → Generate ALL seed data from scratch (full templates below)
34
+
35
+ IF existing_seed_files is NOT EMPTY:
36
+ SEED_MODE = "UPDATE"
37
+ → Read EACH existing file
38
+ → Compare content against {sections} and {entities} from step-00
39
+ → ADD only what's MISSING — do NOT recreate or duplicate existing entries
40
+ ```
41
+
42
+ ---
43
+
44
+ ### CREATE Mode — Application-Level Seed Data (ONCE per application)
45
+
46
+ > Skip if `app_seed_exists` (files already present from previous APEX run).
19
47
 
20
48
  ```
21
49
  1. NavigationApplicationSeedData.cs
@@ -27,7 +55,13 @@ TaskUpdate(taskId: progress_tracker_id,
27
55
  → References NavigationApplicationSeedData.ApplicationId
28
56
  ```
29
57
 
30
- ### Per-Module Seed Data
58
+ ---
59
+
60
+ ### Per-Module Seed Data (CREATE or UPDATE)
61
+
62
+ #### If SEED_MODE = "CREATE"
63
+
64
+ Generate all files from scratch using `references/core-seed-data.md` templates:
31
65
 
32
66
  ```
33
67
  3. NavigationModuleSeedData.cs
@@ -51,7 +85,51 @@ TaskUpdate(taskId: progress_tracker_id,
51
85
  → Look up roles by Code at runtime
52
86
  ```
53
87
 
54
- ### Infrastructure Provider (ONCE per application)
88
+ #### If SEED_MODE = "UPDATE"
89
+
90
+ > **Read each existing file FIRST, then surgically add only what's missing.**
91
+
92
+ ```
93
+ 3. NavigationModuleSeedData.cs — READ EXISTING FILE
94
+ → Extract existing section codes (look for GetSectionEntries or section GUID definitions)
95
+ → Extract existing resource codes
96
+ → For each section in {sections} NOT already present:
97
+ - Add new section entry in GetSectionEntries() with new Guid.NewGuid()
98
+ - Add section translations (4 languages) in GetSectionTranslationEntries()
99
+ - Add route entry: /{app-kebab}/{module-kebab}/{new-section-kebab}
100
+ → For each resource in {resources} NOT already present:
101
+ - Add resource entry in GetResourceEntries()
102
+ - Add resource translations
103
+ → PRESERVE all existing entries unchanged
104
+
105
+ 4. Permissions.cs — READ EXISTING FILE
106
+ → Extract existing permission constants
107
+ → For each NEW section:
108
+ - Add section-level constants: Wildcard, Read, Create, Update, Delete
109
+ - Path format: {app}.{module}.{new-section}.{action}
110
+ → MCP generate_permissions for validation (compare output vs file)
111
+ → PRESERVE all existing constants unchanged
112
+
113
+ 5. PermissionsSeedData.cs — READ EXISTING FILE
114
+ → Extract existing HasData() permission entries
115
+ → Add HasData() entries for each NEW permission from step 4
116
+ → PRESERVE all existing entries unchanged
117
+
118
+ 6. RolesSeedData.cs — READ EXISTING FILE
119
+ → Extract existing role-permission mappings
120
+ → For each NEW permission:
121
+ - Admin → wildcard or all new permissions
122
+ - Manager → Read + Create + Update for new section
123
+ - Contributor → Read + Create for new section
124
+ - Viewer → Read for new section
125
+ → PRESERVE all existing mappings unchanged
126
+ ```
127
+
128
+ ---
129
+
130
+ ### Infrastructure Provider (CREATE or UPDATE)
131
+
132
+ #### If SEED_MODE = "CREATE"
55
133
 
56
134
  ```
57
135
  7. {App}SeedDataProvider.cs
@@ -63,8 +141,38 @@ TaskUpdate(taskId: progress_tracker_id,
63
141
  → DI: services.AddScoped<IClientSeedDataProvider, {App}SeedDataProvider>()
64
142
  ```
65
143
 
144
+ #### If SEED_MODE = "UPDATE"
145
+
146
+ ```
147
+ 7. {App}SeedDataProvider.cs — READ EXISTING FILE
148
+ → Verify SeedNavigationAsync() calls the module's NavigationModuleSeedData
149
+ → If new sections were added: verify they are seeded (new section entries are part of existing methods)
150
+ → Verify SeedPermissionsAsync() covers new PermissionsSeedData entries
151
+ → Verify SeedRolePermissionsAsync() covers new RolesSeedData entries
152
+ → Add any missing calls or registrations
153
+ → PRESERVE all existing logic unchanged
154
+ ```
155
+
66
156
  <!-- TODO A4: Replace direct seed generation with MCP scaffold_seed_data when B1 is ready. This will eliminate the need for references/core-seed-data.md (1464 lines). -->
67
157
 
158
+ ---
159
+
160
+ ### Post-Layer 1 Verification Checklist
161
+
162
+ > **Before the build gate, verify ALL new scope elements are covered:**
163
+
164
+ ```
165
+ For each section in {sections} from step-00:
166
+ ✓ NavigationModuleSeedData has section entry + translations (4 langs)
167
+ ✓ NavigationModuleSeedData has route: /{app}/{module}/{section}
168
+ ✓ Permissions.cs has constants for this section (Read/Create/Update/Delete/Wildcard)
169
+ ✓ PermissionsSeedData has HasData() for each permission
170
+ ✓ RolesSeedData maps all 4 roles to section permissions
171
+ ✓ {App}SeedDataProvider references all seed data classes
172
+
173
+ IF any check fails → fix BEFORE build gate
174
+ ```
175
+
68
176
  ### Post-Layer 1 Build Gate
69
177
 
70
178
  ```bash
@@ -5,6 +5,8 @@ model: opus
5
5
  parent_step: steps/step-03-execute.md
6
6
  ---
7
7
 
8
+ **ULTRA THINK about backend services: which services/controllers are NEW vs which need MODIFICATION for new entities/endpoints?**
9
+
8
10
  ## Layer 2 — Backend (Services + Controllers)
9
11
 
10
12
  ### Task Progress
@@ -5,6 +5,8 @@ model: opus
5
5
  parent_step: steps/step-03-execute.md
6
6
  ---
7
7
 
8
+ **ULTRA THINK about frontend completeness: new pages, routes, i18n keys, AND permissions/navigation alignment with Layer 1 seed data.**
9
+
8
10
  # Layer 3 — Frontend (Pages + I18n + Documentation)
9
11
 
10
12
  ### ⛔ HARD RULE — /ui-components is NON-NEGOTIABLE (read BEFORE any Layer 3 action)
@@ -5,6 +5,8 @@ model: opus
5
5
  parent_step: steps/step-03-execute.md
6
6
  ---
7
7
 
8
+ **ULTRA THINK about dev data coverage: all NEW entities need realistic test data.**
9
+
8
10
  ## Layer 4 — DevData (optional)
9
11
 
10
12
  ### Task Progress
@@ -8,6 +8,8 @@ next_step: steps/step-05-deep-review.md
8
8
 
9
9
  # Step 4: eXamine
10
10
 
11
+ **ULTRA THINK about completeness. Did ALL new sections/entities get their navigation entries, permissions, and roles? Cross-check the scope from step-00 against what was actually generated in Layer 1.**
12
+
11
13
  > **This is the X in APEX.** Mandatory automated examination of all generated code.
12
14
 
13
15
  **Goal:** Verify everything works. MCP conventions, build, seed data, acceptance criteria.
@@ -92,6 +94,8 @@ If migration fails (SQLite-only syntax, type mismatches, missing FK targets), fi
92
94
 
93
95
  ## 6. Seed Data Completeness Check (if needs_seed_data)
94
96
 
97
+ > **CRITICAL — Cross-check against {sections} from step-00.** Every section in scope MUST have navigation, permissions, and roles. This is the most common miss when UPDATING an existing module.
98
+
95
99
  | File | Checks |
96
100
  |------|--------|
97
101
  | NavigationApplicationSeedData | 4 lang translations |
@@ -105,6 +109,20 @@ If migration fails (SQLite-only syntax, type mismatches, missing FK targets), fi
105
109
  | IClientSeedDataProvider | 4 Seed methods, idempotent, SaveChanges per group |
106
110
  | DI Registration | `services.AddScoped<IClientSeedDataProvider, {App}SeedDataProvider>()` |
107
111
 
112
+ ### 6a. Section Coverage Matrix (MANDATORY for updates)
113
+
114
+ ```
115
+ For EACH section in {sections} from step-00:
116
+ Read NavigationModuleSeedData.cs → has section entry? YES / NO
117
+ Read NavigationModuleSeedData.cs → has translations (4)? YES / NO
118
+ Read NavigationModuleSeedData.cs → has route? YES / NO
119
+ Read Permissions.cs → has section permissions? YES / NO
120
+ Read PermissionsSeedData.cs → has HasData() entries? YES / NO
121
+ Read RolesSeedData.cs → has role-permission mappings? YES / NO
122
+
123
+ IF ANY cell = NO → BLOCKING — return to step-03b to fix
124
+ ```
125
+
108
126
  ---
109
127
 
110
128
  ## 6b. POST-CHECKs