Release notes

FEATURE

Reports and terminal lists now reveal what each conversation was about

Three Claude Code conversations from the same project used to look identical when you checked usage later. The HTML report now adds a "What you worked on" section beneath the contribution heatmap, while the terminal's recent-session list gains a title column, so you can tell what each conversation covered. Claude Code had already named conversations and written those titles into transcripts; usage had carried them into report data, but the renderer left them hidden. Titles use the existing project-name masking before a report is shared. Untitled sessions remain blank instead of borrowing the project name and pretending it is a title. It is like sorting photos once labelled only "trip" and seeing "hike," "meal," and "ride home."

BUGFIX

Quota checks wait as requested, and the last minute no longer says 0m

When the server tells usage to check an Antigravity quota later, it now waits for the time requested. Previously, a 429 response meant both the status code and Retry-After header were discarded, so an expired cache triggered another attempt every five minutes. The quota probe and token refresh now handle HTTPError (an HTTP response error) separately and can read a wait time written in seconds or as an HTTP date; a missing or unparseable value falls back to 60 seconds, and an oversized value is capped at one hour. The final minute before reset no longer says "0m" in the same way as an already expired quota. All five languages now say "Reset imminent," and that wording stays out of the separate "will run out in" warning. It is like a clinic telling you to return in ten minutes instead of knocking again every five, then clearly saying your turn is next.

Original changelog

Original changelogReports and terminal lists now reveal what each conversation was about
**The report and the terminal's session list now show what each conversation was about.** Claude Code names every conversation and writes that name into its transcript. `usage` had been parsing those names all along and carrying them into the report payload, where the renderer ignored them — the snapshot fixture still read `"Ignore in current renderer"`. The HTML report gained a "What you worked on" section under the contribution heatmap, and the TUI's recent-session table gained a column, so three rows from the same project are no longer indistinguishable. Titles carry `data-mask`, so the existing project-name masking covers them before a report is shared. Sessions without a title stay blank rather than falling back to the project name, which would read as a title that isn't one.
Original changelogQuota checks wait as requested, and the last minute no longer says 0m
**A rate-limited Antigravity quota probe now waits as long as the server asked, instead of retrying every five minutes.** That probe is the only external API call in the project. It and the token refresh both folded `HTTPError` into the same `except` clause as connection failures, so a 429 reached the caller as a bare `None` — the status code and the `Retry-After` header were discarded together, and the next cache expiry sent another request at a server that had already said to wait. Each now catches `HTTPError` separately, reads `Retry-After` in either the seconds or the HTTP-date form, and holds off until it elapses. A missing or unparseable header falls back to sixty seconds, and the delay is capped at an hour so an oversized value cannot strand the card.
**The last minute before a quota resets no longer reads "0m".** Under sixty seconds the countdown's minute arithmetic rounds to zero, and the already-expired case printed the same string, so one line meant both "forty seconds left" and "the window has already turned". The card now reads "Reset imminent", in all five languages. The fix sits at the call site rather than in the shared duration formatter, which also renders the "will run out in" half of the burn warning — changing it there would have produced "will run out in reset imminent".