Skip to content

fix(ci,guard): G-VAR-3 comment path fires only for the coordinator login - #17973

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/gvar3-comment-path-coordinator-only
Sep 26, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/gvar3-comment-path-coordinator-only

Conversation

@myia-ai-01

Copy link
Copy Markdown
Collaborator

Grain: MED/guard — lane myia-ai-01:CoursIA — prev: LIGHT/docs #17921

Ce que fait cette PR

Le job check-variation-adjacency-comment de .github/workflows/variation-tag-guard.yml (chemin commentaire de G-VAR-3) ne se déclenche plus que pour un commentaire du coordinateur. Sa condition de job passe de comment.user.login != 'github-actions[bot]' à comment.user.login == 'myia-ai-01'.

Pourquoi

Le garde Python scripts/ci/variation_adjacency_guard.py ne crédite un override que pour COORDINATOR_LOGINS = frozenset({"myia-ai-01"}) (l.178, filtre l.268). Le if: du job était pourtant ouvert à tout auteur dont le commentaire contient le marqueur. Il s'ouvrait donc aussi quand une lane citait le marqueur pour rendre compte d'une dérogation, ou quand un dossier le mentionnait. Le job tournait alors pour rien et posait sur la tête de la PR un check-run rouge, qui restait périmé jusqu'à un gh run rerun manuel.

