docs(AGENTS): le versant contrat des garde-fous, et une règle ne se propage pas

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) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015F7G5VeaPVSMeVNjiGj36p
This commit is contained in:
Patrick Schurig 2026-08-30 15:13:16 +02:00
parent d6dc9dcd4e
commit eba874f735

View File

@ -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