Méthode, novembre 2026
Une règle qu'aucun contrôle ne mesure est un souhait
Une consigne écrite dans les instructions d'un dépôt tient tant que celui qui écrit s'en souvient. Les agents IA oublient, et moi aussi. Une règle tient quand un script échoue dès qu'on la viole, et quand j'ai vu ce script échouer.
Le contrôle remplace la consigne
truecopy est une bibliothèque que je publie, et une partie de sa documentation est écrite avec un modèle. Un modèle met un tiret long là où la phrase voulait une virgule ou un point. 83 tirets s'étaient accumulés dans onze fichiers.
Les retirer à la main ne servait à rien, le paragraphe généré suivant les remettait. Le dépôt a donc un script, scripts/dashes.mjs, qui refuse tout tiret typographique dans la documentation comme dans le code. Il tourne avant chaque fusion, juste après le formatage. Son en-tête tient en une phrase : une règle que personne ne fait tourner est un souhait.
Un contrôle se voit échouer d'abord
Un contrôle que je n'ai jamais vu échouer peut très bien ne rien lire. Celui de cleanpoker.dev vérifie qu'aucune page ne déborde d'un écran de téléphone. Avant de lire le site, il lit quinze feuilles de style fautives écrites à la main, et il échoue s'il en laisse passer une.
Il échoue aussi s'il a lu moins de 40 feuilles ou moins de 650 règles. Si un dossier est renommé et que la recherche des fichiers ne trouve plus rien, le contrôle échoue au lieu de passer en vert sans rien avoir lu.
Les limites
Un contrôle ne voit que ce qu'il lit. Celui de cleanpoker.dev lisait chaque feuille de style et n'a pas vu un titre allemand qui dépassait de 10 pixels, sur un écran de 320 pixels avec le texte doublé. La longueur d'un mot n'est pas dans le CSS. C'est une mesure dans un vrai navigateur qui l'a trouvé. Depuis, le contrôle vérifie aussi la règle qui coupe ce titre.
Dans une équipe, c'est pareil pour une convention de revue. Si aucun script ne la vérifie, elle dépend de la mémoire de chacun.
Le code des deux contrôles est public, avec son histoire en tête de fichier, truecopy et cleanpoker.