Fix consumer subscription pricing exploit with perceived-value-based elasticity
Balance Check / balance-simulation (push) Successful in 51s
Balance Check / multi-run-balance (push) Successful in 13m19s
CI / build-and-push (push) Successful in 45s

Players could set astronomical prices and still retain subscribers because
price elasticity floored at 10% for any price above $100, satisfaction
ignored pricing entirely, and churn had no price component.

Introduces perceived value per tier (model quality × reputation), replaces
the broken linear formula with sigmoid decay, adds price-aware satisfaction
blending, and applies per-tier price-based churn multipliers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-26 21:51:03 -04:00
parent 5aa9436368
commit 63e56dc229
4 changed files with 120 additions and 14 deletions
@@ -873,6 +873,21 @@ export const TIER_CHURN_RATES: Record<ConsumerTierId, number> = {
export const FREE_TIER_ADOPTION_RATE = 0.10;
// --- Consumer Perceived Value ---
export const CONSUMER_TIER_BASE_PERCEIVED_VALUE: Record<ConsumerTierId, number> = {
free: 0,
plus: 40,
pro: 120,
team: 80,
};
export const PERCEIVED_VALUE_REPUTATION_RANGE = { min: 0.5, max: 1.0 };
export const PRICE_ELASTICITY_STEEPNESS = 3.0;
export const PRICE_SATISFACTION_WEIGHT = 0.3;
export const PRICE_CHURN_EXPONENT = 1.5;
export const PRICE_CHURN_MAX_MULTIPLIER = 10.0;
// --- API Tier Defaults ---
export const API_TIER_DEFAULTS: Record<ApiTierId, { monthlyFee: number; inputPrice: number; outputPrice: number; rateLimit: number }> = {