# GAB-257 · CollaborationLearningExplainToPeer — « Expliquer une notion à un camarade »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechCollaborationLearning
**Critère validé :** changer le JSON change le titre, le summary, les rôles et le CTA sans modifier le HTML.

## Pack (structure officielle par-GAB)
```
GAB-257/
  renderer.html            ← moteur effet Feynman pair-learning (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
```

## Archétype pédagogique

**Effet Feynman pair-learning** : un élève (EXPLIQUEUR) explique une notion à un pair (ÉCOUTEUR). Les zones floues remontent naturellement. Le gabarit transforme l'élève en mini-prof temporaire.

4 étapes structurelles (Feynman) : Annoncer → Illustrer → Vérifier → Identifier.

Le champ `explain_target` pilote un sélecteur enum (concept / method / definition / chronology) qui swape dynamiquement titre, summary, instructions des rôles et libellé CTA via `target_variants`.

## Champs requis (instance, à plat)
`gab_id` · `explain_to_peer_id` · `title` · `summary` · `roles[]{key,label,instruction}` · `feynman_steps[]{num,verb,detail}` · `primary_cta{label,action}`

Optionnels : `explain_target`, `explain_target_enum`, `estimated_duration`, `mastery_label`, `subject_label`, `reason_title`, `reason_body`, `secondary_cta{label,action}`, `target_variants`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, accroche, durée, matière, instructions des 2 rôles, 4 étapes Feynman, titre+corps du bloc raison, libellé CTA primaire et secondaire, variantes par explain_target.
- **HTML** : grille de rôles, liste d'étapes numérotées, sélecteur enum, boutons structurels, layout responsif.

## Garde-fous (child_safety)
- **Anti-invention** : aucun contenu pédagogique n'est généré par le renderer. Tout vient de l'instance JSON.
- **Rôles équilibrés** : l'EXPLIQUEUR et l'ÉCOUTEUR ont des responsabilités distinctes et complémentaires — ne pas inverser sans cohérence pédagogique.
- **BLOCKED** si `title`, `summary`, `roles`, `feynman_steps` ou `primary_cta` sont absents.
- **Enum safety** : si `explain_target` n'est pas dans `explain_target_enum`, la variante est ignorée silencieusement (pas de crash).

## QA à vérifier
1. Modifier `title`/`summary`/`roles` → rendu change sans toucher au HTML (critère d'or).
2. `roles:[]` → BLOCKED propre.
3. Clic chip enum "method" → titre/summary/rôles/CTA swappés correctement.
4. `secondary_cta` absent → bouton secondaire masqué.
5. Responsive 375/768/1024 → roles-grid passe en 1 colonne sous 560 px.
6. ENGINE.init(autreInstance) → rendu complet sans recharger la page.

## Source
`INDEX-300-collaborationlearning-GAB-256-260-PLAYABLE.html` (stage `data-tpl="257"`, handlers `etpPick`, constante `ETP_TYPES`).
