@atlashub/smartstack-cli 1.11.0 → 1.13.1

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.
Files changed (74) hide show
  1. package/.documentation/agents.html +7 -2
  2. package/.documentation/apex.html +7 -2
  3. package/.documentation/business-analyse.html +7 -2
  4. package/.documentation/cli-commands.html +871 -0
  5. package/.documentation/commands.html +7 -2
  6. package/.documentation/efcore.html +7 -2
  7. package/.documentation/gitflow.html +7 -2
  8. package/.documentation/hooks.html +7 -2
  9. package/.documentation/index.html +7 -2
  10. package/.documentation/init.html +7 -2
  11. package/.documentation/installation.html +7 -2
  12. package/.documentation/ralph-loop.html +7 -2
  13. package/.documentation/test-web.html +7 -2
  14. package/dist/index.js +1932 -336
  15. package/dist/index.js.map +1 -1
  16. package/package.json +8 -2
  17. package/templates/agents/efcore/squash.md +67 -31
  18. package/templates/agents/gitflow/finish.md +68 -56
  19. package/templates/commands/business-analyse/0-orchestrate.md +72 -556
  20. package/templates/commands/business-analyse/1-init.md +23 -193
  21. package/templates/commands/business-analyse/2-discover.md +85 -462
  22. package/templates/commands/business-analyse/3-analyse.md +40 -342
  23. package/templates/commands/business-analyse/4-specify.md +72 -537
  24. package/templates/commands/business-analyse/5-validate.md +43 -237
  25. package/templates/commands/business-analyse/6-handoff.md +93 -682
  26. package/templates/commands/business-analyse/7-doc-html.md +45 -544
  27. package/templates/commands/business-analyse/_shared.md +176 -0
  28. package/templates/commands/business-analyse/bug.md +50 -257
  29. package/templates/commands/business-analyse/change-request.md +59 -283
  30. package/templates/commands/business-analyse/hotfix.md +36 -120
  31. package/templates/commands/business-analyse.md +55 -574
  32. package/templates/commands/efcore/_shared.md +206 -0
  33. package/templates/commands/efcore/conflicts.md +39 -201
  34. package/templates/commands/efcore/db-deploy.md +28 -237
  35. package/templates/commands/efcore/db-reset.md +41 -390
  36. package/templates/commands/efcore/db-seed.md +44 -323
  37. package/templates/commands/efcore/db-status.md +31 -210
  38. package/templates/commands/efcore/migration.md +45 -368
  39. package/templates/commands/efcore/rebase-snapshot.md +38 -241
  40. package/templates/commands/efcore/scan.md +35 -204
  41. package/templates/commands/efcore/squash.md +158 -251
  42. package/templates/commands/efcore.md +49 -177
  43. package/templates/commands/gitflow/1-init.md +94 -1318
  44. package/templates/commands/gitflow/10-start.md +86 -990
  45. package/templates/commands/gitflow/11-finish.md +264 -454
  46. package/templates/commands/gitflow/12-cleanup.md +40 -213
  47. package/templates/commands/gitflow/2-status.md +51 -386
  48. package/templates/commands/gitflow/3-commit.md +108 -801
  49. package/templates/commands/gitflow/4-plan.md +42 -13
  50. package/templates/commands/gitflow/5-exec.md +60 -5
  51. package/templates/commands/gitflow/6-abort.md +54 -277
  52. package/templates/commands/gitflow/7-pull-request.md +74 -717
  53. package/templates/commands/gitflow/8-review.md +51 -178
  54. package/templates/commands/gitflow/9-merge.md +74 -404
  55. package/templates/commands/gitflow/_shared.md +196 -0
  56. package/templates/commands/quickstart.md +154 -0
  57. package/templates/commands/ralph-loop/ralph-loop.md +104 -2
  58. package/templates/hooks/hooks.json +13 -0
  59. package/templates/hooks/ralph-mcp-logger.sh +46 -0
  60. package/templates/hooks/ralph-session-end.sh +69 -0
  61. package/templates/ralph/README.md +91 -0
  62. package/templates/ralph/ralph.config.yaml +113 -0
  63. package/templates/scripts/setup-ralph-loop.sh +173 -0
  64. package/templates/skills/_shared.md +117 -0
  65. package/templates/skills/ai-prompt/SKILL.md +87 -654
  66. package/templates/skills/application/SKILL.md +76 -499
  67. package/templates/skills/controller/SKILL.md +38 -165
  68. package/templates/skills/documentation/SKILL.md +2 -1
  69. package/templates/skills/feature-full/SKILL.md +107 -732
  70. package/templates/skills/notification/SKILL.md +85 -474
  71. package/templates/skills/ui-components/SKILL.md +62 -762
  72. package/templates/skills/workflow/SKILL.md +85 -489
  73. package/templates/commands/gitflow/rescue.md +0 -867
  74. package/templates/skills/business-analyse/SKILL.md +0 -191
