cctally 1.97.0 → 1.98.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/bin/_cctally_dashboard.py +595 -46
- package/bin/_cctally_dashboard_envelope.py +43 -23
- package/bin/_cctally_dashboard_sources.py +79 -13
- package/bin/_cctally_tui.py +313 -30
- package/bin/_lib_alert_axes.py +8 -3
- package/bin/_lib_dashboard_sources.py +463 -19
- package/bin/_lib_snapshot_cache.py +12 -0
- package/bin/cctally +13 -0
- package/dashboard/static/assets/index-CC8TTZUC.css +1 -0
- package/dashboard/static/assets/index-CChXFhs_.js +97 -0
- package/dashboard/static/dashboard.html +2 -2
- package/package.json +1 -1
- package/dashboard/static/assets/index-BSESoPIK.css +0 -1
- package/dashboard/static/assets/index-DgsMz5hA.js +0 -97
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,30 @@ based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [1.98.0] - 2026-08-14
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- The stats-rebuild memory gate now rejects compact per-observation projections, not only full decoded-record retention. Its 512-byte overhead ceiling is derived from repeated production-shaped measurements on both remote runners, and a controlled coordinate-projection mutant freezes the regression class (#508).
|
|
12
|
+
- Every cross-provider aggregate on the dashboard's `All` view now states the range it covers and carries its provider attribution. The Projects leaderboard used to concatenate a Claude ranking bounded by the subscription week with a Codex ranking bounded by roughly thirty days, sort the union by cost, and print "(N this week)" over the result — so a Codex project could outrank a Claude project because of the window rather than the cost. Both providers are now folded over one shared absolute range, and the panel names its resolved dates in the header and in its empty state. The percentage beside each row is named in a legend on every tab: a share of the week's quota under Claude, a share of the ranked cost under Codex and All. Each row's accessible name carries its cost and that named percentage, which the decorative cost bar had been credited with conveying and did not (#556).
|
|
13
|
+
- A ranked project row that the drill-down cannot reach no longer offers one. A project active between a week's rollover and the projects envelope re-anchoring is in the ranking and in no route-visible collection, so clicking it opened a detail view reporting nothing. The row keeps its rank, its label and its cost, and simply has no detail affordance. When a Claude project drill does open from `All`, it now states the span it actually reported in resolved dates, because that window is anchored to whole weeks and is wider than the thirty-day ranking the row was priced over (#556).
|
|
14
|
+
- Monthly is no longer merged across providers under `All`. Two providers' calendar months were joined into one row per label, which nulled the Claude row's `Used %` and `$/1%` only when Codex happened to have that month, and recomputed one model split across two vendors' model families. Each provider now keeps its own months in its own section, and the modal's table and navigator name the provider so two rows sharing a label are tellable apart (#556).
|
|
15
|
+
- Weekly and Monthly now foot their combined cost with the span it covers and each provider's share. Weekly states exact dates, which its rows carry; Monthly states a month-label span, because monthly rows carry no bounds and the current month's read ends at the current instant rather than at the month's end (#556).
|
|
16
|
+
- A combined daily row no longer publishes a cache-hit percentage or a model split. Claude counts cache reads outside its input total and Codex counts them inside, so no ratio over their sum describes anything, and one model stack over two vendors' families shares a denominator that means nothing. The day's detail now breaks the combined figure back down per provider instead (#556).
|
|
17
|
+
- Five-hour blocks under `All` interleave both providers in time order rather than listing every Claude window above every Codex one, so a block from this morning can no longer render below one from last week. The footer keeps its total and states the interval the shown windows span plus each provider's count and cost — never a shared reset cycle, because the two providers' five-hour clocks are independent (#556).
|
|
18
|
+
- Weekly and Monthly table sorting is now per table. One shared preference meant a sort chosen on the weekly table applied to the monthly table, which does not have the `Used %` or `$/1%` columns at all. Under `All` the ordering applies inside each provider section rather than interleaving two providers' independent histories into one ranked list. An existing shared preference is reset rather than guessed at, because nothing recorded which table it came from (#556).
|
|
19
|
+
- When a cross-provider aggregate cannot be computed, the dashboard says so and names the missing fact, instead of rendering an empty table that reads as "no activity yet" or an error that reads as a broken instance. A version of the server the page has not seen before is handled the same way rather than rendering nothing (#556).
|
|
20
|
+
- A cross-provider span never names a day that has not happened yet. The Claude project drill and the `Weekly` footer both state calendar windows rather than data extents — the drill window runs to the current week's Sunday and the current weekly row ends at its reset — so on six days in seven they named future dates beside a cost figure. The stated end is now clamped to the instant the page was generated. The Codex project detail also states the window its totals cover, which is wider than the shared range the ranked row beside it is priced over, so the two figures no longer read as contradicting each other (#556).
|
|
21
|
+
- Recent alerts under `All` now lists both providers in one true chronological order. The union was ordered by a timestamp only the Codex side ever wrote, so every Claude row sank below every Codex row and a Claude alert from a minute ago rendered beneath a Codex alert from six days ago in a panel titled "Recent alerts". Alerts are now ordered — and truncated — by the instant each one fired, which is also the instant each row prints. Codex alert rows published the moment a threshold was crossed rather than the moment the alert fired, which are different moments, and now publish the firing instant (#556).
|
|
22
|
+
- The Codex budget alert chip now reads `BUDGET` rather than `CODEX`. It sat immediately beside a source chip already reading `Codex`, so the row said the same thing twice and named neither the metric nor anything the source chip did not already say. The chip names the metric; the source chip names the provider; the two budget chips stay distinguishable by colour (#556).
|
|
23
|
+
- The Recent Sessions panel now states its composition under `All`, on the same wrapping sub-line the Weekly, Monthly, Daily, Projects and Blocks panels already use. It was the last panel whose content changed under `All` without saying so, leaving the row-level provider chips as the only disclosure that two providers' sessions share one table. The note claims no ordering, because the table is recency-ordered only until a column header is clicked. The Claude and Codex tabs are unchanged (#572).
|
|
24
|
+
- Nothing under `All` is rendered but unreachable any more. At a 1440x900 desktop the Current Usage and Trend modals showed their content clipped with no scrollbar anywhere in the card: six of sixty Claude milestone rows were visible, the five-hour milestone table could not be reached at all, and Claude's Older-block and Newer-block controls sat entirely below the cut, although the identical controls work on the Claude tab. Both modals now scroll as one scrollport. The Weekly and Monthly modals are unchanged and keep their pinned left pane with a scrolling table (#556).
|
|
25
|
+
- The `All` Forecast panel now shows each provider's own detail. It rendered neither of Claude's two per-day budget figures nor Codex's confidence and budget pace, although both were already computed, so the combined panel showed strictly less than either provider tab. On an install with more than one Codex account the confidence line stays withheld, because it describes one arbitrarily chosen account's history and would reconcile against no account card and no tab (#556).
|
|
26
|
+
- A provider with no forecast is no longer reported as `unavailable` in the `All` Forecast panel. It now renders the same labelled dash structure its own tab renders, and keeps the sentence naming why it contributed nothing (#556).
|
|
27
|
+
- The Projects window pills now look disabled when they are. Under Codex and `All` the 1w / 4w / 8w / 12w buttons are inert, because provider-native project history has no week window, but they rendered pixel-identical to the working buttons beside them and still showed a pointer cursor on hover (#556).
|
|
28
|
+
- On an install with a single Codex account, the Codex cycle navigator in the Current Usage modal is announced in cycle vocabulary. Its two buttons were named "Older week" and "Newer week" for both providers, so a screen reader heard a Claude concept everywhere the visible labels said cycle (#556).
|
|
29
|
+
- Every provider section under `All` is now announced by a heading naming it, so the view can be navigated by heading instead of reading as one flat block beneath its panel or modal title. Nothing changes visually (#556).
|
|
30
|
+
- The Help overlay now says how to open the Current Usage modal, which no digit shortcut can reach, and no longer carries a "the current source doesn't show" block that could never list anything. The dashboard documentation's four false statements about `All` are corrected: which panels each source shows, how the persisted card order works, what the digit keys open, and how the side-by-side provider sections are navigated (#556).
|
|
31
|
+
|
|
8
32
|
## [1.97.0] - 2026-08-13
|
|
9
33
|
|
|
10
34
|
### Changed
|