Files
IdeA/.ideai/tickets/33/issue.md
Blomios 8e481aed69 chore(ideai): état d'orchestration du sprint #13 (transport HTTP/WS + surface web)
Versionne l'état runtime IdeA produit pendant le sprint #13 : store de
tickets (dont les nouveaux #55 à #67), compteur et index, notes de mémoire
projet des lots F0 à F5, et journal des tâches de fond.

Séparé du code applicatif conformément à la convention du dépôt
(cf. ad1f225, a244f32) : métadonnée d'orchestration last-writer-wins,
sans impact sur le build.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 10:32:39 +02:00

2.0 KiB

id, number, title, status, priority, sprint, links, agentRefs, createdBy, updatedBy, createdAt, updatedAt, version
id number title status priority sprint links agentRefs createdBy updatedBy createdAt updatedAt version
c3e1fbcc-cedc-48a5-a00e-b22ea8dc90de 33 [Dette] Fallthrough silencieux du routage structuré (lifecycle.rs:1705) closed high e28a4d53-8bd2-446a-b0ac-2a017373b8b2
target kind
#32 relatesTo
target kind
#14 relatesTo
kind agent_id
agent a6ced819-b893-4213-b003-9e9dc79b9641
kind agent_id
agent a6ced819-b893-4213-b003-9e9dc79b9641
1783492190391 1784048928225 4

Cause racine structurelle identifiée par Architect lors du cadrage de #32.

LaunchAgent::execute (crates/application/src/agent/lifecycle.rs:1705) route vers la session structurée avec :

if let (Some(factory), Some(structured), true) = (
    self.session_factory.as_ref(), self.structured.as_ref(),
    profile.structured_adapter.is_some(),
)

Ce if let confond deux situations distinctes :

  • « profil structuré, mais factory non câblée » (cas de l'UI : state.rs:1466 construit le LaunchAgent sans .with_structured(...)) ;
  • « profil non structuré » (vrai profil PTY historique).

Dans les deux cas on tombe silencieusement, sans erreur ni branche explicite, sur lifecycle.rs:1746 self.pty.spawn(spec).

C'est ce fallthrough qui a produit le bug #32 : un profil openAiCompatible (aucun binaire) atteignait CommandBuilder::new("openai-compatible"). Claude et Codex tombent dans le même fallthrough ; ça ne passe inaperçu que parce qu'un binaire claude/codex existe dans le PATH.

Le fix de #32 neutralise le cas transport-backed, mais le piège reste armé pour le prochain adapter.

Attendu : remplacer le if let par un match explicite qui distingue les deux cas, et décider du comportement quand un profil structuré rencontre une factory non câblée (erreur explicite plutôt que dégradation muette vers le PTY).

Hors périmètre de #32 (déposé comme bug). Cadrage Architect requis avant implémentation.