Constat
Les organes de variation lisent la séquence des PRs mergées par gh pr list --state merged --search "merged:$TODAY", sans filtre de base. Une PR empilée, mergée dans la branche d'une autre PR et non dans main, y apparaît donc comme un grain mergé de la lane.
Instance mesurée (2026-10-03) : #18910 (fix/c1377-18822-test-reload, base test/18775-k07-budget-mensuel) a été mergée à 01:39Z dans la branche de #18822. Le garde G-VAR-3 de #18822 rend alors adjacent: true, prev_pr: 18910, prev_source: merged-sequence : la PR est bloquée comme « deuxième grain test consécutif » alors que #18910 est une partie d'elle-même. Le même passage compte aussi #18910 dans le budget G-VAR-2 de la lane (budget_spent_by: ... #18910). Levée à la main par [G-VAR-3 OVERRIDE] sur #18822 (c.5965016101).
Sites concernés
.github/workflows/always-on-guards.yml l.369 et l.457
.github/workflows/variation-light-genre.yml l.109
.github/workflows/variation-tag-guard.yml l.317
scripts/variation_light_cap.py (docstring d'usage l.17) et scripts/ci/variation_adjacency_guard.py l.340 (contrat d'entrée)
Correctif attendu
Ne compter que les PRs mergées dans la branche par défaut : --base main sur chaque gh pr list --state merged, ou baseRefName demandé dans --json et filtré dans les deux organes Python (plus robuste, puisque le contrat d'entrée le porte alors). Contrôle positif : rejouer #18822 au 2026-10-03, qui doit rendre adjacent: false. Contrôle négatif : une vraie paire test → test mergée dans main reste bloquée.
Constat
Les organes de variation lisent la séquence des PRs mergées par
gh pr list --state merged --search "merged:$TODAY", sans filtre de base. Une PR empilée, mergée dans la branche d'une autre PR et non dansmain, y apparaît donc comme un grain mergé de la lane.Instance mesurée (2026-10-03) : #18910 (
fix/c1377-18822-test-reload, basetest/18775-k07-budget-mensuel) a été mergée à 01:39Z dans la branche de #18822. Le garde G-VAR-3 de #18822 rend alorsadjacent: true, prev_pr: 18910, prev_source: merged-sequence: la PR est bloquée comme « deuxième graintestconsécutif » alors que #18910 est une partie d'elle-même. Le même passage compte aussi #18910 dans le budget G-VAR-2 de la lane (budget_spent_by: ... #18910). Levée à la main par[G-VAR-3 OVERRIDE]sur #18822 (c.5965016101).Sites concernés
.github/workflows/always-on-guards.ymll.369 et l.457.github/workflows/variation-light-genre.ymll.109.github/workflows/variation-tag-guard.ymll.317scripts/variation_light_cap.py(docstring d'usage l.17) etscripts/ci/variation_adjacency_guard.pyl.340 (contrat d'entrée)Correctif attendu
Ne compter que les PRs mergées dans la branche par défaut :
--base mainsur chaquegh pr list --state merged, oubaseRefNamedemandé dans--jsonet filtré dans les deux organes Python (plus robuste, puisque le contrat d'entrée le porte alors). Contrôle positif : rejouer #18822 au 2026-10-03, qui doit rendreadjacent: false. Contrôle négatif : une vraie pairetest→testmergée dansmainreste bloquée.