v1.4.1 — menu aggregation + TTL-aware cache pricing
What changed
1. Menu aggregation fix (P0-1 from community audit)
The menu was silently mixing scopes — top "Cumulative Cost" summed all machines, but Daily Details / Hourly Activity / Top Projects showed local only. Users with 2+ Macs saw numbers that didn't add up between sections.
Now one merge path (_merge_machines_data()) serves both menu and dashboard. Only the Machines panel still shows per-machine detail.
Impact on you: if you have remotes synced via iCloud, your Daily Details and date range will expand — more data, not less.
2. TTL-aware cache write pricing
Anthropic quotes two cache write rates:
- 5-minute ephemeral: input × 1.25
- 1-hour ephemeral: input × 2
Previously every cw token was priced at 1h rate. Now scan() reads usage.cache_creation.ephemeral_{5m,1h}_input_tokens when present and prices each bucket separately. Flat field falls back to 1h (verified as Claude Code's default).
Impact on you: numbers unchanged for 100% 1h traffic (the common case). If any session used 5m caching, cost drops a bit.
3. opus_old cache write rate fix
opus_old.cache_write was 18.75, which is the 5m rate at input=$15. The 1h rate is 30. Fixed while renaming keys to cache_write_{5m,1h}. opus_old is legacy (Opus 4.0/4.1 only) so impact is minimal — consistency across the pricing table matters more.
Tests
Added 2 regression tests:
test_cache_ttl_split_prices_5m_and_1h_differentlytest_cache_ttl_missing_falls_back_to_1h
All 7 cases green.
Source citation
Added comment block on PRICING citing https://platform.claude.com/docs/en/about-claude/pricing.
Not in this release
- P0-1 menu vs dashboard parity — fixed above
- Pricing TTL split — done
- Earliest-date puzzle — investigated, not a bug: no JSONL on this user's machines predates 2026-03-16. Earlier data would need to live on a machine that never ran the plugin.
Acknowledgments
Thanks to the home-office code review that caught the menu aggregation drift and prompted the TTL investigation.