Skip to content

two missing logos were two wrong slugs, and one of them hid Padre - #2846

Merged
Flotapponnier merged 1 commit into
devfrom
feat/terminal-chains-logos-urls
Oct 7, 2026
Merged

Flotapponnier merged 1 commit into
devfrom
feat/terminal-chains-logos-urls

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

You asked why the SOLANA chip had no icon, why pump.fun and Terminal showed initials, whether every row has a logo and a product page, what Terminal is, and why two of the benches were Solana-only. Three separate faults, and the third was not cosmetic.

The chip

The logo is looked up on the dimension value. The headline slice is published under all and labelled "Solana", so hasLogo("all") missed. ChainTabs now falls back to the label slug, which fixes every aliased chip on every bench without each spec carrying an icon field.

The two provider logos

row what was wrong
pump.fun I renamed its slug to pumpapp in #2842 so the metric panels could resolve. pump-fun.jpg stopped being found. The slug was the wrong thing to bend.
Terminal Published as terminal, but bench 201 already carries that product as slug padre, display name Terminal
BasedBot Had a logo — another product's. The manifest aliased basedbot to based-app.png, which is Based App, the Hyperliquid frontend on bench 269. Orange B against BasedBot's blue bird.

The harness now maps the source's bot ids onto the slugs this repo already uses, so one product is one row across every bench.

What Terminal is, and a retraction

Terminal is Padre. trade.padre.gg still titles itself "Terminal | Your Edge in Memecoin Trading", and bench 201 has carried it as padre / name "Terminal" all along.

Which means the line I wrote in bench 206 — "Padre, Phantom and Bloom are not covered by this source" — was wrong about Padre. It is in the cohort, under its new name, and I split one product across two identities by not checking the repo first. Fixed.

Product pages

None of the four benches declared a url, so no row linked anywhere. They do now, to clean domains — not to the source's own website_url fields, every one of which is a tehcscreener referral link (axiom.trade/@adamtehc, gmgn.ai/?ref=..., pump.fun/join/adam_tehc). Publishing those would route our readers through a third party's affiliate codes on a site whose stated policy is no paid placement and no sold ranking slots.

Chains

206 and 207 were Solana-only because their slugs say so. That was my call and it was the wrong trade. All four now carry seven chain tabs, and three carry a real all-chains slice.

all is a true total where totalling is valid and the headline chain where it is not:

  • volume, transactions, fees add up, and the ratios built on them are volume-weighted by construction
  • a wallet trading on two chains is one wallet, and the source deduplicates for only 2 of 9 terminals, so bench 232 has no all-chains tab and says why on its own page

Fomo's all-chains volume is $151.6M against $103.2M on Solana alone.

Two bugs found while building that

The all-chains take rate divided by volume it could not measure. Axiom's measured Solana fees over its Solana + Robinhood + BNB volume reads 0.66% where the measured rate is 0.92%, understating a terminal precisely because part of it could not be measured. A withheld cell now leaves the ratio entirely, numerator and denominator together.

Canonicalising the roster broke the fetch. The roster addresses the API, which only knows its own ids, so GET /bots/pump-fun returned 404 and both renamed rows went dark. The list is raw for fetching and canonical for comparison.

Still inconsistent, flagged not fixed

solana-unique-traders and solana-avg-trade-size keep their slugs while their titles, default view and tabs are no longer Solana-only. The methodology now says so rather than leaving it silent. Renaming touches seven call sites each plus bench-published.json; your call.

Verification

Every declared tab fills — 8 / 8 / 7 / 7 / 6 / 6 / 5 / 4 rows across the strip — checked against Prometheus per tab rather than read off the leader line. pnpm validate 237/237, typecheck clean, go test green (3 new tests: the all-chains split in both directions, the withheld-volume denominator, and the raw-vs-canonical roster), gofmt clean, eslint clean. Harness redeployed.

A reader asked why the SOLANA chip had no icon and why pump.fun and Terminal
showed initials. Three separate faults, and the third was not cosmetic.

