# GAB-305 · DocumentLearningInterpretEvidence — « Interpréter une preuve »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechDocumentLearning
**Critère validé :** changer le JSON change l'écran sans modifier le HTML. ✅ check.py 12/12.

## Pack (structure officielle par-GAB)
```
GAB-305/
  renderer.html            ← moteur niveaux d'inférence (ne pas modifier par instance)
  instance.example.json    ← SOURCE DE VÉRITÉ (à plat)
  schema.contract.json     ← contrat de validation
  README-contract.md       ← ce fichier
```

## Champs requis (instance, à plat)
`gab_id` · `evidence_ref` (preuve observée) · `interpretation_prompt` · `interpretation_rules` · `inference_levels[]{label,level,verdict,tone,why}`
Optionnels : `synthesis_on_success`, `max_safe_level`.

## Ce qui vient du JSON vs HTML
- **JSON** : la preuve, le prompt, les 3 niveaux d'inférence (prudent/moyen/fort) + leur verdict/feedback, la synthèse de réussite.
- **HTML** : boutons de niveau, zone preuve, layout, fallback.

## Garde-fous (sujet sensible : sur-interprétation)
- **Anti-sur-interprétation** : le niveau « fort » reste toujours `verdict:overinterpreted` / `tone:bad`, **jamais validé**, jamais de synthèse.
- **`max_safe_level`** : seul le niveau prudent (`level 1`) déclenche `synthesis_on_success`.
- **Anti-invention** : aucune interprétation hallucinée ; tout vient de l'écran source.
- **BLOCKED** si `evidence_ref` absente / `inference_levels` vide.

## QA à vérifier
1. Modifier un niveau d'inférence → rendu change sans toucher au HTML. 2. Niveau « fort » → toujours signalé, jamais validé. 3. `inference_levels:[]` → BLOCKED. 4. Responsive 375/768/1024.

## Source
`INDEX-300-documentlearning-GAB-301-305-PLAYABLE.html` (stage `data-tpl="305"`, handler `d305Infer`).
