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>
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
# 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).
|
||||
Reference in New Issue
Block a user