Patrick Schurig fa45cb12c8 docs(design): 3g — ce qui se transporte, et les trois choses qui ne se transportent pas
Livrable de phase avant tout code (workflow AGENTS.md). Écrit après lecture des
1 900 lignes de smartchargingmanager.cpp.

Le constat central est plus dur que le scénario ne le laissait croire.
planSurplusCharging calcule allowanceInAmpere UNE fois, avant la boucle, et ne le
décrémente jamais : chaque borne reçoit la TOTALITÉ du surplus, comme si elle était
seule. Avec 4 kW et deux bornes, le proxy ne produit pas « 2 kW à chacune » — il
produit « 4 kW à chacune ». Ce qui rattrape n'est pas l'arbitrage mais le compteur au
cycle suivant, puis la protection de surcharge. Le système converge par correction
d'erreur, pas par décision. Le critère LM-1204-b doit donc se lire : avant 3g les deux
bornes démarrent puis sont rattrapées ; après, une seule démarre, délibérément.

Trois choses ne se transportent pas, et deux demandent une décision non technique :

1. L'ÉCHÉANCE — sa machinerie (projectedEndTime, remainingPercentageToCharge) vient du
   SoC de la voiture et n'a aucun équivalent ailleurs ; et le scheduler ne lit pas
   encore needs (« grid funding dormant jusqu'à 3f »). Forcer pour tenir une échéance,
   c'est soutirer, donc franchir la frontière du §10. Recommandation : la laisser au
   proxy, qui maigrit sans disparaître.
2. LA BATTERIE — batteryLevelConsideration est calculé dans le chemin VE alors que
   c'est une règle de BUDGET. La monter change le comportement de l'ECS et de la PAC,
   qui ne l'ont jamais eue. Recommandation : la monter quand même, et l'assumer.
3. LE NOMBRE DE PHASES — se décide en ampères, le waterfall parle en watts : la
   conversion descend dans l'adaptateur. L'ordre s'inverse, et le piège est silencieux :
   une borne qui passe en triphasé change son plancher effectif (1,4 → 4,1 kW), donc le
   plancher publié doit correspondre au nombre de phases VISÉ, pas au courant.

Nuance sur le plancher : minimalChargingCurrent vaut max(borne, voiture), il dépend
donc de la voiture branchée. C'est une valeur runtime, pas un réglage — l'écran ne doit
pas la présenter comme tel.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XPUo3RMr8SzK6qbFtfBm8H
2026-08-26 11:25:28 +02:00
..