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

# GAB-345 · SafetyFallbackLearningEscalateToHuman — « Escalader vers un humain »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechSafetyFallbackLearning
**Critère validé :** changer le JSON change l'écran d'escalade sans modifier le HTML. ✅ check.py 12/12.

## 🚩 GAB SENSIBLE — REVUE BOSS REQUISE
Ce gabarit touche au **child-safety / sécurité du mineur** : escalade d'une situation qui dépasse l'outil vers un humain (professeur, adulte de confiance).
- **Extraction ULTRA-prudente** : tout le contenu provient STRICTEMENT du HTML source (`INDEX-300-safetyfallbacklearning-GAB-341-345-PLAYABLE.html`, bloc `<!-- GAB-345 -->`, handlers `d345Pick/d345Send/d345Cancel`).
- **AUCUNE invention** : aucun destinataire réel, aucune coordonnée, aucune procédure d'urgence (numéro d'aide, SAMU, etc.) n'a été ajoutée — la source n'en contenait pas.
- ⚠️ **Avant toute mise en prod** : faire valider par Boss le wording d'escalade, la liste des destinataires réels et l'éventuel ajout de ressources d'aide officielles (HORS scope de cette conversion).

## Pack (structure officielle par-GAB)
```
GAB-345/
  renderer.html            ← moteur escalade (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` · `escalation_id` · `escalation_threshold` · `recipient[]{id,icon,label,dest}` · `consent{confirm_label,cancel_label,destination_template}`
Optionnels : `title`, `prompt`, `message`, `privacy`, `follow_up_status{sent,sent_button_label,cancelled}`, `states`, `use_when[]`, `do_not_use_when[]`, `fallback_text_summary`, `child_safety`.

## Ce qui vient du JSON vs HTML
- **JSON** : phrase de seuil d'escalade, l'invite, la liste des destinataires (icône + libellé), le message minimal transmis, la mention de minimisation des données, les libellés des boutons consentement/annuler, les messages de suivi (envoyé / annulé), les libellés d'état, les listes use_when / do_not_use_when.
- **HTML** : liste de destinataires (grille), boutons structurels (autoriser / annuler), panneaux note/ok/bad, badge d'état, layout, fallback.

## Garde-fous (child_safety)
- **Consentement EXPLICITE avant envoi** : choisir un destinataire passe à l'état `permission_check` ; rien n'est envoyé tant que l'utilisateur n'a pas cliqué « J'autorise l'envoi ».
- **Minimisation des données** : le message transmis est minimal (« J'ai besoin d'aide sur une situation. ») + mention `(sans détail privé inutile)`.
- **Utilisateur garde le contrôle** : « Annuler » → état `not_sent`, rien n'a été envoyé, escalade possible plus tard.
- **Anti-invention** : seuls les destinataires fournis dans `recipient` sont proposés ; aucune identité/coordonnée réelle inventée.
- **BLOCKED** si `escalation_threshold` absent / `recipient` vide / `consent` absent.

## États d'escalade (depuis `states`)
`confirmation_needed` (initial) → `permission_check` (destinataire choisi) → `sent` (consentement donné) | `not_sent` (annulé).

## QA à vérifier
1. Modifier un libellé destinataire / message → rendu change sans toucher au HTML (critère d'or). 2. `recipient:[]` → BLOCKED propre. 3. Choix destinataire → récap message minimal + CTA consentement. 4. Confirmation → suivi « en attente de prise en charge », bouton désactivé. 5. Annulation → rien envoyé, contrôle utilisateur. 6. Responsive 375/768/1024.

## Source
`INDEX-300-safetyfallbacklearning-GAB-341-345-PLAYABLE.html` (stage `data-tpl="345"`, handlers `d345Pick` / `d345Send` / `d345Cancel`).

## external_refs / dependencies
- **GAB-341** (référencé dans `do_not_use_when` : « gérable par un fallback simple → GAB-341 »). Référence textuelle hors-lot uniquement ; aucune dépendance de code. Pas d'autre dépendance externe.