@@ -6,451 +6,112 @@ model: sonnet
6
6
 
7
7
  # EF Core Database Reset
8
8
 
9
- Drops and recreates the database, then applies all migrations using EF Core CLI only.
10
-
11
- **WARNING: This command DELETES all data!**
12
-
13
- > **CLAUDE INSTRUCTION:** The `AskUserQuestion({...})` blocks are instructions to use the `AskUserQuestion` tool in an **interactive** manner. You MUST execute the tool with these parameters to get the user's response BEFORE continuing.
9
+ > **Ref:** [_shared.md](_shared.md)
10
+ > **WARNING:** SUPPRIME TOUTES LES DONNÉES!
14
11
 
15
12
  ---
16
13
 
17
- ## RÈGLES DE CONFORMITÉ (OBLIGATOIRE)
14
+ ## Conformité
18
15
 
19
- > **INTERDIT - Violations CLAUDE.md:**
20
- > - ❌ Utilisation de `sqlcmd` avec SQL brut
21
- > - Scripts SQL (.sql files) dans le repository
22
- > - Commandes SQL directes pour backup/restore
23
- >
24
- > **OBLIGATOIRE - Méthodes autorisées:**
25
- > - ✅ `dotnet ef database drop` pour supprimer
26
- > - ✅ `dotnet ef database update` pour recréer
27
- > - ✅ Backup via outils externes (SQL Server Management Studio, Azure)
28
- >
29
- > **Contact support:** support@atlshub.ch
16
+ | INTERDIT | OBLIGATOIRE |
17
+ |-------------|----------------|
18
+ | `sqlcmd` avec SQL brut | `dotnet ef database drop` |
19
+ | Scripts .sql dans repo | `dotnet ef database update` |
20
+ | Backup via scripts | Backup via SSMS/Azure |
30
21
 
31
22
  ---
32
23
 
33
- ## STEP 0: Verification environnement et connexion (CRITIQUE)
34
-
35
- > **Include:** `_env-check.md` - TOUTES les etapes car commande destructive
36
-
37
- ### 0.1 Detecter les fichiers appsettings
38
-
39
- ```bash
40
- # Scanner les fichiers appsettings
41
- API_DIR=$(find . -type d -name "*.Api" | head -1)
42
- [ -z "$API_DIR" ] && API_DIR="src/SmartStack.Api"
43
-
44
- echo "FICHIERS APPSETTINGS DISPONIBLES:"
45
- find "$API_DIR" -maxdepth 1 -name "appsettings*.json" 2>/dev/null | while read f; do
46
- echo " - $(basename $f)"
47
- done
48
- ```
49
-
50
- ### 0.2 Selectionner l'environnement
24
+ ## STEP 0: Vérification Environnement
51
25
 
52
26
  ```bash
53
- # Priorite: --env flag > appsettings.Local.json > erreur
54
- ENV_FLAG="${1#--env=}"
55
-
56
- if [ -n "$ENV_FLAG" ] && [ "$ENV_FLAG" != "$1" ]; then
57
- SELECTED_ENV="appsettings.${ENV_FLAG}.json"
58
- elif [ -f "$API_DIR/appsettings.Local.json" ]; then
59
- SELECTED_ENV="appsettings.Local.json"
60
- else
61
- echo "ERROR: Aucun fichier appsettings trouve"
62
- echo " Creez appsettings.Local.json ou utilisez --env {Environment}"
63
- exit 1
64
- fi
65
-
66
- echo ""
67
- echo "ENVIRONNEMENT SELECTIONNE: $SELECTED_ENV"
27
+ detect_environment
28
+ block_production # BLOQUANT si Production
68
29
  ```
69
30
 
