# GAB-328 · ResearchLearningSynthesisGrid — « Grille de synthèse »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechResearchLearning
**Critère validé :** changer le JSON change la grille sans modifier le HTML. check.py 12/12.

## Pack (structure officielle par-GAB)
```
GAB-328/
  renderer.html            ← moteur grille de synthèse (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` · `synthesis_grid_id` · `grid_rows[]{row_id,idea,source_ref,evidence,contradiction:boolean}` · `primary_cta{label,action}` · `answer_plan{parts[],note?}`

Optionnels : `title`, `instruction`, `contradiction_warning`, `cta_locked_label`, `cta_done_label`, `fallback_text_summary`.

## Ce qui vient du JSON vs HTML
- **JSON** : chaque ligne (idée, source, preuve, flag contradiction), le message d'avertissement contradiction, les parties du plan de réponse, les libellés du bouton CTA.
- **HTML** : grille à cocher, logique de déverrouillage du CTA, layout, fallback BLOCKED.

## Archétype
Grille de synthèse multi-sources : l'élève coche les lignes idée → source → preuve une à une. Quand toutes les lignes sont cochées, le bouton CTA se déverrouille et génère le plan de réponse structuré. Une ligne `contradiction:true` déclenche un avertissement spécifique dès qu'elle est cochée.

## Garde-fous (child_safety)
- **BLOCKED** si `grid_rows` absent/vide, `primary_cta` absent, ou `answer_plan` absent.
- Le plan de réponse n'est jamais affiché avant validation complète de la grille (CTA désactivé).
- Aucune donnée n'est inventée : toutes les valeurs viennent du JSON.
- Le flag `contradiction` est un booléen strict — aucune inférence par le moteur.

## QA à vérifier
1. Modifier `idea`/`source_ref`/`evidence` → rendu change sans toucher au HTML (critère d'or).
2. `grid_rows:[]` → BLOCKED propre.
3. `primary_cta` absent → BLOCKED propre.
4. Cocher toutes les lignes → CTA débloqué.
5. Clic CTA → plan affiché depuis `answer_plan.parts` (pas de contenu en dur).
6. Ligne `contradiction:true` cochée → `contradiction_warning` affiché.
7. Responsive 375/768/1024.

## external_refs / dependencies
- Dépendances inter-GAB (usage panel extrait du source) :
  - GAB-327 (ResearchLearningQuoteCaptureCard) : capture de citation — ne pas confondre avec la grille de synthèse.
  - GAB-329 (ResearchLearningBiasPerspectiveCheck) : vérification des biais — use-case différent.
  - GAB-328 est le seul GAB du lot dédié à la **synthèse multi-sources** avec plan de réponse généré.

## Source
`INDEX-300-researchlearning-GAB-326-330-PLAYABLE.html` (stage `data-tpl="328"`, handlers `d328Row`, `d328Plan`).
