# GAB-237 · FeedbackLearningHintBeforeAnswer — « Hint progressif 4 niveaux »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechFeedbackLearning
**Critère validé :** changer le JSON change le hint affiché sans modifier le HTML. check.py 12/12.

## Pack (structure officielle par-GAB)
```
GAB-237/
  renderer.html            ← moteur hint escalade (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
```

## Archétype

GAB-237 est un **hint progressif à 4 niveaux d'escalade** : l'élève peut demander des indices de plus en plus précis avant de soumettre sa réponse. Il se distingue des autres gabarits adjacents :

| GAB | Nom | Rôle |
|---|---|---|
| **GAB-237** | FeedbackLearningHintBeforeAnswer | Hint **avant** réponse — escalade 4 niveaux (ce gabarit) |
| GAB-236 | FeedbackLearningPartialCredit | Bilan **après** réponse partielle |
| MemoryHintReveal | (autre module) | Reveal de la face cachée mémoire — contexte différent |

## Champs requis (instance, à plat)

`gab_id` · `hint_instance_id` · `hints{light,medium,strong,last_before_answer}` · `hint_level` · `primary_cta{label,action}`

Optionnels : `title`, `subtitle`, `instruction_default`, `exam_mode`, `exam_banner`, `secondary_cta`, `accessibility`, `child_safety`.

## Ce qui vient du JSON vs HTML

- **JSON** : les 4 textes de hint (avec HTML inline `<b>`), les 4 instructions, les libellés des CTAs, le niveau initial `hint_level`, le flag `exam_mode`, le texte du banner exam.
- **HTML** : l'escalade visuelle (4 dots + dégradé), la mise en page, les animations, la logique de navigation entre niveaux.

## Garde-fous (child_safety + no-reward-write)

- **No-reward-write** : GAB-237 ne déclenche jamais de XP/coins/badges. C'est PlayKit qui orchestre la gamification.
- **exam_mode guard** : si `exam_mode:true`, toute l'escalade et tous les hints sont masqués automatiquement.
- **hint_level `last_before_answer`** : seul niveau autorisé à révéler la réponse complète. Les 3 autres doivent guider sans donner directement.
- **BLOCKED** si `hints` absent / `hint_level` absent / `primary_cta` absent / `gab_id` absent.

## QA à vérifier

1. Modifier un `text` dans `hints.light` → rendu change sans toucher au HTML (critère d'or).
2. `exam_mode:true` → escalade masquée, banner affiché, CTAs désactivés.
3. `hints:{}` (vide) → BLOCKED propre.
4. Clic dot 1 (Light) → dot mint actif, hint light, retry_cta light.
5. Clic dot 4 (Last) → dot coral→magenta actif, réponse complète affichée.
6. Responsive 375/768/1024 → escalade lisible, pas de débordement.

## Source

`INDEX-300-feedbacklearning-GAB-236-240-PLAYABLE.html` (stage `data-tpl="237"`, objet `HB_HINTS`, handler `hbPick`).
