# GAB-015 · SessionPreviewMode — « Mode preview QA / contributeur »

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

## Pack (structure officielle par-GAB)
```
GAB-015/
  renderer.html            ← moteur mode preview (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` · `preview_instance_id` · `preview_label` · `steps_overview[]{n,title,module_ref}` · `note_tracking_off` · `note_tracking_on`

Optionnels : `tracking_enabled` (boolean, défaut false), `accessibility`, `child_safety`.

## Ce qui vient du JSON vs HTML
- **JSON** : libellé de la bannière (`preview_label`), liste ordonnée des étapes (`steps_overview`), messages du toggle tracking OFF/ON (`note_tracking_off`, `note_tracking_on`), état initial du toggle (`tracking_enabled`).
- **HTML** : structure bannière PREVIEW, liste étapes, bouton toggle structurel, layout, fallback BLOCKED.

## Garde-fous
- **tracking_enabled=false par défaut** : mode preview ne doit jamais polluer les stats élève sans intention explicite.
- **note_tracking_on doit porter une mise en garde** (⚠️ ou équivalent) pour signaler le risque.
- **BLOCKED** si `preview_instance_id` absent / `preview_label` absent / `steps_overview` vide.
- `module_ref` des étapes est affiché tel quel (ex: `story/<id>`) — placeholder volontaire pour QA/contributeur.

## QA à vérifier
1. Modifier `preview_label` → bannière change sans toucher au HTML (critère d'or).
2. `steps_overview:[]` → BLOCKED propre.
3. Toggle OFF → message `note_tracking_off`, couleur muted. Toggle ON → message `note_tracking_on`, couleur gold (alerte).
4. `tracking_enabled:true` dans l'instance → toggle initialisé ON au chargement.
5. Responsive 375/768/1024 — toggle et label se replient proprement.

## Source
`INDEX-300-playengine-GAB-011-015-PLAYABLE.html` (stage `data-tpl="15"`, handler `toggleTrack()`).
