Skip to content

[lexical-mark][lexical-website] Documentation Update: Bring the collaboration docs up to date with merged @lexical/y - #9536

Merged
zurfyx merged 6 commits into
mainfrom
zurfyx/doc29-collab-docs
Oct 30, 2026
Merged

zurfyx merged 6 commits into
mainfrom
zurfyx/doc29-collab-docs

Conversation

@zurfyx

@zurfyx zurfyx commented Oct 29, 2026 •

Copy link
Copy Markdown
Member

Description

An audit of the collaboration docs against main after the @lexical/y stack merged. Every page was already close; what was stale, missing or did not compile:

Merge order

These pages describe main once the following open pull requests have landed, so merge this one after them:

Changeset

.changeset/mark-readme.md ([docs], the @lexical/mark README ships in the package). The website changes need none.

Test plan

Every TypeScript snippet on the collaboration pages, extensions/block-ids.md and the two READMEs was extracted and type-checked against the workspace sources (tsc, the website's tsconfig.json, with declarations for the names a snippet leaves to the reader such as config or stored). The Yjs 14 store example was also run against @y/y 14.0.0-rc.29 across two documents.

Before

y_md_L284.ts(24,1): error TS2304: Cannot find name 'defineExtension'.
comments_md_L283.ts(5,22): error TS2339: Property 'getMap' does not exist on type 'Doc'.   (with a @y/y document)

After

$ tsc -p .snip/tsconfig.json --noEmit   # only fragments' reader-supplied names remain
$ node y14map.mjs
true hi
true
undefined {"attrs":{"c1":{"attrs":{"body":"hi"}}}}
$ pnpm -C packages/lexical-website run build   # onBrokenAnchors: 'throw'
[SUCCESS] Generated static files in "build".

…boration docs up to date with merged @lexical/y

## Description

An audit of the collaboration docs against `main` after the `@lexical/y` stack merged. Every page was already close; what was stale, missing or did not compile:

- `y.md`: a Limits subsection, **Open issues**, lists the open `@lexical/y` bugs (#9511 to #9526) with what each one does, so readers know which behaviors are bugs rather than design. The warnings table now lists every `NESTED_FALLBACK_WARNING` reason (it named 2 of 10). The read-only banner example imports `defineExtension` and names its extension, so it compiles.
- `y-server.md`: the `'read-only'` `YHeadlessError` cases now include a newer `schemaVersion` and content without a layout record, as the error's own type says.
- `comments.md`: the store example (`Y.Map` from `yjs`) only works on Yjs 13; a Yjs 14 version for `@lexical/y` (a shared type's attributes, `getAttr`/`setAttr`/`deleteAttr`) follows it. The limitations list the two open `MarkStateExtension` bugs (#9519, #9491).
- `faq.md`: "Initializing EditorState from Yjs Document" points `@lexical/y` users at `readYState`.
- `extensions/block-ids.md`: `repairTransforms` says that `YCollabExtension` sets it to `false` and the binding goes read only with `true`.
- `@lexical/mark` README: describes `MarkStateExtension` (`isMarkIDShown`, `registerMarkIDsListener`), mark flavors (`defineMarkExtension`) and `MarkNode`, and links the comments guide.

## Changeset

`.changeset/mark-readme.md` (`[docs]`, the `@lexical/mark` README ships in the package). The website changes need none.

## Test plan

Every TypeScript snippet on the collaboration pages, `extensions/block-ids.md` and the two READMEs was extracted and type-checked against the workspace sources (`tsc`, the website's `tsconfig.json`, with declarations for the names a snippet leaves to the reader such as `config` or `stored`). The Yjs 14 store example was also run against `@y/y` 14.0.0-rc.29 across two documents.

### Before

```
y_md_L284.ts(24,1): error TS2304: Cannot find name 'defineExtension'.
comments_md_L283.ts(5,22): error TS2339: Property 'getMap' does not exist on type 'Doc'.   (with a @y/y document)
```

### After

```
$ tsc -p .snip/tsconfig.json --noEmit   # only fragments' reader-supplied names remain
$ node y14map.mjs
true hi
true
undefined {"attrs":{"c1":{"attrs":{"body":"hi"}}}}
$ pnpm -C packages/lexical-website run build   # onBrokenAnchors: 'throw'
[SUCCESS] Generated static files in "build".
```
@vercel

vercel Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
lexical Ready Ready Preview Oct 30, 2026 9:23pm UTC
lexical-playground Ready Ready Preview Oct 30, 2026 9:23pm UTC

Request Review

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Oct 29, 2026
@pkg-pr-new

pkg-pr-new Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
lexical

npm i https://pkg.pr.new/lexical@9536

@lexical/a11y

npm i https://pkg.pr.new/@lexical/a11y@9536

@lexical/clipboard

npm i https://pkg.pr.new/@lexical/clipboard@9536

@lexical/code

npm i https://pkg.pr.new/@lexical/code@9536

@lexical/code-core

npm i https://pkg.pr.new/@lexical/code-core@9536

@lexical/code-prism

npm i https://pkg.pr.new/@lexical/code-prism@9536

@lexical/code-shiki

npm i https://pkg.pr.new/@lexical/code-shiki@9536

@lexical/compiler

npm i https://pkg.pr.new/@lexical/compiler@9536

@lexical/devtools-core

npm i https://pkg.pr.new/@lexical/devtools-core@9536

@lexical/dragon

npm i https://pkg.pr.new/@lexical/dragon@9536

@lexical/eslint-plugin

npm i https://pkg.pr.new/@lexical/eslint-plugin@9536

@lexical/extension

npm i https://pkg.pr.new/@lexical/extension@9536

@lexical/fast-check

npm i https://pkg.pr.new/@lexical/fast-check@9536

@lexical/file

npm i https://pkg.pr.new/@lexical/file@9536

@lexical/hashtag

npm i https://pkg.pr.new/@lexical/hashtag@9536

@lexical/headless

npm i https://pkg.pr.new/@lexical/headless@9536

@lexical/history

npm i https://pkg.pr.new/@lexical/history@9536

@lexical/html

npm i https://pkg.pr.new/@lexical/html@9536

@lexical/internal

npm i https://pkg.pr.new/@lexical/internal@9536

@lexical/link

npm i https://pkg.pr.new/@lexical/link@9536

@lexical/list

npm i https://pkg.pr.new/@lexical/list@9536

@lexical/mark

npm i https://pkg.pr.new/@lexical/mark@9536

@lexical/markdown

npm i https://pkg.pr.new/@lexical/markdown@9536

@lexical/mdast

npm i https://pkg.pr.new/@lexical/mdast@9536

@lexical/offset

npm i https://pkg.pr.new/@lexical/offset@9536

@lexical/overflow

npm i https://pkg.pr.new/@lexical/overflow@9536

@lexical/plain-text

npm i https://pkg.pr.new/@lexical/plain-text@9536

@lexical/react

npm i https://pkg.pr.new/@lexical/react@9536

@lexical/rich-text

npm i https://pkg.pr.new/@lexical/rich-text@9536

@lexical/selection

npm i https://pkg.pr.new/@lexical/selection@9536

@lexical/table

npm i https://pkg.pr.new/@lexical/table@9536

@lexical/tailwind

npm i https://pkg.pr.new/@lexical/tailwind@9536

@lexical/text

npm i https://pkg.pr.new/@lexical/text@9536

@lexical/utils

npm i https://pkg.pr.new/@lexical/utils@9536

@lexical/y

npm i https://pkg.pr.new/@lexical/y@9536

@lexical/yjs

npm i https://pkg.pr.new/@lexical/yjs@9536

commit: 665a472

…es to concurrent typing, drop fixed open issues, leave faq.md to #9547

## Description

Follow-up to the collaboration docs audit, from the integration review of the open `@lexical/y` PRs:

- `y.md`, "Edits made by code": the first bullet said a replaced block loses what collaborators type in it at the same time. Tests show that in a line (a paragraph, also one inside a table cell) the typing survives, before the new text and with its own formatting; formatting of the replaced characters does not carry over; only a block stored as a node of its own (a table, a container) loses what was typed in it. The bullet now says so, in the same sentence as the server and block id pages.
- `y.md`, "Open issues": drops the lines for the issues that other open PRs fix (#9513, #9515, #9516 and #9526, #9517, #9520, and #9525 from the markerless-line line, which keeps #9524). This PR lands after them.
- `comments.md`: the open issues line keeps only #9491. Another open PR fixes #9519 where the composition starts in an update of its own, as a browser's `compositionstart` does; the limitations now say so, and that a composition code starts and writes in one update is still compared as text, which can leave letters added at the end of a mark without its ids.
- `faq.md`: this PR no longer changes it. #9547 rewrites the same section with a working `readYState` example.

## Changeset

None: website only.

## Test plan

### Before

```
$ grep -n "is lost (see \[Limits\]" packages/lexical-website/docs/collaboration/y.md
660:  is lost (see [Limits](#limits)). Lexical records the text edits of an
```

### After

```
$ npx prettier --check packages/lexical-website/docs/collaboration/*.md
All matched files use Prettier code style!
$ git diff --stat 0823b74 -- packages/lexical-website/docs/collaboration/faq.md
(no changes)
$ pnpm -C packages/lexical-website run build   # onBrokenAnchors: 'throw'
[SUCCESS] Generated static files in "build".
```
…highlighting opens unhighlighted, and list two open issues

## Description

The `@lexical/y` Limits named the table plugin as a transform whose pass over an open document writes nothing. A code highlighter behaves the same: code stored without highlighting (a headless seed or `editYState` whose extensions lack `CodePrismExtension` or `CodeShikiExtension`) shows unhighlighted on every client, also on clients that run the highlighter, until a local edit in that code block highlights the whole block and writes it. The "Shapes ... shown as stored" bullet now says so, why (a transform never rewrites what a client read), and the workaround (seed and edit with the clients' extensions).

The "Open issues" list also gains #9560 and #9564, two open `@lexical/y` bugs it did not name.

## Test plan

### Before

A document seeded with `seedYState` and `CodeExtension` only, bound to an editor with `CodePrismExtension` (either extension order), then one character typed at the end of the code block, compared with a fresh `readYState`:

```
seeded without the highlighter
  opened: code(text:"const x = 1;")
  edited: code(code-highlight:"const",code-highlight:" x ",code-highlight:"=",code-highlight:" ",code-highlight:"1",code-highlight:";",code-highlight:" ")
  fresh:  code(code-highlight:"const",code-highlight:" x ",code-highlight:"=",code-highlight:" ",code-highlight:"1",code-highlight:";",code-highlight:" ")
seeded with the highlighter
  opened: code(code-highlight:"const",code-highlight:" x ",code-highlight:"=",code-highlight:" ",code-highlight:"1",code-highlight:";")
```

An editor without collaboration given the same content as JSON shows the highlighted tokens at once.

### After

Documentation only.

```
$ prettier --check packages/lexical-website/docs/collaboration/y.md
Checking formatting...
All matched files use Prettier code style!
```
…t conversion issue among the open @lexical/y issues

## Description

Every `@lexical/y` editor runs `NodeStructureExtension`. In such an editor, turning a paragraph inside a container that is itself inside a container (both not shadow roots) into a list removes the outer container and makes no list (#9570). The "Open issues" list now names it.

## Test plan

### Before

The repro on main (a box inside a box holding a paragraph, `$insertList('bullet')` at the paragraph, two bound peers and a fresh reader):

```
A test_box[i](paragraph("abc")) | B test_box[i](paragraph("abc")) | fresh test_box[i](paragraph("abc"))
```

### After

Documentation only.

```
$ prettier --check packages/lexical-website/docs/collaboration/y.md
Checking formatting...
All matched files use Prettier code style!
```

@meta-code-review meta-code-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this pass over the @lexical/y and comments docs. I checked each claim against this head, and nearly all of them hold. Three places, though, describe main as it will be once other open PRs merge, so the order in which things land matters.

1. comments.md lines 401-407: IME limitation. The new text says the replaced selection is known when an insertion "starts an input method composition in an update of its own, as the browser's compositionstart does". On this head that isn't the case yet. $applyInsertedTextMarkIDs uses the replaced selection only when the text in its place is in new TextNodes (MarkStateExtension.ts:2007-2012), and an input method writes into the existing node. Retyping the commented cd of abcd as cde:

How cde replaces cd Comment id on e
CONTROLLED_TEXT_INSERTION_COMMAND c1
Composition started and written in one update none
Composition started in an update of its own (as compositionstart) none

This is #9519, which is still open; #9540 adds the behaviour the new text describes. This PR also removes the #9519 line, so merging it before #9540 would leave the limits promising the opposite of what happens, with the bug listed nowhere. Can this wait for #9540, or keep the previous wording and the #9519 line until #9540 lands?

2. y.md lines 1043-1074: Open issues. #9513, #9515, #9516, #9517, #9520, #9525 and #9526 are still open; their fixes are in #9557, #9559, #9535, #9549, #9539 and #9544. The description says this PR lands after "those fixes". Naming those PRs there would make the merge order explicit.

3. y.md lines 657-663 against y-server.md lines 316-319. The new sentence matches this head: a collaborator's concurrent typing in a replaced paragraph survives before the new text with its own formatting, and in a replaced table it is lost. But the "Edit text in place" bullet in y-server.md still says that the typing "is lost". #9545 updates that bullet. Either carry the sentence over here, or merge the two PRs together.

Nit, y-server.md lines 154-161: the 'read-only' list could also name a node type stored differently from how its class declares it. STORAGE_MISMATCH_WARNING makes the binding read only too.

Also checked on this head:

  • The ten NESTED_FALLBACK_WARNING reasons match Warnings.ts.
  • The banner snippet now compiles.
  • The Yjs 14 thread-store snippet type-checks and round-trips between two documents.
  • The code-highlighting limit reproduces.
  • YCollabExtension does set repairTransforms: false.
  • The [docs] changeset passes check-changesets.
  • Every API the @lexical/mark README names is exported.

Comment on lines +404 to +407
or starts an input method composition in an update of its own, as the
browser's `compositionstart` does. A composition that code starts and
writes in one update is compared as text instead, so letters it adds at
the end of a mark can be left without the mark's ids. Code that replaces a

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On this head, a composition started in its own update still leaves the added letters without the replaced selection's ids. $applyInsertedTextMarkIDs uses the replaced selection only when the text is in new TextNodes (MarkStateExtension.ts:2007-2012), and an input method writes into the existing node. So retyping the commented cd of abcd as cde leaves e without c1 (#9519). This sentence describes #9540, which is still open. Could this merge after #9540, or keep the previous wording and the #9519 line until it lands?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed: this paragraph describes the behavior #9540 adds. The description now has a "Merge order" section that says this PR merges after #9540, so the page never promises it before it holds.

Comment on lines +1043 to +1046
### Open issues

These are bugs, not intended behavior; each issue has a test that
reproduces it:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#9513, #9515, #9516, #9517, #9520, #9525 and #9526 are still open; their fixes are in #9557, #9559, #9535, #9549, #9539 and #9544. If this list is meant to describe main after those land, naming them in the description makes the merge order explicit.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Named in the description's new "Merge order" section: #9513 (#9557), #9515 (#9559), #9516 and #9526 (#9535), #9517 (#9549), #9520 (#9539), #9525 (#9544).

Comment on lines +659 to +663
delete and an insert. In a line such as a paragraph, what a collaborator
types at the same time survives but lands before the new text, with its
own formatting; formatting of the replaced characters does not carry
over. Replacing a block stored as a node of its own, such as a table,
deletes what was typed in it (see [Limits](#limits)). Lexical records the text edits of an

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This matches this head: concurrent typing in a replaced paragraph survives before the new text with its own formatting, and in a replaced table it is lost. But y-server.md:316-319 ("Edit text in place") still says the typing "is lost". #9545 updates that bullet, so either carry this sentence there in this PR or merge the two together.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description now says to merge this together with #9545 or after it; #9545 carries the matching "Edit text in place" sentence on the server page.

Comment on lines +155 to +159
record yet: seed the document first), `'read-only'` (a newer version of
the app's schema wrote to the document, a newer layout, content without a
layout record, a node type the config does not register, content its
classes throw on, or a named slot the document cannot store, which the
binding refuses to write; the error's `warnings` are the

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: a node type stored differently from how its class declares it (STORAGE_MISMATCH_WARNING) also makes the binding read only, so editYState/readYState throw 'read-only' for it too. It is worth naming here.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added in 5913777: a node type stored in a way its class cannot be (STORAGE_MISMATCH_WARNING) is now in the list (the binding sets its status to read only after that warning, and the headless functions refuse a read-only binding).

…ng the server page's read-only causes

## Description

The server page lists what makes `editYState` and `readYState` throw a `'read-only'` `YHeadlessError`. A node type stored in a way its class cannot be (`STORAGE_MISMATCH_WARNING`: its declaration changed, or its storage record is malformed) also makes the binding read only (`YBinding` sets its status to `readonly` after warning it), so the headless functions refuse it the same way. It is now in the list.

## Test plan

### Before

The list named a newer schema version or layout, content without a layout record, an unregistered node type, content its classes throw on and an unstorable named slot, but not a storage mismatch.

### After

```
$ prettier --check packages/lexical-website/docs/collaboration/y-server.md
All matched files use Prettier code style!
```

@meta-code-review meta-code-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for keeping the @lexical/y and comments docs in step with main, and for the new Merge order section and the storage-mismatch cause in y-server.md.

Every statement checks out against this head except three passages that describe main as it will be once the open PRs in the Merge order section land, so what is left is landing order:

  1. packages/lexical-website/docs/collaboration/comments.md lines 404-407 (IME limitation) describe #9540. On main, a composition started in an update of its own, as compositionstart does, still leaves the added letters without the comment id: retyping the commented cd of abcd as cde leaves e without the comment (#9519). The base wording promised this for every composition, so the new wording is narrower, not worse.
  2. packages/lexical-website/docs/collaboration/y.md lines 1043-1074 (Open issues) leave out #9513, #9515, #9516, #9517, #9520, #9525 and #9526, which stay open until #9557, #9559, #9535, #9549, #9539 and #9544 merge.
  3. y.md lines 657-663 match main (typing into a replaced paragraph survives before the new text; typing into a replaced table is lost), but y-server.md lines 317-320 still say the typing is lost until #9545 brings the same sentence there.

Question for maintainers: will this PR be held until #9540, #9545, #9535, #9539, #9544, #9549, #9557 and #9559 have merged? If it may land earlier, a #9519 line in the comments.md limitations, the seven issue lines in y.md, and #9545's sentence in the y-server.md bullet would keep each page accurate in the meantime.

Also checked on this head:

  • The new 'read-only' cause holds: a storage record that differs from the class, or is malformed, makes readYState and editYState throw 'read-only' with a STORAGE_MISMATCH_WARNING.
  • The ten NESTED_FALLBACK_WARNING reasons match Warnings.ts.
  • The banner snippet and the Yjs 14 store example type-check, and the store example syncs between two documents.
  • The code-highlighting limit reproduces.
  • YCollabExtension sets repairTransforms: false.
  • The [docs] changeset follows .changeset/README.md and passes check-changesets.
  • Every API the @lexical/mark README names is exported.
  • The website build, with broken-link and broken-anchor checks, passed.

@zurfyx

zurfyx commented Oct 30, 2026

Copy link
Copy Markdown
Member Author

Answering the review's question: yes, this PR is held until #9535, #9539, #9544, #9549, #9557 and #9559 have merged (#9540 and #9545 already have), as the description's "Merge order" section says, so each passage you flagged describes main when it lands. If that order changes, the interim lines you suggest (#9519 in the comments.md limitations, the seven issue lines in y.md, #9545's sentence in y-server.md) go in first.

## Description

Brings in main at d61302b. One conflict, in `docs/collaboration/y.md`'s "Edit text in place" bullet: main (#9598) now says what collaborators type into a replaced line survives at the start of the new text (or at its end when typed at the end of the line); this branch still had the older wording that it lands before the new text. The resolution keeps main's wording, which describes main.

## Test plan

```
$ pnpm exec prettier --check <the six changed files>
All matched files use Prettier code style!
$ pnpm run check-changesets
Changeset check passed: 53 pending changeset(s) valid.
```

@meta-code-review meta-code-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, this looks good. I checked the new statements against the code at this head: both changed TypeScript examples compile (the read-only banner fails on the base with TS2304: Cannot find name 'defineExtension'), the Yjs 14 thread-store example sets and clears orphaned across two @y/y 14.0.0-rc.29 documents, and the new "Code stored without highlighting" limit behaves as written. The suggestions below are optional and non-blocking.

Optional suggestions

  1. packages/lexical-website/docs/collaboration/y.md, Open issues (lines 1230-1261). main has moved since this branch last merged it:

    • #9570 was fixed and closed by #9590, which also rewrote the Moves limit in y.md to describe the in-place list conversion. The branch merges cleanly, but the merged page would still list #9570 as an open bug; dropping that entry when you merge main in again keeps the two passages consistent.
    • Several open @lexical/y bugs are not listed, though main pins them as expected failures or tracks them in packages/lexical-y/DECISIONS.md: #9579 (BatchedWrites.test.ts), #9591 (Races.test.ts), #9608 (RemadeTextEnds.test.ts, D76), #9609 (OwnRunRestoreEnd.test.ts, D65), #9599 (D78) and #9603 (D65).

    Since the intro tells readers these are the bugs rather than design, consider introducing the list as a selection and linking one that stays current (an issue search for open [lexical-y] bugs, or the Open table in DECISIONS.md), so it does not need an edit for every new issue.

  2. Same subsection, #9511. The intro calls every entry "not intended behavior", while Other races (lines 1225-1228) documents the same race as how the layout behaves, and DECISIONS.md (D61) keeps it open as "a real trade-off". Dropping "not intended behavior" from the intro, or leaving #9511 to Limits, would remove the contradiction.

The Merge order hold in the description is satisfied: all eight listed pull requests have merged, #9535 last. The description's "Edits made by code" bullet now describes a change that reached main through #9545 rather than this diff, if you want to trim it.

Comment on lines +1257 to +1261
- Turning a paragraph inside a container that is itself inside a
container (both not shadow roots) into a list removes the outer
container and makes no list, in every `@lexical/y` editor (it runs
`NodeStructureExtension`):
[#9570](https://github.com/meta/lexical/issues/9570).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional: #9570 was fixed and closed by #9590 on main, which also rewrote the Moves limit above to describe the in-place list conversion. This branch merges cleanly, but the merged page would still list #9570 as open, so consider dropping this entry when you merge main in again.

Comment on lines +1232 to +1233
These are bugs, not intended behavior; each issue has a test that
reproduces it:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional: this list misses open @lexical/y bugs that main pins as expected failures or tracks in packages/lexical-y/DECISIONS.md: #9579, #9591, #9608, #9609, #9599 and #9603. Since the intro presents these as the bugs rather than design, consider introducing the list as a selection and linking one that stays current (an issue search for open [lexical-y] bugs, or the Open table in DECISIONS.md). The intro's "not intended behavior" also covers #9511, which Other races documents as how the layout behaves and DECISIONS.md (D61) keeps open as a trade-off.

@zurfyx
zurfyx added this pull request to the merge queue Oct 30, 2026
Merged via the queue into main with commit 02f1856 Oct 30, 2026
57 checks passed

This branch was successfully deployed

2 active deployments
Preview – lexical — 665a472e Deployed Oct 30, 2026 by vercel[bot]
Preview – lexical-playground — 665a472e Deployed Oct 30, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: [lexical-mark] An IME replacement of a commented suffix leaves the new letters without the comment

1 participant