# GAB-112 · MemoryConfidenceSelfRate — « Auto-évaluation de confiance »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechMemoryLearning
**Critère validé :** changer le JSON change l'écran sans modifier le HTML.

## Pack (structure officielle par-GAB)
```
GAB-112/
  renderer.html            ← moteur auto-évaluation (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_self_rate_id` · `card_preview_text` · `question` · `choices[]{key,emoji,label,next_label,feedback}`

Optionnels : `title`, `card_preview_label`

## Ce qui vient du JSON vs HTML
- **JSON** : la carte affichée en preview, la question posée, les 4 libellés (label, emoji, next_label), les 4 feedbacks au clic, le titre.
- **HTML** : grille 2×2 des boutons, zone preview, zone feedback, layout, fallback BLOCKED.

## Archétype et logique de répétition espacée
GAB-112 modélise l'auto-évaluation de confiance après la présentation d'une carte mémoire. L'élève choisit parmi 4 niveaux :

| Clé (`key`) | Défaut demo | Intervalle typique |
|---|---|---|
| `forgot` | Oublié 😵 | demain (J+1) |
| `hard` | Difficile 😅 | J+2 |
| `mid` | Moyen 🙂 | J+4 |
| `easy` | Facile 😎 | J+7 |

Les intervalles sont portés par `next_label` (affichage) et `feedback` (confirmation). Ils ne sont pas calculés par le renderer — c'est le moteur de répétition espacée amont qui les décide.

## Garde-fous (child_safety)
- **BLOCKED** si `choices` absent ou vide / `card_preview_text` absent / `question` absent.
- Aucun texte pédagogique en dur dans le HTML — tout vient de l'instance.
- `key` des choices doit être l'une de : `forgot`, `hard`, `mid`, `easy` (le CSS utilise `data-key` pour le coloriage, pas une classe figée).

## QA à vérifier
1. Modifier `card_preview_text` → preview change sans toucher au HTML.
2. Modifier un `feedback` → message au clic change.
3. `choices:[]` → BLOCKED propre.
4. `question` absent → BLOCKED propre.
5. init(ext) avec instance externe → rendu change.
6. Responsive 375/768/1024 : grille 2×2 (ou 1 col sur mobile étroit).

## external_refs / dependencies
- GAB-104 : rappel actif (sans auto-évaluation de confiance) — ne pas confondre.
- GAB-023 : feedback stars — autre pattern de feedback.
- GAB-103 : révision espacée d'un deck (amont de GAB-112 dans un flow complet).

## Source
`INDEX-300-memorylearning-GAB-111-115-PLAYABLE.html` (stage `data-tpl="112"`, handler `csrPick()`).
