docs: LM-1012/LM-1013, et R3 est bloquée par une destination qui n'en est pas une

LM-1013 — « grid » l'emporte dès qu'un watt est acheté, écrit comme RÈGLE et non
comme approximation. L'argument de l'agent app emporte la décision : tant qu'on
la décrit comme approximative, quelqu'un voudra la rendre exacte — part
dominante, seuil de majorité — et sur 900/480 le libellé basculerait d'un cycle à
l'autre sans qu'aucune décision n'ait changé. Déterministe, indépendante des
proportions, alignée sur le fait actionnable, et vraie sans décision nouvelle pour
le plancher éco du §10.

Pas de « mixed » publié, et c'est l'app qui l'a prouvé par son propre code : tout
client qui teste funding == "grid" a une branche par défaut, et cette branche est
« surplus ». Une troisième valeur y tomberait SANS ERREUR et rangerait au soleil
un niveau dont une part est achetée.

LM-1012 — on publie ce qui ne se dérive pas, on dérive ce qui se dérive. La ligne
est de l'app et elle vaut au-delà du cas : une valeur dérivée LOCALE est légitime
PARCE QU'elle est dérivable ; publiée, elle est illégitime POUR LA MÊME RAISON.
Elle explique après coup trois refus pris séparément — l'index d'ordre de
service, le « mixed », et stagesW qui est publié précisément parce que la
combinatoire n'est PAS dérivable côté client. Symétrique : rankOrigin est publié
parce que rien dans un rang ne dit qui l'a posé.

Ses trois demandes : clés opaques jamais réutilisées (engagement pris, même règle
que les numéros de règle retirés) ; counts publié même à zéro avec sa destination
(confirmé) ; et counts fait foi pour la COMPTABILITÉ, decision.params pour la
PHRASE du motif (sa lecture est la bonne).

MAIS R3 NE PEUT PAS ÊTRE ÉCRITE TELLE QUELLE, et c'est le résultat de la journée.
budget.evReservedW n'est pas un registre d'allocation : c'est un terme de
correction du budget, et il mélange la correction A — commandé non encore mesuré,
calculé AVANT la cascade — avec la part réseau d'EV_GRID_START, qui est une vraie
tranche d'allocation. Une borne servie au réseau qui tire déjà ce qu'on lui a
commandé y contribue 0 alors que son targetW vaut 7 000 W : Σ counts == targetW
serait vrai au premier cycle et faux ensuite. Ça passerait les tests et
dériverait en production.

Ce que R3 a mis au jour : les watts achetés n'ont AUCUN registre aujourd'hui.
draw.committedW devient un préalable à R3, pas une suite — petit, et sans effet
sur l'arithmétique, la ligne 355 étant de la publication seule. Ce qui change est
le SENS d'evReservedW, qui redevient une correction. Proposé à l'app, en attente :
c'est son identité de réconciliation.

Aucun code : counts n'est pas livré sur une base fausse.

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 08:29:24 +02:00
parent d024042253
commit a9c688489b

View File

@ -879,6 +879,50 @@ motif faux envoie diagnostiquer le mauvais problème, avec l'autorité d'une exp
> elle est en aval de la coupure, elle n'est pas la coupure. Sans cette précédence, deux charges
> successives auraient produit deux points de rupture concurrents dans le même cycle.
**LM-1012 — On PUBLIE ce qui ne se dérive pas ; on DÉRIVE ce qui se dérive.** *(Ligne tracée par
l'agent app le 2026-08-30. Elle vaut bien au-delà du §10, et elle explique après coup plusieurs
refus qu'on avait pris un par un.)*
La légitimité d'une valeur **dérivée** ne dépend pas de son utilité, mais de **l'endroit où elle
vit** :
- **dérivée, locale, jamais transportée** → légitime, et **précisément parce qu'**elle est
dérivable : chaque lecteur la recalcule, elle ne peut pas mentir.
- **dérivée et PUBLIÉE** → illégitime, **pour la même raison** : elle devient une seconde source
de vérité pour un fait qui en a déjà une, et les deux divergeront.
C'est ce qui distingue un `"mixed"` calculé côté client — parfaitement légitime, il se relit à
chaque affichage — d'un `"mixed"` publié par le moteur, qui serait une valeur à maintenir en
accord avec une ventilation qui, elle, fait foi.
> **Elle couvre, après coup, trois refus déjà pris séparément** : l'**index d'ordre de service**
> (dérivable d'un tri sur `(niveau, priority)`), le **`"mixed"` de `funding`** (dérivable de
> `counts`), et le **`stagesW`** publié — qui, lui, est publié *parce que* la table de paliers
> n'est PAS dérivable côté client, la combinatoire vivant dans l'adaptateur.
>
> **Et son symétrique** : `rankOrigin` est publié parce qu'il **ne se dérive pas** — rien dans un
> rang ne dit qui l'a posé.
**LM-1013 — `grid` l'emporte dès qu'un seul watt est acheté.** *(Règle posée par l'agent app le
2026-08-30, retenue telle quelle : c'est une RÈGLE, pas une approximation, et la nuance décide.)*
Le financement d'un niveau vaut `"grid"` **dès qu'une part, si petite soit-elle, est achetée au
réseau** ; `"surplus"` seulement si la totalité vient du surplus.
**Pourquoi ce n'est pas « une approximation qu'on assume »** : tant qu'on la décrit ainsi,
quelqu'un voudra un jour la rendre *exacte* — part dominante, seuil de majorité. Sur un niveau à
900 W de surplus et 480 W de réseau, un tel libellé **basculerait d'un cycle à l'autre au gré des
proportions**, sans qu'aucune décision n'ait changé. La règle « un watt acheté suffit » est
**déterministe, indépendante des proportions**, alignée sur le fait actionnable — *de l'argent
a-t-il été dépensé ?* — et elle vaudra **sans décision nouvelle** pour le plancher éco du §10.
> **Et il n'y aura pas de troisième valeur `"mixed"`.** L'argument est celui de l'app, et il est
> décisif : **tout client qui teste `funding == "grid"` a une branche par défaut, et cette
> branche est « surplus »**. Une valeur inconnue y tomberait **sans erreur**, et rangerait au
> soleil un niveau dont une part est achetée — c'est la panne de l'omission, avec un champ
> présent en plus pour faire croire le contraire. Le client qui veut la nuance la **dérive** de
> `counts` (LM-1012).
**LM-1007 — Compatibilité descendante, et elle est gratuite.** Une charge qui ne déclare
**aucun** besoin éco ne participe qu'à la passe 2 — soit exactement le comportement
d'aujourd'hui. Le modèle à deux niveaux **dégrade proprement** vers le modèle actuel, ce qui