Le conseiller ne lisait pas mal : on lui parlait mal

Reprise de la campagne apres la specialisation en observateur. Le harnais
affichait encore `strategy` et `night_target_soc`, deux champs que
l observateur n emet plus : il mesurait des undefined. Reecrit pour noter
ce qui compte chez un observateur — la gravite tombe-t-elle dans la
fourchette attendue, et a-t-il NOMME la chose, par des mots-cles choisis
hors du vocabulaire du prompt.

Quatre defauts trouves, aucun n etant un defaut de raisonnement du modele :

- « Contacteur FERME » : pour un relais, ferme veut dire qui laisse passer.
  Le modele l a lu comme coupe et a demande, reseau present, « pourquoi le
  contacteur reste FERME alors que le bilan juge le reseau necessaire ».
- Le signe de l excedent : le prompt affichait « 14 W », il a ecrit
  « negatif (-14 W) » — et sur un autre cas « negatif » puis « positif » au
  passage suivant, sur le MEME prompt.
- « day_vehicle_full_idle » ne veut rien dire pour lui : il signalait une
  ressource refusee sans voir que le vehicule est PLEIN.
- Un excedent calcule sous censure ne veut rien dire : sur le BOOST du
  11/09 il concluait « pas de soleil, donc le reseau est normal » alors que
  les 121 W de PV sont bas PARCE QUE la consigne de 8260 W les evince.

Plus une grandeur derivee de plus, `consigne - maison`, parce qu il voyait
la version flagrante du defaut (SOC 20, 0 A) et manquait la version
discrete (SOC 45, +2 A). Elle a d abord fait TOMBER le cas du BOOST, en
annoncant « il reste 7005 W pour recharger » comme une bonne nouvelle sur
une batterie a 96 % : corrigee en lui faisant dire l inverse quand il n y a
rien a recharger, la question ayant deja une reponse dans le bilan.

Trois defauts etaient les miens : deux fixtures decrivaient un etat que
l installation ne peut pas prendre — c est le conseiller qui l a signale —
et un attendu exigeait « haute » la ou l echelle de gravite du prompt ancre
elle-meme cet incident sur « moyenne ».

Incidents 39/40 au final, contre 23/35 au depart. Les deux cas de vrai
silence restent silencieux 5/5.

⚠️ Trouve en marge : cinq helpers du conseiller sont geles depuis la
specialisation, et le cablage de la cible SOC matin les lit encore — ses
quatre gardes passent toutes, la fraicheur datant le RUN et non la VALEUR.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
This commit is contained in:
Tallagrand Thierry
2026-09-13 11:59:24 +02:00
parent 7973fa4c3f
commit 4a9ad0bc65
16 changed files with 12179 additions and 470 deletions

View File

