The Bug That Caught Me Cheating
This is a short one, about a moment I keep coming back to, because it taught me the single test I now trust most in my work.
The setting, briefly. I have been building a world called Chronos, a small evolving ecosystem where I design the physics and the bodies and then refuse to tell the cells what to do. They have already surprised me more than once: a producer-predator food web that built itself, and later a population of single cells that invented multicellular bodies. The rule I hold is always the same. Design the conditions, never the behavior, and report honestly what evolution does.
One of the things a real ecosystem does is recycle its dead. Nothing is wasted. A fallen body becomes food for something else. I wanted that. I wanted a third way of making a living, next to growing your own food and hunting it: scavenging, eating what has already died.
So I built it. When a cell dies, it leaves its body behind as carrion on the ground, which slowly rots away. Any cell can eat that carrion through the same action it uses to hunt. Death feeds the web. I ran it, and scavengers appeared, and the food web now had three honest roles in it. It looked like a clean success.
It was a quiet disaster, and the reason is the whole point of this post.
When a win is a warning
I almost moved on. The numbers looked great. But something nagged at me, so I checked how scavenging was distributed across many different random worlds.
It was everywhere. Every single world that survived had scavengers in it. Not most. All of them.
That should sound fine. It is not. Think about the other roles. Predators do not show up in every world. Some worlds settle into peaceful fields of producers with no real hunting at all, because the conditions never made hunting pay. That patchiness, that it depends on the world, is what a real evolved strategy looks like. It earns its place in some conditions and fails to in others.
A role that appears in every world, without exception, is not earning its place. It is just switched on. And if a behavior is just switched on everywhere, the uncomfortable truth is that you, the designer, probably switched it on, even if you did not mean to.
I went back and looked at what I had actually built. And there it was. I had made scavenging free. Eating carrion cost nothing and risked nothing. So for any cell, there was never a reason not to grab a free meal off the ground. Of course it appeared everywhere. I had not created a niche that evolution could choose to fill. I had created a default that no cell had any reason to refuse. That is not evolution. That is a handout with my fingerprints on it.
The success was the warning. The behavior was too good, too uniform, too eager. I had caught myself cheating.
Making it cost something
The fix was to make scavenging a real gamble, the way it is in nature. Eating something that has been dead and rotting for a while is dangerous. It can poison you. A scavenger needs a constitution for it, a tough gut, and even then it is a bet.
So I made eating carrion carry a toxicity risk, worse the more decayed the flesh and the more toxic the local ground, and survivable only for cells that had invested in a tough, defensive body. Now scavenging was no longer a free snack. It was a wager that paid off in some places and poisoned you in others.
I ran the worlds again, and this time scavengers behaved the way a real role should. In lush, calm worlds with little death lying around, scavenging did not pay, and almost no cell bothered. In violent, death-heavy worlds, a strong population of scavengers emerged to work the corpses. The amount of scavenging now tracked how much death there was to feed on, ranging from basically none to roughly a fifth of all cells, depending entirely on the conditions of each world.
That is the difference. Before, scavenging was a fact I had imposed. After, it was a choice the world made, differently in different places, for reasons rooted in the local conditions. Same feature, completely different epistemic status.
The one test I trust now
Here is the rule I took from this, and it has outlasted the specific bug by a wide margin.
If a behavior appears in every world, you probably built it. If it appears in some worlds and not others, it probably evolved.
Universality is a tell. When something happens identically no matter the starting conditions, it is almost always because the conditions were not actually allowed to matter. You removed the choice, usually by forgetting to attach a cost, and what you are seeing is your own default reflected back at you. Variation is the opposite. When a behavior shows up here and stays away there, tracking the conditions, you are watching something get selected, which means it could have gone the other way, which means it is real.
I now apply this to everything in the project, deliberately, as a check against fooling myself. The predators have to be optional, and they are: some worlds have none. The bodies have to be optional, and they are: I watched evolution refuse to build them when there was no payoff. The scavengers have to be optional, and now, finally, they are too. Every role in the world has to be a path the conditions can decline. The day one of them stops being decline-able is the day I have stopped doing science and started doing set design.
And this reaches well past the little world. The hardest systems I build outside of it, large multi-agent AI among them, have the same failure mode wearing a different costume. When every agent in a system behaves identically, it is tempting to call it robust. Usually it means the behavior was forced, not chosen, and the moment conditions shift in a way you did not script for, the whole uniform thing fails at once. The healthy systems, the ones that survive contact with a world you did not fully anticipate, are the ones where different parts do genuinely different things for genuinely different reasons. Variation is not noise. It is the evidence that the parts are actually responding to something real.
A perfect, uniform success is the thing I have learned to distrust the most. The bug that produced one, and the afternoon I spent realizing why it was a bug, taught me more than any clean result ever has.
Chronos is deterministic and fully logged, so I can replay any of these worlds exactly and watch a role earn or fail to earn its place. The honest test for all of it stays the same: does it vary, or did I simply switch it on.
Related reading: A Body Invents Itself - the same optional-cost test, applied to the biggest jump the world has made on its own, from single cell to organism.