# GAB-232 · FeedbackLearningExplainMistake — « Ce qui bloque ici »

**Archetype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechFeedbackLearning
**Critere valide :** changer le JSON change l'explication sans modifier le HTML. check.py 12/12.

## Pack (structure officielle par-GAB)
```
GAB-232/
  renderer.html            <- moteur explication d'erreur (ne pas modifier par instance)
  instance.example.json    <- SOURCE DE VERITE (contenu reel, a plat)
  schema.contract.json     <- contrat de validation
  README-contract.md       <- ce fichier
```

## Champs requis (instance, a plat)
`gab_id` · `explain_mistake_id` · `title` · `explanation_text` · `hint_text` · `mistake_type`

Optionnels : `subtitle`, `explanation_heading`, `example_heading`, `example_text`, `primary_cta{label,action}`, `retry_cta{label,action}`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, sous-titre, texte explication, texte exemple, hint actionnable, mistake_type (chip), libelles des boutons.
- **HTML** : structure carte, zones explication/exemple/hint, boutons structurels, layout, fallback BLOCKED.

## Archetype pedagogique
GAB-232 explique **UNE erreur donnee maintenant** — pas un motif recurrent (contrairement a GAB-218 AdaptiveErrorPattern qui detecte 3+ occurrences avec score confiance + RGPD art.22).

Boucle d'usage : `GAB-231 InstantFeedback (almost/incorrect)` → `GAB-232 ExplainMistake` → `GAB-234 RetryGuide`.

## Garde-fous (child_safety)
- **No-reward-write** : ExplainMistake n'ecrit aucun XP/coins/badges. PlayKit orchestre la recompense en aval.
- **Anti-humiliation** : `explanation_text` doit etre pedagogique, factuel, jamais culpabilisant.
- **Anti-invention** : hint_text et explanation_text doivent etre fournis par le contexte exercice — jamais inventes.
- **BLOCKED** si `explain_mistake_id`, `explanation_text`, `hint_text` ou `mistake_type` absent.

## Enum mistake_type (7 valeurs)
`concept` · `method` · `calculation` · `vocabulary` · `instruction` · `too_broad` · `missing_step`

## QA a verifier
1. Modifier `explanation_text`/`hint_text` → rendu change sans toucher au HTML (critere d'or).
2. `explanation_text` absent → BLOCKED propre.
3. `example_text` absent → bloc exemple masque (hidden), pas de crash.
4. `primary_cta.label` change → libelle bouton change.
5. Responsive 375/768/1024.

## external_refs / dependencies
- **GAB-218** (AdaptiveErrorPattern) : si motif d'erreur recurrent detecte (3+ occurrences) → utiliser 218 au lieu de 232.
- **GAB-231** (InstantFeedback) : typiquement declenche 232 apres feedback_state `almost` ou `incorrect`.
- **GAB-234** (RetryGuide) : suit naturellement 232 pour guider le retry strategique.

## Source
`INDEX-300-feedbacklearning-GAB-231-235-PLAYABLE.html` (stage `data-tpl="232"`, section `<!-- GAB-232 EXPLAIN MISTAKE -->`).