The chip: the logo is looked up on the dimension VALUE, and the headline slice
is published under `all` while being labelled Solana, so hasLogo("all") missed.
ChainTabs now falls back to the label, which fixes every aliased chip on every
bench without each spec carrying an icon field.

pump.fun: I renamed its provider slug to `pumpapp` in #2842 so the metric
panels could resolve, and pump-fun.jpg stopped being found. The slug was the
wrong thing to bend. The harness maps the source's bot ids onto the slugs this
repo already uses, so one product is one row across every bench.

Terminal: same mapping, and this one mattered. Bench 201 already carries that
product as slug `padre`, display name Terminal, because Padre renamed itself;
trade.padre.gg still titles itself "Terminal | Your Edge in Memecoin Trading".
Publishing it as `terminal` split one product across two identities, and led me
to write in bench 206 that "Padre is not covered by this source" when Padre is
in the cohort under its new name. That line is gone and the row is `padre`.

BasedBot had a logo, pointing at another product. The manifest aliased
`basedbot` to based-app.png, which is Based App, the Hyperliquid frontend on
bench 269: an orange B against BasedBot's blue bird. A wrong-product logo is
worse than none, so BasedBot has its own file now.

Product links: none of the four benches declared a `url`, so no row linked
anywhere. They do now, to clean domains. Not to the source's own website_url
fields, every one of which is a tehcscreener referral link (axiom.trade/@adamtehc,
gmgn.ai/?ref=..., pump.fun/join/...). Publishing those would route our readers
through a third party's affiliate codes on a site whose stated policy is no
paid placement and no sold ranking slots.

Chains, which is the other half of what was asked. 206 and 207 were Solana-only
because their slugs say so; that was my call and it was the wrong trade. All
four benches now carry seven chain tabs, and three carry a real all-chains
slice. `all` is a true total where totalling is valid and the headline chain
where it is not: volume, transactions and fees add up, and the ratios built on
them are volume-weighted by construction, but a wallet trading on two chains is
one wallet and the source deduplicates for only 2 of 9 terminals, so bench 232
has no all-chains tab and says why on its own page.

Two bugs found while building that:

The all-chains take rate divided by total volume including the chains whose
fees were withheld. Axiom's measured Solana fees over its Solana plus Robinhood
plus BNB volume reads 0.66% where the measured rate is 0.92%, understating a
terminal precisely because part of it could not be measured. A withheld cell
now leaves the ratio entirely, numerator and denominator together.

Canonicalising the roster broke the fetch. The roster addresses the API, which
only knows its own ids, so GET /bots/pump-fun returned 404 and both renamed
rows went dark. The list is raw for fetching and canonical for comparison, and
canonicalRoster does the conversion at the one place that needs it.

Titles on 206 and 207 no longer say "on Solana". Their slugs still do, and the
methodology says so rather than leaving it silent; renaming them touches seven
call sites each plus bench-published.json and is a separate change.

