# GAB-217 · AdaptiveLearningConceptPrerequisite — « Prérequis conceptuel ciblé »

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

## Pack (structure officielle par-GAB)
```
GAB-217/
  renderer.html            ← moteur prérequis conceptuel (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

**AdaptiveLearningConceptPrerequisite** : carte de rappel pédagogique affichée avant un exercice ou une leçon nécessitant un prérequis identifié. Compose un titre, un résumé, un type enum strict (`definition` / `method` / `formula` / `vocabulary` / `previous_concept`), une raison pédagogique, 1-N items mémo, un hint mnémotechnique optionnel, un message non-bloquant, et deux CTAs (revoir / continuer sans).

## Champs requis (instance, à plat)
`gab_id` · `prerequisite_id` · `title` · `items[]{heading, body}` · `prerequisite_type`

Optionnels : `summary`, `prerequisite_type_enum`, `reason`, `hint`, `non_blocking_notice`, `primary_cta{label, action}`, `skip_cta{label, action}`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, résumé, type, raison, items mémo, hint, message non-bloquant, libellés des deux boutons.
- **HTML** : layout de la carte, icône 🧱, bloc reason, liste items, bloc hint, message non-blocking, CTAs structurels, slots panel.

## Garde-fous (child_safety)
- **Anti-invention** : contenu uniquement extrait du source playable — jamais halluciner un prérequis.
- **Non-bloquant par design** : l'option `skip_cta` doit toujours rester visible. Pas de blocage forcé.
- **BLOCKED** si `title` absent / `items` vide / `prerequisite_type` absent.
- **prerequisite_type** : enum strict — toute valeur hors liste doit être signalée comme TODO.

## QA à vérifier
1. Modifier un `item.body` → rendu change sans toucher au HTML (critère d'or).
2. `items:[]` → BLOCKED propre.
3. `title` absent → BLOCKED propre.
4. `reason` absente → bloc reason masqué (hidden).
5. `hint` absente → bloc hint masqué (hidden).
6. `skip_cta` absente → seul `primary_cta` rendu.
7. Responsive 375/768/1024 — aucun débordement.

## Source
`INDEX-300-adaptivelearning-GAB-216-220-PLAYABLE.html` (stage `data-tpl="217"`, handlers `pqEnum`, const `PQ_VARIANTS`).
Contenu démo extrait : type `method`, 2 items (triangle rectangle + hypoténuse), hint mnémo, reason Pythagore, 2 CTAs.
