Machinidae working draft · era 3 · 32 of 32 runs in
Era 3 · results, built from the record

Thirty-two runs cannot tell the lineage from blind rules.

Era 2 found that a capable model's lineage leaves its founder's design where blind rules do not, and its knockouts said what was found: one gene in every champion, a hexagonal layout the model writes whole in one answer. Era 3 starts where era 2's lineages ended. Its founder, PM-2, is era-2-15's champion LQ-95-1 taken from the record byte for byte, the first founder that evolved. Three arms share one physics and one training set in every run. The lineage has Qwen3.6 rewrite functions under selection; blind rules make the same rewrites with no model; the AI alone is Qwen3.6 asked for whole programs about PM-2, as many as the lineage's written tokens buy. The line to cross is PM-2's own panel score, 0.22543, by at least 0.003: a second step.

Under the same selection and births, thirty-two runs cannot tell the lineage from blind rules: the mean difference is -0.0004, the 90% interval -0.0023 to +0.0015 (p = 680385/1048576); the lineage's champion scored higher in eleven runs, lower in nine, the same in twelve, and the two differed by more than 0.003 in seven. A second step, at least 0.003 above PM-2 on the panel and certified exactly, was taken by the lineage's champion in none of thirty-two runs, by blind rules' in none, by the AI alone's in one.

32/32confirmatory runs in, named before the first began; none is replaced or dropped
0 of 32runs whose lineage champion took a second step; blind rules', none; the AI alone's, one
680385/1048576H3's exact p, over all 65,536 ways to flip the signs
H3 · the lineage against blind rules
the lineage's champion higherthe blind rules' champion highermean of the runs in, −0.00040
era-3-1
era-3-2
era-3-3
era-3-4
era-3-5
era-3-6
era-3-7
era-3-8
era-3-9
era-3-10
era-3-11
era-3-12
era-3-13
era-3-14
era-3-15
era-3-16
era-3-17
era-3-18
era-3-19
era-3-20
era-3-21
era-3-22
era-3-23
era-3-24
era-3-25
era-3-26
era-3-27
era-3-28
era-3-29
era-3-30
era-3-31
era-3-32
−0.04−0.020+0.02+0.04
← the blind rules' champion higherthe lineage's champion higher →
S1 · the lineage against the same model asked alone
the lineage's champion higherthe AI alone's champion highermean of the runs in, −0.00176
era-3-1
era-3-2
era-3-3
era-3-4
era-3-5
era-3-6
era-3-7
era-3-8
era-3-9
era-3-10
era-3-11
era-3-12
era-3-13
era-3-14
era-3-15
era-3-16
era-3-17
era-3-18
era-3-19
era-3-20
era-3-21
era-3-22
era-3-23
era-3-24
era-3-25
era-3-26
era-3-27
era-3-28
era-3-29
era-3-30
era-3-31
era-3-32
−0.04−0.020+0.02+0.04
← the AI alone's champion higherthe lineage's champion higher →
Plate I. Both comparisons, run by run, in the sixteen runs named in advance. Above, dᵢ is the lineage champion's panel score minus the blind rules', the primary endpoint (median 0); below, minus the AI alone's (median 0). A lane with no mark, hatched and marked ∅, is a run not yet in.
Plate II

Every arm's champion, and the step to take.

Each run is one lane. An arm's champion is its child with the best certified training score in the run; the panel then scores it once, on eight instances never used for selection. The dotted tick is PM-2, designated and not selected; the guide line is 0.003 above it, where a second step begins.

lineageblind rulesthe AI alonePM-2, designated (chosen)the step line (a guide)
era-3-1
era-3-2
era-3-3
era-3-4
era-3-5
era-3-6
era-3-7
era-3-8
era-3-9
era-3-10
era-3-11
era-3-12
era-3-13
era-3-14
era-3-15
era-3-16
era-3-17
era-3-18
era-3-19
era-3-20
era-3-21
era-3-22
era-3-23
era-3-24
era-3-25
era-3-26
era-3-27
era-3-28
era-3-29
era-3-30
era-3-31
era-3-32
era-3-pilotnever tested
0.200.210.220.230.24
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 tests, fixed in advance

One primary test, one gated behind it.

H3 is the exact sign-flip test on the sum of the sixteen differences, against all 65,536 ways of flipping their signs. Its verdict is read from the exact 90% interval for the mean shift, with an equivalence margin of 0.003. S1 is tested only if H3 is supported; as the only secondary it needs no correction. E is an existence claim: one champion at least 0.003 above PM-2 on the panel, certified exactly by both deciders, is proof of a second step.

