Expand description
release-diff (T16.6a) — diff two IANA tzdb releases per identifier.
Given two tzdata.zi source releases (OLD, NEW), this compiles each identifier in both and
classifies how it changed. It keeps two axes strictly separate — exactly as the rest of the project
does (CORE.1 behaviour vs T8 structural parity are never collapsed):
- structural — always available: decode each side’s TZif and compare the
Shape(version /timecnt/typecnt/charcnt/isutcnt/isstdcnt/leapcnt/ footer), reusing the T8 taxonomy (ParityClass). - behavioural — only when a
zdumporacle is available: dump each side over the declared horizon and report whether behaviour changed in the past window (years[lo, split-1]), the future window (years[split, hi]), or both.splitis an exclusive seam (T17.3): the split year belongs to the future window, so a change in the split year isbehavior_future, never double-counted as both. The split is a declared year, never host-now(determinism: the same inputs always yield the same diff, independent of when or where it runs). Oracle absence is surfaced (oracle_mode = unavailable+ reason), never silently treated as “no change”.
Non-claims: a diff is scoped to the declared horizon + split, not all-time; the behaviour axis requires the oracle; and it says nothing about why a zone changed (that is IANA’s NEWS, not ours). Identifiers zic-rs cannot compile (out of its declared subset) are reported as errors, never guessed.
Structs§
- Behaviour
Delta - The per-window behavioural delta (counts of differing
zdumplines), present only when the oracle ran. - Diff
Error - An identifier that could not be compared (one side failed to compile within zic-rs’s subset).
- DiffRow
- One identifier’s release-to-release comparison.
- Release
Diff Options - Options for a release diff.
- Release
Diff Report - The complete release diff.
Enums§
- Oracle
Failure Scope - Why the behaviour axis could not assess something (T17.3 — was conflated into one “flip the whole run unavailable” path). The distinction is load-bearing: a tool that cannot be resolved at all is a global outage (the whole axis is unavailable), but a failure assessing one identifier (a bad path/data for that zone) is row-scoped and must not poison the rest of the run.
- Release
Change Kind - How one identifier changed between the two releases. Exactly one kind per identifier (precedence is
resolved in
build_release_diff: presence → link → byte-identity → leap → behaviour).
Constants§
- SCHEMA
- The schema id (versioned, immutable).
Functions§
- build_
release_ diff - Diff two parsed releases into a
ReleaseDiffReport.