# GAB-325 · ResearchLearningSourceReliabilityCheck — « Vérifier la fiabilité d'une source »

**Archétype / renderer_key :** `text_cta` (cartographie) · **module :** EdTechResearchLearning
**Critère validé :** changer le JSON change les critères, le verdict et le libellé du bouton sans modifier le HTML. ✅ check.py 12/12.

## Pack (structure officielle par-GAB)
```
GAB-325/
  renderer.html            ← moteur vérification fiabilité (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` · `reliability_check_id` · `title` · `criteria[]{id,label}` · `verdicts{all_checked,partial,insufficient}` · `primary_cta{label,action}`

Optionnels : `intro_hint`, `partial_threshold`, `progress_label_tpl`, `use_when`, `do_not_use_when`.

## Ce qui vient du JSON vs HTML
- **JSON** : liste des critères (labels), seuil `partial_threshold`, les 3 messages de verdict (all_checked / partial / insufficient), le libellé du CTA, le template de progression.
- **HTML** : moteur de tick, compteur, logique verdict, layout, fallback BLOCKED.

## Archétype & comportement
GAB-325 est le 5ᵉ gabarit du flow recherche (321→325). Il implémente un **verdict nuancé à 3 niveaux** :
- `usable` : tous les critères cochés.
- `caution` : ≥ `partial_threshold` critères cochés (défaut : 2).
- `cross_check_needed` : < `partial_threshold` critères cochés.

Le verdict n'est **jamais binaire** (voir `do_not_use_when` : « jugement binaire bon/mauvais » interdit).

## Garde-fous (child_safety)
- **BLOCKED** si `criteria` vide, `verdicts` absent ou `primary_cta` absent.
- Le verdict affiché est toujours nuancé : même avec 0 critère coché, le message invite à chercher une 2ᵉ source plutôt que de rejeter.
- Les `message_tpl` doivent contenir `{done}` et `{total}` pour l'affichage du ratio.

## QA à vérifier
1. Modifier un `label` de critère → rendu change sans toucher au HTML.
2. `criteria:[]` → BLOCKED propre.
3. 0 coché → verdict `cross_check_needed`.
4. `partial_threshold` cochés → verdict `caution`.
5. Tous cochés → verdict `usable`.
6. Instance externe injectée via `ENGINE.init(ext)` → rendu change sans modifier le HTML.
7. Responsive 375/768/1024.

## external_refs / dependencies
GAB-325 est l'étape aval de GAB-324 (sélection des sources). Référencé dans les `do_not_use_when` : « sélection des sources (→ GAB-324) ». Le flow complet : GAB-321 (intro) → GAB-322 (question) → GAB-323 (requête) → GAB-324 (sélection sources) → **GAB-325 (fiabilité)**.

## Source
`INDEX-300-researchlearning-GAB-321-325-PLAYABLE.html` (stage `data-tpl="325"`, handlers `d325Tick`, `d325Verdict`).
