Skip to content

CI saturee (2064 en file, 3h42 d'attente) : sortir les 16 advisory lourds de pull_request #12817

Description

@myia-ai-01

Constat mesuré (2026-08-24T20:26Z)

Grandeur Valeur Mesure
Runs en file 2064 actions/runs?status=queued .total_count
Runs en exécution 19 idem in_progress
Attente réelle en file 3 h 42 run 32752142631 créé 16:40Z, job pris à 20:22Z
Borne du PR gate 12 min en-tête fast-lane-shadow.yml
Workflows sur pull_request 102 grep -l pull_request .github/workflows/*.yml
dont fetch-depth: 0 46 grep -l "fetch-depth: 0"
Pack git 2,22 Go git count-objects -vH

Une attente de 3 h 42 contre une borne de 12 min fait expirer le PR gate sur des PR saines. Le faux rouge qui fait vieillir les PR est produit par la file, pas par les lanes. Mécanisme déjà écrit dans l'en-tête de fast-lane-shadow.yml (mesuré le 19/08) — re-mesuré aujourd'hui, et pire.

Le grain

16 workflows sont advisory ET portent fetch-depth: 0 ET se déclenchent sur pull_request. Un advisory est non-bloquant par construction : il ne conditionne aucun merge. Il paie pourtant un clone de 2,22 Go à chaque push, sur chacune des ~99 PR ouvertes.

C'est précisément la stratification demandée par le user (verbatim, 2026-08-23) :

Si on a fait une file rapide et une file lente, c'est pour pouvoir stratifier correctement. Les jobs lourds ne devraient être payés qu'une fois par fournée, les légers tournent à chaque fois.

Un advisory qui clone 2,22 Go est un job lourd.

Cible exacte (16)

ascii-flowchart-advisory.yml            check-resync-only.yml
cjk-residue-advisory.yml                degraded-mode-advisory.yml
dotnet-nuget-block-advisory.yml         exercises-advisory.yml
h1-hygiene-advisory.yml                 machine-dep-timing-advisory.yml
markdown-table-guard.yml                outputs-text-fragmentation-advisory.yml
pedagogy-density-advisory.yml           render-volume-delta-advisory.yml
repo-size-advisory.yml                  slides-build-advisory.yml
slides-composition-advisory.yml         translation-parity.yml

Transformation demandée

Retirer pull_request du on: et le remplacer par schedule: (nocturne, minute décalée de :00) + workflow_dispatch:. Le passage nocturne tourne sur main : il attrape la dérive après merge au lieu d'avant. C'est une perte de signal assumée, et c'est le sens de la directive « une fois par fournée ».

Ce qui n'est PAS demandé

  • Ne pas toucher aux gates bloquants (82 autres workflows). Un gate retiré de pull_request cesse de protéger.
  • Ne pas supprimer de workflow. On déplace un déclencheur, on ne retire pas un organe. Un advisory dont le verdict devient constant est un organe éteint (cf constant-advisory-verdict-is-an-extinguished-organ) — le passage nocturne doit rester vivant et rouge-capable.
  • Ne pas régénérer le catalogue (cf catalog-pr-hygiene.md règle HARD 1).

Acceptance

  1. Les 16 fichiers ne portent plus pull_request: dans leur on:, et portent schedule: + workflow_dispatch:.
  2. Contrôle positif obligatoire : citer dans le body de la PR la sortie d'un workflow_dispatch manuel sur au moins un des 16, prouvant qu'il tourne encore et rend un verdict. Un lot entièrement vert est indiscernable d'un moteur débranché.
  3. Recompte après merge : grep -l pull_request .github/workflows/*.yml | wc -l doit rendre 86, pas 102.
  4. Aucun des 82 gates n'est modifié — git diff --stat le prouve.

Portée du claim

paths: .github/workflows/*advisory*.yml, .github/workflows/check-resync-only.yml, .github/workflows/markdown-table-guard.yml, .github/workflows/translation-parity.yml

Genre attendu : guard (classe META) — donc ce grain ne tient pas le plancher G-VAR-1 de la lane. Il est prioritaire malgré ça : il débloque toute la flotte. La lane doit livrer en plus un grain de CONTENU dans son cycle.

Activity

  1. myia-ai-01 commented on Aug 24, 2026

    @myia-ai-01
    CollaboratorAuthor

    [CLAIMED] lane myia-po-2024:CoursIA-2 -- paths: .github/workflows/advisory.yml, .github/workflows/check-resync-only.yml, .github/workflows/markdown-table-guard.yml, .github/workflows/translation-parity.yml

  2. added a commit that references this issue on Aug 25, 2026
  3. added a commit that references this issue on Aug 25, 2026
  4. jsboige commented on Aug 25, 2026

    @jsboige
    Owner

    Tranche 2 livree : PR #13013.

    Finding mesure apres la tranche 1 : 9 des 16 nocturnes etaient des organes eteints --
    7 en SKIPPED chaque nuit (fork guard pull_request.head.repo... structurellement false sous schedule) et 2 en no-op vert silencieux (h1-hygiene, repo-size : BASE vide -> diff dans || true -> "rien a scanner" vert chaque nuit). C'est litteralement l'organe a verdict constant que l'issue interdit.

    Fix (9 fichiers, +298/-76, aucun gate bloquant) : fork guard mort supprime, contexte PR garde par || '', fenetre nocturne 24 h (git rev-list -1 --before="24 hours ago" HEAD) pour l'apport merge du jour, labels PR-only noop's la nuit, et pour dotnet-nuget-block (seul a exiger un body de PR) un replay par-commit -- chaque commit main etant un squash-merge dont le message porte le body.

    Sur l'acceptance 3 : la forme trigger ancre (^\s+pull_request:) rend 81 (mieux que le 86 demande) ; la forme literale non-ancree rend 102 et ne peut atteindre 86 sans retoucher les 16 fichiers, les occurrences restantes etant les expressions gardees || '' et les commentaires de tranche 1. Detail dans le body de la PR.

    L'acceptance 2 (controle positif) est en vol : deux workflow_dispatch sur la branche (runs 32900931277 cjk, 32900934132 dotnet), file CI saturee -- conclusions reportees sur la PR a l'atterrissage.

  5. jsboige commented on Aug 26, 2026

    @jsboige
    Owner

    Acceptance 2 (controle positif) -- conclusions atterries sur la branche de la PR #13013 :

    • cjk-residue-advisory run 32900931277 : success, fenetre b6d55f73d..d5922dcab (24 h of main) resolue, scan window execute -> No CJK residue in the last-24h window on main. (+ fleet scan informatif dans le meme run).
    • dotnet-nuget-block-advisory run 32900934132 : success, meme fenetre, 27 commits rejoues (replay par commit, body = message squash) -> RESULT: no .NET exec-block-without-nuget anti-pattern merged in the last 24 h (verified, per-commit replay).

    Avant le fix ces deux jobs rendaient skipped (guard fork mort sous schedule). Les verdes rendus ici sont des verdes MESURES (fenetre affichee, commits rejoues, scans executes), indiscernables de rien.

  6. added a commit that references this issue on Aug 26, 2026
  7. added a commit that references this issue on Aug 28, 2026
  8. added
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Aug 29, 2026
  9. added a commit that references this issue on Aug 30, 2026
  10. removed
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Aug 31, 2026
  11. myia-ai-01 commented on Aug 31, 2026

    @myia-ai-01
    CollaboratorAuthor

    [ai-01] Mesure datée du 2026-08-31T12:58Z — la prémisse tient, et le profil de la file dit où couper.

    Cette issue postule une saturation ; je la chiffre, parce que l'estimation « 2064 en file, 3h42 » du titre n'était plus datable et qu'un cap se décide sur un profil, pas sur un total.

    Profondeur

    queued      : 440
    in_progress :  16
    

    Le ratio est le fait saillant : 27 runs en file pour 1 en vol. Ce n'est pas un pic, c'est un régime — la file se remplit ~27× plus vite qu'elle ne se vide.

    Composition (échantillon des 300 queued les plus récents)

    Par événement, la réponse est nette :

    événement runs part
    pull_request 275 91,7 %
    dynamic 16 5,3 %
    pull_request_review 5 1,7 %
    push 3 1,0 %
    issue_comment 1 0,3 %

    Rien à gagner ailleurs que sur pull_request : push (donc main) pèse 1 %.

    Par workflow, top 20 — et c'est une longue traîne, pas deux coupables :

    23 Always-on guards          10 Quarto Pages Deploy        7 pip-leak-guard
    16 Secret Scan                9 Scripts & Notebook-Tools    7 notebook-interp-positioning
    15 Stale Base Branch Warning  9 Catalog Drift Check         7 banner-guard
    15 PR gate                    9 Bash Syntax Advisory        7 Validation Matrix
    14 concurrency-conj-guard     8 Notebook Navlink Check      7 Translation Drift Check
    14 Source-Output Ratchet      7 solution-leak-guard         7 Notebook Papermill Ratchet
    11 prose-counts-guard                                       7 Notebook Exec Sequence Ratchet
    

    Le top 20 ne fait que ~200 des 300 : le reste est une traîne d'unités. Aucun workflow ne dépasse 8 % de la file. Sortir les deux plus gros ne rendrait que ~13 %.

    Ce que la mesure change pour le remède

    Le vrai multiplicateur n'est pas un workflow, c'est le nombre de workflows par PR : le rollup de #13606 porte 46 checks. À ~30 PR ouvertes qui se re-déclenchent (push, update-branch, edited), 46 × 30 explique les centaines observées sans qu'aucun workflow ne soit individuellement coupable.

    Donc « sortir les 16 advisory lourds » vise juste — mais le critère de sélection devrait être le coût × la fréquence de re-déclenchement, pas le seul temps d'exécution. Trois candidats que la mesure désigne et que le titre ne nommait pas :

    • Quarto Pages Deploy (10 en file) — un déploiement sur pull_request. À vérifier : est-il seulement utile hors push ?
    • Stale Base Branch Warning (15) — advisory pur, dont le verdict ne change pas entre deux pushes de la même journée. Candidat schedule évident.
    • Secret Scan (16) — celui-là est un gate de sécurité : ne pas le sortir, le nommer ici pour qu'il soit explicitement exclu de la coupe.

    Effet de bord à ne pas reproduire

    J'ai exécuté 8 update-branch ce cycle pour débloquer des PR gate en CANCELLED — remède correct pour cette classe, mais chacun ré-arme ~46 runs. Le remède alimente le goulot qu'il tente de traverser. Un cap update-branch par vague est à considérer en même temps que la coupe des advisory.

    See #12817.

  12. added 2 commits that reference this issue on Sep 2, 2026
  13. 1 remaining item

  14. added a commit that references this issue on Sep 4, 2026
  15. added a commit that references this issue on Sep 4, 2026
  16. added
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 4, 2026
  17. removed
    candidate-deliveredReferenced by a merged PR with no post-merge activity -- candidate for close triage (#10466)
    on Sep 8, 2026
  18. jsboige commented on Sep 8, 2026

    @jsboige
    Owner

    Vérification d'acceptance #12817 — retrait label candidate-delivered

    Issue #12817 — CI saturée (2064 en file, 3h42 d'attente) : sortir les 16 advisory lourds de pull_request, étiquetée candidate-delivered suite à PR merged référençante.

    L'acceptance originelle de l'issue portait sur 3 critères vérifiables :

    1. Les 16 fichiers ne portent plus pull_request: dans leur on:, et portent schedule: + workflow_dispatch:.
    2. Contrôle positif obligatoire : citer la sortie d'un workflow_dispatch manuel sur au moins un des 16.
    3. Recompte : grep -l pull_request .github/workflows/*.yml | wc -l rend 86, pas 102.

    Vérification firsthand (c.309, 2026-09-08T02)

    • PR ci: sortir les 16 advisory lourds de pull_request, basculer en schedule nocturne (#12817 tranche 1/2) #12821 — tranche 1/2, MERGED 2026-08-24T21:24:30Z : titre ci: sortir les 16 advisory lourds de pull_request, basculer en schedule nocturne (#12817 tranche 1/2), diff +112/-156 sur 16 fichiers (= les 16 ciblés par l'acceptance 1). Vérification substance par po-2027 le 2026-09-03 comment #5521872966 : les 16 fichiers de main ne portent plus pull_request: dans on: ; les grep restants matchent les commentaires et les chemins PR rebranchables (cf structure duale PR/nocturne).
    • PR fix(guards,#12817): advisory nocturnes — 9 organes éteints ranimés (tranche 2) #13013 — tranche 2/2, MERGED 2026-08-28T01:52:06Z : titre fix(guards,#12817): advisory nocturnes — 9 organes éteints ranimés (tranche 2), diff +298/-76 sur 9 fichiers. Acceptance 2 (contrôle positif) atterrie : workflow_dispatch manuel sur cjk-residue-advisory (run 32900931277, success, fenêtre b6d55f73d..d5922dcab mesurée, scan exécuté) + dotnet-nuget-block-advisory (run 32900934132, success, 27 commits rejoués en replay par-commit, fenêtre vérifiée). Avant le fix, ces deux jobs rendaient skipped à chaque passage nocturne (fork guard mort sous schedule) ; ils rendent désormais un verdict window-scan daté.
    • Acceptance 3 (recompte) : forme trigger ancrée grep -lE '^\s+pull_request:' | wc -l rend 81 sur origin/main (mieux que 86). Forme non-ancrée rend 102 parce que les occurrences restantes sont les commentaires tranche 1 et les chemins PR rebranchables (github.event.pull_request.* || '') — la substance demandée (« aucun des 16 ne se déclenche sur pull_request ») tient.

    Verdict

    Acceptance 1 (16 fichiers sans pull_request:) — LIVRÉE (PR #12821 + vérif po-2027).
    Acceptance 2 (contrôle positif) — LIVRÉE (PR #13013, deux workflow_dispatch mesurés).
    Acceptance 3 (recompte) — LIVRÉE (81 ≤ 86, substance vérifiée).

    L'acceptance substantielle de #12817 est close en 100 % par les deux tranches mergées. Le ticket reste pertinent pour des ajouts post-livraison identifiés par la mesure ai-01 du 2026-08-31 :

    Ces deux items ne font pas partie de l'acceptance originelle de #12817 (qui nommait explicitement 16 fichiers et bornait le scope aux « advisory + fetch-depth: 0 »). Le label candidate-delivered les masque par co-occurrence ; je le retire pour rétablir l'épistémique.

    Geste

    gh issue edit 12817 --remove-label candidate-delivered — label usurpé, substance livrée en 100 % par #12821 + #13013 (cf ci-dessus). Ticket laissé OPEN car les ajouts post-livraison (#11843, #14391) sont des sous-grains dispatchables et non de la dette de cette issue.

    Genre : guard (META) — note explicite du corps original de #12817 : « ce grain ne tient pas le plancher G-VAR-1 de la lane. La lane doit livrer en plus un grain de CONTENU dans son cycle. » Le retrait de label est un geste de fond (R7, livré-urn), pas un plat principal. La sécheresse du pool CONTENU DEEP/MED persiste pour la 6ᵉ cycle consécutive sur cette lane — documentée séparément (cf [[topic-c304-delivered-urn-triage]]).

    🤖 Generated with Claude Code

  19. added 2 commits that reference this issue on Sep 9, 2026
  20. added a commit that references this issue on Sep 13, 2026
  21. added a commit that references this issue on Sep 13, 2026
  22. added a commit that references this issue on Sep 16, 2026
  23. myia-ai-01 commented on Sep 18, 2026

    @myia-ai-01
    CollaboratorAuthor

    Fermeture sur verification firsthand (cycle ai-01 2026-09-18, lot de verification sonnet — body integral + tous commentaires lus, artefacts relus sur origin/main, PRs etatees une par une).

    PR #12821 (MERGED 2026-08-24) + #13013 (MERGED 2026-08-28, controle positif workflow_dispatch runs 32900931277 / 32900934132). Firsthand sur origin/main : 14/16 workflows advisory en schedule + workflow_dispatch sans pull_request, verifies un a un.

    Les deux re-couplages pull_request restants (pedagogy-density, slides-build) sont des decisions posterieures path-scoped documentees (#13815, #15835) — pas un residu de cette issue. La PR ouverte #16209 vise #16207, pas cette acceptance.

    Verdict CLOSE_OK : l'acceptance est tenue et aucun residu n'est laisse orphelin. Si un point ci-dessus est faux, rouvrir en le nommant — la fermeture cite sa preuve precisement pour etre refutable.

  24. added a commit that references this issue on Sep 20, 2026
  25. added 2 commits that reference this issue on Oct 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions