# GAB-388 · MediaLearningGeneratedAssetNotice — « Notice asset généré par IA »

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

## Pack (structure officielle par-GAB)
```
GAB-388/
  renderer.html            ← moteur notice asset IA (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` · `asset_id` · `asset_label` · `asset_description` · `provider` · `status` · `pedagogical_review_required`

Optionnels : `notice_text`, `cta_validate{label,action}`, `cta_reject{label,action}`, `cta_regenerate{label,action}`, `feedback_validated`, `feedback_rejected`, `feedback_regenerated`.

## Ce qui vient du JSON vs HTML
- **JSON** : label de l'asset, description, provider, texte de la notice, libellés des 3 boutons, messages de feedback (validé/rejeté/régénéré).
- **HTML** : layout carte, notice panel, rangée de 3 boutons structurels, styles DS V2.

## Archétype
Asset IA = brouillon non fiable par défaut. Le workflow impose une vérification pédagogique avant tout usage en classe : valider (exactitude + droits + alt), rejeter, ou demander une régénération avec prompt corrigé.

## Garde-fous (child_safety)
- **Notice obligatoire et non masquable** : `notice_text` est toujours affiché dès l'init.
- **BLOCKED** si `asset_id`, `provider` ou `status` absents : un asset sans fournisseur ni statut ne peut pas être rendu.
- **Bouton Valider désactivé** après action de validation : interdit de valider deux fois.
- **Asset non diffusable aux élèves** tant que `status !== 'validated'` (guard applicatif côté consommateur).

## QA à vérifier
1. Modifier `asset_description` / `provider` → rendu change sans toucher au HTML (critère d'or).
2. `provider` absent → BLOCKED propre avec message.
3. Clic Valider → `feedback_validated` affiché + bouton désactivé.
4. Clic Rejeter → `feedback_rejected` affiché (panel bad).
5. Clic Régénérer → `feedback_regenerated` affiché (panel note).
6. Instance externe injectée via `ENGINE.init(ext)` → rendu change.
7. Responsive 375/768/1024.

## Source
`INDEX-300-medialearning-GAB-386-390-PLAYABLE.html` (stage `data-tpl="388"`, handlers `d388Validate`, `d388Reject`, `d388Regen`).
