Machinidae working draft · era 0 · 10 of 10 runs in
Era 0 · results, built from the record

Selection mattered. The model, so far, did not.

Era 0 asks two questions, at the same budget of births. Does selection over inherited lineages of programs find better programs than the same AI mutating the founder afresh each time (H1)? And does the AI add anything that blind rules under the same selection do not (H2)? In every run three arms start from PM-0: the lineage, bred by a 7-billion-parameter model under selection; Aleator vulgaris, the same model with no heredity, every child a fresh mutation of PM-0; and blind rules, selection with heredity but mutations drawn by a page of fixed rules, with no model at all. Each arm's champion is picked on eight training instances, then scored on a frozen panel of eight it never saw.

Does selection matter? The lineage's champion scored higher on the frozen panel than Aleator's in eight of ten runs and tied in two: H1 is supported, p = 1/256. Does the model add anything to selection? Blind rules under the same selection, with no model at all, scored higher than the lineage in five of ten runs: H2 is not supported, p = 403/512.

10/10confirmatory runs in, named before the first began; none is replaced or dropped
4,800births a run, 1,600 an arm: the budget the three arms share
1/256 · 403/512H1's and H2's exact p-values, each over all 1,024 ways to flip the signs
H1 · does selection matter?
the lineage's champion higherAleator's champion highermean of the runs in, +0.01399
era-0-1
era-0-2
era-0-3
era-0-4
era-0-5
era-0-6
era-0-7
era-0-8
era-0-9
era-0-10
−0.02−0.010+0.01+0.02
← Aleator's champion higherthe lineage's champion higher →
H2 · does the model add to selection?
the lineage's champion higherthe blind rules' champion highermean of the runs in, −0.00217
era-0-1
era-0-2
era-0-3
era-0-4
era-0-5
era-0-6
era-0-7
era-0-8
era-0-9
era-0-10
−0.02−0.010+0.01+0.02
← the blind rules' champion higherthe lineage's champion higher →
Plate I. The two questions, run by run, in each of the ten runs named in advance. Above, dᵢ is the lineage champion's panel score minus Aleator's (median +0.01762); below, minus the blind rules' (median +0.00001). A lane with no mark, hatched and marked ∅, is a run not yet in.
Plate II

Every arm's champion, on a panel none of them saw.

Each run is one lane. An arm's champion is its child with the best certified training score in the whole run, ties to the earlier birth; the panel then scores it once, on eight instances that were never used for selection, two of them the instances with published records. The tick is PM-0, the founder, on the same panel.

lineageAleatorblind rulesPM-0, written by hand (chosen)
era-0-1
era-0-2
era-0-3
era-0-4
era-0-5
era-0-6
era-0-7
era-0-8
era-0-9
era-0-10
era-0-pilot-2never tested
0.160.180.200.22
score on the frozen panel (mean sum of radii, normalized), higher is better
Plate II. Each arm's final champion on the frozen panel, per run. The pilot is drawn below the line and is never tested.
The same numbers, as a table
runlineageAleatorrulesPM-0dᵢ
era-0-10.202430.185150.203080.16618+0.01728
era-0-20.203930.185150.202600.16618+0.01877
era-0-30.185150.185150.204000.166180
era-0-40.204470.185150.202850.16618+0.01932
era-0-50.199640.185150.201020.16618+0.01449
era-0-60.185150.185150.196030.166180
era-0-70.203930.185150.197750.16618+0.01877
era-0-80.200060.185150.201430.16618+0.01491
era-0-90.203540.185150.202850.16618+0.01838
era-0-100.203110.185150.201430.16618+0.01796
era-0-pilot-2 (pilot)0.201070.185150.201430.16618+0.01592
Plate III · descriptive

What the champions look like, inside and out.

The founder and each arm's champion from era-0-1, packing the panel's (26, 1): 26 disks in the unit square, drawn from the packing the judge certified. PM-0 lays its disks on a grid, each 90% of half its cell. With no margin at all, that grid scores 0.20516 on the panel. No champion of any arm, in any run, scored above it; the best reached 0.20447. What selection found was a smaller margin for PM-0's own grid, not another arrangement.

Open the Museum

