Une migration unique qui se rejoue n est pas unique

Le bloc qui inverse la semantique de vehicule_sur n etait pas garde : a chaque
redemarrage il remettait les lignes anterieures a faux puis les six arbitrees a
vrai. Le resultat restait juste — l operation est idempotente en sortie — mais
elle ecrivait une ligne de journal trompeuse a chaque fois. Quatre en une
journee, qui seraient apparues en annotation sur tous les tableaux Grafana comme
autant de faux evenements.

Garde sur la trace elle-meme : si la ligne de journal existe, c est fait.

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-14 21:16:59 +02:00
parent d31878c66a
commit b4b3eece84

View File

@@ -537,7 +537,16 @@ async function migrer(client) {
// que le proprietaire a lui-meme arbitrees le 13/09 (cf. la reparation // que le proprietaire a lui-meme arbitrees le 13/09 (cf. la reparation
// ci-dessus) : c'est une vraie confirmation humaine, seulement donnee de // ci-dessus) : c'est une vraie confirmation humaine, seulement donnee de
// vive voix. La perdre serait jeter l'information qu'il a fournie. // vive voix. La perdre serait jeter l'information qu'il a fournie.
const { rowCount: bascules } = await client.query( // ⚠️ REJEU. La premiere version de ce bloc n'etait pas garde : a chaque
// redemarrage elle remettait les lignes anterieures a faux puis les six
// arbitrees a vrai. Le resultat restait JUSTE — l'operation est idempotente
// en sortie — mais elle ecrivait une ligne de journal trompeuse a chaque
// fois, quatre en une journee, qui serait apparue en annotation sur tous les
// tableaux. On garde donc sur la trace elle-meme : si elle existe, c'est
// fait.
const { rows: dejaFait } = await client.query(
`SELECT 1 FROM evenement WHERE resume LIKE 'Semantique de vehicule_sur%' LIMIT 1`);
const { rowCount: bascules } = dejaFait.length ? { rowCount: 0 } : await client.query(
`UPDATE session_charge SET vehicule_sur = false `UPDATE session_charge SET vehicule_sur = false
WHERE vehicule_sur AND debut < '2026-09-14'::date`); WHERE vehicule_sur AND debut < '2026-09-14'::date`);
if (bascules) { if (bascules) {