Repository navigation
bench 030 said it used no node, and prod is the page saying it - #3289
Merged
Merged
Conversation
…ed (#3286) The node substitution merged on 2026-10-07 (#2872) and never ran. The hyperliquid-frontends image was rebuilt on 2026-10-21 from ~/ocb-build/harness-src/hlf-build, a source tree whose Go files are frozen at 2026-10-07 18:09, hours before that merge: no nodesource.go, and no `a.node` anywhere in its agg.go. That rebuild refreshed only builders.json, which is why Nova appeared on the site and the node figures did not. The gauges are promauto-registered and Set in both branches of `if a.node != nil` inside publish(), so their absence from /metrics was the proof the binary had no node code rather than a node that was declining every day. Rebuilt today from current dev, verified by symbol before the container was touched, and the swap moved every figure on the bench: FOMO volume 7d $263.1M -> $780.8M (2.97x) cohort volume 7d $1.811B -> $4.783B (2.64x) node days / 30 0 -> 18, plus 10 reconstructions $780.8M is the figure the node's own seven complete days give, read independently through the reducer, so the bench was publishing roughly a third of the real notional for eighteen days. That makes four statements on the page false as of today, where they had been accidentally true for as long as the binary was stale: the subtitle, the abstract, the reproducibility bullet and the "where does the data come from" FAQ answer all said no node. The FAQ answer is also FAQPage JSON-LD, so it was a machine-readable claim. They now name both sources, say that a whole node day replaces the export's copy outright rather than being averaged with it, and say plainly that the days our node measured are not reproducible from the public feed alone. The coverage note had a second defect the same reading exposed. It took the export's share of the window as windowDays - nodeDays and then described truncatedDaysWindow as a subset of it, which the gauges cannot support: a rebuilt day sits in that remainder, and the truncated count includes days the node replaced. On today's reading that rendered as "the remaining 12 fall back to the export, and 11 of those stop around 12:10" where two days rest on the export. hlDaySources splits the window into the three sources the page can name, clamped so a scrape landing mid-pass cannot publish a negative day count, and the amber branch now names the node share instead of handing all thirty days to the upstream feed. The nodeDays == 0 wording is kept and tested. A node outage or a rollback to an older image reproduces exactly the state the page was in until today, and the note has to describe that one correctly too. (cherry picked from commit 79a0411)
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-pick of #3286 (
dev79a0411) ontomain, so production stops describing a source it no longer uses.Why this needs to reach prod
The Hyperliquid node substitution merged on 2026-10-07 (#2872) and never ran. The
ocb-hyperliquid-frontendsimage was rebuilt on 2026-10-21 from a source tree on the Paris VPS frozen at 2026-10-07 18:09, hours before that merge: nonodesource.go, and noa.nodeanywhere in itsagg.go. That rebuild refreshed onlybuilders.json, which is why Nova appeared on the site (#3130) and the node figures did not.The harness was rebuilt from current
devon 2026-10-25 and verified by symbol before the container was touched. Measured through Prometheus either side of the swap:hl_frontend_volume_usd_7d_v2{builder="fomo"}sum(hl_frontend_volume_usd_7d_v2)$780.8M is what the node's own seven complete days give, read independently through the reducer before the rebuild. Production is already serving the corrected figures from the shared Prometheus, or will as its cache cycles. What it is not serving is an accurate description of where they come from, which is what this PR fixes.
What changes
Four statements were accidentally true for as long as the binary was stale and are false now: the subtitle, the abstract, the Reproducibility bullet, and the "Where does the data come from" FAQ answer all said no node. That FAQ answer renders as FAQPage JSON-LD, so it is a machine-readable claim on a production page.
They now name both sources, state that a whole node day replaces the export's copy of that day outright rather than being averaged with it, and say plainly that the days our node measured are not reproducible from the public feed alone. A new Node substitution methodology bullet carries the mechanism and keeps reconstructions separate from measurements.
HlFeedCoverageNotehad a second defect: it took the export's share of the window aswindowDays - nodeDaysand describedtruncatedDaysWindowas a subset of it, which the gauges cannot support. On the 2026-10-25 reading that rendered as "the remaining 12 fall back to the export, and 11 of those stop around 12:10" where two days rest on the export.hlDaySourcessplits the window into the three sources the page can name, clamped so a scrape landing mid-pass cannot publish a negative day count. ThenodeDays === 0wording is kept and tested, because a node outage or an image rollback reproduces exactly the state the page was in until today.Verification against this base
The four touched files were identical between
origin/mainandorigin/devbefore the cherry-pick, so nothingmain-only is carried away. Every removed line in the diff is one of the replaced claims or the old note sentence; nomainfeature is touched, in particular nothing nearProviderClaimorbench-published.json.pnpm validate253 specs validpnpm exec tsc --noEmitcleanbun test778 pass, 0 fail (full suite)Merging deploys prod automatically via
prod-deploy.yml.