Skip to content

fix(fee-compare): remove vault fee — carry settled per-action - #2209

Merged
Flotapponnier merged 1 commit into
devfrom
feat/fix-gains-vault-fee-mislabel
Aug 29, 2026
Merged

fix(fee-compare): remove vault fee — carry settled per-action#2209
Flotapponnier merged 1 commit into
devfrom
feat/fix-gains-vault-fee-mislabel

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

Summary

  • Removes the "vault fee" line from Gains wallet breakdowns — what was labeled as vault fee is actually funding + borrowing fees settled on every trade action (opens, increases, closes), not a separate OI imbalance surcharge
  • Fixes the API route to read uiRealizedPnlData for all actions (not just closes) and includes realizedOldBorrowingFeesCollateral in the borrowing total
  • Removes vault fee UI rows from the summary card and per-trade table in the client

Test plan

  • Load fee-compare with a Gains wallet that had prior trades
  • Confirm no "vault fee" row appears in the summary card or trade table
  • Confirm taker + funding + borrowing still sum correctly to net cost

@Flotapponnier
Flotapponnier merged commit f0ac45f into dev Aug 29, 2026
1 check failed
Flotapponnier added a commit that referenced this pull request Aug 29, 2026
Flotapponnier added a commit that referenced this pull request Aug 30, 2026
* merge: dev → main (Gains carry fix + vault fee split) (#2191)

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* feat(rpc): Union bench #253 (#2195)

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML

* feat(union): add provider SVG logos and brand colors

* feat: Shentu #254 + MANTRA Chain #255 benches

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML (#2196)

* feat(rpc): Shentu #254 + MANTRA Chain #255 (#2199)

* feat(rpc): add Shentu bench #254 and MANTRA Chain bench #255

* fix: remove accidental dev-portal submodule

* feat: Band Protocol #256 + cheqd #257 benches

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML (#2196)

* feat(rpc): Shentu #254 + MANTRA Chain #255 (#2199)

* feat(rpc): add Shentu bench #254 and MANTRA Chain bench #255

* fix: remove accidental dev-portal submodule

* feat: Band Protocol #256 + cheqd #257 benches

* fix: bench-blob revalidate 300s to fix perp ISR conflict (#2206)

* merge: dev → main (Gains carry fix + vault fee split) (#2191)

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* feat(rpc): Union bench #253 (#2195)

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML

* feat(union): add provider SVG logos and brand colors

* feat: Shentu #254 + MANTRA Chain #255 benches

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML (#2196)

* feat(rpc): Shentu #254 + MANTRA Chain #255 (#2199)

* feat(rpc): add Shentu bench #254 and MANTRA Chain bench #255

* fix: remove accidental dev-portal submodule

* fix: bench-blob revalidate 300s to fix perp ISR conflict

* fix(fee-compare): total position value + inline vault fee explanation

* fix(fee-compare): remove vault fee — carry fees settled per-action, not OI surcharge (#2209)

* feat(rpc): ICON bench #258 — new icon probe kind, 3 keyless providers
Flotapponnier added a commit that referenced this pull request Aug 30, 2026
* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML (#2196)

* feat(rpc): Shentu #254 + MANTRA Chain #255 (#2199)

* feat(rpc): add Shentu bench #254 and MANTRA Chain bench #255

* fix: remove accidental dev-portal submodule

* feat: Band Protocol #256 + cheqd #257 benches

* fix: bench-blob revalidate 300s to fix perp ISR conflict (#2206)

* merge: dev → main (Gains carry fix + vault fee split) (#2191)

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* feat(rpc): Union bench #253 (#2195)

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML

* feat(union): add provider SVG logos and brand colors

* feat: Shentu #254 + MANTRA Chain #255 benches

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML (#2196)

* feat(rpc): Shentu #254 + MANTRA Chain #255 (#2199)

* feat(rpc): add Shentu bench #254 and MANTRA Chain bench #255

* fix: remove accidental dev-portal submodule

* fix: bench-blob revalidate 300s to fix perp ISR conflict

* fix(fee-compare): clearer Gains labels — Position size + vault fee (#2207)

* fix(fee-compare): rename Volume→Position size + clearer vault fee label

* fix(fee-compare): show total position value + inline vault fee explanation

* fix(fee-compare): total position value + inline vault fee explanation (#2208)

* fix(fee-compare): rename Volume→Position size + clearer vault fee label

* fix(fee-compare): show total position value + inline vault fee explanation

* fix(fee-compare): remove vault fee — carry fees settled per-action, not OI surcharge (#2209)

* feat(rpc): ICON bench #258 (#2210)

* merge: dev → main (Gains carry fix + vault fee split) (#2191)

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* feat(rpc): Union bench #253 (#2195)

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML

* feat(union): add provider SVG logos and brand colors

* feat: Shentu #254 + MANTRA Chain #255 benches

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML (#2196)

* feat(rpc): Shentu #254 + MANTRA Chain #255 (#2199)

* feat(rpc): add Shentu bench #254 and MANTRA Chain bench #255

* fix: remove accidental dev-portal submodule

* feat: Band Protocol #256 + cheqd #257 benches

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML (#2196)

* feat(rpc): Shentu #254 + MANTRA Chain #255 (#2199)

* feat(rpc): add Shentu bench #254 and MANTRA Chain bench #255

* fix: remove accidental dev-portal submodule

* feat: Band Protocol #256 + cheqd #257 benches

* fix: bench-blob revalidate 300s to fix perp ISR conflict (#2206)

* merge: dev → main (Gains carry fix + vault fee split) (#2191)

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* feat(rpc): Union bench #253 (#2195)

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML

* feat(union): add provider SVG logos and brand colors

* feat: Shentu #254 + MANTRA Chain #255 benches

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML (#2196)

* feat(rpc): Shentu #254 + MANTRA Chain #255 (#2199)

* feat(rpc): add Shentu bench #254 and MANTRA Chain bench #255

* fix: remove accidental dev-portal submodule

* fix: bench-blob revalidate 300s to fix perp ISR conflict

* fix(fee-compare): total position value + inline vault fee explanation

* fix(fee-compare): remove vault fee — carry fees settled per-action, not OI surcharge (#2209)

* feat(rpc): ICON bench #258 — new icon probe kind, 3 keyless providers
Flotapponnier added a commit that referenced this pull request Aug 30, 2026
* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML (#2196)

* feat(rpc): Shentu #254 + MANTRA Chain #255 (#2199)

* feat(rpc): add Shentu bench #254 and MANTRA Chain bench #255

* fix: remove accidental dev-portal submodule

* feat: Band Protocol #256 + cheqd #257 benches

* fix: bench-blob revalidate 300s to fix perp ISR conflict (#2206)

* merge: dev → main (Gains carry fix + vault fee split) (#2191)

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* feat(rpc): Union bench #253 (#2195)

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML

* feat(union): add provider SVG logos and brand colors

* feat: Shentu #254 + MANTRA Chain #255 benches

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML (#2196)

* feat(rpc): Shentu #254 + MANTRA Chain #255 (#2199)

* feat(rpc): add Shentu bench #254 and MANTRA Chain bench #255

* fix: remove accidental dev-portal submodule

* fix: bench-blob revalidate 300s to fix perp ISR conflict

* fix(fee-compare): clearer Gains labels — Position size + vault fee (#2207)

* fix(fee-compare): rename Volume→Position size + clearer vault fee label

* fix(fee-compare): show total position value + inline vault fee explanation

* fix(fee-compare): total position value + inline vault fee explanation (#2208)

* fix(fee-compare): rename Volume→Position size + clearer vault fee label

* fix(fee-compare): show total position value + inline vault fee explanation

* fix(fee-compare): remove vault fee — carry fees settled per-action, not OI surcharge (#2209)

* feat(rpc): ICON bench #258 (#2210)

* merge: dev → main (Gains carry fix + vault fee split) (#2191)

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* feat(rpc): Union bench #253 (#2195)

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML

* feat(union): add provider SVG logos and brand colors

* feat: Shentu #254 + MANTRA Chain #255 benches

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML (#2196)

* feat(rpc): Shentu #254 + MANTRA Chain #255 (#2199)

* feat(rpc): add Shentu bench #254 and MANTRA Chain bench #255

* fix: remove accidental dev-portal submodule

* feat: Band Protocol #256 + cheqd #257 benches

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML (#2196)

* feat(rpc): Shentu #254 + MANTRA Chain #255 (#2199)

* feat(rpc): add Shentu bench #254 and MANTRA Chain bench #255

* fix: remove accidental dev-portal submodule

* feat: Band Protocol #256 + cheqd #257 benches

* fix: bench-blob revalidate 300s to fix perp ISR conflict (#2206)

* merge: dev → main (Gains carry fix + vault fee split) (#2191)

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* feat(rpc): Union bench #253 (#2195)

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML

* feat(union): add provider SVG logos and brand colors

* feat: Shentu #254 + MANTRA Chain #255 benches

* fix(harnesses): cap LZ/CCIP/Axelar cardinality to bench-tracked chains only (#2187)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit (#2188)

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection (#2189)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains action names v5→v6, handle position size increases (#2190)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: Gains carry projection (v6 action names + still-open positions)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column for long tickers (xyz:NVDA)

* fix(cache): strip heavy fields from aggregate blob to pass 2MB limit

Hub pages only need card data. Drop seriesByRegion24h, metricPanels,
editorial text (seoIntro/faq/findings/methodology/disclaimer/abstract/
perChainExplainer) from the blob aggregate slim. Cuts serialized size
from ~4.3 MB to under 2 MB so unstable_cache actually persists the
entry instead of silently dropping it on every render.

* fix: include still-open Gains positions in carry projection

* fix: update Gains open action names to v6 API, handle TradePosSizeIncrease

* fix: widen coin name column in top markets to fit xyz:NVDA

* feat(rpc): add Union bench #253 (Nodes.Guru, Stake And Relax, High Stakes) (#2194)

* fix(union-rpc): remove em dashes from YAML (#2196)

* feat(rpc): Shentu #254 + MANTRA Chain #255 (#2199)

* feat(rpc): add Shentu bench #254 and MANTRA Chain bench #255

* fix: remove accidental dev-portal submodule

* fix: bench-blob revalidate 300s to fix perp ISR conflict

* fix(fee-compare): total position value + inline vault fee explanation

* fix(fee-compare): remove vault fee — carry fees settled per-action, not OI surcharge (#2209)

* feat(rpc): ICON bench #258 — new icon probe kind, 3 keyless providers

* fix(rpc): rewrite bench YAMLs 256-258 with proper SpecSchema format
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