From eba874f73564eb72b9ce67b19f5cf9b0b4238f93 Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Sun, 30 Aug 2026 15:13:16 +0200 Subject: [PATCH] =?UTF-8?q?docs(AGENTS):=20le=20versant=20contrat=20des=20?= =?UTF-8?q?garde-fous,=20et=20une=20r=C3=A8gle=20ne=20se=20propage=20pas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Deux ajouts qui sortent d'ECS-415, à côté de la règle des garde-fous. Le versant CONTRAT : un contrat qu'aucun appelant n'exerce n'est pas un contrat tenu, c'est un contrat non testé. Le garde-fou dit « une règle que rien ne rejoue se périme » ; le contrat dit « une garantie que personne ne consomme n'a jamais été vérifiée ». D'où la conduite : avant d'exploiter une valeur de retour qu'aucun code n'exploitait, l'épingler d'abord par un test. Le fait de méthode : la règle d'ECS-415 était déjà écrite dans le commentaire de la branche VOISINE, à trois lignes de la branche fautive, et elle ne s'était pas propagée. Une règle écrite à un endroit ne se propage pas toute seule — c'est ce qui justifie de balayer les autres implantations du même contrat plutôt que de corriger localement. Corollaire de relecture : la proximité d'un bon commentaire n'est pas une preuve que le code voisin le respecte. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_015F7G5VeaPVSMeVNjiGj36p --- AGENTS.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 1414f8b..c9b6a17 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -850,6 +850,29 @@ aucune, la décision est une intention, et elle se périmera à la vitesse du co > rien. Chaque test d'invariant de cette semaine a été **vérifié échouant** avant d'être déclaré > prêt — c'est la seule façon de savoir qu'il regarde ce qu'on croit. +> **Le versant CONTRAT du même principe** : **un contrat qu'aucun appelant n'exerce n'est pas un +> contrat tenu, c'est un contrat non testé.** ECS-415 en est le cas d'école — `applyAction()` +> renvoyait, sur refus, l'action *demandée* : un appelant y relisait l'état qu'il venait de +> demander et concluait au succès. Le défaut a vécu sans conséquence tant que **personne ne +> lisait ce retour** (le dispatch l'ignore), et il est devenu grave à la minute où un appelant +> s'y est fié — publiant 3 kW rendus par une PAC restée en état 4. +> +> Les deux se répondent : le garde-fou dit « une règle que rien ne rejoue se périme », le +> contrat dit « une garantie que personne ne consomme n'a jamais été vérifiée ». Avant +> d'exploiter une valeur de retour qu'aucun code n'exploitait, **l'épingler d'abord par un +> test** — le premier appelant est aussi le premier vérificateur. + +> **Fait de méthode, relevé le 2026-08-30** : la règle d'ECS-415 était **déjà écrite**, dans le +> commentaire de la branche voisine du même fichier, **à trois lignes** de la branche fautive +> (« ce retour était MUET, si bien que "état déjà bon" ne se distinguait pas de "action jamais +> reçue" »). Elle ne s'était pas propagée pour autant. +> +> **Une règle écrite à un endroit ne se propage pas toute seule.** C'est ce qui justifie, quand +> un défaut de ce genre apparaît, de **balayer les autres implantations du même contrat** plutôt +> que de corriger localement — le balayage a trouvé le même travers sur la branche « motif +> vide » du `RelayRouter` et de l'`EtmVariableLoadAdapter`. Corollaire pour la relecture : la +> proximité d'un bon commentaire n'est **pas** une preuve que le code voisin le respecte. + ## RÉPONSES FIGÉES (ne plus poser ces questions) - Plages HC/HP et tarifs : **configuration JSON**, jamais hardcodé. Prévoir Tempo