# GAB-216 · AdaptiveLearningMasteryCheck — « Micro-vérification de maîtrise »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechAdaptiveLearning
**Critère validé :** changer le JSON change le QCM (question, choix, feedbacks, décisions) sans modifier le HTML.

## Pack (structure officielle par-GAB)
```
GAB-216/
  renderer.html            ← moteur QCM adaptatif (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` · `mastery_check_id` · `title` · `question` · `choices[]{id,label}` · `correct_choice_id` · `feedback_correct{heading,body}` · `feedback_wrong{heading,body}` · `decision_advance{label,cta_label}` · `decision_remediate{label,cta_label}`

Optionnels : `subtitle`, `banner_label`, `instruction`, `check_type`, `retry_cta_label`, `pending_cta_label`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, sous-titre, bannière, instruction, question, chaque choix (id + libellé), la bonne réponse, les feedbacks correct/wrong, les labels de décision (ADVANCE/REMEDIATE), les libellés CTA et retry.
- **HTML** : layout card, styles visuels, logique de sélection/lock/reset, chaîne adaptive, slots panel.

## Archétype · chaîne adaptive
- Réponse correcte → feedback_correct → `decision_advance` → CTA ADVANCE activé → chaîne `Réponse OK → Mastery confirmée → Décision : ADVANCE → GAB-220`
- Réponse incorrecte → feedback_wrong → `decision_remediate` → CTA REMEDIATE activé + retry visible → chaîne `Réponse KO → Révision requise → Décision : REMEDIATE → GAB-213`

## Garde-fous (child_safety)
- **Pas une note officielle** : `banner_label` doit mentionner "pas une note" si présent.
- **Retry toujours accessible** : blocage sans retry est interdit (cf. `do_not_use_when` source).
- **1-3 questions max** : gabarit micro-check, pas un examen complet (→ module 10 pour LevelTest).
- **BLOCKED** si `question` absent / `choices` vide / `correct_choice_id` absent / `feedback_correct` absent / `feedback_wrong` absent.
- **Feedbacks explicatifs** : expliquer le pourquoi (raison adaptive), jamais juste "correct/incorrect".

## QA à vérifier
1. Modifier `question`/`choices`/`feedback_correct` → rendu change sans toucher au HTML (critère d'or).
2. `choices:[]` → BLOCKED propre.
3. Cliquer réponse correcte → feedback_correct + décision ADVANCE + CTA actif.
4. Cliquer réponse incorrecte → feedback_wrong + décision REMEDIATE + CTA actif + retry visible.
5. Cliquer retry → état reset complet, toutes choices déverrouillées.
6. Responsive 375/768/1024 — aucun débordement.

## Source
`INDEX-300-adaptivelearning-GAB-216-220-PLAYABLE.html` (stage `data-tpl="216"`, handlers JS `mcAnswer`, `mcReset`).

## external_refs / dependencies
- **GAB-220 · AdaptiveLearningNextStepBridge** : cible décision ADVANCE (référencée dans `decision_advance.cta_label`). Dans le même lot LOT-adaptivelearning-GAB-216-220.
- **GAB-213 · AdaptiveLearningRemediationPath** : cible décision REMEDIATE (référencée dans `decision_remediate.cta_label`). Hors lot courant — lot précédent (GAB-211-215).
