docs/solutions/performance-issues/2026-04-07-fast-element-paths-must-preserve-injected-props-and-non-paragraph-list-semantics.md
A performance cut optimized the plain element path and unordered list rendering, but it cheated on semantics:
inject.nodePropsThat kept the perf win and broke actual rendering. Bad trade.
belowNodes wrappers or directional affinity were activelistStyleType stopped showing markersTwo separate mistakes:
pipeRenderElement(...) computed injected attributes for the plain fast
path, but passed raw attributes into the wrapped fallback pathBaseListPlugin narrowed unordered list-item injection to targetPlugins: [KEYS.p], even though list semantics in this repo apply to non-paragraph
blocks toofastAttributes on the FastElementWithPath branchbelowNodes wrappers exist, do not bypass pluginRenderElement(...)
at alllistStyleType can still render as a list itempipeRenderElement.spec.tsx now covers:
belowNodes wrappers are presentBaseListPlugin.spec.tsx now covers unordered list-item injection on a
non-paragraph blockgetRenderNodeProps(...) must prove it still
preserves injected props on every surviving branch