Patrick Schurig 5fb15d521b docs(spec §14): oui, le stockage devient une charge rangée du waterfall
Question de l'agent app, relayant Patrick : « si je veux que l'énergie aille
d'abord dans l'eau chaude, et seulement ensuite dans la batterie, je fais
comment ? » Réponse : aujourd'hui il ne peut pas, et la réponse est OUI.

Les quatre constats de l'app sont exacts, revérifiés indépendamment. Et le
contrat attendait déjà cette charge : OPTIMIZER_PROTOCOL décrit
adapter:"battery" dans loads[], LoadAction porte le kind Constraint avec
Permission{Allow,Forbid} et Source{Solar,GridSource}, et SurplusBattery déclare
reserveSocPercent / maxChargeW / maxDischargeW — trois champs qu'aucun code ne
lit. domain:"battery" accepté sans effet n'est donc pas une question effleurée,
c'est le reliquat visible d'une place réservée. La note dit sous quelle forme 3f
la remplit.

Les quatre points, tranchés :

(a) Le double commandeur ne se devine pas : il se MESURE. Le plugin SunSpec
    écrit, relit et compare, et son commentaire nomme le cas exact — « another
    controller overwriting the setpoints ». Le résultat sort dans controlHealthy,
    déjà déclaré par la classe du banc. Trois exigences en découlent, dont
    celle-ci : controlHealthy == false doit SORTIR de l'arbitrage comme
    available == false le fait déjà, sinon c'est le trou de pluggedIn à nouveau.

(b) batteryLevelConsideration et le rang ne sont pas concurrents par nature —
    ils le sont par accident d'implémentation. Le seuil agit aujourd'hui comme
    un rang absolu ; quand la batterie sera rangée, il perd ce rôle et ne garde
    que celui de plancher. Le mouvement a commencé en 3g-1 avec le défaut passé
    de 0,9 à 0,2, précisément parce que 0,9 confondait cible et réserve.

(c) La sûreté : « ne pas charger » et « décharger » sont deux gestes que le mot
    unique cachait. Le premier ne vide rien et c'est la demande de Patrick ; le
    second est déjà refusé par le budget, quel que soit le niveau. Un rang ne
    fait jamais descendre un SOC, il décide de ce qui le fait monter.

(d) Le signe : l'inquiétude tombe. Charger une batterie, c'est consommer — au
    compteur c'est indistinguable d'un chauffe-eau, donc allocatedW se
    réconcilie sans traitement particulier. Le sens opposé n'apparaît qu'à la
    décharge, et une décharge n'est pas une allocation : c'est une source, elle
    appartient au revenu du budget. Règle : allocatedW d'une batterie est
    toujours ≥ 0.

La règle Rules.* écartée par l'app l'est pour la bonne raison, et la note le
confirme : ce serait un second commandeur sans arbitre, pire que celui de 3g-2
puisqu'il vivrait hors du moteur, donc hors du journal.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017TVywtayEeoRJ2yWUW4iZj
2026-08-27 20:04:41 +02:00
..