What
getIngestHealth() is fetched once, from a mount-time effect in
dashboard/src/pages/DashboardPage.jsx (the effect around :191-205, no timer and no refresh
dependency). Start a Claude CLI session with --no-session-persistence after the dashboard is
already open and the notice never appears until a reload.
Why it matters
The notice exists to say "your tokens are not being counted right now". The realistic sequence is
the opposite of the one currently covered: a dashboard left open on a second monitor all day, and
a suppressed session started at some point during that day. tokentracker doctor is current on
demand; the dashboard is current only at page load.
This is disclosed as a known gap in #129's description — filing it so it does not live only there.
Suggested shape
Fold getIngestHealth() into the existing manual/auto refresh cycle, or poll at roughly the
detector's 30s TTL (DEFAULT_TTL_MS in src/lib/transcript-suppression.js) with an in-flight
guard so a slow response cannot stack requests. The server side already caches, so polling at the
TTL costs one cached read per interval rather than a process spawn.
Related precedent: #46 fixed exactly this class for the Pulse card — a new hook was added and never
wired into refreshAll(), so manual refresh left it stale.
Context
Found during the QA gate on #129: #129 (comment)
What
getIngestHealth()is fetched once, from a mount-time effect indashboard/src/pages/DashboardPage.jsx(the effect around :191-205, no timer and no refreshdependency). Start a Claude CLI session with
--no-session-persistenceafter the dashboard isalready open and the notice never appears until a reload.
Why it matters
The notice exists to say "your tokens are not being counted right now". The realistic sequence is
the opposite of the one currently covered: a dashboard left open on a second monitor all day, and
a suppressed session started at some point during that day.
tokentracker doctoris current ondemand; the dashboard is current only at page load.
This is disclosed as a known gap in #129's description — filing it so it does not live only there.
Suggested shape
Fold
getIngestHealth()into the existing manual/auto refresh cycle, or poll at roughly thedetector's 30s TTL (
DEFAULT_TTL_MSinsrc/lib/transcript-suppression.js) with an in-flightguard so a slow response cannot stack requests. The server side already caches, so polling at the
TTL costs one cached read per interval rather than a process spawn.
Related precedent: #46 fixed exactly this class for the Pulse card — a new hook was added and never
wired into
refreshAll(), so manual refresh left it stale.Context
Found during the QA gate on #129: #129 (comment)