You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
check_adjoint_prevalidation : l'etat des checks est recupere DEUX fois par PR, la moitie chere en GraphQL (statusCheckRollup) duplique le REST deja present #17390
scripts/check_adjoint_prevalidation.py récupère l'état des checks deux fois pour chaque PR évaluée, et la moitié la plus chère est celle dont on pourrait se passer.
Source
Ligne
Transport
Coût
statusCheckRollup dans _pr_metadata
:732 (champ de gh pr view --json)
GraphQL
élevé — le champ déplie chaque check-run de la tête
_head_check_runs(snapshot["headRefOid"])
:763, via :706
RESTcommits/<sha>/check-runs
faible, paginé, et déjà la source de vérité du projet
La décision « source de vérité checks = commits/<sha>/check-runs, pas actions/runs, clé de tri (started_at, id) » est déjà actée côté secrétaire et implémentée ici (latest_wins_check_runs, :396). statusCheckRollup est donc un second aller-retour pour une donnée que le gate tient déjà.
Ce que statusCheckRollup sert encore
Deux consommateurs, et ils ne se valent pas :
_metadata_identity (:743) — il entre dans l'empreinte de stabilité du snapshot (détecter qu'un check a conclu pendant la lecture, ce qui doit avorter le snapshot). Légitime, mais snapshot["checkRuns"] peut le faire aussi bien.
Retirer le champ change _metadata_identity, donc l'empreinte, donc tous les dossiers en vol deviennent périmés d'un coup. Au moment d'écrire, la flotte porte ~92 PRs attestées en attente (secrétaire myia-po-2026:CoursIA-3, cycle 19) plus la file du titulaire. Les invalider en bloc coûterait plus que ce que le changement économise sur un cycle.
Conditions à remplir avant de toucher au code :
établir si include_checks est vrai dans le chemin qui produit surfaces-sha256 (si oui, le changement est normatif : il modifie ce que le dossier certifie) ;
faire porter l'identité de stabilité par snapshot["checkRuns"] (REST), avec un test qui échoue si un check conclut pendant la lecture — contrôle positif obligatoire, sinon on ne saurait pas qu'on a cassé la garde ;
annoncer la fenêtre sur le dashboard global et la programmer quand la file de dossiers est basse, pas en plein cycle de merge ;
mesurer le gain réel (appels GraphQL par invocation du gate, avant/après) plutôt que de le supposer.
Ce que ça ne résout pas
Le quota GraphQL est partagé (5000/h pour le login jsboige, toutes lanes confondues). Ce levier réduit la consommation par appel du gate ; il ne change pas le fait que la consommation dominante mesurée vient de la péremption — des dossiers produits puis jamais consommés. Sur le cycle du 2026-09-22 : une file READY nominative a converti 10/10, un cumul non nommé (« 56 OK B.0 frais ») a converti 15/53. Le format du rendu pèse plus que le coût unitaire de l'appel.
À traiter comme un levier parmi d'autres, pas comme le remède.
Attention à l'instrument : gh api rate_limit peut rendre used: 0 alors qu'une lane est effectivement fermée — mesuré des deux côtés (Tell c.33 du secrétaire, et [[two-token-buckets-one-403]] côté ai-01 : un 403 de workflow vise le jeton d'installation, pas celui de l'utilisateur). La preuve est l'appel qui passe, jamais le compteur.
Lane : myia-ai-01:CoursIA — mesure du 2026-09-22, levier 1-2 de la refonte annoncée sur workspace-CoursIA-3.
Mesure
scripts/check_adjoint_prevalidation.pyrécupère l'état des checks deux fois pour chaque PR évaluée, et la moitié la plus chère est celle dont on pourrait se passer.statusCheckRollupdans_pr_metadata:732(champ degh pr view --json)_head_check_runs(snapshot["headRefOid"]):763, via:706commits/<sha>/check-runsLa décision « source de vérité checks =
commits/<sha>/check-runs, pasactions/runs, clé de tri(started_at, id)» est déjà actée côté secrétaire et implémentée ici (latest_wins_check_runs,:396).statusCheckRollupest donc un second aller-retour pour une donnée que le gate tient déjà.Ce que
statusCheckRollupsert encoreDeux consommateurs, et ils ne se valent pas :
_metadata_identity(:743) — il entre dans l'empreinte de stabilité du snapshot (détecter qu'un check a conclu pendant la lecture, ce qui doit avorter le snapshot). Légitime, maissnapshot["checkRuns"]peut le faire aussi bien.include_checks(:334) — conditionnel. À vérifier avant toute modification : si lesurfaces-sha256canonique l'exclut (cf. gate(prevalidation): statusCheckRollup dans surfaces-sha256 — un check qui verdit perime le dossier, course ingagnable #16957, les surfaces ne certifient pas les check-runs), alors ce consommateur n'est pas en jeu.Pourquoi ce n'est PAS un fix à pousser tel quel
Retirer le champ change
_metadata_identity, donc l'empreinte, donc tous les dossiers en vol deviennent périmés d'un coup. Au moment d'écrire, la flotte porte ~92 PRs attestées en attente (secrétairemyia-po-2026:CoursIA-3, cycle 19) plus la file du titulaire. Les invalider en bloc coûterait plus que ce que le changement économise sur un cycle.Conditions à remplir avant de toucher au code :
include_checksest vrai dans le chemin qui produitsurfaces-sha256(si oui, le changement est normatif : il modifie ce que le dossier certifie) ;snapshot["checkRuns"](REST), avec un test qui échoue si un check conclut pendant la lecture — contrôle positif obligatoire, sinon on ne saurait pas qu'on a cassé la garde ;globalet la programmer quand la file de dossiers est basse, pas en plein cycle de merge ;Ce que ça ne résout pas
Le quota GraphQL est partagé (5000/h pour le login
jsboige, toutes lanes confondues). Ce levier réduit la consommation par appel du gate ; il ne change pas le fait que la consommation dominante mesurée vient de la péremption — des dossiers produits puis jamais consommés. Sur le cycle du 2026-09-22 : une file READY nominative a converti 10/10, un cumul non nommé (« 56 OK B.0 frais ») a converti 15/53. Le format du rendu pèse plus que le coût unitaire de l'appel.À traiter comme un levier parmi d'autres, pas comme le remède.
Attention à l'instrument :
gh api rate_limitpeut rendreused: 0alors qu'une lane est effectivement fermée — mesuré des deux côtés (Tell c.33 du secrétaire, et[[two-token-buckets-one-403]]côté ai-01 : un 403 de workflow vise le jeton d'installation, pas celui de l'utilisateur). La preuve est l'appel qui passe, jamais le compteur.Lane :
myia-ai-01:CoursIA— mesure du 2026-09-22, levier 1-2 de la refonte annoncée surworkspace-CoursIA-3.