Skip to content

hotfix(prod): bench 265 perp DEX P/F ratio, live; Gains rename - #2375

Merged
Flotapponnier merged 8 commits into
mainfrom
hotfix/bench-265-prod
Sep 14, 2026
Merged

Flotapponnier merged 8 commits into
mainfrom
hotfix/bench-265-prod

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

Cherry-picks from dev (-x, in order), nothing else from dev:

Harness ocb-perp-token-metrics has been live on the VPS since 2026-09-14 and the blob benches/perp-pf-ratio.json is published, so prod renders data on first request.

Checks: tsc clean, middleware.test.ts / spec.test.ts / stats.test.ts pass, eslint clean on touched files.

Follow-up on dev: same gate removal so the worker's sitemap (built from dev code) emits the bench.

🤖 Generated with Claude Code

https://claude.ai/code/session_01L4rjxemTvgRwrCG6D2iK5D

Flotapponnier and others added 8 commits September 15, 2026 01:29
…only) + widen bench 234 (#2340)

Harness perp-token-metrics now publishes the full valuation row per
protocol: P/F (mcap / annualized fees), FDV/F, P/S, fees 24h/30d/prev
30d/1y, revenue 30d + share, market cap, FDV, float %, open interest and
fees/OI, for 13 tokened perp DEXes plus 5 token-less venues (fees + OI
only). Windows are cut from DeFiLlama totalDataChart identically for
every protocol (30d sum x 365/30); tokens are measured against the
DeFiLlama parent they accrue from so mcap and fees share one scope.
Ratios with a zero denominator or no token are deleted from the gauge
vector, never published as 0. Unit tests cover window cutting, ratio
math and the fetchers against a fake upstream; one live poll verified
18/18 protocols healthy.

Bench 265 spec renders a 6-column ledger (P/F, FDV/fees, P/S, Fees 30d,
Market cap, Float) plus panel tabs for revenue, OI and fees/OI. Held in
REMOVED_BENCH_SLUGS until the Railway harness is redeployed; bench-set
cache keys bumped (v65 / v60). Bench 234 gains the five new protocols
that publish revenue and switches dYdX to the dYdX Chain token.

computeFieldStats now prunes all-zero rows the way the ledger already
does, so a token-less venue promoted to "live" by its panel data no
longer drags the Best stat to 0.

Claude-Session: https://claude.ai/code/session_01L4rjxemTvgRwrCG6D2iK5D

Co-authored-by: Flotapponnier <florent@mobula.io>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 3635b0a)
Avantis: the "A" glyph extracted from the wordmark SVG served on
avantisfi.com, set on the brand purple square like their app icon.
ApeX: the ape mark from apex.exchange's header logo SVG, squared.
Derive: the horse mark SVG served on derive.xyz, as is.

Claude-Session: https://claude.ai/code/session_01L4rjxemTvgRwrCG6D2iK5D

Co-authored-by: Flotapponnier <florent@mobula.io>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit d5b599a)
…PONSIVE on staging) (#2350)

Claude-Session: https://claude.ai/code/session_01L4rjxemTvgRwrCG6D2iK5D

Co-authored-by: Flotapponnier <florent@mobula.io>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 7bdd0cf)
… and Paradex ranked (#2358)

Tom asked for the pre-TGE venues on the P/F bench. New spec field
provider.unranked ("Pre-TGE"): the loader stamps unrankedLabel on the
row and keeps ms at zero, so every ranking helper (liveResults, leader,
field stats) still skips it, and the ledger renders an unranked block
under the field with the row's companion-panel values (fees 30d, OI)
and a neutral badge, sorted by fees. Ostium, Pacifica, Extended plus
two new venues, Nado (Ink) and Decibel (Aptos), use it.

edgeX (EDGE, CoinGecko rank 167) and Paradex (DIME) turned out to have
listed tokens: they get cgIDs in the harness and enter the ranking
(edgeX at ~3.6x). DeFiLlama's fee adapter reports very low fees for
Paradex; noted in the tag and methodology.

Verified end to end: harness built from this tree (20 protocols, one
live poll), scraped by a local Prometheus, materialized with the
worker's loader, rendered by next dev: 14 ranked rows, 5 pre-TGE rows
with fees, no UNRESPONSIVE badges. bun 261/261, typecheck, validate.

Claude-Session: https://claude.ai/code/session_01L4rjxemTvgRwrCG6D2iK5D

Co-authored-by: Flotapponnier <florent@mobula.io>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit b9f7cb1)
…displayed (#2365)

The compare hero, provider profile and every title built from the
providers blob still said "gains.trade": the perp-asset-breadth blob was
last materialized on 2026-08-17 (before the 08-25 YAML rename) and its
result name is the first appearance the profile builder sees. An
editorial CANONICAL_NAMES override for `gains` now wins over any stale
appearance, the way Helius/PublicNode/dRPC already do.

Remaining "Gains Network" copy renamed in bench 266's spec (venue name,
description, methodology, FAQ) and the P/F bench tag, plus the display
strings and brand mentions in the perp harnesses (perp-volume-history
JSON venue name, cohort/fees/longevity registries, apps API name,
permissions-scan metric help, comments). API hosts (*.gains.trade) and
DeFiLlama match strings untouched.

Claude-Session: https://claude.ai/code/session_01L4rjxemTvgRwrCG6D2iK5D

Co-authored-by: Flotapponnier <florent@mobula.io>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit 796bd25)
…ive view's definition as a caption (#2367)

The View pills above the chart (P/F ratio, FDV / fees, P/S, ...) only
had the Prom gauge name as a native title. Each pill now shows the
panel's spec `description` on hover and keyboard focus, and the active
view's description is repeated under the row so the definition is
readable on touch screens.

The headline tab reads a new optional `panel_main_description` spec
field (schema, type, loader); bench 265 sets it to the P/F definition.
Panels without a description render as before.

Claude-Session: https://claude.ai/code/session_01L4rjxemTvgRwrCG6D2iK5D

Co-authored-by: Flotapponnier <florent@mobula.io>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit a877d40)
…laims matched to live floats and multiples (#2371)

- seo_description and two findings appended a literal "x" after
  {{best_p50}} / {{worst_p50}}, which already carry the unit: the meta,
  OG and Twitter descriptions read "GNS trades at 1.559xx". Description
  also rewritten to fit the 158 char cap instead of being cut with an
  ellipsis.
- seo_intro: HYPE/LIT/ASTER float is 23/25/35%, so "a quarter to a
  third of supply"; the expensive end is dYdX and Aster, with Paradex's
  multiple flagged as an adapter artifact (Derive sits mid-table now).
- SynFutures row labelled "F (SynFutures)": the bare ticker made
  compare links read "GNS vs F".

Claude-Session: https://claude.ai/code/session_01L4rjxemTvgRwrCG6D2iK5D

Co-authored-by: Flotapponnier <florent@mobula.io>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
(cherry picked from commit c1231f4)
…VPS since 2026-09-14)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L4rjxemTvgRwrCG6D2iK5D
@Flotapponnier
Flotapponnier merged commit 6e39a19 into main Sep 14, 2026
1 check failed
Flotapponnier added a commit that referenced this pull request Sep 14, 2026
…emits it (shipped to prod in #2375) (#2376)

Claude-Session: https://claude.ai/code/session_01L4rjxemTvgRwrCG6D2iK5D

Co-authored-by: Flotapponnier <florent@mobula.io>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Flotapponnier added a commit that referenced this pull request Sep 14, 2026
… smoke gate (#2377)

The worker builds the sitemap from dev, where bench 266 is live; prod
404s it and the smoke gate rolled back the bench 265 deploy (#2375).


Claude-Session: https://claude.ai/code/session_01L4rjxemTvgRwrCG6D2iK5D

Co-authored-by: Flotapponnier <florent@mobula.io>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.

2 participants