The usage history view got proper pagination today. It was rendering everything at once, so I taught listUsagePeaks to page at the query level and added a useUsageHistoryPage hook plus a reusable PageShell to drive it, which let ListPage and UsageHistoryView shed a chunk of one-off layout code. Following on from yesterday’s PR review work, I added an address-comments review mode — a ReviewDropdownContent that lets me kick off a session specifically to work through review comments — and swapped the open-PR button over to a proper GitHub icon.

A good slice of the day was session card behaviour, which had accumulated small annoyances. Cards that were still starting up now show a spinner while their chips load, driven by a little areChipsLoading helper and a new CardBody. Clicking inside a dialog no longer selects the card underneath it — I wrapped the offending controls in a StopClickPropagation component — and navigating to /usage now correctly deselects whatever card was active via the useActiveIdReconciler. Terminal links open without an extra prompt now too.

Two behavioural fixes stood out. Resumed sessions now open in a waiting state rather than pretending to be running, which meant threading the distinction through SessionManager, resumeSession and the message handlers (and a note in CLAUDE.md about it). And I moved the UI-rendered status logging into a useReportRenderedStatus hook so what the dashboard actually shows gets echoed to daemon.log — much easier to debug status drift when the log tells me what the UI believed, not just what the daemon sent.