# GAB-240 · FeedbackLearningNextLearningAction — « Action immédiate après feedback »

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

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

GAB-240 affiche **l'action pédagogique immédiate à entreprendre après un feedback**. Il est piloté par `next_action_type` (7 valeurs polymorphes) et affiche :
- Une `reason` expliquant **pourquoi** cette action en particulier
- Une `nl-action-box` avec icône + label + chip module
- Un sélecteur interactif `next_action_types_map` (7 types cliquables en démo)
- 2 CTAs (primary + secondary optionnel)

## Champs requis (instance, à plat)

`gab_id` · `title` · `summary` · `next_action{icon, label, module_chip_class, module_chip_label}` · `primary_cta{label, action}`

Optionnels : `next_learning_action_id`, `next_action_type`, `reason`, `secondary_cta`, `next_action_types_map`, `no_reward_write`, `accessibility`.

## Ce qui vient du JSON vs HTML

- **JSON** : titre, sous-titre, type d'action, icône, label action, chip module, raison pédagogique, libellés CTAs, map des 7 types.
- **HTML** : layout card, action-box structurelle, sélecteur enum, bannière no-reward-write, slots display.

## Garde-fous

- **no_reward_write** : ce GAB pointe vers une ref, **jamais ne déclenche XP/coins/badges**. C'est l'action consommée qui produira sa propre progression.
- **Jamais forcé** : 1 action principale + 1 alternative, l'élève choisit toujours.
- **BLOCKED** si `title`, `summary`, `next_action` ou `primary_cta` absents.
- **reason** : HTML limité à `<b>`, pas de script, pas de lien externe, langage élève.

## 7 next_action_types

| Type | Icône | Module chip | Usage |
|---|---|---|---|
| `retry` | ↻ | EXERCISE | Réessayer avec guidage ciblé |
| `review` | 📖 | VISUAL | Revoir la fiche méthode |
| `practice` | ⚒ | EXERCISE | S'entraîner sur exercices similaires |
| `advance` | 🚀 | ADAPTIVE | Passer à un niveau supérieur |
| `memory` | 🧠 | MEMORY | Ancrage spaced repetition |
| `ask_ketty` | 🦊 | KETTY | Demander à la mascotte Ketty |
| `remediation` | 🧩 | ADAPTIVE | Mini-parcours de remédiation |

## Distinctions adjacentes

| GAB | Archétype | Signal | Types |
|---|---|---|---|
| **GAB-240** | FeedbackNextLearningAction | `feedback_state` (ce gabarit) | 7 types |
| GAB-220 | AdaptiveNextStepBridge | signal AdaptiveLearning | 8 next_step_types |
| NextActionCTA | Pont neutre | aucun signal | générique |

## QA à vérifier

1. Modifier `next_action_type` → action-box + CTA mis à jour sans toucher au HTML (critère d'or).
2. Cliquer un type dans l'enum → `reason`, icône, label, chip et CTA primaire changent.
3. `title` absent → BLOCKED propre.
4. `next_action_types_map` absent → sélecteur masqué, rendu de base fonctionnel.
5. Responsive 375/768/1024 (CTAs empilés mobile).

## Source

`INDEX-300-feedbacklearning-GAB-236-240-PLAYABLE.html` (stage `data-tpl="240"`, handler `nlPick`, objet `NL_ACTIONS`).

## external_refs / dependencies

- **GAB-220** (AdaptiveNextStepBridge) : bridge adjacent pour sorties adaptatives. Ne pas substituer GAB-240 à GAB-220 quand le signal vient d'AdaptiveLearning.
- **PlayKit** : seul module autorisé à écrire XP/coins/badges — GAB-240 ne le fait jamais.
- **Ketty (EdTechChat)** : `ask_ketty` type pointe vers le widget Ketty ; GAB-240 ne gère pas la conversation, il pointe seulement.
