# GAB-179 · LevelTestResultProfile — « Profil de résultat »

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

## Pack (structure officielle par-GAB)
```
GAB-179/
  renderer.html            ← moteur profil de résultat (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` · `profile_id` · `title` · `summary` · `result{label,score_display}` · `strengths[]` · `weaknesses[]`
Optionnels : `confidence{value,label,min_label,max_label}`, `disclaimer`.

## Ce qui vient du JSON vs HTML
- **JSON** : titre du profil, résumé, badge niveau indicatif, valeur de confiance et labels, liste points forts, liste points à renforcer, texte de disclaimer.
- **HTML** : structure carte, colonnes fort/faible, barre de confiance (animation), layout, BLOCKED fallback.

## Garde-fous (child_safety)
- **JAMAIS une note officielle** : le disclaimer est injecté depuis l'instance (ou un fallback hardcodé côté moteur) — on ne peut pas l'effacer via JSON.
- **BLOCKED** si `title`, `result`, `strengths` ou `weaknesses` absents/vides.
- **Anti-invention** : strengths et weaknesses viennent exclusivement de l'instance, jamais générés côté moteur.
- **Diagnostic interne uniquement** : ne pas utiliser pour un bulletin officiel (→ hors scope) ni résultat exercice noté (→ GAB-129).

## QA à vérifier
1. Modifier `title`/`result.label`/`strengths` → rendu change sans toucher au HTML (critère d'or).
2. `strengths:[]` → BLOCKED propre.
3. `confidence` absent → section confiance masquée, pas d'erreur.
4. Instance externe injectée via `ENGINE.init(ext)` → rendu change.
5. Responsive 375/768/1024 — colonnes s'empilent en mobile.

## external_refs / dependencies
- **Précédé par** : GAB-176 (LevelTestIntro), GAB-177 (LevelTestAdaptiveQuestion), GAB-178 (LevelTestConfidencePicker) — le profil est affiché après le test complet.
- **Suivi par** : GAB-180 (LevelTestRecommendationBridge) — traduit ce profil en recommandations concrètes vers les autres modules.
- **Ne pas confondre avec** : GAB-129 (résultat exercice noté), GAB-021 (recap session moteur).

## Source
`INDEX-300-leveltest-GAB-176-180-PLAYABLE.html` (stage `data-tpl="179"`, section `<!-- GAB-179 -->`).
