@atlashub/smartstack-cli 4.39.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/dist/index.js +20 -9
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/skills/apex/SKILL.md +1 -0
- package/templates/skills/apex/references/analysis-methods.md +24 -0
- package/templates/skills/apex/steps/step-00-init.md +2 -0
- package/templates/skills/apex/steps/step-01-analyze.md +41 -1
- package/templates/skills/apex/steps/step-02-plan.md +2 -0
- package/templates/skills/apex/steps/step-03-execute.md +2 -0
- package/templates/skills/apex/steps/step-03a-layer0-domain.md +2 -0
- package/templates/skills/apex/steps/step-03b-layer1-seed.md +111 -3
- package/templates/skills/apex/steps/step-03c-layer2-backend.md +2 -0
- package/templates/skills/apex/steps/step-03d-layer3-frontend.md +2 -0
- package/templates/skills/apex/steps/step-03e-layer4-devdata.md +2 -0
- package/templates/skills/apex/steps/step-04-examine.md +18 -0
- package/templates/skills/dev-start/SKILL.md +10 -6
package/package.json
CHANGED
|
@@ -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 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 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)
|
|
@@ -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
|
|
@@ -278,7 +278,9 @@ If `--frontend-only`: skip backend checks.
|
|
|
278
278
|
|
|
279
279
|
## Step 5: Launch backend
|
|
280
280
|
|
|
281
|
-
|
|
281
|
+
Track whether the backend was just launched: `BACKEND_JUST_LAUNCHED=true/false`. This is used in Step 7 for cache invalidation.
|
|
282
|
+
|
|
283
|
+
If NOT already running and NOT `--frontend-only` (set `BACKEND_JUST_LAUNCHED=true`):
|
|
282
284
|
|
|
283
285
|
```bash
|
|
284
286
|
# cd into the API directory first
|
|
@@ -313,8 +315,10 @@ Use `Bash(run_in_background=true)` so it runs in background.
|
|
|
313
315
|
|
|
314
316
|
## Step 7: Handle admin password
|
|
315
317
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
+
**Cache invalidation rule:** If the backend was just launched in Step 5 (i.e., it was NOT already running), the cache is STALE because `MigrateAsync()` + `HasData()` may have re-seeded the admin user with the default password hash, overwriting any previously set password. In this case, ALWAYS run a fresh admin reset regardless of `dev-session.json`.
|
|
319
|
+
|
|
320
|
+
1. If `.claude/dev-session.json` exists and contains a password AND `--reset` NOT specified AND the backend was already running (NOT launched in Step 5) -> reuse stored credentials
|
|
321
|
+
2. If `--reset` OR no stored password OR backend was just launched in Step 5:
|
|
318
322
|
a. If backend was just launched, wait for it to be UP first.
|
|
319
323
|
Run the full wait in a **single bash command** to avoid multiple tool calls:
|
|
320
324
|
```bash
|
|
@@ -335,9 +339,9 @@ Use `Bash(run_in_background=true)` so it runs in background.
|
|
|
335
339
|
If `/scalar` does not respond after 30s, warn the user and attempt the reset anyway.
|
|
336
340
|
b. Run admin reset using the connection string extracted from appsettings (Step 3):
|
|
337
341
|
```bash
|
|
338
|
-
smartstack admin reset --connection
|
|
342
|
+
smartstack admin reset --connection '{CONN_STR}' --force --json
|
|
339
343
|
```
|
|
340
|
-
**IMPORTANT:** Always pass `--connection` with the full connection string. Without it, the CLI shows an interactive environment picker that blocks execution.
|
|
344
|
+
**IMPORTANT:** Always pass `--connection` with the full connection string (single-quoted to avoid shell expansion). Without it, the CLI shows an interactive environment picker that blocks execution.
|
|
341
345
|
c. Parse JSON output to extract email and password
|
|
342
346
|
d. Write `.claude/dev-session.json`:
|
|
343
347
|
```json
|
|
@@ -380,7 +384,7 @@ Use `Bash(run_in_background=true)` so it runs in background.
|
|
|
380
384
|
1. **NEVER debug or fix code** - This skill ONLY starts processes. If the backend or frontend fails to start, display the error and STOP. Do NOT attempt to: clean/restore/rebuild, upgrade packages, inspect DLLs, clear NuGet cache, read .csproj files, or any other diagnostic/repair action. The user will fix the issue themselves.
|
|
381
385
|
2. **Fail-fast on crash** - After launching backend in background, wait 5s then check TaskOutput. If the process already exited or shows errors, report and STOP immediately.
|
|
382
386
|
3. **Backend must be READY before admin reset** - First poll the port (netstat), then poll the `/scalar` endpoint (HTTP 200/302) to confirm the API is fully initialized. Kestrel binds the port before the app finishes starting, so port-only checks are insufficient.
|
|
383
|
-
4. **Admin reset requires --connection** - Always pass `--connection
|
|
387
|
+
4. **Admin reset requires --connection** - Always pass `--connection '{CONN_STR}'` (single-quoted to avoid shell expansion) to avoid the interactive environment picker.
|
|
384
388
|
5. **Read config files in parallel** - When reading appsettings, .env, and launchSettings, use multiple Read calls in a single message.
|
|
385
389
|
6. **Cross-worktree support** - Detect the correct API directory regardless of which worktree we're in.
|
|
386
390
|
7. **No MCP required** - This skill only uses bash commands and the `smartstack` CLI.
|