# GAB-211 · AdaptiveLearningEntrySignal — « Signal d'entrée adaptatif »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechAdaptiveLearning
**Critère validé :** changer le JSON change le signal affiché sans modifier le HTML.

## Pack (structure officielle par-GAB)
```
GAB-211/
  renderer.html            ← moteur signal d'entrée (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` · `entry_signal_id` · `signal_type` · `title` · `summary` · `reason`

Optionnels : `source_module`, `source_description`, `confidence_score`, `privacy_notice`, `primary_cta{label,action}`.

## Ce qui vient du JSON vs HTML
- **JSON** : title, summary, signal_type (badge), reason (transparence), source_module, source_description, confidence_score (barre interne), privacy_notice (disclaimer), libellé du CTA.
- **HTML** : structure de la carte, barre de confiance, badge signal, disclaimer layout, bouton structurel.

## Doctrine transparence (nouvelle — module 13)
Le slot `reason` est **obligatoire** : chaque signal adaptatif DOIT exposer sa raison en langage élève. Pas de boîte noire. Pas de stigmatisation. Pas de jugement définitif.

## Garde-fous (child_safety)
- **Anti-invention** : contenu extrait strictement du HTML/JS source (INDEX-300). Aucun texte pédagogique inventé.
- **confidence_score = interne** : affiché comme jauge de démo technique mais NE DOIT PAS être présenté à l'élève comme un score personnel.
- **signal_type = enum strict** : `['mistake','success','weakness','pace','goal','level_test']` — pas de valeur libre.
- **BLOCKED** si l'un des 6 champs requis est absent.
- Un signal n'est pas un diagnostic médical ou psychologique.

## Distinctions importantes
- GAB-211 = **signal d'entrée** (point de départ, détection). Différent de :
  - GAB-179 = LevelTestResultProfile (sortie de diagnostic LevelTest)
  - GAB-212 = AdaptiveLearningRecommendationCard (action suivante basée sur signal)
  - GAB-213 = AdaptiveLearningRemediationPath (mini-parcours si fragilité confirmée)

## QA à vérifier
1. Modifier `title`/`reason` → rendu change sans toucher au HTML (critère d'or).
2. Supprimer `reason` → BLOCKED propre.
3. `confidence_score` absent → section confiance masquée, pas d'erreur JS.
4. `privacy_notice` absent → disclaimer masqué, pas d'erreur JS.
5. ENGINE.init(ext) avec instance externe → rendu injecté correctement.
6. Responsive 375/768/1024 → aucun débordement.

## external_refs / dependencies
Ce GAB est consommé par le flow adaptatif en entrée. Il est suivi typiquement par :
- **GAB-212** (RecommendationCard) si le signal débouche sur une action unique.
- **GAB-213** (RemediationPath) si le signal révèle une fragilité confirmée nécessitant un parcours.
- **GAB-214** (DifficultyAdjuster) si le signal indique une sous/sur-stimulation.
- **GAB-215** (ProgressReason) pour exposer la décision finale de l'algorithme adaptatif.

## Source
`INDEX-300-adaptivelearning-GAB-211-215-PLAYABLE.html` (stage `data-tpl="211"`, objet JS `ES_SIGNALS`, handlers `esSetSignal`).
