This repository was archived by the owner on Sep 13, 2026. It is now read-only.
v0.3.5
Added
- Usage History tab. A new dashboard tab surfaces long-run usage trends
sampled from/v1/usage. Built across seven tickets (01–07):- Ticket 01: coalesced
/v1/usagehistory fetch with a ring-buffer
sample store (usage_samples), gated byusage_history_enabled. - Ticket 02:
usage_eventstable + priority/service-mode tuple
detector with aGET /dashboard/api/usage/eventsendpoint for
transition logging. - Ticket 03:
usage_dailydownsampled rows with gap detection and
self-healing across retention boundaries (days older than
usage_raw_retention_daysare pruned after a daily row is written). - Ticket 04: dual-channel calendar heatmap (activity density + cache
hit rate) with brush-to-zoom day selection. - Ticket 05: 5-lane timeline drill-down (concurrency, requests,
token flow, cache hit rate, degradation state) with ban-onset vertical
lines spanning all lanes. - Ticket 06: old-day timeline rendered from
usage_daily+
usage_eventsusing a hybrid step-function with dashed held-constant
segments and accurate degradation bands. - Ticket 07: WebSocket live updates (
usage-sample,usage-event),
config hot-reload for the three usage-history knobs, and a CONTEXT.md
glossary.
- Ticket 01: coalesced
- Config tab: Usage History section exposing
usage_history_enabled,
usage_raw_retention_days, andusage_gap_threshold_minutes— all
hot-reloadable.
Fixed
- Stamp: restamp
cache_controlbreakpoints to Layout B. The stamp
pipeline now reorderscache_controlbreakpoints to the canonical
Layout B ordering before stamping, so restamped requests are stable
across re-sends. - Usage history: self-healing data loss across retention boundaries.
runDailyDownsamplepreviously downsampled fromtoday-retentionto
today, which left days older than the retention cutoff without a
daily row before pruning their raw samples — silent data loss when the
proxy was down across a retention boundary. Fixed by using
getEarliestSampleDay()as thefromdate so every day with samples
gets its daily row written before pruning. - Config validation: restored
models_refresh_msto integer
validation. A duplicateusage_refresh_msentry inINT_FIELDS
(introduced in ticket 03) had silently replacedmodels_refresh_ms,
removing its integer validation. Removed the duplicate and restored
models_refresh_ms.