Skip to content

cost benches audit round: one ranking rule, the size in /api/stat, calculators off every bench page - #3433

Merged
Flotapponnier merged 1 commit into
devfrom
fix/cost-bench-audit-round
Oct 30, 2026
Merged

Flotapponnier merged 1 commit into
devfrom
fix/cost-bench-audit-round

Conversation

@Flotapponnier

@Flotapponnier Flotapponnier commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes from the 2026-10-30 re-audits of benches 309 and 310 (data and SEO passes). They also apply to 312, which shares the code.

Ranks

APIs

  • /api/stat now honours ?bucket=.
  • priceReading is carried into the /api/stat and MCP rankings.
  • The variant API keeps the headline seoTitle and seoDescription.
  • New headline_slice spec field: the citable headline names its cell, not "measured on … Medium size".
  • No sample_size or percentile axes in the Dataset JSON-LD of unsampled benches.

Weight

  • The cost calculators load through next/dynamic from a client wrapper, with SSR kept. Before, every bench page downloaded them (68 KB gzip).

Display

  • Calculators print cents when there are cents.
  • Product appearance rows print published prices whole.
  • A $0 floor reads "$0 on its published rates".
  • Pricing-only vendors get a pricing H1.
  • Vendors on several pricing benches get a title and description covering all of them.

Copy

  • 309: Portal's meter added; changelog sentences removed; Privy's bills read from the curve; freshness gap stated.
  • 310: the bot FAQ and finding are read from the curve (Magic ties Circle at 10k); Units completed; Circle's chain scope and USDC rebate; title updated.

Validator

  • A "cheapest" question needs a rank cell in the answer's first sentence.
  • Only rank cells exempt a winner sentence. I proved it on the old bot answer: it fails.

Harnesses (309, 310, 312)

  • Site curves are rechecked every 5 minutes; the mismatch alert fires after 15 minutes instead of 2 hours.
  • The release order is written in the wallet-cost README.

Not in this PR

  • p50 is still 0 on not-served rows in the variant JSON. Fixing it changes the result row type used across the loader. The rows already carry their reason.
  • explain() picks the reason by cap. This is latent and correct today.
  • Purging Dynamic's corrected samples from Prometheus needs a decision.

Checks: bun test src/lib 760 pass; tsc clean; pnpm validate green; go test green on the three harnesses.

Cache keys: bench-unfiltered-v132, all-benchmarks-v125, bench-filters-v70.

@Flotapponnier
Flotapponnier force-pushed the fix/cost-bench-audit-round branch from eab618e to 8fb65a9 Compare October 30, 2026 17:34
…lculators off every bench page

Fixes from the 2026-10-30 re-audits of benches 309 and 310 (data and SEO
passes), applied to bench 312 as well since it shares the code.

Ranks. Product pages ranked only the prices that hold while the ledger and
the calculator rank every priced row except an "at least" price at or under
the leader, so /products/portal read "#8 of 8" in its bench list and "#6 of
6" in the table under it, and Privy "#7 of 8" beside "not ranked".
src/lib/cost-rank.ts now holds the one rule; the product tables and the
product metadata use it, with the same denominator.

Machine surfaces. /api/stat ignored ?bucket=, so ?kind=trading&bucket=100k
answered with the 10k cell while echoing only the kind; it now applies the
size. /api/stat and the MCP rankings carry priceReading ("at most", "at
least"), so Privy's floor is no longer a plain $6,500 in JSON. The variant
API copies the headline seoTitle and seoDescription instead of resolving
them on a filtered view under the headline's label. A new spec field,
headline_slice, replaces "measured on AI agents, 50 transactions each,
Medium size" in the citable headline with what the cell is. The Dataset
JSON-LD of a bench with ledger_reliability: false no longer lists
sample_size or percentile axes.

Weight. Every bench page downloaded the cost calculators and their curves
(68 KB gzip) because the shared route imported them statically; they now
load through next/dynamic from a client wrapper, SSR kept.

Display. The calculators print cents when a bill has cents (Dfns
$2,916.67, not $2,917); product appearance rows print a published price
whole ($51,299, not $51.3K); a $0 floor reads "$0 on its published rates"
instead of "at least $0". Vendors priced only by the pricing benches get an
H1 that says pricing, and one on several of them (Circle, Turnkey, Openfort,
ZeroDev) a title naming every kind and a description from the first
headline bill it has, instead of bench 309's alone.

Copy. 309: Portal's meter in the Units bullet and the transactions FAQ,
the changelog sentences out of the Dynamic finding and the cohort, the
false Openfort cross-reference dropped, Privy's 100k bills read from the
curve, the freshness gap stated. 310: the bot FAQ and finding name the
curve's winners (Magic ties Circle at 10,000 transactions), Dfns and
Crossmint in Units, Circle's chain scope and USDC rebate, bot and payout
cells in the intro, a title that does not promise one winner.

Validator. A question asking for the cheapest must be answered by a rank
cell in its first sentence, and only a rank cell exempts a winner sentence
(any vendor cell did). Proved by putting the old bot answer back: it fails.

Harnesses (309, 310, 312). The site curves are re-read every 5 minutes and
the mismatch alert fires after 15 (was hourly and 2h, blind to the 30
minutes production priced from two catalogues on 2026-10-30); the release
order is in the wallet-cost README.

Cache keys bench-unfiltered-v132, all-benchmarks-v125, bench-filters-v70.
@Flotapponnier
Flotapponnier force-pushed the fix/cost-bench-audit-round branch from 8fb65a9 to 0e30978 Compare October 30, 2026 18:05
@Flotapponnier
Flotapponnier merged commit c1b77fb into dev Oct 30, 2026
2 checks passed
@Flotapponnier
Flotapponnier deleted the fix/cost-bench-audit-round branch October 30, 2026 18:11
Flotapponnier added a commit that referenced this pull request Oct 30, 2026
…3434)

* a kind or bucket view names itself in /api/stat and the MCP headline

/api/stat/server-wallet-cost?kind=bot&bucket=large answered "Circle posts
the lowest monthly cost for 10,000 AI agents at $0": the bot's figure under
the metric of the headline cell, since the metric and the slice clause both
describe the default view. Found while checking #3433 on staging; the old
"measured on <first dimension labels>" clause had the same defect.

A request with a kind or bucket filter now gets a sentence that names the
view from the tab labels ("Circle posts the lowest figure on the Trading
bot, 20 wallets, Large size view at $0 across 9 ranked vendors, from
published list prices"), in /api/stat (headline and quote) and in the MCP
get_benchmark headline. The unfiltered sentence is unchanged. No cache key:
the sentence is built per request from the cached record.

* product prose prints a published price whole and keeps a $0 price

The intro of /products/portal read "$51.3K latest" above a table saying
$51,299, and a vendor whose price is $0 (Circle for a 20-wallet bot) was
dropped from it as if unmeasured. Pricing benches now print the bill whole
and keep $0, and a pricing-only vendor is "priced across" its benches, not
"measured".
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant