Aller au contenu

Trois bancs de mutation partagent ce qu'ils rendent, pas leur mécanique

StatutEn vigueur, 2026-10-06
ArticleA2 · Un garde est vu rouge sur sa propre mutation
Chantier#5265
Vérification humainesavoir si un écart entre deux bancs est une raison ou un oubli demande de lire ce que chacun mute et comment il le lance : aucun motif ne le lit. Ce qui se tient mécaniquement est la part commune, par l'auto-test de chaque banc et par le cas du banc de méthode qui compare leurs trois déclarations

Le contexte

Le dépôt porte trois bancs de mutation depuis #5254, pour scripts/adr, scripts/methode et .github/scripts. Chacun neutralise la détection d'un garde, puis regarde si son auto-test le voit.

À l'ouverture du chantier #5265, deux rangeaient un plantage avec les preuves, et deux cherchaient le point d'entrée d'un garde dans son texte. Le dépôt annonçait 109 gardes éprouvés, il en prouvait 90.

Ses lots les ont alignés, et la même question est revenue : ce qu'on écrit trois fois, faut-il l'écrire une fois ? Et ce que les trois font différemment, faut-il l'unifier ?

La décision

Ce que les trois bancs ont en commun est ce qu'ils rendent, et c'est cela qui s'aligne. Leur mécanique reste propre à chacun, et chaque écart porte sa raison là où il est écrit.

Ce qui est commun aux trois Depuis
le point d'entrée où s'insère la neutralisation se lit dans l'arbre syntaxique, jamais par un motif #5263
trois comptes dont la somme vaut la population (ADR 5257) #5264
la déclaration invariant, seuil « sans objet » #5498
la table PLANTENT_SOUS_MUTATION, confrontée dans les deux sens (ADR 5743) #5743, #5497
ce qui épargne une fonction, dans scripts/_commun/mutation.py (ADR 5452) #5524
Ce qui reste propre à chacun ADR méthode CI
d'où vient le corpus ce que verifie_scripts.py charge, plus les autonomes ce que lint.yml lance sous scripts/, hors scripts/adr ce que les ateliers nomment
le banc est-il dans son corpus par sa moitié chargée, jamais par celle qu'il lance oui (ADR 4770) non
ce qui borne le second sens de la table la portée du diff rien le corpus entier
ses exemptions nommées HORS_PORTEE (#5495) HORS_PORTEE (#5479) aucune

La seconde ligne a trois raisons. Le banc des ADR lance les scripts qu'il éprouve et se rappellerait sans fin. Celui de méthode ne mute que de faux gardes dans son auto-test, donc il peut se muter. Celui de CI s'écarte de son corpus, et un cas le tient. Depuis #5550, celui de méthode le dit aussi par un cas qui peut rougir, et celui des ADR depuis #6031.

La confrontation de la table est écrite trois fois. Son noyau tient en deux différences d'ensembles, et ce qui l'entoure diffère : la borne du second sens, et la forme des non concluants.

Les conséquences

Trois fonctions du même nom ne sont pas une duplication à réduire : la lecture du point d'entrée est identique dans deux bancs et diffère dans le troisième, la confrontation diffère dans les trois.

Un écart entre deux bancs se lit avec sa raison, ou se consigne comme une trouvaille. Les aligner « par cohérence » retirerait au banc des ADR sa barrière contre le rappel sans fin, ou lui ferait annoncer des réparations imaginaires sur un diff partiel.

Ce qui se paie : une règle neuve s'écrit trois fois, et la troisième s'oublie (#5263, #5495, #5550). Le remède retenu est que chaque banc porte son cas rouge, non que le code soit commun.

Ce que cette décision ne couvre pas

Elle ne dit pas que rien ne se partagera. Un fonds a été refusé en #5263 parce que les bancs ne partageaient alors ni import ni arbre ; depuis #5524 ils importent tous trois scripts/_commun/mutation.py, et cet argument ne vaut plus. Reste l'autre : on ne partage que ce qui est le même.

Elle ne répare pas les gardes que les tables nomment : le chantier l'a exclu.

Les alternatives écartées

  • Un quatrième banc pour la racine de scripts/, où vit la porte : le banc de méthode dérivait déjà son corpus de lint.yml, et c'est son motif qui tenait moins que sa prose (#5397).
  • Une seule réponse à « le banc est-il dans son corpus » : rien n'oblige les trois à répondre pareil, mais chacun doit répondre.

Comment on le sait

Le job temoins sur main à e8682ff5f : 50 tiennent et 4 ne concluent pas sur 54 pour le banc des ADR, 20 et 10 sur 30 pour celui de méthode, 39 et 9 sur 48 pour celui de CI. Aucun décoratif, et chaque somme vaut sa population. Deux des 39 n'avaient rien prouvé sur ce runner : leur auto-test refuse de commencer sans ImageMagick ou ffmpeg, et le banc lisait ce refus comme un rouge qui tient. Depuis #6030 il les compte non concluants, 11 sur tout hôte.

Les fonctions homonymes ont été comparées par leur arbre à 0467bca9f.