70
- ### 0.3 Extraire et afficher la connexion
71
-
72
- ```bash
73
- # Extraire connection string
74
- CONNECTION_STRING=$(powershell -Command "
75
- \$json = Get-Content '$API_DIR/$SELECTED_ENV' | ConvertFrom-Json
76
- \$json.ConnectionStrings.DefaultConnection
77
- ")
78
-
79
- DATABASE_NAME=$(echo "$CONNECTION_STRING" | grep -oP 'Database=\K[^;]+')
80
- SERVER_NAME=$(echo "$CONNECTION_STRING" | grep -oP 'Server=\K[^;]+')
81
- CONNECTION_MASKED=$(echo "$CONNECTION_STRING" | sed 's/Password=[^;]*/Password=****/g')
82
- ```
83
-
84
- ### 0.4 Afficher le WARNING avec details de la base
85
-
86
- ```
87
- ================================================================================
88
- EF CORE - DATABASE RESET (OPERATION DESTRUCTIVE)
89
- ================================================================================
90
-
91
- ENVIRONNEMENT: {SELECTED_ENV}
92
-
93
- BASE DE DONNEES QUI SERA SUPPRIMEE:
94
- Server: {SERVER_NAME}
95
- Database: {DATABASE_NAME}
96
- String: {CONNECTION_MASKED}
97
-
98
- ================================================================================
99
- ```
100
-
101
- ### 0.5 Protection Production (BLOQUANT)
102
-
103
- ```bash
104
- # Bloquer si Production detecte
105
- if [[ "$SELECTED_ENV" == *"Production"* ]]; then
106
- echo "================================================================================
107
- BLOQUE - ENVIRONNEMENT PRODUCTION
108
- ================================================================================
109
-
110
- ERREUR: Reset interdit en environnement Production
111
-
112
- Cette commande est bloquee pour proteger les donnees de production.
113
-
114
- OPTIONS:
115
- 1. Utilisez appsettings.Local.json (defaut, recommande)
116
- 2. Utilisez --env Development ou --env Staging
117
-
118
- Contact: support@atlshub.ch
119
-
120
- ================================================================================"
121
- exit 1
122
- fi
123
- ```
31
+ Afficher: base qui sera supprimée (SERVER, DATABASE).
124
32
 
125
33
  ---
126
34
 
127
- ## STEP 1: Confirmation obligatoire (avec nom de la base)
128
-
129
- > **CRITIQUE:** L'utilisateur doit voir exactement quelle base sera supprimee.
35
+ ## STEP 1: Confirmation
130
36
 
131
37
  ```javascript
132
38
  AskUserQuestion({
133
39
  questions: [{
134
- question: "DANGER: Supprimer DEFINITIVEMENT la base '" + DATABASE_NAME + "' sur " + SERVER_NAME + "? TOUTES LES DONNEES SERONT PERDUES!",
40
+ question: "DANGER: Supprimer DÉFINITIVEMENT '" + DATABASE_NAME + "'? TOUTES LES DONNÉES SERONT PERDUES!",
135
41
  header: "Reset DB",
136
42
  options: [
137
- { label: "Oui, supprimer " + DATABASE_NAME, description: "Drop + Recreate (DATA LOSS IRREVERSIBLE)" },
138
- { label: "Non, annuler", description: "Conserver la base actuelle" }
43
+ { label: "Oui, supprimer " + DATABASE_NAME, description: "Drop + Recreate (IRRÉVERSIBLE)" },
44
+ { label: "Non, annuler", description: "Conserver la base" }
139
45
  ],
140
46
  multiSelect: false
141
47
  }]
142
48
  })
143
49
  ```
144
50
 
145
- **If No → Stop immediately**
146
-
147
- ---
148
-
149
- ## STEP 2: Detecter les projets EF Core
150
-
151
- ```bash
152
- # Detect EF Core projects
153
- STARTUP_PROJECT=$(find . -name "*.Api.csproj" -o -name "*Web.csproj" | head -1)
154
- INFRA_PROJECT=$(find . -name "*Infrastructure.csproj" | head -1)
155
-
156
- if [ -z "$INFRA_PROJECT" ]; then
157
- INFRA_PROJECT=$(find . -name "*.csproj" -exec grep -l "Microsoft.EntityFrameworkCore" {} \; | head -1)
158
- fi
159
-
160
- echo "Startup project: $STARTUP_PROJECT"
161
- echo "Infrastructure project: $INFRA_PROJECT"
162
- ```
163
-
164
51
  ---
