feat(dates): true_instant + wall_clock on /photos/exif (#113) #161

Merged
cameron merged 1 commits from feature/exif-summary-instant-fields into master 2026-10-11 01:42:47 +00:00
Owner

/photos/exif is Apollo's photo-to-track matching feed, but unlike
/image/metadata and /photos/gps-summary it only carried the raw
new-contract triple. date_utc is NULL for unconverted rows and, by
design, forever for the drain's edited/exported floor (#120), so a
client reading date_utc alone would have to re-implement the
per-source legacy conventions to cover those rows: the re-anchoring
ADR-0001 says consumers delete, not migrate.

ExifSummary now carries:

  • true_instant: date_view::row_true_instant (date_utc when converted,
    else the per-source fallback), for instant-to-instant matching.
  • wall_clock: date_view::row_wall_clock, rendered verbatim.

The row → wire mapping moves to ExifSummary::from_row so the tests
cover the real projection, including an unconverted row falling back
to the same instant and wall as its converted twin. Additive: legacy
fields are unchanged, so current clients see the same values.

The date_from/date_to filter still runs on the legacy column; that's
#152, which now explicitly covers /photos/exif too.

Unblocks Apollo #37.

Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com

/photos/exif is Apollo's photo-to-track matching feed, but unlike /image/metadata and /photos/gps-summary it only carried the raw new-contract triple. date_utc is NULL for unconverted rows and, by design, forever for the drain's edited/exported floor (#120), so a client reading date_utc alone would have to re-implement the per-source legacy conventions to cover those rows: the re-anchoring ADR-0001 says consumers delete, not migrate. ExifSummary now carries: - true_instant: date_view::row_true_instant (date_utc when converted, else the per-source fallback), for instant-to-instant matching. - wall_clock: date_view::row_wall_clock, rendered verbatim. The row → wire mapping moves to ExifSummary::from_row so the tests cover the real projection, including an unconverted row falling back to the same instant and wall as its converted twin. Additive: legacy fields are unchanged, so current clients see the same values. The date_from/date_to filter still runs on the legacy column; that's #152, which now explicitly covers /photos/exif too. Unblocks Apollo #37. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cameron added 1 commit 2026-10-11 01:42:38 +00:00
/photos/exif is Apollo's photo-to-track matching feed, but unlike
/image/metadata and /photos/gps-summary it only carried the raw
new-contract triple. date_utc is NULL for unconverted rows and, by
design, forever for the drain's edited/exported floor (#120), so a
client reading date_utc alone would have to re-implement the
per-source legacy conventions to cover those rows: the re-anchoring
ADR-0001 says consumers delete, not migrate.

ExifSummary now carries:
- true_instant: date_view::row_true_instant (date_utc when converted,
  else the per-source fallback), for instant-to-instant matching.
- wall_clock: date_view::row_wall_clock, rendered verbatim.

The row → wire mapping moves to ExifSummary::from_row so the tests
cover the real projection, including an unconverted row falling back
to the same instant and wall as its converted twin. Additive: legacy
fields are unchanged, so current clients see the same values.

The date_from/date_to filter still runs on the legacy column; that's
#152, which now explicitly covers /photos/exif too.

Unblocks Apollo #37.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cameron merged commit 9e780774d9 into master 2026-10-11 01:42:47 +00:00
cameron deleted branch feature/exif-summary-instant-fields 2026-10-11 01:42:47 +00:00
Sign in to join this conversation.