Rolling versioning: 0.MINOR.PATCH, incremented as work lands. A major version bump
(1.0.0, 2.0.0, ...) is a deliberate decision made by a human — never automated.
We work one release at a time. Don't start tasks from a later release until the current one is closed out, unless explicitly reprioritized.
Closed releases are one line each in CHANGELOG.md. This file is
open work only.
| Layer | Fact |
|---|---|
| Implemented | 20 Hz loop: sense → physiology → drives → memory → action → actuate → learn. Learned sensor→actuator reflexes trained by drive reduction. Named-channel body. SoftAP dashboard. Life-state JSON. Station firmware as a separate state machine. |
| Tested | Host-native tests for bit packing, age saturation, rate-limit clamp, LEDC cap, and organism behavior (energy dynamics, contingency bias, reflex learning rule) against a fake body. Not real hardware. |
| Simulated | The unmodified engine in a modelled room with a station (src/sim): learned reflexes lift mean lifespan from 1.26 h to 1.86 h (hand-wired bound 2.46 h). Learns to reach and stay on the dock; not yet to leave when full, and nothing accumulates across lives. |
| Hardware tested | Nothing. No board has run this. |
| Designed / planned | Body declared in a JSON file with per-input ranges, stepper and mic-envelope channel kinds (example build); approach-and-dock on hardware; extra boards. |
| Hypothesis | That drives + decaying memory + learned reflexes + noise will look alive on real hardware, including charging as an attractor. Unverified. |
body.json on LittleFS, editable from the dashboard, applied live without reflashenvelope input for an analog mic (background sampling, RMS)stepper output (velocity mode, shared enable, disabled at rest)Split out of v0.9.0 rather than left blocking it, since everything else in that release was done and independently verifiable, and this one task isn't a firmware task at all — it's "build the physical robot and station, run them together, and watch what happens over repeated sessions."
Blocked, honestly: needs a real robot, a real station, and repeated physical trials — there is no way to verify this from firmware code review or PlatformIO builds, and this environment has no hardware to run it on. Every prior release has carried a "not yet run on real hardware" caveat; this is the first task that can't even be partially exercised without hardware, since it's fundamentally about physical behavior over time, not firmware correctness. Left unchecked rather than claimed done. This is also, not coincidentally, exactly the kind of validation v1.0.0 is gated on below — this milestone stays open until that hardware exists.
synth-behavior.md §15) run at least
once: homeostasis quality, exploration structure, history dependence,
perceived alivenessh_energy)