Skip to content

Bug: [lexical-y] A local delete overlapping a remote one applied in the same update while composing is stored differently from the editor #9836

Open

Description

@zurfyx

@lexical/y: while the editor is composing (a composition key is set), a local delete and a remote delete that overlap it, applied inside the same update (a provider applying the change there), leave the editor and the document apart.

Repro (3 peers; A has a DOM root): A composes in the first line ($setCompositionKey on its text node), and a TextNode mutation listener ends the composition in an update it queues. Offline, B deletes [8,12) of eight nine ten; A deletes [7,11) of the same line and applies B's change inside that update (origin 'provider'); everyone syncs; A then appends # to the line. A shows eight nien# (only B's delete), while a fresh read of A's document and the peers have eight n (both deletes with stale bounds, which also removed en, and the # is lost). Expected everywhere: eight nen#.

The same history without the composition converges since #9826 (which split items at what writes deleted again while a remote change is unread); the composition path still diverges, on every tree back to before #9777 (so not the hold it can form). Found by a generator run (composition hold, overlapping deletes, listener edits, cursors resolved from transaction observers; Prism and Shiki, gc on and off, both client orders: all the same).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions