# GAB-170 · AudioDictationPrompt — « Dictée audio »

**Archétype / renderer_key :** `media_viewer` (cartographie) · **module :** EdTechAudioLearning
**renderer_key à concevoir (pas de moteur kit)** — le renderer est dérivé directement de l'écran source `INDEX-300-audiolearning-GAB-166-170-PLAYABLE.html`.

## Pack (structure officielle par-GAB)
```
GAB-170/
  renderer.html            ← moteur dictée audio (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` · `dictation_id` · `audio{text,lang,rate_normal,rate_slow}` · `instruction` · `answer`

Optionnels : `title`, `tolerance`, `feedback{perfect,close,wrong,empty,reveal_label}`, `controls{play_label,slow_label,repeat_label,pause_label,check_label,reveal_label}`, `accessibility{textarea_placeholder,transcript_always_available}`.

## Ce qui vient du JSON vs HTML
- **JSON** : phrase audio (`audio.text`), langue TTS (`audio.lang`), débits normal/lent, instruction, tous les libellés boutons, tous les feedbacks, la réponse de référence (`answer`), la tolérance de correction (`tolerance`).
- **HTML** : layout de la carte, zone textarea, boutons structurels, logique de correction (distance simple), moteur TTS Web Speech API.

## Archétype
Dictée écrite guidée par TTS navigateur. L'élève écoute la phrase (avec contrôles lire / plus lent / répéter / pause), la transcrit, puis clique « Vérifier » (correction tolérante) ou « Révéler ». Aucune donnée pédagogique en dur dans le renderer.

## Garde-fous (child_safety / module doctrine)
- **Transcript toujours disponible** : doctrine EdTechAudioLearning (RGPD mineurs + accessibilité sourds/malentendants/silence) — `accessibility.transcript_always_available: true`.
- **BLOCKED** si `audio.text` absent / `answer` absent / `instruction` absent.
- **Anti-invention** : aucun libellé, aucune phrase, aucun feedback n'est codé en dur dans le HTML.
- **TTS local** : Web Speech API, aucune donnée vocale transmise à un serveur tiers.
- `answer` DOIT correspondre à `audio.text` dans une instance pédagogique réelle (à valider côté producteur de contenu).

## QA à vérifier
1. Modifier `audio.text` + `answer` → rendu change sans toucher au HTML (critère d'or).
2. `audio` absent → BLOCKED propre.
3. Zone texte vide + vérifier → feedback `empty` (coral).
4. Réponse exacte → feedback `perfect` (mint).
5. Réponse proche (diff ≤ `tolerance`) → feedback `close` + correction (mint).
6. Réponse éloignée → feedback `wrong` + phrase exacte (coral).
7. Clic révéler → `answer` affiché avec `reveal_label`.
8. Responsive 375/768/1024 — pas de débordement.

## external_refs / dependencies
- **Web Speech API** (`SpeechSynthesisUtterance`) : requis pour la lecture TTS. Fallback silencieux si absent (aucun crash). Navigateurs supportés : Chrome, Edge, Safari (Firefox partiel).
- Pas de dépendance réseau pour le rendu (TTS local, aucun asset externe).

## Source
`INDEX-300-audiolearning-GAB-166-170-PLAYABLE.html` (stage `data-tpl="170"`, CSS `.dp-*`, handlers `dpPlay / dpSlow / dpRepeat / dpPause / dpCheck / dpReveal`, constante `DP_PHRASE`).
