# GAB-107 · MemoryOrderingSequence — « Remise en ordre »

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

## Pack (structure officielle par-GAB)
```
GAB-107/
  renderer.html            ← moteur remise en ordre (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` · `ordering_id` · `instruction` · `items[]{id, text, correct_position}`

Optionnels : `title`, `feedback{success, error}`, `primary_cta{label, action}`.

## Ce qui vient du JSON vs HTML
- **JSON** : l'instruction affichée, chaque item (texte + position correcte), les messages de feedback, le libellé du bouton de vérification.
- **HTML** : structure de la liste, boutons flèches ▲/▼, logique de renommage des rangs, logique de vérification, layout, fallback BLOCKED.

## Archétype
Exercice de **remise en ordre séquentielle** (manipulation active). L'apprenant déplace les items via des flèches ▲/▼ pour reconstituer la séquence correcte, puis déclenche la vérification. Les items dont `correct_position` correspond au rang courant passent en vert (`.correct`). Un feedback `success` ou `error` est affiché selon le résultat.

## Garde-fous (child_safety)
- **BLOCKED** si `instruction` absente ou `items` vide — aucun rendu partiel silencieux.
- `correct_position` est 1-based ; le moteur compare la position DOM (1..N) à `dataset.correctPosition`.
- Aucun contenu pédagogique en dur dans le HTML — tout vient de l'instance JSON.
- `feedback.success` / `feedback.error` ont des valeurs par défaut internes si les champs sont absents de l'instance.

## QA à vérifier
1. Modifier `instruction` dans le JSON → texte change sans toucher au HTML (critère d'or).
2. `items:[]` → BLOCKED propre.
3. Mettre les items dans l'ordre correct → tous passent en vert + `feedback.success`.
4. Injecter une autre instance via `ENGINE.init(ext)` → rendu change.
5. Responsive 375/768/1024 — aucun débordement.

## Source
`INDEX-300-memorylearning-GAB-106-110-PLAYABLE.html` (stage `data-tpl="107"`, handlers `ordMove`, `ordRenumber`, `ordCheck`).

## external_refs / dependencies
- **GAB-078** (FriseChronologique) : alternative en lecture seule si la séquence n'a pas besoin d'être manipulée.
- **GAB-105** (MemoryMatchingPairs) : si l'objectif est l'association de paires plutôt que l'ordonnancement.
- Ces GAB sont dans d'autres lots ; ce pack ne dépend d'aucun d'eux pour fonctionner.