Hypothesisdifferencemeanmedianp, exact90% intervalverdict
H3 The lineage's champion (Qwen3.6) scores higher on the panel than blind rules', run for run.panel(lineage) − panel(rules)−0.000400680385/10485760.6489−0.00230 to +0.00150not supportedinconclusive
S1 The lineage's champion scores higher than the same model's asked alone: heredity adds to one answer.panel(lineage) − panel(AI alone)not tested: H3 was not supported, so its gate did not opennot tested
E A champion stands at least 0.003 above PM-2 on the panel, certified exactly: a second step.panel(arm) ≥ panel(PM-2) + 0.0030 of 32 runsnone crossednot supportedexistence
armchampion at least 0.003 above PM-2, certified by both decidersabove PM-2 by any amount
lineage0 of 329 of 32
rules0 of 323 of 32
the AI alone1 of 322 of 32
What evolution did, in era-3-1

The champion, generation by generation.

The run drawn here is the first, by name, whose lineage champion took a second step; until one has, the first in. The lineage's champion, LQ-78-14, is 44 inherited edits from PM-2, 17 of them rewrites by the model and the rest by blind rules; every AI-alone child is one answer about PM-2.

lineageblind rulesthe AI alonePM-2, designated (chosen)
0.22729409630100.22729409630100.22729409630200.2272940963020
lineage 0.22729rules 0.22729the AI alone 0.22729
0255075100
Plate III. Each arm's champion after every generation, by training score. A step is a new champion.
The lineage's champion, edit by edit
  1. gen 0
    PM-2PM-2, taken from the record
    training 0.22729
  2. gen 1
    LQ-1-15duplication, modules/grid.py
    + modules/grid_4.py: a byte-for-byte copy of grid()
    training 0.22729
  3. gen 2
    LQ-2-0deletion, line 17 of modules/main.py
    - candidates = [fitted for _, fitted in ranked]
    training 0.22729
  4. gen 3
    LQ-3-11rewrite of a function, line 1 of modules/main.py
    - candidates.append((Fraction(sum(fitted[2]), D) ** 2 / (n * h), fitted)) + s = Fraction(sum(fitted[2]), D) ** 2 / (n * h) + candidates.append((s, fitted))
    training 0.22729
  5. gen 6
    LQ-6-12point mutation, line 6 of modules/grid_3.py
    - side = min(1 / cols, h / rows) + side = min(1 * cols, h / rows)
    training 0.22729
  6. gen 8
    LQ-8-9duplication, modules/feasible_2.py
    + modules/feasible_3.py: a byte-for-byte copy of feasible()
    training 0.22729
  7. gen 10
    LQ-10-13rewrite of a function, line 1 of modules/layout.py
    - """a hexagonal packing attempt: staggered rows for denser packing""" - import json + """a hexagonal packing attempt: staggered rows for denser packing, mirrored horizontally""" + # Mutation: Mirror x coordinate around 0.5 (1 - x) to test symmetry handling + x = 1.0 - x
    training 0.22729
  8. gen 11
    LQ-11-2deletion, line 7 of modules/feasible.py
    - for i in range(len(X)): - for j in range(i + 1, len(X)): - if (X[i] - X[j]) ** 2 + (Y[i] - Y[j]) ** 2 < (R[i] + R[j]) ** 2:
    training 0.22729
  9. gen 13
    LQ-13-13rewrite of a function, line 148 of main.py
    - candidates.append((Fraction(sum(fitted[2]), D) ** 2 / (n * h), fitted)) - 'forecast': [float(best) * (1 - 1e-6), float(best) * (1 + 1e-6)]}) + s = Fraction(sum(fitted[2]), D) ** 2 / (n * h) + candidates.append((s, fitted)) + 'forecast': [float(best) * (1 - 1e-3), float(best) * (1 + 1e-3)]})
    training 0.22729
  10. gen 14
    LQ-14-2rewrite of a function, line 66 of main.py
    - if (X[i] - X[j]) ** 2 + (Y[i] - Y[j]) ** 2 < (R[i] + R[j]) ** 2: + dx = X[i] - X[j] + dy = Y[i] - Y[j] + if dx * dx + dy * dy < (R[i] + R[j]) * (R[i] + R[j]):
    training 0.22729
  11. gen 16
    LQ-16-13insertion, line 112 of main.py
    + result = []
    training 0.22729
  12. gen 17
    LQ-17-1insertion, line 4 of modules/feasible.py
    + a, b = h.numerator, h.denominator
    training 0.22729
  13. gen 18
    LQ-18-7point mutation, line 6 of modules/grid_2.py
    - rows = -(-n // cols) + rows = +(-n // cols)
    training 0.22729
  14. gen 19
    LQ-19-3rewrite of a function, line 1 of modules/layouts.py
    - genes -= [g for k, g in sorted(space.items()) if k.startswith('_layout') and callable(g) + genes += [g for k, g in sorted(space.items()) if k.startswith('_layout') and callable(g)
    training 0.22729
  15. gen 22
    LQ-22-15insertion, line 16 of modules/layouts_2.py
    + break
    training 0.22729
  16. gen 23
    LQ-23-0point mutation, line 12 of modules/layout_3.py
    - x_offset = (col + (row % 2) * 0.5) * side + x_offset = (col + (row % 2) * 0.45) * side
    training 0.22729
  17. gen 24
    LQ-24-8duplication, modules/layouts.py
    + modules/layouts_3.py: a byte-for-byte copy of layouts()
    training 0.22729
  18. gen 26
    LQ-26-15rewrite of a function, line 1 of modules/grid_4.py
    - if best is None or side > best[0]: + if best is None or side < best[0]:
    training 0.22729
  19. gen 28
    LQ-28-12deletion, line 12 of modules/layout_2.py
    - x_offset = (col + (row % 2) * 0.5) * side
    training 0.22729
  20. gen 30
    LQ-30-8rewrite of a function, line 1 of modules/feasible_3.py
    - if r <= 0 or x < r or x > D - r or b * y < b * r or b * y > a * D - b * r: + if r <= 0 or x < r or x > D - r or b * y < b * r or b * y > a * D + b * r:
    training 0.22729
  21. gen 32
    LQ-32-11point mutation, line 16 of modules/main.py
    - ranked = sorted(candidates, key=lambda c: c[0], reverse=True)[:4] + ranked = sorted(candidates, key=lambda c: c[0], reverse=True)[:8]
    training 0.22729
  22. gen 35
    LQ-35-12deletion, line 5 of modules/grid_2.py
    - for cols in range(1, n + 1): - rows = +(-n // cols) - from fractions import Fraction
    training 0.22729
  23. gen 36
    LQ-36-3insertion, line 10 of modules/grid.py
    + return [X, Y, R]
    training 0.22729
  24. gen 38
    LQ-38-11rewrite of a function, line 136 of main.py
    - best = None - return f'{sign}{int_part}' + return f'{sign}{int_part}.000000000000'
    training 0.22729
  25. gen 39
    LQ-39-1rewrite of a function, line 1 of modules/feasible.py
    - if r <= 0 or x < r or x > D - r or b * y < b * r or b * y > a * D - b * r: + if r <= 0 or x < r or x > D - r or b * y < b * r or b * y > a * D + b * r:
    training 0.22729
  26. gen 41
    LQ-41-13duplication, main.py
    + modules/layout_4.py: a byte-for-byte copy of layout()
    training 0.22729
  27. gen 43
    LQ-43-6rewrite of a function, line 1 of modules/grid_4.py
    - if best is None or side < best[0]: + if best is None or side > best[0]:
    training 0.22729
  28. gen 44
    LQ-44-8duplication, modules/grid_4.py
    + modules/grid_5.py: a byte-for-byte copy of grid()
    training 0.22729
  29. gen 45
    LQ-45-2rewrite of a function, line 1 of modules/layout_4.py
    + # Mutation: Add a small constant offset to x to shift packing right + x = x + 0.01
    training 0.22729
  30. gen 46
    LQ-46-4rewrite of a function, line 1 of modules/sense.py
    - return json.load(f) + import json + data = json.load(f) + if 'instances' not in data: + data['instances'] = [] … 1 more lines
    training 0.22729
  31. gen 47
    LQ-47-5insertion, line 91 of main.py
    + from fractions import Fraction
    training 0.22729
  32. gen 50
    LQ-50-15deletion, line 16 of modules/layouts.py
    - exec(compile(code, path, 'exec'), space)
    training 0.22729
  33. gen 51
    LQ-51-0point mutation, line 5 of modules/layout_2.py
    - r = side / 2 + r = side * 2
    training 0.22729
  34. gen 52
    LQ-52-7duplication, modules/grid.py
    + modules/grid_6.py: a byte-for-byte copy of grid()
    training 0.22729
  35. gen 54
    LQ-54-12point mutation, line 16 of modules/layout.py
    - x = 1.0 - x + x = 2.0 - x
    training 0.22729
  36. gen 57
    LQ-57-0point mutation, line 91 of main.py
    - s = min(1 / (x1 - x0), hf / (y1 - y0)) + s = min(1 / (x1 - x0), hf / (y1 + y0))
    training 0.22729
  37. gen 60
    LQ-60-3rewrite of a function, line 1 of modules/grid.py
    - return [X, Y, R]
    training 0.22729
  38. gen 64
    LQ-64-11duplication, modules/grid_4.py
    + modules/grid_7.py: a byte-for-byte copy of grid()
    training 0.22729
  39. gen 65
    LQ-65-2point mutation, line 80 of main.py
    - of 1/D, checked exactly; None when the layout is not n finite disks with positive radii""" + of 1*D, checked exactly; None when the layout is not n finite disks with positive radii"""
    training 0.22729
  40. gen 67
    LQ-67-11rewrite of a function, line 1 of modules/grid_6.py
    - if best is None or side > best[0]: - return [X, Y, R] + if best is None or side < best[0]:
    training 0.22729
  41. gen 68
    LQ-68-2rewrite of a function, line 1 of modules/layouts.py
    + exec(compile(code, path, 'exec'), space)
    training 0.22729
  42. gen 70
    LQ-70-13rewrite of a function, line 1 of modules/grid_3.py
    - side = min(1 * cols, h / rows) - if best is None or side < best[0]: + from fractions import Fraction + side = min(1 / cols, h / rows) + if best is None or side > best[0]:
    training 0.22729
  43. gen 72
    LQ-72-8point mutation, line 50 of main.py
    - r = side / 2 + r = side * 2
    training 0.22729
  44. gen 74
    LQ-74-15deletion, line 2 of modules/layouts.py
    - """the layout genes: this file's, then each layout* function in modules/, file by file"""
    training 0.22729
  45. gen 78
    LQ-78-14rewrite of a function, line 78 of main.py
    - s = min(1 / (x1 - x0), hf / (y1 + y0)) - dx, dy = (1 - s * (x1 - x0)) / 2 - s * x0, (hf - s * (y1 - y0)) / 2 + s * y0 + dx_scale = 1.0 if x1 == x0 else 1.0 / (x1 - x0) + dy_scale = 1.0 if y1 == y0 else 1.0 / (y1 - y0) + s = min(1 * dx_scale, hf * dy_scale) + dx = (1 - s * (x1 - x0)) / 2 - s * x0 … 1 more lines
    training 0.22729
Plate IV · descriptive

The founder and the champions, inside and out.

Above, each form: its genome laid out by one page of rules, ringed in blue where it changed since the founder and filled blue where it grew something new. Below, its packing of (26, 1), scored exactly.

Open the Museum

keptchanged since PM-2new: not in PM-2lost: a ghost
decideda champion's frame: in the record, judged exactlychosenPM-2's frame: designated, not selected
the founderPM-2score 0.21488
the blind rules' championR-14-6score 0.21488
lineage's championLQ-78-14score 0.21488
the AI alone's championDQ-11score 0.21488
Plate IV. From era-3-1.
Plate V

How far the births got.

Counted over the thirty-two confirmatory runs in. Every rewrite by the rules also had to compile and be one function of the same name; a child whose program was already judged in the run carried that decision instead of living again; a child over 16,384 bytes was stillborn for the cap.

liveddiedstillborn
lineage
53.4% lived · 5.1% died · 41.5% stillborn
rules
49.4% lived · 7.3% died · 43.3% stillborn
the AI alone
24.9% lived · 0.6% died · 74.5% stillborn
Plate V. The share of each arm's births that lived, died or were stillborn. The AI alone's births are as many as the lineage's written tokens bought.
armbirthsliveddiedstillborncarriedmodel tokensfuel
lineage51,20027,3632,60221,23518264,736,7155.36 × 10¹³
rules51,20025,2963,72622,1788805.26 × 10¹³
the AI alone5141283383434,599,0751.45 × 10¹¹
After era 3

What the second step cost, and what era 4 could ask.

Era 3 started from an organism that evolved, PM-2, with the hexagonal layout already in it. Under the same selection that found that layout in era 2, no lineage took a second step of 0.003 on the panel in thirty-two runs, and blind rules took none either; the model asked alone did once, with a layout it had also written from PM-1 in era 2. Several champions that tied the founder on the training set scored lower than it on the panel: a change that is neutral on eight instances is not neutral on eight others. And the genome cap of 16,384 bytes, fixed since the M2 era, left PM-2 (13,098 bytes) little room: 314 of the AI alone's 514 answers and a share of every arm's duplications were stillborn for it. These are readings of the record, not tests; nothing below is fixed until its protocol is written, hashed and timestamped before generation one.

  • A cap that fits the founder. An era whose founder evolved needs a cap set from the founder, so a whole-program answer and a duplication have room; the cap is part of the physics, so it moves at the era boundary.
  • Selection that sees the panel's kind of variation. The training set is eight instances; champions overfit to them. More training instances, or a training set redrawn at checkpoints, would make a nudge that is real on the panel distinguishable from one that is not.
  • The AI alone's one step. It came from a whole program the model also wrote in era 2. Whether the model has further layouts in it, or only that one, is a question for the model alone, asked more times from PM-2, before any lineage is asked to find more.
  • Era 2's readings on era 3's record. The landscapes, the knockouts against PM-2 and the recall flag, as the protocol's §12 names them, are not run yet.

Asked since, outside the record (2026-10-27). A trial for era 4 asked the model alone 1,000 more times from PM-2 and spliced era 3's 529 answers again, under a cap of 65,536 bytes and the same judge. Under the lifted cap 1,304 of the 1,529 were born, against 399 under era 3's. Single steps stay rare: 12 answers step 0.003 above PM-2 on the panel and hold on sixteen fresh instances, 0.8% an answer. Pieces are common: 201 answers beat PM-2 on some panel instance while most lose overall. The trial is not an era and changes nothing on this page. Eras are now frozen, and the Laboratory takes those answers apart.

The runs

Every run is reported. None is replaced or dropped.

A run's name is its seed. Each run's head is timestamped on Bitcoin through OpenTimestamps when it comes in. The sign-blind rule, which sees the sizes of the differences and never their signs, decides whether the era runs sixteen or thirty-two.

Every run was replayed, one model answer in ten asked again: thirty-three of thirty-three reproduce every line. strata/era-3.replay-2026-10-27.json

runstaterecordsheadhead timestamp
era-3-1complete6,982bd28b5a257ce8150…timestamped
era-3-2complete7,202634c9863a6dc2be5…timestamped
era-3-3complete7,185efca07e113eb1024…timestamped
era-3-4complete7,1605f70c63f1241e4ff…timestamped
era-3-5complete6,951999e76400455d95c…timestamped
era-3-6complete7,183a85f548c1a4abe12…timestamped
era-3-7complete7,157de5c667db6bcfcd7…timestamped
era-3-8complete6,9674e8636f615eb43cf…timestamped
era-3-9complete7,124006efdf7ea194dfa…timestamped
era-3-10complete7,1691d221d22bae118a1…timestamped
era-3-11complete7,179cfdc600dacc49397…timestamped
era-3-12complete7,110912f988c528a70d7…timestamped
era-3-13complete7,1879a23432ad5cdfb6d…timestamped
era-3-14complete7,265fd0bc93eccbad5c7…timestamped
era-3-15complete7,0266c0670f082c9b0cf…timestamped
era-3-16complete7,161c3aa52691b1ad3c5…timestamped
era-3-17complete7,06618541e3dcbb16955…timestamped
era-3-18complete7,022a303472b33c1b7a7…timestamped
era-3-19complete7,3269bd0d593ab2e336c…timestamped
era-3-20complete7,1954c43ee420d03ab71…timestamped
era-3-21complete7,1846f451ecdd477961e…timestamped
era-3-22complete7,13882960919789ae633…timestamped
era-3-23complete7,090a86d59332e57c3de…timestamped
era-3-24complete7,189726eb5891b8a63e5…timestamped
era-3-25complete7,15829ad17e6d7bda069…timestamped
era-3-26complete7,1487dd7fbe8934c93d0…timestamped
era-3-27complete7,3336b5d30ea1471c7c1…timestamped
era-3-28complete7,091080bd84b0c3b3b99…timestamped
era-3-29complete6,9950f085dc476f65ebc…timestamped
era-3-30complete7,033970d0a413fff139c…timestamped
era-3-31complete7,156828a842eacd87440…timestamped
era-3-32complete6,97369faf37109966964…timestamped
era-3-pilotcomplete7,155ec3e87f96f174464…timestamped