# GAB-234 · FeedbackLearningRetryGuide — « Guide de réessai stratégique »

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

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

RetryGuide guide l'élève vers une **stratégie de réessai** (garder / ajouter / changer) sans révéler la réponse. Trois composants distincts cohabitent dans le lot et ne doivent pas être confondus :

- **ExerciseRetryPrompt** : simple prompt « réessayer ? » sans stratégie.
- **GAB-234 RetryGuide** : stratégie garder/changer + hint ouvert (ce gabarit).
- **GAB-213 AdaptiveRemediationPath** : parcours long en cas d'échecs répétés.

## Champs requis (instance, à plat)
`gab_id` · `retry_guide_id` · `title` · `instruction_text` · `hint_text` · `primary_cta{label,action}`

## Champs optionnels
`subtitle` · `retry_type` · `instruction_label` · `keep_label` · `keep_text` · `change_label` · `change_text` · `no_spoil_text` · `secondary_cta{label,action}`

## Ce qui vient du JSON vs HTML
- **JSON** : titre, sous-titre, chip retry_type, texte instruction, colonnes garder/changer, hint, texte no-spoil, libellés des deux CTA.
- **HTML** : layout carte, colonnes stratégie, hint structurel, bloc no-spoil structurel, boutons, pied de page.

## Garde-fous (child_safety)
- **No-spoil** : `instruction_text` et `hint_text` fournissent une stratégie, jamais la solution complète. En mode évaluation, aucune réponse n'est révélée.
- **No-reward-write** : ce gabarit n'écrit aucun XP, coins ou badge. La gamification reste côté PlayKit Rewards (séparation idempotente).
- **BLOCKED** si `title`, `instruction_text`, `hint_text` ou `primary_cta` sont absents.
- Colonnes garder/changer masquées silencieusement si `keep_text`/`change_text` absents (optional).

## QA à vérifier
1. Modifier `instruction_text` → rendu change sans toucher au HTML (critère d'or).
2. `instruction_text` absent → BLOCKED propre.
3. `secondary_cta` absent → bouton secondary masqué, pas d'erreur JS.
4. CTA primary → feedback visuel `.panel.ok`.
5. Responsive 375/768/1024 : colonnes empilées mobile, aucun débordement.

## external_refs / dependencies
- **GAB-213** (`AdaptiveRemediationPath`) : escalade si échecs répétés ; externe au lot GAB-231–235.
- **PlayKit Rewards** : récompense XP/coins/badges déclenchée en aval, jamais par ce gabarit.
- **GAB-231** (`FeedbackLearningInstantFeedback`) : précède souvent RetryGuide dans la boucle feedback.

## Source
`INDEX-300-feedbacklearning-GAB-231-235-PLAYABLE.html` (stage `data-tpl="234"`, section `.rg-card`).
