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

2.2 KiB

5.1 — Création du code au premier lancement

Objectif

Au tout premier lancement, obliger le parent à créer un code à 4 chiffres (saisi deux fois pour confirmation) avant d'accéder à l'app.

Périmètre & hors-périmètre

  • Inclus : détection « pas de code défini », écran de création (double saisie + validation), enregistrement.
  • Exclus : stockage technique détaillé (5.2), porte d'accès (5.3).

Dépendances

Jalon 0. (Le stockage de 5.2 peut être développé en parallèle/avant ; ici on consomme son interface.)

Conception

  • Domain (features/parental/domain/) :
    • ParentalCode (value object) : exactement 4 chiffres ; invariant validé à la construction (sinon Err(InvalidCodeFormat)).
    • ParentalCodeRepository (interface) : Future<bool> isConfigured(), Future<Result<Unit>> setCode(ParentalCode code), Future<bool> verify(ParentalCode code). (Impl. en 5.2.)
  • Application :
    • IsCodeConfiguredUseCase, SetParentalCodeUseCase (refuse si déjà configuré, ou autorise via flux dédié — documenter).
  • Presentation :
    • Au démarrage, IsCodeConfiguredUseCase décide : non configuré → CreateCodeView bloquant ; configuré → espace enfant.
    • CreateCodeView : saisie 1 + saisie 2, contrôle d'égalité, format 4 chiffres, gros pavé numérique adapté.

Plan TDD

  1. Red : parental_code_test.dartParentalCode('1234') OK ; '12', '12a4', '' → invalides.
  2. Green : implémenter le value object.
  3. Red : set_parental_code_use_case_test.dart — délègue à setCode ; refuse si déjà configuré (selon règle documentée).
  4. Green : implémenter.
  5. Red : create_code_view_test.dart (widget) — deux saisies différentes → erreur affichée, pas d'enregistrement ; deux saisies égales valides → SetParentalCodeUseCase appelé.
  6. Green : implémenter l'écran.
  7. Refactor.

Definition of Done

  • Tests value object + use case + widget verts.
  • Premier lancement impose la création ; lancement ultérieur ne la redemande pas.
  • tool/check.sh passe ; étape 5.1 cochée dans ROADMAP.md.

Risques / notes

  • Ne jamais logguer le code. Le value object ne doit pas exposer la valeur en clair dans toString.