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}, 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)); });