165
52
 
166
- ## STEP 3: Backup recommendation
53
+ ## STEP 2: Backup (optionnel)
167
54
 
168
55
  ```javascript
169
56
  AskUserQuestion({
170
57
  questions: [{
171
- question: "Do you need to backup data before deletion?",
58
+ question: "Backup nécessaire avant suppression?",
172
59
  header: "Backup",
173
60
  options: [
174
- { label: "No backup needed", description: "Development data only - proceed" },
175
- { label: "Manual backup first", description: "I'll backup via SSMS/Azure Portal" }
176
- ],
177
- multiSelect: false
178
- }]
179
- })
180
- ```
181
-
182
- **If manual backup:**
183
-
184
- ```
185
- ================================================================================
186
- BACKUP INSTRUCTIONS
187
- ================================================================================
188
-
189
- Pour sauvegarder votre base de données AVANT le reset:
190
-
191
- OPTION 1 - SQL Server Management Studio (SSMS):
192
- 1. Connectez-vous à votre serveur
193
- 2. Clic droit sur la DB → Tasks → Back Up...
194
- 3. Sélectionnez destination et lancez
195
-
196
- OPTION 2 - Azure Portal (si Azure SQL):
197
- 1. Azure Portal → Votre DB → Export
198
- 2. Configurez le storage account
199
- 3. Lancez l'export
200
-
201
- OPTION 3 - Azure Data Studio:
202
- 1. Connectez-vous → Clic droit DB → Backup
203
-
204
- Une fois le backup effectué, relancez /efcore:db-reset
205
-
206
- ================================================================================
207
- ```
208
-
209
- **Stop and wait for user to complete backup manually**
210
-
211
- ---
212
-
213
- ## STEP 4: Check migration state BEFORE drop
214
-
215
- ```bash
216
- echo "Checking migration state..."
217
-
218
- # List migrations in codebase
219
- CODE_MIGRATIONS=$(dotnet ef migrations list \
220
- --project "$INFRA_PROJECT" \
221
- --startup-project "$STARTUP_PROJECT" \
222
- --no-build 2>/dev/null | grep -E "^[0-9]{14}_" | wc -l)
223
-
224
- echo " Migrations in codebase: $CODE_MIGRATIONS"
225
-
226
- # Try to get applied migrations from database (may fail if DB doesn't exist)
227
- APPLIED_MIGRATIONS=$(dotnet ef migrations list \
228
- --project "$INFRA_PROJECT" \
229
- --startup-project "$STARTUP_PROJECT" \
230
- --no-build 2>/dev/null | grep -E "^\s*[0-9]{14}_.*\(Applied\)" | wc -l)
231
-
232
- echo " Migrations applied in DB: $APPLIED_MIGRATIONS"
233
-
234
- # List migration names for display
235
- echo ""
236
- echo "Migrations in codebase:"
237
- dotnet ef migrations list \
238
- --project "$INFRA_PROJECT" \
239
- --startup-project "$STARTUP_PROJECT" \
240
- --no-build 2>/dev/null | grep -E "^[0-9]{14}_" | head -20
241
- ```
242
-
243
- ---
244
-
245
- ## STEP 5: Confirm migration reset strategy
246
-
247
- > **IMPORTANT:** If migrations were squashed (fewer migrations in code than previously applied),
248
- > applying all migrations will create a fresh database with the NEW migration history.
249
-
250
- ```javascript
251
- AskUserQuestion({
252
- questions: [{
253
- question: "How should we handle migrations after database reset?",
254
- header: "Migrations",
255
- options: [
256
- { label: "Apply current migrations", description: "Use migrations currently in codebase (recommended after squash)" },
257
- { label: "Cancel reset", description: "Stop and review migration state first" }
61
+ { label: "Non", description: "Données dev uniquement - continuer" },
62
+ { label: "Backup manuel", description: "Via SSMS/Azure Portal" }
258
63
  ],
259
64
  multiSelect: false
260
65
  }]
261
66
  })
262
67
  ```
263
68
 
