Repository navigation
Description
Part of #11829
Constat mesure
Le 2026-10-22, un carnet livre dans la journee (GameTheory-04g-Supermodularite-Python.ipynb, PR #21938) a introduit 17 defauts de rendu markdown dans un depot qui n'en portait aucun de cette classe :
+17 MyIA.AI.Notebooks/GameTheory/GameTheory-04g-Supermodularite-Python.ipynb
+8 H1-DEEP
+8 HINT-AS-HEADING
+1 MULTI-H1
Le garde l'a detecte et rapporte lui-meme, deux fois (tetes 202407fe9 puis e17e4530f), avec la correction exacte : - # Indice : ... -> - **Indice :** .... Le check a conclu SUCCESS et la PR a merge. L'utilisateur a trouve le defaut a l'oeil, apres coup.
Pourquoi le garde n'a pas bloque
scan-md-hierarchy-drift.yml tourne et mesure correctement. Il est advisory par construction :
Mode ADVISORY au premier tour (mandat de l'issue) : le job reste VERT, un commentaire nomme chaque (notebook, kind, delta). Le passage en bloquant sera decide ulterieurement.
Le code fait exactement cela : rc=2 (drift) -> commentaire de PR + exit 0.
L'issue qui devait operer la bascule portait la porte dans son titre : #11831, « scan_md_hierarchy: drift CI contre baseline (delta>0 = CHANGES_REQUESTED) ». Elle a ete close COMPLETED le 2026-08-21 sur la justification « le drift est mesure en CI ». Le metre a ete livre et verifie ; la porte, non. Le titre promettait un verdict, la cloture atteste une mesure.
Ce n'est donc pas un organe manquant (famille de #22009, « le script existe et rien ne l'appelle ») : c'est un organe qui tourne, voit, dit -- et dont le verdict est jete.
Etat mesure du stock (a la date de cette issue)
Sur main 5d9f3539d20, scan du corpus entier :
| Classe | Occurrences | Concentration |
|---|---|---|
HINT-AS-HEADING |
8 | toutes dans GameTheory-04g-Supermodularite-Python.ipynb |
H1-DEEP |
44 | dispersees |
MULTI-H1 |
5 | dispersees |
La classe HINT-AS-HEADING etait a zero avant ce carnet. C'est le cas d'ecole d'un gate qui aurait du mordre : la classe venait d'etre assainie, une PR l'a reintroduite en entier, le garde l'a dit.
Prealable mesure : la baseline est derivee
$ python scripts/notebook_tools/scan_md_hierarchy.py MyIA.AI.Notebooks/ --baseline --diff
=== drift: +26 across 3 notebook(s), 12 burned down ===
rc=2
Une bascule sans re-seed dans le meme geste bloquerait des PRs sur des defauts anterieurs a leur diff (typiquement toute PR touchant ML-09c-MatrixProfile-Multidim-Python.ipynb, +7 H1-DEEP / +1 MULTI-H1, aujourd'hui en derive et invisible en CI puisque le job est vert).
Acceptance proposee
- Re-seed de la baseline (
--update-baseline) dans une PR dediee, sans autre changement, pour que le gate demarre vert surmain. - Bascule du job en bloquant :
rc=2devient un echec de check, plus un commentaire suivi deexit 0. Le scope--name-status(deja implemente) reste l'imputation : seuls les carnets touches par la PR comptent. - Controle par faux negatif, comme pour les autres organes : ajouter un
# Indiceen titre dans un carnet -> le job rougit ; le corriger en**Indice :**-> il reverdit. Preuve postee dans la PR de bascule. - La classe
HINT-AS-HEADINGpeut, si le user prefere une bascule graduelle, mordre seule d'abord (elle est a 8 occurrences, toutes dans un carnet) et laisserH1-DEEP/MULTI-H1advisory jusqu'a leur assainissement (44 et 5 occurrences dispersees).
Sign-off requis
Passer une recommandation en gate est un changement normatif substantiel au sens de CLAUDE.md §A : la PR de bascule exige un sign-off user explicite, pas seulement une review coordinateur. Cette issue porte la decision ; elle n'est pas un grain de lane tant que le sign-off n'est pas donne.
Activity
jsboige commentedon Oct 23, 2026
[CLAIMED] lane myia-po-2023:CoursIA-2 -- re-seed de la baseline scan_md_hierarchy (acceptance 1, non normative, PR dediee sans autre changement) ; la bascule en bloquant (acceptances 2-4) reste au sign-off user et n'est pas livree dans ce grain
Fix(ci,#22012): re-seed scan_md_hierarchy baseline -- drift +32/4 -> …
jsboige commentedon Oct 25, 2026
[CLOSURE PREFLIGHT]
schema: 1
lane: myia-po-2028:CoursIA-3
issue: 22012
verdict: KEEP
acceptance:
residue: waiver: bascule advisory->bloquant (acceptances 2-4) non livree au 2026-10-25, au sign-off user (normative) ; seule la re-seed baseline (acceptance 1) livree
open-prs: 0
comments-reviewed: 1
[/CLOSURE PREFLIGHT]
myia-po-2023 commentedon Nov 2, 2026
Grain: MED/guard — lane myia-po-2023:CoursIA — prev: LIGHT/guard #24179
[CLAIMED] lane myia-po-2023:CoursIA -- bascule graduelle bloquante de la classe HINT-AS-HEADING (acceptances 2-4, option 4 ; sign-off user 2026-11-02 registre Q23) : flag --fail-kinds + --base-ref au scanner, Guard bloquant au registre fast lane, stub source, tests. paths: scripts/notebook_tools/scan_md_hierarchy.py, scripts/ci/fast_lane_registry.py, .github/workflows/scan-md-hierarchy-drift.yml, scripts/tests/test_scan_md_hierarchy_fail_kinds.py, scripts/notebook_tools/md_hierarchy_baseline.json
myia-po-2023 commentedon Nov 2, 2026
[DELIVERED] lane myia-po-2023:CoursIA -- PR #24312 -- paths: scripts/notebook_tools/scan_md_hierarchy.py, scripts/ci/fast_lane_registry.py, scripts/ci/fast_lane.py, .github/workflows/scan-md-hierarchy-drift.yml, scripts/tests/test_scan_md_hierarchy_fail_kinds.py
Bascule graduelle option 4 (sign-off user 2026-11-02, Q23b) : HINT-AS-HEADING seule devient bloquante (rc=4 via --fail-kinds), bornage --base-ref (#12735/#13315), garde TRANCHE38 voie rapide, controle faux-negatif = 8 tests. Classe a zero sur main au re-seed #22222 -> le verrou demarre vert. Les autres classes restent advisory jusqu'a leur assainissement (44/5 occurrences).
jsboige commentedon Nov 3, 2026
[CLOSURE PREFLIGHT]
schema: 1
lane: myia-po-2028:CoursIA-3
issue: 22012
verdict: KEEP
acceptance:
residue: followup Add(ci,#22012): HINT-AS-HEADING bloquant -- --fail-kinds/--base-ref (rc=4) + garde TRANCHE38 voie rapide #24312
open-prs: 0
comments-reviewed: 4
[/CLOSURE PREFLIGHT]
Merge branch 'main' into fix/22012-hint-blocking
Fix(harness,#22012): input dispatch base_ref via env: -- durcissement…
Add(ci,#22012): HINT-AS-HEADING bloquant -- --fail-kinds/--base-ref (…