> ⚠️ **GAB SENSIBLE — VALIDATION BOSS OBLIGATOIRE avant tout usage.** (child-safety / RGPD / orientation / career). Contenu extrait sans invention ; à relire par un humain.

# GAB-334 · MetacognitionLearningErrorReflection — « Réfléchir à une erreur »

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

> 🚩 **GAB SENSIBLE (child-safety / non-stigmatisation) — REVUE BOSS REQUISE avant toute mise en prod.**
> Ce gabarit touche à l'estime de soi de l'élève : tout libellé, toute cause, toute stratégie doit être relu par Boss. Aucun contenu pédagogique n'a été inventé — uniquement extrait du HTML source.

## Pack (structure officielle par-GAB)
```
GAB-334/
  renderer.html            ← moteur de réflexion d'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` · `reflection_id` · `prompt` · `possible_causes[]{icon,label,cause,next_strategy}`
Optionnels : `title`, `state_label`, `privacy_notice`, `feedback_template`, `privacy_limit`, `primary_cta{label,action}`.

## Ce qui vient du JSON vs HTML
- **JSON** : la question (`prompt`), chaque cause possible, sa stratégie de remédiation (`next_strategy`), le message non-stigmatisant (`privacy_notice`), le gabarit de feedback.
- **HTML** : la liste de causes cliquables, le panneau de feedback, le badge d'état, le layout.

## Garde-fous (child_safety)
- **Non-stigmatisant** : on réfléchit à l'erreur, pas à l'élève. Le feedback dit explicitement « la réponse, pas toi ». Aucune étiquette (« nul », « doué »).
- **Réflexion privée protégée** : `privacy_limit` documente que la réflexion privée de l'élève n'est jamais exposée ni étiquetée.
- **Anti-invention** : seules les causes/stratégies de l'instance sont affichées, jamais de cause hallucinée.
- **BLOCKED** si `possible_causes` vide / `prompt` absent / une cause sans `cause` ou sans `next_strategy`.

## QA à vérifier
1. Modifier un `label`/`next_strategy` → rendu change sans toucher au HTML (critère d'or). 2. `possible_causes:[]` → BLOCKED propre. 3. Clic sur une cause → feedback = cause + stratégie, langage non-stigmatisant. 4. Aucune étiquette de personne nulle part. 5. Responsive 375/768/1024.

## external_refs / dependencies
- **use_when** (source) : réfléchir à la cause d'une erreur · choisir une stratégie de remédiation · rester non-stigmatisant.
- **do_not_use_when** (source) : étiqueter l'élève (« nul en maths ») · calibration de confiance (→ **GAB-332**) · exposer la réflexion privée.
- Slots source : `error_type` (req), `possible_cause` (req), `evidence`, `next_strategy`, `privacy_limit`. Note : `error_type` n'a pas de contenu en dur dans l'écran source (l'erreur réelle vient du contexte amont) — voir _TODO ci-dessous.

## _TODO (contenu source absent — à compléter avec Boss, jamais halluciné)
- `error_type` / `evidence` : présents comme slots dans la source mais **sans contenu en dur** (proviennent du contexte d'exercice amont). Laissés hors instance pour ne rien inventer. À câbler quand le flux amont (l'erreur réelle de l'élève) sera défini.

## Source
`INDEX-300-metacognitionlearning-GAB-331-335-PLAYABLE.html` (stage `data-tpl="334"`, handler `d334Pick`).
