Repository navigation
Description
Origine
Le mainteneur, le 2026-10-28, à propos de #23047 :
« Ca méritera un organe pour stabiliser les versions d'API et de libs, car ce genre de regressions sont parmis les plus terribles et incidieuses. C'est toute une serie de notebook qui peut exploser »
Cas déclencheur. #23047 ré-exécute le carnet archivé SymbolicAI/_archive/Tweety.ipynb sous Tweety 1.28, alors que la série est en 1.30. Sa cellule de provisionnement pointe toujours vers tweetyproject.org/builds/1.28/, qui répond 404. La ré-exécution a donc utilisé des JARs copiés depuis un dossier de projet étudiant, et personne ne peut la rejouer depuis le dépôt. Deux demandes de changements la retiennent : 5677880182 (Hermes) et 5678857012 (coordinateur).
Un carnet isolé, c'est un incident. Pour une bibliothèque partagée par une série, il en va autrement : sans référence commune, chaque ré-exécution peut charger une autre version. Une rupture d'API apparaît alors carnet par carnet, des mois plus tard, et parfois en silence.
Ce qui existe, ce qui manque
| Organe | Ce qu'il voit | Ce qu'il ne voit pas |
|---|---|---|
scripts/notebook_tools/check_kernel_drift.py |
l'interpréteur (Python major.minor) et le format des flottants NumPy, entre base et tête | les bibliothèques chargées par les cellules |
scripts/notebook_tools/notebook_env_census.py |
la provenance d'interpréteur d'une série | idem |
SymbolicAI/Tweety/scripts/download_tweety_tools.py |
fixe TWEETY_VERSION = "1.30" et télécharge depuis Maven |
rien ne lui compare les carnets |
| #4362 | Mathlib pour les lakes Lean | hors de cette issue |
Aucun organe ne compare les versions qu'un carnet charge à la version canonique de sa série.
Mesure (main 54002c6fb79, 2026-10-28)
Littéraux de version dans les cellules de code des carnets suivis (#r "nuget: X, v", pip install x==v, littéraux Tweety) :
- NuGet : 56 paquets épinglés, dont 9 à versions multiples :
| Paquet | Versions (nombre de carnets) |
|---|---|
| IKVM | 8.14.0 (6) · 8.15.0 (20) |
| IKVM.Image | 8.14.0 (5) · 8.15.0 (18) |
| pythonnet | 3.0.5 (7) · 3.1.0 (14) |
| Google.OrTools | 9.11.4210 (11) · 9.15.6755 (2) |
| dotNetRDF | 3.2.1 (7) · 3.4.0 (1) · 3.4.1 (5) |
| Microsoft.ML | 3.0.0 (1) · 5.0.0 (11) |
| SkiaSharp | 2.88.3 (1) · 3.119.4 (10) |
| Microsoft.ML.AutoML | 0.22.3 (1) · 0.23.0 (2) |
| CsvHelper | 27.1.1 (1) · 33.0.1 (1) |
- pip
==: 4 paquets épinglés, aucun à versions multiples. - Tweety : seul le carnet archivé est épinglé sous la 1.30. Les mentions « 1.28+ » de Tweety-01, Tweety-04 et Argumentation-05b sont des commentaires sur un changement d'API, pas des épinglages.
Deux corrections déjà faites sont revenues :
- Tweety-3 telecharge ses jars depuis tweetyproject.org/builds/ (amont mort en 404) -- basculer sur Maven Central #12789 (fermée) avait basculé Tweety de
builds/(404) vers Maven Central. L'archive de Fix(notebook,#22996): Tweety _archive re-execute (JARs 1.28, heap 4g) + disposition research_archive #23047 retombe exactement dans ce cas. - fix(tweety): recettes IKVM 8.14.0 vs DLL livrées 8.15.0 -- 5 modules desalignes + 3 pins runtime divergents #19673 (fermée) avait aligné IKVM de 8.14.0 vers 8.15.0. Six carnets épinglent encore
IKVM 8.14.0:Tweety-03-Advanced-Logics,Tweety-03-Conditional-Logics,Tweety-03-ModalLogic,Tweety-03-QBF,Tweety-07b-Ranking-Probabilistic,Tweety-10-MLN(tous-CSharp). Reste à établir si c'est une dérive ou un épinglage voulu.
Un repli indexé sur la version masque une rupture d'API. Tweety-04-Belief-Revision-Python contient print("Skipped: imports CrMas non disponibles (Tweety 1.28+ API change)."). Les sorties committées passent par le vrai chemin, mais au prochain changement de version ce repli produirait une sortie appauvrie sans erreur. Aujourd'hui, seul le ratchet de perte de sortie (#15327) pourrait le voir, et seulement par la taille.
Réserve sur l'instrument. Le recensement compte des littéraux. Il ne distingue pas une dérive d'un épinglage justifié : ML.AutoML 0.22.3 peut être requis par un ML.NET plus ancien. C'est le classement demandé ci-dessous qui tranche.
Ce qui est demandé
-
Un manifeste des versions canoniques, une source par bibliothèque. Quand un organe de série fixe déjà la version (
TWEETY_VERSION), le manifeste pointe vers lui et ne recopie pas la valeur, sinon les deux surfaces divergent. Sinon (NuGet, pip), le manifeste porte la valeur. L'organe et ses données vivent sousscripts/notebook_tools/. -
Une garde de PR sur les carnets modifiés. Elle rougit dans trois cas :
- une version chargée inférieure à la canonique (rétrogradation) ;
- une version supérieure sans montée du manifeste dans la même PR ;
- une source de provisionnement hors de l'organe de série (URL morte ou divergente, binaires venant d'un chemin hors dépôt).
Seule exception : une entrée d'allowlist arbitrée, avec son motif écrit. La garde démarre en advisory dans
scripts/ci/fast_lane_registry.py, son taux de faux positifs se mesure sur les dernières PRs de carnets, puis elle devient bloquante, comme les autres ratchets. -
Un recensement de tout le dépôt (rc 0) qui produit la table de dispersion ci-dessus et classe chaque divergence : à faire converger, ou justifiée avec son motif. Les convergences deviennent des grains du tapis, une série par PR, avec ré-exécution.
-
Monter une version en un seul geste. La montée du manifeste et la ré-exécution de toute la série vont dans la même PR, ou dans un escalier de PRs par série. Une rupture d'API se voit alors sur toute la série d'un coup, et les incompatibilités mesurées s'écrivent dans le body : cellule, appel, erreur. La procédure s'écrit dans
docs/reference/. -
Les replis indexés sur une version (« non disponible », « Skipped … API change ») sont recensés. Un run committé qui passe par l'un d'eux rougit.
Critères d'acceptation
- organe et tests, avec un contrôle positif sur la tête de Fix(notebook,#22996): Tweety _archive re-execute (JARs 1.28, heap 4g) + disposition research_archive #23047 (Tweety 1.28 dans l'archive : rouge), un autre sur un carnet en
IKVM 8.14.0(rouge, sauf allowlist), et un contrôle négatif sur un carnet aligné ; - manifeste couvrant au moins Tweety, IKVM, IKVM.Image, pythonnet, Google.OrTools, dotNetRDF, Microsoft.ML et SkiaSharp ;
- garde enregistrée advisory, taux de faux positifs mesuré et publié, puis bascule bloquante ;
- les 9 paquets à versions multiples classés (converger ou justifier), avec le motif écrit pour chaque justification ;
- la convergence IKVM 8.14.0 → 8.15.0 de la série Tweety, d'abord classée (récidive de fix(tweety): recettes IKVM 8.14.0 vs DLL livrées 8.15.0 -- 5 modules desalignes + 3 pins runtime divergents #19673 ou épinglage voulu), puis traitée avec ré-exécution ;
- la procédure « monter une version » écrite dans
docs/reference/.
Périmètre
- L'interpréteur Python reste à
check_kernel_drift.py: cette issue ne le refait pas. - Mathlib et les lakes Lean restent à [EPIC] Lean — harmoniser Mathlib, mutualiser les checkouts par jonctions, doctrine des lakes R1-R4 (le site suit le consommateur) #4362.
- Les sorties vidées par un environnement absent (clé, GPU, outil) restent à Epic : sorties de carnets vidées par dérive d'environnement et « réalignement honnête » — détecter dans l'historique git, restaurer, bloquer #21424.
- Cette issue couvre les bibliothèques et API tierces chargées par les cellules des carnets.
Activity
myia-ai-01 commentedon Oct 28, 2026
[CLAIMED] lane myia-ai-01:CoursIA-2 -- organe check_lib_versions (manifeste + garde advisory + recensement), pose au dispatch par myia-ai-01:CoursIA -- paths: scripts/notebook_tools/check_lib_versions*, scripts/notebook_tools/lib_versions*, scripts/notebook_tools/tests/test_check_lib_versions*, scripts/ci/fast_lane_registry.py, docs/reference/lib-versions*
jsboige commentedon Oct 28, 2026
[CLAIMED-AMEND] lane myia-ai-01:CoursIA-2 -- paths: scripts/notebook_tools/check_lib_versions*, scripts/notebook_tools/lib_versions*, scripts/notebook_tools/tests/test_check_lib_versions*, scripts/ci/fast_lane_registry.py, scripts/ci/fast_lane.py, docs/reference/lib-versions*
Amendement de perimetre, porte par la lane qui execute : la clause du dispatch ne mentionnait pas
scripts/ci/fast_lane.py.Motif mesure : un garde enregistre dans
scripts/ci/fast_lane_registry.pyn'est execute que s'il appartient a une liste explicitement agreguee par le moteur.scripts/ci/fast_lane.pyagrege ses groupes ligne 395 (+ TRANCHE26 + TRANCHE27 + TRANCHE28) et les importe ligne 48 ; un groupe nouveau (TRANCHE29) demande ces deux lignes, sans quoi le garde est declare mais jamais lance -- un rouge muet, exactement la classe que l'issue #19098 a fermee.Aucun autre fichier n'est touche : ni workflow, ni catalogue, ni carnet.
jsboige commentedon Oct 28, 2026
[DELIVERED] lane myia-ai-01:CoursIA-2 -- PR #23112 -- paths: MyIA.AI.Notebooks/GameTheory/GameTheory-05-ZeroSum-Minimax-CSharp.ipynb, MyIA.AI.Notebooks/GameTheory/GameTheory-15c-CooperativeGames-CSharp.ipynb, MyIA.AI.Notebooks/Search/Part1-Foundations/Search-09-LinearProgramming-CSharp.ipynb, MyIA.AI.Notebooks/Search/Part2-CSP/CSP-5-Optimization-CSharp.ipynb, MyIA.AI.Notebooks/Search/Part3-Cas-pratiques/App-11b-Picross-CSharp.ipynb, MyIA.AI.Notebooks/Search/Part3-Cas-pratiques/App-13b-TSP-Metaheuristics-CSharp.ipynb, MyIA.AI.Notebooks/Search/Part3-Cas-pratiques/App-16-Crossword-CSP-CSharp.ipynb, MyIA.AI.Notebooks/Search/Part3-Cas-pratiques/App-17b-VRP-Logistics-CSharp.ipynb, MyIA.AI.Notebooks/Search/Part3-Cas-pratiques/App-19-ProceduralGeneration-WFC-CSharp.ipynb, MyIA.AI.Notebooks/Search/Part3-Cas-pratiques/App-2b-GraphColoring-CSharp.ipynb, MyIA.AI.Notebooks/Search/Part3-Cas-pratiques/App-5-Timetabling-CSharp.ipynb
Tranche livree : convergence de
Google.OrToolssur 9.15.6755. Les 11 carnets durecensement portaient
9.11.4210sans motif ecrit dans le depot (ecart donc classe « aconverger » par l'organe des versions). La PR #23112 monte l'epinglage sur la version
canonique et re-execute les 11 carnets avec l'executeur canonique du depot
(
scripts/notebook_tools/dotnet_executor.py, kernel.net-csharp) : 140 cellules decode, 0 erreur, 0
execution_countnul, aucune sortie recrite a la main.Etat mesure apres la livraison (
--censussur la tete de la branche) :Google.OrToolsn'apparait plus qu'en9.15.6755, classecanonique, sur 13 carnets(les 11 livres + les 2 carnets Sudoku deja sur la version canonique). L'entree
9.11.4210du manifeste devient une divergence fantome : son retrait suit le mergedu manifeste (#23079, tranche de creation de l'organe, encore en relecture) — cette
tranche-la n'est pas fermee par la presente livraison.
Un point d'hygiene signale et repare. La premiere re-execution de
GameTheory-05avait degrade sa cross-validation trois-moteurs : Gambit (Tranche 3) n'etait pas
installe sur cette machine, et la comparaison des trois resolutions avait ete remplacee
par un message d'absence porteur du chemin machine de l'utilisateur. Les deux ratchets
de sortie l'ont signale (cellule
98a90823: 2 963 -> 1 738 caracteres ; 3 cheminsmachine nouveaux). La cause a ete reparee, pas contournee : MSI officiel
gambit-16.0.2.msiextrait sans elevation dans%LOCALAPPDATA%\Gambit\Gambit\(l'emplacementque la recherche du carnet consulte sur Windows), puis carnet re-execute — la comparaison
a trois resolutions est restituee, sans chemin machine, et le ratchet de collapse ne
signale plus rien.
Garde de perimetre :
check_pr_perimeter --scan-threadsur #23112 rendOK; lesratchets de sortie (
check_output_collapse,check_output_failure_text,check_source_collapse) rendent 0 flagged / 0 regressed sur la tete exacte.La tranche manifeste de cette issue reste ouverte de mon cote (claim alive sur
scripts/notebook_tools/lib_versions*) et n'est pas reprise par cette livraison.Fix(search,#23073): le libelle de version suit l'epinglage reellement…
Fix(search,#23073): atteste la parite jumelle des 11 paires touchees …
Fix(semanticweb,#23073): atteste la parite jumelle des 7 paires dotNe…
Fix(notebook,#23073): atteste la parite jumelle des 6 paires re-eping…
Fix(notebook,#23073): les six points de la revue de clusterManager-My…
Fix(semanticweb,#23073): convergence de la serie SemanticWeb C# sur d…
Fix(ml,#23073): convergence de Microsoft.ML.AutoML a 0.23.0 dans ML-03 (
Fix(ci,#23073): renumeroter la tranche en TRANCHE31 -- collision de t…
Merge(main) lane myia-ai-01:CoursIA-2 -- conflit tranche : les deux g…
Add(ci,#23073): organe des versions de bibliotheques chargees par les…
Fix(search,#23073): convergence Google.OrTools 9.11.4210 -> 9.15.6755…
Fix(ci,#22209): renumeroter les tranches fast-lane et purger une dive…
3 remaining items
myia-ai-01 commentedon Oct 31, 2026
[INFO] lane myia-ai-01:CoursIA — un angle mort de l'organe, mesuré sur une PR réelle, à intégrer à la suite du chantier (aucune issue neuve : le veto du mainteneur tient tant que les issues ouvertes sont au moins 350).
Sur #23807 (TV-00a, tranche 1 de la convergence kernel #23805), les bannières de sortie montrent
torch 2.13.0+cpuà la base ettorch 2.8.0+cu126à la tête. C'est un recul de cinq versions mineures. PourtantLibrary versions guard (advisory, #23073)est vert à cette tête, parce que torch n'est pas dansscripts/notebook_tools/lib_versions_manifest.json. Le manifeste couvre les versions épinglées par les cellules. torch vient de l'environnement du noyau, et le carnet n'en garde la trace que dans sa sortie (print(torch.__version__)).La forme qui attraperait ce cas : comparer, base contre tête, les versions imprimées par les bannières de sortie des bibliothèques nommées au manifeste (au minimum torch, numpy, transformers, z3), et signaler un recul. Le relevé de la lane sur #23807 montre aussi qu'il n'existe aucun canon torch dans les sorties de la flotte (2.6, 2.8, 2.13 et 2.14 coexistent). Ma décision pour #23805 : pas de recul sous la version de la base, torch au moins égal à 2.13 en roue
cu126dans l'interpréteur 3.13.myia-ai-01 commentedon Nov 1, 2026
[COORD] Instance mesurée le 2026-11-01, à verser au recensement de cette issue : une rétrogradation de torch est passée sur
mainpar une PR de canonisation 3.13.mainavantmainaprès #23581RL/RL-13-Curiosite-RND-Python.ipynbtorch 2.13.0+cputorch 2.6.0+cu124La même pile est proposée dans #23673 (
RLPT-00d), où je demande des changements. La cause, rapportée par la lane : sur son siège, torch est bridé à 2.6 partorchvision 0.21.0etstable-baselines3.Ce qui l'a laissée passer.
Kernel drift guardne lit que la version de Python.C'est exactement le cas que cet organe doit refuser.
myia-ai-01 commentedon Nov 1, 2026
Complément à l'instance RL-13 ci-dessus : la mesure étendue aux carnets RL du siège
myia-po-2027:CoursIAtrouve la même rétrogradation sur RL-06b (#23624, 2.13.0+cpu → 2.6.0+cu124) et RL-12 (#23617, 2.8.0+cpu → 2.6.0+cu124), toutes deux mergées. RL-06c (#23626) et RL-06d (#23573) importent torch sur le même siège sans imprimer sa version.Ce qui l'a laissée passer : la lane avait écrit le point dans le body (« divergence torch documentée, pin machine délibérée »), en prose et sans marqueur. B.0 ne le voit pas, et le dossier de prévalidation non plus. Aucune garde ne compare les lignes de version de bibliothèque entre la base et la tête. C'est la pièce que cet organe doit apporter.
Arbitrage et suite : #23384 (commentaire 6553575746).
Fix(rl,#23384): RLPT-00d re-execute sous torch 2.13 -- banniere trito…
Fix(dswa,#23802): WS-02 re-execute sous torch 2.13 -- plus de retrogr…
Fix(rl,#23384): RL-12 re-execute sous torch 2.13 -- sorties numerique…
Fix(notebooks,#23802): WS-02 Scattering-SOTA re-execute sous torch 2.…
Re-exec(census,#23384): RLPT-00d canon Python 3.13.15 -- verdict mult…
Feat(tooling,#23103): detecter les chargements d'artefacts hors du de…
Feat(guard,#23073): torch et numpy au manifeste -- canonique par seri…
jsboige commentedon Nov 7, 2026
[DELIVERED] lane myia-ai-01:CoursIA-2 -- PR #25060 -- paths: scripts/notebook_tools/check_lib_versions.py, scripts/notebook_tools/lib_versions_manifest.json, scripts/notebook_tools/tests/test_check_lib_versions.py, docs/reference/lib-versions.md -- 2026-11-07T13:39Z
Feat(tooling,#24943): etendre la reproduction aux archives et aux art…
jsboige commentedon Nov 7, 2026
[CLAIMED-AMEND] lane myia-ai-01:CoursIA-2 -- paths: scripts/notebook_tools/check_lib_versions.py, scripts/notebook_tools/lib_versions_manifest.json, scripts/notebook_tools/tests/test_check_lib_versions.py, docs/reference/lib-versions.md, MyIA.AI.Notebooks/RL/RL-06-DQN-Policy-Gradient-Python.ipynb, MyIA.AI.Notebooks/RL/RL-01c-Distillation-Politique-Prolog-Python.ipynb, MyIA.AI.Notebooks/RL/PostTraining/RLPT-00e-DPO-TRL-Python.ipynb, MyIA.AI.Notebooks/RL/PostTraining/RLPT-00f-GRPO-TRL-contre-PPO-Maison-Python.ipynb, MyIA.AI.Notebooks/RL/PostTraining/RLPT-00g-PPO-TRL-Experimental-Python.ipynb, MyIA.AI.Notebooks/RL/PostTraining/RLPT-04-DPO-Offline-contre-GRPO-Online-Python.ipynb, MyIA.AI.Notebooks/RL/requirements.txt -- tranche de convergence du corpus sous le plancher (critere 3 de l'issue : « les convergences deviennent des grains du tapis, une serie par PR, avec re-execution »)
L'organe est livre par #25060 (ouverte, CLEAN). Cette tranche-ci converge les carnets de la serie RL qui portent une version chargee sous le plancher torch 2.13 du manifeste :
RL-06-DQN-Policy-GradientRLPT-00e-DPO-TRLRLPT-00f-GRPO-TRL-contre-PPO-MaisonRLPT-00g-PPO-TRL-ExperimentalRLPT-04-DPO-Offline-contre-GRPO-OnlineRL-01c-Distillation-Politique-PrologRLPT-02-GRPO-Minimal(4-bit + modele local) reste GPU-bound. Aucune autre PR ouverte ne touche ces fichiers (verifie : #24778 -> RLPT-03, #24939 -> RL-21, #25010 -> RLPT-03/RL-19).Fix(rl,#23073): RL-06 converge sous le plancher torch 2.13 -- garde d…
jsboige commentedon Nov 7, 2026
[DELIVERED] lane myia-ai-01:CoursIA-2 -- PR #25126 -- paths: MyIA.AI.Notebooks/RL/RL-06-DQN-Policy-Gradient-Python.ipynb, MyIA.AI.Notebooks/RL/requirements.txt
Premiere tranche du critere 3 (convergence des carnets sous le plancher torch >= 2.13) : RL-06.
TORCH_FLOOR = (2, 13), assert + ligne de conformite) : la source change, la re-execution complete est due et livree — 15/15 cellules, 0 erreur, sous l'env epingle au plancher (torch 2.14.1+cpu ; numpy 2.4.3, gymnasium 1.3.0, matplotlib 3.10.3 reconstruits des versions commitees — convergence a variable unique).torch>=2.0->torch>=2.13, renvoi a la garde du carnet.Suites nommees (hors de cette tranche) : RLPT-00e/00f/00g (CPU-executables, env epingle par carnet requis — trl 1.17.1 pour 00f/00g, surface
trl.experimental.ppoabsente en 1.13+), RLPT-04 et RLPT-02 (GPU), RL-01c (SWI-Prolog).