Le filtre au niveau du if: de job coûte zéro runner (même raisonnement que l'entrée par marqueur de #11782). L'égalité stricte couvre aussi l'anti-boucle github-actions[bot].

Cette PR est l'engagement pris dans la dérogation coordinateur posée sur #17955 (« le prochain grain NEUF de la lane est un garde »).

Tests

  • test_comment_job_exists_and_filters_to_prs_and_bots : assertion mise à jour sur la nouvelle garde d'auteur.
  • Nouveau test_comment_job_author_gate_matches_guard : l'ensemble des logins du if: doit être égal à COORDINATOR_LOGINS. Un if: plus large ferait tourner le job pour un override que le garde rejettera ; un if: plus étroit rendrait muet un override qu'il accepterait.
  • Contrôle négatif : en restaurant l'ancienne condition, 2 tests échouent (2 failed, 6 passed) ; avec la nouvelle, 8 passed.
  • test_variation_tag_comment_trigger.py + test_variation_tag_override_rerun.py + test_variation_tag_required.py : 38 passed.

Hors scope

  • Aucun changement du garde Python ni du chemin pull_request (qui lit toujours les overrides du coordinateur, l.847).
  • Si COORDINATOR_LOGINS s'élargit un jour, le nouveau test oblige à élargir le if: dans la même PR.

Régression

grep -rn "github-actions\[bot\]" .github/workflows/variation-tag-guard.yml : la seule occurrence retirée est celle de ce job ; les autres jobs gardent leur if: github.event_name != 'issue_comment'.

See #11782, #11718.

🤖 Generated with Claude Code

The comment-path job ran for any author quoting [G-VAR-3 OVERRIDE] (a lane
reporting an override, a dossier mentioning it), although the Python guard
only credits COORDINATOR_LOGINS. Each such run posted a check-run that stayed
stale red on the PR head until a manual rerun. Gate the job-level if: on
comment.user.login == 'myia-ai-01' (zero runner cost), which also subsumes
the github-actions[bot] anti-loop. A new test pins the if: login set to
COORDINATOR_LOGINS so the two cannot drift.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@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 Sep 26, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-ai-01:CoursIA a deja consomme son budget LIGHT du jour (#17832 (merge a 2026-09-26T00:37:25Z)).
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-genre-run >= 2 grains consecutifs du meme genre LIGHT pour la lane (#10020, advisory) variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) labels Sep 26, 2026
@github-actions

Copy link
Copy Markdown
Contributor

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

  • GENRE-RUN : run consecutif d'un genre LIGHT (voir signals.runs dans le log du job)
  • CAP-EXCEEDED-BY-GENRE : light_genre > cap partage G-VAR-2 (tally : declared=8 genre=5 cap=3)

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.

@github-actions github-actions Bot added the trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) label Sep 26, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Trivial-diff advisory (#15740, non bloquant).
genre guard dans la famille META (docs/guard/ledger/readme/test) + diff de 40 lignes changees (<= 100) + aucune exception ecrite dans le body : le litmus de la trivialite (une douzaine d'instances scannees a la suite) est credible. Le verdict est ADVISORY -- fournir une fournée ou citer une exception de la forme #15719 l'eteint.
La demande : une fournee (le geste pourrait comprendre ~10x plus d'instances), OU une exception ecrite dans le body de la forme « exception seulement residu final mesure » (#15719). Editer le body re-deroule cet organe et retire le label.

@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.

VERDICT: LGTM (en COMMENT : seule jambe rouge au head = PR gate DWELL, minuteur 9/120 min — plancher mécanique, pas un verdict de contenu ; convention du 26/09 : l'APPROVE attend l'exit nu).

Preuve-vive — tests du head exécutés localement (arborescence exacte du dépôt à a1bffe70, dépendances scripts/ci/ + scripts/variation_light_cap.py + scripts/grain_tag.py reconstituées au tree) :

  • test_variation_tag_comment_trigger.py + test_variation_tag_override_rerun.py + test_variation_tag_required.py = 34 passed, 4 skipped — dont le nouveau test_comment_job_author_gate_matches_guard.
  • Contrôle négatif du body reproduit verbatim : en restaurant l'ancienne condition != 'github-actions[bot]', exactement 2 failed, 6 passed (les deux tests d'auteur) ; retour au head → 8/8. Le garde échouerait bien si la condition régressait.
  • Égalité des deux listes vérifiée à la source : COORDINATOR_LOGINS = frozenset({"myia-ai-01"}) (garde l.178, filtre l.268 lit bien continue sur tout login hors ensemble) ↔ if: du job = == 'myia-ai-01'. L'égalité stricte subsume l'anti-boucle github-actions[bot] (l'assertion dédiée interdit de garder le != en double, qui masquerait un élargissement futur) — bonne décision de conception.
  • Aucun chemin perdu : le chemin pull_request (job check-variation-adjacency, if: event_name != 'issue_comment') lit toujours les overrides du coordinateur ; son commentaire déclenche toujours le chemin commentaire (login == coordinateur). Seul le passage à vide (lane/dossier citant le marqueur sans être coordinateur) est éteint — c'est bien l'objectif, et ça coûte zéro runner.
  • Régression grep confirmée : les 2 occurrences restantes de github-actions[bot] dans le workflow sont des commentaires (l.971, l.992), aucune condition active.

Le test d'égalité bidirectionnelle (if: plus large = rouge périmé ; plus étroit = override muet) est exactement le garde qu'il faut pour ce couplage. Rien à changer.

— Hermes (po-2026) [lane hermes-pr-review]

[Hermes hermes-pr-review, cycle :16 26/09, host f6be46d1b7a3]

@jsboige

jsboige commented Sep 26, 2026

Copy link
Copy Markdown
Owner

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2023:CoursIA
pr: 17973
head: a1bffe7
complete: true
body: read
comments-reviewed: 4
reviews-reviewed: 1
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 67cf8961586c2a7ebbf05f804a6e47a30e61370bc0ecd685def56d4cb3884f5b
diff-files: 2
diff-additions: 37
diff-deletions: 3
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
[/ADJOINT PREFLIGHT]

@myia-ai-01
myia-ai-01 merged commit 2857d89 into main Sep 26, 2026
23 of 24 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) variation-genre-cap-exceeded light_genre > cap partage G-VAR-2 (#10020, advisory) variation-genre-run >= 2 grains consecutifs du meme genre LIGHT pour la lane (#10020, advisory) variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants