38 lines
1.2 KiB
Markdown
38 lines
1.2 KiB
Markdown
# Contrat des ancres (paragraphes opposables)
|
||
|
||
## Source de vérité du sélecteur
|
||
Le site garantit la citabilité des paragraphes via des IDs injectés sur les balises `<p>`.
|
||
|
||
**Sélecteur contractuel :**
|
||
- `.reading p[id^="p-"]`
|
||
|
||
Tout outillage (scripts, tests, docs) doit utiliser ce sélecteur comme référence.
|
||
|
||
## Ce que le test vérifie
|
||
Le test compare, page par page, la liste des IDs de paragraphes présents dans `dist/` contre une baseline versionnée.
|
||
|
||
- Ajouts d’IDs : généralement OK (nouveaux paragraphes).
|
||
- Suppressions / churn élevé : alerte (risque de casser des citations existantes).
|
||
|
||
## Fichier baseline
|
||
- `tests/anchors-baseline.json`
|
||
|
||
## Commandes
|
||
1) Générer / mettre à jour la baseline (cas intentionnel) :
|
||
- `npm run build`
|
||
- `npm run test:anchors:update`
|
||
|
||
2) Vérifier sans changer la baseline (cas normal) :
|
||
- `npm run build`
|
||
- `npm run test:anchors`
|
||
|
||
## Politique d’échec (pragmatique)
|
||
Le test échoue si le churn d’une page dépasse un seuil (défaut : 20%) sur une page “suffisamment grande”.
|
||
|
||
## Aliases build-time
|
||
- `src/anchors/anchor-aliases.json`
|
||
- `scripts/inject-anchor-aliases.mjs`
|
||
- `scripts/check-anchor-aliases.mjs`
|
||
- et rappelle : *alias = compat rétro de liens historiques sans JS*
|
||
|