docs(recap): la soirée du 2026-08-25 — lot C, vérifié sur appareil, et ce qui reste

Ce qui a été livré (6 commits), ce qui a été vérifié SUR L'APPAREIL contre .75, l'erreur de
la soirée — les écrans construits sans ouvrir docs/mockups/, tout à refaire — et les cinq
points repris demain matin, dont le glissement et le sélecteur de mécanisme que j'avais rendu
non cliquable à tort.

Renvoie au BRIEF_agent_plugin.md du dépôt plugin pour les sept constats côté moteur.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HajXLUczEyZd22JeewRfff
This commit is contained in:
Patrick Schurig 2026-08-25 23:42:12 +02:00
parent 3d2aab2b42
commit 798bf2bdb5

View File

@ -1,7 +1,89 @@
# RECAP — etm-powersync-app · reprise de session
> **Session 2026-08-25.** Branche **`feature/beta-add-config`**. Rien n'est poussé.
> **Session 2026-08-25.** Branche **`feature/beta-add-config`**, **poussée**.
> La section « État au 2026-06-30 » plus bas reste valable pour tout ce qu'elle décrit.
> La **soirée du 25** (lot C) est en tête ci-dessous ; le reste de la journée suit.
---
## Soirée 2026-08-25 — LOT C : les écrans de configuration par charge
### Ce qui a été livré
| Commit | Contenu |
|---|---|
| `2a8ad95` | **Lot C** — fusion des deux écrans, écrans de mécanisme, grisage par introspection |
| `f0aa0fd` | Harnais `integration_test` — l'IU sur le téléphone, contre `.75` |
| `98e2874` | Diagnostic de montage d'écran (MIUI bloquait l'installation) |
| `15a5263` | **L'IU tourne sur l'appareil** : chaîne complète vérifiée contre `.75` |
| `38475e0` | Compteurs réseau honnêtes + le sélecteur clair/sombre s'applique partout |
| `3d2aab2` | **Les écrans suivent enfin la maquette** — sélecteurs, table d'états, budget, borne |
- **L'écran « Ordre de service » a disparu** ; son chemin de données (`LoadConfigProvider`) a
migré dans « Rôles & appareils », jamais l'inverse. L'entrée de menu est retirée.
Les charges viennent de `GetLoadConfig`, plus de `LoadDescriptor` reconstruits depuis des
`EmsRole` — LM-201 interdit de toute façon de déclarer `dhw` **et** `heatPump` pour une PAC
sans ballon séparé.
- **Trois écrans de mécanisme** (routeur de relais / modulable / SG-Ready) avec sélecteurs de
Things **par nom** filtrés sur l'interface nymea, table d'états SG-Ready éditable
(SG1/SG2 choisis une fois, en haut), temporisations, « Compteur dédié » grisé avec sa
raison, « Inclure dans l'arbitrage », et **validation avant envoi**.
- **Grisage dérivé de `JSONRPC.Introspect`**, jamais codé en dur : trois états et non deux —
écrivable, `r:` (mesure, pas fonction manquante), absent — plus « inconnu » quand le schéma
n'a pas pu être lu.
- **`setChargingInfo()` était INOPÉRANT** : namespace `EnergyPlugin.*` inexistant, champs
`mode`/`targetSoc`/`endTime`/`minCurrent` au lieu de
`chargingMode`/`targetPercentage`/`endDateTime`. Vérifié par appel réel :
`Missing required key: chargingMode`. Corrigé, et le refus remonte désormais au lieu d'être
avalé pendant que l'état local mentait.
- **Tableau de bord** : « Depuis réseau » lisait l'**opposé** du compteur d'export au lieu de
`totalAcquisition` — 0,0 kWh en permanence. Et les deux tuiles disaient « aujourd'hui » sur
des compteurs cumulés. Corrigé, avec un plafond de plausibilité contre les valeurs
corrompues que la box publie (cf. brief plugin §1).
- **Thème** : 126 sites basculés vers les variantes contextuelles ; 9 restent en constante
(tables statiques sans `BuildContext`).
### Vérifié SUR L'APPAREIL, contre `.75`
```
[appareil] schéma lu — nymea 1.15.2+… · NymeaEnergy 0.8 · AirConditioning 1.1
[appareil] écran de configuration monté
[appareil] charges lues : [chauffe-eau, pac-terrain]
[appareil] écriture → LoadSaveState.confirmed
[appareil] libellé restauré : chauffe-eau
```
`adb shell input` est refusé par MIUI ; la voie qui marche est `integration_test`, qui
s'exécute **dans le processus de l'app**. Détail et pièges : `docs/RELEVE_LOTC.md` §2.
### L'erreur de la soirée, et sa leçon
**Les écrans ont d'abord été construits sans ouvrir `docs/mockups/`.** Les maquettes — dont
celle des mécanismes, mise à jour le soir même — étaient dans le dépôt et décrivaient
précisément tout ce qui manquait ensuite. Tout a été à refaire (`3d2aab2`).
**`docs/mockups/*.html` fait autorité sur la forme des écrans**, au même titre que
`INTERFACE_etmvariableload.md` sur le contrat.
### Ouvert — repris le 2026-08-26 au matin
1. **Le glissement (drag & drop)** ne semble rien produire. À départager : le geste est-il
avalé par le `ListView` parent, ou n'y a-t-il simplement rien à déplacer ? Sur `.75` il n'y
a **qu'une charge par domaine** — le test décisif est de mettre les deux dans le même
domaine.
2. **Le sélecteur de mécanisme est non cliquable**, et c'était mon choix — à tort : la maquette
le donne comme un champ enregistré (`enregistré · adapter`). À rendre actif, avec la
bascule de charge utile et l'avertissement de reconstruction.
3. Le chip de domaine s'affiche **sans libellé** sur la carte de charge.
4. Les **9 sites de couleur** hors thème (tables statiques, peintres).
5. **Zones de climatisation** : `ac_screen.dart` n'appelle aucune méthode `AirConditioning`,
ses 4 pièces sont des constantes de maquette, et `.75` déclare zéro zone. Le câblage est un
lot en soi — la box, elle, expose **8 méthodes toutes en écriture**.
### Pour l'agent plugin
Sept constats côté moteur : `BRIEF_agent_plugin.md` dans le dépôt **plugin**. Le plus visible
est le §1 — les compteurs cumulés d'`Energy.GetPowerBalance` sont corrompus (9,1 × 10³³ kWh),
alors que le Thing compteur est sain.
---