`"user"` n'est pas « j'ai vu le badge ». C'est « ce rang me va, je l'assume » : un jugement porté sur l'ordre de service, et la seule voie pour éteindre le badge SANS changer l'arbitrage. Les trois conséquences sont dans le code, parce qu'elles sont faciles à perdre. 1. LE GESTE EST EXPLICITE. Un bouton sur le badge, appelé de là et de nulle part ailleurs. Jamais une écriture au passage, jamais l'effet de bord d'un autre enregistrement : écrire "user" parce que l'utilisateur a touché à autre chose affirmerait un jugement qu'il n'a pas porté — le reproche exact qu'on fait à un "auto" fabriqué côté client. 2. IL NE S'ANNULE PAS TOUT SEUL. Une fois posé, seul le moteur le lève, quand un rang différent arrive pour cet id. L'app ne le retire jamais. 3. IL NE REMPLACE PAS LE DÉPLACEMENT, et le libellé le dit : « Adopter ce rang ne le change pas. Pour en changer, glissez la charge. » Sans cette phrase, un installateur valide un ordre qu'il voulait changer — et n'y reviendra pas, puisque le badge s'est éteint. L'écriture emprunte le chemin de la suppression, pour la même raison : SetLoadConfig remplace tout l'ensemble. Lire (frais) → patcher le SEUL rankOrigin de la SEULE charge visée → réécrire verbatim → relire et comparer clé par clé. Le rang ne bouge pas : « ce rang me va » ne peut pas porter sur un rang qu'on vient de changer. Garde-fou des rangs à égalité inclus, et refus si un brouillon est en cours. Vérifié au passage, comme demandé : sansRankOriginAuto() laisse passer "user" — le confondre avec "auto" aurait rendu le bouton silencieusement inopérant. Test dédié, en plus de celui qui existait. Quatre tests de plus : le bouton est là sur "auto" avec sa phrase, absent sur "user" et sur champ vide, et la charge utile d'une adoption ne diffère que par rankOrigin. ⚠️ Non vérifiable sur `.75` : les deux bornes y sont antérieures à `+etm27`, donc aucun "auto" n'y est observable. À reprendre au premier appairage réel d'une borne. 226 tests (+4), flutter analyze inchangé à 27 remarques. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SQbZKrWqsMFP1Lh2jjjd9f
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%