Trust-score products answer whether a tool is safe to use. This index answers a narrower question: is this metering number supported by evidence? Every entry binds a finding to a status, a date and a public link. There is no composite score, no ranking, and no paying for placement — the states below are the whole vocabulary.
A Verified Mismatch was reproduced with the tool's own parser on a synthetic fixture, filed upstream with a pinned commit. Fixed · Re-verified means the upstream fix landed (the link is the fix). Conformance Pass names tools that audited clean — that matters as much as the bugs. UNPROVABLE is a result, not an error. Emission shapes that are intended contracts are filed as semantics questions, not bugs.
Method: read the code, build a synthetic fixture, run the tool's own parser against it. Full method and case list: the audit report and measurement casebook. Below are the named entries; the casebook carries the rest.
Confirmed-tool counts per class, from the audit report (2026-09). In tooling, the wrong-rule kind wins — duplicates and stale price tables are mechanical and findable. On invoices, the did-nothing kind hides better, because it is policy, not a bug; that is why a recount starts by getting the vendor's rules in writing.
| Class | Confirmed tools | Share of the 35 class hits |
|---|---|---|
| 1 · One message ≠ one line | 10 | 29% |
| 3 · Cache-pricing semantics | 9 | 26% |
| 4 · Price-table drift | 7 | 20% |
| 2 · Re-emitted events | 5 | 14% |
| 5 · Resume/fork history loss | 4 | 11% |
Claude Code writes one JSONL line per content block, each carrying the same message id and usage. Sum per line and a message with text + two tool calls is billed 3×. Measured real overcounts: 2×–5×.
| Tool | Finding | Status | Evidence |
|---|---|---|---|
| tokendash | 3-block message → 3× tokens and cost | Fixed · Re-verified | PR #37, merged 2026-09-09 |
| ccem | same shape, first-wins variant undercounts | Verified Mismatch | issue #12, 2026-09 |
| samewrite | a research project's headline numbers rested on it | Verified Mismatch | issue #1, 2026-09 |
Codex re-emits token_count events with identical totals after compaction, settings changes and rate-limit refreshes. Naive accumulation double-counts. Measured on real corpora: +0.5% to +15% per session file.
| Tool | Finding | Status | Evidence |
|---|---|---|---|
| token-vision | one real rollout, +14.97% | Verified Mismatch | issue #1, 2026-09 |
| tokenscope | identical-total re-emissions summed | Fixed · Re-verified | PR #6, merged |
| coding-agent-usage-tracker | same class | Fixed · Re-verified | PR #1, merged |
Anthropic's input_tokens excludes cache tokens; OpenAI's includes them; 5-minute cache writes cost 1.25× input, 1-hour 2×, reads 0.1×. One convention applied to both providers clamps input to $0, double-charges cache, or prices 1h writes at 1.25×.
| Tool | Finding | Status | Evidence |
|---|---|---|---|
| claude-hud | 1h writes priced 1.25× — 37.5% understated on that component | Fixed · Re-verified | PR #758, merged (27.9k★) |
| one-api-pro | streaming += double-counts input (+50.7% no-cache) and re-subtracts cache in billing | Fixed · Re-verified | issue #13, closed completed |
| langfuse | OTel cache_write alias missing from the extractor's cache-creation list — the flagship cache-accounting finding | Fixed · Re-verified | issue #17117, fixed on main (34k★) |
Embedded price snapshots diverge from published rates by 1.2×–5× — including vendored copies of LiteLLM's price file, the industry's source of record.
| Tool | Finding | Status | Evidence |
|---|---|---|---|
| litellm | Bedrock CRIS Claude-3-Haiku cache rates ratio-generated instead of Anthropic's non-round published values | Verified Mismatch | issue #40360, 2026-09 |
| llmcost | inherited the same values in a vendored snapshot | Verified Mismatch | issue #25, 2026-09 |
| snip | two contradictory hardcoded price tables | Fixed · Re-verified | issue #186 → fixed via #189 |
Codex resume writes a new rollout file with the original session id; stores that replace-per-session wipe everything before the resume, and fork replay double-counts the parent prefix.
| Tool | Finding | Status | Evidence |
|---|---|---|---|
| ai-usage-inspector | 86% of a session's tokens vanish (real pair measured) | Verified Mismatch | issue #1, 2026-09 |
| swarm | fork replay double-counts the parent prefix | Fixed · Re-verified | PR #146 with maintainer credit, 2026-09 |
Each fix is the upstream link; the dated subsection of the audit report records when it landed.
| Tool | Status | Evidence |
|---|---|---|
| candor | Fixed | PR #8 — gpt-4o cached input 0.3125 → 1.25 with a pinned-table regression guard (merged 09-14) |
| openlit | Fixed | PR #1543 — measured-zero no longer conflated with unknown (merged 09-15) |
| codeburn | Fixed | PR #1264 — three-layer token_count dedup after three review rounds (merged 09-16) |
| tokscale | Fixed | issue #1306 — forked sessions no longer double-count |
| claude-usage-widget | Fixed | issue #1 — first-wins no longer drops 25% of output (maintainer reproduced independently) |
| token-monitor | Fixed | issue #627 — fork dedup anchored on stable response identity |
| openusage | Fixed | issue #360 — Codex cached tokens no longer billed twice |
| tokenfuse | Fixed | issue #267 — cached tokens no longer priced on both sides |
| trulens | Fixed | PR #2766 — mixed-currency aggregation, fixed by a third-party contributor from this report |
Most audited repos passed. We name the clean ones because that matters. And one filing we got wrong the first time — an emission shape with no unguarded consumer is an intended contract, not a bug; the maintainer was right to close it not-actionable, and it is now a methodology rule.
| Tool | Status | Evidence |
|---|---|---|
| promptfoo · Portkey model data · TokenTracker | Conformance Pass | named clean in the audit report, 2026-09 |
| pydantic-ai | Not a bug · semantics | issue #7975 closed not-actionable — correctly |
The fixture corpus is open data — plain JSONL plus expected totals, no runtime. Point your parser at it like at real logs:
Found a metering claim this index should carry? File it — a finding needs a reproduction and a date, that is the whole bar.
Want a human check on your own numbers? The $20 Metering QA check takes one sample and one metering question — verdicts bound to the same invariants as this index, within 24 hours, fit confirmed before anything is charged.