v0.9.0
Highlights
Local receive time and exchange event time are now separate, honest fields. Previously, timestamp_ms was inconsistent — some record types on some exchanges carried the exchange's own timestamp, others carried local receive time, with no way to tell which from the data itself. From this release forward, timestamp_ms is always local receive time, and a new nullable exchange_ts field carries the exchange's own event time separately, where the exchange provides one — never silently backfilled with local time when it doesn't.
Beyond correctness, this opens a research angle that wasn't cleanly available before: timestamp_ms - exchange_ts gives an approximate per-exchange, per-message-type capture latency, directly from the data already being collected.
See the README's new "Timestamps" section for full details, and the migration note there if you're working with data captured before this release.