# GAB-306 · DocumentLearningCompareDocuments — « Comparer deux documents »

**Archétype / renderer_key :** `compare_grid` (cartographie) · **module :** EdTechDocumentLearning
**Note :** renderer_key `compare_grid` à concevoir — pas de moteur kit de référence dans EdTechDocumentLearning pour ce renderer. Le moteur est dérivé de l'écran source GAB-306.
**Critère validé :** changer le JSON change les documents, axes et feedbacks sans modifier le HTML. check.py 12/12.

## Pack (structure officielle par-GAB)
```
GAB-306/
  renderer.html            <- moteur comparaison (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` · `compare_id` · `documents[]{id,label,excerpt}` (min 2) · `compare_axes[]{id,label,relation,feedback}` (min 1) · `evidence_per_doc{doc_id:string}`

Optionnels : `title`, `instruction`, `contradictions[]`, `_note_dev`.

## Ce qui vient du JSON vs HTML
- **JSON** : contenu des documents (label + excerpt), axes de comparaison, feedbacks par axe, relation (concordance/difference/warning).
- **HTML** : grille 2 colonnes, boutons d'axes, panneau de feedback, layout, slots affichés, footer.

## Logique de relation / feedback
| relation | style panel | comportement |
|---|---|---|
| `concordance` | `.panel.note` (surface neutre) | feedback affiché après clic, pas de warning |
| `difference` | `.panel.note` (surface neutre) | feedback affiché après clic, pas de warning |
| `warning` | `.panel.warn` (gold) | feedback commence par ⚠, signale info absente |

## Garde-fous (child_safety)
- **Anti-invention** : si une info est absente des deux documents, l'axe porte `relation:'warning'` et le feedback commence par `⚠` + instruction de ne pas inventer.
- **Incertitude visible** : les axes sans réponse certaine sont affichés en warn, jamais masqués.
- **BLOCKED** si `documents` absent ou < 2 entrées / `compare_axes` vide / `evidence_per_doc` absent.

## QA à vérifier
1. Modifier un `excerpt` ou un `feedback` → rendu change sans toucher au HTML (critère d'or).
2. `documents` avec 1 seul item → BLOCKED propre.
3. `compare_axes:[]` → BLOCKED propre.
4. Axe `relation:'warning'` → panel gold, feedback ⚠.
5. Axe `relation:'concordance'` → panel neutre.
6. Injection `ENGINE.init(ext)` → rendu change.
7. Responsive 375/768/1024 : colonnes docs passent en 1 colonne mobile.

## Source
`INDEX-300-documentlearning-GAB-306-310-PLAYABLE.html` (stage `data-tpl="306"`, handler `d306Axis`).

## external_refs / dependencies
Aucune dépendance externe. Contenu thématique (Révolution française, pain, sols) issu exclusivement du HTML source — contexte exemple pédagogique.
