diff --git a/HANDOFF.md b/HANDOFF.md index fc1ff1a..ed06589 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -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*