# GAB-196 · PathMapChapterCompletion — « Fin de chapitre · célébration + bilan »

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

## Pack (structure officielle par-GAB)
```
GAB-196/
  renderer.html            ← moteur clôture chapitre (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` · `chapter_completion_id` · `title` · `summary` · `items[]` · `primary_cta{label,action}`

Optionnels : `ribbon_label`, `trophy_emoji`, `title_emphasis`, `result{xp,xp_label,coins,coins_label,missions,missions_label}`, `progress`, `reward_context`, `secondary_cta{label,action}`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, emphase, résumé, liste des acquis, texte à consolider, stats XP/coins/missions, libellés des deux boutons, note reward conditionnelle.
- **HTML** : animations trophée/étoiles/rayons, layout carte, grille stats, blocs acquis/todo, boutons structurels.

## Garde-fous (child_safety)
- **BLOCKED** si `title`, `summary`, `items` (vide ou absent) ou `primary_cta` manquants.
- **reward_context** : note conditionnelle PlayKit — ne jamais inventer, toujours conditionnel.
- **progress** : bloc "à consolider" masqué si absent — ne pas afficher de texte vide.
- **Anti-invention** : aucun contenu pédagogique (acquis, résumé, stats) n'est codé en dur dans le HTML.

## QA à vérifier
1. Modifier `title`/`summary`/`items` → rendu change sans toucher au HTML (critère d'or).
2. `items:[]` → BLOCKED propre.
3. `progress` absent → bloc "à consolider" masqué.
4. `secondary_cta` absent → seul bouton primaire visible.
5. `reward_context` absent → note reward invisible.
6. Injection `ENGINE.init(ext)` → rendu change dynamiquement.
7. Responsive 375/768/1024 (stats-row : 3 col → 2 col mobile).

## Source
`INDEX-300-pathmap-GAB-196-200-PLAYABLE.html` (stage `data-tpl="196"`, CSS `.cc-*`, handlers `peConfirm`/`peNote`).
