ADR-0003: Chrono, IANA zones and validated half-open intervals

Date: 2026-09-19 Status: Accepted (Foundation implementation within specification 0.4)

Context

Instant identity and DST behavior must not rely on manually maintained timezone arithmetic.

Decision

Use chrono without clock features and chrono-tz with the bundled IANA database. Persist UTC instants plus an explicit original timezone. TimeRange has private bounds and validating serde conversion. Duration is positive integral seconds. Local resolution rejects ambiguous/nonexistent times; callers must resolve them before planning. Recurrence remains a bounded expansion trait.

Alternatives

A custom zone engine is unsafe; silently selecting either DST fold loses meaning; allowing naive datetimes inside TimeRange weakens identity.

Consequences

Timezone database updates arrive via dependency updates. No hidden system clock. ExplicitDate currently constrains the local start date. Subsecond instants are representable; candidate steps/durations use integral seconds.

Migration / Compatibility

Temporal serde validation is part of CPIR 0.1. No change to the Master's half-open convention.

References

Master section 6; Testing standard.

Master · Foundation reference

2026-09-20 follow-up

Bounded daily/weekly recurrence is implemented by ADR-0009; plain local conversion still rejects gaps/folds.