# GAB-220 · AdaptiveLearningNextStepBridge — « Pont sortie adaptative »

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

## Pack (structure officielle par-GAB)
```
GAB-220/
  renderer.html            ← moteur pont adaptatif (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` · `bridge_id` · `title` · `next_step_type` · `next_action` · `primary_cta`

Optionnels : `subtitle`, `decision_tag`, `result_heading`, `result_text`, `reason_heading`, `reason_text`, `secondary_cta`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, subtitle, tag décision, texte résultat, raison expliquée, type d'étape suivante (8 valeurs enum), texte de l'action, libellés des 2 boutons.
- **HTML** : layout, direction card, icône/badge auto-dérivés de `next_step_type`, boutons structurels, feedback panel, slots.

## Enum next_step_type (8 valeurs)
| Valeur | Icône | Badge couleur |
|---|---|---|
| `advance` | 🚀 | vert (mint) |
| `review` | ↻ | violet |
| `test` | 🧭 | vert (mint) |
| `memory` | 🧠 | or (gold) |
| `visual` | 📊 | bleu ciel |
| `exercise` | 📝 | bleu ciel |
| `pathmap` | 🗺️ | or (gold) |
| `ketty` | 🦊 | corail |

Valeur inconnue → fallback icône ➡️ sans BLOCKED (fail silencieux gracieux).

## Garde-fous
- **BLOCKED** si `title`, `next_step_type`, `next_action` ou `primary_cta` absent.
- `result_box` masqué si `result_text` absent — pas de bloc vide visible.
- `reason_block` masqué si `reason_text` absent — idem.
- `secondary_cta` optionnel : affiche 'Alternative' si absent, ne bloque pas.
- Aucune ombre `rgba(0,0,0,...)` — ombres colorées DS V2 uniquement.

## QA à vérifier
1. Modifier `next_action`/`primary_cta` → rendu change sans toucher au HTML (critère d'or).
2. `primary_cta` absent → BLOCKED propre.
3. `next_step_type='ketty'` → icône 🦊, badge corail.
4. Clic primary → feedback vert. Clic secondary → feedback neutre.
5. `result_text` absent → result-box masqué.
6. Responsive 375/768/1024 — aucun débordement.

## Contexte d'usage (use_when / do_not_use_when)
- **use_when** : après recommandation / remédiation / master check ; 1 action principale + alternative ; raison expliquée.
- **do_not_use_when** : NextActionCTA générique ; remplace PathMapRecommendedRoute (→ GAB-194) ; force action unique sans alternative.

## external_refs / dependencies
- Lot parent : `LOT-adaptivelearning-GAB-216-220`
- Gabarit antérieur : GAB-216 (MasteryCheckQCM) → décision ADVANCE → GAB-220
- Alternative remédiation : GAB-213 (RemediationPath) → décision REMEDIATE → ne passe pas par GAB-220

## Source
`INDEX-300-adaptivelearning-GAB-216-220-PLAYABLE.html` (stage `data-tpl="220"`, handlers `nbStep`, `peConfirm`, `peNote`).
