From af90c66e480853c3828f872663ecea5fea2f1ed6 Mon Sep 17 00:00:00 2001 From: Blomios Date: Sat, 22 Aug 2026 16:39:06 +0200 Subject: [PATCH] =?UTF-8?q?chore(tickets):=20cl=C3=B4ture=20#239=20apr?= =?UTF-8?q?=C3=A8s=20QA=20verte=20et=20merge=20local=20aa16576?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .ideai/tickets/239/carnet.md | 17 +++++++++++++++++ .ideai/tickets/239/issue.md | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 .ideai/tickets/239/carnet.md create mode 100644 .ideai/tickets/239/issue.md diff --git a/.ideai/tickets/239/carnet.md b/.ideai/tickets/239/carnet.md new file mode 100644 index 00000000..607c6b5a --- /dev/null +++ b/.ideai/tickets/239/carnet.md @@ -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. \ No newline at end of file diff --git a/.ideai/tickets/239/issue.md b/.ideai/tickets/239/issue.md new file mode 100644 index 00000000..8dd33fde --- /dev/null +++ b/.ideai/tickets/239/issue.md @@ -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. \ No newline at end of file