docs(règles): les 14 en territoire livré, lues une par une

Sept étaient des trous de classification ou de citation, sept sont réelles.

TROIS CITATIONS AJOUTÉES, portées par du code depuis longtemps :
  LM-400    une machine physique est UNE charge → c'est l'exclusivité d'un Thing
            dans validateSet() qui l'empêche d'être déclarée deux fois
  LM-301-b  « une charge utile, une branche de fabrique » vaut pour CONSTRUIRE,
            pas pour ALIMENTER en actions → le repli L2 lit supportedKinds
  LM-600    les codes d'adapter portent le nom du MÉCANISME, jamais du domaine

QUATRE PASSÉES EN CADRAGE : ECS-004/005 (invariant tenu par ABSENCE — aucun
identifiant de relais ne franchit la frontière, il n'y a rien à pointer), LM-404
(hors périmètre déclaré), LM-501 (justification de NE PAS bâtir les groupes tant
que la liste plate suffit).

RESTENT SEPT, et ce sont de vraies attentes : ECS-111, ECS-302, ECS-305, ECS-307
(les trois dernières déjà listées en « ce qui reste à éprouver », §9 de
spec_ecs.md), LM-401/LM-402 (facettes, couche non bâtie), LM-502 (plafond de
groupe, conditionnel).

ECS-111 mérite d'être remonté : ce n'est pas une attente, c'est un défaut vivant,
et sa conséquence dépasse ce que la spec en dit. Détail dans le rendu de session.

Bilan de l'index après cette passe : 34 « spécifiée seule » (dont 27 en
territoire non construit), 26 cadrage, 24 citées par le code, 17 par un test, 12
vérifiées sur machine. Le nombre de départ était 70.

Aucun changement de comportement. ci-quality 3/3, build 0/0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015F7G5VeaPVSMeVNjiGj36p
This commit is contained in:
Patrick Schurig 2026-08-29 12:57:53 +02:00
parent b64a0e4c90
commit ee6e8c453c
4 changed files with 15 additions and 1 deletions

View File

@ -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().

View File

@ -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;

View File

@ -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é.

View File

@ -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