From 4539d184ce0c9dbb94a678890c712ce55b08d682 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier Date: Wed, 8 Jul 2026 22:31:53 +0200 Subject: [PATCH 1/2] indexing-freshness: fit Moralis under its 40k CU/day free cap (everyN=2, real budget) --- harnesses/indexing-freshness/cmd/script/config.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/harnesses/indexing-freshness/cmd/script/config.go b/harnesses/indexing-freshness/cmd/script/config.go index 64679ccf..138500da 100644 --- a/harnesses/indexing-freshness/cmd/script/config.go +++ b/harnesses/indexing-freshness/cmd/script/config.go @@ -23,7 +23,12 @@ type Provider struct { var providers = []Provider{ {Slug: "mobula", EveryN: 1, Budget: 250_000}, {Slug: "zerion", EveryN: 1, Budget: 55_000}, - {Slug: "moralis", EveryN: 1, Budget: 500_000}, + // Moralis free tier: 40k CU/day; /wallets/{addr}/history costs 25 CU + // per call, so full participation (144 events × 16 polls = 2,304 + // calls = 57.6k CU/day) blows the daily cap ~2/3 through the day + // (the API then 401s until the UTC midnight reset). EveryN 2 keeps + // it at ~28.8k CU/day. Budget = 40k/25 CU × 30 days in calls. + {Slug: "moralis", EveryN: 2, Budget: 48_000}, {Slug: "goldrush", EveryN: 1, Budget: 90_000}, // Allium free tier: 20k calls/month, aggressive per-second limits. {Slug: "allium", EveryN: 3, Budget: 18_000}, From 23ed2df9da8256a2001a8fe398a0586bc3f90f04 Mon Sep 17 00:00:00 2001 From: Flotapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Wed, 8 Jul 2026 23:41:46 +0200 Subject: [PATCH 2/2] prod gate: alternatives built on gated benches out of prod listings (#1006) Co-authored-by: Florent Tapponnier --- src/lib/alternatives.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/lib/alternatives.ts b/src/lib/alternatives.ts index a147704d..dffcf322 100644 --- a/src/lib/alternatives.ts +++ b/src/lib/alternatives.ts @@ -14,6 +14,7 @@ import { cache } from "react"; import yaml from "js-yaml"; import { z } from "zod"; import { loadBenchmark } from "@/lib/spec"; +import { REMOVED_BENCH_SLUGS } from "@/lib/removed-benches"; import type { Benchmark } from "@/types/benchmark"; const ALT_DIR = path.join(process.cwd(), "alternatives"); @@ -72,6 +73,14 @@ export const loadAllAlternatives = cache(async (): Promise => { ); return parsed .filter((a): a is Alternative => a !== null && a.status === "live") + // Prod-only gate: alternatives built on staging-pipeline benches + // never reach the prod listing, sitemap or tag clouds (the page + // itself already 404s there because the bench spec is filtered). + .filter( + (a) => + process.env.VERCEL_ENV !== "production" || + !REMOVED_BENCH_SLUGS.has(a.benchmark), + ) .sort((a, b) => a.target_product.localeCompare(b.target_product)); });