# GAB-275 · MethodLearningExamChecklist — « Checklist examen avec items observables »

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

## Pack (structure officielle par-GAB)
```
GAB-275/
  renderer.html            ← moteur checklist 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` · `checklist_id` · `exam_context` · `items[]{id,level,text}` · `completion_policy` · `review_cta{label,action}`

Optionnels : `title`, `subtitle`, `timebox`, `anti_decorative_rule`, `reason_block`, `teacher_variant{label,content}`.

## Ce qui vient du JSON vs HTML
- **JSON** : tous les items et leurs niveaux (blocking/priority/normal/done), le contexte d'examen, la timebox, la règle anti-décoratif, le bloc raison, le libellé du CTA, les items de la checklist interactive, la variante prof.
- **HTML** : layout, couleurs par level (coral/gold/mint/surface), moteur de checklist interactive avec compteur, bouton structurel, fallback BLOCKED.

## Hiérarchie des niveaux d'items
| Level | Couleur | Icône | Signification |
|---|---|---|---|
| `blocking` | coral | `!` | Points perdus sûrs si oublié — traiter en premier |
| `priority` | gold | `★` | Sécurisent les points méthode |
| `done` | mint | `✓` | Déjà acquis avant la checklist |
| `normal` | surface | — | Confort, traité si temps disponible |

## Garde-fous (child_safety / anti-décoratif)
- **Anti-item vague** : chaque item.text doit être observable en un coup d'œil (ex: « Mon nom en haut de copie » ✅ vs « Relire son travail » ⛔).
- **Ordre obligatoire** : blocking avant priority avant normal — le completion_policy documente cette règle.
- **BLOCKED** si `checklist_id` absent / `exam_context` absent / `items` vide / `completion_policy` absent / `review_cta` absent.
- **Pas de contenu en dur** dans le HTML : 0 item hardcodé, 0 texte de contexte figé.

## QA à vérifier
1. Modifier un `item.text` → rendu change sans toucher au HTML (critère d'or).
2. `items:[]` → BLOCKED propre avec message explicite.
3. Item `level=blocking` → fond coral + icône `!` + tag BLOCKING.
4. CTA primaire → checklist interactive avec compteur 0/N → N/N au vert (mint).
5. `teacher_variant` présent → bouton secondaire visible, contenu affiché au clic.
6. Responsive 375/768/1024 : aucun débordement.

## Chaîne Module 19 (contexte lot)
Ce GAB est le **5e et dernier** de la chaîne EdTechMethodLearning (vague 1) :
`GAB-271 Intro` → `GAB-272 StepByStep` → `GAB-273 AnswerStructure` → `GAB-274 JustificationBuilder` → **`GAB-275 ExamChecklist`**

## Source
`INDEX-300-methodlearning-GAB-271-275-PLAYABLE.html` (stage `data-tpl="275"`, CSS `.ec-*`, handler `gabCheck`).
