docs(spec): LM-1208 — sortir de la décision n'est pas sortir de la comptabilité

Quatre constats de l'agent app, vérifiés un par un sur le banc.

A — la CONCLUSION est retenue, le MÉCANISME ne l'est pas.

« Pas de voiture assignée » cesse d'être un critère d'exclusion (LM-1208-b).
Les trois arguments tiennent, et le troisième est décisif : le critère
contredit LM-1206, qui donne le rang et le plancher à la borne et non au
véhicule. S'y ajoutent le cas de l'invité — la borne cesserait d'être arbitrée
au moment précis où elle consomme — et l'invérifiabilité d'une assignation
déclarée à la main.

Mais le budget n'était pas faussé, et c'est le journal du banc qui le montre :
pendant que la V2C tirait, le compteur est passé de −2 915 W (export) à
+3 531 W (import) et l'arbitre a publié « Surplus insuffisant (−3 531 W) —
chauffe-eau à 0 W ». L'ECS n'a pas été servi par-dessus. Le budget part de la
mesure BRUTE (invariant 8) : la consommation d'une charge exclue y est déjà
déduite. L'exclusion est conservatrice.

La règle générale est néanmoins écrite, parce qu'elle a un porteur étroit et
réel : une charge exclue du contexte mais commandée par le PROXY ne reçoit
aucun evReservedW. Transitoire, sans effet aujourd'hui — mais elle mordra au
§10, où la passe éco décide d'acheter.

Et un écart de MESURE, distinct et non tranché, est signalé : le compteur
racine lit ~1,5 kW de moins que la somme des charges mesurées. Même famille que
son aveuglement documenté aux résistances ECS. Ce n'est pas un problème
d'arbitrage, mais un budget juste suppose un compteur qui voit tout.

B — même cause, mais le mode manuel n'est pas en cause : il reste une exclusion
délibérée. Le vrai point est que le mode par défaut d'une borne détectée EST
ChargingModeNormal — une borne neuve n'est donc jamais arbitrée tant que
personne n'a choisi un mode éco. Correct, mais invisible à la mise en service.

C — l'entrée résiduelle se supprime déjà depuis l'app : SetLoadConfig remplace
l'ensemble, et l'auto-provisionnement ne recrée que les bornes dont le Thing
existe. Le geste demandé existe ; la limite à connaître est qu'une entrée dont
le Thing vit encore sera recréée — pour celle-là, c'est enabled: false.

D — instruction reçue, aucun cas particulier V2C dans le moteur, C1 maintenue.
Leur distinction est plus fine que ce que le brief anticipait : un champ absent
se voit, un champ qui s'efface se lit comme un zéro. Troisième régime, et c'est
pourquoi C2 exige que le régime soit publié plutôt que déduit d'une valeur.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017TVywtayEeoRJ2yWUW4iZj
This commit is contained in:
Patrick Schurig 2026-08-28 11:55:32 +02:00
parent 5fb15d521b
commit 7b00ed4fe0

View File

@ -1031,6 +1031,60 @@ appartient à un chauffe-eau.
`assignedCarId` existe déjà dans `ChargingInfo` : le jour où la communication véhicule arrive,
la migration du rang de la borne vers le véhicule reste possible **sans casser l'acquis**.
**LM-1208 — Une charge sortie de la DÉCISION n'est jamais sortie de la COMPTABILITÉ.**
*(Règle posée par l'agent app, 2026-08-28, sur un constat de banc. La règle est retenue ; le
mécanisme qui l'accompagnait était inexact — voir l'encadré.)*
Quel que soit le motif d'exclusion — mode manuel, véhicule inconnu, borne débranchée — **la
consommation réelle de la charge reste dans le bilan du budget**. Une charge qu'on cesse de
piloter ne cesse pas de consommer.
> **Cette règle est DÉJÀ tenue, et par construction** : le budget part de la mesure **brute** du
> compteur (invariant 8 d'`AGENTS.md`), donc la consommation d'une charge exclue y est déjà
> déduite — sans que personne ait à la réserver. Vérifié au banc le 2026-08-28 : la V2C tirant
> 3,9 kW hors arbitrage, le compteur est passé de −2 915 W (export) à +3 531 W (import) et
> l'arbitre a publié « Surplus insuffisant (−3 531 W) — chauffe-eau à 0 W ». **L'ECS n'a pas été
> servi par-dessus.** L'exclusion est conservatrice : la charge exclue retire du budget aux
> autres, et personne ne le lui rend.
>
> **La règle garde pourtant un porteur, étroit et réel** : une charge exclue du contexte mais
> commandée par le **proxy** ne reçoit aucun `evReservedW` — sa puissance commandée et pas
> encore mesurée n'est réservée par personne (correction A ne couvre que les actions du
> scheduler). Le trou est transitoire — un cycle, jusqu'à ce que le compteur rattrape — et il ne
> mord pas aujourd'hui, le mode manuel faisant sauter la borne aussi côté proxy. **Il mordra au
> §10**, où la passe éco décide d'acheter : acheter en croyant disposer d'une puissance déjà
> engagée est exactement le défaut que la règle nomme.
**LM-1208-b — « Pas de voiture assignée » cesse d'être un critère d'exclusion.** *(Décision
demandée, argument de l'agent app retenu.)*
Trois raisons, et la troisième est décisive :
1. **Le cas de l'invité le rend intenable.** Une voiture qui n'est pas celle du propriétaire ne
sera jamais déclarée, et la borne cesserait d'être arbitrée **précisément quand elle
consomme**.
2. **Le critère n'est pas vérifiable.** L'assignation est déclarée à la main ; rien ne dit ce qui
est réellement branché. Un critère d'arbitrage qui repose sur une déclaration invérifiable
n'arbitre pas, il devine.
3. **Il CONTREDIT LM-1206.** Le rang et le plancher appartiennent à la **borne**, pas au
véhicule. Exiger un véhicule connu pour arbitrer la borne réintroduit exactement la
dépendance que LM-1206 a écartée.
**Ce qu'on perd sans voiture assignée est une FONCTION, pas l'arbitrage** : l'échéance et la
cible d'énergie deviennent indisponibles — dégradation, pas exclusion. C'est la même distinction
que C1 de LM-1009 : une capacité manquante se dit, elle ne fait pas disparaître la charge.
> **Ce qui RESTE un critère d'exclusion, et pourquoi** :
> — **mode manuel** (`ChargingModeNormal`) : c'est une intention explicite de l'utilisateur —
> il pilote, l'arbitre s'abstient. Vérifiable, et voulu.
> — **aucun véhicule branché** (`pluggedIn`) : la borne ne peut rien consommer de ce qu'on lui
> allouerait (mesuré, `docs/RELEVE_3g2.md` §3.1).
>
> ⚠️ **Conséquence d'exploitation à connaître** : le mode par défaut d'une borne fraîchement
> détectée est `ChargingModeNormal`. **Une borne neuve n'est donc jamais arbitrée tant que
> personne n'a choisi un mode éco** — ce qui est correct par construction, mais doit être visible
> à la mise en service, sans quoi « la borne ne charge pas toute seule » se lira comme un défaut.
**LM-1207 — Ne PAS ajouter de `priority` à `ChargingInfo`.** Ce serait un **second système de
priorité**, et il serait immédiatement insuffisant : il ne saurait pas exprimer
**« VE1 > ECS > VE2 »**, puisqu'il ne classerait que les bornes entre elles. Deux classements