docs: les quatre décisions du §10, et un troisième mode d'érosion

11.1 étalement uniforme, avec les trois choses qui s'écrivent avec lui :
recalculé à chaque cycle (une cadence figée ne rattrape pas et manque
l'échéance en ayant l'air de travailler) ; il se durcit à l'approche —
2 kWh font 2 kW à une heure et 12 kW à dix minutes, donc la fenêtre d'achat
massif arrive d'un coup et c'est le MOTIF qui doit le dire ; et un point de
non-retour explicite, parce qu'un seuil nommé se discute là où une asymptote
se subit.

11.2 oui aux quatre champs, et la subtilité entre dans le CONTRAT : sous la
réserve batterie, draw.remainingW reste non nul pendant que budget.remainingW
est à zéro. LM-1203-b vue depuis la frontière — la réserve annule le surplus,
jamais l'autorisation de soutirage.

11.3 dissoute, 11.4 par champ explicite.

Et un troisième mode d'érosion dans AGENTS.md, symétrique des deux autres :
non pas une règle qui se périme faute d'être exécutable, mais une règle rendue
IMMORTELLE par sa propre garde. draw.authorisedW a été refusé pour un motif
juste, épinglé par un test, puis le motif est tombé — et la formulation a
survécu, protégée par un test qui ne savait pas que le monde avait changé.
Parade déjà pratiquée ici : quand un test fige une ABSENCE, son commentaire
écrit la condition de levée. « Absent tant que rien ne le mesure » se relit et
se lève ; « ne doit pas exister » se relit et s'obéit.

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 22:38:09 +02:00
parent f2a96a0193
commit 2a584de913
2 changed files with 53 additions and 8 deletions

View File

@ -862,6 +862,25 @@ aucune, la décision est une intention, et elle se périmera à la vitesse du co
> 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.
> **Un troisième mode d'érosion, et il est le SYMÉTRIQUE des deux autres (2026-08-31).** Le
> garde-fou dit « une règle que rien ne rejoue se périme ». Voici l'inverse : **une règle rendue
> IMMORTELLE par sa propre garde.**
>
> Cas d'école, `draw.authorisedW`. Le champ a été refusé parce qu'il aurait affiché « un plafond
> de soutirage qui n'existe pas » — motif juste. Il a été défendu en prose à trois endroits, puis
> épinglé par un test qui casse si on l'ajoute. Puis le lot délestage a **créé** le plafond. Le
> motif était tombé ; la formulation, elle, a survécu — protégée par un test qui, lui, ne savait
> pas que le monde avait changé.
>
> **La parade est déjà pratiquée ailleurs dans ce dépôt** : le commentaire d'un test d'invariant
> doit dire **à quelle condition il devient faux**. Ceux qui portent « si ça casse, ce n'est pas
> le test qu'il faut corriger » ont bien vieilli, parce qu'ils nomment l'intention. Celui-là
> disait ce qu'il interdisait, jamais **à quel moment il aurait dû mourir**.
>
> **Règle pratique** : quand un test fige une ABSENCE, son commentaire écrit la condition de
> levée. « Ce champ reste absent **tant que** rien ne le mesure » se relit et se lève ; « ce
> champ ne doit pas exister » se relit et s'obéit.
> **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

View File

