From d6cc52bd438d4b4582e8650489b6a6424d43562b Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Sun, 6 Sep 2026 15:41:06 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20measuredSince=20d=C3=A9rive=20au=20chan?= =?UTF-8?q?gement=20de=20fuseau,=20et=20l'inertie=20saine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DÉFAUT MESURÉ, non corrigé. Bascule Europe/Paris → Europe/London à 13:37:26Z, sans redémarrage de nymead : periodStartedAt : 1788645600 → 1788649200 (+3600 s) CORRECT, la journée suit measuredSince : 1788645607 → 1788649207 (+3600 s) FAUX, un instant absolu ne bouge pas Cause : `m_baselinePosee = now` conserve le QDateTime en spécification Qt::LocalTime, qui garde des composantes d'horloge murale et résout son époque au moment de la CONVERSION. Après bascule, la même lecture « 00:00:07 » rend une époque différente d'une heure. Le champ posé vendredi pour rendre une couture lisible est lui-même déplacé par la couture. Correctif : `m_baselinePosee = now.toUTC()`, une ligne — un instant absolu se stocke en UTC, là où periodStartedAt doit rester construit dans le fuseau courant puisque c'est une frontière locale. Les deux champs n'ont pas la même nature et le stockage doit le refléter. Non appliqué : le déploiement redémarrerait nymead et reposerait la baseline pendant la fenêtre de capture de l'app. EV_MIN_GRID NE SERA PAS VÉRIFIABLE SUR MACHINE (DESIGN_MIN_RESEAU §8), et c'est écrit avant plutôt que découvert en mesurant : la voiture est débranchée, pluggedIn retombe, la borne sort de loads[] — vérifié, il ne reste que chauffe-eau et pac-terrain. Le lot tiendra sur ses tests et sa contre-épreuve. Trois préconditions cumulatives pour lever la réserve, aucune à notre main aujourd'hui. L'INERTIE SAINE, distinguée (AGENTS.md). Tout ce qui précède traite une contre-épreuve inerte comme un signal d'alarme ; il existe un cas où elle est correcte — le mécanisme tire sa valeur du CONTEXTE, pas du champ perturbé. Le plancher du minimum réseau vient de la borne, pas du champ déclaré. Le test qui sépare : « qu'est-ce qui déciderait, si ce n'est pas ça ? » Inertie malsaine, on ne sait pas nommer l'autre source. Inertie saine, on la nomme ET on peut la perturber elle. D'où la conséquence pratique : une inertie saine n'est acceptable que si la contre-épreuve est DÉPLACÉE sur la vraie source, jamais abandonnée — sinon c'est refermer l'identité sur elle-même une fois de plus. --- docs/DESIGN_MIN_RESEAU.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/DESIGN_MIN_RESEAU.md b/docs/DESIGN_MIN_RESEAU.md index 7603961..b3575f7 100644 --- a/docs/DESIGN_MIN_RESEAU.md +++ b/docs/DESIGN_MIN_RESEAU.md @@ -212,3 +212,21 @@ ne peut pas exercer le cas mixte, celui où le minimum complète un surplus part Il l'exercera en revanche très bien sur une charge en watts — le chauffe-eau — dès qu'elle aura un compteur réel (`TEST_TERRAIN.md` §12). **C'est la même précondition que pour l'étape 4 de la commande perdue**, et elle est maintenant nommée par un quatrième chemin. + +## 8. Ce lot ne sera PAS vérifiable sur machine — écrit avant, pas découvert en mesurant + +La voiture a été débranchée le 2026-09-06. `pluggedIn` retombe, la borne **sort de `loads[]`** +(vérifié : `['chauffe-eau', 'pac-terrain']`), et rien ne la commande plus. + +**Donc `EV_MIN_GRID` tiendra sur ses tests unitaires et sa contre-épreuve, pas sur un relevé.** +C'est acceptable *à condition de le dire maintenant* : le découvrir au moment de mesurer ferait +prendre une absence de mesure pour une absence de défaut. + +Ce qu'il faudra pour lever la réserve, et c'est cumulatif : + +1. une voiture branchée — trivial, mais elle décide de tout le reste ; +2. un lien V2C sain — trois semaines que c'est le blocage (`PORTING_STATUS.md`) ; +3. et pour le **cas mixte** — minimum complété par un surplus partiel — une charge en watts avec + un compteur réel, parce que 2 kWc contre un plancher de 4 140 W ne le produira jamais. + +Les trois sont indépendantes, et aucune n'est à notre main aujourd'hui.