Обновлено: 2026-11-04
A research bench for morphogenesis in neural cellular automata (NCA) — and, more recently, for a narrower and harder question: which conditions let a reproducing lineage persist in a digital environment at all.
The repository is not a demo. Every number in the manuscript is traceable to a run artifact, every
claim carries an explicit evidence type, and every experiment is pre-registered before it is run.
Negative results are published on equal terms, and the list of things we have ruled out is kept as
a first-class document (docs/eliminations.md).
Language note. The scientific record (manuscript, reports, world design, articles) is written in Russian. This README is the English entry point for reviewers and collaborators; the machine-checked experiment ledger below is bilingual by design.
Где мы сейчас: одна страница со всем, что установлено, отменено и осталось непонятным — docs/current-model.md.
We ask what a minimal digital world can support. The concrete object is a 32×32 pond with cells that carry energy, age, damage and a membrane; resources regenerate locally; a frozen NCA rule decides growth, division and death. Nothing is trained during a run.
The question we are working on now is not "can we produce life-like images". It is:
Under which environmental and organisational conditions does a lineage persist, coexist, and become subject to selection?
That question is decomposed into a ladder of conditions — information, heritable variability, environmental inheritance, coexistence, selection — each with its own minimal viable demonstration and stop rule.
Short statements, each backed by artifacts listed in the ledger and in manuscript/CLAIMS.md.
The learned rule is not conservative. Started on an empty field, the frozen rule lights up all
1024 cells on step 1 (1023 grown cells), independent of initial resource and income: the live channel
has a positive bias. This is machine-checked as an invariant together with an ignition gate option,
and the gate is proven to keep an empty field empty at every step (Lean, formal/Ignition.lean,
4 theorems; Python analogue in the test suite).
Founding is not the barrier. In the gated world a colony is founded from a single cell in 50/50 runs (N = 1…20 cells × 10 seeds): median final population 586 (N=1) to 687 (N=20). Founder size affects colony size (~17%), not the fact of founding.
Invasion does not work. A rare lineage injected into a resident colony dies in 0/10 runs in
all placement arms (into the resident / into a gap), with either merge rule, and at dose 20. Letting
minority types survive merging (merge=keep) gives 2/10, and the survivors hold only
0.18–0.30% of the population — a trace, not coexistence.
Four candidate mechanisms were eliminated by measurement, not by argument: founder size (dose 20 → 0/10; one patch reached 36% of the population and still died); merge overwriting (2/10 without it); lineage bookkeeping (a corrected logger changed nothing: 2 lineages with ≥2 cells vs 18–23 under neutral drift); resource shortage at the injection point (14/15 runs land on a depleted spot, and the single run that landed on a full one, 0.9811, also died).
Heritable variability works; selection is not yet measurable. Heritable tag novelty appears from mutation rate m ≥ 0.05 (10/10 seeds; novelty 14.7 per run; population unaffected — variation is free). Environmental memory survives 1.3–2.4 generations, satisfying the necessary condition of environmental inheritance; its sufficiency (does the next cohort benefit?) is not established — two versions of that test were structurally insensitive and are reported as such. Selection itself is blocked by architecture: reproduction in this world is colony-level budding, so a cell-level tag is not a unit of reproduction and has no path to offspring.
The field line has a map, not a number (Gray–Scott medium, one box, one grid; details and caveats in
library/memory-in-this-medium-2026-11-02.md). The medium
has one preferred scale (~12 cells) and a symmetry coordinate the environment can turn but which
carries no memory; the size memory is U-shaped in inflow with its minimum at the multistable band's edge
(1.07 divisions against 2.08 on the shoulder above it) — but every half-life here is defined on an excursion set, and moving
the cut from 0.20 to 0.15 or 0.25 moves the levels by a factor of three and reverses the order between inflows, so the numbers
are quoted with their cut. Above F = 0.049 the pattern stops dividing in
practice, so inheritance there is undefined rather than weak. Resemblance and retention are established
(the parent predicts the daughter at 0.39–0.55, the nearest neighbour at 0.02–0.25); consequence is
not — two attempts failed on their instruments, and the words selection and inheritance therefore
stay out of the text.
The registry of eliminated hypotheses is kept with artifact references and "what would revive it":
docs/eliminations.md. Examples: the ring as an attractor (E02), asynchronous
updates, perceptual noise, five rule-learning schemes, smooth environmental drift, the dose-response
test at random placement, the "trivial radial bubble" reading of struct_2, plus the four mechanisms
above.
- Pre-registration. Every experiment has a plan with criteria committed before the run
(
reports/*-plan.md), including the branch structure of possible outcomes. - Sensitivity arithmetic before launch. Any A/B experiment must show the arithmetic that creates
the difference (for energy experiments: break-even
own* = spent/(4·b)and where the field sits relative to it). Two early series were insensitive by construction; both are reported as "the test did not reach the effect", never as "there is no effect". - Seed anchors. Each code change is validated by re-running a pinned reference run and comparing bit-for-bit. A diagnostic probe that consumed the RNG once shifted the world; the anchor caught it within 90 seconds.
- Artifact chain. Raw run artifacts → aggregates →
manuscript/SUPPLEMENT.mdwithsha256of every artifact → CI re-derives manuscript numbers from artifacts. Manifests (lab/runs/*.json) record command, commit, seed and environment for every run. - Typed claims.
manuscript/CLAIMS.mdrecords for each claim the evidence kind (proof/test/statistics/observation/judgment), its assumptions, what remains to be established, and the strongest wording the manuscript may use. A linter enforces the schema and that cited artifacts exist. - Formal invariants. Budget conservation, closure and the ignition gate are formalised in Lean
(
formal/: 17 hypotheses, 31 theorems), each with a Python analogue;skippedin CI is never reported asproven. - CI. Contract validation, README/manuscript consistency, claim lint, artifact hashes, section references and a portability canary run on every push; a nightly job re-derives aggregates.
| path | what lives there |
|---|---|
morphogenesis/ |
experiment code, tests, per-run artifacts (experiments/), canonical journal |
manuscript/ |
the accumulating paper: paper.md, CLAIMS.md, CHANGELOG.md, SUPPLEMENT.md |
docs/ |
world design (world-design.md §10 pond line), decision log, eliminations, formal method |
reports/ |
pre-registrations, experiment cards, figures |
articles/ |
one self-contained story per closed result (in Russian) |
library/ |
literature notes with DOIs, methods and "code/data" blocks |
lab/ |
machine contour: state, registry, queue, locks, run manifests, STATUS.md |
formal/ |
Lean hypotheses (F-ID) with "what would refute it" in each file header |
scripts/ |
lab.py (contract), claims_lint.py, verify.py, aggregators, artifact hashing |
python scripts/lab.py validate # contract: registry ↔ README ledger ↔ manuscript map
python scripts/claims_lint.py # evidence type, assumptions, artifact existence
make verify # everything above + section refs + Lean without sorry/admit
cd morphogenesis && python -m pytest -q tests # 612 testsNo GPU is required for any of the above; GPU runs are only needed to produce new artifacts.
- No claim about life, consciousness or intelligence. The allowed formulation is a class of observed behaviour and its boundaries. This is a contract rule, not modesty.
- Small n. Most experiments use 5–10 seeds per arm; results are reported as counts with Wilson
intervals and ranges, not as p-values. A single run is labelled
observationand cannot carry a strong wording. - Frozen rule. The agent does not learn during a run; adaptation claims are limited to environment-facing mechanisms.
- Modified worlds are named. The ignition-gate series is a different modification of the world and is never compared numerically with the ungated series.
Ids and statuses are generated from lab/registry.json by python scripts/make_ledger.py --sync
(checked by --check and by python scripts/lab.py validate); do not edit ids or statuses by hand.
The descriptive columns — period, question, outcome, evidence — stay hand-written.
| id | status | period | question | outcome | evidence |
|---|---|---|---|---|---|
| E01_criticality | closed | 18.10 | criticality and the primordial soup | historical series, outside the current program | results |
| E02_pattern | closed | 20.10 | the ring as a target | negative: the ring is not an attractor; layer-1 gate 0/5; reaching and holding are different regimes | report · article |
| WP4_R9 | closed | 20.10 | 5 R-9 seeds, reach/hold probe | sweep closed, WP4 gate not passed; Wilcoxon on 5 pairs gives p ≥ 0.0625 | status |
| E02b_morphospace | closed | 20–21.10 | census of the morphospace | rich map: 832 rollouts, 573/704 death/uniformity; struct_2 learned candidate, struct_1 architectural confound |
results · article |
| E02c_replication | closed | 21.10 | replication of R-9 on seeds 142/242/342 | negative: 0/3 new seeds give struct_2; seed142 → struct_1, 242/342 → uniform_dark; control seed42 → struct_2 64/64 |
results · article |
| E02c_seed42_repro | closed | 21.10 | retrain seed 42 with frozen code | reproduced: weights bitwise equal; census struct_2 64/64 (stability 58/64) — class reproducible from the seed, not from the recipe |
results · article |
| E02b_closures | closed | 21.10 | channels, body, asymmetry (inference only) | mixed: orientation returns 12/12; asymmetry −0.225 at matched mass; hidden-channel redundancy refuted | results · article |
| E02c_seed_decomposition | closed | 22.10 | seed = init vs data order | not separable: init42/data101 → uniform_dark 64/64; init101/data42 → struct_1 64/64; struct_2 zero in both |
results · article |
| E02b_alive_open | closed | 22.10 | open liveness gate | refuted: body returns 12/12 (IoU 0.821 vs 0.864); carriers are mutual; asymmetry grows with damage (ρ = −0.71) | results · article |
| E02b_carriers2 | closed | 22.10 | carrier of form and asymmetry dose-response | mixed: without the visible channel the body still returns 12/12 (IoU 0.809); sign −1 12/12 but median −0.354 vs predicted ≤ −0.60 | results · article |
| E02b_clusters3 | closed | 22.10 | clustering of hidden channels | mixed: any half of the hidden channels carries the body (H-CH-8 confirmed) | results · article |
| E02c_colab_repro | closed | 22.10 | reproduction on a different stack (T4) | not reproduced: T4 gives uniform_dark 64/64 instead of struct_2 |
results · article |
| E02c_seed_grid | closed | 22.10 | does initialisation 42 hold structure | refuted in favour of the class: initialisation 42 holds the structure across data orders | results · article |
| E02b_lesion_minimal | closed | 22.10 | minimal lesion | mixed: body returns from a single channel plus noise (H-CH-9) | results · article |
| E02b_lesion_necessity | closed | 22.10 | necessity of the carrier set | confirmed: the informative_only set {2,3,4,10–14} is sufficient |
results · article |
| E02b_lesion_core | closed | 22.10 | core within the carrier set | refuted: removing any single channel of the set changes nothing — full mutual replaceability | results · article |
| E02b_asymmetry_variance | closed | 22.10 | variance of asymmetry onset | inconclusive: the body threshold is reached on the first snapshot | results |
| E02b_asymmetry_variance_retry | closed | 22.10 | retry with plateau time | refuted: ρ(d, t_plateau) = +0.434 against threshold 0.5 | results · article |
| E02b_asymmetry_sides | closed | 22.10 | left vs right half | confirmed: the right half reproduces (IoU 0.613–0.745) | results · article |
| E02b_left_outcomes | closed | 22.10 | left half outcomes | refuted: the left side is a continuum, not a class | results · article |
| E02b_carrier_pairs | closed | 22.10 | carrier pairs | refuted: 11 of 28 pairs do not give a body | results · article |
| E02b_carrier_ch13 | closed | 22.10 | single channel {3} | confirmed: {3} alone gives a body 12/12 (IoU 0.839) | results · article |
| E02b_carrier_ch15 | closed | 22.10 | six channels without {3,14} | refuted: they still give a body 12/12 | results · article |
| E03_injury, E04_topology, E05_aging, E06_narration, E07_control_ablation | not started | — | historical entry points | outside the current program | registry |
| E08_precision_horizon | running | 23.10– | class as a phase of the trajectory | TF32 gives uniform_dark → struct_2 along the trajectory; the horizon must be stated with any class claim |
research map · protocol |
| E09_pond | running | 23.10– | conditions for a lineage in the pond world | a lineage becomes a unit of selection only with cell-level budding (I_obs 0.5614 vs null 0.0621, 10/10 seeds); pair-level budding (same tag and any tag) behaves like the colony world — one lineage, not evaluable; transfer beyond bodies (R1) keeps only "one against many" (10/10, p = 0.001), not monotonicity (6/10) or magnitude (1.765 vs 12–50); the price of a trait is a direction, not a magnitude: sign holds (17/20, p = 0.0013) but the Fisher-mean criterion fails (centre −0.453, 95 % CI [−0.635, −0.223]) and adding seeds weakened the effect (new −0.336 vs old −0.604); the environment is not inherited: with exact neighbour control the death-site residual is −0.0093 (5/10, p = 0.62) and the occupancy share is set by the number of live 4-neighbours (0.744 → 0.881) |
world design, eliminations, registry |
| L1_field | closed | 29.10–31.10 | does organization arise without stipulated objects, and what is it worth | the counter measures fraying, not bodies: heterogeneity roughly doubles the component count yet durable structures are equal (1.3 vs 1.2); both regimes are one percolation cluster (at threshold 0.30 both shatter into ~30 pieces); form does not transfer (8–11 % keep their class, 50–67 % die) and no measured property predicts survival; the earlier nulls came from a world uninhabitable by a constant (income ceiling 0.008 against cost 0.03, break-even b = 0.0075) — at b = 0.02 ten of ten runs survive and a self-model evolves, confirmed by an intervention: the predictive dependence collapses from +0.0362 (10/10) to 0.0000 (0/8) when the organism's action on the resource is severed; memory of a leading signal alone does not produce anticipation; five designs were found invalid before any claim, and that is recorded too; size heredity in the neutral world is real, pair-specific and partial — five truly independent worlds (the seeds turned out to be one world copied five times) give 0.42–0.57, a nearest-distance surrogate gives −0.003, and about half the parent's deviation is erased within one division; the manuscript's own numbers were audited against the artifacts on 03.11 and three of them moved: on dense fields the ladder is steeper (0.548 against 0.335 for the basin, −0.370 at the maze inflow) and the parent-beats-neighbour gap is definition-bound but not zero (0.089/0.064 under the basin, so the strict branch failed); the threshold moves the level and not the gap; and the third diffusing field closes the scale-channel route (q' 7–9 across an 8× diffusion contrast, gamma_cell 0.30); the line's own heredity is now measured rather than asserted: the daughter-on-parent slope is 0.9837 [0.9679, 1.0002] and 0.9931 [0.9756, 1.0103], the residual equals the mutation rule's sigma to one per cent (0.1487 / 0.1495 against 0.15), and with --mutation 0 the trait has no variance at all, so the coefficient is the copying rule's fidelity and the between-lineage H² counts surviving lineages rather than measuring a heritability of a trait (; a shape measured from the field itself (elongation and width from second moments) is inherited at about half, and the habitat chooses which aspect: log elongation 0.6074 [0.5399, 0.6785] in the lattice against log width 0.6238 [0.5846, 0.6672] in the connected mass, with s 0.9959 and area 0.4514 as controls in the same 4 111 pairs (so X155's 'only heritable character' holds only for the trait the rule writes); and the fusion boundary is two quantities, not one, both now measured: the design gap at which fusion stops being the rule is 10 ± 1 cells and does not scale with the body (ten fresh seeds per unmeasured cell: 7/15 and 2/15 at gaps 10 and 11 for radius 3, 2/10 and 0/15 for 4.5, 3/10 and 0/10 at 9 and 10 for 6 — the larger bodies cross one cell earlier, the opposite of what the withdrawn 2r + 9 predicted), while the surface gap at contact is an upper bound of 1.9 cells, not a threshold: the ten-step log opens a 1.3-cell window in which the bodies grow, so the threshold lies between 0.7 and 1.9 cells and stays above two cells in only 21 % of 119 fusing runs; and the ladder of what a division transmits has a third rung: the local scale (the surface gap to a body's nearest neighbour) is inherited at 0.203 [0.167, 0.238] against a shuffled-parent null of [−0.020, 0.030], unchanged when the mother's radius is partialled out (0.2025), so the ordering on one reconstruction is shape 0.59 > area 0.39 > spacing 0.20 — and in the connected mass the channel is not weak but undefined, since the gap's median is −3.1 cells (X162, 04.11; and a one-step log settles the resolution question in favour of the band: the residual window falls from 1.3 to 0.06 cells while the spread between arms stays 2.07, the contact gap is 1.27 / 3.14 / 1.07 / 3.01 at radii 3 / 4.5 / 5.2 / 6 (so "the same at every size" is withdrawn), and the later the fusion the wider the gap (X166, 04.11)verdict: heredity is the rule) |
article 028 v1.6 (en), claims, line plan, audit, X155, X156, X157, X158, X159, X162, X166; and the slope RISES with the order of the neighbour (0.205, 0.236, 0.408, 0.568), so the order-1 gap is the cleanest positional quantity and the weakest inherited one — the medium adds no length of its own, and the decay-length experiment is cancelled by its own result (X162b); and the crossing does not move with the pair either — an asymmetric pair (radius 3 against 6) fuses 5/5 at gaps 4, 6 and 8 and 2/5 at 10, inside the same band of ten (X164); and the length applies per contact — a row of three coalesces at the share independent pairwise events predict (5/5 at gap 8, 1/5 at gap 10 against 0.47 squared = 22 %, 0/5 at gap 12) (X165); and nothing discrete is carried either — division order's parent-daughter slope is -0.16 with a per-run median of zero and lifespan 0.10, both inside their nulls, against peak area's 0.55 (X161); and the crossing is insensitive to the source — at inflow rates 13 % below and 20 % above the measured one a pair still separates between ten and eleven cells (X168c, after X168 was withdrawn for a units error); and the field probe that would settle whether a merge keeps a seam failed its own control (a body's cross-section is a ring, so every profile has a central dip), though it did show a dumbbell — a 4-5 cell bridge between 10-14 cell lobes — that dissolves with the field inside 300 steps (X169); with ten seeds per rate the gap-11 shares are 0/10, 1/10 and 3/10 and no contrast clears 30 points at p < 0.05, so the insensitivity to the source is measured rather than power-limited (X168d) |
| E10_formal | running | 24.10– | formal invariants of the world | 17 hypotheses / 31 theorems in Lean without sorry: ignition gate, budget and closure invariants |
formal method · inventory |
- Live status of the laboratory (what runs, what waits for a decision, what we deliberately do not
do):
lab/STATUS.md; the one page a person needs to read islab/ATTENTION.md, generated byscripts/attention.py, and the written rules it is built on arelab/autonomy-rules.json. - Decisions with reasons, including rejected proposals:
docs/decision-log.md. - What has been eliminated and what would revive it:
docs/eliminations.md.
Preprint. A standalone preprint summarising this stage is archived at 10.5281/zenodo.23733719 (v1.2; v1.1: 10.5281/zenodo.23694918; v1.0: 10.5281/zenodo.23669738) (concept DOI 10.5281/zenodo.23669737; 14 pages, four figures, LaTeX source included; not peer reviewed).
A second, separate paper covers the line of field (a medium with no stipulated objects): 10.5281/zenodo.23844978 (v1.6, English, CC0, Russian original attached; concept DOI 10.5281/zenodo.23839897).
Release v1.2 (preparing): measured price −0.374 with CI [−0.396, −0.266], the price belongs to the
investment channel, two coexistence levers that amplify each other, four recorded prediction failures.
Publication instructions: docs/release-v1.2.md.
Deposits. The code, reports and journal are archived with a DOI
(10.5281/zenodo.23733477; concept DOI
10.5281/zenodo.23571609). The canonical weights are
a separate dataset record (10.5281/zenodo.23654174, 12 checkpoints + service files, 6.03 GB). The per-run artifacts behind preprint v1.2 are a dataset record of their own (10.5281/zenodo.23734077, 130 files, 10.1 MB) — see docs/deposit.md
for what is inside each record and how to verify the checksums. Citation metadata is in
CITATION.cff.
The manuscript is a living document (manuscript/paper.md, versioned in manuscript/CHANGELOG.md);
it is not submitted anywhere, and no external publication is made without the owner's explicit
approval. For any number, cite the artifact path from the ledger or from manuscript/SUPPLEMENT.md —
every figure there carries a sha256 of its source file.