Fix compute utilization bug and add subscriber saturation cap
CI / build-and-push (push) Successful in 34s

Three intertwined fixes:

1. Zero-capacity utilization: when inference allocation was 0%, the
   guard clause returned 0% utilization instead of 100%, so the market
   system never penalized satisfaction and subscribers never churned.

2. Stale compute in market: restructured tick order so capacity is
   computed before market runs, giving satisfaction calculations
   current-tick demand/capacity ratio instead of previous tick's.

3. Subscriber growth: replaced pure compound growth (reached billions
   in minutes) with logistic saturation curve. Era-based market caps:
   startup 10K, scaleup 1M, bigtech 20M, agi 100M. Quality and
   reputation expand the effective cap.

Also tuned FLOPS-to-tokens multiplier (10 → 26) for balanced
demand/capacity feel across all eras, and added market saturation
indicator to the Market page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-24 20:50:26 -04:00
parent a36617f9e3
commit 900d1d5190
5 changed files with 134 additions and 41 deletions
@@ -28,9 +28,24 @@ export const CONSUMER_QUALITY_GROWTH_MULTIPLIER = 0.01;
export const CONSUMER_PRICE_ELASTICITY = -0.5;
export const CONSUMER_BASE_CHURN = 0.001;
export const CONSUMER_TOKENS_PER_SUBSCRIBER = 0.5;
export const API_TOKENS_PER_REQUEST = 500;
export const API_REVENUE_PER_MTOK = 1.0;
export const MARKET_SIZE_CAP: Record<string, number> = {
startup: 10_000,
scaleup: 1_000_000,
bigtech: 20_000_000,
agi: 100_000_000,
};
export const MARKET_CAP_QUALITY_BONUS = 0.3;
export const MARKET_CAP_REPUTATION_BONUS = 0.2;
export const FLOPS_TO_TOKENS_MULTIPLIER = 26;
export const OVERLOAD_PENALTY_EXPONENT = 1.5;
export const ERA_THRESHOLDS = {
scaleup: { revenue: 10_000, capability: 15, reputation: 30 },
bigtech: { revenue: 1_000_000, capability: 50, reputation: 60 },