test(app): record native composer scroll regression QA

This commit is contained in:
Mohamed Boudra
2026-09-16 23:24:55 +02:00
parent 5d7b356686
commit acaafbfdd1
95 changed files with 140082 additions and 0 deletions
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

File diff suppressed because it is too large Load Diff
@@ -0,0 +1,30 @@
Connecting to 3s0s50t248bag ...
Warning: Permanently added 'paseo-ios.devbox.namespace' (RSA) to the list of known hosts.
Filled 1 chars
Tapped (370, 465)
Long pressed (376, 720)
Tapped (4, 370)
Filled 131 chars
/Volumes/devbox/workspace/composer-scroll-ios-evidence/chat-cap-open.png (402x874 @1x)
Tapped (398, 118)
/Volumes/devbox/workspace/composer-scroll-ios-evidence/chat-header-dismissed.png (402x874 @1x)
Tapped @e296 (201, 626)
Error (TEXT_ENTRY_MISMATCH): text entry verification failed: expected "x", observed "x
seventeen
eighteen
nineteen
twenty"
Hint: Retry with --debug and inspect diagnostics log for details.
Diagnostic ID: mu4krczz-76a58021
Diagnostics Log: /Users/runner/.agent-device/sessions/composer-scroll-ios/runner.log
Tapped (370, 465.0000305175781)
Long pressed (376, 720)
PASS iOS host=chat: content/header dismissal, cap close/reopen 298pt, empty/reset 30pt, header/keyboard bounds
A new version of devbox is available: 0.0.187.
Run `devbox update` to upgrade.
@@ -0,0 +1,29 @@
Connecting to 3s0s50t248bag ...
Warning: Permanently added 'paseo-ios.devbox.namespace' (RSA) to the list of known hosts.
Filled 1 chars
Tapped (370, 465)
Long pressed (376, 720)
Tapped (4, 370)
Filled 131 chars
/Volumes/devbox/workspace/composer-scroll-ios-evidence/workspace-draft-cap-open.png (402x874 @1x)
Tapped (398, 118)
/Volumes/devbox/workspace/composer-scroll-ios-evidence/workspace-draft-header-dismissed.png (402x874 @1x)
Tapped @e83 (201, 650)
Error (TEXT_ENTRY_MISMATCH): text entry verification failed: expected "x", observed "x
eighteen
nineteen
twent"
Hint: Retry with --debug and inspect diagnostics log for details.
Diagnostic ID: mu4kyhro-28a33356
Diagnostics Log: /Users/runner/.agent-device/sessions/composer-scroll-ios/runner.log
Tapped (370, 465.0000305175781)
Long pressed (376, 720)
PASS iOS host=workspace-draft: content/header dismissal, cap close/reopen 250pt, empty/reset 30pt, header/keyboard bounds
A new version of devbox is available: 0.0.187.
Run `devbox update` to upgrade.
@@ -0,0 +1,354 @@
Connecting to 3s0s50t248bag ...
Warning: Permanently added 'paseo-ios.devbox.namespace' (RSA) to the list of known hosts.
Tapped (398, 118)
Opened: sh.paseo.debug
Session state: /Users/runner/.agent-device/sessions/composer-scroll-ios
Tapped @e422 (201, 760)
settled after 2363ms: +35 -344 (~112 unchanged)
- @e1 [application] "Paseo Debug"
+ @e1 [application] "Paseo Debug"
- @e25 [other] "Switch tabs (2 open)"
- @e26 [other] "Open menu"
- @e27 [other] "Open menu"
- @e28 [other] "Open menu"
- @e29 [other] "Open menu"
- @e31 [button] "Open menu"
+ @e29 [button] "Open menu"
- @e36 [other] "main"
- @e37 [other] "main"
+ @e31 [other]
- @e39 [text] "main"
- @e41 [text] "composer-dock-ios-fixture"
- @e43 [text] "·"
- @e52 [text] "dev-new"
- @e53 [button] "Workspace actions"
- @e54 [button] "Open Explorer sidebar"
+ @e43 [button] "Workspace actions"
+ @e44 [button] "Open Explorer sidebar"
- @e57 [button] "Switch tabs (2 open)"
- @e58 [other] "workspace-active-tab-icon"
- @e59 [other] "workspace-tabs-row"
+ @e47 [button] "Switch tabs (2 open)"
- @e62 [other] "Add attachment"
- @e65 [other] "Message agent... Message, @files, /commands"
- @e66 [other] "Scroll to bottom"
- @e67 [other] "Horizontal scroll bar, 1 page"
- @e69 [other] "Horizontal scroll bar, 1 page"
- @e71 [other] "Horizontal scroll bar, 1 page"
- @e72 [scroll-area] "Thinking"
- @e73 [other] "Native scroll fixture 0: distinct history row after submitting from a dock host.
Native scroll fixture 1: distinct history row after submitting from a dock host.
Native scroll fixture 2: distinct history row after submitting from a dock host.
Native scroll fixture 3: distinct history row after submitting from a dock host.
Native scroll fixture 4: distinct history row after submitting from a dock host.
Native scroll fixture 5: distinct history row after submitting from a dock host.
Native scroll fixture 6: distinct history row after submitting from a dock host.
Native scroll fixture 7: distinct history row after submitting from a dock host.
Native scroll fixture 8: distinct history row after submitting from a dock host.
Native scroll fixture 9: distinct history row after submitting from a dock host.
Native scroll fixture 10: distinct history row after submitting from a dock host.
Native scroll fixture 11: distinct history row after submitting from a dock host.
Native scroll fixture 12: distinct history row after submitting from a dock host.
Native scroll fixture 13: distinct history row after submitting from a dock host.
Native scroll fixture 14: distinct history row after submitting from a dock host.
Native scroll fixture 15: distinct history row after submitting from a dock host.
Native scroll fixture 16: distinct history row after submitting from a dock host.
Native scroll fixture 17: distinct history row after submitting from a dock host.
Native scroll fixture 18: distinct history row after submitting from a dock host.
Native scroll fixture 19: distinct history row after submitting from a dock host.
Native scroll fixture 20: distinct history row after submitting from a dock host.
Native scroll fixture 21: distinct history row after submitting from a dock host.
Native scroll fixture 22: distinct history row after submitting from a dock host.
Native scroll fixture 23: distinct history row after submitting from a dock host.
Native scroll fixture 24: distinct history row after submitting from a dock host.
Native scroll fixture 25: distinct history row after submitting from a dock host.
Native scroll fixture 26: distinct history row after submitting from a dock host.
Native scroll fixture 27: distinct history row after submitting from a dock host.
Native scroll fixture 28: distinct history row after submitting from a dock host.
Native scroll fixture 29: distinct history row after submitting from a dock host.
Native scroll fixture 30: distinct history row after submitting from a dock host.
Native scroll fixture 31: distinct history row after submitting from a dock host.
Native scroll fixture 32: distinct history row after submitting from a dock host.
Native scroll fixture 33: distinct history row after submitting from a dock host.
Native scroll fixture 34: distinct history row after submitting from a dock host.
Native scroll fixture 35: distinct history row after submitting from a dock host.
Native scroll fixture 36: distinct history row after submitting from a dock host.
Native scroll fixture 37: distinct history row after submitting from a dock host.
Native scroll fixture 38: distinct history row after submitting from a dock host.
Native scroll fixture 39: distinct history row after submitting from a dock host.
Native scroll fixture 40: distinct history row after submitting from a dock host.
Native scroll fixture 41: distinct history row after submitting from a dock host.
Native scroll fixture 42: distinct history row after submitting from a dock host.
Native scroll fi"
- @e74 [other] "Native scroll fixture 0: distinct history row after submitting from a dock host.
Native scroll fixture 1: distinct history row after submitting from a dock host.
Native scroll fixture 2: distinct history row after submitting from a dock host.
Native scroll fixture 3: distinct history row after submitting from a dock host.
Native scroll fixture 4: distinct history row after submitting from a dock host.
Native scroll fixture 5: distinct history row after submitting from a dock host.
Native scroll fixture 6: distinct history row after submitting from a dock host.
Native scroll fixture 7: distinct history row after submitting from a dock host.
Native scroll fixture 8: distinct history row after submitting from a dock host.
Native scroll fixture 9: distinct history row after submitting from a dock host.
Native scroll fixture 10: distinct history row after submitting from a dock host.
Native scroll fixture 11: distinct history row after submitting from a dock host.
Native scroll fixture 12: distinct history row after submitting from a dock host.
Native scroll fixture 13: distinct history row after submitting from a dock host.
Native scroll fixture 14: distinct history row after submitting from a dock host.
Native scroll fixture 15: distinct history row after submitting from a dock host.
Native scroll fixture 16: distinct history row after submitting from a dock host.
Native scroll fixture 17: distinct history row after submitting from a dock host.
Native scroll fixture 18: distinct history row after submitting from a dock host.
Native scroll fixture 19: distinct history row after submitting from a dock host.
Native scroll fixture 20: distinct history row after submitting from a dock host.
Native scroll fixture 21: distinct history row after submitting from a dock host.
Native scroll fixture 22: distinct history row after submitting from a dock host.
Native scroll fixture 23: distinct history row after submitting from a dock host.
Native scroll fixture 24: distinct history row after submitting from a dock host.
Native scroll fixture 25: distinct history row after submitting from a dock host.
Native scroll fixture 26: distinct history row after submitting from a dock host.
Native scroll fixture 27: distinct history row after submitting from a dock host.
Native scroll fixture 28: distinct history row after submitting from a dock host.
Native scroll fixture 29: distinct history row after submitting from a dock host.
Native scroll fixture 30: distinct history row after submitting from a dock host.
Native scroll fixture 31: distinct history row after submitting from a dock host.
Native scroll fixture 32: distinct history row after submitting from a dock host.
Native scroll fixture 33: distinct history row after submitting from a dock host.
Native scroll fixture 34: distinct history row after submitting from a dock host.
Native scroll fixture 35: distinct history row after submitting from a dock host.
Native scroll fixture 36: distinct history row after submitting from a dock host.
Native scroll fixture 37: distinct history row after submitting from a dock host.
Native scroll fixture 38: distinct history row after submitting from a dock host.
Native scroll fixture 39: distinct history row after submitting from a dock host.
Native scroll fixture 40: distinct history row after submitting from a dock host.
Native scroll fixture 41: distinct history row after submitting from a dock host.
Native scroll fixture 42: distinct history row after submitting from a dock host.
Native scroll fi"
- @e76 [other] "older-history-slot"
- @e78 [other] "Native scroll fixture 0: distinct history row after submitting from a dock host.
Native scroll fixture 1: distinct history row after submitting from a dock host.
Native scroll fixture 2: distinct history row after submitting from a dock host.
Native scroll fixture 3: distinct history row after submitting from a dock host.
Native scroll fixture 4: distinct history row after submitting from a dock host.
Native scroll fixture 5: distinct history row after submitting from a dock host.
Native scroll fixture 6: distinct history row after submitting from a dock host.
Native scroll fixture 7: distinct history row after submitting from a dock host.
Native scroll fixture 8: distinct history row after submitting from a dock host.
Native scroll fixture 9: distinct history row after submitting from a dock host.
Native scroll fixture 10: distinct history row after submitting from a dock host.
Native scroll fixture 11: distinct history row after submitting from a dock host.
Native scroll fixture 12: distinct history row after submitting from a dock host.
Native scroll fixture 13: distinct history row after submitting from a dock host.
Native scroll fixture 14: distinct history row after submitting from a dock host.
Native scroll fixture 15: distinct history row after submitting from a dock host.
Native scroll fixture 16: distinct history row after submitting from a dock host.
Native scroll fixture 17: distinct history row after submitting from a dock host.
Native scroll fixture 18: distinct history row after submitting from a dock host.
Native scroll fixture 19: distinct history row after submitting from a dock host.
Native scroll fixture 20: distinct history row after submitting from a dock host.
Native scroll fixture 21: distinct history row after submitting from a dock host.
Native scroll fixture 22: distinct history row after submitting from a dock host.
Native scroll fixture 23: distinct history row after submitting from a dock host.
Native scroll fixture 24: distinct history row after submitting from a dock host.
Native scroll fixture 25: distinct history row after submitting from a dock host.
Native scroll fixture 26: distinct history row after submitting from a dock host.
Native scroll fixture 27: distinct history row after submitting from a dock host.
Native scroll fixture 28: distinct history row after submitting from a dock host.
Native scroll fixture 29: distinct history row after submitting from a dock host.
Native scroll fixture 30: distinct history row after submitting from a dock host.
Native scroll fixture 31: distinct history row after submitting from a dock host.
Native scroll fixture 32: distinct history row after submitting from a dock host.
Native scroll fixture 33: distinct history row after submitting from a dock host.
Native scroll fixture 34: distinct history row after submitting from a dock host.
Native scroll fixture 35: distinct history row after submitting from a dock host.
Native scroll fixture 36: distinct history row after submitting from a dock host.
Native scroll fixture 37: distinct history row after submitting from a dock host.
Native scroll fixture 38: distinct history row after submitting from a dock host.
Native scroll fixture 39: distinct history row after submitting from a dock host.
Native scroll fixture 40: distinct history row after submitting from a dock host.
Native scroll fixture 41: distinct history row after submitting from a dock host.
Native scroll fixture 42: distinct history row after submitting from a dock host.
Native scroll fi"
- @e79 [other] "user-message"
- @e80 [other] "Native scroll fixture 0: distinct history row after submitting from a dock host.
Native scroll fixture 1: distinct history row after submitting from a dock host.
Native scroll fixture 2: distinct history row after submitting from a dock host.
Native scroll fixture 3: distinct history row after submitting from a dock host.
Native scroll fixture 4: distinct history row after submitting from a dock host.
Native scroll fixture 5: distinct history row after submitting from a dock host.
Native scroll fixture 6: distinct history row after submitting from a dock host.
Native scroll fixture 7: distinct history row after submitting from a dock host.
Native scroll fixture 8: distinct history row after submitting from a dock host.
Native scroll fixture 9: distinct history row after submitting from a dock host.
Native scroll fixture 10: distinct history row after submitting from a dock host.
Native scroll fixture 11: distinct history row after submitting from a dock host.
Native scroll fixture 12: distinct history row after submitting from a dock host.
Native scroll fixture 13: distinct history row after submitting from a dock host.
Native scroll fixture 14: distinct history row after submitting from a dock host.
Native scroll fixture 15: distinct history row after submitting from a dock host.
Native scroll fixture 16: distinct history row after submitting from a dock host.
Native scroll fixture 17: distinct history row after submitting from a dock host.
Native scroll fixture 18: distinct history row after submitting from a dock host.
Native scroll fixture 19: distinct history row after submitting from a dock host.
Native scroll fixture 20: distinct history row after submitting from a dock host.
Native scroll fixture 21: distinct history row after submitting from a dock host.
Native scroll fixture 22: distinct history row after submitting from a dock host.
Native scroll fixture 23: distinct history row after submitting from a dock host.
Native scroll fixture 24: distinct history row after submitting from a dock host.
Native scroll fixture 25: distinct history row after submitting from a dock host.
Native scroll fixture 26: distinct history row after submitting from a dock host.
Native scroll fixture 27: distinct history row after submitting from a dock host.
Native scroll fixture 28: distinct history row after submitting from a dock host.
Native scroll fixture 29: distinct history row after submitting from a dock host.
Native scroll fixture 30: distinct history row after submitting from a dock host.
Native scroll fixture 31: distinct history row after submitting from a dock host.
Native scroll fixture 32: distinct history row after submitting from a dock host.
Native scroll fixture 33: distinct history row after submitting from a dock host.
Native scroll fixture 34: distinct history row after submitting from a dock host.
Native scroll fixture 35: distinct history row after submitting from a dock host.
Native scroll fixture 36: distinct history row after submitting from a dock host.
Native scroll fixture 37: distinct history row after submitting from a dock host.
Native scroll fixture 38: distinct history row after submitting from a dock host.
Native scroll fixture 39: distinct history row after submitting from a dock host.
Native scroll fixture 40: distinct history row after submitting from a dock host.
Native scroll fixture 41: distinct history row after submitting from a dock host.
Native scroll fixture 42: distinct history row after submitting from a dock host.
Native scroll fi"
- @e82 [text] "Native scroll fixture 0: distinct history row after submitting from a dock host.
Native scroll fixture 1: distinct history row after submitting from a dock host.
Native scroll fixture 2: distinct history row after submitting from a dock host.
Native scroll fixture 3: distinct history row after submitting from a dock host.
Native scroll fixture 4: distinct history row after submitting from a dock host.
Native scroll fixture 5: distinct history row after submitting from a dock host.
Native scroll fixture 6: distinct history row after submitting from a dock host.
Native scroll fixture 7: distinct history row after submitting from a dock host.
Native scroll fixture 8: distinct history row after submitting from a dock host.
Native scroll fixture 9: distinct history row after submitting from a dock host.
Native scroll fixture 10: distinct history row after submitting from a dock host.
Native scroll fixture 11: distinct history row after submitting from a dock host.
Native scroll fixture 12: distinct history row after submitting from a dock host.
Native scroll fixture 13: distinct history row after submitting from a dock host.
Native scroll fixture 14: distinct history row after submitting from a dock host.
Native scroll fixture 15: distinct history row after submitting from a dock host.
Native scroll fixture 16: distinct history row after submitting from a dock host.
Native scroll fixture 17: distinct history row after submitting from a dock host.
Native scroll fixture 18: distinct history row after submitting from a dock host.
Native scroll fixture 19: distinct history row after submitting from a dock host.
Native scroll fixture 20: distinct history row after submitting from a dock host.
Native scroll fixture 21: distinct history row after submitting from a dock host.
Native scroll fixture 22: distinct history row after submitting from a dock host.
Native scroll fixture 23: distinct history row after submitting from a dock host.
Native scroll fixture 24: distinct history row after submitting from a dock host.
Native scroll fixture 25: distinct history row after submitting from a dock host.
Native scroll fixture 26: distinct history row after submitting from a dock host.
Native scroll fixture 27: distinct history row after submitting from a dock host.
Native scroll fixture 28: distinct history row after submitting from a dock host.
Native scroll fixture 29: distinct history row after submitting from a dock host.
Native scroll fixture 30: distinct history row after submitting from a dock host.
Native scroll fixture 31: distinct history row after submitting from a dock host.
Native scroll fixture 32: distinct history row after submitting from a dock host.
Native scroll fixture 33: distinct history row after submitting from a dock host.
Native scroll fixture 34: distinct history row after submitting from a dock host.
Native scroll fixture 35: distinct history row after submitting from a dock host.
Native scroll fixture 36: distinct history row after submitting from a dock host.
Native scroll fixture 37: distinct history row after submitting from a dock host.
Native scroll fixture 38: distinct history row after submitting from a dock host.
Native scroll fixture 39: distinct history row after submitting from a dock host.
Native scroll fixture 40: distinct history row after submitting from a dock host.
Native scroll fixture 41: distinct history row after submitting from a dock host.
Native scroll fixture 42: distinct history row after submitting from a dock host.
Native scroll fi"
- @e83 [text] "Native scroll fixture 0: distinct history row after submitting from a dock host.
Native scroll fixture 1: distinct history row after submitting from a dock host.
Native scroll fixture 2: distinct history row after submitting from a dock host.
Native scroll fixture 3: distinct history row after submitting from a dock host.
Native scroll fixture 4: distinct history row after submitting from a dock host.
Native scroll fixture 5: distinct history row after submitting from a dock host.
Native scroll fixture 6: distinct history row after submitting from a dock host.
Native scroll fixture 7: distinct history row after submitting from a dock host.
Native scroll fixture 8: distinct history row after submitting from a dock host.
Native scroll fixture 9: distinct history row after submitting from a dock host.
Native scroll fixture 10: distinct history row after submitting from a dock host.
Native scroll fixture 11: distinct history row after submitting from a dock host.
Native scroll fixture 12: distinct history row after submitting from a dock host.
Native scroll fixture 13: distinct history row after submitting from a dock host.
Native scroll fixture 14: distinct history row after submitting from a dock host.
Native scroll fixture 15: distinct history row after submitting from a dock host.
Native scroll fixture 16: distinct history row after submitting from a dock host.
Native scroll fixture 17: distinct history row after submitting from a dock host.
Native scroll fixture 18: distinct history row after submitting from a dock host.
Native scroll fixture 19: distinct history row after submitting from a dock host.
Native scroll fixture 20: distinct history row after submitting from a dock host.
Native scroll fixture 21: distinct history row after submitting from a dock host.
Native scroll fixture 22: distinct history row after submitting from a dock host.
Native scroll fixture 23: distinct history row after submitting from a dock host.
Native scroll fixture 24: distinct history row after submitting from a dock host.
Native scroll fixture 25: distinct history row after submitting from a dock host.
Native scroll fixture 26: distinct history row after submitting from a dock host.
Native scroll fixture 27: distinct history row after submitting from a dock host.
Native scroll fixture 28: distinct history row after submitting from a dock host.
Native scroll fixture 29: distinct history row after submitting from a dock host.
Native scroll fixture 30: distinct history row after submitting from a dock host.
Native scroll fixture 31: distinct history row after submitting from a dock host.
Native scroll fixture 32: distinct history row after submitting from a dock host.
Native scroll fixture 33: distinct history row after submitting from a dock host.
Native scroll fixture 34: distinct history row after submitting from a dock host.
Native scroll fixture 35: distinct history row after submitting from a dock host.
Native scroll fixture 36: distinct history row after submitting from a dock host.
Native scroll fixture 37: distinct history row after submitting from a dock host.
Native scroll fixture 38: distinct history row after submitting from a dock host.
Native scroll fixture 39: distinct history row after submitting from a dock host.
Native scroll fixture 40: distinct history row after submitting from a dock host.
Native scroll fixture 41: distinct history row after submitting from a dock host.
Native scroll fixture 42: distinct history row after submitting from a dock host.
Native scroll fi"
- @e84 [other] "user-message-trailing-row"
- @e85 [text] "8:53 PM"
- @e86 [text] "8:53 PM"
- @e87 [other] "Rewind to this message"
- @e88 [button] "Rewind to this message"
- @e89 [button] "Copy message"
- @e90 [other] "Cycle 1"
- @e91 [other] "assistant-message"
- @e92 [other] "Cycle 1"
- @e93 [other] "Cycle 1"
+ @e57 [scroll-area]
- @e95 [text-view] "Cycle 1"
- @e96 [text-view] "Cycle 1"
+ @e64 [text-view] "We rely on onContentSizeChange to detect new content, but that fires after layout, not as the streaming delta arrives, so we end up scrolling one frame late on fast streams."
+ @e65 [text-view] "We rely on onContentSizeChange to detect new content, but that fires after layout, not as the streaming delta arrives, so we end up scrolling one frame late on fast streams."
+ @e71 [text-view] "The gesture handler does not pause scroll-to-bottom while the user is actively dragging, which means a drag in progress can be visually overridden mid-frame."
+ @e72 [text-view] "The gesture handler does not pause scroll-to-bottom while the user is actively dragging, which means a drag in progress can be visually overridden mid-frame."
+ @e79 [text-view] "Coalescing happens upstream, so the FlatList sees fewer updates than the wire — but each batch can still cause a relayout."
+ @e80 [text-view] "Coalescing happens upstream, so the FlatList sees fewer updates than the wire — but each batch can still cause a relayout."
+ @e86 [text-view] "Let me make a small adjustment to the threshold and add a flag for active gestures, then run a quick command to confirm the order of events when streaming is fast."
+ @e87 [text-view] "Let me make a small adjustment to the threshold and add a flag for active gestures, then run a quick command to confirm the order of events when streaming is fast."
+ @e91 [button] "Edit, packages/app/src/hooks/use-scroll-anchor.ts"
+ @e93 [button] "Shell, node scripts/simulate-stream-burst.mjs"
+ @e98 [text-view] "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle"
+ @e99 [text-view] "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle 3"
+ @e105 [text-view] "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so"
+ @e106 [text-view] "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so the first useful step is to read the relevant files."
+ @e113 [button] "Scroll to bottom"
+ @e116 [text-view] "Message agent... Message, @files, /commands"
+ @e119 [button] "Add attachment"
+ @e121 [button] "Select model (Ten second stream)"
+ @e122 [image] "Context window 2% used"
+ @e123 [button] "Start dictation"
+ @e124 [button] "Enable Voice mode"
+ @e129 [window]
+ @e142 [scroll-area]
+ @e144 [other] "Typing Predictions"
+ @e147 [other] "I"
+ @e148 [other] "The"
+ @e149 [other] "I’m"
+ @e155 [keyboard]
… changed lines truncated
/Volumes/devbox/workspace/composer-scroll-ios-evidence/chat-gesture-open.png (402x874 @1x)
Panned (200, 210) by (0, 160)
/Volumes/devbox/workspace/composer-scroll-ios-evidence/chat-slow-down.png (402x874 @1x)
Flung down
/Volumes/devbox/workspace/composer-scroll-ios-evidence/chat-flick.png (402x874 @1x)
Slow scroll retained keyboard; flick keyboard visible=true; input heights=30,30,30
@@ -0,0 +1,26 @@
#!/bin/bash
set -euo pipefail
dir=/Volumes/devbox/workspace/composer-scroll-ios-evidence
ad(){ agent-device "$@" --session composer-scroll-ios; }
ad snapshot --raw --json > "$dir/gesture-target.json"
target=$(node -e 'const n=require(process.argv[1]).data.nodes.find(n=>n.type==="TextView" && n.label?.startsWith("Message agent")); console.log("@"+n.ref)' "$dir/gesture-target.json")
ad press "$target" --settle
ad snapshot --raw --json > "$dir/chat-gesture-open.json"
ad screenshot "$dir/chat-gesture-open.png"
ad gesture pan 200 210 0 160 1000
sleep 1
ad snapshot --raw --json > "$dir/chat-slow-down.json"
ad screenshot "$dir/chat-slow-down.png"
ad gesture fling down 200 180 230
sleep 1
ad snapshot --raw --json > "$dir/chat-flick.json"
ad screenshot "$dir/chat-flick.png"
node - "$dir" <<'JS'
const dir=process.argv[2];
const ns=name=>require(`${dir}/${name}.json`).data.nodes;
const keyboard=name=>ns(name).some(n=>n.type==='Keyboard'&&n.rect.y<874);
for(const name of ['chat-gesture-open','chat-slow-down']) if(!keyboard(name)) throw Error(`${name}: keyboard dismissed`);
const h=name=>ns(name).find(n=>n.type==='TextView'&&n.label?.startsWith('Message agent')).rect.height;
console.log(`Slow scroll retained keyboard; flick keyboard visible=${keyboard('chat-flick')}; input heights=${h('chat-gesture-open')},${h('chat-slow-down')},${h('chat-flick')}`);
if(Math.abs(h('chat-gesture-open')-h('chat-flick'))>1/3)throw Error('Flick changed input height');
JS
@@ -0,0 +1,19 @@
#!/bin/bash
set -euo pipefail
host="$1"
dir=/Volumes/devbox/workspace/composer-scroll-ios-evidence
ad(){ agent-device "$@" --session composer-scroll-ios; }
snap(){ ad snapshot --raw --json > "$dir/$host-$1.json"; }
ad press 398 118
sleep 5
ad screenshot "$dir/$host-native-submitted.png"
ad gesture fling down 200 200 300
sleep 2
ad screenshot "$dir/$host-native-after-submit.png"
for i in 1 2 3 4 5 6; do ad gesture fling up 200 650 450; done
sleep 5
ad screenshot "$dir/$host-native-bottom-idle.png"
ad gesture fling down 200 200 300
sleep 2
ad screenshot "$dir/$host-native-after-idle.png"
snap native-finished
@@ -0,0 +1,19 @@
Connecting to 3s0s50t248bag ...
Warning: Permanently added 'paseo-ios.devbox.namespace' (RSA) to the list of known hosts.
React Native overlay dismiss action sent and verified gone
Tapped label="Send message" (365, 801)
Tapped (398, 118)
/Volumes/devbox/workspace/composer-scroll-ios-evidence/chat-native-submitted.png (402x874 @1x)
Flung down
/Volumes/devbox/workspace/composer-scroll-ios-evidence/chat-native-after-submit.png (402x874 @1x)
Flung up
Flung up
Flung up
Flung up
Flung up
Flung up
/Volumes/devbox/workspace/composer-scroll-ios-evidence/chat-native-bottom-idle.png (402x874 @1x)
Flung down
/Volumes/devbox/workspace/composer-scroll-ios-evidence/chat-native-after-idle.png (402x874 @1x)
@@ -0,0 +1,37 @@
#!/bin/bash
set -euo pipefail
host="$1"
dir=/Volumes/devbox/workspace/composer-scroll-ios-evidence
mkdir -p "$dir"
ad() { agent-device "$@" --session composer-scroll-ios; }
snap() { ad snapshot --raw --json > "$dir/$host-$1.json"; }
clear_editor() {
# XCTest's fill can leave the offscreen tail; use the actual delete key.
snap target
target=$(node -e 'const n=require(process.argv[1]).data.nodes.find(n=>n.type==="TextView" && n.label?.startsWith("Message agent")); console.log("@"+n.ref)' "$dir/$host-target.json")
ad fill "$target" x || true
snap clearing
read -r x y < <(node -e 'const n=require(process.argv[1]).data.nodes.find(n=>n.type==="TextView" && n.label?.startsWith("Message agent")); console.log(n.rect.x+n.rect.width-3,n.rect.y+n.rect.height-8)' "$dir/$host-clearing.json")
ad press "$x" "$y"
ad longpress 376 720 12000
snap cleared
node -e 'const n=require(process.argv[1]).data.nodes.find(n=>n.type==="TextView" && n.label?.startsWith("Message agent")); if(n.value) throw Error("Draft not empty: "+n.value)' "$dir/$host-cleared.json"
}
clear_editor
snap empty-open
ad press 4 370
snap content-dismissed
snap target
target=$(node -e 'const n=require(process.argv[1]).data.nodes.find(n=>n.type==="TextView" && n.label?.startsWith("Message agent")); console.log("@"+n.ref)' "$dir/$host-target.json")
ad fill "$target" $'one\ntwo\nthree\nfour\nfive\nsix\nseven\neight\nnine\nten\neleven\ntwelve\nthirteen\nfourteen\nfifteen\nsixteen\nseventeen\neighteen\nnineteen\ntwenty'
snap cap-open
ad screenshot "$dir/$host-cap-open.png"
ad press 398 118
snap header-dismissed
ad screenshot "$dir/$host-header-dismissed.png"
snap target
target=$(node -e 'const n=require(process.argv[1]).data.nodes.find(n=>n.type==="TextView" && n.label?.startsWith("Message agent")); console.log("@"+n.ref)' "$dir/$host-target.json")
ad press "$target"
snap reopened
clear_editor
node /Volumes/devbox/workspace/composer-dock-ios-assert.cjs "$dir" "$host"
@@ -0,0 +1,234 @@
Connecting to 3s0s50t248bag ...
Warning: Permanently added 'paseo-ios.devbox.namespace' (RSA) to the list of known hosts.
Tapped (398, 118)
Tapped id="menu-button" (24, 98)
settled after 2154ms: +187 -7 (~123 unchanged)
+ @e2 [window]
+ @e4 [other] "Close menu"
+ @e5 [button] "Close menu"
+ @e127 [other] "Close sidebar"
+ @e128 [button] "Close sidebar"
+ @e129 [button] "New workspace"
+ @e130 [button] "History"
+ @e131 [button] "Search"
+ @e132 [button] "Schedules"
+ @e133 [scroll-area] "Pinned"
+ @e134 [other] "Pinned"
+ @e135 [button] "Pinned"
+ @e136 [scroll-area]
+ @e137 [cell] "skills, Skills"
+ @e138 [button] "skills, Skills"
+ @e139 [button] "Workspace actions"
+ @e140 [other] "hub, Hub"
+ @e141 [button] "hub, Hub"
+ @e142 [button] "Workspace actions"
+ @e143 [other] "assistant, Assistant"
+ @e144 [button] "assistant, Assistant"
+ @e145 [button] "Workspace actions"
+ @e146 [other] "paseo, Paseo"
+ @e147 [button] "paseo, Paseo"
+ @e148 [button] "Workspace actions"
+ @e149 [text] "Workspaces"
+ @e150 [button] "Display preferences"
+ @e151 [scroll-area] "Create a new workspace for assistant"
+ @e152 [other] "admiring-hamster, Create a new workspace for admiring-hamster, Project actions"
+ @e153 [button] "admiring-hamster, Create a new workspace for admiring-hamster, Project actions"
+ @e154 [button] "Create a new workspace for admiring-hamster"
+ @e155 [button] "Project actions"
+ @e156 [scroll-area]
+ @e157 [cell] "fix/terminal-keyboard-flicker, Pull request #4469"
+ @e158 [button] "fix/terminal-keyboard-flicker, Pull request #4469"
+ @e159 [button] "Workspace actions"
+ @e160 [link] "Pull request #4469"
+ @e161 [other] "Checks passed"
+ @e162 [cell] "A, assistant, Create a new workspace for assistant, Project actions"
+ @e163 [button] "A, assistant, Create a new workspace for assistant, Project actions"
+ @e164 [button] "Create a new workspace for assistant"
+ @e165 [button] "Project actions"
+ @e166 [button] "Create a new workspace for assistant"
+ @e167 [cell] "C, composer-dock-ios-fixture, Create a new workspace for composer-dock-ios-fixture, Project actions"
+ @e168 [button] "C, composer-dock-ios-fixture, Create a new workspace for composer-dock-ios-fixture, Project actions"
+ @e169 [button] "Create a new workspace for composer-dock-ios-fixture"
+ @e170 [button] "Project actions"
+ @e171 [scroll-area]
+ @e172 [other] "main"
+ @e173 [button] "main"
+ @e174 [button] "Workspace actions"
+ @e175 [cell] "editor, Create a new workspace for editor, Project actions"
+ @e176 [button] "editor, Create a new workspace for editor, Project actions"
+ @e177 [button] "Create a new workspace for editor"
+ @e178 [button] "Project actions"
+ @e179 [scroll-area]
+ @e180 [cell] "Find Blank Page PR pending review"
+ @e181 [button] "Find Blank Page PR pending review"
+ @e182 [button] "Workspace actions"
+ @e183 [cell] "Review #871 — sharing and handle flow, Pull request #871"
+ @e184 [button] "Review #871 — sharing and handle flow, Pull request #871"
+ @e185 [button] "Workspace actions"
+ @e186 [other] "Checks passed"
+ @e187 [cell] "G, greasy-yak, Create a new workspace for greasy-yak, Project actions"
+ @e188 [button] "G, greasy-yak, Create a new workspace for greasy-yak, Project actions"
+ @e189 [button] "Create a new workspace for greasy-yak"
+ @e190 [button] "Project actions"
+ @e191 [button] "Create a new workspace for greasy-yak"
+ @e192 [other] "H, hub, Create a new workspace for hub, Project actions"
+ @e193 [button] "H, hub, Create a new workspace for hub, Project actions"
+ @e194 [button] "Create a new workspace for hub"
+ @e195 [button] "Project actions"
+ @e196 [scroll-area]
+ @e197 [cell] "Fix hosted GitHub reply registration, Pull request #122"
+ @e198 [button] "Fix hosted GitHub reply registration, Pull request #122"
+ @e199 [button] "Workspace actions"
+ @e200 [link] "Pull request #122"
+ @e201 [other] "Checks passed"
+ @e202 [cell] "Steer existing agents by trigger context, Pull request #118"
+ @e203 [button] "Steer existing agents by trigger context, Pull request #118"
… changed lines truncated
Tapped id="sidebar-global-new-workspace" (201, 86)
settled after 834ms: +10 -304 (~6 unchanged)
- @e3 [other] "Switch tabs (2 open)"
- @e4 [other] "Close menu"
- @e5 [button] "Close menu"
- @e6 [other] "main"
- @e7 [text] "composer-dock-ios-fixture"
- @e8 [text] "·"
- @e9 [other] "dev-new"
- @e10 [text] "dev-new"
- @e11 [button] "Workspace actions"
- @e12 [button] "Open Explorer sidebar"
- @e13 [button] "Switch tabs (2 open)"
- @e14 [other] "Add attachment"
+ @e3 [other] "Open menu"
+ @e4 [button] "Open menu"
+ @e5 [other] "New workspace"
+ @e6 [button] "Workspace project"
+ @e7 [text] "C"
+ @e8 [button] "Workspace isolation"
+ @e9 [button] "Choose what to launch"
- @e16 [other] "Scroll to bottom"
- @e17 [scroll-area] "Thinking"
- @e18 [other] "Native scroll fixture 0: distinct history row after submitting from a dock host.
Native scroll fixture 1: distinct history row after submitting from a dock host.
Native scroll fixture 2: distinct history row after submitting from a dock host.
Native scroll fixture 3: distinct history row after submitting from a dock host.
Native scroll fixture 4: distinct history row after submitting from a dock host.
Native scroll fixture 5: distinct history row after submitting from a dock host.
Native scroll fixture 6: distinct history row after submitting from a dock host.
Native scroll fixture 7: distinct history row after submitting from a dock host.
Native scroll fixture 8: distinct history row after submitting from a dock host.
Native scroll fixture 9: distinct history row after submitting from a dock host.
Native scroll fixture 10: distinct history row after submitting from a dock host.
Native scroll fixture 11: distinct history row after submitting from a dock host.
Native scroll fixture 12: distinct history row after submitting from a dock host.
Native scroll fixture 13: distinct history row after submitting from a dock host.
Native scroll fixture 14: distinct history row after submitting from a dock host.
Native scroll fixture 15: distinct history row after submitting from a dock host.
Native scroll fixture 16: distinct history row after submitting from a dock host.
Native scroll fixture 17: distinct history row after submitting from a dock host.
Native scroll fixture 18: distinct history row after submitting from a dock host.
Native scroll fixture 19: distinct history row after submitting from a dock host.
Native scroll fixture 20: distinct history row after submitting from a dock host.
Native scroll fixture 21: distinct history row after submitting from a dock host.
Native scroll fixture 22: distinct history row after submitting from a dock host.
Native scroll fixture 23: distinct history row after submitting from a dock host.
Native scroll fixture 24: distinct history row after submitting from a dock host.
Native scroll fixture 25: distinct history row after submitting from a dock host.
Native scroll fixture 26: distinct history row after submitting from a dock host.
Native scroll fixture 27: distinct history row after submitting from a dock host.
Native scroll fixture 28: distinct history row after submitting from a dock host.
Native scroll fixture 29: distinct history row after submitting from a dock host.
Native scroll fixture 30: distinct history row after submitting from a dock host.
Native scroll fixture 31: distinct history row after submitting from a dock host.
Native scroll fixture 32: distinct history row after submitting from a dock host.
Native scroll fixture 33: distinct history row after submitting from a dock host.
Native scroll fixture 34: distinct history row after submitting from a dock host.
Native scroll fixture 35: distinct history row after submitting from a dock host.
Native scroll fixture 36: distinct history row after submitting from a dock host.
Native scroll fixture 37: distinct history row after submitting from a dock host.
Native scroll fixture 38: distinct history row after submitting from a dock host.
Native scroll fixture 39: distinct history row after submitting from a dock host.
Native scroll fixture 40: distinct history row after submitting from a dock host.
Native scroll fixture 41: distinct history row after submitting from a dock host.
Native scroll fixture 42: distinct history row after submitting from a dock host.
Native scroll fi"
- @e19 [text] "8:53 PM"
- @e20 [button] "Rewind to this message"
- @e21 [button] "Copy message"
- @e22 [other] "Cycle 1"
- @e23 [text-view] "Cycle 1"
- @e24 [text-view] "Cycle 1"
- @e25 [other] "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so"
- @e26 [text-view] "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so"
- @e27 [text-view] "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so the first useful step is to read the relevant files."
- @e28 [other] "Thinking"
- @e29 [button] "Thinking"
- @e30 [other] "Read, packages/app/src/components/conversation-list.tsx"
- @e31 [button] "Read, packages/app/src/components/conversation-list.tsx"
- @e32 [other] "Search, scrollToEnd"
- @e33 [button] "Search, scrollToEnd"
- @e34 [other] "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:"
- @e35 [text-view] "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:"
- @e36 [text-view] "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:"
- @e37 [text] "•"
- @e38 [cell] "The threshold for 'near the bottom' is hardcoded at 80px, which feels too tight on dense content where headers and tool calls take up a lot of vertical space."
- @e39 [text-view] "The threshold for 'near the bottom' is hardcoded at 80px, which feels too tight on dense content where headers and tool calls take up a lot of vertical space."
- @e40 [text-view] "The threshold for 'near the bottom' is hardcoded at 80px, which feels too tight on dense content where headers and tool calls take up a lot of vertical space."
- @e41 [text] "•"
- @e42 [cell] "We rely on onContentSizeChange to detect new content, but that fires after layout, not as the streaming delta arrives, so we end up scrolling one frame late on fast streams."
- @e43 [text-view] "We rely on onContentSizeChange to detect new content, but that fires after layout, not as the streaming delta arrives, so we end up scrolling one frame late on fast streams."
- @e44 [text-view] "We rely on onContentSizeChange to detect new content, but that fires after layout, not as the streaming delta arrives, so we end up scrolling one frame late on fast streams."
- @e45 [text] "•"
- @e46 [cell] "The gesture handler does not pause scroll-to-bottom while the user is actively dragging, which means a drag in progress can be visually overridden mid-frame."
- @e47 [text-view] "The gesture handler does not pause scroll-to-bottom while the user is actively dragging, which means a drag in progress can be visually overridden mid-frame."
- @e48 [text-view] "The gesture handler does not pause scroll-to-bottom while the user is actively dragging, which means a drag in progress can be visually overridden mid-frame."
- @e49 [text] "•"
- @e50 [cell] "Coalescing happens upstream, so the FlatList sees fewer updates than the wire — but each batch can still cause a relayout."
- @e51 [text-view] "Coalescing happens upstream, so the FlatList sees fewer updates than the wire — but each batch can still cause a relayout."
- @e52 [text-view] "Coalescing happens upstream, so the FlatList sees fewer updates than the wire — but each batch can still cause a relayout."
- @e53 [cell] "Let me make a small adjustment to the threshold and add a flag for active gestures, then run a quick command to confirm the order of events when streaming is fast."
- @e54 [text-view] "Let me make a small adjustment to the threshold and add a flag for active gestures, then run a quick command to confirm the order of events when streaming is fast."
- @e55 [other] "Edit, packages/app/src/hooks/use-scroll-anchor.ts"
- @e56 [button] "Edit, packages/app/src/hooks/use-scroll-anchor.ts"
- @e57 [other] "Shell, node scripts/simulate-stream-burst.mjs"
- @e58 [button] "Shell, node scripts/simulate-stream-burst.mjs"
- @e59 [other] "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle"
- @e60 [text-view] "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle"
- @e61 [text-view] "The change should keep scroll-to-bottom working when the user is at the bottom while not yanking the viewport when they are reading earlier messages. The bash output confirms the userIsAtBottom flag flips correctly during a simulated streaming burst, and the gesture flag suppresses scroll while a drag is active. If you want, I can follow up with a regression test that drives the FlatList with synthetic deltas at high frequency to lock in the behavior. For now, I'll stop here so you can take a look.## Cycle 2"
- @e62 [other] "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so"
- @e63 [text-view] "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so"
- @e64 [text-view] "I'll take a look at the scroll anchor behavior you described. Let me start by walking through how the conversation list currently handles streaming updates and where the auto-scroll logic actually lives. My instinct is that the anchor is supposed to pin to the bottom only when the user is already there, but I want to confirm that against the code rather than guess. This kind of behavior is usually a thin layout effect over a ref, and the bugs tend to come from event ordering rather than the math itself, so the first useful step is to read the relevant files."
- @e65 [other] "Thinking"
- @e66 [button] "Thinking"
- @e67 [other] "Read, packages/app/src/components/conversation-list.tsx"
- @e68 [button] "Read, packages/app/src/components/conversation-list.tsx"
- @e69 [other] "Search, scrollToEnd"
- @e70 [button] "Search, scrollToEnd"
- @e71 [other] "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:"
- @e72 [text-view] "Now I have a clearer picture. The auto-scroll uses a ref on the FlatList and tracks whether the user has scrolled away from the bottom by comparing the offset against the content size. There are a few subtle issues worth flagging before we change anything:"
- @e73 [text] "•"
+ @e13 [other] "Select model (Select model)"
+ @e14 [button] "Select model (Select model)"
+ @e16 [button] "Create"
… changed lines truncated
Filled 1 chars
Tapped (370, 465)
Long pressed (376, 720)
Tapped (4, 370)
Filled 131 chars
/Volumes/devbox/workspace/composer-scroll-ios-evidence/new-workspace-cap-open.png (402x874 @1x)
Tapped (398, 118)
/Volumes/devbox/workspace/composer-scroll-ios-evidence/new-workspace-header-dismissed.png (402x874 @1x)
Tapped @e54 (201, 609)
Error (TEXT_ENTRY_MISMATCH): text entry verification failed: expected "x", observed "x
seventeen
eighteen
nineteen
twenty"
Hint: Retry with --debug and inspect diagnostics log for details.
Diagnostic ID: mu4l31h0-f92c6619
Diagnostics Log: /Users/runner/.agent-device/sessions/composer-scroll-ios/runner.log
Tapped (370, 465)
Long pressed (376, 720)
PASS iOS host=new-workspace: content/header dismissal, cap close/reopen 333pt, empty/reset 30pt, header/keyboard bounds
File diff suppressed because it is too large Load Diff
+5
View File
@@ -0,0 +1,5 @@
Native swipe moved stream content: 28.64% changed
Native swipe moved stream content: 29.79% changed
PASS iOS chat: content/header dismiss; empty 30pt; cap 298pt retained after dismissal/reopen; cleared 30pt
PASS iOS workspace-draft: content/header dismiss; empty 30pt; cap 250pt retained after dismissal/reopen; cleared 30pt
PASS iOS new-workspace: content/header dismiss; empty 30pt; cap 333pt retained after dismissal/reopen; cleared 30pt
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

