# GAB-302 · DocumentLearningSourceCard — « Fiche source & fiabilité »

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

## Pack (structure officielle par-GAB)
```
GAB-302/
  renderer.html            ← moteur fiche source (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` · `source_card_id` · `document_ref{src,kind,alt}` · `source_title` · `source_type` · `known_metadata[]{field,value,known,why}`
Optionnels : `title`, `reliability{score,label,rationale}`, `primary_cta{label,action}`, `source_notice`, `fallback_text_summary`.

## Ce qui vient du JSON vs HTML
- **JSON** : chaque métadonnée, son statut `known`, son `why` au clic, la fiabilité, le **libellé** du bouton.
- **HTML** : grille de champs, barre de fiabilité, bouton structurel, layout, fallback.

## Garde-fous (child_safety)
- **Anti-invention** : un champ inconnu porte `known:false` + un `why` qui dit qu'on ne l'invente PAS (ex : « Auteur inconnu — on NE l'invente PAS »).
- **Incertitude visible** : provenance/auteur incertains affichés, jamais masqués.
- **Fiabilité = signal**, jamais une note officielle.
- **BLOCKED** si `known_metadata` vide / `source_type` absent / `document_ref` absent.

## QA à vérifier
1. Modifier une `value`/`why` → rendu change sans toucher au HTML (critère d'or). 2. `known_metadata:[]` → BLOCKED propre. 3. Clic champ inconnu → message « on n'invente pas ». 4. CTA → barre = `reliability.score`. 5. Responsive 375/768/1024.

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