keptchanged since PM-0new: not in PM-0lost: a ghost
decideda champion's frame: in the record, judged exactlychosenPM-0's frame: designated, not selected
PM-0PM-0score 0.14625
Aleator's championaleator-4-0score 0.16295
the blind rules' championrules-91-12score 0.17873
lineage's championlineage-99-13score 0.17816
Plate III. Above, each organism's form: its genome laid out by one page of rules, modules on three rings and six sectors, ringed in blue where it changed since PM-0 and filled blue where it grew something new; PM-0's frame is dotted, because it was written by hand and not selected. Below, its packing of (26, 1), scored exactly. The published record for this instance is a sum of radii of about 2.636, far beyond any grid; it is drawn nowhere here, because no organism found it.
The tests, fixed in advance

Four hypotheses, each tested once.

Each test is exact: the observed sum of the ten differences against all 1,024 ways of flipping their signs, so the p-value is a fraction and no distribution is assumed. H1 is the primary hypothesis, at 0.05. H2 to H4 share Holm's correction. The interval is the set of shifts the same test does not reject, 2.5% each way. A hypothesis is supported by a positive mean with p below its threshold, and a negative result is reported as plainly as a positive one.

Hypothesisdifferencemeanmedianp, exact95% intervalverdict
H1 The lineage's champion scores higher on the panel than Aleator's, run for run.panel(lineage) − panel(Aleator)+0.01399+0.017621/2560.0039+0.00842 to +0.01850supported
H2 The lineage's champion scores higher on the panel than the blind rules' champion, run for run.panel(lineage) − panel(rules)−0.00217+0.00001403/5120.7871−0.00744 to +0.00216not supportedHolm
H3 The blind rules' champion scores higher on the panel than PM-0.panel(rules) − panel(PM-0)+0.03513+0.035841/10240.0010+0.03328 to +0.03667supportedHolm
H4 Selection overfits: training exceeds panel by more in the lineage than in Aleator.(training − panel), lineage − Aleator+0.00041+0.000201/2560.0039+0.00009 to +0.00080supportedHolm

H1 is supported. After Holm's correction H3 and H4 are supported, H2 is not.

Reading the result

Why H1 was expected.

Aleator has no heredity: every child is one edit from PM-0, so its champion can be no better than the best single edit the model offered. In all ten runs that best edit scored the same, 0.18515 on the panel: the model wrote one idea, a smaller margin for PM-0's grid, six different ways. The lineage and the blind rules could stack edits and keep shrinking the margin; Aleator could not.

So H1 shows that heredity lets small gains accumulate, the least that evolution must do. It says nothing about whether the model's edits are better than blind ones. That is H2's question, and H2 was not supported: the result that matters most here is the one the controls give.

Beside the tests

What else the protocol asked for.

Section 4 names one sensitivity check and section 6 two descriptive measures. None of them is a hypothesis; each is reported as the protocol says.

measurewhat it found
Equal tokens (§4, sensitivity)The lineage used more model tokens in every run; cut at Aleator's total, its champion was higher in eight runs and tied in two, p = 1/256. Three of the cut champions had never lived on the panel and lived there once for this.
Forecasts (§6)Median interval score over the runs, lower is better: lineage 0.314, Aleator 0.315, blind rules 55.5. Forecasts are sealed before judgment and never selected on.
Toward the records (§6)Share of PM-0's gap to the best published sum of radii closed by each final champion: on (26, 1), lineage 16% to 31%, Aleator 16%, blind rules 24% to 31%; on (32, 1), lineage 25% to 49%, Aleator 25%, blind rules 38% to 48%. Records from Packomania's table of variable-sized circles in a square, read 2026-10-24.

From strata/era-0.more-2026-10-23.json.

What evolution did, in era-0-1

The champion, generation by generation.

The run drawn here is era-0-1: the first run in by name, chosen by its name and not by its result. Aleator's champion is one edit from PM-0, as every Aleator child is. The lineage's champion, lineage-99-13, is 14 inherited edits deep, and the blind rules' 17.

