hotfix(prod): bench 265 perp DEX P/F ratio, live; Gains rename - #2375
Merged
Merged
Conversation
…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
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Cherry-picks from
dev(-x, in order), nothing else from dev:perp-pf-ratiospec +perp-token-metricsharness valuation gauges + bench 234 widened to 10 providers +computeFieldStatszero-row fixunrankedspec field, ledger unranked block, Nado/Decibel logos + registry)CANONICAL_NAMES.gains, harness display strings). Bench 266 files that do not exist on main were dropped from the pick.panel_main_descriptionspec field (thechartblock from bench spec: chart cadence block; bench 266 opens on 30d, no sub-day ranges #2364 was NOT taken)1.559xx, intro claims)perp-pf-ratioremoved fromREMOVED_BENCH_SLUGS; cache keysbench-unfiltered-v63/all-benchmarks-v58(main lineage, not dev's v65/v60);bench-published.jsongets only the bench 265 entry; middleware literal matcher unchanged (slug was never in main's set).Harness
ocb-perp-token-metricshas been live on the VPS since 2026-09-14 and the blobbenches/perp-pf-ratio.jsonis published, so prod renders data on first request.Checks:
tscclean,middleware.test.ts/spec.test.ts/stats.test.tspass, 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