Dates: foundation — schema, EXIF branch re-base, offset cascade, display zone #114
Notifications
Due Date
No due date set.
Blocks
Reference: Apps/ImageApi#114
Reference in new issue
Block a user
Parent
ImageApi #113 — SPEC: true-instant date contract (ADR-0001).
What to build
The system stores, per photo, the true instant alongside the camera offset and an audit of how it was resolved — and the display zone becomes a zone name. New and re-ingested files get the new date fields populated at ingest; the legacy date column stays byte-identical; the metadata and
/photosresponses carry the new fields; the per-user preference carries an IANA zone name whose minute offset is derived DST-correct for the relevant year (replacing the fixed minute value as the source of truth).Concretely: the offset cascade (explicit EXIF offset tag → GPS position through a timezone database for the capture year → server zone, recorded as an assumption) exists as a testable pure function; the waterfall's EXIF branch emits (true instant, camera offset, offset-source) instead of a mixed-convention epoch; the schema migration adds the nullable columns; the zone-name preference lands in the prefs surface with the old minute value kept as a derived/legacy read where clients still use it.
Acceptance criteria
offset_tag.gps.assumed_server./photosresponses include the new fields for rows that have them (null for unconverted rows).America/New_Yorkgives -240 for July, -300 for January).Blocked by
None (can start immediately).
Implemented on feature/true-utc-dates (commit
2f2107d, local — not yet pushed).Build + clippy clean; 625 lib + 702 bin tests pass (one pre-existing doctest failure in utils.rs at the base commit). Two-axis review: Standards 5 judgement-call findings (data clump deferred to #118), Spec 0 gaps.