docs/solutions/logic-errors/2026-04-09-slate-inline-container-flattening-cannot-be-a-quick-built-in-normalization-win.md
The obvious next normalization step after the safe block-only floor was to flatten block wrappers inside inline-style containers into their text / inline descendants.
That looked reasonable in isolated tests and was still wrong.
slate-react runtime proof started failing in mixed-inline rendering and
selection restorationclipboard proof currently supports insertion only inside top-level text blocksTreating inline-container coercion as “just unwrap the block wrapper and keep the descendants” was too aggressive.
The inline tree shape is part of the current fragment/selection/runtime proof. Flattening wrappers changed that shape broadly enough to invalidate:
slate-reactDo not land inline-container flattening as a casual helper change.
The seam only became safe once it was:
slate-react runtime lanesThe landed built-in floor is:
fallbackElementThe current engine already proves a lot of behavior on top of specific mixed-inline container shapes.
The “simple normalization improvement” was actually a broad fragment/runtime contract rewrite in disguise.
It only worked once the flattening logic was aligned with the editor's actual inline contract and the proof stack was updated to the normalized tree shape.
slate-react runtime lanes immediately.