{
  "gab_id": "GAB-221",
  "renderer_key": "text_cta",
  "content_match_id": "match-pythagore-redaction-justification",
  "_note_dev": "SOURCE DE VÉRITÉ. ContentMatch : sélection d'un candidat retenu dans un pool de contenus. anti-invention : match_type est un enum strict (6 valeurs). Les candidats 'eliminated' portent leur raison d'élimination. Le HTML (layout, candidats, boutons) ne change pas ; seuls ces champs changent le rendu.",
  "title": "Contenu choisi pour toi",
  "summary": "Sélection automatique basée sur signal récent",
  "match_type": "weakness",
  "selected_item": {
    "label": "Fiche méthode : rédiger une justification avec Pythagore",
    "slug": "visual/brevet-3e/pythagore-redaction-justification",
    "format": "visual",
    "estimated_duration": "~5 min",
    "difficulty": "facile"
  },
  "reason": "La difficulté porte sur la justification, pas sur le calcul. La fiche méthode est la ressource la plus directe pour corriger ce blocage précis.",
  "candidates": [
    { "label": "Fiche méthode : rédaction justification", "format": "visual", "status": "winner" },
    { "label": "Exercice brevet difficulté 4/5 (trop dur, blocage actuel)", "format": "exercise", "status": "eliminated", "skip_reason": "trop dur, blocage actuel" },
    { "label": "Vidéo introduction Pythagore (trop générique, déjà vu)", "format": "visual", "status": "eliminated", "skip_reason": "trop générique, déjà vu" },
    { "label": "Carte mémoire formule (signal ≠ mémoire)", "format": "memory", "status": "eliminated", "skip_reason": "signal ≠ mémoire" }
  ],
  "match_type_enum": ["objective", "weakness", "exam", "theme", "previous_activity", "teacher_assigned"],
  "primary_cta": { "label": "▶ Voir la fiche choisie", "action": "view_selected" },
  "secondary_cta": { "label": "Voir les alternatives", "action": "view_alternatives" },
  "skip_cta": { "label": "Skip", "action": "skip" }
}
