That being said I would use CRDTs for any greenfield collaboration project.
Open to correction though, it's been a while since I dug into the differences in these approaches & my memory is imperfect.
Source: I have been etherpad's maintainer for two years.
All the main text editing CRDT algorithms around today solve this no problem. (Yjs, automerge, diamond types, etc).
It’s an ordering problem that comes from some of the simpler ordering algorithms. For Diamond types I’m using a variant of Yjs’s ordering. But even RGA doesn’t have this problem because each character’s insert location is specified by naming the character immediately to the left when that character was typed.
This repository implements a few different list CRDTs using an insertion sort approach, where the algorithm scans for the appropriate location every time an insert happens. This is the scanning function for RGA (automerge’s algorithm):
https://github.com/josephg/reference-crdts/blob/fed747255df9...
And this is an interactive visualisation of how diamond types works (which uses Yjs’s algorithm instead), complete with run-length encoding: https://home.seph.codes/public/diamond-vis/
In practice, many CRDT libraries nowadays (eg. Yjs and Automerge) are using structures that don't come with interleaving issues.
Re. other purpose projects - Yjs/Yrs main target are sequential data structures (text, arrays), but it also has support for maps and xml-like elements. In general you can build most data structures with it. I agree that it would be nice to have some other applications in demos though.
[1] https://docs.yjs.dev/yjs-in-the-wild [2] https://github.com/yjs/yjs-demos