Picarones / docs /developer /extending-glossary.md
Claude
docs(sprint-H.9): archive migration plans + cleanup stale doc paths
2b782d0 unverified
# Étendre le glossaire contextuel
Le glossaire affiché dans le panneau latéral du rapport est défini en
YAML, une entrée par terme, dans `picarones/reports/html/glossary/{lang}.yaml`.
## Ajouter un terme
Éditez **les deux fichiers** `fr.yaml` et `en.yaml` (les tests vérifient
la symétrie) :
```yaml
my_new_metric:
title: "Titre court — abréviation"
definition: >-
2-3 phrases de définition formelle. Tout en pur texte, pas de HTML.
measures: >-
Ce que la métrique mesure concrètement.
usage: >-
Cas d'usage factuels (pas prescriptifs : « utilisé en X » et non
« à choisir si vous êtes Y »).
limits: >-
Limites connues, pièges fréquents.
reference: >-
Référence bibliographique canonique (auteur, année, titre).
```
Tous les champs (`title`, `definition`, `measures`, `usage`, `limits`,
`reference`) sont **obligatoires** et non vides. Les tests
(`test_each_entry_has_required_fields`) le vérifient.
## Brancher l'entrée à une colonne du rapport
Dans `picarones/reports/html/templates/view_ranking.html` (ou un autre fichier
de vue), ajoutez l'attribut `data-glossary-key` sur l'en-tête de
colonne :
```html
<th data-col="my_new_metric" class="sortable"
data-glossary-key="my_new_metric"
data-i18n="col_my_new_metric">Ma métrique</th>
```
Au démarrage du rapport, `injectGlossaryButtons()` parcourt tous les
`th[data-glossary-key]` et ajoute un petit bouton `?` cliquable.
## Règles à respecter
1. **Pas de HTML dans le contenu** : le rendu côté JS utilise
`textContent` pour les paragraphes (sécurité XSS). Si vous mettez
du HTML, il sera affiché en clair.
2. **Pas de prescription** : le champ `usage` doit être factuel
(« historiquement utilisé pour X ») et non prescriptif (« à choisir
si vous voulez Y »). Picarones ne recommande jamais.
3. **Référence vérifiable** : citez un auteur/année réels. Les utilisateurs
peuvent suivre la référence pour creuser.
4. **Symétrie FR/EN** : les deux fichiers doivent contenir les mêmes
clés. Le test `test_fr_and_en_have_same_keys` casse en cas
d'asymétrie.
## Ajouter une langue
Créez `picarones/reports/html/glossary/de.yaml` avec la même structure que
`fr.yaml`. Le loader le détecte automatiquement via
`Path.glob("*.yaml")`.
Pour qu'un utilisateur puisse choisir cette langue :
1. Ajouter `picarones/reports/html/i18n/de.json` (traductions de l'interface).
2. Aucune modification de code requise — `load_glossary("de")` marchera.
## Tests
Le fichier `tests/test_sprint21_glossary_customize.py` couvre
automatiquement :
- Chargement et fallback (langue inconnue → FR).
- Symétrie FR/EN.
- Présence des champs obligatoires.
- Termes critiques garantis (16 entrées dont CER, WER, Friedman, etc.).
- Pas de HTML dans le contenu.
Ajoutez votre nouvelle entrée à la liste `critical` du test
`test_critical_terms_are_documented` si elle est référencée par une
colonne du rapport — cela garantit qu'un futur refactor ne la
supprime pas par accident.