Dates & Timezone
This page explains what "today" and "now" mean inside a rule, and what happens at a daylight-saving transition.
The declared timezone
The timezone is declared on the ruleset itself, defaulting to UTC — never a tenant-level
setting, because a result must not depend on mutable configuration that lives outside the document
being evaluated. NOW, TODAY, START_OF_DAY, END_OF_DAY, YEAR/MONTH/DAY and DIFF_DAYS
all resolve in it, so a German customer's "today" is Europe/Berlin and the ruleset says so, and a
replay of the same ruleset cannot silently drift onto a different zone. NOW/TODAY are always
supplied by the caller through the evaluation's own present-instant option — never read from the
host clock directly — so a golden fixture and a replay are exactly reproducible.
A local wall-clock time a daylight-saving transition either deletes or repeats is disambiguated
by one named, ratified rule (plan 02-09's Task 0, option-b): a local time that a transition skips
(a spring-forward gap) is shifted forward by the length of the jump, and the run succeeds rather
than failing on this account; a local time that a transition repeats (an autumn-fallback fold)
resolves to the earlier of its two valid instants. Either way the shift is reported as a
non-blocking notice on the run's trace (EXPR_LOCAL_TIME_NONEXISTENT, at warning severity) — never
silent.