# GAB-198 · PathMapReviewLoop — « Boucle de révision courte »

**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-198/
  renderer.html            ← moteur boucle révision (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` · `review_loop_id` · `title` · `issue_text` · `steps[]{index,label,module_type,module_badge,duration_label}` · `primary_cta{label,action}`

Optionnels : `subtitle`, `issue_label`, `anti_loop_notice`, `skip_cta{label,action}`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, sous-titre, texte du point de fragilité (issue_text), libellé du bandeau issue, chaque étape (label, module_type, badge, durée), notice anti-loop, libellés des deux CTAs.
- **HTML** : layout carte, connecteur vertical dégradé entre les étapes, marqueurs de progression (1→✓), classes de couleur par index, logique done/total, rendu responsive.

## Archétype
Boucle de révision courte déclenchée après détection d'une fragilité sur le parcours. Anti-punitive par design : 3 micro-actions max, skip toujours disponible, garantie de non-répétition. V1_CORE · L · P0.

## Garde-fous (child_safety / pédagogie)
- **Anti-loop** : le champ `anti_loop_notice` est affiché tel quel — il doit indiquer que la boucle ne se répète PAS en cas d'erreur, jamais faire une promesse de résultat.
- **Pas punitif** : le champ `subtitle` peut indiquer le caractère court/non punitif de la boucle.
- **BLOCKED** si `steps` vide / `issue_text` absent / `primary_cta` absent.
- `steps` : 1 à 5 éléments maximum. Au-delà, réfléchir à un autre gabarit (cf GAB-182 QuickRetake).

## QA à vérifier
1. Modifier un `label` d'étape → rendu change sans toucher au HTML (critère d'or).
2. `steps:[]` → BLOCKED propre.
3. Clic étape → marqueur passe à ✓, fond mint.
4. Toutes étapes done → CTA primaire passe en vert "terminé".
5. `skip_cta` absent → bouton skip caché.
6. Responsive 375/768/1024 — CTAs empilés sur mobile.

## Liens externes / dependencies
- **external_refs / dependencies** : aucune dépendance hors-lot. Ce GAB est autonome.
- Gabarit voisin à ne PAS confondre : GAB-182 (QuickRetake LevelTest) — usage différent (repassage test de niveau, boucle plus longue).

## Source
`INDEX-300-pathmap-GAB-196-200-PLAYABLE.html` (stage `data-tpl="198"`, handler `rvDone`).
