chore(release): 1.15.2+etm29

ECS-111 défini et corrigé — le premier défaut réel exhumé par l'index des règles.

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-29 13:27:25 +02:00
parent 2a7bb1cce9
commit a96daf0734

View File

@ -1,3 +1,47 @@
powersync-energy-plugin-nymea (1.15.2+etm29) trixie; urgency=medium
* ECS-111 DÉFINI ET CORRIGÉ — un relais déclaré qui manque au registre nymea rend la charge
INDISPONIBLE. Le comportement était « non défini » depuis l'écriture de la spec :
findConfiguredThing rendait nullptr, writeRelay loguait et continuait, telemetry() SAUTAIT le
relais. Deux issues, toutes deux fausses — ou bien plus aucun relais actif ne mesurait et
l'on retombait sur le nominal du PALIER ENTIER, part du relais fantôme comprise ; ou bien des
survivants mesuraient et l'on publiait une somme SOUS-ÉVALUÉE.
* Ce n'était pas un défaut d'affichage. telemetry().currentPowerW alimente le recrédit
anti-clignotement, donc le BUDGET : l'arbitre se trompait sur le surplus disponible pendant
qu'available restait vrai. Un mensonge qui décide, pas un mensonge qui s'affiche.
* La règle retenue est celle de la famille : available faux, faultCode THING_MISSING, et le
traitement d'ECS-410 — sortie de l'ARBITRAGE, maintien dans la COMPTABILITÉ, figée à la
puissance crue engagée. La puissance est donc RETIRÉE du budget des charges suivantes au lieu
de leur être recréditée. Aucune somme partielle n'est jamais publiée.
* Écartée : « compter 0 W et servir le reste ». Un relais absent du registre est un Thing
supprimé ou un plugin qui ne le voit plus — on ne sait pas dans quel état est le contact, et
servir le reste reviendrait à commander une charge dont on ne connaît plus la configuration
matérielle.
* Jugé sur TOUS les relais déclarés, jamais sur ceux du palier courant : au palier 0 aucun n'est
fermé, et juger là-dessus ferait basculer la disponibilité au rythme du thermostat. Même règle
que deviceMeasurement(), qui traitait DÉJÀ le cas correctement en rendant source: "none" —
aligner l'ancien sur le neuf, pas inventer une politique.
* THING_MISSING prime sur WRITE_FAILED dans runtimeView() : un relais absent EXPLIQUE les
écritures qui échouent, et annoncer WRITE_FAILED enverrait l'opérateur au bus quand la cause
est dans la configuration. Corollaire écrit : ClearLoadFault lève le défaut d'ÉCRITURE mais ne
fait pas exister un Thing — les deux causes se lisent séparément.
* testEcsPartialFailure a dû être ajusté, et c'est instructif : il se servait d'un relais JAMAIS
CONFIGURÉ comme raccourci pour forcer un échec d'écriture. Le raccourci a désormais un sens
propre. Le test distingue maintenant les deux — le défaut collant se lève, le câblage
manquant non.
* Éprouvé par testVanishedRelayFreezesTheLoad, vérifié échouant sans le correctif, dont la
troisième assertion est celle qui compte : ce que le fantôme laissait aux charges SUIVANTES.
* TROUVÉ PAR LA LECTURE D'UNE RÈGLE, ni par un test ni par le banc. ECS-111 dormait dans une
table de statut supprimée depuis, et est ressortie dans les quatorze règles « spécifiées
seules en territoire livré » que tools/gen-rules.py a listées. Premier défaut réel exhumé par
le chantier de documentation.
* Passe aussi : trois citations de règles ajoutées (LM-400, LM-301-b, LM-600), quatre règles
passées en cadrage, et la classe « cadrage » elle-même — 70 « spécifiée seule » au départ,
33 aujourd'hui. Suite complète : simulation 33/33, charging 16/16, loadmodel 20/20,
spotmarket 7/7. amd64 0 erreur / 0 avertissement, doxygen 0 avertissement.
-- Patrick Schurig <etm.schurig@gmail.com> Sat, 29 Aug 2026 15:05:00 +0200
powersync-energy-plugin-nymea (1.15.2+etm28) trixie; urgency=medium
* LE RATTRAPAGE DE CONFIGURATION EST CYCLIQUE (LM-1209-e). provisionEvChargerConfig() vivait