Virtualize chat timeline rows - #898
Conversation
|
Codex review: needs maintainer review before merge. Reviewed July 6, 2026, 12:15 AM ET / 04:15 UTC. Summary Reproducibility: not applicable. as a bug reproduction; this PR implements the tracked chat virtualization feature request. Source inspection confirms current main still uses an eager Review metrics: 3 noteworthy metrics.
Root-cause cluster Members:
Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything. Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review detailsBest possible solution: Land the virtualized timeline after current-head checks finish green and maintainers accept the remaining chat scroll/session-state risk, preserving the recycler cleanup and proof coverage. Do we have a high-confidence way to reproduce the issue? Not applicable as a bug reproduction; this PR implements the tracked chat virtualization feature request. Source inspection confirms current main still uses an eager Is this the best way to solve the issue? Yes, with normal merge validation remaining; AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against dae64b6c49e9. Label changesLabel justifications:
Evidence reviewedWhat I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (6 earlier review cycles)
|
|
@openclaw-mantis visual task: verify native chat timeline with a large conversation scrolls smoothly and preserves scroll-to-bottom/follow behavior after virtualization. |
|
Added current-head Windows CI proof to the PR body: the native chat timeline mounted 241 rows with ItemsRepeater, vertical StackLayout, bottom scroll offset, and newest row visible. @clawsweeper re-review |
|
Current head ef95d1d has all GitHub Actions Build and Test jobs green, including test, e2e, win-x64, and win-arm64. The PR body includes current-head Windows CI proof: CHAT_TIMELINE_VIRTUALIZATION_PROOF rows=241 itemsRepeater=ItemsRepeater layout=Vertical scrollableHeight=19967.0 verticalOffset=19967.0 newestRowVisible=true. @clawsweeper re-review |
karkarl
left a comment
There was a problem hiding this comment.
Tested locally on ARM64 — the ScrollViewer is out of sync with the virtualized chat rows. After loading a conversation, the scroll position gets stuck in the middle of the chat history rather than anchoring to the latest messages at the bottom. Looks like the viewport offset isn't being reconciled with the virtualization panel's realized item range.
|
Thanks for pushing this forward — the shape is promising, and the 241-row proof is a useful start. I did a maintainer pass against current The main blocker is the interaction with the newly merged FunctionalUI prune pass. Two related scroll/lifecycle issues should be fixed with that:
Suggested path: make virtualized row ownership prune-aware (for example, a virtualized subtree/prefix that is not swept by the root prune until the item leaves the ItemsSource, or explicit row path lifecycle in So: great direction, but requesting changes rather than merging this one today. |
ef95d1d to
91ad3aa
Compare
91ad3aa to
8aea279
Compare
|
Updated the PR body with current-head proof from @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
8aea279 to
e792f20
Compare
Closes #860.
Thanks @TurboTheTurtle for the
ItemsRepeater-backed virtual chat timeline.This rebases the contribution onto current
main, switches native chat rows from an eagerStackPanelto a virtual stack, and preserves the existing history/follow-to-bottom behavior. Maintainer hardening adds stable row containers for component root changes, evicts renderer controls/components/flyouts when rows recycle, prunes removed descendants during in-place updates, and runs nested component effect cleanups instead of retaining every row ever visited.Validation
Current head:
e792f203026766321e36d2f9d079b882a719dfc6Real behavior proof
The native WinUI proof mounts the production chat timeline with 241 variable-height rows, scrolls through four viewports, verifies the first row is recycled and the newest row is realized, bounds renderer cache growth, updates an onscreen row without replacing the
ItemsSourceor template, appends a message, and confirms follow-to-bottom:CHAT_TIMELINE_VIRTUALIZATION_PROOF rows=241 itemsRepeater=ItemsRepeater layout=Vertical scrollableHeight=26486.0 verticalOffset=26486.0 variableHeight=true renderChurnStable=true newestRowVisible=trueA second native proof keeps the
ItemsRepeaterrow container stable while a component changes its root control, then verifies removed nested UI disappears, renderer cache size drops, and the nested effect cleanup runs.