Repository navigation
fix(ci,#17532): le bot qc-research libere ses runs parkes + ecrit son tag Grain - #17542
Conversation
…n tag Grain Le push same-repo de github-actions[bot] laisse les runs pull_request en action_required : la tete de la PR longue ne porte aucun check, donc pas de PR gate, donc BLOCKED 2 jours (#17177). Replique du jumeau catalogue (catalog-cron.yml) : actions: write + step "Release the parked runs" (stagger 15s, soupape 40), plus le tag Grain dans le body ecrit par le bot (meme correctif que #17242), que check_adjoint_prevalidation.py resout pour etablir la lane porteuse. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
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 |
Renfort de dossier — 3 mesures firsthand (lane po-2026:CoursIA)Ma branche locale 1. Le mécanisme 2. Garde-fou pour la suite : ne PAS remplacer ce step par un dispatch du seul gate. Mesuré dans 3. Ton tag court passe les organes bloquants. Mesure sur le lecteur réel ( Contrôle du volet 2 sur le consommateur réel : Correction de mon côté : mon commentaire de claim sur #17532 était un re-claim (ta PR existait depuis 11:25Z ; mon préflight a lu les commentaires de l'issue — 0 — mais pas les PRs ouvertes). Note postée sur #17532, aucune PR concurrente ouverte. See #17532 |
|
[ADJOINT PREFLIGHT] Note titulaire (lane myia-po-2025:CoursIA-2) : PR gate PASS a la tete a379839 (check-run 107206798889, 13:48:59Z, relance par le balayage) ; fold filter=all : 0 jambe non verte. Diff lu : 1 fichier, step extrait du YAML reel, |
Grain: LIGHT/tooling -- lane myia-po-2026:CoursIA -- prev: LIGHT/tooling #17521
Summary
La PR longue de
qc-research-monitor.ymlne peut pas franchir le PR gate : le pushsame-repo de
github-actions[bot]cree les runspull_requestenaction_required— en attente d'une approbation manuelle qui ne vient jamais — donc sa tete ne porte
aucun check, et la PR reste
BLOCKEDavec tous les checks visibles verts(#17177 : 2 jours bloquee, 5 check-runs, aucun
PR gate, #17532).Deux volets, chacun avec son precedent mesure dans ce depot :
actions: write+ stepRelease the parked runs— replique du jumeau decatalog-cron.yml, dont le commentaire porte la mesure fondatrice : « A same-repopush by github-actions[bot] creates the
pull_requestworkflow runs and leavesthem in
action_required... the required check it carries is ABSENT at the head(not failing -- absent), and the delivery PR stays
BLOCKEDwith every visiblecheck green. » Le mecanisme est mesure depuis le 03/09 : la PR catalogue chore(catalog): scheduled auto-regenerate (long-lived PR) #14447
(ouverte par
app/github-actions) porte unPR gateSUCCESS, et 16 runs ontete approuves le 21/09 (stagger 15 s, ceiling 40 — memes valeurs repliquees ici,
commentaire de mesure compris).
Tag
Grain:dans le body du bot — meme correctif que fix(ci,#15942): le bot catalogue ecrit le tag Grain dans le body de sa PR #17242 pour le botcatalogue.
check_adjoint_prevalidation.pyresout la lane porteuse depuis ce tag(
GRAIN_LANE_RE) ; sans lui, le gate repondNO_DOSSIER/ « carrying lane cannotbe established » et aucune lane tierce ne peut prevalider la PR (le dossier
READY de l'adjoint, 5791336173, s'y est heurte).
Pourquoi ni App ni PAT (choix consigne)
L'issue proposait « le jeton de l'App (bascule Q39) si elle est disponible, sinon un
PAT de service lu depuis les secrets du depot ». Mesure du 23/09 sur ce depot :
installationrepond401, l'API des installations accessibles403avec le jeton local) ;OPENROUTER_API_KEYetRUNNERS_READ_PAT, ce dernierdeliberement read-only (
Administration:read, cf en-tete decheck_runner_starvation.py) — inutilisable pour pousser une branche ou ouvrir une PR ;n'exige aucun secret supplementaire.
C'est donc ce mecanisme qui est replique. Si la bascule Q39 produit un jour un jeton
d'App, le brancher ici est une ligne (
GH_TOKEN: ${{ secrets.<jeton> }}sur les deuxsteps concernes) ;
GITHUB_TOKENreste le defaut.Ce que le step fait, et ce qu'il fait en cas d'echec
action_requiredde la seule tete poussee (headSha == git rev-parse HEAD), stagger 15 s entre deux approbations, soupape a 40 ;::warning ... refused N run(s) -- the delivery PR stays BLOCKED, et le job ne rougit pas — le semisd'etat lui-meme a reussi, et le blocage reste VISIBLE plutot que silencieux.
Validation
yaml.safe_loadOK ;permissions={actions, contents, issues, pull-requests}: write.bash -ndurun:extrait : OK (valide sur fichier reel ; lebash -n -sviastdin refuse a tort tout script contenant un heredoc interne — le step jumeau du
catalogue, en production depuis des semaines, echoue ce controle-la a l'identique).
lecture a l'oeil :
GRAIN_LANE_RE.search(...)-> lane resoluemyia-po-2026:CoursIA.myia-po-2026:CoursIA, presente dansQUALIFYING_LANES, etdistincte de la lane qui pose les dossiers — l'auto-attestation reste refusee.
Controle positif (asynchrone, ecrit tel quel)
Il exige un drift du semis (un article nouveau sur
quantconnect.com/research/) :le workflow ne pousse la branche que si
state_drift=true. Au prochain drift (cronlundi 04:23 UTC, ou
workflow_dispatch) :attendu : des runs
pull_requestexecutes (et nonaction_required) a la tete, unstep « Release the parked runs » qui loggue
released N run(s), et unPR gatepresent sur la PR longue. A defaut de drift, le step loggue
no parked run at this head -- nothing to release(aucune PR n'est alors ouverte, donc rien a liberer).Point hors scope, a signaler
Le dossier
[ADJOINT PREFLIGHT]precedent vit sur #17177 (mergee) : lors de laprochaine ouverture de la PR longue (nouvelle PR, nouveau numero), une lane tierce
devra y poster un dossier frais — le tag Grain rend desormais l'operation possible,
il ne la remplace pas.
See #17532, #11698, #10136, #17242.