--- issueRef: "#289" version: 5 updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"} updatedAt: 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.