# GAB-319 · RevisionLearningProgressRecap — « Récap de progression »

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

## Pack (structure officielle par-GAB)
```
GAB-319/
  renderer.html            ← moteur récap progression (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` · `recap_id` · `evidence_label` · `evidence_text` · `remaining_label` · `remaining_text` · `next_action_cta_label` · `next_action_body`

Optionnels : `title`, `next_action_title`, `no_overcert_notice`, `sync_pending`.

## Ce qui vient du JSON vs HTML
- **JSON** : libellé et corps du bloc acquis, libellé et corps du bloc reste, libellé du bouton CTA, titre et corps du panel next action, notice anti-sur-certification.
- **HTML** : structure des deux blocs doc-paper, bouton structurel, panel, layout, fallback BLOCKED.

## Garde-fous (child_safety / anti-sur-certification)
- **Anti-sur-certification** : le renderer n'affiche jamais « maîtrisé » de lui-même. C'est `evidence_text` qui porte la preuve factuelle (ex: « 4 cartes réussies 2 fois de suite »). Si la preuve est absente → BLOCKED.
- **BLOCKED** si `evidence_text`, `remaining_text` ou `next_action_body` est absent.
- `no_overcert_notice` : si présent, affiché en muted sous le panel next action — garde-fou explicite pour l'élève.
- `sync_pending` : signal optionnel indiquant qu'une synchronisation côté système est en attente.

## QA à vérifier
1. Modifier `evidence_text`/`remaining_text`/`next_action_body` → rendu change sans toucher au HTML (critère d'or).
2. `evidence_text` absent → BLOCKED propre.
3. CTA → panel affiche next_action_body + no_overcert_notice si présent.
4. Instance externe injectée via `ENGINE.init(ext)` → rendu remplacé.
5. Responsive 375/768/1024.

## Source
`INDEX-300-revisionlearning-GAB-316-320-PLAYABLE.html` (stage `data-tpl="319"`, handler `d319Next()`).
