Okay, thought about it
Most modules probably will go through a development cycle like any other software. So it might be that I want to release the latest stable versions of physics and DNA, etc. And it might be that the latest stable release for physics is from 3 months ago, and the latest stable version of DNA is from two weeks ago. So I think what we should do is maintain major version numbers on all modules, but combine them together for a final version. So for instance Darwinbots 3.22 might contain Sunweaver 1.2 and Physics 0.8, or whatever. You, as an end user, probably won't ever see or care about module versions, but advanced users can hotswap modules (maybe use the new experimental physics module) if they need or want to.
That's my present thinking anyway. That'll hopefully avoid issues with fixing a bug in physics and introducing a bug in DNA in the same commit. But it probably requires me reorganizing the project files and modules a bit more to allow branching and tagging on the module level. Ugh, that might become messy. Any ideas? I'll go google for some info.