Files
musicland/docs/qa/step2-navigation.md
2025-10-29 15:36:12 +01:00

2.0 KiB
Raw Permalink Blame History

Étape 2 Blocage après "Suivant"

Reproduction

  • Plateforme : Web & mobile (Expo) navigation Routes.CreateLyricsWithAi.
  • Préconditions : Projet sans paroles existantes.
  • Étapes :
    1. Lancer l'atelier d'écriture et sélectionner un objectif (Étape 1).
    2. Renseigner un contexte dans l'input (Étape 2).
    3. 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 SwiperFlatList avec disableGesture={true} : seule la navigation programmée via scrollToIndex permet d'avancer.
  • L'appel scrollRef.current.scrollToIndex levait 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 sur 1 et donc l'utilisateur bloqué sur Étape 2.

Correctif

  • Ajout d'une logique de re-tentative autour de scrollToIndex avec 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

  1. Rejouer le scénario de reproduction sur web et mobile (Expo Go).
  2. Vérifier la console : absence d'avertissements [CreateLyricsWithAi] scrollToIndex failed.
  3. Confirmer que l'écran passe correctement à "Étape 3: Quelle émotion veux-tu transmettre ?" et que le bouton Suivant se réactive après sélection d'une émotion.
  4. 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.