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

Jalon 1 — Verrouillage / épinglage ⚠️ BLOQUANT

Objectif

Valider et implémenter la capacité de l'app à empêcher la sortie facile via le Screen Pinning natif Android, et exposer cette capacité au reste de l'app par une interface de domaine propre.

Pourquoi bloquant

C'est l'exigence n°1 du produit. Tant que l'épinglage n'est pas prouvé sur la tablette cible, on n'investit pas dans le reste. Si ni le plugin ni le fallback natif ne tiennent, on remonte au choix matériel (tablette dédiée / mode kiosque Device Owner) avant d'aller plus loin.

Rappel des limites (à respecter dans l'UI)

  • La sortie réelle dépend du mécanisme natif Android + PIN tablette, pas du code parental.
  • L'épinglage ne survit pas à un redémarrage.
  • Côté parent : prévoir un rappel pour activer « épinglage » + « exiger le PIN au désépinglage » dans les réglages Android.

Étapes

  1. 1.1 — Spike kiosk_mode sur appareil réelbloquant
  2. 1.2 — Service de verrouillage (domaine + use cases)
  3. 1.3 — Fallback natif Kotlin (platform channel)

Definition of Done (jalon)

  • Sur la tablette cible : l'app s'épingle, l'enfant ne peut pas sortir par les gestes normaux, le désépinglage exige le PIN Android.
  • LockingRepository + use cases StartLockUseCase/StopLockUseCase/IsLockedUseCase testés (impl. mockée).
  • Décision tranchée : plugin suffisant ou fallback natif retenu — consignée dans le journal de la roadmap.
  • ROADMAP.md : 1.1→1.3 cochées (1.3 « N/A » si le plugin suffit).