Patrick Schurig 2ee6807c27 tools: la classe « cadrage » — et « spécifiée seule » veut enfin dire quelque chose
Le premier usage de l'index avait donné 70 règles « spécifiée seule », un nombre
qui ne voulait rien dire : il mélangeait « pas encore construite » avec « rien ne
pourra jamais la citer ». Une règle NÉGATIVE — « un thermostat n'est PAS une
charge », « aucune ThingClass n'est exposée » — s'applique par ABSENCE de code.
Il n'existe aucune ligne à pointer, et la compter comme un trou de couverture
invite à boucher un trou qui n'existe pas.

tools/rules-noncode.txt déclare 22 règles de cadrage, chacune avec son motif :
constats résolus, interdictions, structure du modèle, hors-périmètre, conventions
de nommage, justifications, et un contrat d'affichage client. §10, §14, ECS-5xx
et ECS-6xx n'y sont PAS : ils attendent d'être construits, et c'est ce que
« spécifiée seule » doit continuer de dire.

Résultat : 41 « spécifiée seule » au lieu de 70, dont 27 en territoire non
construit. Restent ~14 règles en territoire livré que rien ne cite — un nombre
qu'on peut lire une par une.

LE GARDE-FOU, éprouvé et non supposé : le générateur CASSE si une règle de
cadrage acquiert une citation de code ou de test. Vérifié en ajoutant une
citation de LM-202 dans un en-tête — RC=1, la règle nommée, le fichier et la
ligne donnés. Même mécanique que le refus de redéfinir un numéro retiré.

Et la réparation est TOUJOURS la même : retirer la ligne. Deux cas la
déclenchent — la règle a été implémentée depuis, ou elle est citée pour expliquer
une absence — et dans les deux « citée par le code » est plus vrai que
« cadrage ». La liste ne peut donc que RÉTRÉCIR : elle ne sait pas mentir dans le
sens qui compte. C'est ce qui rend une liste tenue à la main acceptable ici.

ci-quality 3/3.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015F7G5VeaPVSMeVNjiGj36p
2026-08-29 12:51:55 +02:00

63 lines
3.4 KiB
Plaintext

# Règles de CADRAGE — celles dont on n'ATTEND aucun porteur de code.
#
# POURQUOI CETTE LISTE. Sans elle, « spécifiée seule » est un nombre qui ne veut rien
# dire : il mélange « pas encore construite » avec « rien ne pourra jamais la citer ».
# Une règle NÉGATIVE — « un thermostat n'est PAS une charge », « aucune ThingClass n'est
# exposée » — s'applique par ABSENCE de code : il n'existe aucune ligne à pointer. La
# compter comme un trou de couverture invite à boucher un trou qui n'existe pas.
#
# CE QUE LA LISTE NE DIT PAS. Elle ne dit pas « aucun code ne peut la citer », mais
# « on n'attend pas de porteur ». La nuance décide du garde-fou ci-dessous.
#
# ── GARDE-FOU : le générateur CASSE si une règle d'ici acquiert une citation de code ──
#
# C'est ce qui empêche une liste tenue à la main de dériver — même mécanique que le refus
# de redéfinir un numéro retiré. Deux cas la déclenchent, et la réparation est la même :
#
# · la règle a été implémentée depuis → la classification est PÉRIMÉE ;
# · la règle est citée pour expliquer une ABSENCE (« LM-202 : un thermostat n'est pas
# une charge, donc rien ici ») → la citation est légitime, et la règle a désormais
# un porteur lisible.
#
# Dans les deux cas : RETIRER la ligne. L'index la comptera « citée par le code », ce qui
# est vrai et plus utile que « cadrage ». La liste ne peut donc que RÉTRÉCIR — elle ne
# sait pas mentir dans le sens qui compte.
#
# NE PAS y mettre une règle simplement « pas encore faite ». §10, §14, ECS-5xx et ECS-6xx
# n'y sont pas : ils sont en attente de construction, et c'est ce que « spécifiée seule »
# doit continuer de dire.
#
# format : IDENTIFIANT<TAB>motif
# — Cadre du chantier ECS : constats résolus, frontières tenues par absence, hors périmètre
ECS-001 constat résolu, négatif — reconfirmé contre le libnymea du build
ECS-002 négatif : ni integration-plugin, ni dépôt, ni ThingClass
ECS-003 découpage documentaire, pas une exigence de comportement
ECS-007 interdiction — aucune couche ECS ne décide de sa part du surplus
ECS-008 contrat d'un AUTRE produit (Héos consomme, l'ECS publie)
ECS-203 CLOS : aucune ThingClass exposée, donc aucune interface à implémenter
# — §1 : ce que le modèle EST, avant tout mécanisme
LM-100 structure du modèle — deux couches indépendantes
LM-101 structure du modèle — une charge choisit un domaine et un mécanisme
LM-102 négatif : aucune des deux couches ne répartit de budget
# — Négatifs et hors moule
LM-202 négatif : un thermostat de zone n'est PAS une charge
LM-403 négatif : le mode est une sortie, jamais une entrée
LM-405 hors périmètre : la décomposition en facettes vit côté ems
LM-406 négatif : sans chauffe-eau distinct, il n'y a pas de charge à créer
LM-700 hors moule : la batterie n'est pas une charge à rang (renvoi §14)
LM-701 hors moule : le smarthome ne se module pas en watts
# — §5/§6 : définitions et conventions de nommage
LM-500 définition — un groupe est une clé de tri, jamais un détenteur de budget
LM-503 définition — ce qu'un rang n'est pas
LM-504 convention de nommage du domaine hvac
LM-601 souhait de renommage, pas une exigence
# — Justifications et contrats clients
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