2.0 KiB
2.0 KiB
Étape 2 – Blocage après "Suivant"
Reproduction
- Plateforme : Web & mobile (Expo) – navigation
Routes.CreateLyricsWithAi. - Préconditions : Projet sans paroles existantes.
- Étapes :
- Lancer l'atelier d'écriture et sélectionner un objectif (Étape 1).
- Renseigner un contexte dans l'input (Étape 2).
- Appuyer sur
Suivant.
- Résultat observé : le bouton devient inactif, l'écran reste figé sur l'étape 2 et il est impossible de poursuivre car le swipe est désactivé.
Analyse & cause racine
- L'étape dépend de
SwiperFlatListavecdisableGesture={true}: seule la navigation programmée viascrollToIndexpermet d'avancer. - L'appel
scrollRef.current.scrollToIndexlevait par intermittence une exception (Invariant Violation: scrollToIndex out of range) lorsque la mesure des vues n'était pas prête au moment du clic. - L'erreur était avalée silencieusement (
catch {}) ce qui laissait l'index interne sur1et donc l'utilisateur bloqué sur Étape 2.
Correctif
- Ajout d'une logique de re-tentative autour de
scrollToIndexavec journalisation pour diagnostiquer les cas anormaux. - Clamp de l'index (
Math.min(idx + 1, MAX_STEP_INDEX)) pour éviter toute sortie de plage. - Progression recalculée en même temps que la navigation afin d'éviter les états intermédiaires incohérents.
Validation manuelle
- Rejouer le scénario de reproduction sur web et mobile (Expo Go).
- Vérifier la console : absence d'avertissements
[CreateLyricsWithAi] scrollToIndex failed. - Confirmer que l'écran passe correctement à "Étape 3: Quelle émotion veux-tu transmettre ?" et que le bouton
Suivantse réactive après sélection d'une émotion. - Revenir en arrière (
Précédent) pour s'assurer que l'étape 2 reste éditable et que l'avancement se met à jour (progression dynamique).
Points de suivi
- Ajouter une suite E2E complète une fois l'infrastructure de tests dispo (Detox/Playwright) pour vérifier la navigation multi-étapes sans interaction manuelle.