Skip to content

ci(#13232): perimeter-review-guard est-il filtrable par paths: ? question laissee ouverte au merge de #13193 (deux reviews ai-01 contradictoires) #13246

Description

@myia-ai-01

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-guard repond 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)

  1. 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.
  2. 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) ou paths: 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.
  • Si le verdict est « a retirer » : ajouter perimeter-review-guard.yml a METADATA_DEPENDENT_GUARDS dans scripts/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).

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions