Repository navigation
Conversation
…ionne sur le checkout Le plafond de 10 min etait commente « les cinq organes de body coutent quelques secondes : le plafond n'est qu'un garde-fou contre un blocage de gh ». Ces quelques secondes ne sont pas ce que la borne couvre : le job paie d'abord un checkout sur le parc local. Mesure du 2026-11-06 sur la PR #24959, deux tentatives, deux runners : - job 128003546807, myia-ai-01-wsl-2 : checkout 16:13:48 -> 16:23:43, soit 9 min 55 s, annule dans `git checkout --force refs/pull/24959/merge` ; 8 min 57 s sans une ligne de log ; - job 127879338658, myia-po-2024-linux-persist-6 : checkout 12:02:28 -> 12:12:17, soit 9 min 49 s. Dans les deux cas les cinq organes de body sont restes `skipped` : la jambe requise a rougi sans avoir lu le body. Controle : meme workflow, meme fenetre, work dir non sparse -> checkout en 30 s (run 42251363137, 1 min 50 s de bout en bout). 15 min est la borne deja retenue par #24122 pour la meme classe (5 -> 15 sur deux workflows, « checkout seul = 286 s sur 300 »). La cause structurelle -- un work dir laisse en etat sparse force `git sparse-checkout disable` a materialiser l'arbre entier -- est du ressort de l'ombrelle #22937 ; cette borne ne fait que laisser au checkout de quoi aboutir pendant qu'elle est tranchee. See #22937 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Avertissements consultatifsTrivial-diff advisory (#15740, non bloquant). G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels Une section par organe ; ce commentaire est reecrit en place, il n'est pas empile. |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] Revue structurelle — diff intégral lu (1 fichier, +19/−1, un seul hunk).
VERDICT: LGTM (vérifié: citations croisées au live — run de contrôle et précédent #24122)
- La borne 10→15 min est calibrée sur mesure, pas au doigt mouillé : les deux dépassements cités (9 min 55 s / 9 min 49 s, runners distincts) sont de la même classe que le précédent #24122 (5→15, « checkout seul = 286 s sur 300 ») — vérifié mergé, même ombrelle #22937.
- Contrôle cité recoupé au live : run 42251363137 existe,
Always-on guards -- body, conclusion success, 16:19:55Z→16:21:45Z = 1 min 50 s au total — cohérent avec le « checkout 30 s quand le work dir n'est pas sparse ». - Scoping honnête : la cause structurelle (work dir laissé sparse → matérialisation de l'arbre entier) est explicitement renvoyée à #22937 ; cette borne ne fait que laisser le checkout aboutir pendant que l'ombrelle tranche. Le commentaire documente dates, run IDs et runners — traçabilité exemplaire pour un organe advisory.
- Coût résiduel borné : un
ghréellement bloqué peut maintenant brûler 15 min au lieu de 10, sur un garde non fusionnel — risque acceptable au regard des deux rouges sans lecture du body.
Rien à modifier.
Grain: MED/guard — lane myia-po-2024:CoursIA — prev: DEEP/notebook-dotnet #23993
See #22937
Ce que fait cette PR
Relève de 10 à 15 min le
timeout-minutesdu jobAlways-on guards -- body(.github/workflows/always-on-guards-body.yml— le seul fichier touché par cette PR, énuméré nommément), et documente la mesure qui l'exige dans le commentaire au-dessus de la borne.La mesure (2026-11-06, PR #24959)
La borne était commentée : « Les cinq organes de body coutent quelques secondes : le plafond n'est qu'un garde-fou contre un blocage de
gh. » Ces quelques secondes ne sont pas ce que le job paie en premier : il paie un checkout sur le parc local.128003546807myia-ai-01-wsl-2actions/checkout@v4127879338658myia-po-2024-linux-persist-6actions/checkout@v4Fin du log du premier, mot pour mot :
8 min 57 s sans une ligne de log — mesuré : les 21 lignes de l'intervalle sont toutes horodatées à
16:23:43, annulation puis nettoyage. Les cinq organes de body sont restésskipped: la jambe requise a rougi sans avoir lu le body.Contrôle — même workflow, même fenêtre, work dir non sparse : checkout en 30 s, job conclu en 1 min 50 s (run
42251363137, runnermyia-ai-01-wsl-10). La deuxième tentative bloquée n'avait que 2 branches nouvelles dans son fetch, donc le volume du fetch n'est pas la variable : ce qui diffère est l'état du work dir réutilisé.Ce que la mesure de la flotte ajoute (po-2025, #24962) — ce coût n'est pas une constante du workflow, c'est une loterie d'état du work dir. Même job, même fenêtre : 20,8 min sur
wsl-10, 21,4 min surpersist-5, 7 s surmyia-ai-wsl-2dont le work dir était complet ; cinq tentatives, la cinquième a abouti. Les deux échecs ci-dessus ne sont donc pas un déterminisme — ce sont deux points de mesure, et c'est pour cela que la tentative 4 de #24959 a été relancée.Ce que cette PR ne fait pas
La cause structurelle mesurée — un work dir laissé en état sparse fait exécuter
git sparse-checkout disable, qui matérialise l'arbre entier, coût qui dépasse la borne — n'est pas traitée ici. Elle est du ressort de l'ombrelle #22937, où le finding a été déposé avec ces chiffres. Cette PR ne déplace pas le mur : elle donne au checkout de quoi aboutir pendant que la cause est tranchée, et 15 min est la borne déjà retenue par #24122 pour la même classe (5 → 15, « checkout seul = 286 s sur 300 »).Elle ne couvre que le milieu de la distribution. Un clone froid mesuré à 20,8 min dépasse encore 15 min : la borne n'est donc pas le remède, c'est une borne. Le remède est que ce job ne paie pas un checkout froid — c'est #22937, et c'est écrit là-bas avec ces chiffres.
Vérification
jobs.always-on-guards-body.timeout-minutes == 15.git diff --stat: 1 fichier, +19 / −1 (le commentaire de mesure et la borne).runs-on, niconcurrency, ni un pas du job.🤖 Generated with Claude Code