ci: set measured timeouts and cancel superseded PR runs (W1-7) - #479
Merged
Merged
Conversation
This was referenced Sep 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Symptôme
W1-7 / H10-H11 : des jobs héritaient du timeout GitHub de 360 minutes et les
runs PR remplacés de Fuzz/HOL/Upstream continuaient en parallèle.
PR empilée sur #478.
Cause racine
Délais non définis par job et absence de groupe de concurrence par PR.
Changement
Chaque nouveau délai est
ceil(2 × maximum observé / 60)minutes, avec run,date, durée et formule dans un commentaire source. Les quatre jambes Python
conservent leur nom et reçoivent un délai propre via
matrix.include.Fuzz, HOL et Upstream regroupent les runs par workflow/ref et annulent ceux
remplacés seulement sur
pull_request. Les runs planifiés ne sont pas annuléspar cette politique. Déclencheurs, matrices et validations restent présents.
Preuve
Les quatre runs CI prescrits sont
33990473565 (74,33 min),
33951959734 (78,25 min),
33951905125 (78,50 min),
33806380625 (99,98 min).
Ces totaux sont les durées cumulées des jobs exécutés, hors file d'attente.
Les autres workflows sont sourcés sur quatre runs par workflow (Fuzz inclut
quatre runs planifiés) : 41 runs archivés dans
/private/tmp/cortex-green-w1-7-other-sources.jsonet maxima dans/private/tmp/cortex-green-w1-7-other-maxima.json. Les quatre CI et leurs jobssont dans
/private/tmp/cortex-green-w1-timeout-sources.json.Actionlint sur tous les workflows, agrégateur statique et vérification de chaque
formule passent. Gates locaux ordonnés verts : Ruff 1 416 fichiers, craftsmanship et Pyright
zéro diagnostic ; couche scripts 830 passed, 5 skipped, 292 subtests ; suite
complète 7 577 passed, 221 skipped, 292 subtests en 151,26 s. Skips PostgreSQL
locaux explicites (localhost:1 indisponible), charge initiale 3,78 / 10 cœurs,
65 GiB libres avant/après. Les 31 formules numériques ajoutées sont vérifiées.
Log local :
/private/tmp/cortex-green-w1-7-gates.log.Acceptation externe prouvée par la PR temporaire #480
ciblant main : premier run Fuzz 34039387321
constaté en cours avant le second push, puis annulé automatiquement ; second
run 34039414743 vert.
Aucune annulation manuelle. Les deux révisions avaient passé tous les gates
avant leurs pushs rapprochés. La PR temporaire est fermée sans fusion.
La CI de cette PR est également verte, run34038906477.
Conformité
Huit workflows, constantes toutes reliées aux mesures, aucune baseline ajoutée,
aucun import mémoire modifié. Tests sur données isolées. Pas de fusion/issue,
pas de déclenchement des jobs de publication pour fabriquer une mesure.
Candidats issues
publish-ccpluginsetsync-ccplugins-forkrestent sans nouveau timeout : leursruns verts observables n'exécutent que la garde « PAT absent » (4 s), pas le
chemin de publication/synchronisation. Historique inspecté : 28 runs publish,
100 runs sync récents et sondes plus anciennes ; aucun maximum actif fiable.
Appliquer 1 minute à partir de cette garde serait une constante non justifiée.
Preuve :
/private/tmp/cortex-green-w1-7-guard-history.json.Ces deux délais restent donc une acceptation partielle explicite.
Runbook
Le propriétaire décide de la fusion et pourra relever un vrai run actif des
deux jobs non mesurables pour fixer leur délai selon la même formule.
Aucune publication externe ou synchronisation de dépôt n'est exécutée ici.
Validation complémentaire du 7 septembre : le run PR 34061028434 a atteint 98 % de la suite Python 3.10 avant annulation à la limite de 19 minutes, sans test en échec dans le journal. Recalibrage selon la règle existante ceil(2 × maximum observé / 60) : Python 3.10 = 33 minutes, à partir du run réussi 34047249647 (980 s) ; Python 3.12 = 40 minutes, à partir de 34046091095 (1 197 s). Aucun changement de test ni assouplissement du gate. actionlint, Ruff, craftsmanship et Pyright passent ; 830 tests ciblés et 7 577 tests complets passent (221 ignorés, 292 sous-tests). Les contrôles distants sont relancés sur le nouveau commit.
Le run lent Python 3.13 déjà cité par le workflow initial est également conservé : 33688337476, terminé avec succès en 1 637 s le 2 septembre, donc ceil(2 × 1 637 / 60) = 55 minutes. Limites finales 3.10/3.11/3.12/3.13 : 33/65/40/55 minutes. Dernière validation complète : 7 577 tests réussis, 221 ignorés, 292 sous-tests, 130,90 s ; actionlint et tous les gates statiques passent.