# GAB-252 · CollaborationLearningPairTask — « Tâche structurée en binôme »

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

## Pack (structure officielle par-GAB)
```
GAB-252/
  renderer.html            ← moteur tâche binôme (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` · `pair_task_id` · `pair_task_type` · `title` · `summary` · `role_a_label` · `role_a_body` · `role_b_label` · `role_b_body` · `steps[]{num,text}` · `primary_cta{label,action}`

Optionnels : `pair_task_type_enum`, `steps_heading`, `reason_text`, `secondary_cta{label,action}`, `_note_dev`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, sous-titre (summary), étiquettes et corps des rôles A/B, liste des étapes, titre section étapes, texte explication pédagogique, libellés CTAs.
- **HTML** : grille rôles, liste steps, boîte raison, layout, responsive, gestion BLOCKED.

## Archétype pédagogique
GAB-252 structure une **tâche à deux avec rôles différenciés et alternance**. Le `pair_task_type` est l'enum clé (6 valeurs) : `explain_and_check`, `question_and_answer`, `correction_swap`, `parent_child_revision`, `oral_partner`, `co_solve`. L'instance `correction_swap` (valeur par défaut jouable) démontre : Élève A résout / Élève B corrige / rotation.

## Garde-fous (child_safety)
- Rôles toujours **différenciés** : un binôme sans rôles clairs → ne pas utiliser GAB-252 (→ GAB-251 intro).
- Alternance des rôles = règle pédagogique core : les étapes DOIVENT le mentionner.
- `parent_child_revision` = cas parent/enfant sensible — libellés bienveillants attendus.
- BLOCKED si steps vide / rôles absents / primary_cta absent.

## Chaîne de collaboration (context)
GAB-252 est le **maillon 2** de la chaîne : 251 Intro → **252 PairTask** → 253 SharedAnswer → 254 PeerFeedback → 255 GroupReflection.

## QA à vérifier
1. Modifier `title` / `role_a_body` / `steps[0].text` → rendu change sans toucher au HTML (critère d'or).
2. `steps:[]` → BLOCKED propre.
3. `secondary_cta` absent → bouton masqué, pas d'erreur JS.
4. ENGINE.init(ext) avec instance externe → rendu complet.
5. Responsive 375 px : roles-grid passe en 1 colonne.

## Source
`INDEX-300-collaborationlearning-GAB-251-255-PLAYABLE.html` (stage `data-tpl="252"`, handlers `ptPick`, objet `PT_TYPES`, valeur active `correction_swap`).
