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 --noEmitsur 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/