Skip to content

release: dev → main (pm-data-freshness, bridge-revenue, network-fees + accumulated improvements) - #316

Merged
Flotapponnier merged 240 commits into
mainfrom
release/main-2026-06-05
Jun 5, 2026
Merged

release: dev → main (pm-data-freshness, bridge-revenue, network-fees + accumulated improvements)#316
Flotapponnier merged 240 commits into
mainfrom
release/main-2026-06-05

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

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

  • pm-data-freshness (landing: shrink hero H1 + subtitle #32) — Polymarket WS T0 vs Mobula vs Codex freshness
  • bridge-revenue — Relay-style implied bridge margin
  • network-fees — L1 + L2 native transaction fee USD

Held back on dev (intentionally NOT in this release)

  • hyperliquid-frontends
  • solana-dex-quote-latency
  • solana-tx-landing
  • solana-tx-landing-latency
  • wallet-labels-coverage

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

  1. Manually run vercel --prod from a checkout of main.
  2. Verify openchainbench.com renders the 3 new benches.
  3. Confirm dev is still a strict superset of main (held-back benches still on dev). No action needed if so.

Flotapponnier and others added 30 commits May 26, 2026 19:24
#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
)

* feat(bench-027): add Mobula Swap-Send to solana-tx-landing-latency providers

* feat(harnesses): sync solana-tx-landing OSS mirror with Mobula provider
…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
Flotapponnier and others added 27 commits June 3, 2026 12:40
* 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
* 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
* 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
* 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)
@Flotapponnier
Flotapponnier merged commit d5d2067 into main Jun 5, 2026
1 check failed
@Flotapponnier
Flotapponnier deleted the release/main-2026-06-05 branch June 9, 2026 21:42
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