docs: RECAP session 2026-08-25 + accès ssh banc .75
Point d'arrêt avant redémarrage machine. Consigne l'état du lot B app, le bloqueur (lot plugin non déployé sur .75), le partage vérifié/non-vérifié, et la question ouverte sur la fusion /energy/setup ↔ /energy/loads. Note l'accès ssh au banc désormais documenté dans CLAUDE.md : il lève la limite qui rendait le critère 7-1bis (non-reconstruction des adaptateurs) invérifiable faute de journal. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
7ca42973f2
commit
bb77039c82
@ -3,6 +3,11 @@
|
||||
|
||||
---
|
||||
|
||||
# ssh banc .75
|
||||
Accès banc `.75` : ssh etm@192.168.1.75 (clé déjà installée).
|
||||
Ni root ni nymea n'existent. Journal : journalctl -u nymead.
|
||||
---
|
||||
|
||||
## Mon rôle
|
||||
Interface utilisateur Flutter du HEMS ETM-PowerSync.
|
||||
Je communique **exclusivement via JSON-RPC nymea port 4444**.
|
||||
|
||||
102
RECAP.md
102
RECAP.md
@ -1,5 +1,107 @@
|
||||
# RECAP — etm-powersync-app · reprise de session
|
||||
|
||||
> **Session 2026-08-25.** Branche **`feature/beta-add-config`**. Rien n'est poussé.
|
||||
> La section « État au 2026-06-30 » plus bas reste valable pour tout ce qu'elle décrit.
|
||||
|
||||
---
|
||||
|
||||
## Session 2026-08-25 — ce qui a été fait
|
||||
|
||||
### Commits ajoutés
|
||||
| Commit | Contenu |
|
||||
|---|---|
|
||||
| `7ca4297` | **Lot B app** — ordre de service des charges, locale, ossature i18n |
|
||||
| `40ac3b2` | Fixtures : dump réel `GetLoadConfig` + schéma introspecté de `.75` |
|
||||
|
||||
### 1. Menus (demande initiale)
|
||||
- « Rôles & appareils » et « Options développeur » → **section MODE INSTALLATEUR** uniquement.
|
||||
- Groupes / Scènes / Médias / Garages → **masqués par défaut**. Le drawer lit désormais
|
||||
`AppSettingsProvider.visibleScreens` (ces 4 écrans y étaient **déjà** à `visible: false` ;
|
||||
le drawer les affichait en dur et ignorait le réglage).
|
||||
- Garde de routeur `_isInstallerRoute` (`main.dart:41`) : `/settings/system*`,
|
||||
`/settings/app/developer`, `/energy/setup`, `/energy/loads` → redirection vers `/` si le
|
||||
mode installateur est verrouillé. Couvre l'URL directe, le deep-link et l'auto-lock 10 min.
|
||||
- Liens SUPPORT corrigés : doc → `https://docs.etm-powersync.fr/`, Telegram →
|
||||
`https://t.me/etm_powersync_support`, **Discord retiré** (commenté sur place).
|
||||
|
||||
### 2. Investigations rendues (constats factuels, pas de code)
|
||||
- **Locale nymea** : gérée **PAR CONNEXION** (`o:locale` dans `Hello`,
|
||||
`m_clientLocales`). Pas de forçage `LANG`/`LC_ALL` dans l'unité systemd. **Mais** sur 784
|
||||
chaînes affichables de `.75`, l'allemand en change **1**, le français **0** : aucun
|
||||
catalogue `.qm` fr n'est livré. Les `displayName` = identifiants anglais.
|
||||
- **Frontière RPC / runtime de l'arbitre** : quasi rien ne sort. Seuls `degradedMode`
|
||||
(notification `ChargingSchedulesChanged` **uniquement** — pas relisable par `Get`), les
|
||||
deux ratios d'énergie, `chargingState` de l'EV et le plan de recharge franchissent.
|
||||
Allocation, budget, verrous, paliers, `available`, motifs : **journal seulement**.
|
||||
`SurplusContext` / `LoadContextTelemetry` n'ont aucune sérialisation sortante.
|
||||
|
||||
### 3. Lot B app — livré
|
||||
- `models/load_config_entry.dart` — **vue en lecture** au-dessus de la map brute ; écriture
|
||||
par `patched()` depuis la map d'origine, jamais de re-sérialisation.
|
||||
- `services/load_priority.dart` — `groupByDomain` / `flattenToPayload` /
|
||||
`applyDefaultDomainOrder` / miroir client de `validateSet()`.
|
||||
- `providers/load_config_provider.dart` — séquence `pending → LoadConfigChanged →
|
||||
confirmed|diverged`. Ne conclut jamais sur l'acquittement du RPC.
|
||||
- `screens/energy/load_order_screen.dart` — route `/energy/loads`, gatée installateur.
|
||||
- i18n : `flutter_localizations` + `intl` + `lib/l10n/app_fr.arb` + `l10n.yaml`.
|
||||
Extension `context.l10n`. Français seul.
|
||||
- `NymeaEnergy.GetLoadConfig` / `SetLoadConfig` deviennent **réels** (c'étaient des stubs).
|
||||
- **Locale** envoyée à chaque `Hello`, demandée + retenue journalisées.
|
||||
|
||||
### 4. ⚠️ Piège désamorcé — à ne pas réintroduire
|
||||
`EnergySetupProvider.persist()` appelait `setLoadConfig(buildLoadDescriptors())`, une
|
||||
**reconstruction depuis le modèle typé**, et `_commit()` l'appelle à chaque changement d'UI.
|
||||
Inoffensif tant que le RPC était un stub ; destructeur une fois réel (`SetLoadConfig`
|
||||
remplace **tout l'ensemble** → la charge `chauffe-eau` de `.75` aurait été écrasée).
|
||||
**Émission débranchée**, raison documentée sur place.
|
||||
|
||||
---
|
||||
|
||||
## ⛔ BLOQUEUR PRINCIPAL À LA REPRISE
|
||||
|
||||
**Le lot plugin `brief-plugin-lotB-telemetrie.md` n'est PAS déployé sur `.75`.**
|
||||
Introspect au 2026-08-25 : toujours **19 méthodes / 13 notifications**.
|
||||
|
||||
```
|
||||
GetLoadTelemetry : ABSENT
|
||||
LoadTelemetryChanged : ABSENT
|
||||
o:domain : ABSENT du schéma SetLoadConfig
|
||||
```
|
||||
|
||||
Conséquence : critères **4 à 8** du brief lot B hors d'atteinte (domaine, télémétrie
|
||||
vivante, fraîcheur, défaut/`ClearLoadFault`, code inconnu réel). Tant que ce lot n'est pas
|
||||
sur la box, **il n'y a plus rien d'utile à faire côté app sur ce périmètre**.
|
||||
|
||||
## Vérifié / non vérifié (lot B app)
|
||||
|
||||
| Critère | Statut |
|
||||
|---|---|
|
||||
| §7-1 aller-retour neutre | ✅ **sur `.75` en vrai** — `SetLoadConfig` verbatim → relecture identique |
|
||||
| §7-1bis non-rebuild ECS-412 | ⚠️ lecture de code seulement (`sameHardware()`), journal non consulté |
|
||||
| §7-2 aplatissement réversible | ✅ **test unitaire seul** — `.75` n'a qu'une charge |
|
||||
| §7-3 config non contiguë | ✅ **test unitaire seul** — fixture synthétique |
|
||||
| §7-4 à §7-8 | ❌ bloqués (lot plugin) |
|
||||
| §7-9 locale | ✅ protocole vérifié sur `.75` ; ⚠️ **chemin app jamais exécuté sur appareil** (adb refusé) |
|
||||
| §7-10 analyze / tests / gating | ✅ 25 issues = ligne de base, 30/30 tests |
|
||||
|
||||
## Question ouverte à trancher
|
||||
|
||||
Le brief désignait « Rôles & appareils » (`/energy/setup`) comme écran cible, mais cet écran
|
||||
est bâti sur le modèle **inverse** (il construit des `LoadDescriptor` depuis des `EmsRole`).
|
||||
J'ai créé `/energy/loads` à côté et laissé `/energy/setup` intact. **Fusionner les deux est
|
||||
une refonte, pas un câblage** — décision Patrick attendue.
|
||||
|
||||
## Nouveauté à exploiter à la reprise
|
||||
|
||||
`CLAUDE.md` documente désormais l'accès banc : `ssh etm@192.168.1.75` (clé installée),
|
||||
journal via `journalctl -u nymead`. **Cela lève la limite qui rendait §7-1bis invérifiable**
|
||||
— au prochain aller-retour neutre, lire le journal pour confirmer qu'aucune reconstruction
|
||||
d'adaptateurs n'a lieu.
|
||||
|
||||
---
|
||||
|
||||
# RECAP — etm-powersync-app · reprise de session
|
||||
|
||||
> État au 2026-06-30. Branche **`feature/beta-add-config`** (9 commits au-dessus de `master`).
|
||||
> **Rien n'est poussé** (push différé). **Aucun merge** vers master/silo.
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user