# GAB-130 · ExerciseRetryPrompt — « Invitation à réessayer »

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

## Pack (structure officielle par-GAB)
```
GAB-130/
  renderer.html            ← moteur invitation retry (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
Écran bienveillant affiché après un **échec d'exercice**. Il combine :
- Un message d'encouragement court (title + body)
- Un indice méthodologique optionnel (hint) — amorçage sans révéler la réponse
- Deux actions : relancer le même exercice (retry_cta, requis) et charger une variante (variant_cta, optionnel)

## Champs requis (instance, à plat)
`gab_id` · `retry_prompt_id` · `title` · `body` · `retry_cta{label, action}`

Optionnels : `emoji`, `hint{icon, label, text}`, `variant_cta{label, action}`, `variants_pool[]`

## Ce qui vient du JSON vs HTML
- **JSON** : emoji, titre, body, texte du hint, libellés des boutons, pool de variantes d'énoncé.
- **HTML** : structure de la carte, bandeau hint (affiché/masqué selon présence), boutons dynamiques, rotation de variantes, layout responsive.

## Garde-fous (child_safety)
- **BLOCKED** si `title`, `body` ou `retry_cta` absents — le moteur affiche un panneau d'erreur et stoppe.
- **Hint jamais révélateur** : le champ `hint.text` doit rester un amorçage méthodologique, pas la réponse directe.
- **Ton bienveillant** : title et body doivent être encourageants, jamais accusatoires (contrainte de contenu).
- **Variants en cycle** : si le pool est épuisé, rotation automatique (pas de crash).

## use_when / do_not_use_when
**Utiliser** : après un échec d'exercice pour proposer retry + coup de pouce + variante équivalente.
**Ne pas utiliser** : replay simple PlayKit (→ GAB-038), correction détaillée (→ GAB-126), après une réussite.

## QA à vérifier
1. Modifier `title`/`body` → rendu change sans toucher au HTML (critère d'or).
2. `retry_cta` absent → BLOCKED propre.
3. `hint` absent → bandeau doré masqué, pas d'erreur.
4. Clic "Variante" → rotation dans `variants_pool`.
5. Responsive 375px → boutons en colonne, pas de débordement.

## external_refs / dependencies
- Utilisation amont : après GAB-129 (ExerciseResultSummary) si score insuffisant.
- Utilisation aval : `retry_cta.action='retry_same'` → moteur appelant relance l'exercice. `variant_cta.action='load_variant'` → moteur appelant charge un énoncé alternatif.
- Aucun autre GAB n'est directement embarqué dans ce renderer.

## Source
`INDEX-300-exerciselearning-GAB-126-130-PLAYABLE.html` (stage `data-tpl="130"`, handlers `rtVariant` / `rtAgain`, styles CSS `.rt-*`).
