Skip to content

BRIC-18: Fix duplicate HUMAN messages - add openWhenHidden:true#15

Merged
Kaiohz merged 1 commit into
mainfrom
BRIC-18/fix-duplicate-messages-openwhenhidden
May 21, 2026
Merged

BRIC-18: Fix duplicate HUMAN messages - add openWhenHidden:true#15
Kaiohz merged 1 commit into
mainfrom
BRIC-18/fix-duplicate-messages-openwhenhidden

Conversation

@Kaiohz
Copy link
Copy Markdown
Contributor

@Kaiohz Kaiohz commented May 21, 2026

Jira

BRIC-18

Changes

  • Add openWhenHidden: true to fetchEventSource call in chatApi.ts
  • Prevents @microsoft/fetch-event-source from aborting and reconnecting the SSE stream when the browser tab becomes hidden
  • This reconnection was causing duplicate HUMAN messages to be persisted on the server

Related: SoluDevTech/composable-agents#24

…b switch

Prevents @microsoft/fetch-event-source from aborting and reconnecting
the SSE stream when the browser tab becomes hidden, which would cause
duplicate HUMAN messages to be persisted.
@Kaiohz Kaiohz marked this pull request as ready for review May 21, 2026 07:06
@Kaiohz
Copy link
Copy Markdown
Contributor Author

Kaiohz commented May 21, 2026

🔍 Code Review — BRIC-18: Fix duplicate HUMAN messages

Analyse du changement

Le fix ajoute openWhenHidden: true à l'appel fetchEventSource dans chatApi.ts. C'est la bonne approche pour résoudre le bug de duplication.

Raison du bug : Par défaut, @microsoft/fetch-event-source ferme la connexion SSE quand le tab navigateur passe en arrière-plan (visibility hidden), puis rouvre une nouvelle connexion au retour en foreground. Pendant cette reconnexion, le serveur reçoit une nouvelle requête et peut persister un doublon du message HUMAN.

Pourquoi openWhenHidden: true est correct : Ce flag indique à la lib de maintenir la connexion SSE active même quand la page est en background, évitant ainsi la reconnexion qui causait les doublons.

Qualité du code

Changement minimal et ciblé — 1 ligne ajoutée, 0 supprimée, 1 fichier impacté. C'est le genre de fix qu'on aime.

Bonne connaissance de la lib — L'option openWhenHidden est exactement le bon paramètre de @microsoft/fetch-event-source pour ce problème.

Pas de side-effect évident — Garder la connexion SSE ouverte en background est le comportement souhaité pour un chat en streaming.

Suggestions d'amélioration

  1. Défense en profondeur côté serveur : Le fix côté client est bon, mais le serveur devrait aussi avoir une protection contre les doublons (idempotency key, dédup par threadId + message content + timestamp, etc.). Si le client perd la connexion pour une autre raison (réseau instable, timeout serveur), la reconnexion SSE pourrait toujours causer des doublons. Le openWhenHidden ne protège que le cas du tab en arrière-plan.

  2. Test : Est-ce qu'il y a un test pour ce cas ? Un test E2E ou integration test qui vérifie que les messages ne se dupliquent pas lors d'une reconnexion SSE serait idéal.

  3. Commentaire inline : Un petit commentaire au-dessus de openWhenHidden: true expliquant pourquoi c'est nécessaire (ex: // Keep SSE connection alive when tab is hidden to prevent duplicate messages on reconnect) aiderait les devs futurs qui ne connaissent pas ce piège de fetch-event-source.

Score

7/10

  • Le fix est correct, minimal et bien ciblé → ✅
  • La PR est claire avec un bon lien Jira → ✅
  • Manque un commentaire explicatif inline → -1
  • Pas de test pour le cas de regression → -1
  • Le serveur devrait aussi se protéger contre les doublons → -1

Verdict : LGTM avec suggestion d'ajouter un commentaire inline. Les autres points peuvent être traités dans un ticket séparé.

@Kaiohz Kaiohz merged commit 4e35682 into main May 21, 2026
1 check passed
@Kaiohz Kaiohz deleted the BRIC-18/fix-duplicate-messages-openwhenhidden branch May 21, 2026 07:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant