# GAB-215 · AdaptiveLearningProgressReason — « Explication décision adaptative »

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

## Pack (structure officielle par-GAB)
```
GAB-215/
  renderer.html            <- moteur décision adaptative (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
GAB-215 est l'écran de **transparence de la décision adaptative**. Après une remédiation, une recommandation ou un ajustement de difficulté, le système expose sa décision (enum stricte) et sa raison en langage élève. Pas de boîte noire. Pas de stigmatisation.

## Champs requis (instance, à plat)
`gab_id` · `progress_reason_id` · `decision` · `decision_tag` · `decision_tag_variant` · `title` · `body` · `reason` · `primary_cta{label,action}` · `decisions_enum[]`

Optionnels : `progress_label`, `progress_value`, `progress_percent`.

## Enum `decision`
| Clé | Badge couleur | Usage |
|---|---|---|
| `advance` | mint (vert) | L'élève peut progresser |
| `review` | sky (bleu) | Revoir un point isolé |
| `remediate` | gold (orange) | Mini-parcours de remédiation |
| `adjust_difficulty` | mint (vert) | Ajustement de niveau |
| `repeat` | sky (bleu) | Répéter avec d'autres exemples |

## Ce qui vient du JSON vs HTML
- **JSON** : décision, tag, variante couleur, titre, corps, raison, progression, libellé du CTA.
- **HTML** : carte, barre de progression, bouton structurel, layout, fallback BLOCKED.

## Garde-fous (child_safety)
- **Anti-culpabilisation** : `body` et `reason` ne doivent jamais porter de jugement définitif sur l'élève.
- **Transparence obligatoire** : `reason` DOIT citer une source lisible (exercices, diagnostic, temps) — pas de logs bruts.
- **BLOCKED** si `decision` absent / `title` absent / `reason` absent / `decisions_enum` vide.
- **Langage élève** : tutoiement, formulations positives ou neutres, jamais de score brut exposé.

## QA à vérifier
1. Modifier `decision` vers `remediate` → badge gold, titre change, CTA change sans toucher au HTML.
2. `decision` absent → BLOCKED propre.
3. `reason` absent → BLOCKED propre.
4. `decisions_enum:[]` → BLOCKED propre.
5. `progress_percent` absent → barre cachée proprement.
6. Responsive 375/768/1024.

## Source
`INDEX-300-adaptivelearning-GAB-211-215-PLAYABLE.html` (stage `data-tpl="215"`, handlers `prSet`, objet `PR_DECISIONS`).
