diff --git a/CLAUDE.md b/CLAUDE.md index 18417bc..e8fe7d6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -475,6 +475,36 @@ client peut vérifier. --- +## Deux contrôles qui ne mordent pas — et la question qui les démasque + +**1. La recherche AUTO-CONFIRMANTE.** Après avoir corrigé le signe du solaire, la +vérification a cherché `pvPower.abs` — donc elle a trouvé **la ligne qu'on venait +d'écrire**, et elle a caché la seconde, non corrigée. Il fallait chercher `pvPower`. Le +défaut a survécu un jour de plus et c'est l'écran qui l'a montré. + +> **Chercher la trace de sa propre correction ne dit rien de ce qu'on a manqué.** +> On cherche la GRANDEUR, jamais le correctif. + +**2. Le contrôle vrai par construction.** L'identité `deliveredWh + remainingWh == targetWh` +ne peut pas échouer sous `unmeasurable` : `deliveredWh` y vaut 0 et `remainingWh` la cible. +Elle ne mord que sous `measured` — et l'afficher comme « identité OK » ferait lire un feu +vert sur le régime qu'elle ne contrôle pas. + +**La parade est la même pour les deux, et elle tient en une question** : + +> **qu'est-ce que ce contrôle aurait attrapé s'il avait échoué ?** + +Si la réponse est « rien » ou « je ne sais pas », le contrôle décore. Un contrôle qui ne peut +pas échouer n'est pas un contrôle : c'est une phrase rassurante, et elle coûte davantage +qu'aucun contrôle — parce qu'elle occupe la place de celui qui aurait mordu. + +Corollaire de terrain, rencontré **deux fois le même jour** : *une absence côté APP présentée +comme une absence côté BOX*. Un provider non chargé, une carte sans domaine — et l'écran +annonce « non publié » sur une donnée que la box publie. Avant d'écrire qu'une chose n'est +pas publiée, vérifier qu'on est allé la chercher. + +--- + ## Règles de modification - Tout nouvel écran → valider maquette avec Patrick avant de coder - Tout nouvel appel RPC → vérifier dans `INTERFACE.md` que la méthode existe