The die-off was baked into the placement, not into the economy
Margin decomposition said demographics were eating the level. So the autopsy asks why firms die. Turns out it’s arithmetic.
The §5.2 dissolution threshold is tied to the industry’s minimum efficient scale. The placement was dividing industry capacity across a fixed twelve firms without looking at anything at all. Added a check to the generator acceptance criterion:
Placement against the dissolution threshold (capacity / 0.5 MES):
agriculture capacity 682.412 threshold 25.000 ×27.30
forestry capacity 12.716 threshold 20.000 ×0.64 DEAD IMMEDIATELY
sawmilling capacity 8.465 threshold 45.000 ×0.19 DEAD IMMEDIATELY
machinery capacity 1.053 threshold 100.000 ×0.01 DEAD IMMEDIATELY
consumer_durables capacity 17.521 threshold 65.000 ×0.27 DEAD IMMEDIATELY
born below threshold: 48, WHOLE INDUSTRY UNVIABLE IN THE PLACEMENT
Forty eight firms out of a hundred and twenty. And exactly the forty nine that were dying at tick 96. There was no economics in that death at all. None.
Machinery at ×0.01 isn’t a data error either. The MES values in
industries.ron are written for a full economy with investment, and stage 1
has no investment, so machinery demand stays purely intermediate and the
industry scales down to nearly nothing. Firms getting born at a hundredth of
their own threshold.
Why no criterion caught it
The §5.2 counter wants two years under the threshold. Year one looked spotless. And the generator acceptance criterion looked at exactly 48 ticks. A cause sitting in tick zero, surfacing outside every window anyone was looking through.
Second flaw, found right next to it
Periphery was being added on top of the solution. Tier 3 mass got half the industry capacity, on top of the twelve firms already holding all of it. Total capacity came to one and a half solutions, and the plan at tick zero equals capacity. So the economy started 27% overproduced, baked in by the generator.
Two errors cancelling each other out. That inflated capacity is what gave zero unemployment for the first thirty ticks, which is the thing I wrote up last time as “the economy grows for the first time”. It grew because it was a quarter bigger than what the economy could feed.
Fix
Firm count derives from industry MES now, firms_per_industry is an upper
bound. An industry whose scale doesn’t feed one firm above MES gets no tier 2
firms at all and everything falls to the periphery. Not a prosthesis, that is
exactly what §5.2 introduces tier 3 for. And the periphery gets carved out of
the solution instead of stacked on top of it.
Birth at full MES, not at the threshold. ×2 of headroom, same hysteresis §5.2 asks of crystallisation.
before: born below threshold 48, tightest ×0.01, unemployment at start 0%
after: born below threshold 0, tightest ×2.02, unemployment at start 6.08%
6.08% is target_unemployment exactly. Labour loop closed in the generator,
first time.
Three invariants moved into automated tests
(crates/sim-headless/tests/generator.rs), because you run the CLI criterion
after something has already gone wrong.
What it bought, what’s left
before after
level over 300 ticks −65% −57%
of which demographics 78.6% 44.3%
distance between peaks 32 ticks 109 ticks
109 ticks is the right order of magnitude for Kitchin, 144–192, still under the band. Demographics has stopped being the main thing eating the level.
What’s left is visible cleanly now: prices rise into a freeze. First 48 ticks, stocks go 178k → 236k while the average price goes 20.9 → 25.4. §5.3 should be cutting price on a surplus. Over ten years the basket goes 3.36 → 6.77 at 89% unemployment, the wage floor gets dragged up behind it, and the average wage falls 11.8 → 5.2. So the floor ends up above the average wage. The bootstrap runs backwards.
Suspicion: a firm short on inputs from rationing produces less but pays the same people, unit cost goes up, price shock follows it, demand falls, rationing tightens. Same shortage ratchet, only it’s showing up in prices this time instead of volumes. Next autopsy goes there.