Je n'avais pas ouvert docs/mockups/ : les écrans ont été construits depuis le texte du brief seul, et l'écart est franc. Les maquettes du 2026-08-25 font autorité, elles sont désormais suivies. ÉCRANS DE MÉCANISME, refaits : - sélecteur de Things PAR NOM, filtré sur l'interface nymea (power / etmvariableload). Taper un UUID au doigt est une erreur garantie ET muette : la box accepte un UUID valide qui ne désigne rien, et la charge ne commande jamais rien. Le sélecteur grise les Things déjà pris — la box refuse en bloc un même Thing sur deux lignes — et signale en rouge un ThingId configuré qui n'existe plus sur la box ; - routeur de relais : ajout/retrait de contacteurs, puissance par ligne, et les paliers atteignables AFFICHÉS. Ils sont déduits (2^N combinaisons, doublons écartés), jamais enregistrés — la maquette est explicite là-dessus, ma note précédente disant l'inverse était une sur-interprétation du brief ; - SG-Ready : SG1/SG2 se choisissent EN HAUT, une fois, et la table des quatre états devient éditable — ce qui s'y coche est fermé/ouvert, et c'est ça qui devient relays[]. Les étiquettes SG1/SG2 sont une convention de l'écran (SG1 = fermé en état 1, SG2 = en état 3) et elles TOMBENT sur un encodage non standard, où les contacts s'affichent tels quels ; - modulable : plafond requis > 0, et l'avertissement que changer d'appareil crée une autre charge puisque l'identifiant EST le ThingId ; - temporisations minOnS/minOffS (et minStateHoldS pour la PAC) en pas de 30/60 s ; - « Compteur dédié » présent et GRISÉ, avec sa raison : aucun champ n'existe côté box, et inventer meterThingId ferait rejeter l'enregistrement de TOUTES les charges ; - « Inclure dans l'arbitrage » avec rang et domaine, et ce que la désactivation fait vraiment selon le mécanisme ; - validation AVANT envoi : relays[] vide, powerW ≤ 0, Thing en double, état 2 absent, maxPowerW ≤ 0. SetLoadConfig refuse en bloc et sans motif — laisser partir une config invalide condamne l'installateur à un refus muet qui perd tout l'appel. LISTE : - l'en-tête d'arbitrage et le tableau de budget, PERDUS à la fusion, sont rétablis. Sans eux « Alloué 3 000 W » ne se rattache à rien ; - le rang passe en pastille près de la poignée, et le sous-titre devient lisible : « Routeur de relais · 3 relais · min ON 60 s » au lieu de « Routeur de relais · rang 1 » ; - section « Recharge véhicule » : la borne n'est pas une LoadConfig, elle n'apparaissait donc NULLE PART — ce qu'un installateur qui vient de la régler lit comme une perte. MENU : l'entrée « Ordre de service des charges » est retirée ; elle pointait sur une redirection, donc sur le même écran sous deux noms. Tests 80/80, analyze 0 erreur. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HajXLUczEyZd22JeewRfff
etm_powersync_app
A new Flutter project.
Getting Started
This project is a starting point for a Flutter application.
A few resources to get you started if this is your first Flutter project:
For help getting started with Flutter development, view the online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.
Description
Languages
Dart
91.5%
C++
4.3%
CMake
3.3%
Swift
0.4%
HTML
0.3%
Other
0.2%