# LOT DocumentLearning 301-305 — structure CLEAN

Conversion data-driven du groupe source `INDEX-300-documentlearning-GAB-301-305-PLAYABLE.html`, au format CLEAN (aligné sur `GAB-VALIDE/GAB-UPDATED-MODEL`).

## Structure
```
core-contracts/   GAB-XXX.schema.json           ← LE CONTRAT (valide l'instance)
instances/        GAB-XXX.instance.example.json ← L'INSTANCE (contenu réel, source de vérité, À PLAT)
renderers/        GAB-XXX.renderer.html         ← LE MOTEUR (consomme l'instance, 0 contenu en dur)
OVERVIEW.html     visualiseur à onglets
README.md         ce fichier
```

## Contenu du lot
| GAB | canonical_name | renderer_key (cartographie) | check.py |
|---|---|---|---|
| GAB-302 | DocumentLearningSourceCard | `text_cta` | ✅ VALIDÉ 12/12 |
| GAB-303 | DocumentLearningObserveDescribe | `annotation_media` | ✅ VALIDÉ 12/12 |
| GAB-304 | DocumentLearningExtractInformation | `text_cta` | ✅ VALIDÉ 12/12 |
| GAB-305 | DocumentLearningInterpretEvidence | `text_cta` | ✅ VALIDÉ 12/12 |

> GAB-301 (DocumentLearningIntro) = déjà couvert par la référence kit `EXEMPLES-VALIDES/GAB-301`, non reconverti ici.

## 3 rôles (séparation stricte)
- **core-contracts/** = schéma de validation (required_fields, types, blocked_conditions, **accessibility**, **qa_cases**, **traceability**). NE recopie PAS le contrat pédagogique complet (input_contract/validation_logic) — celui-ci vit dans le CORE-GAB officiel. `traceability.derived_from_core_gab` pointe vers le gab_id source.
- **instances/** = contenu réel À PLAT (textes, zones, items, feedbacks). Source de vérité.
- **renderers/** = moteur HTML générique, lit l'instance (`window.GAB_INSTANCE` inline = jumeau du .json ; prêt pour instance externe via `DATA = (arguments.length && ext) ? ext : (window.GAB_INSTANCE || null)`). 0 contenu en dur.

## Garanties
- **0 contenu inventé** : tout extrait des écrans source (handlers `d302Field`/`d303Zone`/`d304Pick`/`d305Infer`). Aucun `_TODO`.
- **check.py** : 4/4 VALIDÉ (validation par assemblage temporaire d'un dossier/GAB ; check.py inchangé).
- Anti-surinterprétation (GAB-305) : le niveau d'inférence "fort" reste signalé, jamais validé.

## Reste (gate qualité, hors check.py structurel)
- ⏳ **Playwright** : preuve visuelle "changer le JSON change le rendu" + screenshots desktop/mobile.
- 🔍 **Audit Boss** avant industrialisation des vagues suivantes.

## Source
`/var/www/2.SOURCES/GAB/GAB-001-390-DATA-SOURCES/GAB-DATA-SOURCES/INDEX-300-documentlearning-GAB-301-305-PLAYABLE.html`
