@atlashub/smartstack-cli 3.49.0 → 3.51.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": "3.49.0",
3
+ "version": "3.51.0",
4
4
  "description": "SmartStack Claude Code automation toolkit - GitFlow, EF Core migrations, prompts and more",
5
5
  "author": {
6
6
  "name": "SmartStack",
@@ -97,6 +97,12 @@ Parse the report to extract:
97
97
 
98
98
  ## STEP 2: ASK USER (4 MANDATORY QUESTIONS)
99
99
 
100
+ ⛔ EXECUTION RULES FOR STEP 2:
101
+ - Each question = ONE separate AskUserQuestion call
102
+ - NEVER combine multiple questions into a single AskUserQuestion
103
+ - NEVER skip a question, even if a default seems obvious
104
+ - ALL 4 variables must be set by explicit user response before proceeding
105
+
100
106
  > **Reconfigure mode:** When `EXISTING_GITFLOW=true` and user chose "Reconfigure", show existing values as "(Current)" recommended options in each question. This avoids forcing the user to re-enter everything.
101
107
 
102
108
  ### 2a. Repository URL
@@ -220,6 +226,8 @@ Normalize name into variants (PascalCase.Dot, PascalCase, kebab-case, snake_case
220
226
 
221
227
  ### 2d. Worktree Mode
222
228
 
229
+ ⛔ MANDATORY — this question is FREQUENTLY SKIPPED by accident. ALWAYS ask it.
230
+
223
231
  **Fresh init:**
224
232
  ```json
225
233
  {
@@ -257,6 +265,21 @@ Store the result as `{WORKTREE_MODE}` ("organized", "simple", or "disabled").
257
265
 
258
266
  ---
259
267
 
268
+ ## GATE CHECK: Verify all 4 questions were answered
269
+
270
+ ⛔ BLOCKING — Do NOT proceed to step 3 until ALL variables are confirmed:
271
+
272
+ | Variable | Required | Source |
273
+ |----------|----------|--------|
274
+ | {REPO_URL} | ✅ | From command arg OR question 2a |
275
+ | {PROJECT_BASE} | ✅ | From question 2b |
276
+ | {PROJECT_NAME} | ✅ | From question 2c |
277
+ | {WORKTREE_MODE} | ✅ | From question 2d — MUST be "organized", "simple", or "disabled" |
278
+
279
+ If {WORKTREE_MODE} is not set, GO BACK and ask question 2d NOW.
280
+
281
+ ---
282
+
260
283
  ## STEP 3: CLONE AND CREATE STRUCTURE
261
284
 
262
285
  **Skip this step if `{WORKTREE_MODE}` is "disabled".**
@@ -47,8 +47,8 @@ Write `.claude/gitflow/config.json` in develop worktree.
47
47
  "enabled": true,
48
48
  "mode": "{WORKTREE_MODE}",
49
49
  "structure": {
50
- "main": "{ROOT_FOLDER_STORAGE_FORMAT}/01-Main",
51
- "develop": "{ROOT_FOLDER_STORAGE_FORMAT}/02-Develop",
50
+ "main": "{ROOT_FOLDER_STORAGE_FORMAT}/{MAIN_DIR}",
51
+ "develop": "{ROOT_FOLDER_STORAGE_FORMAT}/{DEVELOP_DIR}",
52
52
  "features": "{ROOT_FOLDER_STORAGE_FORMAT}/features",
53
53
  "releases": "{ROOT_FOLDER_STORAGE_FORMAT}/releases",
54
54
  "hotfixes": "{ROOT_FOLDER_STORAGE_FORMAT}/hotfixes"
@@ -74,6 +74,14 @@ Write `.claude/gitflow/config.json` in develop worktree.
74
74
  }
75
75
  ```
76
76
 
77
+ **Worktree mode directories:**
78
+
79
+ | Mode | `{MAIN_DIR}` | `{DEVELOP_DIR}` |
80
+ |------|-------------|-----------------|
81
+ | organized | `01-Main` | `02-Develop` |
82
+ | simple | `main` | `develop` |
83
+ | disabled | N/A | N/A (no worktrees, `enabled: false`) |
84
+
77
85
  ## Path Storage Convention
78
86
 
79
87
  - `{ROOT_FOLDER_STORAGE_FORMAT}` = result of `normalize_path_for_storage("{ROOT_FOLDER}")`
@@ -6,12 +6,27 @@
6
6
 
7
7
  Split the raw input on any separator: spaces, hyphens, underscores, dots, camelCase boundaries.
8
8
 
9
+ **⛔ Compound proper nouns:** Some camelCase words are actually single brand/product names that must NOT be split. Before splitting on camelCase boundaries, check if the full word is a known compound:
10
+
11
+ | Word | Type | Parsed as |
12
+ |------|------|-----------|
13
+ | `SmartStack` | Brand name | `["SmartStack"]` (1 word) |
14
+ | `JavaScript` | Language | `["JavaScript"]` (1 word) |
15
+ | `TypeScript` | Language | `["TypeScript"]` (1 word) |
16
+ | `DevOps` | Proper noun | `["DevOps"]` (1 word) |
17
+ | `GitHub` | Brand name | `["GitHub"]` (1 word) |
18
+ | `InfraAzure` | Normal camelCase | `["Infra", "Azure"]` (2 words) |
19
+
20
+ **Rule:** If the full word (before splitting) is recognized as a brand, product, or proper noun, treat it as ONE word. Only split unknown camelCase words.
21
+
22
+ **Example:** `SmartStack.infra-azure` → `["SmartStack", "infra", "azure"]` → kebab: `smartstack-infra-azure`
23
+
9
24
  | Raw input | Parsed words |
10
25
  |-----------|-------------|
11
26
  | `mon super projet` | `["mon", "super", "projet"]` |
12
27
  | `gestion-des-stocks` | `["gestion", "des", "stocks"]` |
13
28
  | `my_awesome_app` | `["my", "awesome", "app"]` |
14
- | `SmartStack.App` | `["Smart", "Stack", "App"]` |
29
+ | `SmartStack.App` | `["SmartStack", "App"]` |
15
30
  | `userManagement` | `["user", "Management"]` |
16
31
 
17
32
  ## Step 2: Language detection and spell check
@@ -95,7 +110,7 @@ Regardless of the chosen primary format, ALL variants are generated and stored:
95
110
 
96
111
  | User types | PascalCase.Dot | kebab-case | PascalCase |
97
112
  |-----------|---------------|------------|------------|
98
- | `smart stack app` | `SmartStack.App` | `smart-stack-app` | `SmartStackApp` |
113
+ | `SmartStack.App` | `SmartStack.App` | `smartstack-app` | `SmartStackApp` |
99
114
  | `gestion-des-stocks` | `Gestion.Des.Stocks` | `gestion-des-stocks` | `GestionDesStocks` |
100
115
  | `Mon Projet V2` | `Mon.Projet.V2` | `mon-projet-v2` | `MonProjetV2` |
101
116
  | `user auth module` | `User.Auth.Module` | `user-auth-module` | `UserAuthModule` |
@@ -170,6 +170,9 @@ AskUserQuestion:
170
170
 
171
171
  ## Question 5: Worktree Mode
172
172
 
173
+ ⛔ CRITICAL — This question is the MOST FREQUENTLY SKIPPED.
174
+ It MUST be asked as a SEPARATE AskUserQuestion call. NEVER default silently.
175
+
173
176
  ```yaml
174
177
  AskUserQuestion:
175
178
  - header: "Worktrees"
@@ -16,6 +16,8 @@ VERSION=$(grep -oP '<Version>\K[^<]+' "$DEVELOP_FULL_PATH"/*.csproj 2>/dev/null
16
16
  [ -z "$VERSION" ] && VERSION="0.0.0"
17
17
  ```
18
18
 
19
+ **⛔ CRITICAL:** The version MUST come from one of the detection sources above. If NONE of them returns a value, use EXACTLY `0.0.0`. Do NOT invent, guess, or fabricate a version number (e.g., `0.1.0`, `1.0.0`). The fallback is `0.0.0` — nothing else.
20
+
19
21
  ## Version will be stored in config.json
20
22
 
21
23
  The detected version is used in the GitFlow config template under `versioning.current`.
@@ -16,7 +16,7 @@ Set up GitFlow configuration with bare repository, worktrees, and branches.
16
16
 
17
17
  ## MANDATORY QUESTIONS
18
18
 
19
- **⛔ ALWAYS ask these 3 questions, even if values can be auto-detected.**
19
+ **⛔ ALWAYS ask these 4 questions, even if values can be auto-detected.**
20
20
  **⛔ ALWAYS detect workspace context (step 2) to show sibling projects.**
21
21
 
22
22
  | Question | Variable | Auto-detect from |
@@ -24,6 +24,7 @@ Set up GitFlow configuration with bare repository, worktrees, and branches.
24
24
  | Repository URL | `{REPO_URL}` | `git remote get-url origin` |
25
25
  | Root folder | `{ROOT_FOLDER}` | Parent of current directory |
26
26
  | Project name | `{PROJECT_NAME}` | Repo name from URL or folder |
27
+ | Worktree mode | `{WORKTREE_MODE}` | Default: organized |
27
28
 
28
29
  **Multi-project principle:** Each repository has its OWN independent GitFlow config. Step 2 scans for sibling projects to provide context, not to share configuration.
29
30
 
@@ -86,6 +87,9 @@ See [references/init-name-normalization.md](../references/init-name-normalizatio
86
87
 
87
88
  **⛔ MUST ASK — this determines the directory structure (step 8).**
88
89
 
90
+ ⛔ BLOCKING: If you reach step 8 without having asked the worktree mode question
91
+ and received an explicit user answer, STOP and ask it NOW.
92
+
89
93
  See [references/init-questions.md](../references/init-questions.md) → **Question 5** for options:
90
94
  - **Organized** (recommended): `01-Main/`, `02-Develop/`, `features/`, `releases/`, `hotfixes/`
91
95
  - **Simple**: `main/`, `develop/`, `features/`, `releases/`, `hotfixes/`
@@ -174,6 +178,7 @@ Before completing init, verify:
174
178
  - [ ] Repository URL confirmed by user
175
179
  - [ ] Root folder confirmed by user
176
180
  - [ ] Project name confirmed by user
181
+ - [ ] Worktree mode confirmed by user (organized / simple / disabled)
177
182
  - [ ] .bare/ directory exists
178
183
  - [ ] 01-Main/ worktree exists and is on main branch
179
184
  - [ ] 02-Develop/ worktree exists and is on develop branch
@@ -195,7 +200,7 @@ Before completing init, verify:
195
200
 
196
201
  ## SUCCESS CRITERIA:
197
202
 
198
- - ✅ All 3 mandatory questions asked
203
+ - ✅ All 4 mandatory questions asked (URL, folder, name, worktree mode)
199
204
  - ✅ Complete folder structure created
200
205
  - ✅ Both main and develop worktrees functional
201
206
  - ✅ Configuration file created