@atlashub/smartstack-cli 1.6.1 → 1.8.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.
@@ -163,11 +163,112 @@ mkdir -p .claude/gitflow/{plans,logs,migrations,backup,cache}
163
163
  └── {hotfix-name}/
164
164
  ```
165
165
 
166
+ ### ÉTAPE 7.5 : Détection et Configuration Azure DevOps (Optionnel)
167
+
168
+ **Détecter si Azure CLI est installé:**
169
+
170
+ ```bash
171
+ # Vérifier Azure CLI
172
+ AZ_CLI_INSTALLED=$(az --version 2>/dev/null | head -1)
173
+
174
+ # Vérifier l'extension azure-devops
175
+ AZ_DEVOPS_EXT=$(az extension show --name azure-devops 2>/dev/null | grep -o '"name": "azure-devops"')
176
+ ```
177
+
178
+ **Si Azure CLI détecté, proposer la configuration:**
179
+
180
+ ```javascript
181
+ if (AZ_CLI_INSTALLED) {
182
+ AskUserQuestion({
183
+ questions: [{
184
+ question: "Azure CLI détecté. Voulez-vous configurer l'intégration Azure DevOps ?",
185
+ header: "Azure DevOps",
186
+ options: [
187
+ { label: "Oui", description: "Configurer Azure DevOps pour PR, work items et boards (Recommandé si vous utilisez Azure DevOps)" },
188
+ { label: "Non", description: "Ignorer pour l'instant (peut être configuré plus tard)" },
189
+ { label: "Installer extension", description: "L'extension azure-devops n'est pas installée" }
190
+ ],
191
+ multiSelect: false
192
+ }]
193
+ })
194
+ }
195
+ ```
196
+
197
+ **Si "Oui" sélectionné, demander les informations:**
198
+
199
+ ```javascript
200
+ // Détecter l'organisation depuis le remote URL si Azure DevOps
201
+ REMOTE_URL=$(git remote get-url origin 2>/dev/null)
202
+ // https://dev.azure.com/myorg/myproject/_git/myrepo → org=myorg, project=myproject
203
+
204
+ AskUserQuestion({
205
+ questions: [
206
+ {
207
+ question: "Quelle est votre organisation Azure DevOps ?",
208
+ header: "Organisation",
209
+ options: [
210
+ { label: "${DETECTED_ORG}", description: "Détecté depuis l'URL remote (Recommandé)" },
211
+ { label: "Autre", description: "Entrer une autre organisation" }
212
+ ],
213
+ multiSelect: false
214
+ },
215
+ {
216
+ question: "Quel est le nom de votre projet Azure DevOps ?",
217
+ header: "Projet",
218
+ options: [
219
+ { label: "${DETECTED_PROJECT}", description: "Détecté depuis l'URL remote (Recommandé)" },
220
+ { label: "Autre", description: "Entrer un autre projet" }
221
+ ],
222
+ multiSelect: false
223
+ }
224
+ ]
225
+ })
226
+ ```
227
+
228
+ **Configurer Azure CLI defaults:**
229
+
230
+ ```bash
231
+ # Configurer les defaults Azure DevOps
232
+ az devops configure --defaults organization="$AZ_ORG" project="$AZ_PROJECT"
233
+
234
+ # Vérifier la connexion
235
+ az devops project show --project "$AZ_PROJECT" > /dev/null 2>&1 || {
236
+ echo "⚠️ Impossible de se connecter à Azure DevOps."
237
+ echo " Exécutez 'az login' pour vous authentifier."
238
+ }
239
+ ```
240
+
241
+ **Si Azure CLI non installé, afficher les instructions:**
242
+
243
+ ```
244
+ ┌──────────────────────────────────────────────────────────────────────────────┐
245
+ │ ℹ️ AZURE DEVOPS CLI NON DÉTECTÉ │
246
+ ├──────────────────────────────────────────────────────────────────────────────┤
247
+ │ Pour activer l'intégration Azure DevOps (PR, work items, boards): │
248
+ │ │
249
+ │ 1. Installer Azure CLI: │
250
+ │ winget install Microsoft.AzureCLI │
251
+ │ │
252
+ │ 2. Installer l'extension: │
253
+ │ az extension add --name azure-devops │
254
+ │ │
255
+ │ 3. Se connecter: │
256
+ │ az login │
257
+ │ │
258
+ │ 4. Reconfigurer GitFlow: │
259
+ │ /gitflow:1-init --migrate │
260
+ │ │
261
+ │ Documentation: https://learn.microsoft.com/cli/azure/boards │
262
+ └──────────────────────────────────────────────────────────────────────────────┘
263
+ ```
264
+
265
+ ---
266
+
166
267
  ### ÉTAPE 8 : Configuration
167
268
 
168
269
  ```json
