# GAB-239 · FeedbackLearningReflectionPrompt — « Métacognition légère »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechFeedbackLearning
**Critère validé :** changer le JSON change la question, les choix et les libellés sans modifier le HTML.

## Pack (structure officielle par-GAB)
```
GAB-239/
  renderer.html            ← moteur réflexion légère (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_prompt_id` · `title` · `reflection_type` · `question` · `choices[]{id,text}`

Optionnels : `banner_label`, `instruction`, `hint`, `privacy_notice`, `confirm_cta_label`, `skip_cta_label`, `reflection_type_enum`, `accessibility`, `child_safety`.

## Ce qui vient du JSON vs HTML
- **JSON** : la question, les choix QCM, le hint, la notice privacy, le libellé des boutons, le titre et le banner.
- **HTML** : layout carte, cercles lettres, styles QCM, bouton primaire et skip structurels, message BLOCKED.

## Archétype
GAB-239 est le gabarit de **métacognition légère** (reflection prompt). Il intervient en post-exercice pour ancrer un point-clé. Trois invariants de doctrine :
1. **QCM léger préféré au texte libre** — aucun champ texte libre par défaut (privacy RGPD mineurs, article 8).
2. **Skip toujours disponible** — la réflexion est optionnelle, jamais bloquante pour la progression.
3. **no-reward-write** — ce gabarit n'écrit jamais XP/coins/badges ; c'est PlayKit qui orchestre la gamification.

## reflection_type (6 valeurs)
| Valeur | Usage |
|---|---|
| `what_changed` | Qu'est-ce qui a changé dans ta façon de répondre ? |
| `key_takeaway` | Quelle phrase / règle clé à retenir ? *(par défaut)* |
| `confidence` | À quel point te sens-tu prêt ? |
| `strategy` | Quelle est la première chose à faire ? |
| `mistake_awareness` | Quelle erreur sais-tu maintenant éviter ? |
| `oral_self_check` | Si tu expliquais à un copain, par où tu commencerais ? |

## Garde-fous (child_safety)
- **Aucun stockage texte libre** — données sensibles élèves mineurs non collectées sauf opt-in explicite.
- **Skip silencieux** — aucun log côté serveur sur skip, conforme RGPD article 8.
- **No-reward-write** — jamais d'écriture XP depuis ce gabarit.
- **BLOCKED** si `question` absente, `choices` vides, `reflection_prompt_id` absent, `gab_id` absent.

## QA à vérifier
1. Modifier `question` + `choices` dans le JSON → rendu change sans toucher au HTML.
2. `choices:[]` → BLOCKED propre.
3. Clic skip sans sélection → message "Réflexion passée — aucun stockage".
4. Clic confirm sans sélection → invite à sélectionner ou passer.
5. Sélection + confirm → message succès.
6. Instance externe injectée via `init(ext)` → rendu change.
7. Responsive 375/768/1024.

## Source
`INDEX-300-feedbacklearning-GAB-236-240-PLAYABLE.html` (stage `data-tpl="239"`, styles `.rp-*`, handlers `rpPick`/`rpType`, données `RP_QUESTIONS`).
