# GAB-253 · CollaborationLearningSharedAnswer — « Réponse commune construite à plusieurs »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechCollaborationLearning
**Critère validé :** changer le JSON change le rendu (titre/sous-titre/cta/pipeline/conflit) sans modifier le HTML. check.py 12/12.

## Pack (structure officielle par-GAB)
```
GAB-253/
  renderer.html            moteur réponse commune (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` · `shared_answer_id` · `shared_answer_type` · `shared_answer_types[]{key,title,sub,cta}` · `pipeline_steps[]{step,label,status}` · `primary_cta{label,action}`

Optionnels : `title`, `subtitle`, `doc_version_label`, `contributors[]{initial,name}`, `autosave_interval_s`, `conflict{active,count,detail}`, `secondary_cta{label,action}`, `version_tag`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre et sous-titre actif (selon shared_answer_type sélectionné), 5 valeurs de l'enum, libellés des 3 étapes du pipeline, données contributeurs et auto-save, détail du conflit, libellés des boutons.
- **HTML** : layout pipeline, doc-zone (brouillon simulé), conflict-box conditionnelle, enum chips, boutons structurels, slots panel.

## Archétype
GAB-253 est le troisième maillon de la chaîne CollaborationLearning (251 → 252 → **253** → 254 → 255). Il couvre le pipeline co-écriture : proposition → fusion → validation, avec un mécanisme conflict-aware (désaccord entre contributeurs à résoudre).

## Garde-fous (child_safety / V1_X)
- **V1_X** : flag `version_tag:"V1_X"` obligatoire — signale les contraintes safety/versioning de co-écriture en temps réel.
- **Conflict-aware** : `conflict.active:false` masque proprement la conflict-box — jamais afficher un conflit fantôme.
- **Enum strict** : `shared_answer_type` ne peut prendre que les 5 valeurs déclarées dans `shared_answer_types`. Toute valeur hors-liste = BLOCKED.
- **Pipeline** : 1 seule étape `active` à la fois. Étapes `done` en vert, `pending` neutre.
- **BLOCKED** si `shared_answer_type` absent / `shared_answer_types` vides / `pipeline_steps` vides / `primary_cta` absent.

## QA à vérifier
1. Clic sur une enum chip → titre/sous-titre/cta se mettent à jour sans modifier le HTML (critère d'or).
2. `shared_answer_types:[]` → BLOCKED propre.
3. `conflict.active:false` → conflict-box masquée.
4. Pipeline : étape `done` = fond vert, `active` = fond violet, `pending` = neutre.
5. Responsive 375/768/1024 : pipeline en colonne sur mobile, aucun débordement.

## Source
`INDEX-300-collaborationlearning-GAB-251-255-PLAYABLE.html` (stage `data-tpl="253"`, handlers `saPick`, objet `SA_TYPES`).
