Investigate idle chat wheel jitter - #1044
Conversation
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: ac9b771f-96ec-47e0-825f-fcf9921b3e38
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: ac9b771f-96ec-47e0-825f-fcf9921b3e38
|
A/B update: do not merge. The user compared this head with current main and reported no perceptible improvement. The existing proof drives external animated Temporary opt-in diagnostics are being used locally to capture real routed wheel deltas and exact |
|
ClawSweeper status: review started. I am starting a fresh review of this pull request: Investigate idle chat wheel jitter This is item 1/1 in the current shard. Shard 0/1. This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking. Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted. |
|
Closing after measured A/B and focused iteration. Current main shows a real StackLayout variable-height extent-estimation discontinuity; the draft ownership patch reduced repeated oscillation but did not improve perceived scrolling, and the custom stable-measurement layout eliminated reversals but failed prepend/follow determinism and was too invasive. No production change from this investigation is recommended. Traces and rejected patches are preserved for the planned chat virtualization refactor. |
Status: do not merge
The user completed a direct normal-profile A/B at head
12b85917e0cd0e4683d63fa3315a474ba588cee7and reported no perceptible improvement over exact current main4d09797c.A later routed-wheel diagnostic run does show that this branch suppresses repeated anchor-driven reversals, but it leaves a large virtualization extent-collapse jump. That remaining jump is consistent with the user's unchanged subjective result. The current
+248/-92production diff is therefore not justified for merge.Recommendation: replace, not merge, this PR. A follow-up should isolate the ItemsRepeater extent instability and carry only the smallest wheel-intent/anchor change proven necessary.
Root cause evidence
The comparison used fresh local clones of the same normal profile. Both clones enabled MCP-only mode locally, navigated through the existing
app.navigate {"page":"chat"}command, warmed the long idle timeline to exact top, then received the same native synthetic wheel sequence through Win32 mouse input: 36 steps down followed by 36 steps up. Both builds recorded all 72 routedPointerWheelChangedevents.ViewChangedmoves4d09797c12b85917Main's representative reversal:
PR head suppresses that repeated anchor oscillation because routed wheel intent keeps anchoring disabled. It still records the underlying virtualizer collapse:
This separates two causes:
VerticalAnchorRatio=1during an active wheel sequence when an extent collapse temporarily makes the viewport look bottom-following. That amplifies one extent clamp into repeated 300+ px oscillations.Temporary tracing used
OutputDebugStringW, was never telemetry, and has been fully removed from the worktree. Both diagnostic app PIDs and their launchers were stopped.Validation
./build.ps1: passed.ChatTimelineVirtualizationProofTests: 8/8 passed repeatedly.dotnet-coverage: 100/100 passed twice.ClickablePointOnScreentransient.Real behavior proof
4d09797c: user reports mouse scrolling is a little jittery in the middle, but bottom is reachable.12b85917: user reports no perceptible improvement.Keep this PR draft. Do not merge. Replace it with a substantially smaller evidence-based patch, or close it if the extent-collapse investigation does not produce a material user-visible improvement.