264
- **If "Cancel reset" Stop immediately and suggest:**
265
-
266
- ```
267
- ================================================================================
268
- RESET CANCELLED - REVIEW MIGRATIONS
269
- ================================================================================
270
-
271
- Pour vérifier l'état des migrations:
272
-
273
- /efcore:db-status → Voir les migrations appliquées vs disponibles
274
- /efcore:scan → Scanner les migrations sur toutes les branches
275
-
276
- Si des migrations ont été squashées:
277
- - Les anciennes migrations n'existent plus dans le code
278
- - Le reset appliquera uniquement les nouvelles migrations
279
- - C'est le comportement ATTENDU après un squash
280
-
281
- Si vous voulez restaurer d'anciennes migrations:
282
- - Vérifiez l'historique git: git log --oneline -- "**/Migrations/"
283
- - Restaurez les fichiers: git checkout <commit> -- path/to/Migrations/
284
-
285
- ================================================================================
286
- ```
69
+ Si backup manuel: afficher instructions SSMS/Azure, stopper.
287
70
 
288
71
  ---
289
72
 
290
- ## STEP 6: Drop database
73
+ ## STEP 3: Drop Database
291
74
 
292
75
  ```bash
293
- echo "Dropping database..."
294
-
295
- # Use EF Core CLI only (NO sqlcmd)
296
- dotnet ef database drop \
297
- --project "$INFRA_PROJECT" \
298
- --startup-project "$STARTUP_PROJECT" \
299
- --force
300
-
301
- if [ $? -eq 0 ]; then
302
- echo " Database dropped successfully"
303
- else
304
- echo " WARNING: Drop command returned error (database may not exist)"
305
- fi
76
+ dotnet ef database drop --project "$INFRA_PROJECT" --startup-project "$STARTUP_PROJECT" --force
306
77
  ```
307
78
 
308
79
  ---
309
80
 
310
- ## STEP 7: Recreate and apply migrations
81
+ ## STEP 4: Recreate + Apply
311
82
 
312
83
  ```bash
313
- echo "Applying all migrations..."
314
-
315
- # Apply all migrations (creates database if missing)
316
- dotnet ef database update \
317
- --project "$INFRA_PROJECT" \
318
- --startup-project "$STARTUP_PROJECT" \
319
- --verbose
320
-
321
- if [ $? -ne 0 ]; then
322
- echo "ERROR: Failed to apply migrations"
323
- exit 1
324
- fi
325
-
326
- echo " Database recreated with all migrations"
84
+ dotnet ef database update --project "$INFRA_PROJECT" --startup-project "$STARTUP_PROJECT" --verbose
327
85
  ```
328
86
 
329
87
  ---
330
88
 
331
- ## STEP 8: Optional seed
89
+ ## STEP 5: Seed (optionnel)
332
90
 
333
91
  ```javascript
334
92
  AskUserQuestion({
335
93
  questions: [{
336
- question: "Populate database with test data (via HasData)?",
94
+ question: "Peupler avec données test (HasData)?",
337
95
  header: "Seed",
338
96
  options: [
339
- { label: "Yes (recommended)", description: "Apply HasData seed from migrations" },
340
- { label: "No", description: "Empty database" }
97
+ { label: "Oui (recommandé)", description: "Appliquer HasData" },
98
+ { label: "Non", description: "Base vide" }
341
99
  ],
342
100
  multiSelect: false
343
101
  }]
344
102
  })
345
103
  ```
346
104
 
347
- **If yes:**
348
-
349
- ```bash
350
- # HasData is already applied via migrations
351
- # If additional seeding needed, use Seeder class
352
- if grep -rq "IDataSeeder\|class.*Seeder" . --include="*.cs" 2>/dev/null; then
353
- echo "Executing DataSeeder..."
354
- dotnet run --project "$STARTUP_PROJECT" -- --seed
355
- else
356
- echo " HasData() seed already applied via migrations"
357
- fi
358
- ```
359
-
360
- ---
361
-
362
- ## STEP 9: Verification
363
-
364
- ```bash
365
- echo "Verifying database..."
366
-
367
- # Check migrations status
368
- dotnet ef migrations list \
369
- --project "$INFRA_PROJECT" \
370
- --startup-project "$STARTUP_PROJECT" \
371
- --no-build 2>/dev/null | tail -10
372
-
373
- echo ""
374
- echo " Use /efcore:db-status for detailed status"
375
- ```
376
-
377
105
  ---
378
106
 
