Schema migration fails due to bogus allocations
Sadly, the chosen approach to schema migration (read current, if fails try old) does work due to an interaction of the chosen format (Bincode) and how Rust's standard library handles allocation failures (by aborting the process). Bincode putsso little schema information into the data stream that reading mismatching ones will lead to astronomically large collections. Bincode then tries to reserve the memory to hold that collection which fails, but by aborting the process instead of yielding an error so that our code path to read the old version is newer triggered.
We will either have to chose a different format which embeds more schema information (thereby being less efficient) or add at least a version byte (no problem if this rolls over since we are supporting only two versions at any point) to the buffers ourselves.