From 7d3fc6e5ea86323ff96f1db4843942f429cd8d79 Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Mon, 8 Jun 2026 07:23:55 +0200 Subject: [PATCH] add adresse IP dans AGENTS.md --- AGENTS.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 1ce47c3..64ab3d1 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -131,6 +131,32 @@ avant validation du design de la phase. ## DÉCISIONS DE DESIGN (écarts et justifications) +### 3b révisé — délégation EV à l'amont (beta assumée) + +**Décision Patrick** : hybride étagé pour la beta. + +**En beta** : les décisions EV restent dans les méthodes amont +`planSurplusCharging` / `planSpotMarketCharging` (`SmartChargingManager`), inchangées. +`RuleBasedScheduler::getPlan()` les appelle en **proxy** et reformate leurs sorties +(`ChargingActions`) en `LoadAction` pour le log `[Arbitre]`. +`EvAdapter::applyAction()` est **inactif** jusqu'à 3g — mais `descriptor()` et +`telemetry()` sont utilisés dès maintenant pour le `SurplusContext`. + +**Pipeline ETM réel** (waterfall budget Surplus/Grid, `applyAction`) arrive en **3c** +pour les charges non-EV (ECS, SG-Ready), alimenté par le surplus *restant* après +déduction de l'`addedPower` des consignes EV du cycle courant (pas encore visible +au compteur). + +**Limitations beta assumées** : +- EV toujours prioritaire ; waterfall appliqué uniquement aux charges non-EV. +- Le classement drag-and-drop (priorités) ne portera que sur les charges non-EV. + +**Étape 3g (post-beta)** : transplantation réelle de la logique EV dans +`RuleBasedScheduler` → priorités libres entre toutes les charges (EV, ECS, SG-Ready, +batterie). + +--- + ### 3b-iii — EnergyArbitrator hérite de SmartChargingManager **Design validé en session** : "nouvelle classe dans etm/, n'étend pas SmartChargingManager". @@ -162,6 +188,28 @@ publique propre, l'héritage pourrait être remplacé par composition. --- +## MODÈLE DE SÉCURITÉ (décision Patrick — immuable) + +Cinq couches indépendantes. Chacune est conçue pour qu'une défaillance des couches +supérieures n'affecte pas les couches inférieures. Voir `docs/SAFETY.md` pour le détail. + +| Couche | Qui | Quoi | +|--------|-----|------| +| **L0** | Disjoncteur / Linky matériel | Coupure physique — hors logiciel | +| **L1** | Failsafe natif des bornes | Config installateur, checklist ETM | +| **L2** | Watchdog fraîcheur compteur (à coder en 3c) | `QTimer` piloté : si `lastMeterUpdate > 90 s` → mode dégradé (EV min/off, ECS off, pas de charge réseau batterie), `decisionReason` explicite, notification nymea. Scénario simulation dédié : "compteur muet → repli". | +| **L3** | Watchdog systemd sur nymead | Repo `etm-powersync-deploy`, hors scope ici | +| **L4** | Logique signal-driven existante | Boucle `update()` déclenchée par événements | + +**Règles de code** : +- Le watchdog L2 est piloté par **`QTimer`** (pas par signal `meterChanged`) pour + rester actif même si le signal ne fire plus. +- Mode dégradé = consignes **de repli** sur toutes les charges pilotées (pas d'arrêt + brutal) + `decisionReason` non vide + notification `EnergyManagerChanged`. +- `verifyOverloadProtection()` (L4) reste intouchable et appelée avant toute planification. + +--- + ## DÉFINITION DE FAIT (par étape de phase 3) 1. Compile amd64 et cross arm64.