Files
storytime/docs/specs/jalon-6-limites/02-avertissements.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

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).