# GAB-190 · PathMapCheckpointBoss — « Checkpoint-boss de parcours »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechPathMap
**Critère validé :** changer le JSON change la carte sans modifier le HTML.

## Pack (structure officielle par-GAB)
```
GAB-190/
  renderer.html            ← moteur checkpoint-boss (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` · `checkpoint_id` · `title` · `subtitle` · `objective` · `items[]{number,label,description}` · `primary_cta{label,action}`

Optionnels : `ribbon_label`, `stats[]{value,label}`, `failsoft_notice`, `retry_cta{label,action}`, `reward_context`, `state`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, sous-titre, objectif, composantes items (prérequis/mini-boss/validation), stats (durée/difficulté/XP), notice fail-soft, libellés des deux boutons CTA, état du checkpoint.
- **HTML** : carte sombre avec dégradé violet-deep, bandeau gold, grille stats, bloc fail-soft menthe, layout CTA, moteur validate/BLOCKED.

## Archétype
GAB-190 est un **moment fort de parcours** : il s'intercale après plusieurs missions pour valider l'acquis d'un segment avant de passer au suivant. C'est un **nœud d'orchestration**, pas un jeu lui-même (le mini-boss GameLearning est référencé, pas embarqué).

## Garde-fous (child_safety)
- **Fail-soft obligatoire** : l'instance DOIT fournir `failsoft_notice` indiquant qu'aucun blocage définitif n'existe (pédagogie bienveillante).
- **Reward_context = indicatif** : le XP affiché est un contexte motivationnel ; le calcul officiel appartient à PlayKit, jamais à ce gabarit.
- **State 'locked'** : le bouton primary est automatiquement désactivé (`disabled`) si `state: "locked"` — évite toute navigation vers un checkpoint non débloqué.
- **BLOCKED** si `title` absent / `items` vide ou absent / `primary_cta` absent.

## Use when / do not use when (extrait source)
- ✅ Consolider acquis après plusieurs missions · mini-boss Game existe derrière · fail-soft avec remédiation prévue.
- ⛔ Mini-boss lui-même (→ GAB-165) · examen officiel école · échec qui bloque sans alternative.

## QA à vérifier
1. Modifier un `label`/`description` dans `items` → rendu change sans toucher au HTML.
2. `items:[]` → BLOCKED propre.
3. `state:"locked"` → bouton primary désactivé.
4. Clic bouton primary → message de confirmation dans le panel.
5. Clic retry_cta → message note dans le panel.
6. Responsive 375/768/1024 : stats en colonne sur mobile.

## Références externes (dependencies)
- **GAB-165** : PathMap ne doit PAS être utilisé pour le mini-boss lui-même (→ renvoi vers GAB-165 GameLearningBoss).
- **PlayKit** : calcul officiel XP/badges post-checkpoint — hors scope de ce gabarit.
- **EdTechPathMap** : module propriétaire des 5 gabarits GAB-186 à GAB-190.

## Source
`INDEX-300-pathmap-GAB-186-190-PLAYABLE.html` (stage `data-tpl="190"`, classe `.cb-card`, handlers `peConfirm`/`peNote`).
