Étape 1 du design : le TYPE et sa résolution. Rien ne le consomme encore, et c'est voulu — dans un lot de sécurité, ce qui coûte n'est pas d'écrire le comportement, c'est de prouver qu'on n'a rien cassé en chemin. DrawCap porte la source en PARAMÈTRE, jamais enfouie dans le nom d'une fonction : Breaker (par phase, permanent), GridOperator (total, sur ordre — aucun émetteur, le transport du §14a n'existe pas), EcoSelfImposed (total, le temps de la passe 1 — la passe n'existe pas non plus). Les deux sources sans émetteur sont déclarées pour que la porte reste ouverte, pas parce qu'elle s'ouvre. LE POINT TECHNIQUE : on ne compare pas les plafonds, on compare les MARGES. Un plafond par phase donne sa marge sur la phase la plus chargée, un plafond total la sienne sur le soutirage mesuré ; les deux sont des watts. Le plus petit mord, et on retient sa source ET la phase qui borne — sans elle, un installateur devant une maison triphasée déséquilibrée ne sait pas où mesurer. La contre-épreuve de la conversion est éloquente : ramener un plafond par phase à un « total équivalent » donne 9 300 W de marge là où il y en a 500. Dix-huit fois trop, sur la couche qui décidera d'acheter. C'est exactement l'hypothèse d'équilibre que LM-1006-1 interdit, et elle serait restée invisible jusqu'au jour où elle coupe du courant. Trois autres invariants, tous vérifiés échouant : aucun plafond déclaré rend une marge SANS OBJET et non nulle — une marge nulle bornerait tout à 0 W et couperait l'installation, c'est le « zéro forgé » appliqué à la sécurité ; une marge NÉGATIVE conserve l'ampleur du dépassement, qui est ce que L4 doit délester ; et le départage à marge égale est STABLE (Breaker > GridOperator > EcoSelfImposed), sans quoi le motif publié changerait au gré de l'ordre du tableau, donc sans qu'aucune décision n'ait changé. Le design complet est dans docs/DESIGN_DELESTAGE.md, avec les trois décisions qu'il demande — dont celle qui touche la sécurité : que fait le délestage d'une charge sous verrou minOn, et la réponse diffère selon la source. simulation 35/35, charging 17/17, loadmodel 21/21, spotmarket 7/7, amd64 0/0. Comportement inchangé : aucune suite ne bouge d'une ligne. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015F7G5VeaPVSMeVNjiGj36p
32 lines
1.0 KiB
Plaintext
32 lines
1.0 KiB
Plaintext
HEADERS += \
|
|
$$PWD/types/loadaction.h \
|
|
$$PWD/types/decisionreason.h \
|
|
$$PWD/types/loaddescriptor.h \
|
|
$$PWD/types/surpluscontext.h \
|
|
$$PWD/types/plan.h \
|
|
$$PWD/types/drawcap.h \
|
|
$$PWD/types/loadconfig.h \
|
|
$$PWD/config/loadconfigstore.h \
|
|
$$PWD/adapters/iloadadapter.h \
|
|
$$PWD/scheduler/ischeduler.h \
|
|
$$PWD/adapters/evadapter.h \
|
|
$$PWD/adapters/sgreadyadapter.h \
|
|
$$PWD/adapters/etmvariableloadadapter.h \
|
|
$$PWD/adapters/relayrouter.h \
|
|
$$PWD/scheduler/rulebasedscheduler.h \
|
|
$$PWD/ratios/energyratioscalculator.h \
|
|
$$PWD/energyarbitrator.h \
|
|
|
|
SOURCES += \
|
|
$$PWD/types/decisionreason.cpp \
|
|
$$PWD/types/drawcap.cpp \
|
|
$$PWD/types/loadconfig.cpp \
|
|
$$PWD/config/loadconfigstore.cpp \
|
|
$$PWD/ratios/energyratioscalculator.cpp \
|
|
$$PWD/adapters/evadapter.cpp \
|
|
$$PWD/adapters/sgreadyadapter.cpp \
|
|
$$PWD/adapters/etmvariableloadadapter.cpp \
|
|
$$PWD/adapters/relayrouter.cpp \
|
|
$$PWD/scheduler/rulebasedscheduler.cpp \
|
|
$$PWD/energyarbitrator.cpp \
|