chore(tickets): clôture #239 après QA verte et merge local aa16576

This commit is contained in:
2026-08-22 16:39:06 +02:00
parent aa165763f6
commit af90c66e48
2 changed files with 34 additions and 0 deletions

View File

@ -0,0 +1,17 @@
---
issueRef: "#239"
version: 6
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
updatedAt: 1787409503550
---
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.

View File

@ -0,0 +1,17 @@
---
id: "9bd05320-df0b-4dae-bf5f-0ce986924434"
number: 239
title: "Échec de finalisation de réponse modèle sur un autre projet"
status: "qa"
priority: "high"
sprint: null
links: []
agentRefs: []
attachments: []
createdBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
updatedBy: {"kind":"agent","agent_id":"a6c6ea12-bfc6-4bdc-8031-324102dfa34d"}
createdAt: 1787408846348
updatedAt: 1787409503550
version: 6
---
Le 22 août 2026, sur un autre projet (capture fournie par l'utilisateur, onglet GameTime), après un long message utilisateur dans la conversation avec Main, la surface affiche un toast/état d'erreur en bas: `Échec — La réponse du modèle n'a pas pu être finalisée.`. Objectif: diagnostiquer pourquoi une réponse agent/modèle ne se finalise pas dans certains contextes projet et corriger la robustesse/runtime ou au minimum la surface d'erreur et la reprise.