You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
guard(notebooks): cabler check_split_reading_cells.py en cliquet bloquant — l'organe existe, 91 findings deja sur main, et la prose du STOP n'a pas tenu 42 minutes #17044
scripts/notebook_tools/check_split_reading_cells.py est sur main, avec sa suite de tests (scripts/tests/test_check_split_reading_cells.py) — et n'est câblé nulle part. Mesure firsthand, main à d412b5a13c :
Ses deux frères de la même famille y sont, eux : check_output_collapse.py (l.601-609) et check_source_collapse.py (l.1237-1248). Celui-ci a été écrit, testé, puis laissé débranché.
Ce qu'il voit, et que personne n'écoute
Scan par série sur MyIA.AI.Notebooks, --json, rc=0 partout :
Série
Findings
GenAI
42
GameTheory
16
SymbolicAI
9
Probas
9
IIT
7
ML
4
Search
4
Sudoku
0
Total
91
91 cellules de lecture scindées sont déjà sur main — donc déjà mergées, sous des reviews qui n'avaient aucun instrument pour les voir.
Pourquoi maintenant : la prose ne tient pas la porte
Le body de #13410 porte depuis le 2026-09-20T18:12:47Z une section STOP en tête, avec le mandat user verbatim (« si on rajoute une lecture, on modifie le paragraphe de lecture existant, on n'en rajoute pas un deuxième »).
Trois PRs de densité ont été créées après cette édition : #17025 (18:23Z), #17028 (18:31Z), #17031 (18:54Z) — 42 minutes.
Ce n'est pas de l'indiscipline : un agent déjà lancé ne relit pas le body de son issue. Une règle qui ne vit que par sa prose ne s'exécute pas — il lui faut un organe. Celui-ci existe déjà, ce qui rend l'écart d'autant plus coûteux.
Défaut bloquant à corriger d'abord
Le scanner avorte sur le premier notebook illisible au lieu de le sauter :
En l'état il est incâblable : un seul notebook corrompu rendrait rouge toute PR du dépôt, pour une raison sans rapport avec elle. (Au passage : ce notebook est bien présent et bien corrompu — un rapport antérieur le donnait pour « chemin inexistant à main », c'est faux.)
Critères d'acceptation
Robustesse — un notebook illisible produit un SKIPPED nommé dans la sortie, jamais un rc non nul. Contrôle : le scan repo-wide rend rc=0 en présence de BTC-ML-Researcher/research.ipynb.
Câblage — entrée dans scripts/ci/fast_lane_registry.py, modèle check_source_collapse.py, comparaison base vs PR.
Cliquet, pas plancher absolu — le check est rouge si la PR augmente le compte de findings sur les notebooks qu'elle touche. Les 91 déjà sur main sont grandfathered : on arrête l'hémorragie avant de soigner la plaie.
Contrôle négatif obligatoire — une PR qui fusionne deux lectures en une (le geste que le mandat user demande) doit être verte. Un gate qui punit le remède est pire que pas de gate.
Statut — blocking=True. Le mode advisory a déjà été essayé sur cette famille (output-collapse, source-collapse) : il ne tient pas une porte, il documente un passage. Le grief user porte sur la qualité des notebooks, pas sur sa traçabilité.
Ce qu'il ne faut PAS faire
Ne pas élargir le détecteur à « toute cellule markdown proche d'une autre » : le faux positif y est massif et il punirait la prose pédagogique légitime. Le motif visé est étroit — deux cellules de lecture pour une même cellule de code.
Ne pas traiter les 91 findings de main dans la même PR : c'est le cliquet qu'on livre, pas la réparation. La réparation est un chantier distinct, à cadencer par série.
Ne pas poser ce gate sur les PRs étudiantes (student-pr-reviews.md).
Contexte
Mesure du même cycle : 3 issues portent 100 des 243 PRs ouvertes (#13410 → 78, #16638 → 22, #16795 → 14), pendant que 313 des 390 issues ouvertes sont admissibles et non tirées. Le pool n'est pas tari — c'est la production qui se concentre. Le volet « pourquoi elle se concentre » est distinct de celui-ci et suit à part.
Le défaut, en une mesure
scripts/notebook_tools/check_split_reading_cells.pyest surmain, avec sa suite de tests (scripts/tests/test_check_split_reading_cells.py) — et n'est câblé nulle part. Mesure firsthand,mainàd412b5a13c:Ses deux frères de la même famille y sont, eux :
check_output_collapse.py(l.601-609) etcheck_source_collapse.py(l.1237-1248). Celui-ci a été écrit, testé, puis laissé débranché.Ce qu'il voit, et que personne n'écoute
Scan par série sur
MyIA.AI.Notebooks,--json,rc=0partout :91 cellules de lecture scindées sont déjà sur
main— donc déjà mergées, sous des reviews qui n'avaient aucun instrument pour les voir.Pourquoi maintenant : la prose ne tient pas la porte
Le body de #13410 porte depuis le
2026-09-20T18:12:47Zune sectionSTOPen tête, avec le mandat user verbatim (« si on rajoute une lecture, on modifie le paragraphe de lecture existant, on n'en rajoute pas un deuxième »).Trois PRs de densité ont été créées après cette édition : #17025 (18:23Z), #17028 (18:31Z), #17031 (18:54Z) — 42 minutes.
Ce n'est pas de l'indiscipline : un agent déjà lancé ne relit pas le body de son issue. Une règle qui ne vit que par sa prose ne s'exécute pas — il lui faut un organe. Celui-ci existe déjà, ce qui rend l'écart d'autant plus coûteux.
Défaut bloquant à corriger d'abord
Le scanner avorte sur le premier notebook illisible au lieu de le sauter :
En l'état il est incâblable : un seul notebook corrompu rendrait rouge toute PR du dépôt, pour une raison sans rapport avec elle. (Au passage : ce notebook est bien présent et bien corrompu — un rapport antérieur le donnait pour « chemin inexistant à main », c'est faux.)
Critères d'acceptation
SKIPPEDnommé dans la sortie, jamais unrcnon nul. Contrôle : le scan repo-wide rendrc=0en présence deBTC-ML-Researcher/research.ipynb.scripts/ci/fast_lane_registry.py, modèlecheck_source_collapse.py, comparaison base vs PR.mainsont grandfathered : on arrête l'hémorragie avant de soigner la plaie.blocking=True. Le mode advisory a déjà été essayé sur cette famille (output-collapse,source-collapse) : il ne tient pas une porte, il documente un passage. Le grief user porte sur la qualité des notebooks, pas sur sa traçabilité.Ce qu'il ne faut PAS faire
maindans la même PR : c'est le cliquet qu'on livre, pas la réparation. La réparation est un chantier distinct, à cadencer par série.student-pr-reviews.md).Contexte
Mesure du même cycle : 3 issues portent 100 des 243 PRs ouvertes (#13410 → 78, #16638 → 22, #16795 → 14), pendant que 313 des 390 issues ouvertes sont admissibles et non tirées. Le pool n'est pas tari — c'est la production qui se concentre. Le volet « pourquoi elle se concentre » est distinct de celui-ci et suit à part.
Grain: qualite-notebooks — lane a attribuer