379
- ## STEP 10: Resume
380
-
381
- **Afficher un resume apres le reset:**
107
+ ## Résumé
382
108
 
383
109
  ```
384
- ===============================================================================
385
- BASE DE DONNÉES RÉINITIALISÉE
386
- ===============================================================================
387
-
388
- DÉTAILS RESET
389
- -------------------------------------------------------------------------------
390
- • Environnement: {SELECTED_ENV}
391
- • Serveur: {SERVER_NAME}
392
- • Base: {DATABASE_NAME}
393
-
394
- OPÉRATIONS EFFECTUÉES
395
- -------------------------------------------------------------------------------
396
- ✓ Ancienne base supprimée (dotnet ef database drop)
397
- ✓ Nouvelle base créée (dotnet ef database update)
398
- ✓ {N} migration(s) appliquée(s)
399
- {seed_applied ? "✓ Données initiales insérées (HasData)" : "○ Base vide (pas de seed)"}
400
-
401
- CONFORMITÉ
402
- -------------------------------------------------------------------------------
403
- ✓ EF Core CLI uniquement (pas de SQL brut)
404
- ✓ Conforme aux règles CLAUDE.md
405
-
406
- ===============================================================================
407
- PROCHAINES ÉTAPES
408
- ===============================================================================
409
-
410
- 1. Vérifier le statut de la base:
411
- /efcore:db-status
412
-
413
- 2. Ajouter des données de test (si nécessaire):
414
- /efcore:db-seed
415
-
416
- 3. Lancer l'application:
417
- dotnet run --project {STARTUP_PROJECT}
418
-
419
- ===============================================================================
420
- ```
421
-
422
- **Si le reset a échoué:**
423
-
424
- ```
425
- ===============================================================================
426
- ÉCHEC DU RESET
427
- ===============================================================================
428
-
429
- ERREUR
430
- -------------------------------------------------------------------------------
431
- ✗ {error_message}
432
-
433
- DÉTAILS
434
- -------------------------------------------------------------------------------
435
- • Environnement: {SELECTED_ENV}
436
- • Serveur: {SERVER_NAME}
437
- • Base: {DATABASE_NAME}
438
-
439
- ===============================================================================
440
- ACTIONS SUGGÉRÉES
441
- ===============================================================================
442
-
443
- 1. Vérifier que SQL Server est démarré
444
-
445
- 2. Vérifier les permissions sur la base
446
-
447
- 3. Consulter les logs détaillés:
448
- dotnet ef database update --verbose
449
-
450
- 4. Contacter le support si le problème persiste:
451
- support@atlshub.ch
452
-
453
- ===============================================================================
110
+ RESET - {DATABASE_NAME}
111
+ ├── Environnement: {SELECTED_ENV}
112
+ ├── Opérations: ✓ Drop, ✓ Create, ✓ {N} migrations
113
+ ├── Conformité: ✓ EF Core CLI uniquement
114
+ └── Prochains: /efcore:db-status, /efcore:db-seed
454
115
  ```
455
116
 
456
117
  ---
@@ -459,23 +120,13 @@ DÉTAILS
459
120
 
460
121
  | Option | Description |
461
122
  |--------|-------------|
462
- | `--env {name}` | Utiliser appsettings.{name}.json (ex: --env Development) |
123
+ | `--env {name}` | Utiliser appsettings.{name}.json |
463
124
 
464
- ## Security
125
+ ## Protections
465
126
 
466
127
  | Protection | Description |
467
128
  |------------|-------------|
468
- | Env Display | Affiche la base de donnees AVANT confirmation |
469
- | Confirmation | Demande explicite avec le NOM de la base |
470
- | Production Block | Bloque si appsettings.Production.json detecte |
471
- | Migration Check | Displays migration state and asks before applying |
472
- | EF Core Only | No raw SQL commands - uses dotnet ef CLI |
473
- | Manual Backup | User directed to SSMS/Azure for backups |
474
-
475
- ---
476
-
477
- ## Support
478
-
479
- > **Questions ou problèmes avec le reset EF Core?**
480
- >
481
- > 📧 **support@atlshub.ch**
129
+ | Env Display | Affiche base AVANT confirmation |
130
+ | Confirmation | Demande explicite avec NOM |
131
+ | Production Block | Bloque si Production détecté |
132
+ | EF Core Only | Pas de SQL brut |