Every declared tab fills: 8/8/7/7/6/6/5/4 rows across the strip, verified
against Prometheus per tab rather than from the leader line.
@Flotapponnier
Flotapponnier merged commit cf6b2cd into dev Oct 7, 2026
2 checks passed
@Flotapponnier
Flotapponnier deleted the feat/terminal-chains-logos-urls branch October 7, 2026 14:11
Flotapponnier added a commit that referenced this pull request Oct 7, 2026
… behind them (#2848)

Chasing "did you link it to the right product page" to the end. Provider rows
link to /products/<slug> through rowHref, so the slug IS the link. Before
#2846 two rows pointed at 404s: /products/pumpapp and /products/terminal, both
confirmed 404 on staging. Canonicalising the slugs fixed the links, and all
nine now resolve.

Two things that fix did not cover.

The external link, description and X handle on a product page come from
src/data/provider-registry.ts, not from the bench spec. Seven of the nine were
registered; padre and basedbot were not, so their pages had no link out and a
generated fallback description. Both added, in the registry's own neutral
register rather than the source's marketing copy ("#1 Degen Trading Bot 🚀").
BasedBot's entry says outright that it is not Based App, the Hyperliquid
frontend, because the two already collided once in the logo manifest.

And the `url:` field I added to all four specs in #2846 is dead. It passes the
schema, but nothing in the render path reads it: `url` is not on
ProviderResult, the loader never carries it, and no other bench in the repo
declares it. Thirty-six lines removed. A field that validates and renders
nothing is worse than no field, because the next person reads it as the
mechanism and stops looking for the real one.
Flotapponnier added a commit that referenced this pull request Oct 7, 2026
Finishing the logo sweep. Seven chain chips across the terminal benches, six
resolved, HyperEVM did not.

Aliased to hyperliquid.png: HyperEVM is Hyperliquid's EVM execution layer, the
same project and the same brand, which is how hypercore and hyperliquid-hip3
are already handled two lines above.

Worth distinguishing from the alias removed in #2846. basedbot pointed at
based-app.png, a different company's logo on a different product. This one
points at the same project's own mark. An alias is right when the brand is
shared and wrong when only the name looks similar.
Flotapponnier added a commit that referenced this pull request Oct 7, 2026
…2852)

Benches 203, 206, 207 and 232 leave DEV_ONLY. They were gated on 2026-10-02
when the Dune trial ended; they were re-sourced this week to the public
tehcscreener API via harnesses/terminal-activity, and the audit round is what
#2843, #2844, #2846, #2848 and #2849 were.

Un-gated after the audit rather than after a 24h window, and the distinction
matters: these four declare no range selector. Every query is an instant read
of a gauge, so there is no window to fill. The only thing a day would buy them
is a complete chart, which is cosmetic, and 351 scrapes are already in.

206 and 207 are renamed on the way out:

  solana-avg-trade-size  -> terminal-avg-trade-size
  solana-unique-traders  -> terminal-swap-transactions

Both gained an all-chains default view in #2846 while their slugs still
promised Solana, which is the kind of thing an SEO audit flags and a reader
trips over. Neither was ever served on production, so there is no signal to
preserve and no redirect is owed; RENAMED_BENCH_SLUGS stays untouched. The
second name also drops a claim the old one never earned: it counts
transactions, not unique traders.

