Cotton Tycoon has a chain: cotton becomes yarn, yarn becomes fabric, fabric becomes garments. Buyers place orders against a shared budget, so that the order board cannot ask for more than the business could plausibly deliver.
The important detail, which I wrote myself and then forgot: the conversion is one to one. A unit of cotton is subtracted and a unit of yarn is added. Yarn is not a second resource. It is cotton in its second shape.
The budget did not know that. It kept two ledgers: cotton was budgeted from what the fields actually produce, which is correct, and fabric was budgeted from the factory's conversion rate. So the same bale was promised twice, once as cotton and once as the fabric it would eventually become, and the second promise was measured against a machine rather than against a field.
| Save | Factory level | Budget assumed | Fields actually supply | Inflation |
|---|---|---|---|---|
| GLaDOS | 128 | 820 K/s | 1.35 M/s | balanced |
| Elaziz | 400 | 3.37 M/s | 672 K/s | 5× |
| Cardinale | 1,057 | 42.95 M/s | 1.45 M/s | 30× |
| TYLIORD | 1,638 | 46.77 M/s | 853 K/s | 55× |
Look at the direction of the error. It scales with the factory, while the input scales with the farm, which means upgrading the factory made the shortage worse. A player who noticed cotton running out and responded by buying more processing was actively making it harder to fill an order. Their reading, "cotton does not keep up", was accurate to the letter. What had run out was not cotton. It was the same bale promised to two different buyers.
Pick the currency before you write the budget. The question "how much can this channel take" is answered by the input of the chain, not by the output of a station inside it. An intermediate stage's rate is a ceiling, never a source. A factory is a converter, not a well.
One ledger, denominated in cotton
The budget now draws from a single pool measured in cotton: field supply plus everything held in any of its three shapes. When a buyer asks for fabric, the pool is capped by the conversion rate, because cotton that cannot change shape before the truck leaves cannot be promised to anyone as fabric. Cap, not source.
| Order board | Before | After |
|---|---|---|
| TYLIORD, ship, fabric | 8.06 B | 1.48 B (−82%) |
| TYLIORD, rail, fabric | 3.28 B | 923 M (−72%) |
| TYLIORD, cotton cards | 923,361,245 | 923,361,245 (identical) |
| GLaDOS (the balanced save), rail, fabric | 86.0 M | 79.4 M (noise) |
| Day one, all three goods | 58 / 36 / 18 | 54 / 37 / 20 (noise) |
Only what was inflated came down. The balanced save did not move and a new player did not move at all. That is the shape a correction should have, and if a rebalance changes the numbers for a day-one player it is not a correction, it is a nerf wearing one.
Then it broke a player I had no fixture for
The first version of this fix went further and tied the size of an individual order card to the same cotton pool. That sounds consistent, and it removed a player from the game the same night.
The central decision in Cotton Tycoon is grow your cotton or buy it. There is a market, a supply truck and a whole building dedicated to purchasing. A farm with no fields is not a farm with no supply. But a pool built from field output reads a fieldless player as having nothing.
Measured on that player's own save, a fresh restart at level 64 with 2 active fields and a level 27 factory: the order ceiling went from 604,000 to 5,658, which is about 1.1 seconds of that factory's consumption. Nine cards arrive, all nine are meaningless. They stopped playing mid-session, and said so: "if the cotton selling problem is not fixed I am not playing any more."
The two questions turned out to be genuinely different:
- The budget (what the whole board may promise) is denominated in cotton, because that is where double-counting happens.
- The card ceiling (how large one order may be) stays denominated in factory rate, because a generous single card is harmless while the board as a whole is bounded.
Tying the ceiling to the pool as well was tested and rejected: with stock included, TYLIORD's ship card jumped from 1.48 billion back up to 8.46 billion, erasing the entire fix.
The real lesson is in the fixture set
Everything I did that night worked correctly. The A/B ran against a clean worktree at the same commit. There was a day-one control. The save verifier was green. Every single one of those checks passed, and not one of them could have caught this, for a reason that has nothing to do with the checks:
All five of my fixtures were farms, between 3,234 and 11,812 fields. The case where field output is near zero was never in the sample. A measurement can only find what its inputs contain.
So I scanned the live saves for the assumption I had been making. Of 222 active saves, 83 have fewer than 50 active fields and 28 have fewer than 10. "Nobody plays that way" was a belief, and it was false.
Every measurement that touches supply or demand now includes at least one edge profile: a save with no fields, no factory or no stock. Fixture selection is half of the measurement, and it is the half nobody reviews.
The other half of this story, why the same balance mistake appeared in four separate systems, is in this post.