From aa2f67ae89c7880aeb54339a6cd5790b9e085ad0 Mon Sep 17 00:00:00 2001 From: Blomios Date: Sun, 14 Jun 2026 09:45:39 +0200 Subject: [PATCH] =?UTF-8?q?fix(orchestrator):=20ne=20pas=20c=C3=A2bler=20w?= =?UTF-8?q?ith=5Fstructured=20sur=20l'orchestrateur=20(r=C3=A9gression=200?= =?UTF-8?q?f8ba38)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Régression introduite par 0f8ba38 : le re-câblage de `.with_structured(...)` sur `OrchestratorService` (pour activer `drain_with_readiness`, readiness lot 1) faisait emprunter à `ask_agent` la branche structurée `ensure_structured_session`, qui ne peut JAMAIS aboutir : depuis le lot B-2 (« Option 1 Terminal + MCP », eca2ba9) la fabrique structurée est décâblée de `LaunchAgent`, donc aucun agent n'a de session structurée — tous tournent en PTY brut et la délégation passe par les outils MCP. Symptôme : `idea_ask_agent` échouait systématiquement avec « aucune session structurée vivante après lancement » à chaque relance d'IdeA. Non détecté par les tests : les e2e loopback câblent leur propre service structuré complet, jamais le composition root réel (gap tests ≠ composition). Fix : retirer le `.with_structured` du composition root pour que `self.structured = None` et que `ask_agent` retombe sur le chemin PTY+MCP fonctionnel (état pré-0f8ba38). `drain_with_readiness` reste dormant tant que la voie structurée n'est pas réactivée au composition root. Co-Authored-By: Claude Opus 4.8 --- crates/app-tauri/src/state.rs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/crates/app-tauri/src/state.rs b/crates/app-tauri/src/state.rs index 6b38e5d..61a6f3d 100644 --- a/crates/app-tauri/src/state.rs +++ b/crates/app-tauri/src/state.rs @@ -891,12 +891,19 @@ impl AppState { .with_record_turn( Arc::new(AppRecordTurnProvider) as Arc, Arc::clone(&clock) as Arc, - ) - // Registre des sessions IA structurées (§17.5) : permet à `ask_agent` de - // router une cible structurée (sans PTY) sur sa session et de la drainer via - // `drain_with_readiness` — le `Final` réveille le round-trip ET marque l'agent - // `Idle` (readiness/heartbeat lot 1). - .with_structured(Arc::clone(&structured_sessions)), + ), + // NB (régression corrigée) : on ne câble PAS `.with_structured(...)` ici. + // Décision produit lot B-2 (« Option 1 Terminal + MCP », cf. construction + // de `LaunchAgent` plus haut) : la fabrique structurée est décâblée, donc + // AUCUN agent n'a de session structurée vivante — tous tournent en PTY brut + // et la délégation passe par les outils MCP (`idea_ask_agent`/`idea_reply`). + // Si l'orchestrateur recevait `with_structured`, `ask_agent` emprunterait la + // branche structurée (`ensure_structured_session`) qui ne peut jamais aboutir + // (le launcher ne crée plus de session structurée) ⇒ erreur systématique + // « aucune session structurée vivante après lancement ». On laisse donc + // `self.structured = None` pour que `ask_agent` retombe sur le chemin PTY+MCP + // fonctionnel. `drain_with_readiness` (readiness/heartbeat lot 1) reste dormant + // tant que la voie structurée n'est pas réactivée au composition root. ); // --- Windows (L10) ---