@atlashub/smartstack-cli 1.5.1 → 1.5.3
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/.documentation/css/styles.css +2168 -2168
- package/.documentation/js/app.js +794 -794
- package/config/default-config.json +86 -86
- package/config/settings.json +53 -53
- package/config/settings.local.example.json +16 -16
- package/dist/index.js +0 -0
- package/dist/index.js.map +1 -1
- package/package.json +88 -88
- package/templates/agents/action.md +36 -36
- package/templates/agents/efcore/conflicts.md +84 -84
- package/templates/agents/efcore/db-deploy.md +51 -51
- package/templates/agents/efcore/db-reset.md +59 -59
- package/templates/agents/efcore/db-seed.md +56 -56
- package/templates/agents/efcore/db-status.md +64 -64
- package/templates/agents/efcore/migration.md +85 -85
- package/templates/agents/efcore/rebase-snapshot.md +62 -62
- package/templates/agents/efcore/scan.md +90 -90
- package/templates/agents/efcore/squash.md +67 -67
- package/templates/agents/explore-codebase.md +65 -65
- package/templates/agents/explore-docs.md +97 -97
- package/templates/agents/fix-grammar.md +49 -49
- package/templates/agents/gitflow/abort.md +45 -45
- package/templates/agents/gitflow/cleanup.md +85 -85
- package/templates/agents/gitflow/commit.md +40 -40
- package/templates/agents/gitflow/exec.md +48 -48
- package/templates/agents/gitflow/finish.md +92 -92
- package/templates/agents/gitflow/init.md +139 -139
- package/templates/agents/gitflow/merge.md +62 -62
- package/templates/agents/gitflow/plan.md +42 -42
- package/templates/agents/gitflow/pr.md +78 -78
- package/templates/agents/gitflow/review.md +49 -49
- package/templates/agents/gitflow/start.md +61 -61
- package/templates/agents/gitflow/status.md +32 -32
- package/templates/agents/snipper.md +36 -36
- package/templates/agents/websearch.md +46 -46
- package/templates/commands/_resources/formatting-guide.md +124 -124
- package/templates/commands/ai-prompt.md +315 -315
- package/templates/commands/apex/1-analyze.md +100 -100
- package/templates/commands/apex/2-plan.md +145 -145
- package/templates/commands/apex/3-execute.md +171 -171
- package/templates/commands/apex/4-examine.md +116 -116
- package/templates/commands/apex/5-tasks.md +209 -209
- package/templates/commands/apex.md +76 -76
- package/templates/commands/application/create.md +362 -362
- package/templates/commands/application/templates-backend.md +463 -463
- package/templates/commands/application/templates-frontend.md +517 -517
- package/templates/commands/application/templates-i18n.md +478 -478
- package/templates/commands/application/templates-seed.md +362 -362
- package/templates/commands/application.md +303 -303
- package/templates/commands/business-analyse/0-orchestrate.md +640 -640
- package/templates/commands/business-analyse/1-init.md +269 -269
- package/templates/commands/business-analyse/2-discover.md +520 -520
- package/templates/commands/business-analyse/3-analyse.md +408 -408
- package/templates/commands/business-analyse/4-specify.md +598 -598
- package/templates/commands/business-analyse/5-validate.md +326 -326
- package/templates/commands/business-analyse/6-handoff.md +746 -746
- package/templates/commands/business-analyse/7-doc-html.md +602 -602
- package/templates/commands/business-analyse/bug.md +325 -325
- package/templates/commands/business-analyse/change-request.md +368 -368
- package/templates/commands/business-analyse/hotfix.md +200 -200
- package/templates/commands/business-analyse.md +640 -640
- package/templates/commands/controller/create.md +216 -216
- package/templates/commands/controller/postman-templates.md +528 -528
- package/templates/commands/controller/templates.md +600 -600
- package/templates/commands/controller.md +337 -337
- package/templates/commands/create/agent.md +138 -138
- package/templates/commands/create/command.md +166 -166
- package/templates/commands/create/hook.md +234 -234
- package/templates/commands/create/plugin.md +329 -329
- package/templates/commands/create/project.md +507 -507
- package/templates/commands/create/skill.md +199 -199
- package/templates/commands/create.md +220 -220
- package/templates/commands/debug.md +95 -95
- package/templates/commands/documentation/module.md +202 -202
- package/templates/commands/documentation/templates.md +432 -432
- package/templates/commands/documentation.md +190 -190
- package/templates/commands/efcore/_env-check.md +153 -153
- package/templates/commands/efcore/conflicts.md +186 -186
- package/templates/commands/efcore/db-deploy.md +193 -193
- package/templates/commands/efcore/db-reset.md +426 -426
- package/templates/commands/efcore/db-seed.md +326 -326
- package/templates/commands/efcore/db-status.md +226 -226
- package/templates/commands/efcore/migration.md +400 -400
- package/templates/commands/efcore/rebase-snapshot.md +264 -264
- package/templates/commands/efcore/scan.md +198 -198
- package/templates/commands/efcore/squash.md +298 -298
- package/templates/commands/efcore.md +224 -224
- package/templates/commands/epct.md +69 -69
- package/templates/commands/explain.md +186 -186
- package/templates/commands/explore.md +45 -45
- package/templates/commands/feature-full.md +267 -267
- package/templates/commands/gitflow/1-init.md +1038 -1038
- package/templates/commands/gitflow/10-start.md +768 -768
- package/templates/commands/gitflow/11-finish.md +457 -457
- package/templates/commands/gitflow/12-cleanup.md +276 -276
- package/templates/commands/gitflow/13-sync.md +216 -216
- package/templates/commands/gitflow/14-rebase.md +251 -251
- package/templates/commands/gitflow/2-status.md +277 -277
- package/templates/commands/gitflow/3-commit.md +344 -344
- package/templates/commands/gitflow/4-plan.md +145 -145
- package/templates/commands/gitflow/5-exec.md +147 -147
- package/templates/commands/gitflow/6-abort.md +344 -344
- package/templates/commands/gitflow/7-pull-request.md +453 -355
- package/templates/commands/gitflow/8-review.md +240 -176
- package/templates/commands/gitflow/9-merge.md +451 -365
- package/templates/commands/gitflow.md +128 -128
- package/templates/commands/implement.md +663 -663
- package/templates/commands/init.md +567 -567
- package/templates/commands/mcp-integration.md +330 -330
- package/templates/commands/notification.md +129 -129
- package/templates/commands/oneshot.md +57 -57
- package/templates/commands/quick-search.md +72 -72
- package/templates/commands/ralph-loop/cancel-ralph.md +18 -18
- package/templates/commands/ralph-loop/help.md +126 -126
- package/templates/commands/ralph-loop/ralph-loop.md +18 -18
- package/templates/commands/review.md +106 -106
- package/templates/commands/utils/test-web-config.md +160 -160
- package/templates/commands/utils/test-web.md +151 -151
- package/templates/commands/validate.md +233 -233
- package/templates/commands/workflow.md +193 -193
- package/templates/gitflow/config.json +138 -138
- package/templates/hooks/ef-migration-check.md +139 -139
- package/templates/hooks/hooks.json +25 -25
- package/templates/hooks/stop-hook.sh +177 -177
- package/templates/skills/ai-prompt/SKILL.md +778 -778
- package/templates/skills/application/SKILL.md +563 -563
- package/templates/skills/application/templates-backend.md +450 -450
- package/templates/skills/application/templates-frontend.md +531 -531
- package/templates/skills/application/templates-i18n.md +520 -520
- package/templates/skills/application/templates-seed.md +647 -647
- package/templates/skills/business-analyse/SKILL.md +191 -191
- package/templates/skills/business-analyse/questionnaire.md +283 -283
- package/templates/skills/business-analyse/templates-frd.md +477 -477
- package/templates/skills/business-analyse/templates-react.md +580 -580
- package/templates/skills/controller/SKILL.md +240 -240
- package/templates/skills/controller/postman-templates.md +614 -614
- package/templates/skills/controller/templates.md +1468 -1468
- package/templates/skills/documentation/SKILL.md +133 -133
- package/templates/skills/documentation/templates.md +476 -476
- package/templates/skills/feature-full/SKILL.md +838 -838
- package/templates/skills/notification/SKILL.md +555 -555
- package/templates/skills/ui-components/SKILL.md +870 -870
- package/templates/skills/workflow/SKILL.md +582 -582
- package/templates/test-web/api-health.json +38 -38
- package/templates/test-web/minimal.json +19 -19
- package/templates/test-web/npm-package.json +46 -46
- package/templates/test-web/seo-check.json +54 -54
|
@@ -1,276 +1,276 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Phase 12 - Cleanup worktrees and orphan branches (audit and remove)
|
|
3
|
-
agent: gitflow-cleanup
|
|
4
|
-
model: sonnet
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Phase 12: CLEANUP - Audit et nettoyage des worktrees
|
|
8
|
-
|
|
9
|
-
Tu es expert GitFlow. Audite et nettoie les worktrees orphelins ou obsoletes.
|
|
10
|
-
|
|
11
|
-
**Argument:** `$ARGUMENTS` = options (--dry-run, --force, --stale-days=N)
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## Prerequis
|
|
16
|
-
|
|
17
|
-
**IMPORTANT:** Cette commande doit etre executee depuis `main` ou `develop` uniquement.
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
21
|
-
if [[ "$CURRENT_BRANCH" != "main" && "$CURRENT_BRANCH" != "develop" ]]; then
|
|
22
|
-
echo "⚠️ ERREUR: Cette commande doit etre executee depuis main ou develop"
|
|
23
|
-
echo "Branche courante: $CURRENT_BRANCH"
|
|
24
|
-
echo ""
|
|
25
|
-
echo "Executez: git checkout develop && /gitflow:12-cleanup"
|
|
26
|
-
exit 1
|
|
27
|
-
fi
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## Workflow
|
|
33
|
-
|
|
34
|
-
### 1. Collecter les informations
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
# Lister tous les worktrees
|
|
38
|
-
git worktree list --porcelain
|
|
39
|
-
|
|
40
|
-
# Lister toutes les branches locales
|
|
41
|
-
git branch -a
|
|
42
|
-
|
|
43
|
-
# Lister les branches remote
|
|
44
|
-
git fetch --prune
|
|
45
|
-
git branch -r
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### 2. Analyser chaque worktree
|
|
49
|
-
|
|
50
|
-
Pour chaque worktree detecte:
|
|
51
|
-
|
|
52
|
-
| Verification | Condition | Status |
|
|
53
|
-
|--------------|-----------|--------|
|
|
54
|
-
| Branche existe localement | `git branch --list $BRANCH` | ✓ Active / ✗ Orphelin |
|
|
55
|
-
| Branche existe sur remote | `git branch -r --list origin/$BRANCH` | ✓ Trackee / ✗ Locale only |
|
|
56
|
-
| Derniere activite | `git log -1 --format=%ci $BRANCH` | Date dernier commit |
|
|
57
|
-
| Modifications non commitees | `git -C $WORKTREE status --porcelain` | ✓ Clean / ⚠️ Dirty |
|
|
58
|
-
|
|
59
|
-
### 3. Categoriser les worktrees
|
|
60
|
-
|
|
61
|
-
```
|
|
62
|
-
AUDIT WORKTREES
|
|
63
|
-
═══════════════════════════════════════════════════════════════
|
|
64
|
-
|
|
65
|
-
📁 Worktrees permanents (proteges):
|
|
66
|
-
✓ ../worktrees/main → main
|
|
67
|
-
✓ ../worktrees/develop → develop
|
|
68
|
-
|
|
69
|
-
📁 Worktrees actifs:
|
|
70
|
-
✓ ../worktrees/features/xxx → feature/xxx (3 jours)
|
|
71
|
-
✓ ../worktrees/releases/v2 → release/v2.0.0 (1 jour)
|
|
72
|
-
|
|
73
|
-
⚠️ Worktrees orphelins (branche supprimee):
|
|
74
|
-
✗ ../worktrees/features/old → feature/old (BRANCHE INEXISTANTE)
|
|
75
|
-
✗ ../worktrees/hotfixes/fix → hotfix/fix (BRANCHE INEXISTANTE)
|
|
76
|
-
|
|
77
|
-
⏰ Worktrees stale (inactifs > {N} jours):
|
|
78
|
-
⚠ ../worktrees/features/abc → feature/abc (45 jours sans commit)
|
|
79
|
-
|
|
80
|
-
💾 Worktrees dirty (modifications non commitees):
|
|
81
|
-
⚠ ../worktrees/features/wip → feature/wip (fichiers modifies)
|
|
82
|
-
|
|
83
|
-
═══════════════════════════════════════════════════════════════
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## Actions proposees
|
|
89
|
-
|
|
90
|
-
### Mode par defaut (interactif)
|
|
91
|
-
|
|
92
|
-
```
|
|
93
|
-
ACTIONS PROPOSEES
|
|
94
|
-
═══════════════════════════════════════════════════════════════
|
|
95
|
-
|
|
96
|
-
Orphelins a supprimer:
|
|
97
|
-
[1] ../worktrees/features/old (branche inexistante)
|
|
98
|
-
[2] ../worktrees/hotfixes/fix (branche inexistante)
|
|
99
|
-
|
|
100
|
-
Stale a examiner (> 30 jours):
|
|
101
|
-
[3] ../worktrees/features/abc (45 jours)
|
|
102
|
-
|
|
103
|
-
Options:
|
|
104
|
-
[A] Supprimer tous les orphelins
|
|
105
|
-
[S] Supprimer tous les stale
|
|
106
|
-
[1-N] Supprimer individuellement
|
|
107
|
-
[D] Details sur un worktree
|
|
108
|
-
[Q] Quitter sans action
|
|
109
|
-
|
|
110
|
-
Choix: _
|
|
111
|
-
═══════════════════════════════════════════════════════════════
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
### Mode --dry-run
|
|
115
|
-
|
|
116
|
-
Affiche uniquement l'audit sans proposer d'actions.
|
|
117
|
-
|
|
118
|
-
### Mode --force
|
|
119
|
-
|
|
120
|
-
Supprime automatiquement tous les orphelins sans confirmation.
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## Suppression d'un worktree
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
# Verifier si dirty
|
|
128
|
-
if [ -n "$(git -C $WORKTREE_PATH status --porcelain)" ]; then
|
|
129
|
-
echo "⚠️ Worktree dirty - modifications non commitees"
|
|
130
|
-
echo "Utilisez --force pour supprimer quand meme"
|
|
131
|
-
exit 1
|
|
132
|
-
fi
|
|
133
|
-
|
|
134
|
-
# Supprimer le worktree
|
|
135
|
-
git worktree remove "$WORKTREE_PATH" --force
|
|
136
|
-
|
|
137
|
-
# Nettoyer le dossier si reste
|
|
138
|
-
rm -rf "$WORKTREE_PATH" 2>/dev/null || true
|
|
139
|
-
|
|
140
|
-
# Pruner les worktrees
|
|
141
|
-
git worktree prune
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
## Detection des dossiers orphelins
|
|
147
|
-
|
|
148
|
-
En plus des worktrees git, detecter les dossiers qui ne sont plus lies:
|
|
149
|
-
|
|
150
|
-
```bash
|
|
151
|
-
# Lister les worktrees connus
|
|
152
|
-
KNOWN_WORKTREES=$(git worktree list --porcelain | grep "^worktree " | sed 's/worktree //')
|
|
153
|
-
|
|
154
|
-
# Scanner les dossiers de worktrees
|
|
155
|
-
WORKTREE_BASE="../worktrees"
|
|
156
|
-
for TYPE in features releases hotfixes; do
|
|
157
|
-
for DIR in "$WORKTREE_BASE/$TYPE"/*; do
|
|
158
|
-
if [ -d "$DIR" ]; then
|
|
159
|
-
# Verifier si c'est un worktree connu
|
|
160
|
-
if ! echo "$KNOWN_WORKTREES" | grep -q "$DIR"; then
|
|
161
|
-
echo "⚠️ Dossier orphelin: $DIR"
|
|
162
|
-
fi
|
|
163
|
-
fi
|
|
164
|
-
done
|
|
165
|
-
done
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
---
|
|
169
|
-
|
|
170
|
-
## Resume final
|
|
171
|
-
|
|
172
|
-
```
|
|
173
|
-
CLEANUP COMPLETE
|
|
174
|
-
═══════════════════════════════════════════════════════════════
|
|
175
|
-
|
|
176
|
-
Worktrees analyses: {total}
|
|
177
|
-
Permanents (proteges): {n_permanent}
|
|
178
|
-
Actifs: {n_active}
|
|
179
|
-
Supprimes: {n_deleted}
|
|
180
|
-
- Orphelins: {n_orphan}
|
|
181
|
-
- Stale: {n_stale}
|
|
182
|
-
Ignores (dirty): {n_dirty}
|
|
183
|
-
|
|
184
|
-
Espace libere: ~{size} MB
|
|
185
|
-
|
|
186
|
-
Dossiers orphelins: {n_orphan_dirs}
|
|
187
|
-
- Supprimes: {n_orphan_dirs_deleted}
|
|
188
|
-
|
|
189
|
-
═══════════════════════════════════════════════════════════════
|
|
190
|
-
Environnement propre!
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
---
|
|
194
|
-
|
|
195
|
-
## Modes
|
|
196
|
-
|
|
197
|
-
| Commande | Action |
|
|
198
|
-
|----------|--------|
|
|
199
|
-
| `/gitflow:12-cleanup` | Audit interactif avec propositions |
|
|
200
|
-
| `/gitflow:12-cleanup --dry-run` | Audit seul, aucune action |
|
|
201
|
-
| `/gitflow:12-cleanup --force` | Supprime tous les orphelins automatiquement |
|
|
202
|
-
| `/gitflow:12-cleanup --stale-days=30` | Seuil pour worktrees stale (defaut: 30) |
|
|
203
|
-
| `/gitflow:12-cleanup --include-stale` | Inclut les stale dans la suppression auto |
|
|
204
|
-
| `/gitflow:12-cleanup --verbose` | Affiche les details de chaque worktree |
|
|
205
|
-
|
|
206
|
-
---
|
|
207
|
-
|
|
208
|
-
## Integration automatique
|
|
209
|
-
|
|
210
|
-
Cette commande est appelee automatiquement par:
|
|
211
|
-
- `/gitflow:11-finish` → Apres finalisation d'une branche
|
|
212
|
-
- `/gitflow:6-abort --branch` → Apres abandon d'une branche
|
|
213
|
-
|
|
214
|
-
Dans ces cas, seul le worktree de la branche concernee est nettoye (cleanup cible).
|
|
215
|
-
|
|
216
|
-
---
|
|
217
|
-
|
|
218
|
-
## Cleanup cible (usage interne)
|
|
219
|
-
|
|
220
|
-
Quand appelee depuis finish/abort avec une branche specifique:
|
|
221
|
-
|
|
222
|
-
```bash
|
|
223
|
-
# Usage interne
|
|
224
|
-
cleanup_worktree_for_branch() {
|
|
225
|
-
BRANCH=$1
|
|
226
|
-
WORKTREE_BASE="../worktrees"
|
|
227
|
-
|
|
228
|
-
# Determiner le chemin selon le type
|
|
229
|
-
if [[ $BRANCH == feature/* ]]; then
|
|
230
|
-
NAME=${BRANCH#feature/}
|
|
231
|
-
WORKTREE_PATH="$WORKTREE_BASE/features/$NAME"
|
|
232
|
-
elif [[ $BRANCH == release/* ]]; then
|
|
233
|
-
VERSION=${BRANCH#release/}
|
|
234
|
-
WORKTREE_PATH="$WORKTREE_BASE/releases/$VERSION"
|
|
235
|
-
elif [[ $BRANCH == hotfix/* ]]; then
|
|
236
|
-
NAME=${BRANCH#hotfix/}
|
|
237
|
-
WORKTREE_PATH="$WORKTREE_BASE/hotfixes/$NAME"
|
|
238
|
-
fi
|
|
239
|
-
|
|
240
|
-
# Supprimer si existe
|
|
241
|
-
if [ -d "$WORKTREE_PATH" ]; then
|
|
242
|
-
git worktree remove "$WORKTREE_PATH" --force 2>/dev/null || true
|
|
243
|
-
rm -rf "$WORKTREE_PATH" 2>/dev/null || true
|
|
244
|
-
git worktree prune
|
|
245
|
-
echo "✓ Worktree nettoye: $WORKTREE_PATH"
|
|
246
|
-
fi
|
|
247
|
-
}
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
---
|
|
251
|
-
|
|
252
|
-
## Logs
|
|
253
|
-
|
|
254
|
-
Chaque cleanup est logue dans `.claude/gitflow/logs/cleanup_{timestamp}.json`:
|
|
255
|
-
|
|
256
|
-
```json
|
|
257
|
-
{
|
|
258
|
-
"timestamp": "{ISO_DATE}",
|
|
259
|
-
"type": "cleanup",
|
|
260
|
-
"mode": "interactive|dry-run|force|targeted",
|
|
261
|
-
"branch": "{main|develop}",
|
|
262
|
-
"worktrees": {
|
|
263
|
-
"analyzed": {n},
|
|
264
|
-
"deleted": [
|
|
265
|
-
{ "path": "...", "branch": "...", "reason": "orphan|stale" }
|
|
266
|
-
],
|
|
267
|
-
"skipped": [
|
|
268
|
-
{ "path": "...", "branch": "...", "reason": "dirty|active|permanent" }
|
|
269
|
-
]
|
|
270
|
-
},
|
|
271
|
-
"orphan_dirs": {
|
|
272
|
-
"found": {n},
|
|
273
|
-
"deleted": {n}
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
```
|
|
1
|
+
---
|
|
2
|
+
description: Phase 12 - Cleanup worktrees and orphan branches (audit and remove)
|
|
3
|
+
agent: gitflow-cleanup
|
|
4
|
+
model: sonnet
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Phase 12: CLEANUP - Audit et nettoyage des worktrees
|
|
8
|
+
|
|
9
|
+
Tu es expert GitFlow. Audite et nettoie les worktrees orphelins ou obsoletes.
|
|
10
|
+
|
|
11
|
+
**Argument:** `$ARGUMENTS` = options (--dry-run, --force, --stale-days=N)
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Prerequis
|
|
16
|
+
|
|
17
|
+
**IMPORTANT:** Cette commande doit etre executee depuis `main` ou `develop` uniquement.
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
21
|
+
if [[ "$CURRENT_BRANCH" != "main" && "$CURRENT_BRANCH" != "develop" ]]; then
|
|
22
|
+
echo "⚠️ ERREUR: Cette commande doit etre executee depuis main ou develop"
|
|
23
|
+
echo "Branche courante: $CURRENT_BRANCH"
|
|
24
|
+
echo ""
|
|
25
|
+
echo "Executez: git checkout develop && /gitflow:12-cleanup"
|
|
26
|
+
exit 1
|
|
27
|
+
fi
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Workflow
|
|
33
|
+
|
|
34
|
+
### 1. Collecter les informations
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# Lister tous les worktrees
|
|
38
|
+
git worktree list --porcelain
|
|
39
|
+
|
|
40
|
+
# Lister toutes les branches locales
|
|
41
|
+
git branch -a
|
|
42
|
+
|
|
43
|
+
# Lister les branches remote
|
|
44
|
+
git fetch --prune
|
|
45
|
+
git branch -r
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 2. Analyser chaque worktree
|
|
49
|
+
|
|
50
|
+
Pour chaque worktree detecte:
|
|
51
|
+
|
|
52
|
+
| Verification | Condition | Status |
|
|
53
|
+
|--------------|-----------|--------|
|
|
54
|
+
| Branche existe localement | `git branch --list $BRANCH` | ✓ Active / ✗ Orphelin |
|
|
55
|
+
| Branche existe sur remote | `git branch -r --list origin/$BRANCH` | ✓ Trackee / ✗ Locale only |
|
|
56
|
+
| Derniere activite | `git log -1 --format=%ci $BRANCH` | Date dernier commit |
|
|
57
|
+
| Modifications non commitees | `git -C $WORKTREE status --porcelain` | ✓ Clean / ⚠️ Dirty |
|
|
58
|
+
|
|
59
|
+
### 3. Categoriser les worktrees
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
AUDIT WORKTREES
|
|
63
|
+
═══════════════════════════════════════════════════════════════
|
|
64
|
+
|
|
65
|
+
📁 Worktrees permanents (proteges):
|
|
66
|
+
✓ ../worktrees/main → main
|
|
67
|
+
✓ ../worktrees/develop → develop
|
|
68
|
+
|
|
69
|
+
📁 Worktrees actifs:
|
|
70
|
+
✓ ../worktrees/features/xxx → feature/xxx (3 jours)
|
|
71
|
+
✓ ../worktrees/releases/v2 → release/v2.0.0 (1 jour)
|
|
72
|
+
|
|
73
|
+
⚠️ Worktrees orphelins (branche supprimee):
|
|
74
|
+
✗ ../worktrees/features/old → feature/old (BRANCHE INEXISTANTE)
|
|
75
|
+
✗ ../worktrees/hotfixes/fix → hotfix/fix (BRANCHE INEXISTANTE)
|
|
76
|
+
|
|
77
|
+
⏰ Worktrees stale (inactifs > {N} jours):
|
|
78
|
+
⚠ ../worktrees/features/abc → feature/abc (45 jours sans commit)
|
|
79
|
+
|
|
80
|
+
💾 Worktrees dirty (modifications non commitees):
|
|
81
|
+
⚠ ../worktrees/features/wip → feature/wip (fichiers modifies)
|
|
82
|
+
|
|
83
|
+
═══════════════════════════════════════════════════════════════
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Actions proposees
|
|
89
|
+
|
|
90
|
+
### Mode par defaut (interactif)
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
ACTIONS PROPOSEES
|
|
94
|
+
═══════════════════════════════════════════════════════════════
|
|
95
|
+
|
|
96
|
+
Orphelins a supprimer:
|
|
97
|
+
[1] ../worktrees/features/old (branche inexistante)
|
|
98
|
+
[2] ../worktrees/hotfixes/fix (branche inexistante)
|
|
99
|
+
|
|
100
|
+
Stale a examiner (> 30 jours):
|
|
101
|
+
[3] ../worktrees/features/abc (45 jours)
|
|
102
|
+
|
|
103
|
+
Options:
|
|
104
|
+
[A] Supprimer tous les orphelins
|
|
105
|
+
[S] Supprimer tous les stale
|
|
106
|
+
[1-N] Supprimer individuellement
|
|
107
|
+
[D] Details sur un worktree
|
|
108
|
+
[Q] Quitter sans action
|
|
109
|
+
|
|
110
|
+
Choix: _
|
|
111
|
+
═══════════════════════════════════════════════════════════════
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Mode --dry-run
|
|
115
|
+
|
|
116
|
+
Affiche uniquement l'audit sans proposer d'actions.
|
|
117
|
+
|
|
118
|
+
### Mode --force
|
|
119
|
+
|
|
120
|
+
Supprime automatiquement tous les orphelins sans confirmation.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Suppression d'un worktree
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
# Verifier si dirty
|
|
128
|
+
if [ -n "$(git -C $WORKTREE_PATH status --porcelain)" ]; then
|
|
129
|
+
echo "⚠️ Worktree dirty - modifications non commitees"
|
|
130
|
+
echo "Utilisez --force pour supprimer quand meme"
|
|
131
|
+
exit 1
|
|
132
|
+
fi
|
|
133
|
+
|
|
134
|
+
# Supprimer le worktree
|
|
135
|
+
git worktree remove "$WORKTREE_PATH" --force
|
|
136
|
+
|
|
137
|
+
# Nettoyer le dossier si reste
|
|
138
|
+
rm -rf "$WORKTREE_PATH" 2>/dev/null || true
|
|
139
|
+
|
|
140
|
+
# Pruner les worktrees
|
|
141
|
+
git worktree prune
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Detection des dossiers orphelins
|
|
147
|
+
|
|
148
|
+
En plus des worktrees git, detecter les dossiers qui ne sont plus lies:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
# Lister les worktrees connus
|
|
152
|
+
KNOWN_WORKTREES=$(git worktree list --porcelain | grep "^worktree " | sed 's/worktree //')
|
|
153
|
+
|
|
154
|
+
# Scanner les dossiers de worktrees
|
|
155
|
+
WORKTREE_BASE="../worktrees"
|
|
156
|
+
for TYPE in features releases hotfixes; do
|
|
157
|
+
for DIR in "$WORKTREE_BASE/$TYPE"/*; do
|
|
158
|
+
if [ -d "$DIR" ]; then
|
|
159
|
+
# Verifier si c'est un worktree connu
|
|
160
|
+
if ! echo "$KNOWN_WORKTREES" | grep -q "$DIR"; then
|
|
161
|
+
echo "⚠️ Dossier orphelin: $DIR"
|
|
162
|
+
fi
|
|
163
|
+
fi
|
|
164
|
+
done
|
|
165
|
+
done
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Resume final
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
CLEANUP COMPLETE
|
|
174
|
+
═══════════════════════════════════════════════════════════════
|
|
175
|
+
|
|
176
|
+
Worktrees analyses: {total}
|
|
177
|
+
Permanents (proteges): {n_permanent}
|
|
178
|
+
Actifs: {n_active}
|
|
179
|
+
Supprimes: {n_deleted}
|
|
180
|
+
- Orphelins: {n_orphan}
|
|
181
|
+
- Stale: {n_stale}
|
|
182
|
+
Ignores (dirty): {n_dirty}
|
|
183
|
+
|
|
184
|
+
Espace libere: ~{size} MB
|
|
185
|
+
|
|
186
|
+
Dossiers orphelins: {n_orphan_dirs}
|
|
187
|
+
- Supprimes: {n_orphan_dirs_deleted}
|
|
188
|
+
|
|
189
|
+
═══════════════════════════════════════════════════════════════
|
|
190
|
+
Environnement propre!
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## Modes
|
|
196
|
+
|
|
197
|
+
| Commande | Action |
|
|
198
|
+
|----------|--------|
|
|
199
|
+
| `/gitflow:12-cleanup` | Audit interactif avec propositions |
|
|
200
|
+
| `/gitflow:12-cleanup --dry-run` | Audit seul, aucune action |
|
|
201
|
+
| `/gitflow:12-cleanup --force` | Supprime tous les orphelins automatiquement |
|
|
202
|
+
| `/gitflow:12-cleanup --stale-days=30` | Seuil pour worktrees stale (defaut: 30) |
|
|
203
|
+
| `/gitflow:12-cleanup --include-stale` | Inclut les stale dans la suppression auto |
|
|
204
|
+
| `/gitflow:12-cleanup --verbose` | Affiche les details de chaque worktree |
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Integration automatique
|
|
209
|
+
|
|
210
|
+
Cette commande est appelee automatiquement par:
|
|
211
|
+
- `/gitflow:11-finish` → Apres finalisation d'une branche
|
|
212
|
+
- `/gitflow:6-abort --branch` → Apres abandon d'une branche
|
|
213
|
+
|
|
214
|
+
Dans ces cas, seul le worktree de la branche concernee est nettoye (cleanup cible).
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Cleanup cible (usage interne)
|
|
219
|
+
|
|
220
|
+
Quand appelee depuis finish/abort avec une branche specifique:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
# Usage interne
|
|
224
|
+
cleanup_worktree_for_branch() {
|
|
225
|
+
BRANCH=$1
|
|
226
|
+
WORKTREE_BASE="../worktrees"
|
|
227
|
+
|
|
228
|
+
# Determiner le chemin selon le type
|
|
229
|
+
if [[ $BRANCH == feature/* ]]; then
|
|
230
|
+
NAME=${BRANCH#feature/}
|
|
231
|
+
WORKTREE_PATH="$WORKTREE_BASE/features/$NAME"
|
|
232
|
+
elif [[ $BRANCH == release/* ]]; then
|
|
233
|
+
VERSION=${BRANCH#release/}
|
|
234
|
+
WORKTREE_PATH="$WORKTREE_BASE/releases/$VERSION"
|
|
235
|
+
elif [[ $BRANCH == hotfix/* ]]; then
|
|
236
|
+
NAME=${BRANCH#hotfix/}
|
|
237
|
+
WORKTREE_PATH="$WORKTREE_BASE/hotfixes/$NAME"
|
|
238
|
+
fi
|
|
239
|
+
|
|
240
|
+
# Supprimer si existe
|
|
241
|
+
if [ -d "$WORKTREE_PATH" ]; then
|
|
242
|
+
git worktree remove "$WORKTREE_PATH" --force 2>/dev/null || true
|
|
243
|
+
rm -rf "$WORKTREE_PATH" 2>/dev/null || true
|
|
244
|
+
git worktree prune
|
|
245
|
+
echo "✓ Worktree nettoye: $WORKTREE_PATH"
|
|
246
|
+
fi
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Logs
|
|
253
|
+
|
|
254
|
+
Chaque cleanup est logue dans `.claude/gitflow/logs/cleanup_{timestamp}.json`:
|
|
255
|
+
|
|
256
|
+
```json
|
|
257
|
+
{
|
|
258
|
+
"timestamp": "{ISO_DATE}",
|
|
259
|
+
"type": "cleanup",
|
|
260
|
+
"mode": "interactive|dry-run|force|targeted",
|
|
261
|
+
"branch": "{main|develop}",
|
|
262
|
+
"worktrees": {
|
|
263
|
+
"analyzed": {n},
|
|
264
|
+
"deleted": [
|
|
265
|
+
{ "path": "...", "branch": "...", "reason": "orphan|stale" }
|
|
266
|
+
],
|
|
267
|
+
"skipped": [
|
|
268
|
+
{ "path": "...", "branch": "...", "reason": "dirty|active|permanent" }
|
|
269
|
+
]
|
|
270
|
+
},
|
|
271
|
+
"orphan_dirs": {
|
|
272
|
+
"found": {n},
|
|
273
|
+
"deleted": {n}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
```
|