# GAB-317 · RevisionLearningExamSprint — « Sprint d'examen »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechRevisionLearning
**Critère validé :** changer le JSON change le sprint (segments, messages, pause) sans modifier le HTML. ✅ check.py 12/12.

## Pack (structure officielle par-GAB)
```
GAB-317/
  renderer.html            ← moteur sprint d'examen (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` · `sprint_id` · `segments[]{id,label,duration_min}` · `training_disclaimer`

Optionnels : `title`, `break_after_segment`, `break_message`, `segment_done_message`, `completion_message`, `primary_cta{label,action}`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre du sprint, disclaimer entraînement/examen, liste et libellés des segments, durées, id du segment pause, message de pause, message intermédiaire (avec `{n}`), message de fin, libellé du bouton.
- **HTML** : layout carte, affichage segments ordonnés, logique clique-pour-compléter, panel feedback, slots, footer.

## Archétype pédagogique
Sprint d'examen segmenté : enchaîner des segments courts (ex : 3 min chacun) avec pause anti-surcharge cognitive intercalée. Garde-fou central : le `training_disclaimer` distingue obligatoirement l'entraînement de l'examen officiel noté.

## Garde-fous (child_safety)
- **training_disclaimer obligatoire** : toujours afficher que c'est un entraînement, jamais simuler un examen officiel.
- **Pause cognitive** : `break_after_segment` permet d'insérer une pause à n'importe quel segment — protège contre la surcharge.
- **BLOCKED** si `sprint_id` absent / `segments` vides / `training_disclaimer` absent.
- **Jamais utiliser** pour un examen officiel noté (do_not_use_when source).

## QA à vérifier
1. Modifier `label`/`duration_min` d'un segment → rendu change sans toucher au HTML (critère d'or).
2. `segments:[]` → BLOCKED propre.
3. `training_disclaimer` absent → BLOCKED propre.
4. Clic segment 2 → `break_message` affiché.
5. Clic tous segments → `completion_message` affiché en panel ok.
6. Responsive 375/768/1024 — aucun débordement.

## external_refs / dependencies
Aucune dépendance hors-lot. Ce GAB est autonome dans le module EdTechRevisionLearning.
Voir GAB-316 (flash isolé) pour le cas d'usage flash sans sprint ; voir GAB-319 (récap progression) pour l'étape post-sprint.

## Source
`INDEX-300-revisionlearning-GAB-316-320-PLAYABLE.html` (stage `data-tpl="317"`, handlers `d317Seg`).
