Customer requests (the choice-and-consequence loop)
Customers are not a set-and-forget revenue line -- every so often one reaches out with an ask, and your answer has real fallout. Each arrives as a message with two buttons: say yes and take on a commitment, or say no and accept the consequence. There is rarely a free choice; the skill is knowing which to take.
A demand surge -- "we have a launch next week, expect ten times the traffic" -- offers a prep window: provision for it and earn trust plus the surge revenue, or decline and let them ride it out elsewhere. A poach threat -- a rival is courting them -- means match the offer to keep them, or let them walk. A cost concession asks for a discount or they wind down: grant it and lose some revenue, or hold the line and risk the account. A compliance request wants a certification you would have to support. Each is a small bet on the relationship.
Declining is not failure -- a discount you cannot afford or a surge you have no capacity for is sometimes right to refuse. But every refusal spends a little trust, and an unanswered ask lapses as a soft no. Read the customer's standing, weigh it against your capacity, and choose on purpose.
Detailed explanation
CustomerRequestKind raises CapacitySurge / PoachThreat / CostConcession / ComplianceRequest on the monthly relationship roll, gated by trust + archetype. Each maps to its own outcome built on the existing reprice / churn / trust / growth machinery: a surge accept commits a growth of additional_vms; a poach accept applies a concession_pct reprice to retain; a cost-concession accept reprices down; a compliance accept deepens the account. The framework adds the choice surface, not a parallel economy.
Resolved via ResolveCustomerRequest (Accept / Decline); left unanswered past CUSTOMER_REQUEST_EXPIRY it Lapses as a soft decline (a smaller hit than an explicit no). Accept generally lifts trust and retains; decline costs trust and, for a poach, churns. The loop-stats tally raised / accepted / declined / lapsed so you can see whether your answers are keeping the base intact.