# GAB-318 · RevisionLearningParentRevision — « Réviser avec un parent »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechRevisionLearning
**Critère validé :** changer le JSON change l'intro, les modes et le bilan sans modifier le HTML. ✅ check.py 12/12.

## Pack (structure officielle par-GAB)
```
GAB-318/
  renderer.html            ← moteur révision parent (ne pas modifier par instance)
  instance.example.json    ← SOURCE DE VÉRITÉ (contenu réel, à plat)
  schema.contract.json     ← contrat de validation
  README-contract.md       ← ce fichier
```

## Champs requis (instance, à plat)
`gab_id` · `parent_revision_id` · `parent_role_intro` · `session_label` · `same_device_privacy_note` · `linked_account_privacy_note` · `mode_options[]{mode_id, label, icon}` · `primary_cta{label, action}`

Optionnels : `default_mode`, `gentle_summary_prefix`, `time_limit_respected_label`, `no_guilt_label`, `use_when[]`, `do_not_use_when[]`.

## Ce qui vient du JSON vs HTML
- **JSON** : texte intro du rôle parent, label des modes (📱 / 🔗), session_label pour le bilan doux, messages de confidentialité (par mode), libellé du bouton CTA.
- **HTML** : layout deux boutons de mode, panneau bilan, moteur de sélection de mode, affichage conditionnel du message de confidentialité.

## Archétype : deux modes de confidentialité
Le GAB pivote sur le mode actif au moment du lancement :
- **same** (`Même appareil`) → `same_device_privacy_note` affiché dans le bilan.
- **link** (`Compte lié`) → `linked_account_privacy_note` affiché dans le bilan.

Le bilan est toujours « doux » : `gentle_summary_prefix` + `session_label` + note de confidentialité + `no_guilt_label` + `time_limit_respected_label`.

## Garde-fous (child_safety)
- **Confidentialité enfant obligatoire** : les deux notes de confidentialité sont `required_fields`. Sans elles, le renderer est `BLOCKED`.
- **Bilan sans culpabilité** : `no_guilt_label` présent dans le rendu final (optionnel dans l'instance, intégré dans le moteur avec valeur de secours).
- **Limite de temps** : `time_limit_respected_label` signale que la session est bornée dans le temps.
- **BLOCKED** si `parent_role_intro`, `session_label`, `mode_options`, `same_device_privacy_note` ou `linked_account_privacy_note` est absent.

## QA à vérifier
1. Modifier `session_label` → bilan change sans toucher au HTML (critère d'or).
2. Clic mode `link` → bilan affiche `linked_account_privacy_note`.
3. `mode_options:[]` → BLOCKED propre.
4. `same_device_privacy_note` absent → BLOCKED propre.
5. Bouton désactivé après lancement (pas de double-clic).
6. Responsive 375/768/1024 — aucun débordement.

## Source
`INDEX-300-revisionlearning-GAB-316-320-PLAYABLE.html` (stage `data-tpl="318"`, handlers `d318Mode` et `d318Bilan`).
