# GAB-242 · AssessmentLearningQuestionSet — « Ensemble structuré de questions »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechAssessmentLearning
**Critère validé :** changer le JSON change le rendu (titres, questions, progression, CTAs) sans modifier le HTML.

## Pack (structure officielle par-GAB)
```
GAB-242/
  renderer.html            ← moteur QuestionSet (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
```

## Archétype : QuestionSet vs ExerciseQuestionCard

| GAB | Rôle |
|-----|------|
| ExerciseQuestionCard | UNE question isolée avec son input |
| **GAB-242** | **ENSEMBLE ordonné de questions avec barème interne et progression** |

Ce gabarit est déclenché par PlayEngine quand on veut afficher un groupe de 3 à 7 questions cohérentes avec une progression visible et des poids pédagogiques internes.

## Champs requis (instance, à plat)
`gab_id` · `question_set_id` · `questions[]{num, title, description, question_type, weight, status}` · `primary_cta{label, action}`

Optionnels : `title`, `subtitle`, `set_type`, `non_official_notice`, `progress{current, total, percent}`, `secondary_cta{label, action}`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre, sous-titre, type de set, chaque question (titre, description, type, poids, statut), pourcentage de progression, libellés CTAs, notice barème interne.
- **HTML** : layout carte, barre de progression, liste de questions avec styles active/done/pending, boutons structurels, fallback BLOCKED.

## Garde-fous (child_safety / doctrine juridique)
- **Anti-notation officielle** : les poids (P:1/2/3) sont des repères pédagogiques internes. Un `non_official_notice` explicite DOIT accompagner tout affichage de poids.
- **DOCTRINE CGU** : ce gabarit ne délivre AUCUNE note ayant valeur légale. Wording « barème interne » ou « repère pédagogique » obligatoire.
- **BLOCKED** si `questions` vide / `question_set_id` absent / `primary_cta` absent.
- **3 à 7 questions** : en dehors de cette plage, usage hors-cible (signaler dans la QA).

## QA à vérifier
1. Modifier un titre de question → rendu change sans toucher au HTML (critère d'or).
2. `questions:[]` → BLOCKED propre.
3. `question_set_id` absent → BLOCKED propre.
4. `primary_cta` absent → BLOCKED propre.
5. Clic CTA primary → action loguée dans le panel.
6. Responsive 375/768/1024 → aucun débordement, CTAs empilés sur mobile.
7. `progress.percent=60` → barre à 60% correctement rendue.
8. Question avec `status:"done"` → style mint visible.

## Source
`INDEX-300-assessmentlearning-GAB-241-245-PLAYABLE.html` (stage `data-tpl="242"`, section `<!-- GAB-242 QUESTION SET -->`).
