From 72c7d3fe3ed5308810e418151112be21de2f9492 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Sun, 26 Jul 2026 20:37:01 +0200 Subject: [PATCH] fix(app): keep streamed chat position stable on Android Ignore synthetic momentum-end events emitted after native anchor corrections. Only active user momentum may settle sticky-bottom intent. --- packages/app/src/agent-stream/strategy-native.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/app/src/agent-stream/strategy-native.tsx b/packages/app/src/agent-stream/strategy-native.tsx index a28c611e5..629f63fa0 100644 --- a/packages/app/src/agent-stream/strategy-native.tsx +++ b/packages/app/src/agent-stream/strategy-native.tsx @@ -359,6 +359,11 @@ function NativeStreamViewport(props: StreamRenderInput & { strategy: StreamStrat const handleMomentumScrollEnd = useStableEvent( (event: NativeSyntheticEvent) => { + // Android can emit momentum-end after a programmatic anchor correction. + // Only momentum that still owns the user gesture may settle scroll intent. + if (!isUserScrollActiveRef.current) { + return; + } const isNearBottom = isScrollEventNearBottom(event); clearPendingUserScrollEnd(); isUserScrollActiveRef.current = false;