events: southern-hemisphere DST (+8) — 384/384
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 37s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 37s
The :dst zone model assumed northern ordering (dst-start < dst-end, DST = [start, end)). Southern zones — DST begins ~Oct and ends ~Apr — have dst-start > dst-end, so the old (>= start AND < end) test was never true and ev-tz-offset returned the standard offset year-round. Fix: detect the ordering. start < end → DST is [start, end); start > end → DST wraps the calendar-year boundary, active when (utc >= start OR utc < end). Add predefined ev-tz-sydney (AEST +600 / AEDT +660; transitions 02:00 AEST first-Sun-Oct and 03:00 AEDT first-Sun-Apr, both 16:00 UTC the preceding Saturday → rule time -480). VTIMEZONE export is already rule-agnostic, so southern zones round-trip through iCal unchanged (the -480 folds the from-offset back to the correct local 02:00/03:00 DTSTART). +8 timezone tests (now 25): summer/winter offsets, both transition dates, local->utc in both seasons, and a daily expansion crossing the autumn DST-end that shifts in UTC (1320,1320,1380,1380,1380) while staying 09:00 local. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -18,7 +18,7 @@ capacity rules, transactional booking, and a flow-driven notification dispatcher
|
||||
|
||||
## Status (rolling)
|
||||
|
||||
`bash lib/events/conformance.sh` → **376/376** (Phases 1-4 + 13 ext + tz iCal export via TZID + VTIMEZONE)
|
||||
`bash lib/events/conformance.sh` → **384/384** (Phases 1-4 + 14 ext + tz iCal export via TZID + VTIMEZONE + southern-hemisphere DST)
|
||||
|
||||
## Ground rules
|
||||
|
||||
@@ -88,6 +88,19 @@ lib/events/api.sx ── (events/schedule) (events/book) (events/agenda) ──
|
||||
|
||||
## Progress log
|
||||
|
||||
- 2026-06-10 — Southern-hemisphere DST. The `:dst` zone model assumed northern
|
||||
ordering (dst-start < dst-end, DST = [start, end)); southern zones (DST begins
|
||||
~Oct, ends ~Apr) have dst-start > dst-end and so silently never entered DST —
|
||||
`ev-tz-offset` returned std year-round. Fixed by detecting the ordering: when
|
||||
start < end DST is the interval [start, end); when start > end DST wraps the
|
||||
year boundary (active when `utc ≥ start OR utc < end`). Added predefined
|
||||
`ev-tz-sydney` (AEST +600 / AEDT +660; transitions 02:00 AEST first-Sun-Oct
|
||||
and 03:00 AEDT first-Sun-Apr, both 16:00 UTC the prior Saturday → rule time
|
||||
−480). VTIMEZONE export already rule-agnostic, so southern zones round-trip
|
||||
too (the −480 folds the from-offset back to the correct local 02:00/03:00).
|
||||
+8 tests (timezone 25): summer/winter offsets, both transition dates,
|
||||
local→utc both seasons, and a daily expansion crossing the autumn DST-end that
|
||||
shifts in UTC (1320·1320·1380·1380·1380) yet stays 09:00 local. 384/384 green.
|
||||
- 2026-06-07 — VTIMEZONE iCal export (supersedes the UTC-Z tz fix — full DST
|
||||
fidelity). A tz event now exports DTSTART;TZID=<name>:<local> (+ EXDATE/RDATE
|
||||
in the same TZID-local form; UNTIL stays UTC per RFC), and the VCALENDAR emits
|
||||
|
||||
Reference in New Issue
Block a user