Files
IdeA/.ideai/tickets/239/carnet.md

17 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
issueRef: "#239"
version: 7
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
updatedAt: 1787409561579
---
2026-08-22
- Signalement utilisateur via capture sur un autre projet (GameTime): après un long message utilisateur dans la conversation avec Main, la surface affiche `Échec — La réponse du modèle n'a pas pu être finalisée.`.
- Cadrage UX: distinguer échec transitoire, réponse tronquée, fin non reçue et échec sans contenu; ne jamais masquer le contenu partiel; proposer des actions de reprise adaptées.
- Cadrage Architecture: hypothèse principale = stream structuré fermé sans `Final` reconnu ou correctement propagé; instrumentation recommandée sur start/event-stream/close/error-mapping/transcript.
- Git: branche locale `fix/239-modele-reponse-non-finalisee` créée depuis `develop` @ `ce03471`.
- DevBackend: cause racine confirmée côté runtime Claude structuré. `ClaudeSdkSession` pouvait produire des `TextDelta` puis fermer sans `ReplyEvent::Final` si la ligne `result` Claude manquait ou n’était pas reconnue; la UI interprétait alors le stream comme non finalisé malgré du contenu exploitable. Fix: fallback qui synthétise un `ReplyEvent::Final` à partir des `TextDelta` accumulés, sans masquer un `Final`, `Error` ou `RateLimited` réel.
- DevFrontend: `CustomAgentChatView` préservait déjà le contenu partiel; la surface à corriger était `useTicketAssistant`, qui remplaçait le contenu streamé par le message d’échec sur un chunk terminal `error`. Fix frontend: conservation du contenu partiel + qualification du cas (`Réponse partielle — fin non reçue`, `Réponse tronquée`, `échec transitoire possible`, `Échec sans contenu`).
- Première QA 2026-08-22: frontend vert, nouveaux tests ciblés backend verts, mais un test backend existant échoue encore: `session::tests::stream_without_final_is_silently_ok_at_adapter_level` dans `crates/infrastructure/src/session/mod.rs:1540`.
- Symptôme QA exact: l’ancien test attend encore `0` Final synthétique (`assertion left == right failed: comportement actuel: aucun Final fabriqué`, left=1 right=0).
- Retour DevBackend suite QA: alignement du test contradictoire existant sur le nouveau contrat #239. Fichiers backend désormais modifiés: `crates/infrastructure/src/session/claude.rs` et `crates/infrastructure/src/session/mod.rs`. Re-tests backend ciblés verts.
- Étape courante: revalidation QA indépendante complète.