# GAB-219 · AdaptiveLearningPersonalizedReview — « Révision personnalisée multi-modules »

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

## Pack (structure officielle par-GAB)
```
GAB-219/
  renderer.html            ← moteur révision personnalisée (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` · `review_id` · `title` · `summary` · `items[]{num,title,description,module_type}` · `primary_cta{label,action}`

Optionnels : `reason`, `review_type`, `estimated_duration`, `difficulty`, `secondary_cta{label,action}`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, sous-titre, raison pédagogique, durée estimée, difficulté, chaque item (num/titre/description/module_type), libellés des boutons.
- **HTML** : structure de la carte, liste d'items, badges de modules (visual/memory/exercise/leveltest), barre de métadonnées, boutons structurels, layout.

## Archétype : Révision personnalisée multi-modules (distinctif)

Ce gabarit est l'un de **3 « révisions » qui cohabitent** dans l'écosystème EdTech — à ne pas confondre :

| GAB | Nom | Périmètre |
|-----|-----|-----------|
| GAB-109 | MemoryWeakCardsReview | Cartes Memory faibles uniquement, mono-module |
| **GAB-219** | **AdaptiveLearningPersonalizedReview** | Révision MIXTE multi-modules, basée sur signaux adaptatifs (ce gabarit) |
| Futur | OrganizerRevisionPlanner | Plan complet de révision longue durée (module 14+) |

**Quand utiliser GAB-219 :**
- Signaux fiables sur 2-3 points faibles identifiés
- 3-5 items mixtes multi-modules (visual, memory, exercise, leveltest)
- Peut générer une session PlayEngine

**Ne pas utiliser quand :**
- Révision mono-module Memory uniquement (→ GAB-109)
- Plan de révision longue durée (→ OrganizerRevisionPlanner)
- Liste de plus de 6 items (trop long)

## module_type des items — badges

| module_type | Icône | Couleur |
|-------------|-------|---------|
| `visual` | 📊 VISUAL | sky (bleu clair) |
| `memory` | 🧠 MEMORY | violet |
| `exercise` | 📝 EXERCISE | coral |
| `leveltest` | 🧭 LEVELTEST | gold |

## Garde-fous (child_safety)
- **BLOCKED** si `items` vide / absent, `title` absent, `summary` absent, `primary_cta` absent, `review_id` absent.
- `reason` optionnel : si absent, le bloc raison est masqué (hidden), pas de crash.
- `secondary_cta` optionnel : si absent, le bouton secondaire est masqué, pas de crash.
- `module_type` inconnu : rendu dégradé gracieusement (badge neutre), pas de crash JS.

## QA à vérifier
1. Modifier `title`/`items`/`reason` → rendu change sans toucher au HTML (critère d'or).
2. `items:[]` → BLOCKED propre.
3. `primary_cta` absent → BLOCKED propre.
4. `secondary_cta` absent → bouton secondaire masqué.
5. `reason` absent → bloc raison masqué.
6. Responsive 375/768/1024 — CTAs en colonne sur mobile.

## Source
`INDEX-300-adaptivelearning-GAB-216-220-PLAYABLE.html` (stage `data-tpl="219"`, bloc `.pr-card`).


## external_refs / dependencies
Réfs à d'autres GAB présentes dans le contenu de CET écran (navigation/prérequis pédagogiques extraits de la source, PAS des GAB à convertir ici) :
- GAB-109
