# GAB-218 · AdaptiveLearningErrorPattern — « Motif d'erreur récurrent »

**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-218/
  renderer.html            ← moteur carte erreur (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` · `error_pattern_id` · `title` · `summary` · `pattern_type` · `reason` · `confidence{score,occurrences,total_exercises,threshold_min,label,meta}` · `rgpd_notice` · `primary_cta{label,action}`

Optionnels : `example`, `hint`, `secondary_cta{label,action}`, `pattern_type_enum`, `accessibility`, `child_safety`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, résumé, type de motif, raison (mécanisme bloquant), score de confiance, exemple, astuce, texte RGPD, libellés des CTAs.
- **HTML** : layout de la carte, barre de confiance animée, avertissement RGPD structurel, boutons, responsive.

## Archétype & comportement moteur
- **Guard confiance** : si `confidence.score < confidence.threshold_min` → motif non rendu (protection anti-faux-positifs). Ce guard est câblé côté moteur JS.
- **RGPD art.22 obligatoire** : `rgpd_notice` est un champ requis (profilage algorithmique automatisé). Si absent → BLOCKED.
- **pattern_type** : enum strict 7 valeurs (concept_confusion / method_step_missing / calculation / vocabulary / reading_instruction / too_broad / too_short).
- **reason** : explique le mécanisme bloquant (pas juste le symptôme). Requis.

## Garde-fous (child_safety)
- **Jamais exposer les raw answers** dans les champs texte — interdiction absolue.
- **RGPD art.22** : mention obligatoire du droit à l'intervention humaine.
- **Seuil min 70%** de confiance avant affichage — évite les stigmatisations injustifiées.
- **BLOCKED** si `error_pattern_id` absent / `reason` absent / `rgpd_notice` absent / `confidence` absent.

## QA à vérifier
1. Modifier `reason`/`example`/`hint` → rendu change sans toucher au HTML (critère d'or).
2. `rgpd_notice` absent → BLOCKED propre.
3. `confidence.score` < `threshold_min` → motif non affiché (guard actif).
4. CTA primaire → panneau confirmation.
5. Responsive 375/768/1024.

## Source
`INDEX-300-adaptivelearning-GAB-216-220-PLAYABLE.html` (stage `data-tpl="218"`, section `/* GAB-218 ERROR PATTERN */`).
