docs/solutions/logic-errors/2026-04-07-slate-v2-collapsed-cross-block-delete-should-reuse-merge-seam.md
Once Editor.before(...), Editor.after(...), and Transforms.move(...)
could cross supported top-level block boundaries, delete(...) still lagged on
that seam.
The tempting lie was to special-case cross-block deletion with a separate tree rewrite path.
That would have duplicated block-join semantics that mergeNodes(...) already
owned.
The honest follow-on kept the delete helper small:
mergeNodes(...) for the adjacent block joinThat keeps adjacent cross-block delete aligned with the same merge contract the core already proves elsewhere, whether the range started collapsed or was already explicit.
For Slate v2 adjacent cross-block deletion:
delete(...)If block-boundary delete and block merge have separate semantics, one of them will drift.
When reviewing core editor methods for this regression class, hunt for:
editor.applyTransforms.* use in the core mutation surfaceThe correct fix is usually to route the method through the owned primitive seam, not to make the local helper smarter.