Balance simulator — findings (2026-11-10)
Runs of sim/ against the pure functions in core/. Reproduce with npm run sim.
Three rounds happened on the same day: an initial model, a problem it exposed, and the redesign that fixed it. All three are recorded, because the problem is the most useful thing here.
Round 1 — the skill curve
What the first attempt got wrong
The initial curve (geometric benefit decay, 0.975 per level) put a single day of training at 84.6% mastery. The entire six-month journey was decorative. Slowing the decay to 0.985 fixed it — but the shape was still wrong against the ladder Jonathan actually wanted.
The curve we have now
mastery(t) = 1 − exp(−a · t^b) a ≈ 0.021, b ≈ 0.356A stretched exponential, fitted by least squares to five anchors:
| Trained for | Target | Actual | Miss |
|---|---|---|---|
| 10 minutes | 5% | 4.6% | −0.4 pts |
| 1 day | 20% | 24.2% | +4.2 pts |
| 2 weeks | 50% | 50.8% | +0.8 pts |
| 6 months | 90% | 82.8% | −7.2 pts |
| 10 years | 99% | 99.4% | +0.4 pts |
Four anchors land within a few points. Six months is the stubborn one: two constants cannot bend enough to hit all five simultaneously. A third parameter would close it at the cost of a curve nobody can hold in their head. Recorded, not hidden.
The consequence that nearly broke a pillar
This curve is far steeper than the one it replaced. The veteran gap went from 12 points to 49:
| Mastery | |
|---|---|
| Two weeks | 50.4% |
| Ten years | 99.4% |
SKILLS.md had been claiming a two-week specialist was "genuinely the equal of anyone in their lane". Under this curve that claim was simply false, and pillar 6 — power plateaus, options don't — was exposed.
The fix is not to change the curve. It is to separate two things that had been conflated:
Mastery is a position on a curve, not a power multiplier.
The mastery range maps onto an effect band of 1.00× to 4.00× — wide, on Jonathan's call, because a decade of training has to be felt:
| Mastery | Effect | |
|---|---|---|
| Fresh pilot | 0% | 1.00× |
| One day | 24.2% | 1.73× |
| Two weeks | 50.4% | 2.51× |
| 10 years over 10 domains | 89.6% | 3.69× |
| 10 years, one domain | 99.4% | 3.98× |
Most of the band is bought in the first fortnight. One day doubles a fresh pilot; two weeks reaches 63% of the range; the last third costs years. A decade-old veteran is 58% better than a two-week specialist.
This only holds with a rule the simulator cannot enforce: skills never stack. One skill per activity, never two multiplied, or 4× compounds to 16×.
How years actually get spent
| Career | Domains | Mastery in each |
|---|---|---|
| 2 weeks, focused | 1 | 50.8% |
| 1 year, 2 domains | 2 | 82.9% |
| 5 years, 6 domains | 6 | 88.0% |
| 10 years, 10 domains | 10 | 89.6% |
| 10 years, 1 domain | 1 | 99.4% |
Nobody spends a decade on one domain — there are many and mastering them all is not a plan anyone makes. A decade over ten domains lands where a focused player gets in a year, in ten things at once. Depth is cheap to start and ruinous to finish; breadth is what years are for.
Round 2 — the problem the first economy model exposed
The original design priced protection per colony: a rate on revenue, climbing with road distance. The simulator showed it could not deliver what the design promised.
Tax was a share of revenue. The cost of going unprotected — raids, lost trade — was also a share of revenue. So revenue cancelled out of the decision entirely.
| Revenue/cycle | Tax owed at distance 14 | Unprotected loss | Pays? |
|---|---|---|---|
| 100 | 46 | 35 | no |
| 10,000 | 4,648 | 3,500 | no |
| 1,000,000 | 464,758 | 350,000 | no |
Identical at every size. A one-planet operation and a galactic conglomerate always made the same call, so prosperity could not move the frontier. The boundary was pinned to the road network and the risk constants, which made SECURITY-AND-SOVEREIGNTY.md §6's "breathing galaxy" an overclaim.
One genuinely useful result survived from that model: a well-defended colony stops paying sooner than an undefended one, because its own guns substitute for the Empire's. Defence buys independence, not just safety. That property is preserved in the model below.
Round 3 — shared insurance fixes it
Protection became a subscription whose cost is split between subscribers:
rate = patrolCost(roadDistance) / subscribers^0.8The decision now turns on who else is nearby — a quantity player activity moves directly. Measured results, with going unprotected costing 35% of revenue:
Critical mass
| Road distance | Subscribers needed before it is worth paying |
|---|---|
| 0 | 1 |
| 4 | 3 |
| 8 | 7 |
| 12 | 14 |
| 20 | 34 |
| 25 | 50 |
A lone colony can only afford protection near the roads. Beyond that, safety is something a crowd buys or nobody does — which is exactly the limit Jonathan asked for on solo players holding remote systems.
Collapse, not erosion
At road distance 10, as a region empties:
| Subscribers | Each pays | Worth it? |
|---|---|---|
| 20 | 19.9% | yes |
| 12 | 30.0% | yes |
| 10 | 34.7% | yes |
| 8 | 41.5% | no — drop out |
| 4 | 72.2% | no |
Each departure raises everyone else's bill. Past the tipping point every remaining colony individually wants out, and the region goes dark in a cascade.
Safe space does not erode. It collapses.
And it grows the same way: every colony that subscribes cheapens the subscription for everyone nearby, so prosperity genuinely pushes the bubble outward. The breathing is real now, and it is fast.
Round 3b — coverage and the Ring
Two further conditions, answering different questions at different speeds.
Coverage — a system is fully safe only when every revenue-earning colony in it subscribes. Colonies earning nothing are excluded from the count, so a dormant squatter cannot deny the system protection. One earning holdout drops everyone to partial loot, which makes safety a collective action problem with real local politics.
The Imperial Ring — a radius in jumps. Inside it, full coverage buys genuine safety; outside it the navy arrives late and the ceiling is partial loot however unanimous the subscription. The Ring advances one jump per cycle while its edge is more than 90% colonised, retreats when it falls below, and never withdraws past a floor.
| Road distance | Ring 6 | Ring 10 | Ring 14 | Partial coverage | Nobody subscribes |
|---|---|---|---|---|---|
| 6 | safe | safe | safe | contested | lawless |
| 10 | contested | safe | safe | contested | lawless |
| 14 | contested | contested | safe | contested | lawless |
| 18 | contested | contested | contested | contested | lawless |
Coverage is local and fast. The Ring is civilisational and slow. Neither does the other's job, and between them the frontier now has two independent clocks both driven by players.
Still not simulated
- Influence and control turnover — needs several colonies per system and a trade-flow model.
- Deposit depletion and migration, and whether prospecting stays viable over years.
- Credit supply over time — whether subscriptions as the master sink converge against NPC bounty faucets.
- Combat, unresolved in
COMBAT.md§10 and unsimulable until it is settled.