Cache keys bumped in lockstep, bench-unfiltered v88 to v89, all-benchmarks v81
to v82 and bench-filters v32 to v33, because every cached bench set is stale on
both counts: the membership changed and two slugs moved. bench-published.json
keeps each bench's original publication date under its new key.
Flotapponnier added a commit that referenced this pull request Oct 7, 2026
* four benches came off Dune, and the method was the bug, not the vendor (#2842)

Benches 203, 206, 207 and 232 were gated to staging on 2026-10-02 when the
Dune trial ended, under a note saying they "have no free equivalent for what
they measure". That stopped being true. They now read the public tehcscreener
API through a new harness, terminal-activity: Allium-backed, no key, 120
requests a minute, synced daily.

The interesting part is not the saving. Fee-wallet attribution can only see a
terminal that charges a fee, so the old method had three blind spots that
belonged to the method and not to Dune:

  pump.fun takes no terminal fee and was structurally absent from three of
  these four benches whatever its real volume. It is now measurable, and on
  Solana it is third by wallets at 51,554 and first by nothing: its observed
  take rate reads 0.000% against 0.44% to 1.12% for everyone else.

  Fomo sponsors the gas on the trades it routes, so the addresses on its
  transactions were its own routing accounts. Bench 232 published no figure
  for it at all. It now leads that bench at 86,227 wallets.

  BasedBot had no public fee-wallet list and read unresponsive everywhere. It
  turns out to be a Robinhood Chain terminal: $419M there against $15.8M on
  Solana over 30 days, and zero Solana volume in the last 7, so it ranks on
  one tab and reads unresponsive on the other rather than being given its last
  live Solana day.

The source is also per chain, so 232 and 203 gained a chain axis with five
tabs (Solana, BNB, Robinhood, Ethereum, Base) filling 8/7/7/5/6 rows. 206 and
207 stay Solana-scoped because their slugs say so. 232 gained two columns off
the same row it already read, swaps per wallet and volume per wallet, which
separate a terminal with many light users from one with few heavy ones:
Terminal leads both while Fomo leads the count.

What got worse, stated rather than hidden: bench 203 lost its fee-paying-rate
panel. That column measured the share of transactions that actually paid a
fee, which this source does not report and which none of its fields
reconstruct, so it was removed rather than approximated. Bench 206 lost Padre,
Phantom and Bloom, which the source does not cover; they were removed rather
than published as zero, because a zero would rank them last on a figure nobody
measured.

Three guards, each for a failure seen in the data:

  Gauges are deleted, not republished. The previous source froze on 2026-08-25
  and was republished for 32 days with nothing in the metrics saying so.

  The sample is the source's latest day, never the latest day that carries a
  number, so a terminal that did nothing in the window reads unresponsive.

  A zero fee column is distinguished from a zero fee. One terminal at zero is
  pump.fun; every terminal on a chain at zero is the column having failed, and
  terminal_fee_column_ok says which, wired as the bench's probe_ok so no badge
  can crown a leader off a dead column.

Audit findings fixed in passing: the hub's four tooltips and its source label
still said Dune and still told readers that Fomo, pump.fun and BasedBot were
unmeasured, which is now the opposite of what the pages show; the paused-bench
notice named a blocker that has been cleared; the four seo_titles ran 80 to 93
characters against a repo median of 50 and the descriptions 174 to 195 against
136, so both were brought into range; bench 203's new title had drifted off its
own slug and was pulled back; the Dockerfile did not copy go.sum, so the image
was not reproducible.

The two containers nobody reads any more, ocb-dune-platform-volume and
ocb-memecoin-platforms, are stopped on the VPS rather than removed. They were
idle at 0% CPU so the machine gains nothing; what they stop doing is polling
Dune. dune-platform-volume keeps its SQL and a header saying plainly that no
bench reads it.

The four stay in DEV_ONLY. The blocker is no longer a Dune plan, it is the
ordinary one: a full 24h window of the new series and an audit round.

(cherry picked from commit 0bf009a)

* I crowned pump.fun's zero take rate an hour ago and it does not hold (#2843)

#2842 shipped bench 203 asserting that the pump.fun app "takes no terminal
fee, so this reads 0: a measurement, not a missing value", and made that the
page's headline finding. Checking the source per chain rather than per row
breaks the claim.

pump.fun reports fees on Robinhood, BNB, Ethereum and Base, and exactly $0.00
on the $252M it routes on Solana. Axiom is the same shape inverted: it charges
0.92% on Solana and reported exactly $0.00 on $29.8M of Robinhood volume and
$21.7M of BNB volume across a full week. Nobody routes tens of millions for
free for a week. Those zeros are gaps, and I published one of them as the
cheapest price in the market and let it crown a tab.

The fee guard was one level too coarse. terminal_fee_column_ok is per chain,
so it asks "did anybody on this chain report a fee" and reads healthy while a
single row is blank: on BNB, gmgn, maestro, terminal and fomo all report fees,
so nothing stopped Axiom's zero from winning.

There is now a second guard per cell. A platform that reports fees on any
chain and exactly zero on another, on material volume, has that cell's take
rate withheld and terminal_fee_withheld set, because this harness cannot tell
a waived fee from an unmeasured one and will not guess in the direction that
produces a leader. Volume, transactions and wallets for the cell are
untouched; only the ratio that needs the fee column is withheld.

A platform reporting zero on every chain it serves is a different claim and
still publishes as a real zero, so a genuinely free terminal is not erased.
Two tests pin both directions.

Live effect: five cells withheld (pump.fun on Solana, Axiom on Robinhood, BNB
and Arc), seven Solana take rates remain, and the Solana tab is now led by
Fomo at 0.442%, which is measured.

Copy corrected in bench 203's disclaimer, seo_intro, methodology, findings,
FAQ and the pump.fun formula, in the harness README and metric list, and in
the hub tooltip, all of which repeated the claim.

(cherry picked from commit 128d159)

* the withheld cell still won the tab, because the gate answered the wrong question (#2844)

#2843 withheld the take rate for a cell whose zero could not be explained, and
the harness did exactly that. Axiom still led the BNB and Robinhood tabs at
0.000%.

terminal_activity_health answers "did this platform publish on this chain". For
a withheld fee cell the answer is yes, and correctly so: the volume,
transactions and wallets are all there and all real. Only the take rate is
missing. Bench 203 gated on that, so the row rendered live, the absent p50
became 0 under zero_is_a_value, and with lower-is-better a blank cell was
crowned the cheapest terminal in the market.

A bench has to gate on the metric it ranks, not on whether the row exists.
terminal_fee_rate_health{platform,chain} is 1 only when a take rate was
actually published for that cell, and bench 203's nine success queries now read
it. The other three benches keep the generic gate, which is right for them:
they rank volume, transactions and wallets, and none of those is ever withheld.

Verified on the deployed harness: the fee gate reads 0 for pump.fun on Solana
and for Axiom on Robinhood and BNB, 1 on every other cell.

Found by checking the published variant blobs row by row rather than trusting
the leader line. Two of the rows that looked wrong there, Trojan and Photon at
p50=0 on chains they do not serve, were already correct: they carry
availability=unavailable and the page filters them. My own check had counted
them as ranked because it tested p50 for null and zero is not null.

(cherry picked from commit bf86fd2)

* two missing logos were two wrong slugs, and one of them hid Padre (#2846)

A reader asked why the SOLANA chip had no icon and why pump.fun and Terminal
showed initials. Three separate faults, and the third was not cosmetic.

The chip: the logo is looked up on the dimension VALUE, and the headline slice
is published under `all` while being labelled Solana, so hasLogo("all") missed.
ChainTabs now falls back to the label, which fixes every aliased chip on every
bench without each spec carrying an icon field.

pump.fun: I renamed its provider slug to `pumpapp` in #2842 so the metric
panels could resolve, and pump-fun.jpg stopped being found. The slug was the
wrong thing to bend. The harness maps the source's bot ids onto the slugs this
repo already uses, so one product is one row across every bench.

Terminal: same mapping, and this one mattered. Bench 201 already carries that
product as slug `padre`, display name Terminal, because Padre renamed itself;
trade.padre.gg still titles itself "Terminal | Your Edge in Memecoin Trading".
Publishing it as `terminal` split one product across two identities, and led me
to write in bench 206 that "Padre is not covered by this source" when Padre is
in the cohort under its new name. That line is gone and the row is `padre`.

BasedBot had a logo, pointing at another product. The manifest aliased
`basedbot` to based-app.png, which is Based App, the Hyperliquid frontend on
bench 269: an orange B against BasedBot's blue bird. A wrong-product logo is
worse than none, so BasedBot has its own file now.

Product links: none of the four benches declared a `url`, so no row linked
anywhere. They do now, to clean domains. Not to the source's own website_url
fields, every one of which is a tehcscreener referral link (axiom.trade/@adamtehc,
gmgn.ai/?ref=..., pump.fun/join/...). Publishing those would route our readers
through a third party's affiliate codes on a site whose stated policy is no
paid placement and no sold ranking slots.

Chains, which is the other half of what was asked. 206 and 207 were Solana-only
because their slugs say so; that was my call and it was the wrong trade. All
four benches now carry seven chain tabs, and three carry a real all-chains
slice. `all` is a true total where totalling is valid and the headline chain
where it is not: volume, transactions and fees add up, and the ratios built on
them are volume-weighted by construction, but a wallet trading on two chains is
one wallet and the source deduplicates for only 2 of 9 terminals, so bench 232
has no all-chains tab and says why on its own page.

Two bugs found while building that:

The all-chains take rate divided by total volume including the chains whose
fees were withheld. Axiom's measured Solana fees over its Solana plus Robinhood
plus BNB volume reads 0.66% where the measured rate is 0.92%, understating a
terminal precisely because part of it could not be measured. A withheld cell
now leaves the ratio entirely, numerator and denominator together.

Canonicalising the roster broke the fetch. The roster addresses the API, which
only knows its own ids, so GET /bots/pump-fun returned 404 and both renamed
rows went dark. The list is raw for fetching and canonical for comparison, and
canonicalRoster does the conversion at the one place that needs it.

Titles on 206 and 207 no longer say "on Solana". Their slugs still do, and the
methodology says so rather than leaving it silent; renaming them touches seven
call sites each plus bench-published.json and is a separate change.

Every declared tab fills: 8/8/7/7/6/6/5/4 rows across the strip, verified
against Prometheus per tab rather than from the leader line.

(cherry picked from commit cf6b2cd)

* the product links were right once the slugs were, and two had no page behind them (#2848)

Chasing "did you link it to the right product page" to the end. Provider rows
link to /products/<slug> through rowHref, so the slug IS the link. Before
#2846 two rows pointed at 404s: /products/pumpapp and /products/terminal, both
confirmed 404 on staging. Canonicalising the slugs fixed the links, and all
nine now resolve.

Two things that fix did not cover.

The external link, description and X handle on a product page come from
src/data/provider-registry.ts, not from the bench spec. Seven of the nine were
registered; padre and basedbot were not, so their pages had no link out and a
generated fallback description. Both added, in the registry's own neutral
register rather than the source's marketing copy ("#1 Degen Trading Bot 🚀").
BasedBot's entry says outright that it is not Based App, the Hyperliquid
frontend, because the two already collided once in the logo manifest.

And the `url:` field I added to all four specs in #2846 is dead. It passes the
schema, but nothing in the render path reads it: `url` is not on
ProviderResult, the loader never carries it, and no other bench in the repo
declares it. Thirty-six lines removed. A field that validates and renders
nothing is worse than no field, because the next person reads it as the
mechanism and stops looking for the real one.

(cherry picked from commit 9be7674)

* the last bare chip: HyperEVM (#2849)

Finishing the logo sweep. Seven chain chips across the terminal benches, six
resolved, HyperEVM did not.

Aliased to hyperliquid.png: HyperEVM is Hyperliquid's EVM execution layer, the
same project and the same brand, which is how hypercore and hyperliquid-hip3
are already handled two lines above.

Worth distinguishing from the alias removed in #2846. basedbot pointed at
based-app.png, a different company's logo on a different product. This one
points at the same project's own mark. An alias is right when the brand is
shared and wrong when only the name looks similar.

(cherry picked from commit 9bcff78)

* the four terminal benches go to production, two under honest slugs

Benches 203, 206, 207 and 232 leave DEV_ONLY. They were gated on 2026-10-02
when the Dune trial ended; they were re-sourced this week to the public
tehcscreener API via harnesses/terminal-activity, and the audit round is what
#2843, #2844, #2846, #2848 and #2849 were.

Un-gated after the audit rather than after a 24h window, and the distinction
matters: these four declare no range selector. Every query is an instant read
of a gauge, so there is no window to fill. The only thing a day would buy them
is a complete chart, which is cosmetic, and 351 scrapes are already in.

206 and 207 are renamed on the way out:

  solana-avg-trade-size  -> terminal-avg-trade-size
  solana-unique-traders  -> terminal-swap-transactions

Both gained an all-chains default view in #2846 while their slugs still
promised Solana, which is the kind of thing an SEO audit flags and a reader
trips over. Neither was ever served on production, so there is no signal to
preserve and no redirect is owed; RENAMED_BENCH_SLUGS stays untouched. The
second name also drops a claim the old one never earned: it counts
transactions, not unique traders.

Cache keys bumped in lockstep, bench-unfiltered v88 to v89, all-benchmarks v81
to v82 and bench-filters v32 to v33, because every cached bench set is stale on
both counts: the membership changed and two slugs moved. bench-published.json
keeps each bench's original publication date under its new key.

(cherry picked from commit 5acfdd7)
Flotapponnier added a commit that referenced this pull request Oct 7, 2026
…2854)

#2846 gave 206 and 207 an all-chains default view and #2852 renamed them off
the solana- prefix, but the renaming stopped at the title. The body did not
move, so both pages shipped to production saying "leads Solana terminals",
"routed Solana volume divided by that day's swap count", and, in every one of
the eighteen provider formulas, "on Solana on the day".

That is a page contradicting its own tab strip in front of readers, on the
figure it exists to publish. Fixed across the seo_description, disclaimer,
seo_intro, methodology, findings, FAQ and all eighteen formulas.

207's "Is this Solana only?" FAQ was the wrong question once the answer became
no; it now answers how to read one chain at a time, which is what someone
looking at eight tabs actually wants to know.

Three mentions of Solana stay in each, and all three are true: the methodology
line about BasedBot routing on Robinhood and almost nothing on Solana, and the
tags on Trojan and Photon, which really are Solana-only products.
Flotapponnier added a commit that referenced this pull request Oct 7, 2026
…2854) (#2855)

#2846 gave 206 and 207 an all-chains default view and #2852 renamed them off
the solana- prefix, but the renaming stopped at the title. The body did not
move, so both pages shipped to production saying "leads Solana terminals",
"routed Solana volume divided by that day's swap count", and, in every one of
the eighteen provider formulas, "on Solana on the day".

That is a page contradicting its own tab strip in front of readers, on the
figure it exists to publish. Fixed across the seo_description, disclaimer,
seo_intro, methodology, findings, FAQ and all eighteen formulas.

207's "Is this Solana only?" FAQ was the wrong question once the answer became
no; it now answers how to read one chain at a time, which is what someone
looking at eight tabs actually wants to know.

Three mentions of Solana stay in each, and all three are true: the methodology
line about BasedBot routing on Robinhood and almost nothing on Solana, and the
tags on Trojan and Photon, which really are Solana-only products.

(cherry picked from commit df56c7d)
Flotapponnier added a commit that referenced this pull request Oct 7, 2026
Two halves of one sentence counting different things. `wins` is one per chain
led, deliberately, so a product topping four chain tabs of one bench earns
four. `distinctBenchCount` is one per bench. Putting them either side of "of"
only worked while the trading benches had no chain axis and a win meant a
bench.

Seven chain tabs landed on four of those benches this afternoon, in #2846 and
#2857. The numerator multiplied, the denominator did not, and the card went
out claiming a count that cannot exist. Mine.

benchesLedCount counts distinct benchmarks the provider leads in any view,
aggregate or chain, which is the basis the sentence already promised. FOMO now
reads "#1 on 9 of 10 benchmarks" against 23 and 11.

The two other places that use `wins` keep it: they say "first-place finishes",
which can honestly exceed the bench count. They now say "first-place finishes
across chains", because a reader who sees 23 finishes and 10 benchmarks will
divide them and the two words stop that.
Flotapponnier added a commit that referenced this pull request Oct 7, 2026
Two halves of one sentence counting different things. `wins` is one per chain
led, deliberately, so a product topping four chain tabs of one bench earns
four. `distinctBenchCount` is one per bench. Putting them either side of "of"
only worked while the trading benches had no chain axis and a win meant a
bench.

Seven chain tabs landed on four of those benches this afternoon, in #2846 and
#2857. The numerator multiplied, the denominator did not, and the card went
out claiming a count that cannot exist. Mine.

benchesLedCount counts distinct benchmarks the provider leads in any view,
aggregate or chain, which is the basis the sentence already promised. FOMO now
reads "#1 on 9 of 10 benchmarks" against 23 and 11.

The two other places that use `wins` keep it: they say "first-place finishes",
which can honestly exceed the bench count. They now say "first-place finishes
across chains", because a reader who sees 23 finishes and 10 benchmarks will
divide them and the two words stop that.
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