You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Question laissee ouverte et non tranchee au merge de #13193, et il faut dire pourquoi : j'ai poste deux reviews contradictoires sur cette PR, a 32 minutes d'intervalle.
Review
Verdict sur perimeter-review-guard.yml
2026-08-27T15:43:27Z
« c'est exactement le bon geste [...] Rien a redire. »
2026-08-27T16:15:27Z
« Idem pour perimeter-review-guard, dont le verdict porte sur le perimetre declare de la PR » (= a desarmer aussi)
La lane a passe ~12 h bloquee sur cette PR, en partie sur mon incoherence. #13193 est mergee sur la moitie qui, elle, ne fait aucun doute (base-not-main-advisory : paths: retire, verrouille par test a controle positif verifie). La moitie perimeter-review-guard conserve son paths:avec le glob .github/workflows/** — l'etat que ma premiere review approuvait explicitement. Cette issue porte la question restante, elle ne la prejuge pas.
Le fond
Le critere pose en #13232 : le verdict du garde depend-il du DIFF ou des METADONNEES de la PR ?
perimeter-review-guardrepond aux deux a la fois, et c'est ce qui le rend inclassable en l'etat :
il lit une assertion de perimetre dans le body ou une review — metadonnee, presente ou absente independamment des chemins touches ;
il la confronte a gh pr view --json files — donc a une grandeur derivee du diff.
Son declencheur nominal n'est donc pas « les PR qui touchent tel chemin » mais « les PR dont le body affirme quelque chose sur son perimetre ». Sous le paths: actuel, une PR de notebooks dont le body annonce « limite a 2 fichiers » alors qu'elle en touche 5 n'est pas verifiee.
Contre-argument reel, et c'est pourquoi je ne tranche pas seul : l'incident fondateur #11268 est specifiquement un workflow modifiant le sorry-baseline, et le message d'erreur du garde porte une clause explicitement workflow-centree (« an exclusivity claim does not name a touched .github/workflows/** file »). Il est donc defendable que sa surface nominale soit les PR touchant .github/workflows/** — auquel cas le paths: actuel est correct, et ma seconde review a sur-etendu le critere.
Ce qu'il faut mesurer avant de trancher (et non argumenter)
Combien d'assertions de perimetre existent hors .github/workflows/** ? Balayer les bodies des PR mergees recentes avec le parser du garde lui-meme (scripts/check_pr_perimeter.py), pas un grep artisanal, et compter celles qu'il aurait analysees mais que le paths: ecarte. Un zero mesure trancherait en faveur du filtre ; un compte non nul le condamne.
Le controle positif obligatoire : construire une PR de test (ou une fixture) hors .github/workflows/** portant une assertion fausse, et verifier que le garde ne rougit pas aujourd'hui. Sans cette demonstration, « le filtre desarme le garde » reste une inference, pas une mesure — exactement le defaut que ma propre review de 16:15 reprochait au commentaire du diff.
Acceptance
Verdict ecrit : paths:legitime (surface nominale = PR touchant des workflows) oupaths:a retirer (surface = toute PR portant une assertion).
La mesure (1) citee en chiffres, avec la commande et sa date.
Le controle positif (2) montre, quel que soit le sens du verdict.
Question laissee ouverte et non tranchee au merge de #13193, et il faut dire pourquoi : j'ai poste deux reviews contradictoires sur cette PR, a 32 minutes d'intervalle.
perimeter-review-guard.ymlperimeter-review-guard, dont le verdict porte sur le perimetre declare de la PR » (= a desarmer aussi)La lane a passe ~12 h bloquee sur cette PR, en partie sur mon incoherence. #13193 est mergee sur la moitie qui, elle, ne fait aucun doute (
base-not-main-advisory:paths:retire, verrouille par test a controle positif verifie). La moitieperimeter-review-guardconserve sonpaths:avec le glob.github/workflows/**— l'etat que ma premiere review approuvait explicitement. Cette issue porte la question restante, elle ne la prejuge pas.Le fond
Le critere pose en #13232 : le verdict du garde depend-il du DIFF ou des METADONNEES de la PR ?
perimeter-review-guardrepond aux deux a la fois, et c'est ce qui le rend inclassable en l'etat :gh pr view --json files— donc a une grandeur derivee du diff.Son declencheur nominal n'est donc pas « les PR qui touchent tel chemin » mais « les PR dont le body affirme quelque chose sur son perimetre ». Sous le
paths:actuel, une PR de notebooks dont le body annonce « limite a 2 fichiers » alors qu'elle en touche 5 n'est pas verifiee.Contre-argument reel, et c'est pourquoi je ne tranche pas seul : l'incident fondateur #11268 est specifiquement un workflow modifiant le sorry-baseline, et le message d'erreur du garde porte une clause explicitement workflow-centree (« an exclusivity claim does not name a touched
.github/workflows/**file »). Il est donc defendable que sa surface nominale soit les PR touchant.github/workflows/**— auquel cas lepaths:actuel est correct, et ma seconde review a sur-etendu le critere.Ce qu'il faut mesurer avant de trancher (et non argumenter)
.github/workflows/**? Balayer les bodies des PR mergees recentes avec le parser du garde lui-meme (scripts/check_pr_perimeter.py), pas un grep artisanal, et compter celles qu'il aurait analysees mais que lepaths:ecarte. Un zero mesure trancherait en faveur du filtre ; un compte non nul le condamne..github/workflows/**portant une assertion fausse, et verifier que le garde ne rougit pas aujourd'hui. Sans cette demonstration, « le filtre desarme le garde » reste une inference, pas une mesure — exactement le defaut que ma propre review de 16:15 reprochait au commentaire du diff.Acceptance
paths:legitime (surface nominale = PR touchant des workflows) oupaths:a retirer (surface = toute PR portant une assertion).perimeter-review-guard.ymlaMETADATA_DEPENDENT_GUARDSdansscripts/tests/test_variation_tag_required.py(registre introduit par fix(ci,#13232): retirer le paths-filter des 2 gardes metadonnee-dependants (tranche 1c) #13234), et non un test ad-hoc de plus.Contexte : #13232 (classe de defaut), #13193 (mergee), #13234 (registre), #11268 (incident fondateur du garde).