release: dev → main (pm-data-freshness, bridge-revenue, network-fees + accumulated improvements) - #316
Merged
Merged
Conversation
#147) Logs every fork that produces a visible draft render to the user: kv_hit / kv_miss / kv_empty / kv_shape / kv_stale / kv_timeout / kv_neterr / kv_http / collapse / placeholder_used Includes slug + timing per call. All prefixed with [DRAFT-TRACE] for easy grep in Vercel logs. Plain console.warn — no extra deps. Revert this commit once we have the cause pinned.
* chore(obs): temporary [DRAFT-TRACE] logs on bench draft fallback paths Logs every fork that produces a visible draft render to the user: kv_hit / kv_miss / kv_empty / kv_shape / kv_stale / kv_timeout / kv_neterr / kv_http / collapse / placeholder_used Includes slug + timing per call. All prefixed with [DRAFT-TRACE] for easy grep in Vercel logs. Plain console.warn — no extra deps. Revert this commit once we have the cause pinned. * fix(solana-tx-landing harness): bump Astralane default tip to 1M lamports Sync from the private mobula-api harness. Astralane raised their min tip floor 500_000 → 1_000_000; keeps the public harness reproducing the same probe config.
Two root causes pinned via [DRAFT-TRACE] logs on staging: 1. Prom queries quantile_over_time(0.99, …[24h]) consistently take 4-8s under load. The 4s client timeout aborted, collapsing benches to draft when the per-bench KV snapshot wasn't available as fallback. Bump to 10s — fits the observed worst case with headroom. 2. The /api/cron/health-check route runs every 5 min but only computed Slack transitions. Add a loadAllBenchmarks() call so the per-bench unstable_cache stays warm and writeSnapshot() refreshes the KV snapshot layer. Eliminates the cold-start window where a fresh Vercel function instance has no in-memory cache AND the snapshot is stale or missing — exactly the pattern that produces the visible 'bench in draft' symptom users observed.
…ne in light chip (#150) * fix(perf): bump Prom timeout 4s→10s + cron pre-warms bench cache Two root causes pinned via [DRAFT-TRACE] logs on staging: 1. Prom queries quantile_over_time(0.99, …[24h]) consistently take 4-8s under load. The 4s client timeout aborted, collapsing benches to draft when the per-bench KV snapshot wasn't available as fallback. Bump to 10s — fits the observed worst case with headroom. 2. The /api/cron/health-check route runs every 5 min but only computed Slack transitions. Add a loadAllBenchmarks() call so the per-bench unstable_cache stays warm and writeSnapshot() refreshes the KV snapshot layer. Eliminates the cold-start window where a fresh Vercel function instance has no in-memory cache AND the snapshot is stale or missing — exactly the pattern that produces the visible 'bench in draft' symptom users observed. * fix(logo): wrap dark-toned provider logos in light chip 1RPC, Blocknative, Lava, Tenderly, Jito and Astralane have single-tone (mostly dark) artwork that disappears against the page background on small bench cards. Add to NEEDS_LIGHT_CHIP so they render on a white chip with a hairline shadow — same treatment as Relay, Debridge, Tonapi.
Same single-tone artwork pattern as the previous batch — invisible on the bench card background. Wrap in white chip for contrast.
…alane, Sky, dydx) (#153) Verified via SVG fill audit: those 4 logos have fill="white" content, which the previous white chip rendered as invisible-on-invisible. Split into two sets — light chip (#fff for dark logos) and dark chip (#0f172a for white logos).
…154) The safety throw 'every bench draft, refusing to update cache' crashes next build when Prom is fully unreachable during the build window. Replace the throw with a [DRAFT-TRACE] warning + return the draft array. With the snapshot/KV fallback + 10s Prom timeout + cron pre-warm already mitigating user-visible drafts, this safety net's value is marginal.
* feat(bench-005): add coinpaprika, covalent, coinstats, sim-dune to network-coverage * feat(bench-005): add coinpaprika/covalent/coinstats logos * fix(bench-005): correct CoinStats endpoint path
…rovider registry + swap dune logo to PNG (#158)
…cial/oracle pairs) into one canonical entry (#163)
The distribution view used a linear scale anchored at max(p99). On benches with very wide ranges (l1-finality spans 0.4s on TON to 36 min on Monero, ratio 5370x) every fast row collapsed to a single invisible pixel at the left edge, making 7 of 9 chains visually indistinguishable. Only the two slowest rows had visible bars. Port the same auto-log heuristic ranked-bar-chart already uses: when max/min > 50, switch to base-10 log projection so each row gets a proportional, distinguishable position. Footer flags 'log scale' so the reader knows when it kicks in. Same component is shared by every bench in distribution view, so this fixes l1-finality, l2-block-time, validator-yield, perp-fees and any other bench with wide dynamic range in one shot.
fix(distribution): auto log scale when dynamic range > 50x
Narrow-range benches with small absolute minimums collapse every median dot into a single sliver at the left. solana-tx-landing-latency is the canonical case: 5 providers all have p50 = 2 slots on a 14-slot field, so every median lands at 14 % of the track and there is no visible spread between the leaders. Switch both linear and log scale to use fieldMin as the left baseline. The leader now sits at 0 % and laggards spread across the full track. Footer always shows 'min X' so the reader knows the chart is relative to observed range, not absolute zero.
fix(distribution): anchor left edge at fieldMin, not zero
scrub deploy IDs and team scope from public workflow
GMGN's WebSocket pushes Solana chain-tip events (channel=chain_stat, gk='s', rs=ms:slot) sub-second. Adds it as the 4th provider on the head-lag bench. YAML: - New provider entry; queries deliberately omit chain= so per-tab filters auto-hide GMGN on Base/BNB and surface it on All/Solana. - Methodology + cardinality lines updated. Harness sync (matches private mobula-api/miniapps/aggregator-head-lag): - gmgn_monitor.go: chromedp cf_clearance mint + utls HelloChrome_120 ClientHello (h1-only ALPN) + WS subscribe + slot-event parser. - Dockerfile: chromium + minimal X/font libs for chromedp. - go.mod: utls + chromedp deps. - log_buffer.go, config.go, main.go: GMGN_PROXY env + startup banner + goroutine launch. Validated: bun run validate, typecheck, spec tests all green.
feat(bench-001): add GMGN as a provider (Solana-only) + sync harness
scrub slack webhook and grafana URL from public repo
* sync(topN): lift Top-N to parent so chart and ledger share one value * fix(network-fees): top-of-page layer toggle, drop top-N selector
* sync(topN): lift Top-N to parent so chart and ledger share one value * feat(network-fees): SEO rewrite + scope clarification, drop hyphens * ledger: rescale sparkline min/max off active panel series
…KX/GMGN mentions (#285)
* sync(topN): lift Top-N to parent so chart and ledger share one value * fix(bench): maxDuration 60s for cold start with 20+ providers
* sync(topN): lift Top-N to parent so chart and ledger share one value * docs(network-fees): drop the chain count from subtitle + seo description User reads cleaner without the number; the list of chains right after it already says which 20 are tracked. * feat(hl-frontends): pivot headline to USD revenue, add 7d/30d ranges
…nge tabs (#290) * sync(topN): lift Top-N to parent so chart and ledger share one value * fix(hl-frontends): collapse fees/volume time variants — use chart range tabs instead
…o ledger sorts descending (#291)
* sync(topN): lift Top-N to parent so chart and ledger share one value * fix(build): remove leftover merge conflict markers in chart components
…ss full range (#294) * fix(build): really remove leftover merge conflict markers * fix(chart): anchor partial series on right edge instead of stretching across full range
p90 was hl_frontend_d7_retention_pct which only the legacy 8-builder Railway harness emits. spec.ts skips any provider with a null p90 or p99, so 52 of 60 builders (including the top earners Phantom Perps $83K, Rabby $15K, OneKey $12K, based.app $12K) were silently dropped from the leaderboard. Switching p90 to hl_frontend_volume_usd_24h_v2 (60 series) restores the full cohort.
* fix(hl-frontends): swap p90 metric to unlock 60-builder cohort p90 was hl_frontend_d7_retention_pct which only the legacy 8-builder Railway harness emits. spec.ts skips any provider with a null p90 or p99, so 52 of 60 builders (including the top earners Phantom Perps $83K, Rabby $15K, OneKey $12K, based.app $12K) were silently dropped from the leaderboard. Switching p90 to hl_frontend_volume_usd_24h_v2 (60 series) restores the full cohort. * fix(chart): y-axis tick formatter now handles usd + count units
…ta span (#297) * fix(hl-frontends): swap p90 metric to unlock 60-builder cohort p90 was hl_frontend_d7_retention_pct which only the legacy 8-builder Railway harness emits. spec.ts skips any provider with a null p90 or p99, so 52 of 60 builders (including the top earners Phantom Perps $83K, Rabby $15K, OneKey $12K, based.app $12K) were silently dropped from the leaderboard. Switching p90 to hl_frontend_volume_usd_24h_v2 (60 series) restores the full cohort. * fix(chart): y-axis tick formatter now handles usd + count units * fix(chart): panels fetch 24h+7d+30d series so range tabs show right data span
…298) * fix(hl-frontends): swap p90 metric to unlock 60-builder cohort p90 was hl_frontend_d7_retention_pct which only the legacy 8-builder Railway harness emits. spec.ts skips any provider with a null p90 or p99, so 52 of 60 builders (including the top earners Phantom Perps $83K, Rabby $15K, OneKey $12K, based.app $12K) were silently dropped from the leaderboard. Switching p90 to hl_frontend_volume_usd_24h_v2 (60 series) restores the full cohort. * fix(chart): y-axis tick formatter now handles usd + count units * fix(chart): panels fetch 24h+7d+30d series so range tabs show right data span * fix(chart): Top N ranking respects higher_is_better, matching ledger sort
For benches like HL frontends (higher_is_better=true, fees in USD), Best is the max value not the min, and Worst is the min not the max. Latency benches keep the original min=Best mapping. Fixes BEST=$0 / WORST=$24K on staging HL frontends page where the leaders (phantom-perps $119K, metamask $66K) were being mapped to Worst.
…-quote-latency, solana-tx-landing*, wallet-labels-coverage)
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.
Production release from dev. Includes the 3 new benches the team explicitly approved + all accumulated bug fixes / SEO updates / harness improvements on already-shipped benches.
New benches promoted to prod
Held back on dev (intentionally NOT in this release)
These stay on dev for further soak / validation. Will be promoted in a later release once their data + editorial copy are settled. Their YAML + harness files were surgically restored to the main-side state in this branch.
Accumulated changes on already-shipped benches
15 specs updated (aggregator-head-lag, bridge-fee, bridge-quote-latency, buyback-audit, gas-estimation, l1-finality, l2-block-time, metadata-coverage, network-coverage, oracle-deviation, perp-fees, rpc-capabilities, stablecoin-peg, stablecoin-peg-usdt-anchored, validator-yield) plus the supporting code: chart fixes (Top-N higher_is_better, panel sort, partial series anchoring, USD format), L1/L2 toggle, kind dimension scaffolding, logo manifest additions, SEO meta rewrites, FAQ JSON-LD.
Spec validation: 18 / 18 valid.
Post-merge steps
vercel --prodfrom a checkout of main.