From 43fd79ad62fbf50b2cccb598a8aa18c173700580 Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Sun, 30 Aug 2026 09:16:04 +0200 Subject: [PATCH] =?UTF-8?q?feat(=C3=A9cran):=20=C2=AB=20Command=C3=A9,=20p?= =?UTF-8?q?as=20encore=20mesur=C3=A9=20=C2=BB=20remplace=20=C2=AB=20R?= =?UTF-8?q?=C3=A9serv=C3=A9=20au=20v=C3=A9hicule=20=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le moteur a livré la définition d'`evReservedW`, et il ne pouvait pas l'écrire avant d'en avoir sorti la part réseau d'`EV_GRID_START` : un champ à deux natures ne se documente pas. Le libellé tranché est le sien, parce qu'il dit la chose — la latence entre l'ordre et sa lecture au compteur. « Réservé au véhicule » affirmait deux faussetés : que c'est réservé, et que ça regarde le véhicule plutôt que la latence de sa mesure. La clé ARB garde le nom du champ de la box (`budgetEvReserved`), pas celui de l'ancienne affirmation. Et la consigne qui compte reste écrite à côté : ce n'est pas un registre, on ne réconcilie rien dessus — la nature du champ l'interdit, pas son état de livraison. `draw.committedW` : annoncé livré en +etm31, NON vérifié à la sonde. La box porte `powersync-energy-plugin-nymea 1.15.2+etm30` au 2026-08-30 et ne publie aucune clé `draw`. L'exception `EV_GRID_START` reste donc dans `surplusShareW` : c'est la sonde qui autorise le retrait, pas l'annonce. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01GKM8FDNHZWogAsjjfB8pSw --- CLAUDE.md | 19 ++++++++++++++----- .../deux_passes_eco_confort_mockup.html | 10 ++++++---- lib/l10n/app_fr.arb | 5 ++++- lib/l10n/app_localizations.dart | 6 +++--- lib/l10n/app_localizations_fr.dart | 2 +- 5 files changed, 28 insertions(+), 14 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index b49fc70..eaefafa 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -269,11 +269,20 @@ plan, pas de financement. > 🔴 **Et il n'y a d'identité que de ce côté-là.** Une charge financée au réseau ne vit > **nulle part** : `budget.evReservedW` n'est pas un registre d'allocation mais un **terme de -> correction** du budget, qui mêle la correction « commandé non encore mesuré » à la part -> réseau d'`EV_GRID_START` — 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. Constaté par le moteur le -> 2026-08-30 en câblant R3. Les watts achetés n'auront de registre qu'avec -> `draw.committedW`, préalable à R3. **Ne réconcilier aucun total sur `evReservedW`.** +> correction** du budget — « **commandé, pas encore mesuré** », la latence entre l'ordre et +> sa lecture au compteur. Sur `+etm30` il mêle encore à cela la part réseau d'`EV_GRID_START`, +> et une borne au réseau qui tire déjà ce qu'on lui a commandé y contribue **0** alors que son +> `targetW` vaut 7 000 W. **Ne réconcilier aucun total dessus, jamais** — la nature du champ +> l'interdit, pas son état de livraison. +> +> Le libellé d'écran est **« Commandé, pas encore mesuré »** (2026-08-30). « Réservé au +> véhicule » affirmait deux faussetés : que c'est réservé, et que ça regarde le véhicule +> plutôt que la latence de sa mesure. +> +> Les watts achetés n'auront de registre qu'avec **`draw.committedW`**, préalable à R3. +> Annoncé livré en `+etm31` — **non vérifié à la sonde** : le 2026-08-30 la box porte +> `powersync-energy-plugin-nymea 1.15.2+etm30`, et aucune clé `draw` n'apparaît dans la +> télémétrie. Le niveau publié est `"comfort"` et ce **n'est pas un rebaptisage** : c'est bien la passe qui, au §10, servira le confort depuis le surplus. Un niveau à `targetW: 0` est une passe diff --git a/docs/mockups/deux_passes_eco_confort_mockup.html b/docs/mockups/deux_passes_eco_confort_mockup.html index 4b9e80d..a2169b5 100644 --- a/docs/mockups/deux_passes_eco_confort_mockup.html +++ b/docs/mockups/deux_passes_eco_confort_mockup.html @@ -422,10 +422,12 @@ setpointW, currentA), qui existe déjà aujourd'hui.
  • Et il ne se répartit pas non plus. L'écart appartient à la charge, pas à un niveau : l'adaptateur arrondit une consigne unique, il ne sait pas de quel besoin elle venait.
  • -
  • * « Réservé VE » n'est pas une destination — c'est un terme de correction du budget - (constaté par le moteur le 2026-08-30). Il est affiché parce que la box le publie, jamais sommé, et - son libellé actuel affirme une réservation qui n'a pas lieu : il attend une définition du moteur pour - être réécrit. Les watts achetés, eux, n'ont de registre qu'avec draw.committedW.
  • +
  • * « Commandé, pas encore mesuré » — et ce n'est pas une destination. Le champ + budget.evReservedW est un terme de correction : la latence entre l'ordre et sa + lecture au compteur. Il est affiché parce que la box le publie, jamais sommé. Son ancien + libellé, « Réservé au véhicule », affirmait deux faussetés — que c'est réservé, et que ça regarde le + véhicule plutôt que la latence de sa mesure ; réécrit le 2026-08-30 sur la définition livrée par le + moteur. Les watts achetés, eux, n'ont de registre qu'avec draw.committedW.
  • Le bandeau ◆ n'apparaît que si au moins une charge porte une obligation éco. Sans obligation, il n'y a qu'une passe utile et la phrase serait du bruit (LM-1007).
  • diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index 602fb90..dbe84cb 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -127,7 +127,10 @@ "telemetryBudgetTitle": "Budget de surplus du cycle", "telemetryBudgetAbsent": "Aucun budget publié pour ce cycle : la planification est suspendue.", "budgetSurplus": "Surplus entrant", - "budgetEvReserved": "Réservé au véhicule", + "budgetEvReserved": "Commandé, pas encore mesuré", + "@budgetEvReserved": { + "description": "budget.evReservedW. Le libellé précédent, « Réservé au véhicule », affirmait deux choses fausses : que c'est réservé, et que ça concerne le véhicule plutôt que la LATENCE de sa mesure. Définition livrée par le moteur le 2026-08-30, après que la part réseau d'EV_GRID_START en a été retirée — un champ à deux natures ne se documente pas. Ce n'est PAS un registre d'allocation : ne rien réconcilier dessus. La clé garde le nom du champ de la box, pas celui de l'ancienne affirmation." + }, "budgetRecredited": "Recrédité", "budgetAllocated": "Alloué", "budgetRemaining": "Reliquat", diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index bfd45e5..fe2aa5d 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -409,10 +409,10 @@ abstract class L10n { /// **'Surplus entrant'** String get budgetSurplus; - /// No description provided for @budgetEvReserved. + /// budget.evReservedW. Le libellé précédent, « Réservé au véhicule », affirmait deux choses fausses : que c'est réservé, et que ça concerne le véhicule plutôt que la LATENCE de sa mesure. Définition livrée par le moteur le 2026-08-30, après que la part réseau d'EV_GRID_START en a été retirée — un champ à deux natures ne se documente pas. Ce n'est PAS un registre d'allocation : ne rien réconcilier dessus. La clé garde le nom du champ de la box, pas celui de l'ancienne affirmation. /// /// In fr, this message translates to: - /// **'Réservé au véhicule'** + /// **'Commandé, pas encore mesuré'** String get budgetEvReserved; /// No description provided for @budgetRecredited. @@ -469,7 +469,7 @@ abstract class L10n { /// **'Borne : état non publié ce cycle'** String get telemetryEvStateUnknown; - /// funding == « grid » : l'allocation vit dans budget.evReservedW, pas dans budget.allocatedW. Sans cette mention, l'utilisateur voit une charge servie alors que le surplus est nul et croit à un défaut. + /// funding == « grid » : l'allocation est hors de budget.allocatedW, et sans registre où la retrouver (evReservedW est une correction du budget, pas une destination — constaté 2026-08-30). Sans cette mention, l'utilisateur voit une charge servie alors que le surplus est nul et croit à un défaut. /// /// In fr, this message translates to: /// **'Financée au réseau (échéance ou tarif dynamique) — hors budget de surplus'** diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart index 36baf16..e31e113 100644 --- a/lib/l10n/app_localizations_fr.dart +++ b/lib/l10n/app_localizations_fr.dart @@ -212,7 +212,7 @@ class L10nFr extends L10n { String get budgetSurplus => 'Surplus entrant'; @override - String get budgetEvReserved => 'Réservé au véhicule'; + String get budgetEvReserved => 'Commandé, pas encore mesuré'; @override String get budgetRecredited => 'Recrédité';