> ⚠️ **GAB SENSIBLE — VALIDATION BOSS OBLIGATOIRE avant tout usage.** (child-safety / RGPD / orientation / career). Contenu extrait sans invention ; à relire par un humain.

# GAB-350 · SafetyFallbackLearningRecoveryPath — « Chemin de reprise »

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

> 🚨 **GAB SENSIBLE — REVUE BOSS REQUISE.** Ce gabarit relève de la **child-safety** (reprise après interruption, anti-bouclage, continuité de progression). Tout contenu a été extrait **strictement** du HTML source, **aucune invention**. Avant toute mise en production des libellés/feedbacks/règles de sécurité (loop_prevention, escalade GAB-346), **validation explicite Boss obligatoire**.

## Pack (structure officielle par-GAB)
```
GAB-350/
  renderer.html            ← moteur chemin de reprise (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` · `recovery_path_id` · `previous_state{kind,body,progress}` · `recovery_choices[]{choice,label,icon,feedback,result_state,is_safe}` · `action_order[]`
Optionnels : `title`, `prompt`, `initial_state_badge`, `loop_prevention`, `progress_continuity`, `source_notice`.

## Ce qui vient du JSON vs HTML
- **JSON** : état précédent affiché, chaque option de reprise (libellé, icône, feedback, état résultant, is_safe), l'ordre d'action, le badge d'état, la note anti-bouclage.
- **HTML** : carte « état sauvegardé », liste de choix ordonnée, badge d'état, panneaux de feedback, layout, fallback.

## Garde-fous (child_safety)
- **Pas de perte d'état** : `previous_state.body` est requis et affiché — la progression précédente reste visible/sauvegardée (`progress_continuity`).
- **Anti-bouclage** : `loop_prevention` rappelle qu'on ne reboucle jamais sur la même erreur ; sinon escalade vers **GAB-346** (erreur technique brute).
- **Reprise sûre garantie** : au moins un `recovery_choice` avec `is_safe:true` (ici « Reprendre où j'en étais »).
- **Ordre d'action clair** : `action_order` impose l'ordre des choix au rendu (reprise → recommencer → alternative).
- **Anti-invention** : tout le contenu provient du HTML source GAB-350 ; aucun libellé/feedback ajouté.
- **BLOCKED** si `previous_state` sans body / `recovery_choices` vides / `action_order` absent.

## QA à vérifier
1. Modifier un `feedback`/`label` → rendu change sans toucher au HTML (critère d'or). 2. `recovery_choices:[]` → BLOCKED propre. 3. Clic « Reprendre » (is_safe) → panneau ok + badge `recovered`. 4. Clic « Faire autre chose » → panneau note (bascule sans bloquer). 5. Responsive 375/768/1024.

## external_refs / dependencies
- **GAB-346** (même lot, SafetyFallbackLearning) : cible d'escalade si l'alternative ne suffit pas (« erreur technique brute → GAB-346 »). Référence documentaire dans `loop_prevention`, pas une dépendance de rendu.

## Source
`INDEX-300-safetyfallbacklearning-GAB-346-350-PLAYABLE.html` (stage `data-tpl="350"`, handler `d350Pick`). Slots source : `previous_state`, `recovery_choice`, `action_order`, `loop_prevention`, `save`, `progress_continuity`, `next_safe_action`.

## TODO / contenus manquants
- Aucun `_TODO` : tous les champs requis sont peuplés depuis le HTML source.
- Slots `save` et `next_safe_action` du HTML source ne sont pas matérialisés par du contenu en dur dans le bloc jouable — couverts conceptuellement par `progress_continuity` (save) et `recovery_choices`/`is_safe` (next_safe_action). À confirmer avec le CORE-GAB officiel si un mapping explicite est requis (revue Boss).
