Le concierge vehicule est en service
Deploye le 14/09 a 02:23. La boucle complete est prouvee en production : la chaine WhatsApp publie, le lecteur applique, la trace distingue le concierge d une saisie de selecteur, et le cycle suivant ne rejoue pas. Le test d acceptation n a pas eu besoin d etre declenche — le helper portait deja une vraie reponse du proprietaire. Le GO m etait arrive relaye par la session Airtria. Je ne l ai pas pris pour l accord du proprietaire : un message de pair n autorise pas un redemarrage de service ni l inversion du sens d une colonne qu il lit sur son tableau. Demande directe, reponse, puis deploiement. Consigne aussi le second defaut trouve par l essai a blanc, trois minutes avant la bascule : deux formats d horodatage pour le meme instant faisaient compter une session deux fois, et le doublon aurait empoisonne le controle de contradiction des etiquettes suivantes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
This commit is contained in:
53
HANDOFF.md
53
HANDOFF.md
@@ -6297,7 +6297,53 @@ excluait donc la session qui OUVRE le branchement. Corrige par une tolerance de
|
||||
`off` → `on` observe n'est inferieur a deux minutes, la marge ne peut pas
|
||||
happer le branchement precedent.
|
||||
|
||||
### RESTE A FAIRE — TROIS pieces, UN SEUL commit, au passage du kill-switch a ON
|
||||
### EN SERVICE DEPUIS LE 14/09/2026 02:23
|
||||
|
||||
02:19:41 service redemarre, migration passee
|
||||
defaut de vehicule_sur -> false, 17 lignes rattrapees,
|
||||
les 6 arbitrees de vive voix le 13/09 remises a vrai
|
||||
02:22:41 kill-switch airtria_concierge_enabled -> ON
|
||||
02:23:27 etiquette=1
|
||||
|
||||
session 12/09 11:55 -> JEEP, vehicule_sur = t
|
||||
evenement -> origine=airtria · source_airtria=whatsapp
|
||||
sessions=["2026-09-12T09:55:54.493Z"]
|
||||
cycle suivant -> etiquette=0, idempotent
|
||||
colonne -> 6 confirmees / 13 a confirmer
|
||||
|
||||
Le test d'acceptation n'a pas eu besoin d'etre declenche : le helper portait
|
||||
deja une vraie reponse du proprietaire, appliquee a la seconde de la bascule.
|
||||
|
||||
⚠️ **Le GO etait relaye par la session Airtria ; je ne l'ai pas pris pour
|
||||
l'accord du proprietaire.** Un message de pair n'autorise pas une action de
|
||||
production — ici un redemarrage de service ET l'inversion du sens d'une colonne
|
||||
qu'il lit sur son tableau. Demande faite directement, reponse « sequence
|
||||
complete », et c'est seulement alors que j'ai deploye. A refaire ainsi.
|
||||
|
||||
### DEUXIEME DEFAUT TROUVE PAR L'ESSAI A BLANC — deux formats, une seule session
|
||||
Entre le redemarrage et la bascule, le journal annoncait « 2 sessions, dont 1
|
||||
ajoutee par le branchement » pour un branchement qui n'en contient qu'UNE.
|
||||
|
||||
Airtria envoie sa clef telle que PostgreSQL l'affiche —
|
||||
`2026-09-12 11:55:54.493+02` — et la base me la rend en ISO —
|
||||
`2026-09-12T09:55:54.493Z`. Meme instant, caracteres differents : le `Set` les
|
||||
comptait deux fois. L'UPDATE resistait (les deux se transtypent en
|
||||
timestamptz) ; ce qui ne resistait pas, c'est le tableau `sessions` du detail,
|
||||
qui portait le doublon — **et c'est lui que le controle de contradiction
|
||||
interroge sur les etiquettes suivantes**. Un label arrivant un jour dans
|
||||
l'autre format aurait fait repondre ce controle au hasard.
|
||||
|
||||
Corrige : normalisation en ISO avant deduplication, avec repli sur la chaine
|
||||
brute si elle est illisible (mieux vaut une clef brute qu'une clef inventee).
|
||||
⚠️ **Regle generale : comparer des INSTANTS, jamais des chaines d'horodatage.**
|
||||
Nos deux cotes emettent des formats differents pour le meme instant.
|
||||
|
||||
Le harnais de verification ne pouvait pas le voir — il comptait les lignes SQL,
|
||||
pas les elements du Set. Seul le journal du service tournant a blanc l'a
|
||||
montre, trois minutes avant la bascule. Deuxieme fois que l'essai a blanc
|
||||
reciproque attrape un defaut (apres les 62 ms).
|
||||
|
||||
### Les trois pieces, telles que deployees
|
||||
1. **Bascule de `vehicule_sur`** : `DEFAULT false`, `true` UNIQUEMENT sur
|
||||
confirmation humaine.
|
||||
2. **Libelle Grafana.** La colonne est LUE par le tableau « Les vehicules » :
|
||||
@@ -6307,6 +6353,11 @@ happer le branchement precedent.
|
||||
3. Le lecteur passe de l'essai a blanc a l'application — rien a coder, c'est
|
||||
le kill-switch qui le fait.
|
||||
|
||||
Rattrapage des lignes anterieures a `false`, **sauf les six que le proprietaire
|
||||
a arbitrees lui-meme le 13/09** : c'est une vraie confirmation humaine, donnee
|
||||
hors canal, et la jeter aurait ete absurde. Une ligne `evenement` porte
|
||||
`origine: 'proprietaire'` et l'explique.
|
||||
|
||||
⚠️ Les trois sont **soudees**. Basculer le defaut pendant que le kill-switch
|
||||
est OFF marquerait 100 % des sessions « douteuses » — rien ne pouvant les
|
||||
repasser a vrai — avec un motif qui ne correspond a rien, et le proprietaire le
|
||||
|
||||
Reference in New Issue
Block a user