# Prompt agent plugin — 3g-2 : l'arbitre commande seul > À coller tel quel dans l'agent `powersync-plugin`. > Contexte : `.75` en `1.15.2+etm22`, seuil de réserve batterie à 0,4. --- **3g-2 — l'arbitre commande seul.** Aujourd'hui `adjustEvChargers()` re-décide après le waterfall : l'arbitre refuse, la ligne suivante commande 6 A. La transplantation ne commande donc rien, et si la Terra AC n'avait pas été hors ligne, l'ordre serait parti sur du matériel réel. **La règle à établir : une charge, un commandeur.** Pour une borne arbitrée par le waterfall, `adjustEvChargers()` ne doit plus émettre d'action de surplus. Ce qui lui reste, et qui doit être délimité explicitement : les actions **financées au réseau** — marché de gros, échéance de départ — puisque l'échéance est restée au proxy par décision assumée. Le champ `funding` que tu viens d'ajouter est le discriminant naturel. **Deux pièges à ne pas laisser ouverts.** Le trou de commande : si le waterfall alloue et que le proxy ne commande plus, vérifie que **quelqu'un commande**. Le pire résultat serait une borne qui n'obéit à personne — l'arbitre croit avoir servi, rien ne se passe, et le budget est perdu comme dans le cas `evFloorW`. La transition : une borne qui charge sous l'ancien régime au moment du déploiement ne doit pas rester bloquée dans un état commandé par un chemin qui n'existe plus. Même précaution qu'à la suppression du bloc SG-Ready codé en dur — passer par l'état sûr. **Traite `evFloorW()` dans le même lot.** `acquisitionTolerance` est un seuil de déclenchement, pas un plancher : 2 070 W publiés là où 4 140 W sont exigés, donc 2 828 W retirés du budget et donnés à personne. Un plancher faux est pire qu'un plancher absent — le waterfall croit avoir servi. Et le plancher publié doit correspondre au nombre de phases visé, pas au courant du moment. **Et le rang d'une borne doit devenir configurable** — `priority = 100` en dur, `std::sort` non stable, donc le test d'inversion est impossible tel quel. Sans lui, LM-1204-b reste hors d'atteinte même avec deux bornes en ligne. Vérification : `.75` est à `+etm22`, seuil 0,4, la wallbox simulée répond, la Terra AC est hors ligne (`192.168.1.132:502`, `ThingErrorTimeout`) — à regarder avant, c'est le seul obstacle matériel restant à LM-1204-b. Ton brief est commité en local dans le dépôt app (`e84f59d`) mais non poussé, faute d'identifiants HTTPS. L'agent app pousse en SSH ; signale-le-lui plutôt que de le laisser dormir. --- ## Rappels d'état, au cas où la session redémarre à froid | | | |---|---| | Banc `.75` | `1.15.2+etm22`, seuil réserve batterie **0,4** (délibéré — 0,9 gèle tout à 50 % de SoC) | | Plugin SunSpec | `1.15.2+etm11` — la batterie déclare enfin `energystorage`, signe vérifié dans les 3 états | | Banc `.131` | six conteneurs sur la même source, `deploy.sh --check-only` sort 0 | | Terra AC | **hors ligne**, `192.168.1.132:502`, `ThingErrorTimeout` — seul obstacle matériel à LM-1204-b | | Déploiement | **toujours** `etm-powersync-deploy/deploy.sh`, jamais `dpkg -i` | | Accès banc | `ssh etm@192.168.1.75` (ni `root` ni `nymea`) · journal `journalctl -u nymead` | **Non franchi :** LM-1204-b — jamais exercé, c'est le critère qui justifie tout le lot. **Pour l'agent app**, en attente dans `docs/BRIEF_depuis_plugin.md` : `SetChargingInfo` substitue silencieusement `targetPercentage = 80` à un champ absent · `loads[].funding` (surplus/grid) et l'entrée des bornes dans la télémétrie · `kCodesReserveBatterie` vide alors que `BATTERY_RESERVE` publie `socPercent`/`reservePercent`/`withheldW` · et la mise en garde : pour une borne, `allocatedW` et son motif sont la décision de l'arbitre, **pas** l'état de la borne, tant que 3g-2 n'est pas livré. Côté app, `origin` est en HTTPS sans credential helper — d'où des `origin/…` périmés qui font croire à des commits manquants. À basculer en SSH : `git remote set-url origin gitea-lan:pakutz79/etm-powersync-app.git`