# GAB-189 · PathMapLockedNode — « Nœud verrouillé »

**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-189/
  renderer.html            ← moteur nœud verrouillé (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
```

## Archétype
Nœud d'un parcours PathMap dont l'accès est conditionné par la complétion d'une ou plusieurs missions prérequises. Affiche un message non-punitif, la condition explicite de déblocage, la progression courante et un CTA unique vers la mission à accomplir.

## Champs requis (instance, à plat)
`gab_id` · `locked_node_id` · `title` · `body` · `next_action{label,action}`

## Champs optionnels
`subtitle` · `state_label` · `unlock_condition{label,text}` · `progress{label,current,total,display}` · `hint{text}`

## Ce qui vient du JSON vs HTML
- **JSON** : titre, sous-titre, étiquette d'état, corps explicatif, condition de déblocage, barre de progression, astuce, libellé du bouton.
- **HTML** : structure de la carte, dashed border, icône verrou décoratif, layout, barre de progression, fallback BLOCKED.

## Garde-fous (child_safety)
- **Ton non punitif** : le `body` doit toujours inviter à progresser, jamais bloquer sans issue.
- **Condition réelle** : `unlock_condition.text` doit nommer une vraie mission existante — jamais vague ni inventée.
- **BLOCKED** si `title`, `body` ou `next_action` absent.
- **Ne pas utiliser** pour verrou auth/premium (→ AccessGate) ni UnlockBlock PlayKit.

## QA à vérifier
1. Modifier `title`/`body`/`next_action.label` → rendu change sans toucher au HTML. 2. `body:""` → BLOCKED propre. 3. `progress` absent → bloc masqué proprement. 4. `hint` absent → bloc masqué proprement. 5. CTA → panel confirmation avec action. 6. Responsive 375/768/1024.

## external_refs / dependencies
- **EdTechPathMap** : ce GAB est un composant de l'orchestrateur PathMap (GAB-186 à GAB-190).
- Missions prérequises référencées dans `unlock_condition.text` sont servies par d'autres modules (GAB-188 PathMapMissionNode, ou modules Story/Interactive/Exercise/Memory/Game/Audio/LevelTest).
- Progression réelle calculée par le moteur de parcours (PlayKit) — ce GAB affiche uniquement les valeurs fournies dans l'instance.

## Source
`INDEX-300-pathmap-GAB-186-190-PLAYABLE.html` (stage `data-tpl="189"`, styles `.ln-*`).
