my current hypothesis to explain #1059:
- we have a timeline, with some notes
- a new note arrives on the websocket
- we replace the items in the pagination inside the timeline
- vue starts re-rendering the notes, using the `:key` values to know
which ones to leave there and which ones to move / add / delete
- since DynamicNote is `computed`, every time vue needs to instantiate
it, it does an `await`
- so if another note is waiting in the websocket buffer, it gets
processed *while vue is rendering*
- processing the new note cause the `items` map (and the array
computed from it) to be replaced
- at this point vue may well get a new iterator from the start of the
new list of items, after it had already decided that the first few
notes did not need to be changed
- which manifests as new notes appearing in the middle of the
timeline!
- and after enough new notes have arrived, all the old notes are out
of the items map, so their elements have all been deleted, and
"normality" is restored
this makes sense in my head, let's see if this change actually fixes
the problem