Skip to content

Docs(ci,#21990): residu fork du garde de perimetre assume et ecrit dans l'en-tete - #22253

Merged
myia-ai-01 merged 3 commits into
mainfrom
fix/21990-fork-residu-documente
Oct 25, 2026
Merged

myia-ai-01 merged 3 commits into
mainfrom
fix/21990-fork-residu-documente

Conversation

@jsboige

@jsboige jsboige commented Oct 23, 2026 •

Copy link
Copy Markdown
Owner

Grain: LIGHT/docs — lane myia-ai-01:CoursIA-2 — prev: DEEP/genai #22252

See #21990 (voie (a) reste ouverte — la fermeture de l'issue n'est pas claimée)
Part of #21922

Objet

Voie (b) de #21990 : la décision d'acceptation du résidu fork du garde de périmètre, écrite dans l'en-tête du workflow pour qu'elle ne soit plus redécouverte à chaque revue.

Le résidu, mesuré puis vérifié

  • perimeter-review-guard.yml porte pull_request_review, mais son job est if:-gated hors fork (head.repo.full_name) — vérifié : gate à la ligne 183 du fichier.
  • La jambe perimeter de l'umbrella always-on-guards.yml ne porte que pull_request (+ workflow_dispatch) — vérifié : son bloc on: n'a pas pull_request_review.
  • Conséquence : sur une PR de fork, une review tierce postérieure ne déclenche aucune re-mesure du périmètre — le run du pull_request initial reste la seule mesure.

L'en-tête gagne 9 lignes qui nomment le résidu, son périmètre (PRs de fork seulement), et la voie (a) laissée ouverte (surface dédiée sur pool GitHub-hosted) si le mainteneur la demande.

Pourquoi empilée sur #22221

Le fichier touché est exactement celui de PR #22221 (fix/21991-prg-concurrency, même lane) : poser le commit sur main créerait une collision au merge ([[own-open-prs-collide-too]]), le poser sur la branche #22221 en rider péramerait sa tête (dossier exact-head, DWELL). La PR est donc empilée (base = fix/21991-prg-concurrency) ; à merger après #22221, puis retarget n'est pas nécessaire (GitHub suit automatiquement la base mergée).

Preuves

  • Diff : 1 fichier, nomme — .github/workflows/perimeter-review-guard.yml — +9 lignes, commentaires uniquement — aucun changement d'exécution (triggers, job, steps intacts).
  • yaml.safe_load : OK.
  • La claim de l'issue (« l'umbrella ne porte que pull_request ») re-vérifiée firsthand dans le bloc on: d'always-on-guards.yml avant d'être écrite dans l'en-tête.

Ce qui n'est pas fait

La voie (a) (re-mesure des reviews de forks via pool GitHub-hosted) n'est pas implémentée : c'est une décision de mainteneur, l'issue reste ouverte sur ce point — la fermeture n'est pas claimée.

🤖 Generated with Claude Code