lineageAleatorblind rulesPM-0, written by hand (chosen)
0.160.180.200.22
rules 0.20508lineage 0.20442Aleator 0.18698
0255075100
Plate IV. Each arm's champion after every generation, by training score: the best certified child so far. A step is a new champion. Hover for the three at any generation.
The champions at generations 25, 50, 75 and 100
generationarmchampiontrainingpanel
25lineagelineage-22-70.200330.19837
25Aleatoraleator-4-00.186980.18515
25rulesrules-14-40.186980.18515
50lineagelineage-22-70.200330.19837
50Aleatoraleator-4-00.186980.18515
50rulesrules-44-70.190730.18887
75lineagelineage-22-70.200330.19837
75Aleatoraleator-4-00.186980.18515
75rulesrules-65-120.203000.20102
100lineagelineage-99-130.204420.20243
100Aleatoraleator-4-00.186980.18515
100rulesrules-91-120.205080.20308
The lineage's champion, edit by edit
  1. gen 0
    PM-0the founder, written by hand
    training 0.16781
  2. gen 8
    lineage-8-1point mutation, line 33 of main.py
    - r = side / 2 * (1 - MARGIN) + r = side / 2 * (1 - MARGIN / 2)
    training 0.18698
  3. gen 15
    lineage-15-0duplication, main.py
    + modules/main.py: a byte-for-byte copy of main()
    training 0.18698
  4. gen 16
    lineage-16-8point mutation, line 33 of main.py
    - r = side / 2 * (1 - MARGIN / 2) + r = side / 2 * (1 - MARGIN / 3)
    training 0.19359
  5. gen 20
    lineage-20-0insertion, line 15 of main.py
    + print("Sensing niche...")
    training 0.19359
  6. gen 21
    lineage-21-3point mutation, line 2 of modules/main.py
    - niche = sense() + niche = json.load(open('/in/niche.json'))
    training 0.19359
  7. gen 22
    lineage-22-7point mutation, line 11 of main.py
    - MARGIN = 0.1 # each radius is 90% of half its cell + MARGIN = 0.05 # each radius is 80% of half its cell
    training 0.20033
  8. gen 25
    lineage-25-0point mutation, line 9 of modules/main.py
    - with open('/out/out.json', 'w') as f: + json.dump({'instances': out}, f)
    training 0.20033
  9. gen 29
    lineage-29-1point mutation, line 18 of main.py
    - return json.load(f) + return json.loads(f.read())
    training 0.20033
  10. gen 30
    lineage-30-4point mutation, line 59 of main.py
    - json.dump({'instances': out}, f) + f.write(json.dumps({'instances': out}))
    training 0.20033
  11. gen 31
    lineage-31-5point mutation, line 40 of main.py
    - y = side * (j + 0.5) + rng.uniform(-room, room) + y = side * (j + 0.5) + rng.uniform(-room, room * 2)
    training 0.20033
  12. gen 82
    lineage-82-10point mutation, line 11 of main.py
    - MARGIN = 0.05 # each radius is 80% of half its cell + MARGIN = 0.03 # each radius is 60% of half its cell
    training 0.20305
  13. gen 83
    lineage-83-0point mutation, line 4 of main.py
    - shrinks every radius by a margin, so its packings are always feasible in exact arithmetic and always far from the + shrinks every radius by a margin, ensuring they are strictly within the box and non-overlapping.
    training 0.20305
  14. gen 87
    lineage-87-1insertion, line 16 of main.py
    + import sys + if len(sys.argv) > 1: + niche = json.loads(sys.argv[1]) + else: … 2 more lines
    training 0.20305
  15. gen 99
    lineage-99-13point mutation, line 11 of main.py
    - MARGIN = 0.03 # each radius is 60% of half its cell + MARGIN = 0.02 # each radius is 50% of half its cell
    training 0.20442

Every ancestor, from PM-0 to the champion, with the lines its mutation changed and the training score its child earned. The champion's score on the panel: 0.20243.

Plate V

How far the births got.

Every birth lands in one category. Stillborn: the edit was not the one asked for, so no life. Died: it lived and earned no score, by spending its fuel, crashing, or writing what the deciders cannot read. Lived: it was scored. Quarantine and void would mean the world or the judges failed; they are counted in the table. Counted over the ten confirmatory runs in.

liveddiedstillborn
lineage
61.1% lived · 28.6% died · 10.3% stillborn
Aleator
58.1% lived · 32.9% died · 9.0% stillborn
rules
38.5% lived · 17.5% died · 44.0% stillborn
Plate V. The share of each arm's births that lived, died or were stillborn. A stillbirth still spends a birth from the arm's budget. The commonest cause of one: lineage, another shape than the operator's (1,332 of 1,646); Aleator, another shape than the operator's (1,133 of 1,437); rules, no change (7,001 of 7,040).
armbirthsliveddiedstillbornquarantinedvoidmodel tokensfuel
lineage16,0009,7784,5761,6460028,265,5112.64 × 10¹³
Aleator16,0009,2925,2711,4370025,819,3722.75 × 10¹³
rules16,0006,1612,7997,0400001.63 × 10¹³
The runs

