0023. Use UTC For Durable Time And Localize In Views

Status

Accepted

Context

NEXUS projects increasingly deal with:

  • event history
  • imported observations
  • cross-device activity
  • future cross-repo and cross-system analysis
  • user-facing views that may be rendered in different local contexts

If durable time is stored in local time by default, several problems follow:

  • timestamps become harder to compare across systems
  • offsets can be lost or inconsistently applied
  • event ordering and analysis become harder to reason about
  • view concerns leak into the durable model

NEXUS wants a clearer separation:

  • durable/model time should be stable and comparable
  • views should be responsible for human-friendly localization

Decision

Default to UTC for durable time in NEXUS projects.

Working rule:

  • store durable timestamps in UTC
  • name time fields clearly when explicitness helps, for example recorded_at_utc
  • convert or localize time in views, reports, and other human-facing surfaces
  • do not let view-local time formatting define the durable model

Consequences

Positive:

  • durable timestamps are easier to compare and analyze
  • cross-device and cross-system ordering is simpler
  • localization concerns stay in the view layer
  • event models stay more deterministic

Tradeoffs:

  • human-facing displays need an explicit localization step
  • some examples may need both UTC storage form and user-local rendered form to stay understandable