# GAB-294 · OralLearningJuryQuestion — « Questions de jury bienveillantes »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechOralLearning
**Critère validé :** changer le JSON change les questions, droits et CTAs sans modifier le HTML.

## Pack (structure officielle par-GAB)
```
GAB-294/
  renderer.html            ← moteur questions de jury (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` · `jury_question_id` · `oral_context_ref` · `questions[]{question_type, question_type_label, question_type_emoji, difficulty, difficulty_max, answer_time_hint, question_text, expected_answer_shape}` · `primary_cta{label, reveal_text}`

Optionnels : `title`, `subtitle`, `hesitation_rights[]{phrase,note}`, `follow_up_policy`, `hint_allowed`, `secondary_cta{label,reveal_text}`, `reason_block`, `feedback_ref`, `source_metadata`.

## Ce qui vient du JSON vs HTML
- **JSON** : chaque question (texte, type, difficulté, timing, forme de réponse attendue), droits à l'hésitation, politique anti-interrogatoire, raison pédagogique, libellés et contenus des CTAs.
- **HTML** : rendu structurel (blocs question, dots difficulté, zone droits, zone policy, reason block, boutons), layout responsive, palette DS V2.

## Archétype pédagogique
**OralLearningJuryQuestion** est un écran de simulation de jury bienveillant. Il présente un jeu de 1 à 5 questions ordonnées par difficulté croissante (`opening` → `factual` → `deepen` → `synthesis` → `meta`). L'écran rappelle les droits de l'élève face au jury (hésitation, reformulation) et la politique anti-interrogatoire (pas de surenchère). Contexte cible : entraînement oral DNB, soutenance de projet, oral de bac.

## Garde-fous (child_safety)
- **Bienveillance** : aucun libellé dans les CTAs ou questions ne doit être injonctif ou piégeux.
- **Droit à l'hésitation** : les `hesitation_rights` rappellent explicitement les droits de l'élève — ne pas les supprimer de l'instance.
- **Anti-interrogatoire** : `follow_up_policy` encadre la posture du jury — champ fortement recommandé.
- **BLOCKED** si `questions` vide, `jury_question_id` absent, `oral_context_ref` absent, `primary_cta` absent.

## QA à vérifier
1. Modifier `question_text` dans l'instance → rendu change sans toucher au HTML (critère d'or).
2. `questions:[]` → BLOCKED propre.
3. `jury_question_id` absent → BLOCKED propre.
4. Clic CTA primaire → `reveal_text` du primary_cta affiché.
5. Clic CTA secondaire → `reveal_text` du secondary_cta affiché.
6. Instance injectée via `ENGINE.init(monInstance)` → rendu change.
7. Responsive 375/768/1024 : aucun débordement horizontal.

## Source
`INDEX-300-orallearning-GAB-291-295-PLAYABLE.html` (stage `data-tpl="294"`, styles `.jq-*`, handlers `gabReveal`/`gabConfirm`).

## external_refs / dependencies
Aucune dépendance externe hors-lot. Le renderer est autonome (0 import, 0 fetch). La palette DS V2 (variables CSS `--violet`, `--mint`, `--magenta`, etc.) est auto-contenue dans le `<style>`.
