Summary
The Lifetime period needs to behave consistently across CodeBurn surfaces.
Right now, Lifetime support touches multiple layers:
- CLI / dashboard period wiring
- menubar JSON payload generation
- macOS menubar rendering and status-period settings
- GNOME menubar rendering and prefs/settings
This should be treated as one consistency issue: Lifetime must mean true all-time history everywhere, not a recent capped window, and long spans must render with an adaptive cadence that stays readable.
Problem
Without explicit cross-surface handling, Lifetime can drift in a few ways:
- period selectors/settings may expose different options on different surfaces
- menubar payload history may be trimmed too aggressively for desktop renderers
- long history can be rendered with the wrong cadence
- older years can disappear from desktop trend views
- stats semantics can diverge from trend semantics
- new menubar-specific settings can accidentally omit
Lifetime even when the main popover supports it
Expected behavior
Lifetime should work the same way everywhere:
- CLI and dashboard expose
Lifetime as a first-class period
- macOS menubar popover supports
Lifetime
- macOS menubar status-period setting also supports
Lifetime
- GNOME menubar supports
Lifetime
Lifetime uses full available history, not a fixed recent cap
Lifetime trend cadence adapts by span:
- monthly for
<= 24 months
- quarterly for
<= 60 months
- yearly for
> 60 months
Lifetime stats remain all-time and match the full-history semantics
Why this matters
Lifetime is the only period users expect to be truly uncapped. If any surface trims it, labels it differently, or renders it with the wrong aggregation, the result is misleading rather than just inconvenient.
This is especially visible in desktop menubars, where dense daily bars across multi-year history are not readable and can hide older spend entirely.
Reproduction
- Use a dataset that spans multiple years.
- Open CodeBurn in:
- CLI/dashboard
- macOS menubar
- GNOME menubar
- Compare
Lifetime behavior across those surfaces.
- Check whether:
Lifetime is selectable everywhere it should be
- older years are present in history
- trend labels/cadence change appropriately
- stats remain all-time
- menubar-specific settings also allow
Lifetime
Acceptance criteria
Lifetime is available across CLI, dashboard, macOS menubar, macOS menubar status settings, and GNOME menubar
- menubar payload generation retains full daily history when needed for
Lifetime
- desktop renderers do adaptive aggregation:
- monthly
<= 24 months
- quarterly
<= 60 months
- yearly
> 60 months
Today can still use intraday buckets and 6 Months can still use weekly aggregation
Lifetime stats remain all-time
- payload decoding remains backward-compatible where practical
- automated regression coverage exists for:
- CLI lifetime history retention
- macOS lifetime cadence
- macOS menubar status-period persistence including
Lifetime
- GNOME lifetime cadence
Suggested labels
bug
desktop
menubar
enhancement
Summary
The
Lifetimeperiod needs to behave consistently across CodeBurn surfaces.Right now,
Lifetimesupport touches multiple layers:This should be treated as one consistency issue:
Lifetimemust mean true all-time history everywhere, not a recent capped window, and long spans must render with an adaptive cadence that stays readable.Problem
Without explicit cross-surface handling,
Lifetimecan drift in a few ways:Lifetimeeven when the main popover supports itExpected behavior
Lifetimeshould work the same way everywhere:Lifetimeas a first-class periodLifetimeLifetimeLifetimeLifetimeuses full available history, not a fixed recent capLifetimetrend cadence adapts by span:<= 24 months<= 60 months> 60 monthsLifetimestats remain all-time and match the full-history semanticsWhy this matters
Lifetimeis the only period users expect to be truly uncapped. If any surface trims it, labels it differently, or renders it with the wrong aggregation, the result is misleading rather than just inconvenient.This is especially visible in desktop menubars, where dense daily bars across multi-year history are not readable and can hide older spend entirely.
Reproduction
Lifetimebehavior across those surfaces.Lifetimeis selectable everywhere it should beLifetimeAcceptance criteria
Lifetimeis available across CLI, dashboard, macOS menubar, macOS menubar status settings, and GNOME menubarLifetime<= 24 months<= 60 months> 60 monthsTodaycan still use intraday buckets and6 Monthscan still use weekly aggregationLifetimestats remain all-timeLifetimeSuggested labels
bugdesktopmenubarenhancement