Repository navigation
Liens .html des READMEs : n'y pointer que si la page publiée équivaut au carnet exécuté (décision mainteneur 05/10) #19301
Description
Activity
[CLAIMED] lane myia-ai-01:CoursIA-2 -- paths: scripts/notebook_tools/, scripts/tests/ -- organe d'équivalence page publiée / carnet exécuté (livrable 1), avec contrôles positif (Serre100/08) et négatif (page absente) ; pose au dispatch par ai-01.
[INFO] c.175 livraison 1 : check_equivalence v1
PR #19305 — branche
feature/19301-check-equivalence, tete8478228cc.Verdicts implementes : EQUIVALENT (0) / LOST_OUTPUTS (1) / MISSING_PAGE (2) / UNKNOWN (3) / NOTEBOOK_ERROR (4).
Couverture : 34 tests pytest, 0.19s, tous verts. Mock reseau (UNKNOWN = jamais un rouge forge, conformement a la lecon c.173).
Normalisation : prefixes Lean (---) et espaces, telle que mesuree par maindonneur sur Serre100/08 (123/123 lignes).
Controle positif a venir : une fois main deploye, passer
check_equivalence.py --notebook MyIA.AI.Notebooks/.../Serre100-08.ipynbet verifier EQUIVALENT. Sans acces a la poudriere, l'auto-test : un carnet avec 3 outputs text/plain et une page HTML factice contenant les memes lignes + prefixes Lean doit rendre EQUIVALENT (testtest_lean_prefix_in_page).Grain : MED/tooling, lane myia-ai-01:CoursIA-2, prev MED/tooling #19303.
Residuel : G-VAR-1 (DEEP/CONTENU) NON TENU ce cycle (tapis narrow-cache tari 14e, GPU 2 occupe par graine 1 #15293). Plancher de G-VAR-2 (budget LIGHT) OK. G-VAR-3 OK.
[INFO] c.176 livraison 2 : check_equivalence v2 — 3 défauts corrigés
Branche
feature/19301-check-equivalence, tête1c7813375(2 commits), PR body PATCHé (4088 chars).3 défauts corrigés (revue c.5994810325)
-
notebook_to_page_urlretireMyIA.AI.Notebooks/: strip jusqu'au préfixe en le gardant, path Windows absoluD:/...extrait la portion relative au préfixe. URL generee :https://jsboige.github.io/CoursIA/MyIA.AI.Notebooks/Series/file.html(avant :https://jsboige.github.io/CoursIA/Series/file.htmlouhttps://jsboige.github.io/CoursIA/D:/.../MyIA.AI.Notebooks/Series/file.html). -
HTML non desechappe : 528 entités
"sur une page Search-02 (mesure directe 14:48Z) faisaient manquer la majorité des chaînes.from html import unescape as html_unescapeappliqué avant la normalisation whitespace. -
text/plainexige en ligne, decorations widgets : 28 lignes « Raw input / Raw output » de Serre100/08 manquaient. Recherche substring, tolérante aux décorations widgets Jupyter.
Contrôles réel
Carnet Verdict Status found / total Note Search-02-Uninformed (déployé) LOST_OUTPUTS 200 193 / 201 Les 8 manquantes sont des <Figure size 1200x900 with 1 Axes>— chaînes text/plain de figures matplotlib, légitimement absentes car la page rend l'image en PNG/SVG.ML-1-Introduction-Python (déployé) LOST_OUTPUTS 200 16 / 17 1 manquante idem. Serre100/08-Serre-dans-Mathlib-Lean (absent) MISSING_PAGE 404 — Page absente (rename #19128 pas encore déployé). Tests
38 pytest, 0.20s, tous verts (34 + 4 nouveaux = URL prefixe Windows + HTML entities deshéchappées + Raw input/output decorations + URL backslash normalization).
Grain
MED/tooling, lane myia-ai-01:CoursIA-2, prev MED/tooling #19303.Identité de push
Pushé sous
GH_TOKEN=$(gh auth token --user jsboige)(#19308).-
- added a commit that references this issue
on Oct 6, 2026 - added a commit that references this issue
on Oct 9, 2026
Constat
Le mainteneur a tranché le 05/10 la question des liens
.htmldans les READMEs de séries, soulevée sur #19128 (réserve de revueclusterManager-Myiasur la tableSerre100/README.md, et doute du mainteneur sur la même PR). Sa règle tient en une condition :.htmldu site si cette page est équivalente au carnet exécuté ;.ipynb: le visualiseur de github.com est de bonne qualité, et un lien vers une page absente ou infidèle coûte plus qu'il ne rapporte.Le balayage #18911 (1740 liens
STALE_LINK, défaut #13025) convertit aujourd'hui sur un critère plus faible : « la cible figure dans la liste de rendu_quarto.yml». Être dans la liste ne prouve ni que la page est publiée, ni qu'elle porte les sorties du carnet.Mesure de référence (ai-01, 05/10)
_quarto.ymldéclareexecute: enabled: false. Le rendu reprend donc les sorties committées, et l'équivalence tient par construction, à deux conditions : la page est déployée, et son rendu n'a perdu aucune sortie.Contrôle manuel sur
Serre100/08-serre-dans-mathlib.ipynb(noyaulean4-wsl) :──────▶), un artefact de rendu.Livrable
Un organe de contrôle d'équivalence,
scripts/notebook_tools/(ou une option deregen_quarto_render.py). Pour une cibleX.ipynb, il vérifie :X.htmlrépond 200 ;text/plain, hors lignes déjà présentes dans les sources, préfixes de mise en forme normalisés) s'y retrouvent toutes.Verdicts :
EQUIVALENT/MISSING_PAGE/LOST_OUTPUTS/UNKNOWN(réseau, jamais un rouge).Brancher Site Pages : 1740 liens README -> .ipynb brut alors que le rendu .html existe (sweep #13025) #18911 dessus. Seules les cibles
EQUIVALENTsont converties en.html; les autres gardent.ipynb, et leSTALE_LINKcorrespondant devient une exemption motivée, pas une dette.Mettre la règle de Site: re-brancher les liens notebooks des READMEs de series vers les rendus .html (32/32 liens mesures vers JSON brut) #13025 à jour dans la doc qui la porte. L'énoncé « un carnet rendu doit être lié en
.html» devient « un carnet dont la page publiée est équivalente au carnet exécuté peut être lié en.html; sinon.ipynb».Acceptance
EQUIVALENT) et contrôle négatif (une page absente,MISSING_PAGE).EQUIVALENT.Issue de suivi de la réserve de revue de #19128 (convention divergente entre READMEs, point 3 de la revue
clusterManager-Myiadu head80b933a5d9), reportée sciemment ici. See #18911, #13025.