Files
storytime/docs/specs/jalon-4-espace-enfant/02-navigation-verrouillee.md
T
Vincent Bourdon 16fd4c8c36 docs: cadrage initial Storytime (specs par jalon, roadmap, CLAUDE.md)
Lecteur d'histoires cadenassé pour le coucher (Android/Flutter).
- CLAUDE.md : principes craftsmanship/TDD/clean code/clean archi + decisions techniques
- ROADMAP.md : suivi haut niveau des 7 jalons, a tenir a jour par etape
- docs/specs/ : specs completes decoupees par jalon, etapes en sous-fichiers
- .gitignore Flutter (pubspec.lock versionne, projet applicatif)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 17:03:33 +02:00

2.2 KiB

4.2 — Navigation verrouillée

Objectif

Faire en sorte que l'espace enfant s'épingle automatiquement et qu'aucune action de l'interface ne permette de sortir de l'app ou d'atteindre le système.

Périmètre & hors-périmètre

  • Inclus : déclenchement auto de l'épinglage à l'entrée de l'espace enfant, audit des sorties UI possibles, gestion du bouton retour.
  • Exclus : la porte parentale (J5) ; les limites (J6).

Dépendances

1.2 (use cases de verrouillage), 4.1 (espace enfant existant).

Conception

  • À l'entrée de l'espace enfant : StartLockUseCase appelé (via le contrôleur ou un observateur de cycle de vie). Gérer LockUnsupportedFailure → message parent au moment de la config, pas de crash.
  • Audit des échappatoires UI :
    • Pas de lien hypertexte ouvrant un navigateur, pas d'intent externe, pas de partage.
    • Bouton retour Android : intercepté (PopScope/WillPopScope) pour ne pas quitter l'app.
    • L'icône ⚙️ d'accès parent (posée ici) mène à la porte parentale (J5) ; sans le code, on ne sort pas de l'app.
  • Réafficher/relancer l'épinglage si l'app revient au premier plan (cycle de vie resumed).
  • Honnêteté UI : ne pas afficher de message laissant croire à un verrouillage inviolable.

Plan TDD

  1. Red : child_shell_locking_test.dart (widget/contrôleur) — à l'affichage de l'espace enfant, StartLockUseCase est appelé (provider mocké). En unsupported, pas de crash et état dégradé documenté.
  2. Green : brancher l'appel d'épinglage au cycle de vie de l'écran.
  3. Red : child_shell_back_button_test.dart — le PopScope empêche la fermeture (callback de pop non déclenché / app non quittée).
  4. Green : implémenter l'interception.
  5. Validation manuelle : sur appareil, parcourir l'écran enfant et tenter toutes les sorties (retour, accueil, multitâche) → bloquées ; consigner.
  6. Refactor.

Definition of Done

  • Tests d'épinglage auto + interception retour verts.
  • Audit manuel des sorties UI réalisé sur appareil, résultats consignés.
  • tool/check.sh passe ; étape 4.2 cochée dans ROADMAP.md.

Risques / notes

  • Le re-épinglage au resumed doit éviter les boucles/flickers : tester le comportement de reprise.