@@ -5823,3 +5823,150 @@ prouve rien tant qu'une mutation ciblee ne l'a pas fait tomber.
---
*Document mis a jour le : 11/09/2026 (~17:45) — credit solaire sur la consigne reseau, golden 89/89, valide en production*
## 63. Session du 13/09/2026 — Le conseiller ne lisait pas mal : on lui parlait mal
### Le harnais n avait pas suivi la specialisation
`tools/campagne-conseiller.mjs` affichait encore `strategy` et `night_target_soc`,
deux champs que l observateur n emet plus depuis le 12/09. Il « mesurait » donc
des `undefined`. Reecrit : il note desormais deux choses, et deux seulement.
1. **La gravite tombe-t-elle dans la fourchette attendue.** Un observateur ne se
juge pas a une valeur qu il propose mais a sa capacite a SEPARER un systeme
qui derape d un systeme qui va bien. D ou des cas « incident » et des
contrefactuels « systeme calme », notes separement : un modele qui repond
toujours « moyenne » reussit les premiers et echoue les seconds.
2. **A-t-il NOMME la chose**, par des mots-cles choisis HORS du vocabulaire du
prompt. Le premier jeu comptait « 45 » comme preuve que le cas 2 etait
compris — or 45 est le SOC, ecrit tel quel dans le prompt : le mot-cle etait
satisfait par la recopie. Remplace.
Les cas ouverts ne sont pas notes : ils se lisent.
### Quatre defauts du PROMPT, tous trouves par la campagne
Aucun n est un defaut de raisonnement du modele. On lui donnait des phrases
ambigues et des chiffres non interpretables.
**1. « Contacteur FERME ».** Pour un relais, ferme veut dire *qui laisse
passer*. Le modele l a lu comme *coupe* et a ecrit, reseau present : « verifier
pourquoi le contacteur reste FERME alors que le bilan juge le reseau
necessaire » — l inverse exact de la situation. La ligne dit desormais ce qu
elle veut dire : « Reseau EDF : PRESENT, il peut alimenter la maison
(contacteur ferme, AC-IN present) ».
**2. Le signe de l excedent.** Le prompt affichait « EXCEDENT SOLAIRE : 14 W ».
Le modele a ecrit « excedent negatif (-14 W) ». Sur le cas 8 il a ecrit
« negatif (-149 W) » a un passage et « positif de 149 W » au suivant, SUR LE
MEME PROMPT : erreur de lecture, pas convention. Le signe est desormais nomme
(« +149 W, il RESTE du solaire » / « -444 W, DEFICIT reel »).
**3. Le vocabulaire interne.** « Controleur : day_vehicle_full_idle » ne veut
rien dire pour lui : il signalait « ressource refusee alors qu un vehicule est
branche » sans voir que ce vehicule est PLEIN. Une table de traduction rend les
etats lisibles en gardant l identifiant entre parentheses. Effet mesure sur ce
cas : 0/5 → 5/5 au run suivant.
**4. Un excedent calcule sous CENSURE ne veut rien dire.** C est la doctrine de
l installation (PV mesuree = min(ressource, conso + absorption)), et le prompt
l ignorait : sur le BOOST du 11/09 il annoncait « -1134 W, DEFICIT : la
batterie porte deja la maison » et trois passages sur cinq en concluaient « pas
de soleil, donc le reseau est normal ». Les 121 W de PV sont bas PARCE QUE la
consigne de 8260 W les evince. Quand des chargeurs se declarent brides, la
ligne le dit et previent que la ressource reelle est plus haute.
### Une grandeur derivee de plus, et le piege qu elle a cree
Cas 2 (SOC 45, requis 50,4, reseau present, consigne 700 W, maison 700 W) : le
modele repondait « aucune » en ecrivant « le reseau comble le manque » — alors
qu une consigne egale a la charge de la maison ne laisse **rien** pour remonter
la batterie. Meme mecanisme que le cas 1, ou il voit juste parce que le SOC est
a 20 et le courant a 0 : il voit la version flagrante et manque la version
discrete. On lui donne donc la soustraction, comme pour l excedent solaire :
`consigne − maison hors voiture`. Cas 2 : 0/5 → 5/5, deux runs de suite.
⚠️ **Mais cette ligne a fait tomber le cas 7 de 5/5 a 2/5**, et c est
instructif. Sur le BOOST elle annoncait « il reste 7005 W pour RECHARGER la
batterie » — presente comme rassurant, sur le cas meme ou cette consigne est la
faute, et avec une batterie a 96 % qui n a rien a recharger. Corrige en faisant
dire a la meme grandeur l inverse quand il n y a rien a recharger, la question
« la batterie doit-elle monter ? » ayant deja une reponse calculee dans le
systeme — le SOC requis par le bilan, donc aucun seuil nouveau :
« la batterie n a PAS besoin de monter (SOC 96 %, bilan 62 %), donc ces 7005 W
de demande reseau n ont aucune destination : ils ne peuvent que remplacer du
solaire ».
### TROIS defauts etaient les miens, pas ceux du modele
- **Deux fixtures incoherentes** : cas 5 et 6 portaient `vehicle_connected: on`
avec l etat controleur reste a `vehicle_not_connected`. C est le conseiller
qui l a signale, et il avait raison — mon scenario decrivait un etat que l
installation ne peut pas prendre.
- **Un attendu qui contredisait le prompt** : j exigeais « haute » sur le BOOST
alors que l echelle de gravite ancre elle-meme cet incident sur « moyenne ».
Le modele repondait moyenne 5 fois sur 5 : il appliquait ma consigne et je le
notais contre elle.
- **Un attendu « calme » sur le cas 6** (ressource refusee, vehicule branche a l
arret) : signaler est le bon comportement d un observateur. Mon attendu venait
de la decision du controleur, pas de ce qu il y a a voir.
### ⚠️ NE PAS REGLER SUR UN SEUL RUN DE CINQ PASSAGES
J ai passe une partie de la session a poursuivre du bruit. Avec cinq tirages, un
3/5 et un 5/5 ne se distinguent pas (erreur type ~0,22). Trois runs consecutifs
partageant les memes attendus donnent quinze passages par cas et une image
stable — c est ce qu il faut lire. `scratchpad/agreger.mjs` fait le cumul.
### Resultats
Cinq runs de cinq passages. Les runs 2 a 4 partagent les memes attendus et se
cumulent (quinze passages par cas) ; le run 5 mesure la configuration finale.
| cas | avant | cumul r2-r4 | final |
|---|---|---|---|
| oscillation du contacteur (12/09) | 5/5 | **15/15** | 5/5 |
| pointe de cuisson, parc a 3 A de sa limite | 2/5 | 15/15 | **5/5** |
| nuit bloquee, reseau present sans recharge | 5/5 | 15/15 | 5/5 |
| bilan degrade | 5/5 | 15/15 | 5/5 |
| SOC sous le requis, session marquee terminee | 1/5 | 10/15 | **5/5** |
| BOOST qui evince le solaire (11/09) | 0/5 | 9/15 | **5/5** |
| vehicule plein, ne pas relancer | 0/5 | 10/15 | — |
| nuit couverte, rien a faire (SILENCE) | 5/5 | 15/15 | 5/5 |
| contacteur stable 90 min (SILENCE) | 5/5 | 14/15 | 5/5 |
Final : **incidents 39/40**. Les deux cas de VRAI silence restent silencieux
5/5 tous runs confondus.
### ⚠️ Ce que le score « systeme calme » mesurait vraiment
Deux cas y sont tombes a 0/5 en fin de campagne — le soir en deficit et le
vehicule plein — et il ne faut PAS les lire comme des fausses alertes. Leurs
textes sont defendables : « le bilan dit reseau necessaire OUI mais le
contacteur reste ouvert », « la ressource solaire est refusee faute de preneur,
verifier si la Jeep peut encore absorber ». Mon etiquette « calme » repondait a
la question *le controleur a-t-il raison*, alors que l observateur repond a *y
a-t-il quelque chose a voir*. Ce sont deux questions differentes, et seuls les
cas 3 et 16 (rien du tout a voir) relevent du vrai silence.
Question a trancher avec le proprietaire, parce qu elle lui appartient : une
batterie pleine qui refuse du solaire avec une voiture branchee merite-t-elle un
signalement toutes les quinze minutes ? C est lui qui lira les notifications.
### Trace des observations (meme session)
Les helpers du conseiller sont ecrases toutes les quinze minutes : un
signalement grave emis a 3 h du matin avait disparu au reveil, et rien dans la
memoire du projet n en gardait trace. Table `observation` ajoutee au service d
historisation (clef = horodatage du marqueur du conseiller, donc idempotente),
lisible par `node tools/enquete.mjs observations [heures] [gravite]`, qui ne
montre par defaut que ce qui a ete signale et compte a part les cycles calmes.
### ⚠️ CINQ HELPERS DU CONSEILLER SONT GELES, ET UN CABLAGE LES LIT ENCORE
Depuis la specialisation du 12/09 06:15, `evcs_advisor_night_target_soc` (55),
`_current_max_a`, `_strategy`, `_ev_charge_tonight` et `_divergence` ne sont
plus ecrits. Le cablage de la cible SOC matin (§20, §39) les lit toujours, et
**ses quatre gardes passent** : toggle, statut `ok`, fraicheur — qui porte sur
`_last_run`, frais puisque le conseiller tourne — et bornage [22, 90], que 55
traverse. Si le toggle `evcs_advisor_apply_night_target` est active, la cible de
la nuit devient un 55 fige d hier matin.
La garde de fraicheur ne protege donc pas ce qu elle croit proteger : elle date
le RUN, pas la VALEUR. Le toggle est OFF aujourd hui. Le cablage est devenu du
code mort qui ne peut que se tromper — a retirer (trois scenarios golden), mais
c est une decision du proprietaire, §20 etant un jalon qu il avait valide.
---
*Document mis a jour le : 13/09/2026 — campagne conseiller : quatre defauts du prompt corriges, incidents 39/40, table `observation`*