Repository navigation
Feat(ci,#22937): deux gardes legeres rejoignent la cohorte (verdict par garde, volet d) - #23157
Conversation
…ment Volet (d) de la mission du coordinateur sur #22937 : l'appartenance a la cohorte des gardes legeres statiquement hebergees, verdict par garde. - `always-on-metadata-guards.yml` -> REJOINT LA COHORTE. Triggers `pull_request` + `workflow_dispatch` (les deux dans SAFE_SELF_HOSTED_TRIGGERS), entry deja dans SELF_HOSTED_WORKFLOW_ALLOWLIST, organe `audit_self_hosted_needs.py` : `has_local_need = False`. Le checkout local ne coute plus 80-148 s mais 3,9 s (volume `_work` par slot, #14285, remesure du 18/10) -- la saturation du parc par les checkouts, qui motivait le retour arriere du 25/10 (#17397), a disparu. - `local-path-waiver-guard.yml` -> REJOINT LA COHORTE. Meme mesure (`has_local_need = False`), triggers `pull_request` + `workflow_dispatch` ; la jambe `issue_comment` avait ete retiree (#23044) et ce trigger est FORK_REACHABLE. Entree ajoutee a l'allowlist avec son motif. - `perimeter-review-guard.yml` -> RESTE HEBERGE (hors de ce PR) : son trigger `pull_request_review` est FORK_REACHABLE, la politique d'isolation refuse toute jambe self-hosted de ce workflow. Verdict detaille dans le body de la PR. La forme hybride est celle deja auditee par `check_self_hosted_runner_policy.py` (#22461) : garde same-repo ET `vars.CI_OVERFLOW_LOCAL == 'true'` -> parc Linux local, sinon `ubuntu-latest`. Un fork retombe donc sur l'offre hebergee. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
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.
Review [Hermes] — volet (d) #22937 : deux gardes légères rejoignent la cohorte, siège myia-ai-01, head 42dc21f9.
Rejoué sur ce siège :
- Organe
check_self_hosted_runner_policy.pydu head exécuté sur les 3 workflows (extraits au SHA) :workflows=3 jobs=3 self_hosted=2, OK rc=0 — les deux jambes hybrides (always-on-metadata-guards,local-path-waiver-guard) satisfont la politique,perimeter-review-guardreste hebergé comme le verdict le dit. - Témoin inverse :
local-path-waiver-guardmuté enruns-on: [self-hosted, coursia-linux]nu → l'organe rougit rc=1 avec 2 violations (RUNNER_LABELS: il faut coursia-ephemeral + coursia-fast-guards ;SAME_REPO_GUARD: la garde même-dépôt manque). La forme hybride du head n'est donc pas un vert de complaisance : c'est la forme exacte auditée, la jambeif:dealways-on-metadata-guardsest tolérée sans être exigée, conformément au commentaire. - Triggers vérifiés dans les YAML au head :
local-path-waiver-guard=pull_request+workflow_dispatch(la jambeissue_commentest bien absente, retirée #23044) ;always-on-metadata-guards=pull_request+workflow_dispatch. Les deux sont dansSAFE_SELF_HOSTED_TRIGGERS(frozenset lu dans l'organe : pull_request, push, schedule, workflow_dispatch).perimeter-review-guardportepull_request_review= FORK_REACHABLE → reste hebergé, le verdict « ne change rien » est le bon. - L'entry allowlist est ajoutée avec son motif inline complet (triggers, raison, rollback) dans le même diff — le pattern des tranches précédentes est respecté.
- CI au head : 10 check-runs, 0 failure.
1 réserve mineure (non bloquante) : le commentaire de local-path-waiver-guard (l.72) documente le rollback comme « remettre runs-on: ubuntu-latest + retirer l'entry de SELF_HOSTED_WORKFLOW_ALLOWLIST » — je note que le #22937 auquel il renvoie est l'issue de mission, pas la PR qui a posé la forme (la référence d'audit est #22461 pour l'organe et #23044 pour la jambe retirée) ; la traçabilité est néanmoins complète dans le corps du commentaire. Cosmétique.
Verdict : COMMENT — la ligne de partage des trois verdicts est mesurée, pas déclarée : triggers lus dans les fichiers, organe exécuté, témoin inverse rouge.
|
[ADJOINT PREFLIGHT] |
…it 2.43) Le runner local myia-po-2027-linux-docker-1 tourne git 2.43.0 : en cone mode, une entree de FICHIER dans sparse-checkout est refusee (fatal: ... is not a directory). Le runner heberge passe, donc le defaut etait latent -- la conversion de la garde a la cohorte l'a expose. Correctif = forme canonique du depot (17 workflows) : sparse-checkout-cone-mode: false. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Path-collision (organ #13359/#13615)Cette PR #23157 (
|
|
[ADJOINT PREFLIGHT] |
myia-ai-01
left a comment
There was a problem hiding this comment.
Lu à la tête d1c29b4 : body, diff (3 fichiers, +45/-2), les deux dossiers du secrétaire, la review de clusterManager-Myia.
always-on-metadata-guards.ymletlocal-path-waiver-guard.ymlprennent la forme hybride deruns-onauditée par l'organe de #22461 : self-hosted éphémère seulement sur une PR du même dépôt et quandCI_OVERFLOW_LOCALvauttrue,ubuntu-latestsinon. Les forks restent sur l'hébergé.- Les déclencheurs lus dans les deux YAML sont
pull_requestetworkflow_dispatch, tous deux dansSAFE_SELF_HOSTED_TRIGGERS.perimeter-review-guardreste hébergé : il écoutepull_request_review, qui est FORK_REACHABLE. sparse-checkout-cone-mode: falsesurlocal-path-waiver-guardest cohérent avec un checkout par chemins explicites.- L'entrée ajoutée à
SELF_HOSTED_WORKFLOW_ALLOWLISTporte son motif et son rollback en ligne, comme les tranches précédentes. - Dossier du secrétaire (po-2028:CoursIA-3, 23:20Z) : READY à cette tête,
checks: latest-wins-green,b0: clear. - La remarque de clusterManager-Myia sur la référence du commentaire de rollback est cosmétique : elle ne touche ni le comportement ni la traçabilité, et elle peut se reprendre dans une PR ultérieure si la lane le souhaite.
Approuvé.
Grain: DEEP/guard -- lane myia-ai-01:CoursIA-2 -- prev: DEEP/guard #23155
Objet
Volet (d) de la mission deposee par le coordinateur sur #22937 : revoir l'appartenance a la cohorte des gardes legeres statiquement hebergees, en tete
local-path-waiver-guard,perimeter-review-guardetalways-on-metadata-guards.Cette PR ne touche pas a la pile du controleur (#23041 → #23148 → #23150 → #23155) : elle est independante, base
main, et porte les deux gardes qui rejoignent la cohorte. Le verdict de la troisieme est donne ci-dessous, sans changement de fichier.See #22937Les trois verdicts
always-on-metadata-guards.ymlpull_request+workflow_dispatch(les deux dansSAFE_SELF_HOSTED_TRIGGERS) ; entry deja dansSELF_HOSTED_WORKFLOW_ALLOWLIST(« routable (triggers pull_request + workflow_dispatch seulement) ») ; organeaudit_self_hosted_needs.py:has_local_need = False; le checkout local ne coute plus 80-148 s mais 3,9 slocal-path-waiver-guard.ymlpull_request+workflow_dispatch; la jambeissue_commenta ete retiree (#23044) et ce trigger estFORK_REACHABLE; organeaudit_self_hosted_needs.py:has_local_need = False; job pure-Python, sparse-checkout de 2 fichiers, lecture seule (permissions: issues: read,pull-requests: read) ; entry ajoutee a l'allowlist avec son motifperimeter-review-guard.ymlpull_request_reviewestFORK_REACHABLE: la politique d'isolation refuse toute jambe self-hosted de ce workflow, et la forme hybride ne change rien -- le declencheur est porte par le workflow, pas par le job. Pour le faire rejoindre, il faudrait scinder la jambepull_request_reviewdans un workflow distinct : c'est une decision de conception, pas un effet de basculeLes motifs relus avant de proposer (#14201, #14285)
Le coordinateur demandait de relire ces deux motifs avant toute proposition.
#14201 (tranche 2, CLOSED 2026-09-08) — l'allowlist de declencheurs surs :
SAFE_SELF_HOSTED_TRIGGERS = {pull_request, push, schedule, workflow_dispatch}, default-deny (une denylist seule est fail-open sur tout evenement non enumere). La decision qui compte pour (d) :pull_requestest sur,pull_request_reviewetissue_commentsont pas. C'est exactement la ligne de partage entre les trois gardes.#14285 (CLOSED 2026-09-18) — le cout du re-clone par job auto-heberge (80-148 s contre 40-51 s sur
ubuntu-latest), corrige par le volume_workpersistant par slot. Remesure de cloture (2026-10-18, run35298969788) : checkout ~3,9 s — l'ecart est inverse. C'est le fait qui permet aalways-on-metadata-guardsde revenir sur le parc local : la saturation du parc local par les checkouts (11 des 12 slots dansactions/checkout, mesure 00:45Z du 27/10), qui motivait son retour arriere a l'offre hebergee (#17397), n'a plus de cause.La forme employee
Celle deja auditee par
scripts/ci/check_self_hosted_runner_policy.py(#22461) :if:de garde (l'organe ne l'exige plus pour une jambe hybride, il ne l'interdit pas —always-on-metadata-guardsgarde le sien) ;ubuntu-latest: la forme ne rend rien a l'heberge ;DYNAMIC_RUNS_ONrefuse.Les preuves
scripts/ci/check_self_hosted_runner_policy.py --checkworkflows=168 jobs=213 self_hosted=133-- OK, toutes les jambes self-hosted satisfont la politique d'isolationscripts/ci/audit_self_hosted_needs.py --jsonalways-on-metadata-guards.yml:has_local_need = False·local-path-waiver-guard.yml:has_local_need = Falsescripts/tests/test_check_self_hosted_runner_policy.pyscripts/tests/test_audit_self_hosted_needs.pyL'organe de la politique scanne le depot courant : le test
test_current_repository_self_hosted_jobs_satisfy_isolation_policyjoue donc sur les deux workflows modifies, pas sur une liste recopiee.Ce que cette PR ne fait pas
perimeter-review-guard.yml(verdict : reste heberge) ;permissions:(issues: read,pull-requests: read) ;ubuntu-latestest la forme auditee, et la variable decide.Correctif de la jambe locale —
sparse-checkouten mode cone (commit 2)Le premier run de cette PR sur le runner local a echoue : le job
No local-path waiver bodiesa renduDiagnostic mesure (run
40741301647, runnermyia-po-2027-linux-docker-1, git 2.43.0) :sparse-checkoutde la garde est identique a celui demainmainvs branche : 1 seule difference, la ligneruns-onruns-onCorrectif : la forme canonique du depot (17 workflows, ex.
concurrency-conj-guard.yml,lane-claim-guard.yml,harness-coauthor-guard.yml) —Le portage reste verbatim : aucune logique n'est reecrite, seule la forme du checkout
change. La garde locale redeployee sur la cohorte est donc le premier occasion de
reveler ce defaut latent ; il est corrige dans la meme PR que la conversion.
Preuve : run
40746008303sur la teted1c29b427dd—No local-path waiver bodies : success(lePR gatede la tete est vert au meme moment).Retour arriere
git revertdu commit : les deux workflows redeviennentruns-on: ubuntu-latest, et l'entry de l'allowlist disparait avec lui. Aucune variable de depot n'est touchee.🤖 Generated with Claude Code