dev-tourclientBUG-007RESOLVED

Sherlock — message utilisateur dupliqué à l'enquête initiale

Créé

Symptôme

Sur /sherlock, après avoir soumis un symptôme depuis l'écran d'accueil, la bulle du message utilisateur apparaît deux fois dans le chat (capture iPhone TestFlight 2026-05-24).

Diagnostic

Fichier : components/sherlock/sherlock-chat.tsx:137-140

Le useEffect de kickoff qui appelle sendTurn(initialSymptom, ...) au mount n'avait aucune garde anti-double-invocation. Or Next.js active reactStrictMode: true par défaut (non désactivé dans next.config.ts:1-10) → React monte/démonte/remonte chaque composant en dev → l'effet s'exécute 2 fois → la bulle user est pushée 2× dans le state via setBubbles ligne 146.

Effet secondaire : la requête POST /api/sherlock part aussi 2 fois, consommation 2× du quota Max OAuth à chaque enquête.

Fix

Ajout d'un useRef sentinelle pour rendre l'effet idempotent.

const kickoffRef = useRef(false);
useEffect(() => {
  if (kickoffRef.current) return;
  kickoffRef.current = true;
  void sendTurn(initialSymptom, initialImages ?? [], undefined);
}, []);

Vérifications

  • tsc --noEmit sur dev-tour : pas d'erreur
  • Pattern standard React 18 Strict Mode (cf. doc officielle "Resetting state on remount")
  • L'effet est volontairement non-réactif aux changements d'initialSymptom (kickoff one-shot)

Chemin disque : /home/debian/superApp_V1/bugs/dev-tour/BUG-007-sherlock-message-utilisateur-duplique/