16fd4c8c36
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>
2.2 KiB
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 :
StartLockUseCaseappelé (via le contrôleur ou un observateur de cycle de vie). GérerLockUnsupportedFailure→ message parent au moment de la config, pas de crash. - Audit des échappatoires UI :
- Pas de lien hypertexte ouvrant un navigateur, pas d'
intentexterne, 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.
- Pas de lien hypertexte ouvrant un navigateur, pas d'
- 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
- Red :
child_shell_locking_test.dart(widget/contrôleur) — à l'affichage de l'espace enfant,StartLockUseCaseest appelé (provider mocké). Enunsupported, pas de crash et état dégradé documenté. - Green : brancher l'appel d'épinglage au cycle de vie de l'écran.
- Red :
child_shell_back_button_test.dart— lePopScopeempêche la fermeture (callback de pop non déclenché / app non quittée). - Green : implémenter l'interception.
- Validation manuelle : sur appareil, parcourir l'écran enfant et tenter toutes les sorties (retour, accueil, multitâche) → bloquées ; consigner.
- 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.shpasse ; étape 4.2 cochée dansROADMAP.md.
Risques / notes
- Le re-épinglage au
resumeddoit éviter les boucles/flickers : tester le comportement de reprise.