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>
39 lines
2.0 KiB
Markdown
39 lines
2.0 KiB
Markdown
---
|
|
id: "c3e1fbcc-cedc-48a5-a00e-b22ea8dc90de"
|
|
number: 33
|
|
title: "[Dette] Fallthrough silencieux du routage structuré (lifecycle.rs:1705)"
|
|
status: "closed"
|
|
priority: "high"
|
|
sprint: "e28a4d53-8bd2-446a-b0ac-2a017373b8b2"
|
|
links: [{"target":"#32","kind":"relatesTo"},{"target":"#14","kind":"relatesTo"}]
|
|
agentRefs: []
|
|
createdBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"}
|
|
updatedBy: {"kind":"agent","agent_id":"a6ced819-b893-4213-b003-9e9dc79b9641"}
|
|
createdAt: 1783492190391
|
|
updatedAt: 1784048928225
|
|
version: 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 :
|
|
|
|
```rust
|
|
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. |