Skip to content

Fix(slides,#19999): override katex >= 0.18.2 -- retire le katex vulnerable sous Mermaid - #20038

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/19999-katex-override
Oct 9, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/19999-katex-override

Conversation

@jsboige

@jsboige jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner

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 overrides katex >= 0.18.2 qui 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 katex 0.18.10 à la racine, mais le lockfile portait une seconde entrée katex, 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ême katex: ^0.16.47 : aucune version de Mermaid ne tire katex >= 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.

Mesure Valeur
Blocs ```mermaid dans tout slides/ 18
… dont le contenu porte du math ($…$ ou $$…$$) 0
Fichiers porteurs de Mermaid 3 decks (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 :

ia101-slides@ D:\...\slides
`-- @slidev/cli@53.0.0
  +-- @slidev/client@53.0.0
  | +-- katex@0.18.10 deduped
  | `-- mermaid@12.1.0
  |   `-- katex@0.18.10 deduped
  +-- @slidev/types@53.0.0
  | `-- katex@0.18.10 deduped
  `-- katex@0.18.10

L'entrée node_modules/mermaid/node_modules/katex 0.16.47 n'existe plus ; l'unique entrée du lockfile est node_modules/katex → 0.18.10 (>= 0.18.2). Le critère « le lockfile de slides/ 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) :

Deck Résultat
03-logique/slides.md OK (5,31 s)
08-ia-generative/slides.md OK (3,54 s)
S3-acculturation/slides.md OK (4,06 s)

Les 19 decks relèvent de la CI, et sans aménagement : slides-build-advisory.yml traite slides/package.json et slides/package-lock.json comme 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 entre origin/main et la tête :

Entrées ajoutées 0
Versions changées 0
Entrées retirées 2 — node_modules/mermaid/node_modules/katex (0.16.47, la vulnérable) et node_modules/mermaid/node_modules/commander (8.3.0, doublon imbriqué redondant)
Paquets 726 → 724

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

  • Pas d'overrides sur 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).
  • Pas de patch du rendu mathématique : hors périmètre, et sans objet ici.

Périmètre

2 fichiers : slides/package.json (l'override) et slides/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

…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>
@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 20038
head: 2bb052e
complete: true
body: read
comments-reviewed: 0
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 5fd95ae67690a10d54a8bb6c2330b393468014f423700a1c5eaba653c1465c9b
diff-files: 2
diff-additions: 3
diff-deletions: 27
checks: BLOCKED
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20038
organ-rc: 3
[/ADJOINT PREFLIGHT]

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #20038 (Fix(slides,#19999): override katex >= 0.18.2 -- retire le katex vulnerable sous Mermaid) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 20038
head: 2bb052e
complete: true
body: read
comments-reviewed: 2
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 5125ae1a2f52a62c5aacede22e00eec0bb620464cc83ffa80e7ebb7941a31baf
diff-files: 2
diff-additions: 3
diff-deletions: 27
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20038
organ-rc: 0
supersedes: 1
supersedes-why: auto -- covers BLOCKED dossier from jsboige (2026-10-09T06:23:00Z) at the same head; re-attestation derived by check_adjoint_prevalidation.py (organ-rc 0); replace this line with the proof that changed (or the old dossier's error)
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit c5c348d into main Oct 9, 2026
18 of 19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants