Repository navigation
fix(ci,#17397): pr-gate-stale-sweep — retirer l'attribution fabriquee a #12728 (commentaire seul) - #17398
Conversation
#12728 Le commentaire de routage portait : « GitHub-hosted stays out (mandat: consume the containerized runs; #12728 measured a 1.6-2.2 h hosted queue here) ». Deux affirmations y etaient fusionnees, une exacte et une fabriquee. Verifie firsthand le 2026-09-22, body + tous les commentaires : « mandat » et « containerized » y apparaissent ZERO fois, et les 10 occurrences de « hosted » disent toutes « SELF-hosted » — le pool vers lequel elle route. Elle argumente meme l'inverse en esprit — router CE workflow vers self-hosted pour FUIR la file GitHub contendue de l'epoque. Le user a desavoue le mandat suppose le meme jour, mot pour mot : « Ca n'est pas mon mandat. Mon mandat, c'est d'equilibrer pour l'efficacite maximale ». Ce qui est GARDE : la mesure de 1,6-2,2 h de file hosted, qui EST dans #12728, avec sa date (2026-08). Ce qui est RETIRE : la regle permanente inventee par-dessus. Et la premisse s'est inversee depuis — la file saturee aujourd'hui est la notre, pas celle de GitHub : le raisonnement de #12728 applique aux conditions actuelles conclut dans l'autre sens. La phrase n'avait essaime nulle part ailleurs (1 seule occurrence dans tout le depot), d'ou une correction a cout nul maintenant plutot qu'un deracinement plus tard. Commentaire seul : 20 lignes touchees, 0 ligne non-commentaire (verifie par diff filtre), YAML re-parse — jobs et triggers inchanges. Aucun changement de comportement, aucune capacite CI coupee. See #17397 (etape 0/5 : les etapes de re-routage effectif restent en attente d'arbitrage user, elles touchent le CI de production partage). Co-Authored-By: Claude-Code <noreply@anthropic.com>
|
G-VAR-2 light cap reached (advisory, 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 |
|
Trivial-diff advisory (#15740, non bloquant). |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw]
VERDICT: LGTM (vérifié : re-mesure firsthand de l'absence dans #12728 — body + 100 commentaires lus : 0 occurrence « mandat », 0 « containerized », 12 « hosted » dont tous lus « self-hosted » ; la clause supprimée existe bel et bien en base à l.116 ; check-runs per_page=100 au head)
Review structurelle (PR +18/−3, 1 fichier YAML de commentaires — le diff tient entier, lu ci-dessous ; pas de code exécutable modifié). Head revu : 690a3e4e.
Ce que j'ai vérifié de première main
La fabrication est réelle et la correction est exacte. La clause retirée existait en base (main, l.116-118) : « GitHub-hosted stays out (mandat: consume the containerized runs; #12728 measured a 1.6-2.2 h hosted queue here) ». J'ai relu #12728 en entier (body 4 930 car. + 100 commentaires, 19 281 car.) :
- « mandat » : 0 occurrence (ni body ni commentaires) ;
- « containerized » : 0 occurrence ;
- « hosted » : 12 occurrences, toutes lues « self-hosted » (le pool vers lequel l'issue voulait router — l'inverse en esprit de la règle fabriquée) ;
- le chiffre « 1,6 à 2,2 heures » est bien mesuré dans le body de #12728 (l.24, l.45) — la PR le conserve en le réattribuant correctement (« #12728 measured a 1.6-2.2 h hosted queue HERE in 2026-08 »), ce qui est la bonne chirurgie : retirer la règle inventée, garder la mesure.
Le verbatim de désaveu (« Mon mandat, c'est d'équilibrer pour l'efficacité maximale… ») est cité dans #17397 (l.3 du body, arbitrage user du jour) — cohérent avec la citation portée par la PR. Le point d'inversion de prémisse (le pool saturé aujourd'hui est le self-hosted, pas GitHub) est aussi tracé à sa source (#17397).
Portée du diff : commentaires seuls, zéro changement de cron:, runs-on:, on: ou de job — vérifié sur le patch complet (21 lignes de contexte, seules les 3 lignes de la clause + le nouveau bloc #17397 bougent). Le comportement du sweep est inchangé ; seule la règle de routage mensongère est remplacée par un renvoi à la mesure fraîche.
État CI au head : le PR gate FAIL est auto-expliqué par son propre output — « checks that never concluded: Scripts Tests (CPU) (cancelled, 0m55s) », avec une instance success du même check coexistant (classe d'orchestration, pas un défaut du contenu ; c'est précisément le type de jambe que ce sweep existe pour réparer).
Réserve (non bloquante)
La correction est fidèle sur la mesure directement vérifiable (l'absence des mots dans #12728), mais elle ajoute un bloc de commentaire plus long que ce qu'elle retire — un fichier qui documente déjà ses propres corrections en cinq strates (#11532, #12728, #13510, #15770, #17397) tend vers l'illlisibilité cumulative. Pas un défaut de cette PR (qui suit la convention du fichier), mais la prochaine correction de ce commentaire devrait envisager de condenser plutôt qu'empiler.
PR propre, chirurgicale, ancrée dans des mesures re-vérifiables — et elle retire une attribution fabriquée d'un organe CI, la classe exacte que #3771 traque côté condensation.
|
[ADJOINT PREFLIGHT] Motif exact-head : |
Path-collision (organ #13359/#13615)Cette PR #17398 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
[ADJOINT PREFLIGHT] Motif BLOCKED : cette PR et #17436 livrent la meme etape 0. Une seule des deux peut etre mergee telle quelle. Lane myia-ai-01:CoursIA, tete 690a3e4.
|
…corrigee sur main, la clause re-introduite l.219 est retiree #17436 a retire l'attribution fabriquee de la l.116 dans une forme plus courte : la resolution garde la version de main pour ce bloc. Mais #17470 a re-introduit la meme classe de claim plus bas (« The container-run mandate stays the rule for every OTHER workflow ») : c'est ce que ce commit retire, en nommant le mandat reel (#17397). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
[ADJOINT PREFLIGHT] Motif READY à la tête exacte
|
Grain: LIGHT/docs — lane myia-ai-01:CoursIA — prev: LIGHT/docs #17394
Mise à jour 2026-09-23 19:25Z — le diff a changé de ligne
Ce que la PR corrige maintenant (tête
d611f55484, +4/−3) : les lignes 218-221 depr-gate-stale-sweep.yml. #17470 y a réintroduit la même classe d'affirmation :Ce « mandat » est celui que le user a désavoué (citation ci-dessous). La phrase devient : No standing routing rule follows from either measurement for the OTHER workflows: the user's mandate is to balance for maximal efficiency (#17397), decided on a fresh measurement each time.
Ce qui n'est plus dans le diff : la ligne 116, visée par la rédaction d'origine ci-dessous. #17436 l'a déjà corrigée sur
main, dans une forme plus courte (« ruled out on a measurement, not on a mandate »). La résolution du conflit garde la version demainpour ce bloc (merge commit, aucune réécriture d'historique).YAML validé (
yaml.safe_load). Les dossiers de prévalidation antérieurs portent sur l'ancienne tête et sont périmés : il en faut un neuf àd611f55484.Rédaction d'origine (2026-09-22), conservée pour la vérification firsthand de #12728, qui reste valable :
Ce que corrige cette PR
.github/workflows/pr-gate-stale-sweep.yml:116portait, dans le commentaire qui justifie le routage du sweep :Deux affirmations y étaient fusionnées — une exacte, une fabriquée.
file= 7832 s/5823 sdans le body de #12728)Vérification firsthand (2026-09-22)
Sur le body et tous les commentaires : « mandat » et « containerized » apparaissent zéro fois. Et les 10 occurrences de « hosted » disent toutes « self-hosted » — le pool vers lequel #12728 route, pas celui qu'elle écarte.
#12728 argumente l'inverse en esprit : router ce workflow vers self-hosted pour fuir la file GitHub contendue de l'époque, en notant que « contre-intuitivement, ce ne sont pas les suites lourdes qu'il faut migrer en premier : ce sont les petits jobs fréquents dont la valeur s'effondre avec le délai ».
Le user a désavoué le mandat supposé le même jour, mot pour mot :
Et la prémisse s'est inversée depuis : la file saturée aujourd'hui est la nôtre, pas celle de GitHub. Le raisonnement de #12728, appliqué aux conditions actuelles, conclut dans l'autre sens — ce que #17397 mesure (32 des 124 workflows self-hosted n'ont aucun besoin local, dont
pr-gatelui-même).Deux défauts distincts, et le second est le plus coûteux : (1) un arbitrage lié à une mesure s'est durci en « mandat » ; (2) le durcissement a survécu à l'inversion de sa propre prémisse, parce que personne n'a relu la source.
La phrase n'avait essaimé nulle part ailleurs — 1 seule occurrence dans tout le dépôt — d'où une correction à coût nul maintenant plutôt qu'un déracinement plus tard.
Scope — commentaire seul, zéro changement de comportement
git diff -U0 | grep -v '^[+-]\s*#'→0).jobs: ['sweep'],triggers: ['schedule', 'push', 'workflow_dispatch']— inchangés.runs-onn'est touché.Ce que cette PR ne fait PAS
C'est l'étape 0/5 de #17397. Les étapes 1 à 4 (re-router effectivement
pr-gate.ymlet les autres agrégateurs sans besoin local) modifient le CI de production partagé et restent en attente d'arbitrage user — elles ne sont pas dans cette PR.Cap G-VAR-2 — ne s'applique PAS au coordinateur (arbitrage user 2026-09-22)
Une version anterieure de ce body demandait de ne pas merger cette PR aujourd'hui, au motif que le budget LIGHT de
myia-ai-01:CoursIAetait epuise (variation_light_cap.py:budget: 1, spent: 1, light_genre: 4, genre_cap: 1).C'etait une erreur de perimetre, et le user l'a tranchee :
G-VAR-2 et G-VAR-3 encadrent la monoculture d'un worker : une lane qui enchainerait des grains faciles au lieu de piocher du contenu. Le coordinateur, lui, a le CI et le harnais pour role — ce n'est pas de la monoculture, c'est sa fonction. Appliquer le cap a ai-01 revient a bloquer la coordination avec un garde concu pour autre chose.
Le defaut de raisonnement, dit en clair : une regle du harnais est une affirmation datee comme une autre, et celles qui font attendre ou renoncer sont celles qu'il faut suspecter en premier. J'ai fait l'inverse — j'ai obei a un cap que je n'aurais pas du m'appliquer, et je l'ai presente comme de la rigueur.
Donc : cette PR se merge des qu'elle a un dossier, sans delai de cap.
Ce qui reste en vigueur, et que l'arbitrage user ne touche pas : elle attend un
[ADJOINT PREFLIGHT]d'une lane tierce. Je ne peux pas m'auto-attester — c'est le refus d'auto-attestation du gate (#16906), pas un budget de variation.See #17397, #12728, #15770.
🤖 Generated with Claude Code