@ -486,30 +486,56 @@ Trois formes possibles, et elles ne se valent pas :
| **Étalement uniforme** | `reste / temps restant` | simple, vérifiable, mais ignore le tarif et le soleil à venir |
| **Au plus tard** | ne rien acheter tant que le surplus peut encore suffire | optimal, mais suppose une **prévision** — hors modèle |
**Recommandation : l'étalement uniforme**, pour la même raison que `LM-1008` a fait de la cible
de confort un **comparateur** plutôt qu'un dosage : ce qui manque n'est pas la formule, c'est le
modèle qui la rendrait honnête. Un étalement se lit, se teste, et ne prétend rien prévoir. Le
« au plus tard » viendra avec la prévision, pas avant.
**TRANCHÉ (2026-08-31) : l'étalement uniforme**, pour la même raison que `LM-1008` a fait de la
cible de confort un **comparateur** plutôt qu'un dosage : ce qui manque n'est pas la formule,
c'est le modèle qui la rendrait honnête. Un étalement se lit, se teste, et ne prétend rien
prévoir. Le « au plus tard » viendra avec la prévision, pas avant.
**Trois choses s'écrivent AVEC lui, et aucune n'est un détail :**
**(a) Recalculé à CHAQUE cycle, jamais figé au départ.** Une cadence calculée une fois au
branchement ne rattrape pas : après une heure sans surplus, elle reste à la cadence initiale et
**manque l'échéance** en ayant l'air de travailler. L'étalement est un rapport entre ce qui
reste à livrer et le temps qui reste — les deux bougent, donc il se relit.
**(b) Il se DURCIT à l'approche, mécaniquement, et cela doit être DIT.** 2 kWh restants font 2 kW
à une heure de l'échéance et **12 kW à dix minutes**. La fenêtre où l'achat devient massif
n'arrive pas progressivement : elle arrive **d'un coup**. Sans que le motif le nomme, un client
verra sa facture grimper à 6 h du matin sans comprendre — et il aura raison de chercher une
panne. C'est donc le **motif publié** qui porte la cadence et le temps restant, pas seulement les
watts : la même doctrine que partout ici — **publier le régime, ne jamais le laisser déduire.**
**(c) Un POINT DE NON-RETOUR explicite**, comme la maquette batterie le demandait : passé une
heure limite, on achète ce qu'il faut. Sans lui, l'étalement peut théoriquement tendre vers
l'infini sans jamais décider — et un seuil nommé se discute, là où une asymptote se subit.
**11.2 — Publie-t-on `draw.authorisedW` et `remainingW` maintenant ?**
Le refus tenait à ce qu'ils n'existaient pas. Ils existent. Mais `remainingW` a une subtilité :
sous la réserve batterie, `LM-1203-b` annule le budget de surplus **sans annuler l'autorisation
de soutirage** — donc `draw.remainingW` reste non nul quand `budget.remainingW` est à zéro, et
c'est **juste**. Il faut le dire, sinon un client conclura à une incohérence.
**Recommandation : oui aux quatre**, et le test qui les interdit se met à jour en même temps —
c'est un changement de contrat assumé, pas une régression.
**TRANCHÉ (2026-08-31) : oui aux quatre**, et le test qui les interdit se met à jour en même
temps — changement de contrat assumé, pas régression. Son nouveau commentaire dira **à quelle
condition il devient faux**, ce que l'ancien ne disait pas (cf. `AGENTS.md`, troisième mode
d'érosion).
**Et la subtilité s'écrit EN TOUTES LETTRES DANS LE CONTRAT, pas en note de bas de page :**
sous la réserve batterie, **`draw.remainingW` reste non nul pendant que `budget.remainingW` est à
zéro.** C'est `LM-1203-b` vue depuis la frontière — la réserve annule le **surplus**, jamais
l'**autorisation de soutirage**. Un client y verra une incohérence, et il aura raison de la
signaler si personne ne l'a dite.
**11.3 — La passe éco achète-t-elle au réseau par DÉFAUT ?**
`ECO_FLOOR_GRID` dit « ce plancher est servi en achetant ». Mais faut-il acheter dès que le
surplus manque, ou seulement quand l'échéance est menacée ? Avec l'étalement uniforme la question
se dissout : on achète ce que l'étalement réclame **et rien de plus**, donc jamais « par défaut »
— toujours parce que le temps restant l'exige. **Recommandation : pas de décision séparée**, elle
— toujours parce que le temps restant l'exige. **TRANCHÉ : dissoute — pas de décision séparée**, elle
est absorbée par 11.1.
**11.4 — Que devient le recrédit anti-clignotement avec deux passes ?**
`LM-1004` fixe qu'il est attribué **une seule fois**. Reste à dire **où** : à la première passe
où la charge apparaît. Une charge à plancher éco le reçoit donc en passe 1, une charge sans
obligation en passe 2. **Recommandation : un champ explicite dans la cible** (`recreditAttribue`)
obligation en passe 2. **TRANCHÉ : un champ explicite dans la cible** (`recreditAttribue`)
plutôt qu'une discipline — la discipline ne se teste pas, le champ si.
---