fix(vm): run rattache la VM existante sans reproposer un reboot (T7.6, AC-R037)#13
Merged
Merged
Conversation
…ressources (AC-R037) phase_run passait toujours --cpus/--memory/--disk a _vm opencode, ce qui declenchait le prompt agent-vm "must be stopped to apply new resource settings" a chaque run sur une VM deja lancee (le vendored ne compare pas aux valeurs courantes : il repropose un reboot des qu'un flag ressource est fourni). Correctif v1 (if _agent_vm_running) a echoue en run reel : le helper vendored fait `limactl list | grep -q`, faux negatif intermittent sous set -o pipefail (course SIGPIPE quand grep -q ferme le pipe avant la fin de limactl). C'est pourquoi le vendored ne l'appelle que dans le sous-shell permissif _vm. Correctif v2 : capturer `limactl list -q` d'abord (aucun pipe -> immunise SIGPIPE/pipefail), puis decider par case bash pur. Detection "VM projet presente" (Running ou Stopped) -> _vm opencode sans flags ; VM absente -> flags passes pour dimensionner la VM a la creation. vendor/vm/ non touche. Tests : TESTS.md S41 (VM presente -> plus de prompt) + S42 (VM absente -> flags).
…C-R037) base_vm_exists() faisait `limactl list -q | grep -q '^agent-vm-base$'`, le meme anti-pattern que celui corrige dans phase_run : faux negatif intermittent sous set -o pipefail (grep -q ferme le pipe, limactl prend un SIGPIPE, pipefail fait echouer le tout). base_vm_exists etant appele par phase_run/check_base_vm en amont, ce faux negatif reproposait la creation de la VM de base a chaque run (symptome remonte par un beta-testeur). Aligne sur le meme correctif : capture `limactl list -q` d'abord (|| true), puis test par case bash pur. Zero pipe -> pas de course SIGPIPE. Tests : TESTS.md S43 (base detectee 20/20 sous set -euo pipefail).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problème
Sur une VM projet déjà lancée, chaque
albert-code runaffiche le prompt agent-vm :…alors que rien ne change (ressources demandées = ressources courantes). Faux positif à chaque lancement.
Cause
phase_runpasse toujours--cpus/--memory/--diskà_vm opencode(lib/phases.sh). Le moteur de VM vendored ne compare pas aux valeurs courantes (vendor/vm/agent-vm.sh:374) : il repropose un reboot dès qu'un flag ressource est fourni et que la VM tourne. Le vendored étant figé (pin6f20194), la correction est côté Albert Code.Correctif (v2)
phase_runne passe les flags ressources que si la VM projet est absente (1er run → dimensionnement à la création). Si elle est déjà présente (Running ou Stopped), lancement direct sans flags → plus de prompt.Pourquoi v2 et pas un simple
if _agent_vm_runningLa 1re tentative (
if _agent_vm_running "$(_agent_vm_name)") échouait en run réel : le helper vendored faitlimactl list | grep -q, ce qui donne un faux négatif intermittent sousset -o pipefail(actif dansbin/albert-code) — course SIGPIPE quandgrep -qferme le pipe avant la fin delimactl. C'est précisément pour ça que le vendored n'appelle ce helper que dans le sous-shell permissif_vm(set +o pipefail).→ v2 = capture
limactl list -qd'abord (aucun pipe), puis décision parcasebash pur. Immunisé au SIGPIPE/pipefail, indépendant des options du shell.Tests
TESTS.mdS41 — VM projet présente → rattachement, plus de prompt « must be stopped ».TESTS.mdS42 — VM projet absente → flags ressources passés, création dimensionnée.Validé en run réel (le faux négatif SIGPIPE n'est pas reproductible en test isolé à froid).
Portée
vendor/vm/non modifié. Aucun changement de comportement pour le 1er run d'un projet.Mise à jour — correctif étendu à
base_vm_exists()(2ᵉ commit)Revue de la PR :
base_vm_exists()portait exactement le même anti-patternlimactl list -q | grep -q '^agent-vm-base$', et il est appelé parphase_run/check_base_vmen amont du code corrigé. Même course SIGPIPE sousset -o pipefail→ faux négatif intermittent → la création de la VM de base était reproposée à chaquerun(symptôme remonté par un bêta-testeur).→ Aligné sur le même correctif capture-first +
casebash pur (zéro pipe). Test S43 ajouté (base détectée 20/20 sousset -euo pipefail).La leçon du post-mortem est désormais appliquée aux deux appels
limactl | grep -qdu cheminrun.