# 6.2 — Avertissements doux ## Objectif Prévenir l'enfant en douceur, **en amont** de l'échéance, sans interrompre l'écoute : « Encore 5 minutes 🌙 », « C'est la dernière histoire ⭐ ». ## Périmètre & hors-périmètre - Inclus : observation de `LimitStatus`, affichage non bloquant des avertissements, anti-répétition. - Exclus : l'arrêt et l'écran de fin (6.3). ## Dépendances 6.1 (`LimitEvaluator`, `LimitStatus`), 2.x (lecture en cours), 4.x (espace enfant). ## Conception - **Presentation** (`features/limits/presentation/`) : - `LimitsController` (Riverpod) : combine les compteurs (temps via un tick périodique, histoires via les événements de lecture) et appelle `EvaluateLimitsUseCase` → expose `LimitStatus`. - Sur transition vers `warnTimeSoon` / `warnLastStory` : afficher un overlay/snackbar doux (texte + emoji), **non bloquant**, qui se referme seul. La lecture continue. - **Anti-répétition** : chaque avertissement ne s'affiche qu'une fois par session/seuil (mémoriser le dernier `LimitStatus` notifié). - Ton et style : doux, rassurant, cohérent avec le thème coucher (0.3). - Le tick de temps : un timer léger qui met à jour `elapsed` et réévalue ; s'arrête quand la lecture est en pause. ## Plan TDD 1. **Red** : `limits_controller_test.dart` — séquence d'états simulés : passage à `warnTimeSoon` déclenche **une** notification ; rester en `warnTimeSoon` ne la re-déclenche pas ; `warnLastStory` notifie une fois. 2. **Green** : implémenter le contrôleur + anti-répétition. 3. **Red** : `warning_overlay_test.dart` (widget) — sur `warnTimeSoon`, le texte « Encore 5 minutes » apparaît puis disparaît ; la lecture n'est pas interrompue (le lecteur reste monté/actif). 4. **Green** : implémenter l'overlay. 5. **Refactor**. ## Definition of Done - Tests contrôleur (anti-répétition) + widget verts. - Démo : les avertissements apparaissent au bon moment, une seule fois, sans couper le son. - `tool/check.sh` passe ; étape 6.2 cochée dans `ROADMAP.md`. ## Risques / notes - Le timer doit se mettre en pause avec la lecture pour ne pas avertir/arrêter à tort pendant une pause. - Textes des messages = constantes nommées (faciles à ajuster / traduire plus tard).