Contexte
packages/web/src/app/flow/Habits/components/Heatmap.tsx:46 calcule la date de début de la grille en millisecondes fixes : new Date(end.getTime() - (days - 1) * 86_400_000). Les 2 jours par an où l'heure change (passage été/hiver), un jour fait 23 h ou 25 h → start peut tomber sur le mauvais jour calendaire et décaler toute la grille d'un jour autour de ces dates.
Le reste du composant utilise déjà setDate() (calendaire, correct) ; seul ce calcul initial est fragile.
Pourquoi reporté
Module Habits en sommeil (masqué de l'UI, to_toggle:false/display:false — cf #98). Personne ne voit cette grille aujourd'hui. À corriger avec la reprise de Habits.
Vérifié au passage (relecture audit)
Les heatmaps visibles sont saines : Mood construit ses dates avec setDate() (DST-safe), Journal travaille sur des dates texte AAAA-MM-JJ (pas d'heure → immunisé). Seul Habits est concerné.
Correctif
Remplacer la ligne 46 par un calcul calendaire (setDate(getDate() - (days-1)) après setHours(0,0,0,0)).
Réf : #138, #98.
Contexte
packages/web/src/app/flow/Habits/components/Heatmap.tsx:46calcule la date de début de la grille en millisecondes fixes :new Date(end.getTime() - (days - 1) * 86_400_000). Les 2 jours par an où l'heure change (passage été/hiver), un jour fait 23 h ou 25 h →startpeut tomber sur le mauvais jour calendaire et décaler toute la grille d'un jour autour de ces dates.Le reste du composant utilise déjà
setDate()(calendaire, correct) ; seul ce calcul initial est fragile.Pourquoi reporté
Module Habits en sommeil (masqué de l'UI,
to_toggle:false/display:false— cf #98). Personne ne voit cette grille aujourd'hui. À corriger avec la reprise de Habits.Vérifié au passage (relecture audit)
Les heatmaps visibles sont saines : Mood construit ses dates avec
setDate()(DST-safe), Journal travaille sur des dates texteAAAA-MM-JJ(pas d'heure → immunisé). Seul Habits est concerné.Correctif
Remplacer la ligne 46 par un calcul calendaire (
setDate(getDate() - (days-1))aprèssetHours(0,0,0,0)).Réf : #138, #98.