mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 12:32:43 +00:00
toZonedDate rendered an instant as an en-US string in the target zone and re-parsed it as host-local. Two defects rode on that. When the fabricated wall clock landed in the HOST zone's spring-forward gap the engine silently advanced it an hour, so a dose inside its window could be classified late and a just-taken dose could fail to suppress the take-now pill — for users whose device zone differs from their profile zone. The medication card and table then passed that already-shifted value into dateWithWeekdaySmart, which applies the profile zone itself, so the next- intake day label converted twice and could name the wrong calendar day. Invisible whenever browser zone and profile zone agree. Migrate every consumer to wallClockInTz, which returns the fields directly. The status math only ever reads year/month/day/hour/minute/weekday, so it now runs on WallClockParts throughout and reduceCurrentWindowStatus takes the real instant instead of a pre-shifted Date — caller and helper can no longer disagree about which zone the comparison runs in. Day labels use a calendar-day distance (localDayIndex) rather than an hour count, so a 23 h or 25 h day cannot round tomorrow into today, and the formatter receives the raw instant. Fixtures name the zone they mean instead of building host-local Dates.