Objective
Make "efficient operators gain advantage" a real outcome instead of a phrase in the brief. Every company in a sector had identical costs; who won a glut was decided by which one happened to start with a lower markup. Give assets an efficiency, a vintage and a lifetime, so that costs differ, new capacity is better than old, and old capacity eventually has to be replaced.
Why it matters
Without cost differences there is no such thing as a weak operator, only an unlucky one. The brief's expected behaviours — "weak operators lose profitability", "efficient operators gain advantage", "inventory may become obsolete" — all need a reason for one company's dollar to go further than another's. And without retirement, capital is immortal: nothing ever needs replacing, so the construction and hardware sectors only ever see growth demand.
What changed
- Efficiency.
Asset.efficiencymultiplies variable cost and input intensity. Founding assets scatter ±12% around 1.0. New builds draw from a technology frontier that improves 2% a year (±8%). Pricing, bidding, reserves and distressed-asset valuation all use the company's own efficiency; investment decisions use the frontier, because that is what a new build would get. - Vintage and retirement. Founding assets are of mixed age. Assets retire at the end of their lifetime (servers 5 years, crews 10, halls 15, plants 25). NPCs order replacements 90 days plus lead time before an asset retires, if the market price covers cash cost.
- Mothballing parks the least efficient asset first, reactivation brings back the most efficient first.
Then heterogeneity broke the economy five different ways, and each fix is a design decision:
- The receiver now operates seized assets. In loop 2 the receiver held assets offline until the monthly sale. With real cost differences, two big halls failed on the same day and 96% of hosting supply vanished for a month; every compute provider starved. An administrator now runs seized assets at cash cost + 5% as a going concern. Sector supply is unchanged by a bankruptcy.
- Nothing is scrapped while it works. Seed 2 scrapped a 1,500-rack hall (half the sector) after six months in a glut, then spent four years in a hosting shortage. Lots now decay to a 5% salvage floor and stay listed; assets leave only by sale or retirement. Buyers can take part of a lot, so a 200-server entrant can buy 2,000 servers out of a 25,000-server fleet.
- No money is created for an unpaid trade. The old partial-payment fallback minted the shortfall so the seller got paid. An insolvent compute provider ran up $70M of "credit" in sixty days. Now the seller books bad debt, the buyer's arrears grow, and a company in arrears may only buy with cash. Counterparty risk exists.
- Public companies are treasury-funded. With rule 3 in place, the receiver — holding 60,000 seized servers — went broke on their upkeep, could never buy racks again, hosting demand fell to zero, every data center mothballed, and the world deadlocked. The utility, public works and receiver are now covered by the treasury for any shortfall, and the subsidy is counted and reported. Six years of seed 1 cost the treasury $1.04M; seeds 2 and 3 cost nothing.
- Contraction and recovery are gradual. Parking or unparking everything at once made data centers flap between glut and shortage every month (370 mothballs, 364 reactivations in one seed). At most 30% of capacity moves per review.
And one plain bug: ordering a replacement counted as a project "in flight" until the end of the day, so a company on the replacement treadmill never ran its growth check. Only builds that still need construction count now.
Economic behaviour introduced
| seed 2, six years | Y1 | Y2 | Y3 | Y4 | Y5 | Y6 |
|---|---|---|---|---|---|---|
| hosting $/rack-day | 57 | 150 | 122 | 61 | 42 | 43 |
| electricity $/MWh | 95 | 95 | 70 | 45 | 41 | 43 |
| compute $/cu-day | 9.49 | 8.94 | 10.21 | 9.44 | 11.40 | 11.54 |
| compute served /day | 81,424 | 100,930 | 101,477 | 125,027 | 107,868 | 119,714 |
- Weak operators fail; their capacity does not. 7–8 bankruptcies per seed, almost all high-cost operators, and 33–59 liquidation sales putting that capacity in other hands. Rackline (efficiency 0.93) is the largest compute provider in every seed by year six; Nimbus and Quanta (1.05–1.10) are gone.
- The replacement treadmill. Founding server fleets retire in years 3–5. Y5 compute served dips in every seed as fleets age out faster than cash-financed replacement can keep up, then recovers. 28–50 replacement orders per seed.
- Growth now lags demand. Compute served grows 1.5–2× over six years against demand growing 2×, and the compute price drifts from ~$9 to ~$11.5. Every compute provider passes every investment test and sits on cash it cannot deploy fast enough because a 30% expansion of a 60,000-server fleet costs $135M and it has $80M. This is the strongest argument yet for M11: loans are what turn a price signal into capacity.
- Bad debts fell from 133 to 2–4 per seed once late payers lost credit.
- A direction test now holds: an 0.85-efficiency hall earns a higher margin than a 1.15 hall in the same market over a year.
Player experience
Still headless. But the shape of a player's competitive position now exists: a hall built this year is 2% cheaper to run than one built last year and 10% cheaper than a founding hall, so a newcomer who builds at the frontier undercuts incumbents on cost, while an incumbent's advantage is scale, cash and cheap distressed assets. Both are real strategies, and both are readable from public data (prices, unsold share, receivership listings) that the client will show.
Game design notes
- Cash-only growth is now visibly the binding constraint. That makes loans (M11) more urgent than contracts (M10) for the economy's health, whatever the milestone order says.
- The receiver running seized assets is a public actor competing with private ones. It asks at cash cost + 5%, which undercuts most private operators. Fine as a backstop, but its share should be watched; a player might reasonably complain about "the state" dumping compute.
- Distressed sales still go richest-first. An auction would let a cash-rich newcomer outbid an incumbent. Backlog.
- Seed 3 has almost no cycle after year 3 (hosting flat at ~$45). Worth understanding whether that is a healthy equilibrium or a sector that stopped investing.
Technical notes
- Variable cost is now computed per asset and spread across a company's online assets by capacity share, so a mixed fleet has a blended cost. Input need is per asset already.
Policy.wants_assetreturns a unit count instead of a boolean, which is what makes partial lots possible. The receiver's own policy (ReceiverPolicy) reuses the NPC bid logic.Engine._public_topupis the single place public money enters;world.public_subsidyis the running total and appears in the report.- Running
pytestfrom inside the package directory silently finds no tests. All tooling scriptscdto the repo root; do the same by hand.
Problems encountered
The five systemic failures above, found one after another by six-year runs of seeds 1–3 and the
--trace option. Each surfaced only after the previous one was fixed: the supply hole hid
the scrapping problem, which hid the credit problem, which hid the receiver deadlock, which hid the
flapping. Heterogeneity did not cause any of them; it made them visible.
Solutions
See "What changed". The pattern worth recording: every one of the five was a place where the model quietly assumed a thing the brief says must not be assumed — that capacity can vanish, that money can appear, that a public actor can go broke, that a whole sector can move at once.
Validation
tooling/test.sh: 38 tests pass (4 new).tooling/client-check.sh: OK.- Six-year runs, seeds 1–3: no collapse, ledger conserved, no negative balances, public subsidy ≤ $1.04M.
Commits
2e17747 — feat: operators differ — asset efficiency, technology frontier, retirement and
replacement; receiver operates seized assets
Current state
Works: the headless economy through M6's checklist: shortages, booms, overinvestment, price cycles, specialisation by cost, failures, profitable niches, changing bottlenecks. Plus API, database tooling, client skeleton, tests, docs, journal.
Limitations: cash-only financing throttles growth; richest-first distressed sales; proceeds burned; still no player actions or persistence.
Next loop
The validation gate is close enough to pass. Next: player-action services — create a company, start a project, mothball, buy from the receiver, set an operating policy — as the same code paths NPCs use, exposed through the API, so the client can drive one company. Loans follow immediately after.