feat(switcher): auto-resume dedicated sessions after a swap
When a legitimate quota hit triggered a swap, killAllPoolSessions tore down the dedicated interactive sessions (ccl-1-conformvault, ccl-2-scanyze) along with the pool, then recreatePoolSessions re-opened them at a bare bash prompt. The operator had to manually re-run CLAUDE_CONFIG_DIR=<target> claude --dangerously-skip-permissions --resume <uuid> after every swap, losing whatever conversation was mid-flight. saveAllSessions only iterates sessions tracked as "working" in state; user-driven dedicated sessions are rarely in that state so their resume UUIDs were never saved. - saveDedicatedUUIDs: capture resume UUID for every configured dedicated session regardless of tracked state, before kill. - relaunchDedicatedSessions(targetHome): after recreate, send a resume command on each dedicated session pointing CLAUDE_CONFIG_DIR at the target account's home. Missing UUID → leave at shell, no blind launch. - isValidResumeUUID hardens against a corrupted resume-id.txt. New TestDedicatedRelaunchAfterSwap verifies end-to-end: pane capture → UUID persisted → resume command sent with the correct CLAUDE_CONFIG_DIR. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
5cad53ac7a
commit
8fdb1937fc
4 changed files with 169 additions and 14 deletions
35
VERSION.md
35
VERSION.md
|
|
@ -1,4 +1,37 @@
|
|||
# Version actuelle : 0.2.3
|
||||
# Version actuelle : 0.3.0
|
||||
|
||||
## [0.3.0] - 2026-04-15
|
||||
**Type:** Minor — Auto-resume des sessions dédiées après un swap légitime
|
||||
|
||||
### Corrigé
|
||||
- **Les sessions dédiées (ccl-1-conformvault, ccl-2-scanyze) étaient tuées puis
|
||||
recréées au bash prompt lors d'un swap légitime** (vrai 429 quota hit),
|
||||
interrompant le travail interactif en cours. L'opérateur devait relancer
|
||||
manuellement `claude --resume <uuid>` avec le bon `CLAUDE_CONFIG_DIR` après
|
||||
chaque swap.
|
||||
- La couverture de `saveAllSessions()` ne captait que les sessions tracked en
|
||||
`state="working"`. Les sessions dédiées user-driven étaient ignorées, donc
|
||||
leur UUID de resume était perdu au kill.
|
||||
|
||||
### Ajouté
|
||||
- `switcher.saveDedicatedUUIDs()` : capture le UUID de chaque session dédiée
|
||||
configurée, peu importe son tracked state. Appelé juste avant `killAll`.
|
||||
- `switcher.relaunchDedicatedSessions(targetHome)` : après recréation,
|
||||
envoie `CLAUDE_CONFIG_DIR=<targetHome> claude --dangerously-skip-permissions
|
||||
--resume <uuid>` dans chaque session dédiée. Si l'UUID manque, la session
|
||||
reste au shell (pas de tentative aveugle).
|
||||
- `isValidResumeUUID()` défense contre un fichier resume-id corrompu (check
|
||||
longueur 36 + regex hex/dash).
|
||||
|
||||
### Tests
|
||||
- ✅ `TestDedicatedRelaunchAfterSwap` vérifie : capture UUID → write file →
|
||||
relaunch avec la bonne commande → `CLAUDE_CONFIG_DIR` pointant sur le home
|
||||
du compte cible.
|
||||
- ✅ `go test ./...` full suite
|
||||
|
||||
### Fichiers modifiés
|
||||
- `internal/switcher/account_switcher.go`
|
||||
- `internal/switcher/account_switcher_test.go`
|
||||
|
||||
## [0.2.3] - 2026-04-15
|
||||
**Type:** Patch — Veto 5xx pour écarter les faux positifs persistants
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue