-
Notifications
You must be signed in to change notification settings - Fork 662
gmail listings emit a naive "2026-07-28 03:36" date with no offset, derived from the sender's Date header #945
Copy link
Copy link
Closed
Labels
P2Normal priority bug or improvement with limited blast radius.Normal priority bug or improvement with limited blast radius.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.ClawSweeper found an open linked pull request for this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.ClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.ClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.ClawSweeper found a high-confidence source-level issue reproduction.impact:otherThis issue has meaningful maintainer-visible impact outside the owned taxonomy.This issue has meaningful maintainer-visible impact outside the owned taxonomy.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.Very strong issue quality with high-confidence source-level or clear reproduction.
Description
Metadata
Metadata
Assignees
Labels
P2Normal priority bug or improvement with limited blast radius.Normal priority bug or improvement with limited blast radius.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.ClawSweeper found an open linked pull request for this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.ClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.ClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.ClawSweeper found a high-confidence source-level issue reproduction.impact:otherThis issue has meaningful maintainer-visible impact outside the owned taxonomy.This issue has meaningful maintainer-visible impact outside the owned taxonomy.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.Very strong issue quality with high-confidence source-level or clear reproduction.
Type
Fields
Priority
None yet
gog gmail messages/threadsJSON emitsdateinlistDateLayout("2006-01-02 15:04"), which carries no offset:{ "id": "19fa6c3d5a030951", "date": "2026-07-28 03:36", "subject": "…" }A caller reading that has to already know which zone gog was configured for. Get it wrong and the value can land on the wrong calendar day, not merely the wrong hour —
2026-07-28 03:36rendered in UTC is2026-07-27 23:36Eastern, a different date. That is the difference between "this went out Tuesday" and "this went out Monday night", which in a legal or scheduling record is the whole question.This bit in practice on a headless deployment where nothing set
GOG_TIMEZONE, sotime.Localwas UTC and the naive value silently meant UTC while every consumer read it as local.Two things would fix it:
1. Carry an explicit offset. The compact
datecolumn is good for humans and should stay, but JSON consumers need an unambiguous value.2. Prefer
internalDateover theDate:header.formatGmailDateInLocationparses the header written by the sending client, which varies in format and offset and is occasionally just wrong. The Gmail API'sinternalDateis its own receipt timestamp (epoch ms, UTC) and is authoritative.Proposal: add a
dateIsofield (RFC3339, frominternalDate, rendered in the configured location) alongside the existingdate, leaving current output and the human table untouched. Purely additive, so nothing that readsdatetoday breaks.Happy to send a PR — I have it implemented with tests.