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
Une PR de 8 fichiers (7 notebooks RL + 1 json) declenche 60 checks — mesure firsthand sur #12840. La file CI est a 2643 runs en attente pour 18 en cours. Sur un echantillon de 800 runs en attente :
96,8 % sont du pull_request (crons et schedules : 0,2 %) ;
aucun workflow ne domine — le plus gros fait 3,1 %, sur 74 distincts ;
0 % de generation perimee : une seule tete par branche, ~40 runs chacune. Personne ne travaille pour un commit remplace ; chaque push tire vraiment ~40 workflows.
entree mesuree ~814 runs/h, drain ~160/h. Le systeme tourne a 5x sa capacite.
Deux leviers deja largement consommes, verifies avant de proposer celui-ci :
filtres paths: : 86,6 % des 97 workflows pull_request en ont deja un (13 seulement tirent inconditionnellement). Ce gisement est presque epuise ;
annulation des generations perimees : 60,8 % declarent cancel-in-progress, et la mesure montre 0 run perime en file. Rien a recuperer la.
Ce qui reste : le volet 2 de #11835, jamais construit
Le titre de #11835 annonce « voie rapide + file asynchrone pour le lourd ». La voie rapide existe (phase ombre, adjugee le 24/08 : bascule partielle 4 gardes). La file asynchrone est ecrite et active (slow-lane.yml, tranche 1, schedule hebdo mardi 02:30 UTC — réfutation 4 de l'audit CONFIRMÉE 2026-08-30, po-2024). Le grain restant = tranche 2+ (déplacer les triggers pull_request des lourds vers la voie lente, critère #12856-2).
Directive user (2026-08-25) : « Est-ce que tu ne peux pas modifier les runs lourds et mutualisables, pour qu'ils soient tires regroupes et sur schedule ? » — et anterieurement : « Les jobs lourds ne devraient etre payes qu'une fois par fournee, les legers tournent a chaque fois, et pourquoi pas les moyens peuvent etre declanches sur des batchs controles. »
Ce qui rend la bascule SURE — verifie firsthand, c'est le point qui debloque
Le risque evident serait qu'un check sorti de pull_request laisse PR gate l'attendre indefiniment. Ce risque n'existe pas ici, pour trois raisons lues dans scripts/pr_gate.py :
Fait
Emplacement
Consequence
main n'a qu'un seul check requis (PR gate, meta-agrégateur — réfutation 1 CONFIRMÉE 2026-08-30, po-2024)
l.6-8 (mesure firsthand 2026-08-07)
sortir un workflow ne peut pas bloquer un merge
le gate n'a pas de liste : il « agrege le CI qui existe » et juge sur les noms observes
l.75
un check absent n'est pas attendu — il cesse simplement d'exister
Donc chaque deplacement est reversible par un seul commit, et ne peut pas wedger le depot. C'est ce qui distingue ce grain d'un pari.
Travail demande
Stratifier en trois regimes, sans rien supprimer :
Leger — a chaque push. Les gardes qui lisent le diff ou le body. Deja mutualises par fast-lane-shadow.yml (1 checkout pour 9 gardes, gain d'execution mesure 5,1x).
Lourd — une fois par fournee, sur schedule, contre main. Nouveau slow-lane.yml.
Moyen — batch controle : workflow_dispatch + declenchement sur label. Overkill pour l'instant (mot du user) : cabler le mecanisme, ne pas l'activer.
Candidats lourds a instruire (liste de depart, a confirmer par la mesure job-level)
CodeQL Analyze x4 (actions, csharp, javascript-typescript, python) — 4 jobs lourds qui tirent sur une PR notebook sans une ligne de C# ni de JS. Le meilleur rapport gain/risque du lot, et CodeQL est concu pour tourner sur schedule.
Quarto (Validate Quarto build (PR), Build Quarto site, Deploy to GitHub Pages).
Golden-set execution (H.7 P3).
Les ~30 lakes Lean — deja filtres par paths:, mais tres lourds quand ils tirent. A instruire, pas a bouger a l'aveugle : un lake qui ne verifie plus la PR qui le modifie serait une regression de couverture, pas une economie.
Suites de tests (Scripts Tests (CPU), ict-tests, ml-tests) — instruire au cas par cas.
Le tri se fait sur des minutes-runner mesurees au niveau JOB (started_at -> completed_at de chaque job), jamais sur run_started_at -> updated_at : cette seconde grandeur inclut l'attente en file et gonfle tout uniformement. Je suis tombe dans ce piege ce soir avant de le corriger — l'adjudication de #11835 le documente deja (§3, « a ne pas citer comme gain »). Fenetre : dernieres 24 h, pour mesurer le regime courant et non la moyenne de trois semaines.
Acceptance
slow-lane.yml existe, sur schedule, et rend un verdict consultable (check-run sur main ou commentaire de fournee). Un job qui tourne sans publier de verdict est un organe eteint.
Chaque workflow deplace perd son trigger pull_requestdans le meme commit que son ajout a la voie lente. Pas de phase ou il tire des deux cotes — c'est le defaut actuel de la voie rapide en ombre, qui coute +1 au lieu d'economiser -8.
Controle positif obligatoire : au moins une PR temoin ou la voie lente rougit sur un vrai defaut. Un lot entierement vert est indiscernable d'un moteur debranche — c'est l'en-tete de fast-lane-shadow.yml qui le dit, et c'est ce qui a disqualifie 5 gardes sur 9 a l'adjudication.
Reversibilite : git revert d'un seul commit restaure le regime actuel.
Hors scope
Ne pas toucher PR gate lui-meme.
Ne pas toucher la protection de branche (injoignable sans droit admin : l'API rend 404, et un 404 y est une question, pas une absence mesuree).
Le constat, mesure ce soir
Une PR de 8 fichiers (7 notebooks RL + 1 json) declenche 60 checks — mesure firsthand sur #12840. La file CI est a 2643 runs en attente pour 18 en cours. Sur un echantillon de 800 runs en attente :
pull_request(crons et schedules : 0,2 %) ;Deux leviers deja largement consommes, verifies avant de proposer celui-ci :
paths:: 86,6 % des 97 workflowspull_requesten ont deja un (13 seulement tirent inconditionnellement). Ce gisement est presque epuise ;cancel-in-progress, et la mesure montre 0 run perime en file. Rien a recuperer la.Ce qui reste : le volet 2 de #11835, jamais construit
Le titre de #11835 annonce « voie rapide + file asynchrone pour le lourd ». La voie rapide existe (phase ombre, adjugee le 24/08 : bascule partielle 4 gardes). La file asynchrone est ecrite et active (
slow-lane.yml, tranche 1, schedule hebdo mardi 02:30 UTC — réfutation 4 de l'audit CONFIRMÉE 2026-08-30, po-2024). Le grain restant = tranche 2+ (déplacer les triggerspull_requestdes lourds vers la voie lente, critère#12856-2).Directive user (2026-08-25) : « Est-ce que tu ne peux pas modifier les runs lourds et mutualisables, pour qu'ils soient tires regroupes et sur schedule ? » — et anterieurement : « Les jobs lourds ne devraient etre payes qu'une fois par fournee, les legers tournent a chaque fois, et pourquoi pas les moyens peuvent etre declanches sur des batchs controles. »
Ce qui rend la bascule SURE — verifie firsthand, c'est le point qui debloque
Le risque evident serait qu'un check sorti de
pull_requestlaissePR gatel'attendre indefiniment. Ce risque n'existe pas ici, pour trois raisons lues dansscripts/pr_gate.py:mainn'a qu'un seul check requis (PR gate, meta-agrégateur — réfutation 1 CONFIRMÉE 2026-08-30, po-2024)Donc chaque deplacement est reversible par un seul commit, et ne peut pas wedger le depot. C'est ce qui distingue ce grain d'un pari.
Travail demande
Stratifier en trois regimes, sans rien supprimer :
fast-lane-shadow.yml(1 checkout pour 9 gardes, gain d'execution mesure 5,1x).schedule, contremain. Nouveauslow-lane.yml.workflow_dispatch+ declenchement sur label. Overkill pour l'instant (mot du user) : cabler le mecanisme, ne pas l'activer.Candidats lourds a instruire (liste de depart, a confirmer par la mesure job-level)
Analyzex4 (actions,csharp,javascript-typescript,python) — 4 jobs lourds qui tirent sur une PR notebook sans une ligne de C# ni de JS. Le meilleur rapport gain/risque du lot, et CodeQL est concu pour tourner surschedule.Validate Quarto build (PR),Build Quarto site,Deploy to GitHub Pages).Golden-set execution (H.7 P3).paths:, mais tres lourds quand ils tirent. A instruire, pas a bouger a l'aveugle : un lake qui ne verifie plus la PR qui le modifie serait une regression de couverture, pas une economie.Scripts Tests (CPU),ict-tests,ml-tests) — instruire au cas par cas.Le tri se fait sur des minutes-runner mesurees au niveau JOB (
started_at->completed_atde chaque job), jamais surrun_started_at->updated_at: cette seconde grandeur inclut l'attente en file et gonfle tout uniformement. Je suis tombe dans ce piege ce soir avant de le corriger — l'adjudication de #11835 le documente deja (§3, « a ne pas citer comme gain »). Fenetre : dernieres 24 h, pour mesurer le regime courant et non la moyenne de trois semaines.Acceptance
slow-lane.ymlexiste, surschedule, et rend un verdict consultable (check-run surmainou commentaire de fournee). Un job qui tourne sans publier de verdict est un organe eteint.pull_requestdans le meme commit que son ajout a la voie lente. Pas de phase ou il tire des deux cotes — c'est le defaut actuel de la voie rapide en ombre, qui coute +1 au lieu d'economiser -8.fast-lane-shadow.ymlqui le dit, et c'est ce qui a disqualifie 5 gardes sur 9 a l'adjudication.git revertd'un seul commit restaure le regime actuel.Hors scope
PR gatelui-meme.See #11835