169
270
  {
170
- "version": "1.3.0",
271
+ "version": "1.4.0",
171
272
  "initMode": "clone",
172
273
  "repository": {
173
274
  "name": "{repo_name}",
@@ -769,7 +870,7 @@ parent/
769
870
  #### Organized Mode (v1.3)
770
871
  ```json
771
872
  {
772
- "version": "1.3.0",
873
+ "version": "1.4.0",
773
874
  "initMode": "organized",
774
875
  "repository": { "name": "", "defaultBranch": "main", "remoteUrl": "" },
775
876
  "versioning": { "strategy": "semver", "current": "0.1.0", "source": "auto", "sourceFile": "", "tagPrefix": "v", "autoIncrement": { "feature": "minor", "hotfix": "patch", "release": "manual" } },
@@ -799,6 +900,19 @@ parent/
799
900
  "namePrefix": "",
800
901
  "autoCreateLocalConfig": true
801
902
  },
903
+ "azureDevOps": {
904
+ "enabled": false,
905
+ "organization": "",
906
+ "project": "",
907
+ "defaultReviewers": [],
908
+ "workItemTypes": {
909
+ "feature": "User Story",
910
+ "hotfix": "Bug",
911
+ "release": "Epic"
912
+ },
913
+ "linkWorkItems": true,
914
+ "autoTransitionWorkItems": true
915
+ },
802
916
  "efcore": {
803
917
  "enabled": false, "contexts": [], "generateScript": false, "scriptOutputPath": "",
804
918
  "crossBranch": { "enabled": true, "scanOnMigrationCreate": true, "blockOnConflict": true, "cacheExpiry": "1h" }
@@ -807,6 +921,49 @@ parent/
807
921
  }
808
922
  ```
809
923
 
924
+ ### Azure DevOps Configuration (NEW in v1.4)
925
+
926
+ La section `azureDevOps` configure l'integration avec Azure DevOps CLI pour les PR, work items et boards:
927
+
928
+ | Parametre | Description | Defaut |
929
+ |-----------|-------------|--------|
930
+ | `enabled` | Activer l'integration Azure DevOps | `false` |
931
+ | `organization` | URL de l'organisation (ex: `https://dev.azure.com/myorg`) | - |
932
+ | `project` | Nom du projet Azure DevOps | - |
933
+ | `defaultReviewers` | Liste des reviewers par defaut pour les PR | `[]` |
934
+ | `workItemTypes.feature` | Type de work item pour les features | `User Story` |
935
+ | `workItemTypes.hotfix` | Type de work item pour les hotfixes | `Bug` |
936
+ | `workItemTypes.release` | Type de work item pour les releases | `Epic` |
937
+ | `linkWorkItems` | Lier automatiquement les PR aux work items | `true` |
938
+ | `autoTransitionWorkItems` | Transitionner automatiquement les work items au merge | `true` |
939
+
940
+ **Commandes disponibles avec Azure DevOps:**
941
+
942
+ | Action | Commande |
943
+ |--------|----------|
944
+ | Creer PR avec work item | `az repos pr create --work-items 123` |
945
+ | Completer PR (merge) | `az repos pr update --id 42 --status completed` |
946
+ | Creer work item | `az boards work-item create --type "User Story" --title "..."` |
947
+ | Lier commit a work item | Message commit avec `#123` |
948
+
949
+ **Installation Azure CLI:**
950
+
951
+ ```bash
952
+ # 1. Installer Azure CLI
953
+ winget install Microsoft.AzureCLI
954
+
955
+ # 2. Ajouter l'extension Azure DevOps (auto-install au premier usage)
956
+ az extension add --name azure-devops
957
+
958
+ # 3. Se connecter
959
+ az login
960
+
961
+ # 4. Configurer les defaults (fait automatiquement par /gitflow:1-init)
962
+ az devops configure --defaults organization=https://dev.azure.com/VOTRE_ORG project=VOTRE_PROJET
963
+ ```
964
+
965
+ ---
966
+
810
967
  ### Database Configuration (NEW in v1.3)
811
968
 
812
969
  La section `database` configure la creation automatique de `appsettings.Local.json` lors du `/gitflow:10-start`:
@@ -839,7 +996,7 @@ La section `database` configure la creation automatique de `appsettings.Local.js
839
996
  #### Adjacent/Legacy Mode (v1.2 compatible)
840
997
  ```json
841
998
  {
842
- "version": "1.3.0",
999
+ "version": "1.4.0",
843
1000
  "initMode": "adjacent",
844
1001
  "repository": { "name": "", "defaultBranch": "main", "remoteUrl": "" },
845
1002
  "versioning": { "strategy": "semver", "current": "0.1.0", "source": "auto", "sourceFile": "", "tagPrefix": "v", "autoIncrement": { "feature": "minor", "hotfix": "patch", "release": "manual" } },
@@ -852,6 +1009,15 @@ La section `database` configure la creation automatique de `appsettings.Local.js
852
1009
  "structure": { "features": "features/", "releases": "releases/", "hotfixes": "hotfixes/" },
853
1010
  "cleanupOnFinish": true
854
1011
  },
1012
+ "azureDevOps": {
1013
+ "enabled": false,
1014
+ "organization": "",
1015
+ "project": "",
1016
+ "defaultReviewers": [],
1017
+ "workItemTypes": { "feature": "User Story", "hotfix": "Bug", "release": "Epic" },
1018
+ "linkWorkItems": true,
1019
+ "autoTransitionWorkItems": true
1020
+ },
855
1021
  "efcore": {
856
1022
  "enabled": false, "contexts": [], "generateScript": false, "scriptOutputPath": "",
857
1023
  "crossBranch": { "enabled": true, "scanOnMigrationCreate": true, "blockOnConflict": true, "cacheExpiry": "1h" }
@@ -929,16 +1095,61 @@ User runs: /gitflow:1-init
929
1095
  | `/gitflow:1-init` | Generate plan (asks if structure exists, asks for structure style) |
930
1096
  | `/gitflow:1-init --exec` | Execute existing plan |
931
1097
  | `/gitflow:1-init --yes` | Generate + execute without intermediate file |
932
- | `/gitflow:1-init --migrate` | Force migration of existing structure to v1.3.0 |
1098
+ | `/gitflow:1-init --migrate` | Force migration of existing structure to v1.4.0 |
933
1099
  | `/gitflow:1-init --reset` | Force reset (backup + recreate from scratch) |
934
1100
  | `/gitflow:1-init --organized` | Force organized structure (01-Main, 02-Develop) |
935
1101
  | `/gitflow:1-init --adjacent` | Force adjacent/legacy structure (../worktrees) |
936
1102
  | `/gitflow:1-init --no-worktrees` | Generate plan without worktrees |
1103
+ | `/gitflow:1-init --with-azure-devops` | Configure Azure DevOps integration during init |
1104
+ | `/gitflow:1-init --skip-azure-devops` | Skip Azure DevOps detection/configuration |
937
1105
 
938
1106
  ---
939
1107
 
940
1108
  ## Migration Details
941
1109
 
1110
+ ### v1.3 → v1.4 (Azure DevOps Integration)
1111
+
1112
+ When migrating to v1.4, these changes are available:
1113
+
1114
+ #### New Config Fields
1115
+
1116
+ ```json
1117
+ {
1118
+ "version": "1.4.0",
1119
+ "azureDevOps": {
1120
+ "enabled": false, // NEW - Enable Azure DevOps CLI integration
1121
+ "organization": "", // NEW - Azure DevOps organization URL
1122
+ "project": "", // NEW - Azure DevOps project name
1123
+ "defaultReviewers": [], // NEW - Default PR reviewers
1124
+ "workItemTypes": { // NEW - Work item type mapping
1125
+ "feature": "User Story",
1126
+ "hotfix": "Bug",
1127
+ "release": "Epic"
1128
+ },
1129
+ "linkWorkItems": true, // NEW - Auto-link PR to work items
1130
+ "autoTransitionWorkItems": true // NEW - Auto-transition work items on merge
1131
+ }
1132
+ }
1133
+ ```
1134
+
1135
+ #### Migration Options
1136
+
1137
+ ```javascript
1138
+ AskUserQuestion({
1139
+ questions: [{
1140
+ question: "v1.3 config detected. Azure DevOps integration is now available. Configure it?",
1141
+ header: "Azure DevOps",
1142
+ options: [
1143
+ { label: "Yes, configure", description: "Set up Azure DevOps CLI integration (Recommended if using Azure DevOps)" },
1144
+ { label: "Skip for now", description: "Just update version to v1.4.0, configure later" }
1145
+ ],
1146
+ multiSelect: false
1147
+ }]
1148
+ })
1149
+ ```
1150
+
1151
+ ---
1152
+
942
1153
  ### v1.2 → v1.3 (Organized Structure)
943
1154
 
944
1155
  When migrating to v1.3, these changes are available:
@@ -947,7 +1158,7 @@ When migrating to v1.3, these changes are available:
947
1158
 
948
1159
  ```json
949
1160
  {
950
- "version": "1.3.0",
1161
+ "version": "1.4.0",
951
1162
  "initMode": "organized", // NEW - "organized" | "adjacent" | "clone" | "interactive"
952
1163
  "worktrees": {
953
1164
  "mode": "organized", // NEW - matches initMode
@@ -263,9 +263,71 @@ AskUserQuestion({
263
263
  | Check | Commande | Action si echec |
264
264
  |-------|----------|-----------------|
265
265
  | Working tree clean | `git status --porcelain` | Proposer stash ou commit |
266
- | Branche n'existe pas | `git branch --list {branch}` | Erreur avec suggestion |
266
+ | Branche n'existe pas | `git branch -a --list {branch}` | Erreur avec suggestion |
267
267
  | Base a jour | `git fetch origin` | Fetch automatique |
268
268
 
269
+ ### 5.1 Verifier que la branche SPECIFIQUE n'existe pas
270
+
271
+ **IMPORTANT:** Cette verification doit etre faite sur la branche EXACTE demandee, pas sur le nombre total de branches.
272
+
273
+ ```bash
274
+ # Construire le nom complet de la branche
275
+ BRANCH_FULL_NAME="${TYPE}/${NAME}" # ex: feature/add-user-auth
276
+
277
+ # Fetch pour avoir les branches remote a jour
278
+ git fetch origin --quiet
279
+
280
+ # Verifier si la branche existe en LOCAL
281
+ LOCAL_EXISTS=$(git branch --list "$BRANCH_FULL_NAME")
282
+
283
+ # Verifier si la branche existe en REMOTE
284
+ REMOTE_EXISTS=$(git branch -r --list "origin/$BRANCH_FULL_NAME")
285
+
286
+ # Si la branche existe deja
287
+ if [ -n "$LOCAL_EXISTS" ] || [ -n "$REMOTE_EXISTS" ]; then
288
+ echo ""
289
+ echo "ERROR: La branche '$BRANCH_FULL_NAME' existe deja!"
290
+ echo ""
291
+
292
+ if [ -n "$LOCAL_EXISTS" ]; then
293
+ echo " - Existe en LOCAL"
294
+ fi
295
+ if [ -n "$REMOTE_EXISTS" ]; then
296
+ echo " - Existe en REMOTE (origin)"
297
+ fi
298
+
299
+ echo ""
300
+ echo "Options:"
301
+ echo " 1. Choisir un autre nom"
302
+ echo " 2. Supprimer la branche existante: git branch -D $BRANCH_FULL_NAME"
303
+ echo " 3. Continuer sur la branche existante: git checkout $BRANCH_FULL_NAME"
304
+ echo ""
305
+
306
+ # Proposer a l'utilisateur
307
+ AskUserQuestion({
308
+ questions: [{
309
+ question: "La branche '$BRANCH_FULL_NAME' existe deja. Que faire ?",
310
+ header: "Conflit",
311
+ options: [
312
+ { label: "Autre nom", description: "Choisir un nom different" },
313
+ { label: "Checkout", description: "Basculer sur la branche existante" },
314
+ { label: "Supprimer", description: "Supprimer et recreer (ATTENTION: perte de donnees)" }
315
+ ],
316
+ multiSelect: false
317
+ }]
318
+ })
319
+
320
+ # Actions selon choix:
321
+ # - "Autre nom" -> Retourner a ETAPE 4 pour redemander le nom
322
+ # - "Checkout" -> git checkout $BRANCH_FULL_NAME && exit
323
+ # - "Supprimer" -> git branch -D $BRANCH_FULL_NAME && git push origin --delete $BRANCH_FULL_NAME 2>/dev/null
324
+ fi
325
+
326
+ echo "OK Branche '$BRANCH_FULL_NAME' disponible"
327
+ ```
328
+
329
+ ### 5.2 Verifier working directory
330
+
269
331
  **Si working directory dirty:**
270
332
 
271
333
  ```javascript
@@ -289,16 +351,44 @@ AskUserQuestion({
289
351
 
290
352
  ### Detecter le mode worktree
291
353
 
354
+ **IMPORTANT:** Toujours detecter la structure EXISTANTE en priorite, avant de lire la config.
355
+
292
356
  ```bash
293
- # Lire la config GitFlow
294
- CONFIG_FILE=".claude/gitflow/config.json"
295
- if [ -f "$CONFIG_FILE" ]; then
296
- WORKTREE_MODE=$(grep -o '"mode": *"[^"]*"' "$CONFIG_FILE" | head -1 | cut -d'"' -f4)
297
- # Default to adjacent if not specified
298
- WORKTREE_MODE=${WORKTREE_MODE:-adjacent}
299
- else
357
+ # ═══════════════════════════════════════════════════════════════
358
+ # ETAPE 1: Detection automatique basee sur la structure des dossiers
359
+ # ═══════════════════════════════════════════════════════════════
360
+
361
+ # Verifier si on est dans une structure "organized" (01-Main, 02-Develop, features/, etc.)
362
+ # Ces dossiers sont a la racine du projet parent (..)
363
+ if [ -d "../features" ] && [ -d "../releases" ] && [ -d "../hotfixes" ]; then
364
+ # Structure organized detectee
365
+ WORKTREE_MODE="organized"
366
+ echo "[AUTO-DETECT] Structure organized detectee (../features/, ../releases/, ../hotfixes/)"
367
+ elif [ -d "../01-Main" ] && [ -d "../02-Develop" ]; then
368
+ # Structure organized detectee via les prefixes numerotes
369
+ WORKTREE_MODE="organized"
370
+ echo "[AUTO-DETECT] Structure organized detectee (../01-Main/, ../02-Develop/)"
371
+ elif [ -d "../worktrees" ]; then
372
+ # Structure adjacent/legacy detectee
300
373
  WORKTREE_MODE="adjacent"
374
+ echo "[AUTO-DETECT] Structure adjacent detectee (../worktrees/)"
375
+ else
376
+ # ═══════════════════════════════════════════════════════════════
377
+ # ETAPE 2: Fallback sur la config GitFlow si structure non detectee
378
+ # ═══════════════════════════════════════════════════════════════
379
+ CONFIG_FILE=".claude/gitflow/config.json"
380
+ if [ -f "$CONFIG_FILE" ]; then
381
+ WORKTREE_MODE=$(grep -o '"mode": *"[^"]*"' "$CONFIG_FILE" | head -1 | cut -d'"' -f4)
382
+ WORKTREE_MODE=${WORKTREE_MODE:-adjacent}
383
+ echo "[CONFIG] Mode lu depuis config.json: $WORKTREE_MODE"
384
+ else
385
+ # Default: adjacent si rien n'est detecte
386
+ WORKTREE_MODE="adjacent"
387
+ echo "[DEFAULT] Aucune structure detectee, mode par defaut: adjacent"
388
+ fi
301
389
  fi
390
+
391
+ echo "WORKTREE_MODE=$WORKTREE_MODE"
302
392
  ```
303
393
 
304
394
  ### Mode Worktree - Organized (v1.3)
@@ -619,34 +709,114 @@ git push -u origin {branch}
619
709
 
620
710
  ## ETAPE 8: Resume et prochaines etapes
621
711
 
712
+ **Afficher un resume adapte au TYPE de branche creee:**
713
+
714
+ ### Si FEATURE:
715
+
622
716
  ```
623
717
  ================================================================================
624
- BRANCHE CREEE
718
+ FEATURE CREEE
625
719
  ================================================================================
626
720
 
627
- TYPE: {feature|release|hotfix}
628
- BRANCHE: {branch_name}
629
- BASE: {develop|main}
630
- CIBLE: {develop|main+develop}
631
- VERSION: {version} (si release)
721
+ BRANCHE: feature/{name}
722
+ BASE: develop
723
+ CIBLE: develop
724
+ WORKTREE: ../features/{name}/
725
+
726
+ ================================================================================
727
+ PROCHAINES ETAPES
728
+ ================================================================================
729
+
730
+ 1. Naviguer vers le worktree:
731
+ cd ../features/{name}
732
+ # ou dans VSCode:
733
+ code ../features/{name}
734
+
735
+ 2. Faire vos modifications et committer:
736
+ /gitflow:3-commit
737
+
738
+ 3. Creer une Pull Request (feature/{name} → develop):
739
+ /gitflow:7-pull-request feature/{name}
740
+
741
+ 4. Apres merge de la PR, nettoyer:
742
+ /gitflow:11-finish feature/{name}
743
+ Cela va:
744
+ ✓ Supprimer la branche feature/{name}
745
+ ✓ Nettoyer le worktree
746
+
747
+ ================================================================================
748
+ ```
749
+
750
+ ### Si RELEASE:
751
+
752
+ ```
753
+ ================================================================================
754
+ RELEASE CREEE
755
+ ================================================================================
632
756
 
633
- WORKTREE:
634
- - Organized mode: ../{type}s/{name}/ (ex: ../features/add-user/)
635
- - Adjacent mode: ../worktrees/{type}s/{name}/
636
- - No worktree: meme repertoire
757
+ BRANCHE: release/v{version}
758
+ BASE: develop
759
+ CIBLE: main + develop (merge back)
760
+ VERSION: v{version}
761
+ WORKTREE: ../releases/v{version}/
637
762
 
638
763
  ================================================================================
639
764
  PROCHAINES ETAPES
640
765
  ================================================================================
641
766
 
642
767
  1. Naviguer vers le worktree:
643
- - Organized: cd "../{type}s/{name}" ou code "../{type}s/{name}"
644
- - Adjacent: cd "../worktrees/{type}s/{name}"
768
+ cd ../releases/v{version}
769
+ # ou dans VSCode:
770
+ code ../releases/v{version}
771
+
772
+ 2. Creer une Pull Request (release/v{version} → main):
773
+ /gitflow:7-pull-request release/v{version}
774
+
775
+ 3. Apres merge de la PR, finaliser:
776
+ /gitflow:11-finish release/v{version}
777
+ Cela va:
778
+ ✓ Creer le tag v{version}
779
+ ✓ Merger main → develop (merge back)
780
+ ✓ Incrementer la version sur develop ({version} → {next_minor})
781
+ ✓ Nettoyer le worktree
645
782
 
646
- 2. Faire vos modifications
647
- 3. /gitflow:3-commit
648
- 4. /gitflow:7-pull-request
649
- 5. /gitflow:11-finish (apres merge PR)
783
+ ================================================================================
784
+ ```
785
+
786
+ ### Si HOTFIX:
787
+
788
+ ```
789
+ ================================================================================
790
+ HOTFIX CREE
791
+ ================================================================================
792
+
793
+ BRANCHE: hotfix/{name}
794
+ BASE: main
795
+ CIBLE: main + develop (merge back)
796
+ WORKTREE: ../hotfixes/{name}/
797
+
798
+ ================================================================================
799
+ PROCHAINES ETAPES
800
+ ================================================================================
801
+
802
+ 1. Naviguer vers le worktree:
803
+ cd ../hotfixes/{name}
804
+ # ou dans VSCode:
805
+ code ../hotfixes/{name}
806
+
807
+ 2. Faire vos corrections et committer:
808
+ /gitflow:3-commit
809
+
810
+ 3. Creer une Pull Request (hotfix/{name} → main):
811
+ /gitflow:7-pull-request hotfix/{name}
812
+
813
+ 4. Apres merge de la PR, finaliser:
814
+ /gitflow:11-finish hotfix/{name}
815
+ Cela va:
816
+ ✓ Incrementer la version PATCH ({current} → {current+patch})
817
+ ✓ Creer le tag v{new_version}
818
+ ✓ Merger main → develop (merge back)
819
+ ✓ Nettoyer le worktree
650
820
 
651
821
  ================================================================================
652
822
  ```