From 2ade62cf8b9c724013fc863673e16578195411dc Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Sun, 9 Aug 2026 11:36:38 +0200 Subject: [PATCH] =?UTF-8?q?docs(spec):=20spec=5Fecs=200.5.4=20=E2=80=94=20?= =?UTF-8?q?ECS-414,=20g=C3=A9n=C3=A9raliser=20l'=C3=A9chelle=20d'=C3=A9che?= =?UTF-8?q?c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ECS-410 n'est implémenté que par RelayRouter. SgReadyAdapter et EtmVariableLoadAdapter jettent toujours le ThingActionInfo* retourné par executeAction et gardent donc le défaut d'origine — annoncer un état non appliqué. Rattaché au lot de mise en configuration du SgReadyAdapter, qui vient ensuite et touche les mêmes fichiers. Les points d'accroche (clearFault, applySafeState) sont déjà déclarés ; seul le suivi asynchrone manque. Co-Authored-By: Claude Opus 5 (1M context) --- specs/spec_ecs.md | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/specs/spec_ecs.md b/specs/spec_ecs.md index 15be2b9..1f71638 100644 --- a/specs/spec_ecs.md +++ b/specs/spec_ecs.md @@ -1,6 +1,6 @@ # SPEC — ECS multi-palier -Version : 0.5.3 +Version : 0.5.4 Dépôt : `etm-powersync-energy-plugin-etm` (experience-plugin ems) Branche : `feature/beta-rulebased` Contrats faisant autorité : `docs/OPTIMIZER_PROTOCOL.md`, `docs/SAFETY.md`, `AGENTS.md` @@ -428,6 +428,21 @@ il est simplement ignoré. (`relayrouter.h:106`) et aucun état de relais n'est relu. Le palier courant DOIT être déduit de l'état réel des Things. +**ECS-414 — Généralisation de l'échelle d'échec.** ECS-410 n'est implémenté que +par `RelayRouter`. `SgReadyAdapter` (`sgreadyadapter.cpp:212`) et +`EtmVariableLoadAdapter` (`etmvariableloadadapter.cpp:134`) jettent toujours le +`ThingActionInfo*` retourné par `executeAction` : ils gardent le défaut d'origine +— annoncer un état non appliqué. + +L'échelle DOIT leur être étendue. `clearFault()` et `applySafeState()` sont déjà +déclarées sur ces adaptateurs, sans effet pour la première : le point d'accroche +existe, seul le suivi asynchrone manque. + +> **Rattaché au lot de mise en configuration du `SgReadyAdapter`**, qui vient de +> toute façon ensuite et touche les mêmes fichiers. Ce lot porte déjà sa propre +> précondition — retirer `Q_ASSERT(m_stateRelays.contains(2))` +> (`sgreadyadapter.cpp:36`) au profit d'un refus explicite, cf. ECS-110. + **ECS-413 — Désactivation en état sûr.** Désactiver une charge (`enabled: false`) ou la retirer de la configuration DOIT laisser son matériel dans l'**état sûr défini par son adaptateur**, et non dans son dernier état commandé. L'état sûr est @@ -588,9 +603,10 @@ mécanique reste **L0**. Perte de sonde → mode sans sonde, pas arrêt d'urgenc | ECS-305 | unitaire | `testEcsSwitchCount` — compteur par relais | | ECS-302 | unitaire | `testEcsSwitchCost` — non exercé par l'installation de référence ; à tester sur un câblage à encodages multiples | | ECS-304 | unitaire | `testEcsLevelsPure` | -| ECS-410 | simulation | `testEcsPartialFailure` | +| ECS-410 | simulation | `testEcsPartialFailure` — cible, retour arrière, arrêt total, défaut collant | | ECS-411 | simulation | `testEcsRestartRecovery` | | ECS-413 | simulation | `testEcsDisableLeavesSafeState` — + cas négatif : un rebuild sans désactivation ne coupe pas | +| ECS-414 | simulation | à écrire avec le lot SG-Ready en configuration | | ECS-110, ECS-111 | unitaire | `testEcsConfigValidation` — DOIT s'exécuter aussi en build release (`QT_NO_DEBUG`), sinon il ne prouve rien du binaire livré | | ECS-501, ECS-502 | simulation | `testEcsStageFault` | | ECS-601, ECS-602 | simulation | `testEcsTemperatureTarget` | @@ -661,6 +677,7 @@ protocole dans le même lot.** | 2026-08-08 | **Étape 1 OUVERTE** — trois exigences : ECS-306, ECS-411, ECS-412 | | 2026-08-08 | ECS-412 : au démarrage à froid, le verrou est **ARMÉ** (défaut sûr), jamais purgé | | 2026-08-09 | ECS-412 précisé : cet armement est **TRANSITOIRE** et posé paresseusement au premier `now`. Défaut de blocage circulaire constaté **au banc**, corrigé, couvert par `testEcsColdStartLockExpires` | +| 2026-08-09 | **ECS-414 créé** — généralisation d'ECS-410 à SgReady et EtmVariableLoad, rattachée au lot SG-Ready en configuration | | 2026-08-09 | **ECS-413 créé** — `enabled: false` laissait les relais fermés (constat de banc, juste avant une intervention de câblage). État sûr propre à chaque adaptateur ; ne s'applique PAS à un redémarrage de `nymead`, qu'ECS-411 couvre | | 2026-08-08 | ~~Câblage 500/1000/2000~~ — **donnée fausse**, corrigée le jour même (cf. ligne suivante) | | 2026-08-08 | ~~Câblage 500/1000/1500 (source simulateur)~~ — **donnée fausse** : le simulateur ne reflète pas l'installation |