Files
IdeA/.ideai/tickets/289/carnet.md
Blomios d03300a20f fix(backend,orchestrator,chat): tour humain agent_send survit au self-restart — #290 (le tour humain direct agent_send/ws chat.send s'enregistre au RestartRendezvousCoordinator via StructuredHumanTurnGuard: Final/Error de l'ancien provider devient transition de contrôle et non le Final logique; transition_after_provider_terminal_async attend Ready puis accept_ready acquitte le handoff et libère le scheduler, Resume => drain de la session de remplacement avec SELF_RESTART_CONTINUATION_PROMPT, seul le terminal du remplacement est transmis au chat; Failed/Cancelled surfacés explicitement avec libération Busy/FIFO; send_with_tap en erreur pendant restart actif traité comme teardown attendu (stream vide puis attente du remplacement, plus de Final prématuré ni chat bloqué); StopLiveAgent câblé with_restart_rendezvous: stop utilisateur annule le rendez-vous restart; RestartRendezvousRegistration rendu public (state/changed/accept_ready); QA verte: backend self_restart_contract_tests 3/3 dont 2 nouveaux (old terminal ignoré + handoff accepté, failure explicite + busy libéré), application orchestrator_service restart 8/8 dont registration directe du rendez-vous, workstate_actions 9/9, app-tauri chat_bridge 31/31, web-server websocket_chat_send 3/3, cargo check --workspace, fmt --check, diff --check — reconfirmés par Git avant commit; réserves hors périmètre préexistantes: 7 échecs fixture PTY web-server + 2 échecs plugin application; carnet #290 + clôture store #289 inclus; scripts/ hors périmètre; aucun push)
2026-09-09 08:38:29 +02:00

5.4 KiB

issueRef, version, updatedBy, updatedAt
issueRef version updatedBy updatedAt
#289 5
kind agent_id
agent a6c6ea12-bfc6-4bdc-8031-324102dfa34d
1788901112288

2026-09-08 — Main

Demande utilisateur : garantir que si une cible appelée via ask_agent se restart, le demandeur attend la fin du restart et reçoit le travail post-restart rattaché au même agent, aussi bien intra-projet qu'en cross-project.

Cadrage Architect :

  • Identité stable par RuntimeAgentKey (projectId, agentId).
  • Le conversation_id logique et le verrou de tour doivent survivre au restart.
  • Un restart accepté est une activité de contrôle du rendez-vous : ne pas classifier la fermeture de l'ancienne session comme no-reply/timeout d'inactivité.
  • Cross-project : conserver la corrélation demandeur (requesterProjectId, requesterAgentId, correlationId) jusqu'au résultat post-restart.
  • Cancel pendant restart doit cascader et nettoyer rendez-vous/workstate/registre cross-project.
  • Échec de restart => erreur explicite, pas silence.

Branche Git retenue : fix/289-ask-agent-during-target-restart depuis develop @ db91b00.

Prochaines étapes : DevBackend implémente le contrat backend et tests ; QA valide same-project, cross-project, watchdog, failure/cancel.

2026-09-08 — DevBackend

Correctif backend implémenté sur fix/289-ask-agent-during-target-restart.

Fichiers modifiés :

  • crates/application/src/orchestrator/service.rs
  • crates/application/src/orchestrator/mod.rs
  • crates/application/src/lib.rs
  • crates/application/tests/orchestrator_service.rs
  • crates/backend/src/lib.rs

Comportement livré :

  • coordination stable par RuntimeAgentKey (projectId, agentId) entre le rendez-vous applicatif et le scheduler de self-restart ;
  • conservation du verrou de tour, du ticket logique et du conversation_id pendant le remplacement de la session concrète ;
  • abandon du drain de l'ancienne session sans no-reply, puis capture du Final du tour de continuation sur la session relancée ;
  • activité de contrôle restart intégrée au watchdog d'inactivité ;
  • corrélation cross-project conservée jusqu'au résultat post-restart ;
  • échec de restart remonté explicitement ; cancel pendant la fenêtre sans runtime réveille l'ask, nettoie la corrélation et empêche la relance de continuation ;
  • le scheduler standalone conserve son comportement historique lorsque aucun ask n'est actif.

Tests exécutés :

  • cargo test -p application --test orchestrator_service — 85 passés ;
  • cargo test -p application --lib — 171 passés ;
  • cargo test -p backend --lib — 89 passés, 7 ignorés (tests socket nécessitant une permission locale) ;
  • cargo check -p backend — OK ;
  • cargo fmt --all -- --check — OK.

Tests de régression ajoutés : same-project Final post-restart, cross-project + nettoyage corrélation, faux no-reply interdit, failure explicite, cancel pendant le gap de restart, watchdog réarmé par activité de contrôle.

Limites : pas de test E2E avec un vrai processus fournisseur/AppImage dans ce lot ; la validation est faite avec les ports/sessions structurés et le scheduler backend compilé. Aucun fichier frontend modifié. Aucun commit effectué par DevBackend.

2026-09-08 — QA

Verdict : VERT pour le ticket #289 sur fix/289-ask-agent-during-target-restart.

Tests QA ajoutés dans crates/application/tests/orchestrator_service.rs :

  • ask_target_restart_cleans_busy_workstate_and_replaces_structured_registry_entry : succès same-project post-restart, cible revenue Idle, FIFO vide, live-state Done, ancienne session structurée absente, session de remplacement enregistrée sur le même agent logique.
  • same_project_stop_during_restart_releases_ask_and_leaves_no_replacement_session : cancel/stop same-project pendant le gap de restart, ask réveillé en erreur explicite de cancel, busy/FIFO/live-state nettoyés, aucune session de remplacement enregistrée.

Commandes finales vertes :

  • cargo fmt --all -- --check
  • cargo test -p application --test orchestrator_service — 87 passés
  • cargo test -p application --lib — 171 passés
  • cargo test -p backend --lib — 89 passés, 7 ignorés
  • cargo check -p backend — OK

Couverture validée : same-project, cross-project, faux no-reply interdit, failure restart explicite, cancel pendant restart, nettoyage busy/workstate/registry, watchdog réarmé par activité restart.

Risques résiduels : pas d'E2E vrai provider relancé dans QA ; les 7 tests backend ignorés demandent une permission locale de bind socket.

2026-09-08 — Git/Main clôture

Git a committé le correctif sur la branche feature : d6d9891.

Git a mergé localement dans develop avec merge commit : 321ebda.

Aucun push distant effectué. État final après build : develop...origin/develop [ahead 276], working tree propre sauf scripts/ non suivi préexistant et hors périmètre.

Build AppImage exécuté via le skill build-appimage :

  • npm --prefix frontend run build — OK.
  • depuis crates/app-tauri : CARGO_HOME=/tmp/idea-cargo-home APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=1 ../../frontend/node_modules/.bin/tauri build --bundles appimage — OK.

Artefact produit : target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage.

Étape non automatisée volontairement : remplacement de /home/anthony/Documents/IdeA_0.1.0_amd64.AppImage et relance d'IdeA, car cela tue l'orchestrateur actif. À faire manuellement quand l'utilisateur est prêt pour activer le correctif dans l'application lancée.