Le contrat d etiquetage du concierge, ecrit avant d etre code

Quatre echanges avec la session Airtria pour arreter l interface. Le point
qui a failli passer : leur etiquette porte une provenance, whatsapp ou
regle-puissance, et les deux ne peuvent pas valoir la meme certitude. Une
deduction n est pas une confirmation — marquer « sur » un invite detecte a la
puissance aurait recree, sous une autre forme, le defaut que la bascule de
vehicule_sur corrige.

Consigne aussi le vocabulaire (MAJUSCULES sans accent, releve sur l etat reel
de la colonne) et le sens unique de la regle de puissance, qui impose au
lecteur de refuser un VW ou un JEEP venu de ce chemin.

Ma part — lecteur du helper et bascule du defaut — reste a ecrire, et les deux
sont indissociables.

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 21:21:42 +02:00
parent d64aef24ea
commit 223e51f49c

View File

@@ -6218,3 +6218,83 @@ le proprietaire. README corrige.
---
*Document mis a jour le : 13/09/2026 (soir) — six etiquettes de vehicule corrigees, frontiere de branchement lue dans le journal, contrat du concierge arrete*
## 66. Session du 13/09/2026 (soir) — Contrat d'etiquetage du concierge, arrete des deux cotes
La session OpenClaw/Airtria construit l'agent conversationnel qui demande par
WhatsApp quel vehicule est branche quand l'etiquette est douteuse. Le contrat
d'interface a ete negocie en quatre echanges. **Il est fige ; ma part n'est pas
encore ecrite.**
### Qui ecrit quoi
Airtria n'ecrit JAMAIS dans PostgreSQL — seulement
`input_text.airtria_vehicle_label` (paquet `airtria_concierge.yaml`,
`max: 255`, kill-switch `input_boolean.airtria_concierge_enabled`, OFF).
Mon service d'historisation lit ce helper et applique.
Le helper porte : `sessions` (la liste complete des `debut` du branchement,
**verbatim**, millisecondes comprises), `label`, `confirmed_at`, `source`.
Le champ `reponse` brute est volontairement omis — il ne tenait pas dans les
255 caracteres et n'ajoute rien d'exploitable a `confirmed_at` + `source`.
### La provenance decide de la certitude
| `source` cote Airtria | `vehicule_sur` | labels possibles |
|---|---|---|
| `whatsapp` (le proprietaire a repondu) | **true** | VW · JEEP · MEGANE · INVITE · ZERO |
| `regle-puissance` (invite auto-detecte) | **false** | **INVITE uniquement** |
⚠️ **Une deduction n'est pas une confirmation.** Marquer « sur » un label
produit par la regle de puissance reintroduirait exactement le defaut que la
bascule corrige. Benefice du drapeau laisse a faux : un invite auto-detecte
reste « a confirmer », donc rattrapable — Airtria peut relancer plus tard
« un invite vers 14 h mardi, tu veux preciser ? » sans que ce soit bloquant.
⚠️ **La regle de puissance est a sens UNIQUE** (cf. §0 du manuel) : au-dessus
de ~4 200 W avec consigne ≥ 20 A elle conclut « ni VW ni JEEP », jamais
l'inverse. Un label `VW` ou `JEEP` arrivant avec `source='regle-puissance'`
est donc un bug par construction : **le lecteur doit le REFUSER et le
signaler**, pas l'appliquer. Airtria confirme ne pouvoir emettre que `INVITE`
sur ce chemin ; le filet reste utile.
### Tracabilite
```
genre = 'vehicule'
source = 'historisation' <- la colonne dit QUI A ECRIT, pas l'origine
resume = "Etiquette JEEP appliquee par le concierge (3 sessions)"
detail = { origine: 'airtria', source_airtria: 'whatsapp'|'regle-puissance',
label, sessions: [...], confirmed_at }
```
Une saisie manuelle du selecteur ne produit AUCUNE ligne d'etiquetage (le seul
evenement `vehicule` existant est emis a la CLOTURE d'une session). La
discrimination est donc nette dans les deux sens : `detail->>'origine'` present
= concierge, absent = valeur du selecteur pendant la session.
### Vocabulaire des labels — MAJUSCULES, SANS ACCENT
Etat reel de la colonne au 13/09 : `VW` 9 · `JEEP` 9 · `MEGANE` 1. Airtria
ecrivait `invité` ; corrige en `INVITE`. Une troisieme convention dans la meme
colonne aurait oblige tout regroupement futur a connaitre les trois formes.
`ZERO` est accepte par le chemin WhatsApp alors que le selecteur HA ne
l'expose pas encore (moto hors service, reprise prevue fin septembre) : le
concierge en saurait alors plus que l'interface. Non bloquant, et c'est au
proprietaire d'ajouter l'option le moment venu (manuel §0).
### RESTE A FAIRE — ma part, en UN SEUL commit
1. **Lecteur du helper** dans `tools/historise-evcs.mjs` : jointure sur `debut`
en egalite stricte (repli ±1 s), extension au BRANCHEMENT entier lu dans
`evenement` (invariant « un cable, un vehicule », §65), refus d'un label
household en `regle-puissance`, refus + signalement si deux labels
differents visaient le meme branchement.
2. **Bascule de `vehicule_sur`** : `DEFAULT false`, `true` UNIQUEMENT sur
confirmation humaine. Aujourd'hui la colonne ment (elle ne passe a faux que
si le selecteur change PENDANT une session, d'ou les onze lignes fausses
toutes marquees « sur »). Les deux changements sont indissociables : basculer
le defaut sans le lecteur marquerait tout « non sur », poser le lecteur sans
la bascule garderait la colonne menteuse.
Declencheur : Airtria dit « ca publie pour de vrai » apres une VRAIE reponse
WhatsApp. D'ici la le helper est vide et le kill-switch OFF — rien a appliquer.
Il attend du proprietaire **la syntaxe de creation de tache planifiee** cote
OpenClaw pour enregistrer sa boucle de 10 minutes.
---
*Document mis a jour le : 13/09/2026 (soir) — contrat d'etiquetage du concierge fige, lecteur et bascule vehicule_sur restant a ecrire en un commit*