# GAB-251 · CollaborationLearningIntro — « Cadre d'une activité à plusieurs »

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

## Pack (structure officielle par-GAB)
```
GAB-251/
  renderer.html            ← moteur intro collaboration (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` · `collab_intro_id` · `title` · `subtitle` · `collaboration_type` · `roles[]{step,label,instruction}` · `primary_cta{label,action}`

Optionnels : `roles_heading`, `estimated_duration`, `secondary_cta{label,action}`, `collab_types{…}`.

## Archétype
**Intro collaborative** : présente le cadre pédagogique d'une activité à plusieurs (couche élève).
Distinct de GAB-441 (ClassroomLiveBoard = tableau partagé prof, couche école).

Enum `collaboration_type` — 6 valeurs strictes :
| Valeur | Titre par défaut |
|---|---|
| `student_student` | Travailler à deux |
| `revision_duo` | Réviser à deux |
| `parent_child` | On révise ensemble |
| `student_teacher` | Mini séance avec ton prof |
| `small_group` | En petit groupe |
| `oral_duo` | Préparer un oral à deux |

## Ce qui vient du JSON vs HTML
- **JSON** : titre, sous-titre, rôles (3 étapes), durée, libellé des CTAs, variantes par `collaboration_type`.
- **HTML** : layout carte, chips enum, numéros de rôles, boutons structurels.

## Garde-fous (child_safety)
- **BLOCKED** si `title` absent / `roles` vide / `primary_cta` absent.
- **Anti-invention** : aucun texte pédagogique en dur dans le HTML — 100 % piloté instance.
- **Enum strict** : `collaboration_type` doit être l'une des 6 valeurs listées ; le moteur switche les variantes via `collab_types`.
- **Rôles = 3 étapes** : la source impose toujours 3 étapes numérotées — le moteur les affiche dynamiquement.

## QA à vérifier
1. Modifier `title`/`subtitle` dans l'instance → rendu change sans toucher au HTML.
2. `roles:[]` → BLOCKED propre.
3. `primary_cta` absent → BLOCKED propre.
4. Clic chip `parent_child` → titre/rôles/CTA switchent (via `collab_types`).
5. Injection instance externe (`ENGINE.init(myData)`) → rendu change.
6. Responsive 375/768/1024 — chips enum wrap proprement.

## external_refs / dependencies
- Aucune référence hors-lot dans ce GAB.
- Pour les GABs suivants du même lot : GAB-252 (PairTask), GAB-253 (SharedAnswer), GAB-254 (PeerFeedback), GAB-255 (GroupReflection) — tous dans `LOT-collaborationlearning-GAB-251-255/`.

## Source
`INDEX-300-collaborationlearning-GAB-251-255-PLAYABLE.html` (stage `data-tpl="251"`, handler `ciPick`, objet `CI_TYPES`).
