diff --git a/energyplugin/etm/config/loadconfigstore.cpp b/energyplugin/etm/config/loadconfigstore.cpp index 046d0b0..6fb7b59 100644 --- a/energyplugin/etm/config/loadconfigstore.cpp +++ b/energyplugin/etm/config/loadconfigstore.cpp @@ -112,7 +112,9 @@ bool LoadConfigStore::validateSet(const LoadConfigs &configs, QString *error) if (!c.enabled()) continue; // ne construit aucun adaptateur : ne revendique rien - // \rule{ECS-110-b} — un Thing n'appartient qu'à UNE charge active. \rule{LM-302-b} : + // \rule{ECS-110-b} — un Thing n'appartient qu'à UNE charge active, et c'est ce qui + // tient \rule{LM-400} : une machine physique est UNE seule charge, jamais déclarée + // deux fois. \rule{LM-302-b} : // l'exclusivité ne peut PAS se valider dans une charge utile, aucune charge ne voyant // les autres — d'où ce contrôle d'ENSEMBLE, et d'où le fait qu'il soit distinct de // isValid(). diff --git a/energyplugin/etm/energyarbitrator.cpp b/energyplugin/etm/energyarbitrator.cpp index 2fe67ca..0f8e16a 100644 --- a/energyplugin/etm/energyarbitrator.cpp +++ b/energyplugin/etm/energyarbitrator.cpp @@ -959,6 +959,8 @@ void EnergyArbitrator::applyDegradedMode(const QDateTime &now) // // La leçon tient en une ligne : dès qu'un mécanisme rejoint la table commune, tout code qui // fabrique une action DOIT lire \c supportedKinds au lieu de présumer du kind. + // \rule{LM-301-b} — c'est la limite de LM-301 : « une charge utile, une branche de + // fabrique » vaut pour CONSTRUIRE un mécanisme, pas pour l'ALIMENTER en actions. for (ILoadAdapter *adapter : m_loadAdapters) { const LoadDescriptor d = adapter->descriptor(); LoadAction la; diff --git a/energyplugin/etm/types/loadconfig.h b/energyplugin/etm/types/loadconfig.h index 1da0fed..c8fed30 100644 --- a/energyplugin/etm/types/loadconfig.h +++ b/energyplugin/etm/types/loadconfig.h @@ -127,6 +127,10 @@ class LoadConfig Q_PROPERTY(uint minPowerW READ minPowerW WRITE setMinPowerW) Q_PROPERTY(QString meterThingId READ meterThingId WRITE setMeterThingId) Q_PROPERTY(QString sensorThingId READ sensorThingId WRITE setSensorThingId) + //! Code du MÉCANISME de commande — \rule{LM-600} : relay-router, etmvariableload, + //! sg-ready, evcharger. Jamais le nom d'un domaine : un domaine décrit une INTENTION et + //! se range dans \c domain. Les confondre ferait qu'un chauffe-eau à triac et un + //! chauffe-eau à relais porteraient le même code alors qu'ils ne se commandent pas pareil. Q_PROPERTY(QString adapter READ adapter WRITE setAdapter) Q_PROPERTY(QString mode READ mode WRITE setMode) //! Catégorie d'intention déclarée par l'installateur — énumération FERMÉE, code jamais libellé. diff --git a/tools/rules-noncode.txt b/tools/rules-noncode.txt index b130890..a8b5205 100644 --- a/tools/rules-noncode.txt +++ b/tools/rules-noncode.txt @@ -60,3 +60,9 @@ LM-601 souhait de renommage, pas une exigence LM-1204 justification d'un ordre de travail, pas une exigence LM-1205 constat — la machinerie d'échéance existe déjà LM-1209-d contrat d'AFFICHAGE côté client ; le moteur n'a rien à porter + +# — Ajouts du 2026-08-29, après lecture des 14 règles en territoire livré +ECS-004 invariant tenu par ABSENCE — aucun identifiant de relais ne franchit la frontière +ECS-005 idem ECS-004 (énoncé conjoint) +LM-404 hors périmètre déclaré — biais par consigne, à ne rouvrir que sur besoin +LM-501 justification de NE PAS bâtir les groupes tant que la liste plate suffit