@@ -0,0 +1,206 @@
Connecting to 3s0s50t248bag ...
Warning: Permanently added 'paseo-ios.devbox.namespace' (RSA) to the list of known hosts.
Tapped (398, 118)
Tapped id="menu-button" (24, 98)
settled after 2066ms: +183 -7 (~19 unchanged)
+ @e2 [window]
+ @e4 [other] "Close menu"
+ @e5 [button] "Close menu"
+ @e23 [other] "Close sidebar"
+ @e24 [button] "Close sidebar"
+ @e25 [button] "New workspace"
+ @e26 [button] "History"
+ @e27 [button] "Search"
+ @e28 [button] "Schedules"
+ @e29 [scroll-area] "Pinned"
+ @e30 [other] "Pinned"
+ @e31 [button] "Pinned"
+ @e32 [scroll-area]
+ @e33 [cell] "skills, Skills"
+ @e34 [button] "skills, Skills"
+ @e35 [button] "Workspace actions"
+ @e36 [other] "hub, Hub, Ready to review"
+ @e37 [button] "hub, Hub, Ready to review"
+ @e38 [button] "Workspace actions"
+ @e39 [other] "assistant, Assistant"
+ @e40 [button] "assistant, Assistant"
+ @e41 [button] "Workspace actions"
+ @e42 [other] "paseo, Paseo"
+ @e43 [button] "paseo, Paseo"
+ @e44 [button] "Workspace actions"
+ @e45 [text] "Workspaces"
+ @e46 [button] "Display preferences"
+ @e47 [scroll-area] "Create a new workspace for assistant"
+ @e48 [other] "admiring-hamster, Create a new workspace for admiring-hamster, Project actions"
+ @e49 [button] "admiring-hamster, Create a new workspace for admiring-hamster, Project actions"
+ @e50 [button] "Create a new workspace for admiring-hamster"
+ @e51 [button] "Project actions"
+ @e52 [scroll-area]
+ @e53 [cell] "fix/terminal-keyboard-flicker, Pull request #4469"
+ @e54 [button] "fix/terminal-keyboard-flicker, Pull request #4469"
+ @e55 [button] "Workspace actions"
+ @e56 [other] "Checks passed"
+ @e57 [cell] "A, assistant, Create a new workspace for assistant, Project actions"
+ @e58 [button] "A, assistant, Create a new workspace for assistant, Project actions"
+ @e59 [button] "Create a new workspace for assistant"
+ @e60 [button] "Project actions"
+ @e61 [button] "Create a new workspace for assistant"
+ @e62 [cell] "C, composer-dock-ios-fixture, Create a new workspace for composer-dock-ios-fixture, Project actions"
+ @e63 [button] "C, composer-dock-ios-fixture, Create a new workspace for composer-dock-ios-fixture, Project actions"
+ @e64 [button] "Create a new workspace for composer-dock-ios-fixture"
+ @e65 [button] "Project actions"
+ @e66 [scroll-area]
+ @e67 [other] "main"
+ @e68 [button] "main"
+ @e69 [button] "Workspace actions"
+ @e70 [cell] "editor, Create a new workspace for editor, Project actions"
+ @e71 [button] "editor, Create a new workspace for editor, Project actions"
+ @e72 [button] "Create a new workspace for editor"
+ @e73 [button] "Project actions"
+ @e74 [scroll-area]
+ @e75 [cell] "Find Blank Page PR pending review"
+ @e76 [button] "Find Blank Page PR pending review"
+ @e77 [button] "Workspace actions"
+ @e78 [cell] "Review #871 — sharing and handle flow, Pull request #871"
+ @e79 [button] "Review #871 — sharing and handle flow, Pull request #871"
+ @e80 [button] "Workspace actions"
+ @e81 [text] "·"
+ @e82 [other] "Checks passed"
+ @e83 [cell] "G, greasy-yak, Create a new workspace for greasy-yak, Project actions"
+ @e84 [button] "G, greasy-yak, Create a new workspace for greasy-yak, Project actions"
+ @e85 [button] "Create a new workspace for greasy-yak"
+ @e86 [button] "Project actions"
+ @e87 [button] "Create a new workspace for greasy-yak"
+ @e88 [other] "H, hub, Create a new workspace for hub, Project actions"
+ @e89 [button] "H, hub, Create a new workspace for hub, Project actions"
+ @e90 [button] "Create a new workspace for hub"
+ @e91 [button] "Project actions"
+ @e92 [scroll-area]
+ @e93 [cell] "Fix hosted GitHub reply registration, Pull request #122"
+ @e94 [button] "Fix hosted GitHub reply registration, Pull request #122"
+ @e95 [button] "Workspace actions"
+ @e96 [other] "Checks passed"
+ @e97 [cell] "Steer existing agents by trigger context, Pull request #118"
+ @e98 [button] "Steer existing agents by trigger context, Pull request #118"
+ @e99 [button] "Workspace actions"
… changed lines truncated
Tapped id="sidebar-global-new-workspace" (201, 86)
settled after 2238ms: +49 -202 (~0 unchanged)
- @e1 [application] "Paseo Debug"
- @e2 [window]
- @e3 [other] "Switch tabs (2 open)"
- @e4 [other] "Close menu"
- @e5 [button] "Close menu"
- @e6 [other] "main"
- @e7 [text] "composer-dock-ios-fixture"
- @e8 [text] "·"
- @e9 [other] "dev-new"
- @e10 [text] "dev-new"
- @e11 [button] "Workspace actions"
- @e12 [button] "Open Explorer sidebar"
- @e13 [button] "Switch tabs (2 open)"
- @e14 [other] "Import session"
- @e15 [scroll-area]
- @e16 [button] "Import session"
- @e17 [other] "Message agent... Message, @files, /commands"
- @e18 [text-view] "Message agent... Message, @files, /commands"
- @e19 [button] "Add attachment"
- @e20 [other] "Select model (Select model)"
- @e21 [button] "Select model (Select model)"
- @e22 [button] "Start dictation"
- @e23 [other] "Close sidebar"
- @e24 [button] "Close sidebar"
- @e25 [button] "New workspace"
- @e26 [button] "History"
- @e27 [button] "Search"
- @e28 [button] "Schedules"
- @e29 [scroll-area] "Pinned"
- @e30 [other] "Pinned"
- @e31 [button] "Pinned"
+ @e1 [application] "Paseo Debug"
+ @e2 [window]
+ @e3 [other]
+ @e4 [other]
+ @e5 [other]
+ @e6 [other]
+ @e7 [other]
+ @e8 [other]
+ @e9 [other]
+ @e10 [other]
+ @e11 [other]
+ @e12 [other]
+ @e13 [other]
+ @e14 [other]
+ @e15 [other]
+ @e16 [other]
+ @e17 [other]
+ @e18 [other]
+ @e19 [other]
+ @e20 [other]
+ @e21 [other]
+ @e22 [other]
+ @e23 [button] "Open menu"
+ @e24 [other]
+ @e25 [other]
+ @e26 [other]
+ @e27 [text] "New workspace"
+ @e28 [button] "Workspace project"
+ @e29 [text] "C"
+ @e30 [button] "Workspace isolation"
+ @e31 [other]
+ @e32 [button] "Choose what to launch"
+ @e33 [other]
+ @e34 [other]
+ @e35 [text-view] "Message agent... Message, @files, /commands"
+ @e36 [other]
+ @e37 [other]
+ @e38 [button] "Add attachment"
+ @e39 [other]
+ @e40 [button] "Select model (Select model)"
+ @e41 [button] "Start dictation"
+ @e42 [button] "Create"
+ @e43 [other]
+ @e44 [other]
+ @e45 [other]
+ @e46 [other]
+ @e47 [window]
+ @e48 [other]
+ @e49 [other]
… changed lines truncated
Filled 1 chars
Tapped (370, 465)
Long pressed (376, 720)
Tapped (4, 370)
Filled 131 chars
/Volumes/devbox/workspace/composer-scroll-ios-evidence/new-workspace-cap-open.png (402x874 @1x)
Tapped (398, 118)
/Volumes/devbox/workspace/composer-scroll-ios-evidence/new-workspace-header-dismissed.png (402x874 @1x)
Tapped @e51 (201, 609)
Error (TEXT_ENTRY_MISMATCH): text entry verification failed: expected "x", observed "x
seventeen
eighteen
nineteen
twenty"
Hint: Retry with --debug and inspect diagnostics log for details.
Diagnostic ID: mu4kztek-1dc7138c
Diagnostics Log: /Users/runner/.agent-device/sessions/composer-scroll-ios/runner.log
Tapped (370, 465)
Long pressed (376, 720)
/Volumes/devbox/workspace/composer-dock-ios-assert.cjs:6
for(const name of ['content-dismissed','header-dismissed']) if(keyboard(read(name))) throw Error(`${name}: keyboard still visible`);
^
Error: content-dismissed: keyboard still visible
at Object.<anonymous> (/Volumes/devbox/workspace/composer-dock-ios-assert.cjs:6:92)
at Module._compile (node:internal/modules/cjs/loader:1706:14)
at Object..js (node:internal/modules/cjs/loader:1839:10)
at Module.load (node:internal/modules/cjs/loader:1441:32)
at Function._load (node:internal/modules/cjs/loader:1263:12)
at TracingChannel.traceSync (node:diagnostics_channel:322:14)
at wrapModuleLoad (node:internal/modules/cjs/loader:237:24)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:171:5)
at node:internal/main/run_main_module:36:49
Node.js v22.20.0
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1
View File
@@ -0,0 +1 @@
Native swipe moved stream content: 27.82% changed
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff