Usage heatmap renders a day's activity one calendar day too early (off-by-one; empty day shown as full)

Status Open
Reported on v2.1.181
Maintainer reply None cached
Activity 0 comments · opened Jul 23, 2026

Preflight

Searched existing issues — this is related to but distinct from #76885, #67085, #75966, #71549. Those describe activity credited to the session-start date (multi-day sessions) or real days showing zero. This report is the inverse and is not explained by session-start-date attribution or timezone bucketing.

Summary

The home-screen usage heatmap renders a day's activity on the wrong cell — one calendar day too early. A day with literally zero activity is shown as a heavy day, and the real (same-day) work is shifted back one day.

Environment

  • Claude Code 2.1.181, macOS 26.5.2 (build 25F84)
  • System timezone America/Chicago (CDT, UTC−5); TZ unset

Observed

  • Heatmap tooltip reads: "Jul 19 — 2,859"
  • I did no work Sun Jul 19; my heavy day was Mon Jul 20.

Evidence (local ~/.claude/projects/**/*.jsonl)

Message-type ("type":"user"|"assistant") lines bucketed by local (America/Chicago) day:

| Local day | Messages |
|--------------|----------|
| Sat Jul 18 | 0 |
| Sun Jul 19 | 0 |
| Mon Jul 20 | 2,797 | ← real heavy day
| Tue Jul 21 | 263 |
| Wed Jul 22 | 392 |

  • Zero events on Jul 18/19 in UTC and local time — no timestamp anywhere is Jul 19.
  • Per-session start/end times: all ~10 Jul-20 sessions start on Jul 20 (earliest 2026-07-20T12:32Z = 07:32 CDT). The only multi-day session (184d111c…) starts Jul 7. No session starts Jul 19.
  • ⇒ Neither session-start-date attribution (#76885 / #67085) nor UTC-vs-local bucketing can place this data on Jul 19. Jul-20-noon-UTC data lands on Jul 20 in every timezone (max offset ±14h).
  • Totals match the dashboard (my count 6,745 vs the widget's "Messages: 6,727"), so the underlying data is correct — only the per-day cell placement is off by one.

Expected

Mon Jul 20 activity appears on the Jul 20 cell.

Actual

Mon Jul 20 activity appears on the Jul 19 cell (shifted one calendar day earlier).

View original on GitHub ↗