@atlashub/smartstack-cli 1.14.0 → 1.14.2

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.
@@ -152,20 +152,100 @@ git checkout "$BASE_BRANCH" && git pull origin "$BASE_BRANCH"
152
152
  git checkout -b "$FULL_BRANCH"
153
153
  ```
154
154
 
155
- ### 7. Create Local DB Config (.NET)
155
+ ### 7. Create Local Environment Config (Backend + Frontend)
156
156
 
157
- **If `appsettings.json` detected:**
157
+ **Detect project structure:**
158
158
  ```bash
159
+ # Find API project directory
160
+ API_DIR=$(find "$WORKTREE_PATH" -type d -name "*.Api" -path "*/src/*" | head -1)
161
+ # Find Web project directory
162
+ WEB_DIR=$(find "$WORKTREE_PATH" -type d -name "*-web" -path "*/web/*" | head -1)
163
+
164
+ # Generate unique ports based on branch name hash (to avoid conflicts between worktrees)
165
+ HASH=$(echo "$BRANCH_NAME" | md5sum | cut -c1-4)
166
+ HASH_NUM=$((16#$HASH % 100))
167
+ API_PORT=$((5200 + HASH_NUM))
168
+ WEB_PORT=$((5300 + HASH_NUM))
169
+
170
+ # Project and DB naming
159
171
  PROJECT_NAME=$(basename $(pwd) | tr '[:upper:]' '[:lower:]')
160
- DB_NAME="${PROJECT_NAME}_${branch_type}_${BRANCH_NAME}" | cut -c1-63
172
+ DB_NAME=$(echo "${PROJECT_NAME}_${branch_type}_${BRANCH_NAME}" | cut -c1-63)
173
+ ```
174
+
175
+ #### 7a. Backend: appsettings.Local.json
161
176
 
162
- cat > "$WORKTREE_PATH/appsettings.Local.json" << EOF
177
+ **If API project detected:**
178
+ ```bash
179
+ [ -n "$API_DIR" ] && [ -f "$API_DIR/appsettings.json" ] && {
180
+ cat > "$API_DIR/appsettings.Local.json" << EOF
163
181
  {
164
182
  "ConnectionStrings": {
165
183
  "DefaultConnection": "Server=localhost;Database=${DB_NAME};Trusted_Connection=true;TrustServerCertificate=true"
184
+ },
185
+ "Authentication": {
186
+ "FrontendUrl": "http://localhost:${WEB_PORT}"
187
+ },
188
+ "Kestrel": {
189
+ "Endpoints": {
190
+ "Http": {
191
+ "Url": "http://localhost:${API_PORT}"
192
+ }
193
+ }
194
+ },
195
+ "Serilog": {
196
+ "MinimumLevel": {
197
+ "Default": "Debug"
198
+ }
166
199
  }
167
200
  }
168
201
  EOF
202
+ echo "Created: $API_DIR/appsettings.Local.json (DB: $DB_NAME, Port: $API_PORT)"
203
+ }
204
+ ```
205
+
206
+ #### 7b. Frontend: .env.local + npm script
207
+
208
+ **If Web project detected:**
209
+ ```bash
210
+ [ -n "$WEB_DIR" ] && [ -f "$WEB_DIR/package.json" ] && {
211
+ # Create .env.local
212
+ cat > "$WEB_DIR/.env.local" << EOF
213
+ # Local environment configuration
214
+ # Generated by /gitflow:start for branch: ${FULL_BRANCH}
215
+ # Run with: npm run local
216
+
217
+ VITE_API_URL=http://localhost:${API_PORT}
218
+ VITE_APP_ENV=local
219
+ VITE_DEBUG=true
220
+ EOF
221
+ echo "Created: $WEB_DIR/.env.local (API: localhost:$API_PORT)"
222
+
223
+ # Add "local" script to package.json if not exists
224
+ if ! grep -q '"local"' "$WEB_DIR/package.json"; then
225
+ # Use Node.js to safely modify package.json
226
+ node -e "
227
+ const fs = require('fs');
228
+ const pkg = JSON.parse(fs.readFileSync('$WEB_DIR/package.json', 'utf8'));
229
+ if (!pkg.scripts.local) {
230
+ pkg.scripts.local = 'vite --mode local --port ${WEB_PORT}';
231
+ fs.writeFileSync('$WEB_DIR/package.json', JSON.stringify(pkg, null, 2) + '\n');
232
+ console.log('Added script: npm run local');
233
+ }
234
+ "
235
+ fi
236
+ }
237
+ ```
238
+
239
+ #### 7c. Summary of local config
240
+
241
+ ```
242
+ ┌─────────────────────────────────────────────────────────────┐
243
+ │ LOCAL ENVIRONMENT CONFIGURED │
244
+ ├─────────────────────────────────────────────────────────────┤
245
+ │ Database: ${DB_NAME} │
246
+ │ API Port: ${API_PORT} → dotnet run --environment Local │
247
+ │ Web Port: ${WEB_PORT} → npm run local │
248
+ └─────────────────────────────────────────────────────────────┘
169
249
  ```
170
250
 
171
251
  ### 8. Store State
@@ -178,7 +258,14 @@ EOF
178
258
  "base_branch": "{BASE_BRANCH}",
179
259
  "target_branch": "{TARGET}",
180
260
  "worktree_path": "{WORKTREE_PATH}",
181
- "version_current": "{VERSION}"
261
+ "version_current": "{VERSION}",
262
+ "local_config": {
263
+ "database": "{DB_NAME}",
264
+ "api_port": "{API_PORT}",
265
+ "web_port": "{WEB_PORT}",
266
+ "api_dir": "{API_DIR}",
267
+ "web_dir": "{WEB_DIR}"
268
+ }
182
269
  }
183
270
  ```
184
271
 
@@ -193,18 +280,29 @@ EOF
193
280
  ║ Target: {TARGET} ║
194
281
  ║ Worktree: {WORKTREE_PATH} ║
195
282
  ╠══════════════════════════════════════════════════════════════════╣
283
+ ║ LOCAL ENVIRONMENT: ║
284
+ ║ Database: {DB_NAME} ║
285
+ ║ API: http://localhost:{API_PORT} ║
286
+ ║ Web: http://localhost:{WEB_PORT} ║
287
+ ╠══════════════════════════════════════════════════════════════════╣
196
288
  ║ NEXT STEPS: ║
197
289
  ║ ║
198
290
  ║ 1. Go to worktree: ║
199
291
  ║ cd {WORKTREE_PATH} ║
200
292
  ║ ║
201
- ║ 2. Make changes and commit: ║
293
+ ║ 2. Start local environment: ║
294
+ ║ # Terminal 1 - Backend: ║
295
+ ║ cd src/SmartStack.Api && dotnet run --environment Local ║
296
+ ║ # Terminal 2 - Frontend: ║
297
+ ║ cd web/smartstack-web && npm run local ║
298
+ ║ ║
299
+ ║ 3. Make changes and commit: ║
202
300
  ║ /gitflow commit ║
203
301
  ║ ║
204
- 3. Create pull request: ║
302
+ 4. Create pull request: ║
205
303
  ║ /gitflow pr ║
206
304
  ║ ║
207
- 4. After PR merged, finalize: ║
305
+ 5. After PR merged, finalize: ║
208
306
  ║ /gitflow finish ║
209
307
  ╚══════════════════════════════════════════════════════════════════╝
210
308
  ```
@@ -226,7 +324,9 @@ EOF
226
324
 
227
325
  - Branch created from correct base
228
326
  - Worktree set up (if enabled)
229
- - Local config created (if .NET)
327
+ - Backend local config created: `appsettings.Local.json` (if .NET API detected)
328
+ - Frontend local config created: `.env.local` + `npm run local` script (if web project detected)
329
+ - Ports synchronized between backend and frontend (unique per branch)
230
330
  - State stored for subsequent steps
231
331
 
232
332
  ## NEXT STEP:
@@ -70,12 +70,12 @@ import { EntityCard, ProviderCard, TemplateCard } from '@/components/ui/EntityCa
70
70
  | `links` | `Array<{ icon, label, href?, onClick? }>` |
71
71
  | `actions` | `Array<{ label, href?, onClick?, variant, icon?, disabled? }>` |
72
72
 
73
- ### Action Variants
73
+ ### Action Variants (EntityCard)
74
74
  | Variant | Style |
75
75
  |---------|-------|
76
- | `primary` | `bg-accent-500 text-white` |
77
- | `secondary` | `bg-accent-700 text-white` |
78
- | `ghost` | `border bg-transparent` |
76
+ | `primary` | `bg-[var(--color-accent-600)] text-white` |
77
+ | `secondary` | `bg-[var(--bg-secondary)] text-[var(--text-secondary)]` |
78
+ | `ghost` | `text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]` (NO border!) |
79
79
 
80
80
  ## RESPONSIVE GRID
81
81
 
@@ -159,12 +159,174 @@ const canExecute = hasPermission('module.action.execute');
159
159
  | Catalogs | Cards with complex interactive states |
160
160
  | Clickable grids | Cards with integrated forms |
161
161
 
162
+ ## CRITICAL: CSS VARIABLES (NEVER HARDCODE COLORS)
163
+
164
+ **NEVER use hardcoded Tailwind colors.** ALWAYS use CSS variables for theme compliance.
165
+
166
+ ### Status Colors
167
+ | Status | Background | Text | Border | Dot (solid) |
168
+ |--------|------------|------|--------|-------------|
169
+ | **Info** (Pending, Business) | `--info-bg` | `--info-text` | `--info-border` | `--info-dot` |
170
+ | **Success** (Active) | `--success-bg` | `--success-text` | `--success-border` | `--success-dot` |
171
+ | **Warning** (Suspended, Owner) | `--warning-bg` | `--warning-text` | `--warning-border` | `--warning-dot` |
172
+ | **Error** (Danger, Archive) | `--error-bg` | `--error-text` | `--error-border` | `--error-dot` |
173
+ | **Accent** (Personal, Primary) | `--accent-bg` | `--accent-text` | `--accent-border` | `--color-accent-500` |
174
+
175
+ ### Badge Pattern
176
+ ```tsx
177
+ // ✅ CORRECT - Uses CSS variables
178
+ <span className="px-2 py-0.5 text-xs rounded-[var(--radius-badge)] bg-[var(--info-bg)] text-[var(--info-text)]">
179
+ Info Badge
180
+ </span>
181
+
182
+ // ❌ WRONG - Hardcoded Tailwind colors
183
+ <span className="bg-blue-500/10 text-blue-500">Info Badge</span>
184
+ ```
185
+
186
+ ### Status Config Pattern
187
+ ```tsx
188
+ // ✅ CORRECT
189
+ const STATUS_CONFIG = {
190
+ Pending: { bgColor: 'bg-[var(--info-bg)]', color: 'text-[var(--info-text)]', borderColor: 'border-[var(--info-border)]' },
191
+ Active: { bgColor: 'bg-[var(--success-bg)]', color: 'text-[var(--success-text)]', borderColor: 'border-[var(--success-border)]' },
192
+ Suspended: { bgColor: 'bg-[var(--warning-bg)]', color: 'text-[var(--warning-text)]', borderColor: 'border-[var(--warning-border)]' },
193
+ Archived: { bgColor: 'bg-[var(--bg-tertiary)]', color: 'text-[var(--text-tertiary)]', borderColor: 'border-[var(--border-color)]' }
194
+ };
195
+
196
+ // ❌ WRONG - dark: variants are obsolete
197
+ const STATUS_CONFIG = {
198
+ Active: { bgColor: 'bg-emerald-50 dark:bg-emerald-900/20', ... }
199
+ };
200
+ ```
201
+
202
+ ## BUTTON VARIANTS
203
+
204
+ ### Action Buttons (Status changes)
205
+ ```tsx
206
+ // Success action (Activate)
207
+ <button className="px-4 py-2 rounded-[var(--radius-button)] bg-[var(--success-dot)] text-white hover:opacity-90">
208
+ Activate
209
+ </button>
210
+
211
+ // Warning action (Suspend)
212
+ <button className="px-4 py-2 rounded-[var(--radius-button)] bg-[var(--warning-dot)] text-white hover:opacity-90">
213
+ Suspend
214
+ </button>
215
+
216
+ // Danger action (Archive/Delete)
217
+ <button className="px-4 py-2 rounded-[var(--radius-button)] bg-[var(--error-dot)] text-white hover:opacity-90">
218
+ Archive
219
+ </button>
220
+
221
+ // Primary action
222
+ <button className="px-4 py-2 rounded-[var(--radius-button)] bg-[var(--color-accent-600)] text-white hover:bg-[var(--color-accent-700)]">
223
+ Save
224
+ </button>
225
+
226
+ // Ghost action (NO BORDER!)
227
+ <button className="px-4 py-2 rounded-[var(--radius-button)] text-[var(--text-secondary)] hover:text-[var(--text-primary)] hover:bg-[var(--bg-hover)]">
228
+ Refresh
229
+ </button>
230
+
231
+ // Secondary action
232
+ <button className="px-4 py-2 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]">
233
+ Cancel
234
+ </button>
235
+ ```
236
+
237
+ ### Button Rules
238
+ | Variant | Background | Text | Border | Hover |
239
+ |---------|------------|------|--------|-------|
240
+ | **Primary** | `--color-accent-600` | `white` | none | `--color-accent-700` |
241
+ | **Success** | `--success-dot` | `white` | none | `opacity-90` |
242
+ | **Warning** | `--warning-dot` | `white` | none | `opacity-90` |
243
+ | **Danger** | `--error-dot` | `white` | none | `opacity-90` |
244
+ | **Secondary** | `--bg-secondary` | `--text-secondary` | none | `--bg-hover` |
245
+ | **Ghost** | transparent | `--text-secondary` | **NONE** | `--bg-hover` |
246
+
247
+ ## DETAIL PAGE TEMPLATE
248
+
249
+ ### Structure
250
+ ```tsx
251
+ <div className="container mx-auto px-4 py-6 max-w-7xl space-y-6">
252
+ {/* Header */}
253
+ <div className="flex items-center gap-4">
254
+ <button onClick={() => navigate(-1)} className="p-2 rounded-[var(--radius-button)] hover:bg-[var(--bg-hover)]">
255
+ <ArrowLeft className="w-5 h-5 text-[var(--text-secondary)]" />
256
+ </button>
257
+ <div className="flex-1">
258
+ <h1 className="text-xl sm:text-2xl font-bold text-[var(--text-primary)]">{title}</h1>
259
+ <p className="text-sm text-[var(--text-secondary)]">{subtitle}</p>
260
+ </div>
261
+ <div className="flex items-center gap-2">
262
+ {/* Status badges */}
263
+ </div>
264
+ </div>
265
+
266
+ {/* Pill Tabs */}
267
+ <div className="flex gap-1 p-1 bg-[var(--bg-secondary)] rounded-[var(--radius-card)] border border-[var(--border-color)]">
268
+ {tabs.map(tab => (
269
+ <button
270
+ key={tab.id}
271
+ className={`px-4 py-2 rounded-[var(--radius-button)] font-medium ${
272
+ activeTab === tab.id
273
+ ? 'bg-[var(--color-accent-600)] text-white'
274
+ : 'text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]'
275
+ }`}
276
+ >
277
+ {tab.label}
278
+ </button>
279
+ ))}
280
+ </div>
281
+
282
+ {/* Tab Content */}
283
+ <div className="min-h-[400px]">{/* ... */}</div>
284
+ </div>
285
+ ```
286
+
287
+ ### Info Card Pattern
288
+ ```tsx
289
+ <div className="p-4 rounded-[var(--radius-card)] bg-[var(--bg-primary)] border border-[var(--border-color)]">
290
+ <div className="flex items-center justify-between mb-4">
291
+ <h3 className="text-lg font-semibold text-[var(--text-primary)] flex items-center gap-2">
292
+ <Icon className="w-5 h-5" />
293
+ {title}
294
+ </h3>
295
+ <button className="flex items-center gap-1 px-3 py-1.5 rounded-[var(--radius-button)] bg-[var(--bg-secondary)] text-[var(--text-secondary)] hover:bg-[var(--bg-hover)]">
296
+ <Edit3 className="w-4 h-4" />
297
+ {t('common:edit')}
298
+ </button>
299
+ </div>
300
+ <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
301
+ <div className="p-3 rounded-lg bg-[var(--bg-secondary)]">
302
+ <p className="text-xs text-[var(--text-tertiary)] uppercase tracking-wider mb-1">{label}</p>
303
+ <p className="text-sm text-[var(--text-primary)] font-medium">{value}</p>
304
+ </div>
305
+ </div>
306
+ </div>
307
+ ```
308
+
309
+ ### Error Display Pattern
310
+ ```tsx
311
+ {error && (
312
+ <div className="p-4 rounded-[var(--radius-card)] bg-[var(--error-bg)] border border-[var(--error-border)]">
313
+ <div className="flex items-center gap-2 text-[var(--error-text)]">
314
+ <AlertTriangle className="w-5 h-5" />
315
+ <span>{error}</span>
316
+ </div>
317
+ </div>
318
+ )}
319
+ ```
320
+
162
321
  ## ABSOLUTE RULES
163
322
 
164
323
  | DO | DON'T |
165
324
  |----|-------|
325
+ | CSS variables for ALL colors | Hardcoded Tailwind colors (`bg-blue-500`) |
326
+ | `--success-dot`, `--warning-dot`, `--error-dot` for action buttons | `bg-emerald-500`, `bg-amber-500`, `bg-red-500` |
327
+ | `--info-bg`, `--success-bg`, etc. for badges | `bg-blue-500/10 dark:bg-blue-900/20` |
328
+ | Ghost buttons WITHOUT border | `border border-[var(--border-color)]` on ghost |
166
329
  | EntityCard for entities | Custom cards with manual divs |
167
- | Distinct colored header | rounded-full for avatar (that's table) |
168
330
  | Responsive grid 1→2→3→4 | Fixed non-responsive grid |
169
331
  | h-full + flex-1 + mt-auto | Unaligned buttons in grid |
170
332
  | Empty and loading states | Native HTML tooltip |
@@ -1,206 +0,0 @@
1
- # GitFlow Optimizations - Resume
2
-
3
- > **Date:** 2026-01-20
4
- > **Objectif:** Reduire le temps d'execution des commandes GitFlow de ~70%
5
-
6
- ---
7
-
8
- ## Optimisations Implementees
9
-
10
- ### 1. Fonctions Partagees (`_shared.md`)
11
-
12
- **Fichier cree:** `templates/commands/gitflow/_shared.md`
13
-
14
- Centralise les fonctions reutilisables pour eviter la duplication:
15
-
16
- | Fonction | Usage | Gain |
17
- |----------|-------|------|
18
- | `get_current_branch()` | Detection robuste de branche | ~66% |
19
- | `get_version_info()` | Version + tags en 1 appel | ~75% |
20
- | `get_sync_status()` | Statut sync local/remote | ~70% |
21
- | `collect_repo_data_parallel()` | Collecte parallele | ~60-70% |
22
- | `read_gitflow_config()` | Config avec cache | ~90% |
23
- | `detect_worktree_mode()` | Detection auto structure | Fiabilite |
24
- | `get_worktree_path()` | Chemin worktree standard | Consistance |
25
-
26
- ---
27
-
28
- ### 2. Parallelisation Git (`2-status.md`, `10-start.md`, `11-finish.md`)
29
-
30
- **Avant:**
31
- ```bash
32
- # Sequentiel - ~8 secondes
33
- git fetch --all
34
- git for-each-ref refs/heads
35
- git for-each-ref refs/remotes
36
- git for-each-ref refs/tags
37
- git worktree list
38
- git branch -vv
39
- git status
40
- # + boucles for pour chaque branche
41
- ```
42
-
43
- **Apres:**
44
- ```bash
45
- # Parallele - ~2 secondes
46
- {
47
- git for-each-ref refs/heads > /tmp/local &
48
- git for-each-ref refs/remotes > /tmp/remote &
49
- git for-each-ref refs/tags > /tmp/tags &
50
- git worktree list > /tmp/worktrees &
51
- git status --porcelain > /tmp/status &
52
- wait
53
- }
54
- ```
55
-
56
- **Gain:** ~70% du temps de collecte
57
-
58
- ---
59
-
60
- ### 3. Mode Fast (`2-status.md`)
61
-
62
- **Nouveau:** `/gitflow:status --fast`
63
-
64
- Output compact en ~1 seconde:
65
- ```
66
- [develop] clean | v1.5.0 | dev->main:+5 | main->dev:+0 | sync:UP-TO-DATE
67
- -> /gitflow:start release (5 commits prets)
68
- ```
69
-
70
- ---
71
-
72
- ### 4. Consolidation des Questions (`10-start.md`)
73
-
74
- **Avant:** 6+ `AskUserQuestion` sequentiels
75
- - Type de branche
76
- - Divergence main (release)
77
- - Migrations EF Core (release)
78
- - Version (release)
79
- - Nom de branche
80
- - Working directory dirty
81
-
82
- **Apres:** 1-2 questions maximum
83
- - Question unique avec options dynamiques
84
- - Execution directe si arguments fournis
85
-
86
- **Gain:** ~70% du temps d'interaction
87
-
88
- ---
89
-
90
- ### 5. Optimisation des Agents
91
-
92
- | Agent | Avant | Apres | Raison |
93
- |-------|-------|-------|--------|
94
- | `gitflow-finish` | sonnet | **haiku** | Actions predefinies |
95
- | `gitflow-commit` | sonnet | **haiku** | Validation simple |
96
- | `gitflow-exec` | sonnet | sonnet | Gestion conflits complexe |
97
- | `gitflow-status` | haiku | haiku | OK |
98
- | `gitflow-start` | haiku | haiku | OK |
99
- | `gitflow-pr` | haiku | haiku | OK |
100
-
101
- **Gain latence:** ~30-50% pour les agents optimises
102
-
103
- ---
104
-
105
- ## Gains Totaux par Commande
106
-
107
- | Commande | Avant | Apres | Gain |
108
- |----------|-------|-------|------|
109
- | `/gitflow:status` | ~8-12s | ~2-3s | **~70%** |
110
- | `/gitflow:status --fast` | N/A | ~1s | **Nouveau** |
111
- | `/gitflow:start` (interactif) | ~25s | ~8s | **~65%** |
112
- | `/gitflow:start feature xxx` | ~15s | ~5s | **~65%** |
113
- | `/gitflow:finish` | ~15s | ~5s | **~65%** |
114
- | `/gitflow:commit` | ~8s | ~4s | **~50%** |
115
-
116
- ---
117
-
118
- ## Principes Appliques
119
-
120
- ### 1. Collecte Avant Affichage
121
- - Executer TOUTES les commandes git AVANT de generer l'output
122
- - Utiliser des fichiers temporaires ou variables pour stocker
123
-
124
- ### 2. Parallelisation Aggressive
125
- - Utiliser `&` et `wait` pour les commandes independantes
126
- - Limiter le parallelisme avec `wait -n` si necessaire
127
-
128
- ### 3. Single-Pass Parsing
129
- - Parser les donnees une seule fois
130
- - Stocker en memoire pour reutilisation
131
-
132
- ### 4. Cache des Donnees Frequentes
133
- - Config GitFlow (variable globale)
134
- - Tags Git (valide pendant la session)
135
- - Version (calculee une fois)
136
-
137
- ### 5. Questions Minimales
138
- - Consolider les questions en 1-2 appels
139
- - Utiliser les arguments directs quand possible
140
- - Options dynamiques basees sur le contexte
141
-
142
- ### 6. Modeles Adaptes
143
- - **haiku** pour les taches simples/predefinies
144
- - **sonnet** uniquement pour le raisonnement complexe
145
-
146
- ---
147
-
148
- ## Fichiers Modifies
149
-
150
- ```
151
- templates/commands/gitflow/
152
- _shared.md # NOUVEAU - Fonctions partagees
153
- 2-status.md # Parallelisation + mode fast
154
- 10-start.md # Consolidation questions
155
- 11-finish.md # Parallelisation scan + haiku
156
- OPTIMIZATIONS.md # NOUVEAU - Cette documentation
157
-
158
- templates/agents/gitflow/
159
- finish.md # sonnet -> haiku
160
- commit.md # sonnet -> haiku
161
- ```
162
-
163
- ---
164
-
165
- ## Compatibilite
166
-
167
- **Aucun breaking change:**
168
- - Les commandes gardent la meme interface
169
- - Les options existantes fonctionnent
170
- - Nouveaux modes (`--fast`) sont optionnels
171
-
172
- ---
173
-
174
- ## Tests Recommandes
175
-
176
- 1. `/gitflow:status` - Verifier temps < 3s
177
- 2. `/gitflow:status --fast` - Verifier temps < 1s
178
- 3. `/gitflow:start feature test` - Verifier temps < 5s
179
- 4. `/gitflow:start` (interactif) - Verifier 1-2 questions max
180
- 5. `/gitflow:finish` - Verifier scan parallele
181
-
182
- ---
183
-
184
- ## Metriques de Suivi
185
-
186
- Pour mesurer les performances:
187
-
188
- ```bash
189
- # Temps d'execution
190
- time /gitflow:status
191
-
192
- # Avec mode fast
193
- time /gitflow:status --fast
194
-
195
- # Creation directe
196
- time /gitflow:start feature test-perf --no-worktree
197
- ```
198
-
199
- ---
200
-
201
- ## Ameliorations Futures Possibles
202
-
203
- 1. **Cache persistant** - Stocker tags/config entre sessions
204
- 2. **Pre-fetch** - Fetch en background au demarrage
205
- 3. **Incremental status** - Ne collecter que les changements
206
- 4. **Batch PR checks** - API GitHub/Azure en batch