v0.1.31 — perf: lift LogEntryRow expansion state and wrap in React.memo
Release v0.1.31: PipelineLiveFeed Performance Optimization
What changed
- Fixed the scroll-collapse bug: expanding a log row and scrolling away no longer collapses it on scroll back
- Eliminated unnecessary re-renders when new log entries arrive — unrelated rows now stay stable
- Lifted expansion state from individual
LogEntryRowcomponents to the parentPipelineLiveFeedusing aMapin auseRef - Wrapped
LogEntryRowinReact.memowith stableuseCallbackhandlers so React correctly bails out for unchanged rows
Why it matters
With 100+ log rows and entries arriving every second, the old approach caused every visible row to re-render on each new entry — even when that row's data hadn't changed. The new architecture decouples expansion state from component lifecycle so scrolling behavior is predictable, and memoization ensures only affected rows re-render.
Technical notes
Expansion state is now owned by the parent in expandedMapRef (a Map<string, boolean> in a useRef). A lightweight expandedVersion counter triggers just the affected row's re-render when toggled. No breaking changes — behavior is identical from the user's perspective.
Release Notes
Merged PR #440 (squash merge, SHA 7efe4dfd5c0bda69f49aca60f338d27c4be89ba6) — a performance patch to PipelineLiveFeed that lifts LogEntryRow expansion state to the parent and wraps the component in React.memo to eliminate unnecessary re-renders and fix the scroll-collapse bug. The release tag v0.1.31 already existed in the repository, so the GitHub Release object was not duplicated. Version 0.1.31 is now on main.