Repository navigation
Fix(slides,#19999): override katex >= 0.18.2 -- retire le katex vulnerable sous Mermaid - #20038
Conversation
…rable sous Mermaid Le bump Slidev 51 -> 53 (#19981) resout katex 0.18.10 a la racine, mais le lockfile portait une SECONDE entree katex, imbriquee sous Mermaid et toujours dans la plage affectee de GHSA-238p-pmpm-9mq7 (< 0.18.2) : node_modules/mermaid/node_modules/katex = 0.16.47. Le bump deplacait la dependance vulnerable, il ne la retirait pas. Mermaid 12.1.0 (derniere publiee) declare lui-meme katex ^0.16.47 : aucune version de Mermaid ne tire katex >= 0.18.2. L'override force donc la version hors plage declaree -- ce qui n'est sur que parce que le rendu math de Mermaid n'est exerce par aucun deck : 18 blocs mermaid dans tout slides/, ZERO contenant du math (mesure sur les 4 fichiers porteurs). Les trois paquets Slidev (@slidev/cli, client, types) declarent deja katex ^0.18.7 : l'override est un no-op pour eux et ne touche que la copie de Mermaid. Diff du lockfile : aucune version changee, deux entrees imbriquees redondantes retirees (katex 0.16.47 et commander 8.3.0). 726 -> 724 paquets. Valide : npm ls katex rend une seule version 0.18.10 deduped sous Mermaid ; les 3 decks porteurs de Mermaid (03-logique, 08-ia-generative, S3-acculturation) construisent. slides-build-advisory.yml construit les 19 decks sur toute PR touchant slides/package*.json. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
[ADJOINT PREFLIGHT] |
Path-collision (organ #13359/#13615)Cette PR #20038 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
[ADJOINT PREFLIGHT] |
Grain: MED/tooling — lane myia-po-2026:CoursIA-2 — prev: LIGHT/guard #19985
Ce que la PR livre
Le critère (b) de l'acceptance de #19999 : un
overrideskatex >= 0.18.2qui retire réellement la copie vulnérable, au lieu de la déplacer.Le diagnostic de l'issue est confirmé tel quel : le bump Slidev 51 → 53 (#19981) résout
katex0.18.10 à la racine, mais le lockfile portait une seconde entréekatex, imbriquée sous Mermaid et toujours dans la plage affectée de GHSA-238p-pmpm-9mq7 (< 0.18.2). Le bump déplaçait la dépendance, il ne la retirait pas.Le fait qui rend l'override sûr — et non un pari
Mermaid
12.1.0(la dernière publiée) déclare lui-mêmekatex: ^0.16.47: aucune version de Mermaid ne tirekatex >= 0.18.2. L'override force donc délibérément une version hors de la plage déclarée — ce qui n'est légitime que si rien n'exerce le code concerné.Or c'est mesurable, et c'est mesuré : le rendu mathématique de Mermaid n'est exercé par aucun deck.
```mermaiddans toutslides/$…$ou$$…$$)03-logique,08-ia-generative,S3-acculturation)KaTeX n'est appelé par Mermaid que pour rendre du math dans un label de diagramme. Avec 0 label de ce type sur 18 blocs, forcer 0.18.10 sous Mermaid ne peut changer aucun rendu. Le « QA visuel des labels Mermaid contenant du KaTeX » que l'acceptance (b) exige a donc un domaine vide — et cette vacuité est elle-même le résultat mesuré, pas une dispense.
Contrôle complémentaire : les trois paquets Slidev (
@slidev/cli,@slidev/client,@slidev/types) déclarent déjàkatex: ^0.18.7. L'override est un no-op pour eux ; la seule copie qu'il déplace est celle de Mermaid.Validation
Une seule version de katex dans l'arbre —
npx npm@11 ls katex:L'entrée
node_modules/mermaid/node_modules/katex0.16.47 n'existe plus ; l'unique entrée du lockfile estnode_modules/katex→ 0.18.10 (>= 0.18.2). Le critère « le lockfile deslides/porte alors une seule version de katex, >= 0.18.2 » est satisfait.Construction — les 3 decks qui portent du Mermaid (donc les seuls que l'override peut atteindre) :
03-logique/slides.md08-ia-generative/slides.mdS3-acculturation/slides.mdLes 19 decks relèvent de la CI, et sans aménagement :
slides-build-advisory.ymltraiteslides/package.jsonetslides/package-lock.jsoncomme shared slides infra et construit tous les decks dès qu'ils changent (if [ -n "$SHARED" ]; then TOUCHED=("${TARGETS[@]}")). Le critère « build des 19 decks » est donc exécuté par l'organe sur cette PR, pas contourné.Diff du lockfile — aucune version changée
Le lockfile est régénéré (npm 11, la majeure qui a produit celui de
main). Contrôle exhaustif des cartes de versions entreorigin/mainet la tête :node_modules/mermaid/node_modules/katex(0.16.47, la vulnérable) etnode_modules/mermaid/node_modules/commander(8.3.0, doublon imbriqué redondant)Autrement dit : aucune version installée ne bouge, deux doublons imbriqués disparaissent. Le seul autre changement du fichier est une normalisation de métadonnée (
@slidev/theme-default*→latest), sans effet sur une version résolue.Ce que la PR ne fait pas
overridessur Mermaid lui-même : la version publiée la plus récente déclare toujours^0.16.47, il n'y a rien à bumper (option déjà écartée par l'issue).Périmètre
2 fichiers :
slides/package.json(l'override) etslides/package-lock.json(la résolution). Aucun deck modifié, aucun notebook touché — donc aucune ré-exécution due (C.2).See #19999 — le critère (a) de cette issue (« une version publiée de Mermaid déclare
katex >= 0.18.2») reste ouvert : il dépend de l'amont, pas de ce dépôt. Le critère (b) est couvert ici.🤖 Generated with Claude Code