From d25dfe0435d97523fb449307e4673a49b12bab22 Mon Sep 17 00:00:00 2001 From: josh Date: Fri, 24 Apr 2026 20:55:27 -0400 Subject: [PATCH] Fix max update depth crash on Market page The deployedModels selector used .filter() which created a new array reference on every store change, triggering cascading re-renders. Changed to compute bestQuality as a primitive directly in the selector. Co-Authored-By: Claude Opus 4.6 --- apps/web/src/pages/MarketPage.tsx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/web/src/pages/MarketPage.tsx b/apps/web/src/pages/MarketPage.tsx index 58e2cc7..43fda68 100644 --- a/apps/web/src/pages/MarketPage.tsx +++ b/apps/web/src/pages/MarketPage.tsx @@ -15,13 +15,12 @@ export function MarketPage() { const tokensDemand = useGameStore((s) => s.compute.tokensPerSecondDemand); const currentEra = useGameStore((s) => s.meta.currentEra); const reputationScore = useGameStore((s) => s.reputation.score); - const deployedModels = useGameStore((s) => s.models.trainedModels.filter(m => m.isDeployed)); + const bestQuality = useGameStore((s) => { + const deployed = s.models.trainedModels.filter(m => m.isDeployed); + return deployed.length > 0 ? Math.max(...deployed.map(m => m.benchmarkScore)) / 100 : 0; + }); const setProductPricing = useGameStore((s) => s.setProductPricing); const setOverloadPolicy = useGameStore((s) => s.setOverloadPolicy); - - const bestQuality = deployedModels.length > 0 - ? Math.max(...deployedModels.map(m => m.benchmarkScore)) / 100 - : 0; const eraCapBase = MARKET_SIZE_CAP[currentEra] ?? 100_000_000; const effectiveCap = eraCapBase * (1 + bestQuality * MARKET_CAP_QUALITY_BONUS)