Fixes #10058
service/worker/scheduler/civil_interval.go: civil Julian day + scan for the next local tick.service/worker/scheduler/spec.go:nextIntervalTimetakestime.Timeand usesnextCivilIntervalTickwhen the interval is a whole multiple of 86400s and the schedule has a non-UTC*time.Location; otherwise the existing UTC-math is unchanged.TestSpecIntervalCivilDayUSPacificDST: 2018-11-04 vs 2018-11-05 local midnights inAmerica/Los_Angeles(07:00Z then 08:00Z after fall back).
- Schedules that resolve to UTC (including explicit
UTC/ empty as today): same behavior as before. - Schedules with a named non-UTC IANA zone and a day-sized (N×24h) interval: intentional behavior change so steps follow civil calendar days at a fixed local time, observing DST.
Possibly breaking:
ScheduleSpec.Intervalwith a duration of N×24h and a non-UTCScheduleSpectimezone now advances on civil calendar days in that zone. Previously, such intervals were aligned only to UTC 86400s boundaries. Clients that relied on the old UTC grid can set the schedule timezone toUTCor use calendar/cron for explicit UTC-day scheduling.
Typical need: IntervalSpec for recurring “every N local days or weeks” when the schedule is tied to a user- or org-selected IANA time zone, so local wall time should stay stable across DST changes.