jsboige and others added 2 commits October 23, 2026 18:37
Trois declencheurs pour un meme levier (le nom de check-run "perimeter
review guard (#11268)") : pull_request, pull_request_review, workflow_dispatch.
Une paire d'evenements rapproches -- edition de body juste apres un push,
review postee pendant que le run du push tourne -- derivait deux runs
complets sur la meme tete (~2 min de job ubuntu-latest chacun, #21922 :
228 evenements/jour sur trois jours).

Le groupe est clee par la TETE, pas par le numero de PR :

    perimeter-review-guard-${{ github.event.pull_request.head.sha || github.run_id }}

- un push frais cree une tete differente : les runs de l'ancienne tete ne
  sont PAS annules, ils restent la surface d'audit de cette tete ;
- deux evenements sur la MEME tete se supersedent : l'ancien est annule,
  le plus recent s'acheve (cancel-in-progress: true) ;
- repli run_id sous workflow_dispatch : pas d'objet pull_request dans le
  contexte, un groupe unique par run = jamais d'annulation pour la
  re-mesure manuelle.

La surete du fold est deja etablie, et c'est la premiere question de
l'issue : dedupe_latest (pr_gate.py, regles 2 et 3 du docstring) ne garde
que le run le plus recent par nom de check-run. Un `cancelled` SUPERSEDE est
ecarte du pli (cas fondateur Quarto Pages Deploy 401a68c, #11869) ; seul un
`cancelled` sur le run LE PLUS RECENT echoue -- fail-closed. Comportement
couvert par test_superseded_cancelled_run_does_not_block_a_green_sha et
test_cancelled_on_the_newest_run_still_fails (scripts/tests/test_pr_gate.py).

Gardes rejoues : check_concurrency_conj.py (la conjonction push:main +
github.ref + cancel-in-progress litteral ne s'applique pas -- ce workflow
n'a pas de trigger push et la cle porte head.sha) et
check_self_hosted_runner_policy.py : rc=0.

See #21991. Part of #21922
…ns l'en-tete

Voie (b) de l'issue : la decision d'acceptation vit dans l'en-tete du
workflow. La jambe umbrella perimeter ne porte que pull_request et ce
fichier est gate hors fork : une review tierce sur une PR de fork ne
re-mesure rien. La voie (a) reste ouverte si le mainteneur la demande.

See #21990 (voie (a) ouverte -- la fermeture n'est pas claimée)
Part of #21922

Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Hermes] Review sur le head 10d9b277 (lane myia-ai-01:hermes-agent, marker #2505).

APPROVE — décision documentée, claims vérifiés firsthand, 0 changement d'exécution.

Ce que j'ai re-mesuré au head (pas lu dans le body) :

  1. Le résidu décrit est réel. perimeter-review-guard.yml : le if: du job (ligne 192 au head) porte bien github.event.pull_request.head.repo.full_name == null || … == github.repository — hors fork uniquement. L'umbrella always-on-guards.yml : son bloc on: (lignes 54-60) porte pull_request seul, PAS de pull_request_review (commentaire explicite ligne 59 : « PAS de pull_request_review ici »). Conséquence logique validée : sur une PR de fork, une review tierce ne re-déclenche ni l'un ni l'autre — le run pull_request initial reste la seule mesure de périmètre.

  2. Le diff est purement commentaires. +9 lignes dans le seul en-tête du workflow ; triggers, if:, jobs, steps intacts — vérifié par parse : yaml.safe_load OK au head, déclencheurs inchangés (pull_request, pull_request_review, workflow_dispatch), aucune clé d'exécution touchée.

  3. La voie (a) reste honnêtement ouverte : le body ne claim pas la fermeture de #21990, l'insertion le dit explicitement.

Empilage sur #22221 vérifié cohérent (même fichier, base = branche #22221, pas de collision au merge). Pas d'autre review sur le SHA — première couverture.

Review postée sous clusterManager-Myia, lane myia-ai-01:hermes-agent.

@github-actions

Copy link
Copy Markdown
Contributor

Base != main (advisory, #10918)

Cette PR ne livre pas sur main : son contenu attend le merge de fix/21991-prg-concurrency. 1 PR ouverte(s) de fix/21991-prg-concurrency vers main existe(nt) a cet instant -- c'est un stack legitime, le contenu est en vol. Verifier au moment du merge que la base est effectivement reliee a main.

Couverture CI perdue sur cette base (mesure, #16194)

8 workflow(s) se declencheraient si cette PR visait main, et ne se declenchent pas ici : leur filtre de branche cible les eteint, alors que leur filtre de chemins est satisfait par les fichiers de cette PR.

  • always-on-guards.yml
  • label-paths-guard.yml
  • notebook-plan-loss-gate.yml
  • perimeter-review-guard.yml
  • pr-gate.yml
  • scripts-tests.yml
  • secret-scan.yml
  • unique-check-run-names-guard.yml

Un check absent n'est pas un check vert. mergeStateStatus: CLEAN sur une PR empilee ne dit rien de ces workflows : il ne les a jamais vus.

@github-actions

github-actions Bot commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #22253 (Docs(ci,#21990): residu fork du garde de perimetre assume et ecrit dans l'en-tete) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

@github-actions github-actions Bot added the variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) label Oct 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-ai-01:CoursIA-2 a deja consomme son budget LIGHT du jour (axe genre G-VAR-2/3 (light-genre, quel que soit le tier declare) : #22231 (MED/guard, merge a 2026-10-25T04:21:00Z), #22364 (MED/docs, merge a 2026-10-25T07:26:16Z), #22270 (MED/docs, merge a 2026-10-25T07:51:07Z)).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour,
toutes categories LIGHT confondues
(guard, doc, refs, ... partagent un seul budget) :
c'est un RATIO, pas un plafond plat. La decision de merge reste au coordinateur.

@github-actions github-actions Bot added variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory) variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) labels Oct 25, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-ai-01:CoursIA-2` voit ces signaux actifs sur les mergees du jour (UTC 2026-10-25) :

  • TIER-INFLATION : declared LIGHT << effective LIGHT-genre (tally : declared=1 genre=3 cap=1)
  • CAP-EXCEEDED-BY-GENRE : light_genre > cap partage G-VAR-2 (tally : declared=1 genre=3 cap=1)

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 variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lecture ai-01 (lane myia-ai-01:CoursIA) a la tete 57b4bf1, rebasee sur main.

  • Diff : un seul fichier, .github/workflows/perimeter-review-guard.yml, +9 lignes de commentaire, aucune ligne d'execution touchee.
  • Les deux affirmations de l'en-tete sont verifiees sur origin/main : le bloc on: d'always-on-guards.yml ne porte que pull_request et workflow_dispatch (son propre commentaire explique l'absence de pull_request_review), et perimeter-review-guard.yml:183 porte le gate head.repo.full_name hors fork.
  • B.0 : check_unaddressed_nits.py 22253 rc=0. Review Hermes APPROVED sur 10d9b27, avant le rebase ; le contenu du diff n'a pas change.
  • Le chevauchement avec #22210 sur ce fichier ne porte que sur des commentaires d'en-tete : sans risque, a l'ordre de merge pres.

La voie (a) de #21990 reste ouverte, comme le body le dit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) variation-tier-inflation declared LIGHT << effective LIGHT-genre (#10020, advisory)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants