# GAB-178 · LevelTestConfidenceAsk — « Question de confiance »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechLevelTest
**Critère validé :** changer le JSON change la question, les choix et les feedbacks sans modifier le HTML. ✅ check.py 12/12.

## Pack (structure officielle par-GAB)
```
GAB-178/
  renderer.html            ← moteur confiance (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` · `confidence_ask_id` · `question` · `choices[]{id,icon,label,desc}` · `feedbacks{sure,unsure,guess}`

Optionnels : `title`, `recap_header`, `recap_text`, `why_default`.

## Ce qui vient du JSON vs HTML
- **JSON** : question affichée, chaque choix (icon/label/desc), feedbacks par choix (HTML inline), récapitulatif de la réponse précédente, explication méta par défaut.
- **HTML** : grille 3 colonnes, états visuels picked/sure/unsure/guess, layout, logique d'interactivité.

## Archétype pédagogique
Écran de **métacognition** affiché après chaque question du LevelTest diagnostic. Le learner déclare son niveau de confiance : Sûr / Pas trop sûr / Au hasard. Le moteur affiche un feedback contextuel selon le choix. La pondération (+1.0 / +0.6 / +0.2) est décrite dans les feedbacks de l'instance — la logique de scoring vit dans le CORE-GAB.

## Garde-fous
- **3 choix fixes** : les ids `sure`, `unsure`, `guess` sont attendus par le moteur (état CSS + clé dans feedbacks).
- **BLOCKED** si `choices` vide, `feedbacks` absent ou `question` absent.
- `recap_text` est contextuel à la session en cours (question + réponse précédentes) — l'instance d'exemple porte un placeholder représentatif, pas du contenu inventé.

## QA à vérifier
1. Clic "Sûr" → bouton picked+sure (bordure mint-soft), why remplacé par feedbacks.sure.
2. Clic "Pas trop sûr" → picked+unsure (gold-soft), feedbacks.unsure.
3. Clic "Au hasard" → picked+guess (coral-soft), feedbacks.guess.
4. `choices:[]` → BLOCKED propre.
5. `feedbacks` absent → BLOCKED propre.
6. Instance externe injectée via `ENGINE.init(ext)` → rendu change sans modifier le HTML.
7. Responsive 375/480/768 : grille 1 col ≤ 480px, 3 col au-dessus.

## Source
`INDEX-300-leveltest-GAB-176-180-PLAYABLE.html` (stage `data-tpl="178"`, handler `cfPick`).
