Great new work from @inkandswitch: inkandswitch.com/cambria.html
Local-first software is a great aspiration, but iterating on decentralized data structures is indeed a nightmare I've been living with as I build @withorbit. Excited for these ideas on more predictable data evolution.
I've maybe made the problem needlessly hard on myself by using content-addressable identifiers for CRDT log structures (including their parent pointers). Did that so I could serialize to IPFS or similar, but it means I have to rebase the whole tree whenever the structure changes.
Ah yes, that was how we wound up using hypercores, which have stable names over time. Let's have a talk about this -- we've done quite a bit of work and may be able to help you avoid falling into some of the traps we did.