perf(ui): virtualize nested session list#586
Conversation
Flatten the currently visible session tree into a stable pre-order projection and render it through the existing virtua Solid integration. This bounds mounted session rows to the viewport and buffer while preserving arbitrary nesting, forced-open search results, dynamic row heights, selection, and expansion behavior. Scroll newly active sessions by virtual index instead of querying unmounted DOM nodes. Keep focused rows mounted to avoid losing keyboard focus, preserve separators around the loading sentinel, and anchor future pagination to the real scroll viewport. Cover collapsed ancestry, nested ordering, connector metadata, filtered trees, parity with existing visibility semantics, and 1,000-session projections. Validated with UI typecheck, focused component/store tests, production build, whitespace checks, and a final regression review.
|
PR builds are available as GitHub Actions artifacts: https://github.com/NeuralNomadsAI/CodeNomad/actions/runs/29260867849 Artifacts expire in 7 days.
|
pascalandr
left a comment
There was a problem hiding this comment.
Gatekeeper verdict: APPROVE.
No blocking code findings. The virtualized projection preserves nested ordering, expansion and search semantics, stable Solid/virtua identity, dynamic measurement, focused-row mounting, active-index scrolling, and correct sentinel rooting. Focused projection tests and UI typechecking pass.
The required macOS check should be rerun before merging: its failure was an external connection reset while downloading the Electron darwin-arm64 archive, after the preceding build validations and macOS x64 packaging had succeeded.
Residual risks are limited to missing browser-level coverage for active scrolling, focus retention, expansion under virtualization, responsive/RTL rendering, and same-length reorder measurement. Touched oversized files remain session-list.tsx at about 917 lines and session-layout.css at about 572 lines.
|
PR builds are available as GitHub Actions artifacts: https://github.com/NeuralNomadsAI/CodeNomad/actions/runs/29325119470 Artifacts expire in 7 days.
|
|
@shantur LGTM |
|
PR builds are available as GitHub Actions artifacts: https://github.com/NeuralNomadsAI/CodeNomad/actions/runs/29330694015 Artifacts expire in 7 days.
|
|
PR builds are available as GitHub Actions artifacts: https://github.com/NeuralNomadsAI/CodeNomad/actions/runs/29331879096 Artifacts expire in 7 days.
|
Summary
Why
Large or deeply expanded session trees currently mount every visible row. Status updates then affect a large DOM tree even when most sessions are far outside the sidebar viewport. This PR bounds mounted rows while leaving selection, deletion, filtering, and store semantics unchanged.
Validation