# GAB-163 · GameLearningDebrief — « Débrief pédagogique du jeu »

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

## Pack (structure officielle par-GAB)
```
GAB-163/
  renderer.html            ← moteur débrief post-jeu (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
```

## Archétype

**GameLearningDebrief** : écran méta-pédagogique affiché après la séquence de jeu. Il ne célèbre pas le score (→ GAB-162) mais **explicite ce que le jeu a fait travailler** : compétences mobilisées, erreurs fréquentes repérées, suite recommandée. Positionné dans la séquence après GAB-162 (célébration arcade) et avant GAB-164 (revanche ciblée) ou GAB-165 (mini-boss).

## Champs requis (instance, à plat)
`gab_id` · `debrief_id` · `title` · `skills_section{heading, icon, text, highlighted_terms}` · `primary_cta{label, action}`

## Champs optionnels
`subtitle` · `head_emoji` · `errors_section{heading, icon, items[], highlighted_terms[]}` · `next_section{heading, icon, text, highlighted_terms[], external_refs[]}` · `_note_dev` · `renderer_key`

## Ce qui vient du JSON vs HTML
- **JSON** : tous les textes (titre, sections, items erreurs, suite), les icônes emoji, les termes mis en évidence (`<b>`), le libellé du bouton CTA, l'action déclenchée.
- **HTML** : structure en 3 sections (skills / errors / next), bouton structurel, layout, gestion du `hidden`, moteur de validation.

## Garde-fous (child_safety)
- **Anti-invention** : les `external_refs` (ex : GAB-143) sont déclarés explicitement dans le JSON — jamais inventés par le renderer.
- **Sections conditionnelles** : `errors_section` et `next_section` ne sont rendues que si présentes et non vides — jamais un contenu fictif.
- **highlighted_terms** : uniquement des termes réellement présents dans le texte source.
- **BLOCKED** si `title`, `skills_section.text` ou `primary_cta` absents.

## QA à vérifier
1. Modifier `title`/`skills_section.text` → rendu change sans toucher au HTML (critère d'or).
2. `title` absent → BLOCKED propre.
3. `errors_section` absent → section masquée (hidden), pas d'erreur JS.
4. `next_section` absent → section masquée (hidden), pas d'erreur JS.
5. CTA cliqué → panel confirmation avec `action` de l'instance.
6. Responsive 375/768/1024.

## external_refs / dependencies
- `next_section.external_refs` peut référencer des GAB d'autres lots (ex : GAB-143 de lot DocumentLearning).
- Ces références sont **déclaratives** (liste de strings dans le JSON) — le renderer ne résout pas ces liens, il les déclare pour que le moteur parent les consomme.
- Aucune dépendance de rendu vers un autre GAB : ce renderer est autonome.

## Source
`INDEX-300-gamelearning-GAB-161-165-PLAYABLE.html` (stage `data-tpl="163"`, styles `.ld-*`).
