front : le tableau de bord affiche l'heure du poste, et le dit #254
No reviewers
Labels
No labels
Compat/Breaking
EC01
EC02
EC03
EC04
EC05
EC06
Kind/BDD
Kind/Back
Kind/Bug
Kind/CICD
Kind/Cloud
Kind/Contenu
Kind/Data
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Front
Kind/IA
Kind/Infra
Kind/Monitoring
Kind/Security
Kind/Testing
Portée/Post-jury
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
ops/alerte
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision!254
Loading…
Reference in a new issue
No description provided.
Delete branch "lenaic/heure-locale"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ce que ça change
Toutes les heures de données s'affichaient en UTC. Le tableau de bord montre
désormais l'heure du poste, et l'écrit à côté de « dernière relève ».
Pas de ticket : le défaut a été vu à l'écran ce soir, il n'était pas au
backlog. À rattacher si vous en ouvrez un.
Preuve
Le défaut, relevé ce soir sur la production, écran ouvert à 20 h 10 heure
de Paris :
La conclusion naturelle est « la chaîne a deux heures de retard ». Elle a été
tirée en interne, sur une chaîne qui venait justement de passer aux dix
minutes. Devant un jury, elle serait tirée aussi, et personne ne serait là
pour détromper.
Relecture
Où regarder en priorité
1. Une exception assumée :
formaterJourreste en UTC. Le journal decollecte nomme une journée, pas un instant. « 2026-09-01 » est une date nue
que le navigateur lit à minuit UTC ; la convertir ferait afficher la veille à
l'ouest de Greenwich, soit un journal décalé d'un jour, en silence. Un cas
d'essai garde l'exception, sans quoi le prochain passage l'effacerait par souci
de cohérence.
2. Le fuseau des cas d'essai est fixé à
Europe/Parisdansvitest.config.js. Un lancement en UTC passerait sans rien prouver — les deuxformes coïncident, et la conversion ne serait jamais exercée. Posé dans la
configuration et non dans le script npm :
TZ=… npm runne marche pas sur unposte Windows, et la moitié de l'équipe en a un.
3. Deux cas ajoutés pour ce que le décalage change vraiment. Une série qui
bascule de jour à 23:30 UTC — l'axe portait deux « lun. 31 » à la suite — et
l'heure d'hiver, où l'écart tombe à une heure. Un décalage figé à deux heures
serait faux la moitié de l'année, et personne ne le verrait avant décembre.
4. Le fuseau affiché est lu à l'exécution, pas écrit en dur : « heure de
Paris » figé mentirait à qui ouvrirait le tableau de bord ailleurs. Il est
nommé une seule fois, à côté de « dernière relève », la seule valeur de
l'en-tête qu'un lecteur compare à sa montre. Les « (UTC) » des en-têtes de
colonne disparaissent plutôt que de devenir « (heure locale) » répété.
5.
datetimedes balises<time>reste en UTC. C'est la donnée machine,elle n'a pas à suivre l'affichage. Un cas d'essai le garde.
Ce qui n'est pas dans cette PR
Le retard structurel de la courbe, qui est autre chose et n'a rien d'un défaut :
une heure ne peut pas être résumée avant d'être finie, donc le seau de
Hestvisible à
(H+1):10depuis le #246. Soixante-dix minutes au pire, indépendantde la cadence. Si on veut l'heure en cours à l'écran, il faut
materialized_only = false, et border d'abord la recopie du réalisé du #117 — sans quoi ellefigerait une heure partielle comme définitive.
Relu, et rejoué sur la branche : 510 cas passés (44 fichiers),
vite buildOK.J'ai vérifié la conversion là où elle pouvait mordre, pas seulement à l'écran :
Z, doncnew Date()parse en UTC etgetHours()rend l'heure du poste — pas de piège « naïf reparsé en local » ;date_trunc('hour'|'day', …),dashboard/repository.py:541,586) : à Paris l'écart est entier, les étiquettes retombent sur des heures pleines, été comme hiver — et la bascule est couverte par un cas ;getUTC*d'affichage ailleurs danssrc/, pas d'écran mi-UTC mi-local ;datetimedes<time>reste en UTC, ce qui est la bonne règle.Les cinq points de « où regarder en priorité » tiennent. L'exception
formaterJourest la bonne, et le cas d'essai qui la garde est ce qui empêchera le prochain passage de l'effacer par souci de cohérence.J'ai poussé une ligne sur la branche (
5f5f294) :formaterJourétait importé deux fois dans le même bloc. Les cas passaient parce qu'esbuild déduplique en silence avant Vitest, maisnode --checkrefuse le fichier — c'est une SyntaxError ESM. Le premier outil qui parse à la lettre aurait fait tomber les vingt-sept cas du fichier d'un coup.Deux remarques que je ne bloque pas :
TableauSites,ListeAlertes,TracabiliteDetailetSitesATraiteraffichent désormais l'heure locale sans le dire. La PR l'assume, et comme les heures sont justes plus personne ne conclut faux — mais l'écran d'accueil, celui que le jury ouvre en premier, ne porte pas la mention.env: { TZ: 'Europe/Paris' }repose sur la prise en compte d'unTZmodifié après le démarrage de Node. Validé ici sur macOS ; si ça ne prend pas sur un poste Windows, ce sont une vingtaine de cas rouges là-bas — pas en CI, pas en prod. À confirmer par qui en a un.Bon pour la mise en prod.