docs(recap): reprise de 3g-1 — le code est complet, rien n'est déployé

Session arrêtée sur contexte saturé. Le paquet 1.15.2+etm21 est CONSTRUIT mais le banc
tourne encore etm20 : la transplantation n'a jamais tourné une seule fois, sur un banc
qui porte une Terra AC réelle. C'est la première chose à faire, et LM-1204-b avec.

Le RECAP porte la commande exacte de reprise, les cinq points à vérifier au
redéploiement, et ce qui reste ouvert — dont la bascule 0,4 / 0,9 devenue possible
depuis que SunSpec déclare energystorage, et jamais faite.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XPUo3RMr8SzK6qbFtfBm8H
This commit is contained in:
Patrick Schurig 2026-08-26 18:04:48 +02:00
parent 1478d8f11c
commit 0b216f99a8

87
docs/RECAP_3g.md Normal file
View File

@ -0,0 +1,87 @@
# RECAP — reprise de session, 3g-1
**Arrêt** : 2026-08-26, contexte saturé. **Branche** : `feature/beta-rulebased`.
**Dernier commit** : `1478d8f` — *feat(3g-1) : les bornes entrent dans le waterfall*.
---
## 1. État exact à la reprise
| | |
|---|---|
| Code 3g-1 | **complet**, compile 0 erreur / 0 warning, `tests/auto/loadmodel` 15/15 |
| Paquet `1.15.2+etm21` | **construit** dans le conteneur, à `/root/powersync-energy-plugin-nymea_1.15.2+etm21_arm64.deb` |
| Déployé sur `.75` | **NON** — le banc tourne encore `1.15.2+etm20` |
| Critère LM-1204-b | **NON exercé** — c'est la première chose à faire |
**Reprendre exactement ici** :
```bash
# 1. sortir le paquet du conteneur
lxc exec build-cross-arm64 -- cat /root/powersync-energy-plugin-nymea_1.15.2+etm21_arm64.deb > /tmp/etm21.deb
# 2. déployer
cd ~/projects/etm-powersync/etm-powersync-deploy && ./deploy.sh /tmp/etm21.deb
# 3. exercer LM-1204-b (specs/spec_loadmodel.md)
```
---
## 2. Ce que 3g-1 contient
**Les bornes entrent dans le waterfall.** Elles partagent le budget, décrémentent la cascade,
et portent un rang qui a enfin un sens.
Le défaut corrigé n'était pas théorique : `planSurplusCharging()` calculait l'allocation **une
fois avant la boucle** et ne la décrémentait jamais — chaque borne recevait la **totalité** du
surplus. Le rattrapage venait du compteur au cycle suivant, pas de l'arbitrage.
Trois motifs EV **supprimés** (pas remplacés) : `EV_SURPLUS` → `SURPLUS_SETPOINT`, `EV_ECO_MIN`
→ le **plancher** du §12, `EV_IDLE` → `BELOW_MIN_POWER` / `SURPLUS_INSUFFICIENT`.
**Restent au proxy, délibérément** : échéance de départ, spot market, protection de surcharge,
estimation de SoC. `evReservedW` est **restreint** au financement réseau, pas supprimé.
---
## 3. À vérifier en priorité au redéploiement
> **3g-1 touche le chemin EV en production sur un banc avec une Terra AC réelle.** Rien de
> tout ceci n'a encore tourné une seule fois.
1. **LM-1204-b** — surplus ≈ 4 kW, deux bornes à ≈ 1,4 kW de plancher. Attendu : la première
servie à fond, la seconde à 0 si le reliquat est sous son plancher. **Discriminant : le
motif publié** — `BELOW_MIN_POWER` prouve que l'arbitre a refusé ; une borne à 0 W *sans*
motif de plancher prouve que c'est le matériel, donc que le test ne prouve rien.
2. **Inversion de rang** entre les deux bornes → la charge servie doit changer.
3. **`loads[]` contient-il les bornes**, et la somme des `allocatedW` retombe-t-elle sur
`budget.allocatedW` ? (Ce n'était pas vrai avant 3g-1 — c'est le changement de contrat.)
4. **Le nombre de phases** : vérifier que le plancher publié correspond au nombre **visé**.
C'est le piège le plus silencieux du lot.
5. **Aucune double commande** : une borne servie par l'échéance ne doit pas recevoir en plus
une allocation de surplus (`gridFundedEvs`).
---
## 4. Ce qui reste ouvert
- **§12 / `BELOW_MIN_POWER` sur le banc** : ✅ observé le 2026-08-26 —
`chauffe-eau 0 W {budgetW: 249, minPowerW: 500}` et le budget a cascadé vers la PAC.
- **`BATTERY_RESERVE`** : observé, **et corrigé à cette occasion** — il était publié avec
`withheldW: 0` sur un surplus négatif. Conditionné à `withheldW > 0` depuis. **La correction
n'a pas été revérifiée sur machine.**
- **Bascule `batteryLevelConsideration` 0,4 / 0,9** : jamais faite avec une batterie visible.
Elle est possible depuis `nymea-plugin-sunspec-etm01 1.15.2+etm11`, qui déclare enfin
`energystorage`. **Le banc est resté à 0,9.** À faire dans les deux sens, journaux à l'appui.
- **§10 éco/confort** : ne part pas sans l'extension du délestage au waterfall (précondition
écrite, `specs/spec_loadmodel.md` §10).
- **Brief ouvert chez le plugin SunSpec** : `etm-powersync-plugins-modbus`,
`BRIEF_sunspec_energystorage.md` — la partie `energystorage` est faite ; la **question §5**
(l'onduleur ne publie aucun cumul, ce qui gèle `totalProduction`) reste ouverte.
---
## 5. Documents à lire à la reprise, dans cet ordre
1. `docs/DESIGN_3g.md` — ce qui se transporte et les trois choses qui ne se transportent pas.
2. `specs/spec_loadmodel.md` §12 (plancher), LM-1203-b (réserve annulée), LM-1204-b (critère).
3. `docs/RELEVE_LOTD.md` — la méthode de relevé attendue : machine / test / lecture, distingués.