Skip to content

Fix(ci,#22937): always-on body -- plafond de job 10 -> 15 min, dimensionne sur le checkout du parc local - #24990

Open
jsboige wants to merge 1 commit into
mainfrom
fix/22937-budget-checkout-body
Open

jsboige wants to merge 1 commit into
mainfrom
fix/22937-budget-checkout-body

Conversation

@jsboige

@jsboige jsboige commented Nov 6, 2026 •

Copy link
Copy Markdown
Owner

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-minutes du job Always-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.

job runner étape annulée durée
128003546807 myia-ai-01-wsl-2 actions/checkout@v4 16:13:48 → 16:23:43 = 9 min 55 s
127879338658 myia-po-2024-linux-persist-6 actions/checkout@v4 12:02:28 → 12:12:17 = 9 min 49 s

Fin du log du premier, mot pour mot :

16:14:46.676  [command]/usr/bin/git sparse-checkout disable
16:14:46.686  [command]/usr/bin/git checkout --progress --force refs/remotes/pull/24959/merge
16:23:43.676  ##[error]The operation was canceled.

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és skipped : 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, runner myia-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 sur persist-5, 7 s sur myia-ai-wsl-2 dont 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

  • YAML relu après édition : jobs.always-on-guards-body.timeout-minutes == 15.
  • git diff --stat : 1 fichier, +19 / −1 (le commentaire de mesure et la borne).
  • Aucune autre modification de comportement dans .github/workflows/always-on-guards-body.yml : ni runs-on, ni concurrency, ni un pas du job.

🤖 Generated with Claude Code

…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>
@github-actions

github-actions Bot commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

Avertissements consultatifs

Trivial-diff advisory (#15740, non bloquant).
genre guard dans la famille META (docs/guard/ledger/readme/test) + diff de 20 lignes changees (<= 100) + aucune exception ecrite dans le body : le litmus de la trivialite (une douzaine d'instances scannees a la suite) est credible. Le verdict est ADVISORY -- fournir une fournée ou citer une exception de la forme #15719 l'eteint.
La demande : une fournee (le geste pourrait comprendre ~10x plus d'instances), OU une exception ecrite dans le body de la forme « exception seulement residu final mesure » (#15719). Editer le body re-deroule cet organe et retire le label.

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2024:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-11-06) :

  • TIER-INFLATION : declared LIGHT << effective LIGHT-genre (tally : declared=1 genre=3 cap=5)

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 variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

Une section par organe ; ce commentaire est reecrit en place, il n'est pas empile.

@github-actions github-actions Bot added trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) coursia-advisory-lock-a3d3af6d699 and removed coursia-advisory-lock-a3d3af6d699 labels Nov 6, 2026

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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 gh ré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.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants