# GAB-313 · RevisionLearningSpacedRepetitionCard — « Carte de répétition espacée »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechRevisionLearning
**Critère validé :** changer le JSON change la carte (question, réponse, options) sans modifier le HTML. check.py VALIDE ✅.

## Pack (structure officielle par-GAB)
```
GAB-313/
  renderer.html            ← moteur flip-card (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` · `card_id` · `question` · `answer` · `memory_status` · `difficulty_options[]{label,perceived_difficulty,next_days}`

Optionnels : `anti_cram_note`, `anti_cram_limit`, `next_date`.

## Ce qui vient du JSON vs HTML
- **JSON** : texte de la question, texte de la réponse, libellés et valeurs des boutons de difficulté, note anti-bourrage, limite de cartes.
- **HTML** : mécanique flip (recto/verso), affichage boutons, panel résultat, layout, fallback BLOCKED.

## Garde-fous (child_safety)
- **Anti-bourrage** : `anti_cram_limit` (défaut 6) — signal pédagogique issu du HTML source, jamais hardcodé dans le moteur.
- **Flip-only** : la réponse ne s'affiche qu'après interaction explicite (clic ou Enter/Espace).
- **BLOCKED** si `question` / `answer` / `difficulty_options` absents ou vides.
- **Anti-invention** : `next_date` marque `_TODO` si fourni dynamiquement par le système appelant — le moteur n'invente pas de date.

## QA à vérifier
1. Modifier `question`/`answer` → rendu change sans toucher au HTML (critère d'or).
2. `difficulty_options:[]` → BLOCKED propre.
3. Clic carte → réponse révélée + boutons visibles.
4. Sélection option → panel ok avec nombre de jours.
5. `anti_cram_note` fourni → affiché en bas de zone.
6. Responsive 375/768/1024.

## _TODO / contenus manquants
- `next_date` : valeur dynamique non présente dans le HTML source statique. Le moteur accepte le champ mais sa valeur réelle doit être fournie par le système de planification appelant (ex: algorithme SM-2 ou équivalent).

## external_refs / dependencies
- **GAB-312** (RevisionLearningPriorityQueue) : la file de priorité alimente GAB-313 (sélection de la carte à réviser).
- **GAB-314** (RevisionLearningMistakeReview) : après révision GAB-313, les erreurs peuvent être envoyées vers GAB-314.
- **GAB-315** (RevisionLearningTimedQuiz) : quiz chronométré — cas d'usage distinct, ne pas confondre (do_not_use_when indiqué dans le HTML source).

## Source
`INDEX-300-revisionlearning-GAB-311-315-PLAYABLE.html` (stage `data-tpl="313"`, handlers `d313Flip`, `d313Rate`).
