# GAB-120 · ExerciseShortAnswer — « Réponse rédigée courte »

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

## Pack (structure officielle par-GAB)
```
GAB-120/
  renderer.html            ← moteur réponse courte (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 pédagogique

L'élève rédige librement une réponse courte dans un textarea, puis clique le CTA pour révéler la réponse modèle attendue. Il n'y a **pas de scoring automatique** : l'exercice vise l'auto-évaluation de la formulation. Le modèle n'est jamais affiché avant le clic.

## Champs requis (instance, à plat)
`gab_id` · `exercise_id` · `question` · `model_answer` · `cta_label`

Optionnels : `title`, `instruction`, `placeholder`, `model_answer_header`.

## Ce qui vient du JSON vs HTML
- **JSON** : question, instruction, placeholder, libellé du bouton, en-tête et texte de la réponse modèle.
- **HTML** : textarea, bouton structurel, boîte modèle (masquée par défaut), layout, fallback BLOCKED.

## Garde-fous (child_safety)
- **Anti-révélation prématurée** : `model_answer` est toujours masquée jusqu'au clic CTA (`.model-box` sans classe `show`).
- **BLOCKED** si `question` absente / `model_answer` absente / `exercise_id` absent.
- **Bouton désactivé** après clic pour empêcher les révélations multiples.
- **0 contenu en dur** dans le HTML : aucune question, aucun texte de modèle hardcodé.

## QA à vérifier
1. Modifier `question` ou `model_answer` dans l'instance → rendu change sans toucher au HTML.
2. `question` absente → BLOCKED propre dans l'error-box.
3. Clic CTA → boîte modèle apparaît + bouton désactivé.
4. Injection `ENGINE.init(customInst)` → exercice différent sans recharger la page.
5. Responsive 375/768/1024 — textarea lisible, pas de débordement.

## external_refs / dependencies
Aucune dépendance hors-lot. Gabarit autonome. Les autres exercices du lot (GAB-117 QCM single, GAB-118 QCM multiple, GAB-119 Vrai/Faux) partagent le même `renderer_key: text_cta` et le même contexte pédagogique (Révolution française).

## Source
`INDEX-300-exerciselearning-GAB-116-120-PLAYABLE.html` (stage `data-tpl="120"`, handler `saSubmit()`).
