fix(orchestrator): ne pas câbler with_structured sur l'orchestrateur (régression 0f8ba38)
Régression introduite par0f8ba38: 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 <noreply@anthropic.com>
This commit is contained in:
@ -891,12 +891,19 @@ impl AppState {
|
|||||||
.with_record_turn(
|
.with_record_turn(
|
||||||
Arc::new(AppRecordTurnProvider) as Arc<dyn RecordTurnProvider>,
|
Arc::new(AppRecordTurnProvider) as Arc<dyn RecordTurnProvider>,
|
||||||
Arc::clone(&clock) as Arc<dyn Clock>,
|
Arc::clone(&clock) as Arc<dyn Clock>,
|
||||||
)
|
),
|
||||||
// Registre des sessions IA structurées (§17.5) : permet à `ask_agent` de
|
// NB (régression corrigée) : on ne câble PAS `.with_structured(...)` ici.
|
||||||
// router une cible structurée (sans PTY) sur sa session et de la drainer via
|
// Décision produit lot B-2 (« Option 1 Terminal + MCP », cf. construction
|
||||||
// `drain_with_readiness` — le `Final` réveille le round-trip ET marque l'agent
|
// de `LaunchAgent` plus haut) : la fabrique structurée est décâblée, donc
|
||||||
// `Idle` (readiness/heartbeat lot 1).
|
// AUCUN agent n'a de session structurée vivante — tous tournent en PTY brut
|
||||||
.with_structured(Arc::clone(&structured_sessions)),
|
// 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) ---
|
// --- Windows (L10) ---
|
||||||
|
|||||||
Reference in New Issue
Block a user