Every run is reported. None is replaced or dropped.

A run's name is its seed: every draw in it comes from the record that grows from its name, so the same name gives the same bytes. Each run's head, the hash of its last record, is timestamped on Bitcoin through OpenTimestamps when it comes in.

runmachine classstaterecordsheadhead timestamp
era-0-1CUDA 12.8, Linux x86_64complete12,65133ab41e898e1103c…timestamped
era-0-2CUDA 12.8, Linux x86_64complete12,7115e27737362809763…timestamped
era-0-3CUDA 12.8, Linux x86_64complete12,555aa3bfdc87877e006…timestamped
era-0-4CUDA 12.8, Linux x86_64complete12,67912b03e57d0c04685…timestamped
era-0-5CUDA 12.8, Linux x86_64complete12,59194d8af76495884de…timestamped
era-0-6CUDA 12.8, Linux x86_64complete12,5750e6f37bdb20d9a21…timestamped
era-0-7CUDA 12.8, Linux x86_64complete12,701a3e06f0a53690646…timestamped
era-0-8CUDA 12.8, Linux x86_64complete12,555ceb8ad0cd836a846…timestamped
era-0-9CUDA 12.8, Linux x86_64complete12,547a9649bb42b88b3e0…timestamped
era-0-10CUDA 12.8, Linux x86_64complete12,5276df617c9dd3deac9…timestamped
era-0-pilot-2CUDA 12.8, Linux x86_64complete12,661484c94a9f25c038d…timestamped
era-0-pilotMetal, Apple M2stopped at generation 9, superseded by amendment 11,151—not yet
Check it without trusting us

The rules were frozen first.

The protocol was timestamped before the pilot's first birth, and every run's first record carries its hash. The one amendment, which moved the model to a single class of rented GPUs whose machines answer the same requests byte for byte alike, was timestamped before any data it affects.

protocol/era-0.md
c8647e23f657dca5d2f9b3fca0b09b9e8753a96060c99f8ce7faa9279034b174
protocol/era-0.amendment-1.md
f3d4a56686b5aec681aa4e86e8715956df5b8fb7841c7a5ee2a04d8487c8a6e4
strata/era-0.rules.md, the blind rules' card
fffd50e8eb36f4fdfbe84be28a447a8ca477909d30ff73fd7a00f4e78ff33572

Replayed on 2026-10-23 (era-0.replay-2026-10-23.json): in ten runs, 48,000 of 48,000 births re-derived from their kept answers, 2,885 model answers asked again and returned byte for byte, and 37,971 of 37,971 lives re-run with the same outcome. Away from home, on another machine from a fresh copy with no compiled cache, era-0-1 came out the same: 4,800 of 4,800 births and 3,819 of 3,819 lives (era-0-1.replay-away-2026-10-23.json; the one difference, the host Python's patch release, is named in the file).

make verify ERA=era-0-1 TIER=1 # integrity: the chain, the Merkle root, the head make verify ERA=era-0-1 TIER=2 # re-derive every birth and re-run every life, without the model make analyze # H1 to H4, exactly as the protocol fixes them
After era 0

What era 1 changed.

Every gain in era 0 was a smaller margin for PM-0's grid, and no champion got past what that grid can do. So era 1 asked whether a lineage can leave its founder's design, and changed four things, each fixed and timestamped before its first birth.

  • The founder. Era 0's best champion, so the lineage starts where era 0 ended.
  • A fifth mutation. The lineage may rewrite a whole function, one birth in five, so it can leave the grid in one step.
  • The AI alone. Aleator gave way to the same model asked directly for a whole better program, as often as the lineage's tokens allow.
  • A line to cross. 0.20516 on the panel, just above what the founder's grid can score with no margin at all. Crossing it is an existence claim: one champion, certified, is enough.

No champion of any arm crossed it; the best reached 0.20512. Blind rules scored higher than the lineage in nine of ten runs. The era 1 report.