# GAB-126 · ExerciseCorrectionPanel — « Panneau de correction »

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

## Pack (structure officielle par-GAB)
```
GAB-126/
  renderer.html            ← moteur panneau de correction (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` · `correction_panel_id` · `question` · `expected_answer` · `primary_cta{label,action}`

Optionnels : `title`, `student_answer`, `explanation`.

## Ce qui vient du JSON vs HTML
- **JSON** : intitulé de la question, réponse de l'élève, réponse attendue, explication pédagogique, libellé du bouton CTA.
- **HTML** : structure du panneau (3 lignes label/valeur), styles DS V2, bouton structurel, layout, fallback d'erreur.

## Garde-fous (child_safety)
- **Lignes conditionnelles** : `student_answer` absent → ligne "Ta réponse" masquée. `explanation` absent → ligne "Explication" masquée.
- **HTML inline** autorisé dans `expected_answer`, `student_answer`, `explanation` (balises `b`, `em`, `strong`) pour formules et emphases pédagogiques. Pas de balises structurelles.
- **BLOCKED** si `question` vide / `expected_answer` vide / `primary_cta` absent.

## QA à vérifier
1. Modifier `question`/`expected_answer`/`explanation` → rendu change sans toucher au HTML (critère d'or).
2. `question` absent → BLOCKED propre.
3. `expected_answer` absent → BLOCKED propre.
4. Instance sans `student_answer` → ligne "Ta réponse" absente, pas d'erreur.
5. Instance sans `explanation` → ligne "Explication" absente, pas d'erreur.
6. CTA → libellé vient de `primary_cta.label`.
7. Responsive 375/768/1024 : labels passent en colonne sur mobile.

## External refs / dependencies
- **use_when** : correction détaillée après exercice ; comparer réponse élève / attendu / explication ; apprendre de ses erreurs.
- **do_not_use_when** : feedback en flow d'exercice (→ GAB-117) ; erreur fréquente narrative (→ GAB-061) ; panneau d'erreurs Visual (→ GAB-090).

## Source
`INDEX-300-exerciselearning-GAB-126-130-PLAYABLE.html` (stage `data-tpl="126"`). Gabarit sans JS interactif propre : rendu statique piloté par données. Slots PART-06C : `title`(opt), `answer`(req→`expected_answer`), `feedback`(req→`question`), `student_answer`(opt), `explanation`(opt).
