# GAB-247 · AssessmentLearningExamMode — « Mode examen avec désactivations »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechAssessmentLearning
**Critère validé :** changer le JSON change le rendu (titre, chrono, désactivations, CTAs) sans modifier le HTML. ✅ check.py 12/12.

## Pack (structure officielle par-GAB)
```
GAB-247/
  renderer.html            ← moteur mode examen (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` · `exam_mode_id` · `title` · `summary` · `timer{label,display,context}` · `deactivations[]{label,description,gab_ref}` · `rules_text` · `primary_cta{label,action}`

Optionnels : `mode_chip`, `stress_safe_notice`, `non_official_title`, `non_official_text`, `secondary_cta{label,action}`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, résumé, libellé du chrono, valeur affichée (MM:SS), contexte chrono, chaque désactivation (label + description + gab_ref), règles du mode, notice stress-safe, bannière non-officielle, libellés des deux CTAs.
- **HTML** : structure de carte, timer block, liste désactivations, bloc règles, bannière stress-safe, bannière non-officielle, deux boutons structurels, layout responsive.

## Archétype du GAB
**Mode examen avec désactivations explicites.** Ce gabarit sert à présenter une session d'évaluation en conditions « examen simulé » : chrono visible mais non clignotant, liste des GAB désactivés pendant l'épreuve, bannière anti-confusion « pas un examen officiel ».

## Garde-fous (child_safety)
- **Chrono non anxiogène** : `stress_safe_notice` recommandé si mineurs — pas de clignotement, pas de son, pas de "TIME UP" rouge.
- **Bannière non-officielle** : `non_official_title` + `non_official_text` obligatoires en pratique pour éviter toute confusion avec une épreuve réelle.
- **BLOCKED** si `exam_mode_id` absent / `timer` absent / `deactivations` vide — le moteur refuse d'afficher un mode examen sans contenu structurel minimum.

## QA à vérifier
1. Modifier `timer.display` → valeur change sans toucher au HTML.
2. `deactivations:[]` → BLOCKED propre.
3. `timer` absent → BLOCKED.
4. `secondary_cta` absent → bouton secondaire masqué proprement.
5. Responsive 375/768/1024.
6. Bannière `non_official_text` toujours visible avant les CTAs.

## external_refs / dependencies
Ce GAB référence 4 GAB désactivés pendant l'épreuve :
- **GAB-237** — HintBeforeAnswer (indices désactivés)
- **GAB-233** — EncouragementKetty (encouragements désactivés)
- **GAB-234** — RetryGuide (stratégie retry désactivée)
- **GAB-231** — InstantFeedback (correction différée à la fin)

Ces références figurent dans `deactivations[].gab_ref` de l'instance. GAB-247 les référence mais ne les implémente pas — leur logique propre reste dans leurs GAB respectifs.

## Source
`INDEX-300-assessmentlearning-GAB-246-250-PLAYABLE.html` (stage `data-tpl="247"`, CSS section `/* GAB-247 EXAM MODE */`).
