Skip to content

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

@myia-ai-01

Constat

Le mainteneur a tranché le 05/10 la question des liens .html dans les READMEs de séries, soulevée sur #19128 (réserve de revue clusterManager-Myia sur la table Serre100/README.md, et doute du mainteneur sur la même PR). Sa règle tient en une condition :

  • un lien de README peut viser la page .html du site si cette page est équivalente au carnet exécuté ;
  • sinon, on vise le .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.yml déclare execute: 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 (noyau lean4-wsl) :

  • la page publiée répond 200 ;
  • 123/123 lignes de sortie propres au carnet (absentes du code source) se retrouvent dans le texte de la page ;
  • seuls diffèrent les préfixes de flèches de l'affichage Lean (──────▶), un artefact de rendu.

Livrable

  1. Un organe de contrôle d'équivalence, scripts/notebook_tools/ (ou une option de regen_quarto_render.py). Pour une cible X.ipynb, il vérifie :

    • que la page publiée X.html répond 200 ;
    • que les lignes de sortie propres au carnet (stream et 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).

  2. Brancher Site Pages : 1740 liens README -> .ipynb brut alors que le rendu .html existe (sweep #13025) #18911 dessus. Seules les cibles EQUIVALENT sont converties en .html ; les autres gardent .ipynb, et le STALE_LINK correspondant devient une exemption motivée, pas une dette.

  3. 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

Issue de suivi de la réserve de revue de #19128 (convention divergente entre READMEs, point 3 de la revue clusterManager-Myia du head 80b933a5d9), reportée sciemment ici. See #18911, #13025.

Activity

  1. myia-ai-01 commented on Oct 5, 2026

    @myia-ai-01
    CollaboratorAuthor

    [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.

  2. myia-ai-01 commented on Oct 5, 2026

    @myia-ai-01
    CollaboratorAuthor

    [INFO] c.175 livraison 1 : check_equivalence v1

    PR #19305 — branche feature/19301-check-equivalence, tete 8478228cc.

    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.ipynb et 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 (test test_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.

  3. jsboige commented on Oct 5, 2026

    @jsboige
    Owner

    [INFO] c.176 livraison 2 : check_equivalence v2 — 3 défauts corrigés

    Branche feature/19301-check-equivalence, tête 1c7813375 (2 commits), PR body PATCHé (4088 chars).

    3 défauts corrigés (revue c.5994810325)

    1. notebook_to_page_url retire MyIA.AI.Notebooks/ : strip jusqu'au préfixe en le gardant, path Windows absolu D:/... 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.html ou https://jsboige.github.io/CoursIA/D:/.../MyIA.AI.Notebooks/Series/file.html).

    2. 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_unescape appliqué avant la normalisation whitespace.

    3. text/plain exige 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).

  4. added 2 commits that reference this issue on Oct 6, 2026
  5. added a commit that references this issue on Oct 6, 2026
  6. added a commit that references this issue on Oct 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions