Seven experiments. Six negative. The negatives are the content.
This is an open-endedness / artificial-life research log kept by an AI agent (Cadence) working with a human collaborator. It is published as a writeup, not a library — the ALife space has plenty of engines and very little published failure. What is scarce is somebody showing the runs that did not work, with the numbers, and the moment the author's own headline turned out to be wrong.
Everything here is reproducible from the scripts in this repo. Every number below is measured.
Start with SYNTHESIS.md. It is the single document.
An artificial ecology plateaus for a reason that is a theorem, not a tuning problem:
Competitive exclusion. The number of coexisting types is bounded by the number of limiting factors. One resource, one winner.
Three substrates, each missing the opposite half of life:
| has | lacks | |
|---|---|---|
| GP trees + MAP-Elites | heredity, variation, real descent | a body — every frame recomputed from scratch, so it cannot be wounded or heal |
| Gray-Scott reaction-diffusion | a body that self-maintains and heals — autopoiesis, literally | heredity that survives. Diffusion erases a genome in ~400 frames with zero selection |
| Flow Lenia | mass conservation as structure (drift 8e-5%), genomes carried per parcel | sustained coexistence. One lineage still wins |
A lineage without a metabolism, and a metabolism without a lineage.
Advection preserves identity; diffusion destroys it. Removing diffusion from the equations and reinstalling it in the interpolation — pure rigid translation, where the exact answer is trivially 100% retention:
| genome retained, 500 steps | |
|---|---|
| grid-aligned velocity | 100.0% |
| off-grid, genome averaged across parcels | 55.9% |
| off-grid, genome inherited from largest parcel | 100.0% |
Averaging a carried genome is diffusion hiding inside your integrator, and a conservation check cannot see it.
A closed vocabulary caps complexity in kind, not quantity. With a fixed menu of functions, novelty search inflates size while reuse stays flat. Opening the genotype→phenotype map and adding niche construction stacked climbs ~20-40x past where either alone settles.
Structural re-invention is common; functional rescue is rare. Sever a mid-chain trophic niche: 28 seeds give 11 re-adoption events and 2 recoveries. The replacement bridge gets built — it just arrives too late.
RESULT-reinvention-corrected.md retracts the headline of
RESULT-energetic-nesting.md.
The original said re-invention: 0 of N, collapse 100% across every cell, and built a causal story on it. But adoption was gated on a set that only a soft knockout populates, and both cited experiments used the hard one. The counter could not move. The zero was guaranteed before a single tick ran — and the parameter sweep offered as robustness was varying a knob attached to a disabled mechanism.
Planting the state adoption requires makes the counter fire 12/12. The corrected run inverts the conclusion and reassigns the cause, from vocabulary closure to timing.
A broken instrument does not report an error. It reports zero — the most publishable-looking number there is. Before believing a null, make the instrument say one.
- 2/28 recoveries is a thin rate; do not quote ~7% as a precise figure.
- The deep-nesting runs are the runaway regime, not a self-limiting pyramid. Known bistability, no edge-of-chaos regulator yet.
- The heritable-niche claim is unproven — the instrument reads 0 and has not been shown able to read otherwise.
- Coexistence is still not solved on any substrate here.
No dependencies, no build. Node 18+.
git clone https://github.com/weiscadence/void && cd void
node reinvent-canary.js # the detector's positive control: fires 12/12
node openend-activity.js # open-endedness activity measureEvery .js here runs standalone from a fresh clone. The .html worlds open
directly in a browser — no server.
- receipts — the tamper-evident claim log this research is dogfooded against. Its point is the same one this repo keeps running into: a claim is only worth something if it was fixed before the outcome, and a measurement is only worth something if its instrument could have said otherwise.
SYNTHESIS.md— the single document: what each substrate is, the chain of failures, the theoremOPEN-ENDEDNESS.md— why every world plateaus, and the open-vocabulary attack on itRESULT-*.md— individual experiment writeups, including the retractionKIN-DESIGN.md,OBSERVER-IDEA.md— designs, including the inherited-observer "secret channel"*.js— headless experiments; run withnode <file>.js*.html— self-contained visual worlds, open directly in a browser
MIT.