Skip to content

v0.25.0 — the panel draws what the store was keeping

Latest

Choose a tag to compare

@Jason-Vaughan Jason-Vaughan released this 12 Sep 21:54
· 2 commits to main since this release
b2ccc7d

The panel draws what the store was keeping

totals.json has carried a per-model and a per-day dimension since 0.24.0, and nothing rendered
them — the panel showed one lifetime dollar figure and a tier count, so it could not answer which
backend avoided it
or is this trending.

The Settings view now shows a ranked per-model table (model · requests · spend avoided, with a
bar restating each figure) and a per-day sparkline over a 7 / 30 / 90 day window.

Hand-built inline SVG, no charting library. A CDN script would break the guarantee that a
default install reaches nothing off-machine, and a vendored minified copy cannot be reviewed in a
diff — which is the only review this project performs. What that costs is zoom and tooltips, so
every value the chart draws is also readable as text: a table beside it, and the graphic's own
label.

The caption states what the chart cannot show. Per-day recording began when 0.24.0 landed on a
given install, and the store evicts its oldest day past a retention cap — so a lifetime figure
legitimately covers more than any chart of it. The caption names the drawn range, how much of the
lifetime total falls outside the window, and how much is in no day bucket at all.

/api/stats names what it sends

Building that renderer meant deciding what the endpoint returns. It had been shipping the
measurement rollup verbatim, so its payload was whatever the rollup happened to hold — three
lifetime fields added for the CLI's benefit, one able to reach ~52 KB, arrived on the panel with
nobody deciding it. The endpoint now declares its own fields, and the two breakdowns reshape into
ordered lists so the ranking and the per-day gap-filling are decided and tested server-side rather
than left as rules the browser has to know.

Internal

Nothing here changes what the product does.

  • wheel is no longer a build requirement. setuptools builds wheels with its own
    bdist_wheel, so the entry resolved a distribution the build never used. The artifacts were
    verified equivalent down to the wheel's RECORD, and a real --no-binary sdist install confirmed
    the build never needed it.
  • The data model's concurrency inventory names the first-run state migration — the one
    cross-process write every console script performs at startup, previously absent from the list.
  • A citation that pointed at a file outside the public tree is fixed, and the class is now
    closed by a test that resolves every cited doc against what git actually tracks, rather than by
    a sweep someone has to remember to re-run.
  • GitHub Actions are pinned to commit SHAs. Every action previously ran from a mutable major
    tag, so what executed was whatever that tag pointed at on the day. A test guards both halves of
    each pin — the SHA, and the version comment the update mechanism reads.

Upgrading

No runtime dependency floor moved. httpx >= 0.27, < 1 and PyYAML >= 6.0, < 7 are unchanged, so
nothing about what you may install has narrowed and no announcement is owed under
docs/design/deprecation-policy.md § Dependency floors.

Known limit carried into this release: the per-day chart's history starts where 0.24.0 landed on
your install, not where the lifetime figure starts. The caption says so on every render rather than
letting a narrower window read as a quieter month.