This repo is the Milestone 0 go/no-go gate for a project that would replace biosim4's feedforward genome-net brains with a small autoregressive transformer over the sensorimotor token stream, and add lifetime learning (Darwinian / Baldwinian / Lamarckian arms).
M0 asks one question and nothing else: is the biosim4 world rich enough that a world model would pay for itself? We answer it empirically — log real sensor streams from an evolved population, then test offline whether history helps predict the next sensor vector beyond persistence. If it doesn't, the world is too simple and the rest of the project shouldn't be built yet.
See SPEC.md for the full design and ISSUES.md for the scoped work items. The gate criterion (SPEC §2) is fixed and must not be tuned.
- Upstream:
davidrmiller/biosim4(C++). - Base port:
AviiNL/biosim4-ts(TypeScript, vendored here with full history; original remote isupstream). - The
0001-sensor-stream-instrumentation.patchstubsImageProcessor.ts(the only native-dependency importer) and adds all-21-sensor logging tosensors.csv.
Issues #1–#4 only. #5–#10 (world-enrichment levers, the Python port, the
Brain interface, the transformer, lifetime learning, the memory task) are
blocked on M0 passing and are deliberately not started here.
M0 verdict: GATE: FAIL, on solid ground after the #8 decode fix. On the
decode-corrected sim (#8/#9), where evolution demonstrably works (survival rises to a
mean 0.465 at gen 119, seeds 1–2 to ~0.6–0.7, 0/5 extinct), the no-barrier gate is
mean ΔR² ≈ 0 over the 11 non-trivial sensors, 1–2/11 wins (threshold > 0.05 and
≥ 6/11). Persistence already predicts the sensors; four gate sensors are dead constants
(no barriers, silenced signal); the rest are near-static. See RESULTS.md.
Issue #10 (world-enrichment levers, re-run on the corrected sim) — still FAIL, but
a trustworthy near-miss (data/lever_results.md). With
working evolution, barriers create real "history beats persistence" structure — the
transformer wins by +0.077 … +0.145 on the three revived barrier sensors — and the
closest cell, bar (a single static-barrier env-flag), reaches mean ΔR² +0.0411 /
8-of-11 wins: it clears the win-count half of the criterion and misses only the +0.05
mean, by ~0.009 (a ~10× jump over #5's broken-sim +0.0041). The gate still fails because
it means those wins over seven structurally-capped or dead sensors. Notably, Miller
mutation lowers the gate on barriers (smoother navigation ⇒ higher barrier-sensor
persistence), and moving barriers don't help (the barrier is static within a lifetime).
The missing ingredient is a within-generation non-persistent dynamic — a SPEC §6
Phase-2 lever (moving-within-life barrier, a used signal channel, or killEnable),
deferred to a follow-up. Do not build M1+ until M0 passes.
Per-issue work is on branches issue-1-bootstrap … issue-4-m0-harness.