docs(spec): LM-1204-b — le scénario d'acceptation de 3g et son piège de simulateur

Défini avec Patrick quand le banc a reçu une seconde borne. Il n'est PAS exerçable
avant 3g, et c'est le point : nonEvLoads filtre etmvariableload | relay-router |
sg-ready, l'EV est décidé en proxy AVANT le waterfall, donc les deux bornes ne
partagent aucun budget et leur rang n'a aucun sens.

Le piège que Patrick signale est réel et il a une réponse observable : une wallbox
simulée peut obéir à une consigne sous son plancher là où du matériel refuserait. Le
discriminant est le MOTIF publié, que seul le scheduler peut émettre —
BELOW_MIN_POWER prouve que l'arbitre a refusé et qu'aucune commande n'est partie,
SURPLUS_SETPOINT avec setpointW < minPowerW prouve l'inverse, et une borne à 0 W sans
motif de plancher signifie que c'est le matériel qui a refusé, donc que le test ne
prouve rien.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XPUo3RMr8SzK6qbFtfBm8H
This commit is contained in:
Patrick Schurig 2026-08-26 10:55:36 +02:00
parent 639689baa9
commit c94e78a194

View File

@ -1,12 +1,16 @@
# SPEC — Modèle de charges (domaine × mécanisme)
Version : 0.2.1
Version : 0.2.2
Dépôt : `etm-powersync-energy-plugin-etm`
Statut : **intention de conception figée.** §3 (schéma persisté) est **en cours
d'implémentation** depuis le 2026-08-09 : `relay-router`, `etmvariableload` et
`sg-ready` sont trois charges utiles discriminées par `adapter`. Le reste du
document reste une intention.
> **0.2.2** — LM-1204-b : le scénario d'acceptation de 3g, avec son piège de simulateur et le
> motif qui le déjoue. Ajouté quand le banc a reçu une seconde borne — et **il reste
> inexerçable tant que 3g n'est pas fait**, ce qui est précisément ce qu'il mesure.
> **0.2.1** — spec relue et validée (Patrick, 2026-08-26). Deux décisions inscrites :
> l'extension du délestage au waterfall devient une **précondition de livraison** du §10 —
> écrite comme condition et non comme conseil — et la cible de confort est tranchée
@ -746,6 +750,40 @@ Le proxy actuel, qui décide du VE **en amont** du waterfall, ne peut pas produi
comportement : il n'a pas de notion de reliquat à passer. **C'est le plancher qui rend la
transplantation nécessaire, pas l'inverse.**
**LM-1204-b — Le scénario d'acceptation de 3g, à monter au banc.** *(Défini avec Patrick,
2026-08-26, quand le banc a reçu une seconde borne.)*
> **Il n'est PAS exerçable avant 3g**, et c'est le point : aujourd'hui `nonEvLoads` filtre
> `etmvariableload | relay-router | sg-ready`, l'EV est décidé **en proxy avant** le waterfall,
> les deux bornes ne partagent donc aucun budget avec le reste et **leur rang n'a aucun sens**.
> Ce scénario est le critère qui dira que 3g est fait.
1. **Budget insuffisant pour deux planchers.** Surplus ≈ 4 kW, deux bornes à ≈ 1,4 kW de
plancher (6 A monophasé). **Attendu** : la borne de rang supérieur servie à fond, la seconde
au reliquat — et **0 si le reliquat est sous son plancher**, jamais une part symbolique.
**Contre-exemple à ne surtout pas produire** : 2 kW à chacune, les deux sous leur plancher,
rien ne charge et le surplus part au réseau.
2. **Inversion de rang entre les deux bornes**, et la charge servie doit changer. C'est le
pendant EV de l'inversion ECS/SG-Ready déjà éprouvée.
**Le piège de simulateur, et comment le déjouer.** Une wallbox simulée acceptera peut-être une
consigne sous son plancher là où du matériel réel refuserait de démarrer. **Le plancher doit
être appliqué par l'ARBITRE, jamais constaté par le matériel** — sinon le test ne prouve que
l'obéissance du simulateur.
Le discriminant est le **motif publié**, et il est décisif parce que seul le scheduler peut
l'émettre :
| ce qu'on lit | ce que ça prouve |
|---|---|
| `BELOW_MIN_POWER {budgetW, minPowerW}` | **l'arbitre a refusé** — aucune commande n'est partie |
| `SURPLUS_SETPOINT` avec `setpointW < minPowerW` | l'arbitre a laissé passer : le plancher n'est **pas** appliqué |
| borne à 0 W sans motif de plancher | c'est le **matériel** qui a refusé — le test ne prouve rien |
**Ce qu'une wallbox simulée ne prouvera pas**, et qu'il ne faut pas déclarer vérifié : la
négociation de courant réelle, le délai d'établissement de la charge, et le comportement d'un
véhicule qui refuse.
**LM-1205 — La machinerie d'échéance existe déjà.** `needs { dailyDeadline, minEnergyWhPerDay }`
est ce qui avait motivé le proxy — la crainte que le waterfall ne sache pas exprimer « cette
voiture doit être chargée à 7 h ». Il sait : c'est le même champ que le plancher éco du §10