# GAB-205 · PlayEngineSessionEndSummary — « Résumé fin de session composite »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechPlayEngine
**Critère validé :** changer le JSON change le rendu (ribbon, titre, items, acquis, CTAs) sans modifier le HTML.

## Pack (structure officielle par-GAB)
```
GAB-205/
  renderer.html            ← moteur résumé fin de session (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` · `session_end_id` · `title` · `summary` · `items[]{label,mod_class,mod_label}` · `primary_cta{label,action,feedback}`

Optionnels : `ribbon_label`, `session_emoji`, `items_heading`, `acquis_heading`, `acquis_text`, `reward_context`, `result{label,action,feedback}`.

## Ce qui vient du JSON vs HTML
- **JSON** : ribbon, emoji, titre, sous-titre, liste des blocs traversés, leur mod_class/mod_label, acquis pédagogique, note reward, libellés et feedbacks des deux CTAs.
- **HTML** : layout carte, animation se-pop, structure blocs, zone panel feedback, slots footer.

## Archétype & doctrine PlayEngine
- Ce gabarit est l'écran terminal d'une session composite multi-formats (Story → Visual → Interactive → Exercise ou toute combinaison).
- **Ne possède pas la logique des blocs** : chaque bloc reste contrôlé par son `module_owner`.
- **N'écrit jamais XP ni badge** : `reward_context` est passif ; la célébration officielle vient de Gamification après complétion confirmée serveur.
- `result` (bouton secondaire) permet la relecture sans perte de progression.

## Garde-fous (child_safety)
- **Anti-invention** : contenu extrait uniquement du HTML source `data-tpl="205"`. Aucun contenu pédagogique inventé.
- **BLOCKED** si `title` / `summary` / `items` vide / `primary_cta` absents.
- `mod_class` doit correspondre à un module cible allowlisté (story, visual, interactive, exercise, memory, game, audio) — couleurs dérivées du DS V2.

## QA à vérifier
1. Modifier `title`/`summary`/`items` → rendu change sans toucher au HTML (critère d'or).
2. `items:[]` → BLOCKED propre.
3. `primary_cta` absent → BLOCKED propre.
4. Clic CTA primaire → feedback `primary_cta.feedback` en mint-soft.
5. Clic CTA secondaire → feedback `result.feedback` en surface.
6. Responsive 375/768/1024.

## Source
`INDEX-300-playengine-composite-GAB-201-205-PLAYABLE.html` (stage `data-tpl="205"`, handlers `peConfirm`/`peNote`).

## external_refs / dependencies
- `peConfirm` / `peNote` : handlers inline du fichier source multi-GAB (non repris dans le renderer autonome — logique intégrée dans `ENGINE.init()`).
- Blocs traversés (items) font référence aux modules externes : `EdTechStoryLearning`, `EdTechVisualLearning`, `EdTechInteractiveLearning`, `EdTechExerciseLearning` — ces modules restent sources de vérité pour leur propre logique.
- Suite recommandée (PathMap) : `navigate_pathmap` dans `primary_cta.action` est un signal pour le runtime PlayEngine ; la frise PathMap est un module distinct.
