# GAB-241 · AssessmentLearningIntro — « Intro évaluation interne »

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

## Pack (structure officielle par-GAB)
```
GAB-241/
  renderer.html            ← moteur intro é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
```

## Archétype
**AssessmentLearningIntro** = écran d'introduction avant une évaluation pédagogique interne.
Affiche : titre, résumé, 4 métadonnées (durée / questions / niveau / type), liste de règles transparentes, notice non-officielle (obligation CGU), CTA principal + CTA secondaire optionnel.

**Distinction critique GAB-241 vs LevelTestIntro :**
- `LevelTestIntro` = diagnostic de niveau interne (positionnement, pas de note).
- `GAB-241 AssessmentIntro` = évaluation pédagogique avec score interne (ce gabarit).

## Champs requis (instance, à plat)
`gab_id` · `intro_id` · `title` · `summary` · `rules[]{num,text}` · `primary_cta{label,action}`

Optionnels : `assessment_type`, `estimated_duration`, `question_count`, `difficulty_level`, `non_official_notice`, `secondary_cta{label,action}`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre (h1 hero), résumé (chapeau), les 4 métadonnées, chaque règle et son numéro, le texte de la notice non-officielle, les libellés des deux boutons.
- **HTML** : card layout, ai-meta-row, liste de règles, non-official-banner, boutons structurels, moteur de validation.

## Garde-fous (doctrine AssessmentLearning / child_safety)

- **DOCTRINE JURIDIQUE** : ce gabarit ne délivre JAMAIS de diplôme, certification, attestation officielle ni note ayant valeur légale. Le champ `non_official_notice` martèle le wording "entraînement interne" à l'élève.
- **BLOCKED** si `title` absent / `summary` absent / `rules` vide / `primary_cta` absent.
- Si `non_official_notice` est fourni, il est affiché dans un bandeau coral visible avant le CTA.
- Le secondary_cta est optionnel : s'il est absent, le bouton est masqué proprement (hidden).

## QA à vérifier
1. Modifier `title`/`summary` → rendu change sans toucher au HTML (critère d'or).
2. `rules:[]` → BLOCKED propre.
3. `primary_cta` absent → BLOCKED propre.
4. `secondary_cta` absent → bouton secondaire hidden, 0 erreur.
5. `init(instanceExterne)` → rendu change (injection externe OK).
6. Responsive 375/768/1024 : meta-row 2→1 colonne sur ≤560px.

## Source
`INDEX-300-assessmentlearning-GAB-241-245-PLAYABLE.html` (stage `data-tpl="241"`, section `.ai-card`).

## external_refs / dependencies
- **GAB-242** (AssessmentLearningQuestionSet) : gabarit suivant dans le flux, consomme le même `intro_id` pour le lien de progression.
- **GAB-244** (AssessmentLearningScoreExplanation) : gabarit de score qui exploite les critères définis ici.
- **GAB-243** (AssessmentLearningRubricCriteria) : grille de critères affichés AVANT réponse, référencée dans les règles.
- **LevelTestIntro** (hors-lot) : gabarit distinct — diagnostic de niveau, ne pas confondre avec ce GAB.
