{
  "gab_id": "GAB-346",
  "renderer_key": "text_cta",
  "error_id": "err-technical-fallback-1",
  "_note_dev": "SOURCE DE VÉRITÉ. Écran fallback erreur technique : message public utile (jamais la stack), reprise limitée (pas de boucle infinie), état sauvegardé, fallback pédagogique. GAB SENSIBLE (child-safety) : aucun contenu inventé — tout extrait du HTML source GAB-346. Le HTML (layout, boutons, panneaux) ne change pas ; seuls ces champs changent le rendu.",
  "state": "error_detected",
  "title": "⚠️ Une erreur est survenue",
  "public_message": "Message public utile (pas la stack technique). Ton travail est sauvegardé.",
  "retry_policy": { "max_tries": 2, "retry_label": "Tentative {n}/2… état restauré depuis la sauvegarde.", "max_reached_label": "Échec après 2 tentatives — on ne reboucle pas à l'infini. Signalé à l'admin (debug séparé) ; choisis « continuer autrement »." },
  "state_save": "Ton travail est sauvegardé.",
  "primary_cta": { "label": "↻ Réessayer", "action": "retry" },
  "secondary_cta": { "label": "Continuer autrement", "action": "pedagogical_fallback" },
  "fallback_feedback": "Fallback pédagogique : on bascule sur une activité voisine. Ton travail est conservé, rien n'est perdu.",
  "admin_debug": "Signalé à l'admin (debug séparé).",
  "no_infinite_loop": true,
  "fallback_text_summary": "Une erreur technique est survenue ; le travail est sauvegardé ; reprise limitée à 2 tentatives, sinon bascule vers une activité voisine."
}
