Skip to content
mak777uhPublic

About

Morphogenesis: an open lab bench for emergent morphology in neural cellular automata. Code, protocols, run manifests and reports; the headline counts are generated by script.

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Project Morphogenesis

Обновлено: 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.

1. Research question

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.

2. What is established

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.

3. What is ruled out

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.

4. How the numbers can be trusted

  1. Pre-registration. Every experiment has a plan with criteria committed before the run (reports/*-plan.md), including the branch structure of possible outcomes.
  2. 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".
  3. 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.
  4. Artifact chain. Raw run artifacts → aggregates → manuscript/SUPPLEMENT.md with sha256 of every artifact → CI re-derives manuscript numbers from artifacts. Manifests (lab/runs/*.json) record command, commit, seed and environment for every run.
  5. Typed claims. manuscript/CLAIMS.md records 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.
  6. Formal invariants. Budget conservation, closure and the ignition gate are formalised in Lean (formal/: 17 hypotheses, 31 theorems), each with a Python analogue; skipped in CI is never reported as proven.
  7. 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.

5. Repository map

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

6. Verifying this repository

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 tests

No GPU is required for any of the above; GPU runs are only needed to produce new artifacts.

7. Scope and limits

  • 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 observation and 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.

8. Experiment ledger (machine-checked)

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

9. Current status and how to follow the work

10. Citing and contacting

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.

About

Morphogenesis: an open lab bench for emergent morphology in neural cellular automata. Code, protocols, run manifests and reports; the headline counts are generated by script.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages