Ended up going with a solution similar to https://github.com/joebobmiles/zustand-middleware-yjs such that:
- Yjs → Redux in one operation (acceptable since we use memoized selectors (through reselect, through Redux Toolkit))
- Redux → Yjs through patchSharedType that does clever diffing