* fix(ui): parse naive-UTC timestamps consistently in formatAbsoluteDate
Backend timestamps are naive UTC (Python `datetime.utcnow()`) and are
serialized without a timezone suffix. `formatDate` already normalizes
these by appending `Z` before parsing, but `formatAbsoluteDate` called
`new Date(date)` directly. Per the ES spec, a timezone-less date-time
string is parsed as local time, so absolute timestamps were shown off by
the viewer's UTC offset (e.g. +9h in JST) — and disagreed with the
relative time rendered by `formatDate` for the same value (visible in the
Captures detail panel, which uses both on `capture.created_at`).
Extract the normalization into a shared `parseServerDate` helper and use
it in both formatters.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
* docs(format): clarify parseServerDate comment on date-only vs date-time parsing
ECMAScript parses date-only strings ("2026-07-23") as UTC but timezone-less
date-time strings ("2026-07-23T10:00:00") as local time. The backend emits the
latter, which is the case this helper normalizes. Corrects the comment per PR
review feedback.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
* docs(format): trim parseServerDate comment to match surrounding style
Reduce the multi-line explanation to a single why-comment consistent with
other utils comments.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>