$ node scripts/prove-scenario.ts scripts/scenarios/conversation-keyboard-scroll.e2e.ts --base 95cb068c10a6cf0b33eed0a0cab3b298763fe852 --head a57e41868355edb54ab69ec30b445f0272671d5f --upload-command 'ghdrop upload' ⊘ cache disabled RUN e2e v0.23.0 run 01a1d2de-58ae-7eef-927b-ebbfcad89a2d · targets: web, ios ✓ target "web" command at http://127.0.0.1:33301/.well-known/t3/environment ready 5.82s ✓ target "ios" command at http://127.0.0.1:8190/status ready 6.49s stdout | |web| scenarios/conversation-keyboard-scroll.e2e.ts > Conversation scrolls after a click, Shift+F6, and an empty conversation gains messages click { before: 106, arrow: 106, page: 106 } shift-f6 { before: 0, arrow: 0, page: 0 } forward-f6 { before: 0, arrow: 0, page: 0 } populated-empty-thread { before: 0, arrow: 0, page: 0 } Keyboard reproduction results { 'click-arrow': false, 'click-page': false, 'f6-preserves-position': true, 'shift-f6-arrow': false, 'shift-f6-page': false, 'space-focuses-composer': true, 'forward-f6-arrow': false, 'forward-f6-page': false, 'populated-empty-thread-arrow': false, 'populated-empty-thread-page': false } × |web| scenarios/conversation-keyboard-scroll.e2e.ts > Conversation scrolls after a click, Shift+F6, and an empty conversation gains messages 47.44s → expected {"click-arrow":false,"click-page":false,"f6-preserves-position"… ❯ |web| scenarios/conversation-keyboard-scroll.e2e.ts (1 test | 1 failed) 47.44s ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ FAIL |web| scenarios/conversation-keyboard-scroll.e2e.ts > Conversation scrolls after a click, Shift+F6, and an empty conversation gains messages ASSERTION_FAILED: expected {"click-arrow":false,"click-page":false,"f6-preserves-position":true,"shift-f6-arrow":false,"shift-f6-page":false,"space-focuses-composer":true,"forward-f6-arrow":false,"forward-f6-page":false,"populated-empty-thread-arrow":false,"populated-empty-thread-page":false} to equal {"click-arrow":true,"click-page":true,"f6-preserves-position":true,"shift-f6-arrow":true,"shift-f6-page":true,"space-focuses-composer":true,"forward-f6-arrow":true,"forward-f6-page":true,"populated-empty-thread-arrow":true,"populated-empty-thread-page":true} ❯ scenarios/conversation-keyboard-scroll.e2e.ts:63:19 61| await keys("populated-empty-thread"); 62| console.log("Keyboard reproduction results", results); 63| expect(results).toEqual(Object.fromEntries(Object.keys(results).map… | ^ 64| }); 65| ❯ at http://127.0.0.1:33301/23d8b8f6-1fe5-4226-8a3c-5c35d34801f9/86477fab-037d-465e-a894-677df502059f ❯ app 1 error, 2 warnings logged × console error: WebSocket connection to 'ws://127.0.0.1:33301/ws?clientSurface=web&clientAppVersion=0.1.9&clientDeviceType=desktop&clientOs=Linux&clientWebDeployment=server&clientBrowser=Chrome&connectionMethod=direct&clientDevice=1512f7bca0b8ed034e06002616e4189b9612ec7ef8f9214c5045f2d63d520c64&orchestrationProtoc… ❯ trace .e2e/prove/base/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/trace.md ❯ video .e2e/prove/base/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/video/video.webm ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ Test Files 1 failed | 0 passed (1) Tests 1 failed | 0 passed (1) Start at 03:05:50 Duration 60.68s (1m 1s, startup 12.31s) Traces .e2e/prove/base/results/ (1 page, trace.md in each test's directory) Screenshots .e2e/prove/base/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/001-click-before-keys.png .e2e/prove/base/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/002-click-after-keys.png .e2e/prove/base/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/003-shift-f6-before-keys.png .e2e/prove/base/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/004-shift-f6-after-keys.png .e2e/prove/base/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/005-forward-f6-before-keys.png .e2e/prove/base/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/006-forward-f6-after-keys.png .e2e/prove/base/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/007-empty-conversation-focus.png .e2e/prove/base/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/008-populated-empty-thread-before-keys.png .e2e/prove/base/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/009-populated-empty-thread-after-keys.png Markdown .e2e/prove/base/summary.md Failed × |web| scenarios/conversation-keyboard-scroll.e2e.ts:63 > Conversation scrolls after a click, Shift+F6, and an empty conversation gains messages ASSERTION_FAILED: expected {"click-arrow":false,"click-page":false,"f6-preserves-position":true,"shift-f6-arrow":false,"shift-f6-page":false,"space-focuses-composer":true,"forward-f6-arrow":false,"forward-f6-page":false,"populated-empty-thread-arrow":false,"populated-empty-thread-page":false} to equal {"click-arrow":true,"click-page":true,"f6-preserves-position":true,"shift-f6-arrow":true,"shift-f6-page":true,"space-focuses-composer":true,"forward-f6-arrow":true,"forward-f6-page":true,"populated-empty-thread-arrow":true,"populated-empty-thread-page":true} trace .e2e/prove/base/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/trace.md Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 12m ago) Lockfile is up to date, resolution step is skipped Packages are hard linked from the content-addressable store to the virtual store. Content-addressable store is at: Virtual store is at: node_modules/.pnpm Progress: resolved 348, reused 348, downloaded 0, added 333 Progress: resolved 688, reused 688, downloaded 0, added 673 Progress: resolved 1003, reused 1003, downloaded 0, added 988 Progress: resolved 1461, reused 1461, downloaded 0, added 1446 Progress: resolved 1581, reused 1581, downloaded 0, added 1566 Progress: resolved 1759, reused 1758, downloaded 0, added 1747 Progress: resolved 1772, reused 1772, downloaded 0, added 1766 Packages: +1779 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Progress: resolved 1779, reused 1775, downloaded 0, added 1779, done Agent skills awaiting approval: e2e. Run "pnpm approve" to review them. . prepare$ vp config --no-agent . prepare: Done devDependencies: + @coderabbitai/config 1.2.0 + @effect/tsgo 0.67.1 + @shadcn/lint 0.1.5 + @types/node 24.12.4 + knip 6.34.0 + vite-plus 1.4.0 Done in 10.3s using pnpm v12.14.0 RUN e2e v0.23.0 run 01a1d2df-7b9e-749c-b13b-4f10015e960e · targets: web, ios ✓ target "web" command at http://127.0.0.1:33747/.well-known/t3/environment ready 6.08s ✓ target "ios" command at http://127.0.0.1:8190/status ready 5.98s stdout | |web| scenarios/conversation-keyboard-scroll.e2e.ts > Conversation scrolls after a click, Shift+F6, and an empty conversation gains messages click { before: 106, arrow: 146, page: 800 } shift-f6 { before: 0, arrow: 40, page: 694 } forward-f6 { before: 0, arrow: 40, page: 694 } populated-empty-thread { before: 0, arrow: 40, page: 273 } Keyboard reproduction results { 'click-arrow': true, 'click-page': true, 'f6-preserves-position': true, 'shift-f6-arrow': true, 'shift-f6-page': true, 'space-focuses-composer': true, 'forward-f6-arrow': true, 'forward-f6-page': true, 'populated-empty-thread-arrow': true, 'populated-empty-thread-page': true } ✓ |web| scenarios/conversation-keyboard-scroll.e2e.ts > Conversation scrolls after a click, Shift+F6, and an empty conversation gains messages 54.71s ✓ |web| scenarios/conversation-keyboard-scroll.e2e.ts (1 test) 54.71s Test Files 1 passed (1) Tests 1 passed (1) Start at 03:07:04 Duration 67.66s (1m 8s, startup 12.07s) Traces .e2e/prove/head/results/ (1 page, trace.md in each test's directory) Screenshots .e2e/prove/head/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/001-click-before-keys.png .e2e/prove/head/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/002-click-after-keys.png .e2e/prove/head/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/003-shift-f6-before-keys.png .e2e/prove/head/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/004-shift-f6-after-keys.png .e2e/prove/head/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/005-forward-f6-before-keys.png .e2e/prove/head/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/006-forward-f6-after-keys.png .e2e/prove/head/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/007-empty-conversation-focus.png .e2e/prove/head/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/008-populated-empty-thread-before-keys.png .e2e/prove/head/results/conversation-keyboard-scroll-conversation-scrolls-after-a-50470b7c26450d9d/attempt-1/screenshots/009-populated-empty-thread-after-keys.png Markdown .e2e/prove/head/summary.md { "scenario": "Conversation scrolls after a click, Shift+F6, and an empty conversation gains messages", "failsOnBase": true, "passesOnHead": true, "baseSha": "95cb068c10a6cf0b33eed0a0cab3b298763fe852", "headSha": "a57e41868355edb54ab69ec30b445f0272671d5f", "verdict": "Proven: the scenario fails on base `95cb068c10` and passes on head `a57e418683`.", "steps": { "base": [ { "step": "app.open ", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Reading history, Done, Keyboard scrolling\")", "status": "passed" }, { "step": "locator.waitFor locator(\".messages-timeline-scroll\") → visible", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "screen.tapAt (1250, 426)", "status": "passed" }, { "step": "app.screenshot click-before-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press ArrowDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press PageDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot click-after-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "locator.tap getByRole(\"textbox\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press Shift+F6", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot shift-f6-before-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press ArrowDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press PageDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot shift-f6-after-keys", "status": "passed" }, { "step": "browser.keyboard.press Space", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "browser.keyboard.press F6", "status": "passed" }, { "step": "browser.keyboard.press F6", "status": "passed" }, { "step": "browser.keyboard.press F6", "status": "passed" }, { "step": "app.screenshot forward-f6-before-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press ArrowDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press PageDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot forward-f6-after-keys", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"New thread\")", "status": "passed" }, { "step": "locator.tap getByRole(\"textbox\")", "status": "passed" }, { "step": "browser.keyboard.press Shift+F6", "status": "passed" }, { "step": "app.screenshot empty-conversation-focus", "status": "passed" }, { "step": "browser.keyboard.press Space", "status": "passed" }, { "step": "locator.fill getByRole(\"textbox\")", "status": "passed" }, { "step": "locator.press getByRole(\"textbox\")", "status": "passed" }, { "step": "locator.waitFor getByText(\"This turn is a replay.\") → visible", "status": "passed" }, { "step": "locator.waitFor getByRole(\"button\", name: \"Stop generation\") → hidden", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "locator.tap getByRole(\"textbox\")", "status": "passed" }, { "step": "browser.keyboard.press Shift+F6", "status": "passed" }, { "step": "browser.keyboard.press F6", "status": "passed" }, { "step": "browser.keyboard.press Shift+F6", "status": "passed" }, { "step": "app.screenshot populated-empty-thread-before-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press ArrowDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press PageDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot populated-empty-thread-after-keys", "status": "passed" } ], "head": [ { "step": "app.open ", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Reading history, Done, Keyboard scrolling\")", "status": "passed" }, { "step": "locator.waitFor locator(\".messages-timeline-scroll\") → visible", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "screen.tapAt (1250, 426)", "status": "passed" }, { "step": "app.screenshot click-before-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press ArrowDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press PageDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot click-after-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "locator.tap getByRole(\"textbox\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press Shift+F6", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot shift-f6-before-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press ArrowDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press PageDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot shift-f6-after-keys", "status": "passed" }, { "step": "browser.keyboard.press Space", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "browser.keyboard.press F6", "status": "passed" }, { "step": "browser.keyboard.press F6", "status": "passed" }, { "step": "browser.keyboard.press F6", "status": "passed" }, { "step": "app.screenshot forward-f6-before-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press ArrowDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press PageDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot forward-f6-after-keys", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"New thread\")", "status": "passed" }, { "step": "locator.tap getByRole(\"textbox\")", "status": "passed" }, { "step": "browser.keyboard.press Shift+F6", "status": "passed" }, { "step": "app.screenshot empty-conversation-focus", "status": "passed" }, { "step": "browser.keyboard.press Space", "status": "passed" }, { "step": "locator.fill getByRole(\"textbox\")", "status": "passed" }, { "step": "locator.press getByRole(\"textbox\")", "status": "passed" }, { "step": "locator.waitFor getByText(\"This turn is a replay.\") → visible", "status": "passed" }, { "step": "locator.waitFor getByRole(\"button\", name: \"Stop generation\") → hidden", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "locator.tap getByRole(\"textbox\")", "status": "passed" }, { "step": "browser.keyboard.press Shift+F6", "status": "passed" }, { "step": "browser.keyboard.press F6", "status": "passed" }, { "step": "browser.keyboard.press Shift+F6", "status": "passed" }, { "step": "app.screenshot populated-empty-thread-before-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press ArrowDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press PageDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot populated-empty-thread-after-keys", "status": "passed" } ] }, "captures": [ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" ], "videos": [ "", "" ], "markdown": "### Scenario: Conversation scrolls after a click, Shift+F6, and an empty conversation gains messages\n\n**Proven: the scenario fails on base `95cb068c10` and passes on head `a57e418683`.**\n\n| | Base `95cb068c10` | Head `a57e418683` |\n| --- | --- | --- |\n| Result | ❌ failed
ASSERTION_FAILED: expected {\"click-arrow\":false,\"click-page\":false,\"f6-preserves-position\":true,\"shift-f6-arrow\":false,\"shift-f6-page\":false,\"space-focuses-composer\":true,\"forward-f6-arrow\":false,\"forward-f6-page\":false,\"populated-empty-thread-arrow\":false,\"populated-empty-thread-page\":false} to equal {\"click-arrow\":true,\"click-page\":true,\"f6-preserves-position\":true,\"shift-f6-arrow\":true,\"shift-f6-page\":true,\"space-focuses-composer\":true,\"forward-f6-arrow\":true,\"forward-f6-page\":true,\"populated-empty-thread-arrow\":true,\"populated-empty-thread-page\":true} | ✅ passed |\n| click before keys | ![Base 95cb068c10: click before keys](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/defd61e082b746d4/001-click-before-keys.png) | ![Head a57e418683: click before keys](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cd8a1f956b3652c8/001-click-before-keys.png) |\n| click after keys | ![Base 95cb068c10: click after keys](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9d9df78746d6d19c/002-click-after-keys.png) | ![Head a57e418683: click after keys](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/5918220b806db398/002-click-after-keys.png) |\n| shift f6 before keys | ![Base 95cb068c10: shift f6 before keys](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d8d9799b1bb9aef7/003-shift-f6-before-keys.png) | ![Head a57e418683: shift f6 before keys](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f06d3e0a86cf2948/003-shift-f6-before-keys.png) |\n| shift f6 after keys | ![Base 95cb068c10: shift f6 after keys](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d68366ad18befba5/004-shift-f6-after-keys.png) | ![Head a57e418683: shift f6 after keys](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b7024e80bee1cccd/004-shift-f6-after-keys.png) |\n| forward f6 before keys | ![Base 95cb068c10: forward f6 before keys](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3f6684fbff615449/005-forward-f6-before-keys.png) | ![Head a57e418683: forward f6 before keys](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8eb7660b9bb58ecc/005-forward-f6-before-keys.png) |\n| forward f6 after keys | ![Base 95cb068c10: forward f6 after keys](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/98e5261bb9430111/006-forward-f6-after-keys.png) | ![Head a57e418683: forward f6 after keys](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4375698113d9b327/006-forward-f6-after-keys.png) |\n| empty conversation focus | ![Base 95cb068c10: empty conversation focus](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/89dd8639fe9c31a0/007-empty-conversation-focus.png) | ![Head a57e418683: empty conversation focus](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f65dfa3910b8989e/007-empty-conversation-focus.png) |\n| populated empty thread before keys | ![Base 95cb068c10: populated empty thread before keys](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a1f11c077c22b8a0/008-populated-empty-thread-before-keys.png) | ![Head a57e418683: populated empty thread before keys](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/b3d1392cd649ae31/008-populated-empty-thread-before-keys.png) |\n| populated empty thread after keys | ![Base 95cb068c10: populated empty thread after keys](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a6f557328ae534b9/009-populated-empty-thread-after-keys.png) | ![Head a57e418683: populated empty thread after keys](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/30db51ace9df4b5a/009-populated-empty-thread-after-keys.png) |\n| failure | ![Base 95cb068c10: failure](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3c424004b7e36a09/010-failure.png) | |\n", "base": { "sha": "95cb068c10a6cf0b33eed0a0cab3b298763fe852", "status": "failed", "title": "Conversation scrolls after a click, Shift+F6, and an empty conversation gains messages", "message": "ASSERTION_FAILED: expected {\"click-arrow\":false,\"click-page\":false,\"f6-preserves-position\":true,\"shift-f6-arrow\":false,\"shift-f6-page\":false,\"space-focuses-composer\":true,\"forward-f6-arrow\":false,\"forward-f6-page\":false,\"populated-empty-thread-arrow\":false,\"populated-empty-thread-page\":false} to equal {\"click-arrow\":true,\"click-page\":true,\"f6-preserves-position\":true,\"shift-f6-arrow\":true,\"shift-f6-page\":true,\"space-focuses-composer\":true,\"forward-f6-arrow\":true,\"forward-f6-page\":true,\"populated-empty-thread-arrow\":true,\"populated-empty-thread-page\":true}", "steps": [ { "step": "app.open ", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Reading history, Done, Keyboard scrolling\")", "status": "passed" }, { "step": "locator.waitFor locator(\".messages-timeline-scroll\") → visible", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "screen.tapAt (1250, 426)", "status": "passed" }, { "step": "app.screenshot click-before-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press ArrowDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press PageDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot click-after-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "locator.tap getByRole(\"textbox\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press Shift+F6", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot shift-f6-before-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press ArrowDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press PageDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot shift-f6-after-keys", "status": "passed" }, { "step": "browser.keyboard.press Space", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "browser.keyboard.press F6", "status": "passed" }, { "step": "browser.keyboard.press F6", "status": "passed" }, { "step": "browser.keyboard.press F6", "status": "passed" }, { "step": "app.screenshot forward-f6-before-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press ArrowDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press PageDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot forward-f6-after-keys", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"New thread\")", "status": "passed" }, { "step": "locator.tap getByRole(\"textbox\")", "status": "passed" }, { "step": "browser.keyboard.press Shift+F6", "status": "passed" }, { "step": "app.screenshot empty-conversation-focus", "status": "passed" }, { "step": "browser.keyboard.press Space", "status": "passed" }, { "step": "locator.fill getByRole(\"textbox\")", "status": "passed" }, { "step": "locator.press getByRole(\"textbox\")", "status": "passed" }, { "step": "locator.waitFor getByText(\"This turn is a replay.\") → visible", "status": "passed" }, { "step": "locator.waitFor getByRole(\"button\", name: \"Stop generation\") → hidden", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "locator.tap getByRole(\"textbox\")", "status": "passed" }, { "step": "browser.keyboard.press Shift+F6", "status": "passed" }, { "step": "browser.keyboard.press F6", "status": "passed" }, { "step": "browser.keyboard.press Shift+F6", "status": "passed" }, { "step": "app.screenshot populated-empty-thread-before-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press ArrowDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press PageDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot populated-empty-thread-after-keys", "status": "passed" } ], "captures": [ "", "", "", "", "", "", "", "", "", "" ], "videos": [ "" ] }, "head": { "sha": "a57e41868355edb54ab69ec30b445f0272671d5f", "status": "passed", "title": "Conversation scrolls after a click, Shift+F6, and an empty conversation gains messages", "steps": [ { "step": "app.open ", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Reading history, Done, Keyboard scrolling\")", "status": "passed" }, { "step": "locator.waitFor locator(\".messages-timeline-scroll\") → visible", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "screen.tapAt (1250, 426)", "status": "passed" }, { "step": "app.screenshot click-before-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press ArrowDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press PageDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot click-after-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "locator.tap getByRole(\"textbox\")", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press Shift+F6", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot shift-f6-before-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press ArrowDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press PageDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot shift-f6-after-keys", "status": "passed" }, { "step": "browser.keyboard.press Space", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "browser.keyboard.press F6", "status": "passed" }, { "step": "browser.keyboard.press F6", "status": "passed" }, { "step": "browser.keyboard.press F6", "status": "passed" }, { "step": "app.screenshot forward-f6-before-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press ArrowDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press PageDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot forward-f6-after-keys", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"New thread\")", "status": "passed" }, { "step": "locator.tap getByRole(\"textbox\")", "status": "passed" }, { "step": "browser.keyboard.press Shift+F6", "status": "passed" }, { "step": "app.screenshot empty-conversation-focus", "status": "passed" }, { "step": "browser.keyboard.press Space", "status": "passed" }, { "step": "locator.fill getByRole(\"textbox\")", "status": "passed" }, { "step": "locator.press getByRole(\"textbox\")", "status": "passed" }, { "step": "locator.waitFor getByText(\"This turn is a replay.\") → visible", "status": "passed" }, { "step": "locator.waitFor getByRole(\"button\", name: \"Stop generation\") → hidden", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.mouse.move ", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "locator.tap getByRole(\"textbox\")", "status": "passed" }, { "step": "browser.keyboard.press Shift+F6", "status": "passed" }, { "step": "browser.keyboard.press F6", "status": "passed" }, { "step": "browser.keyboard.press Shift+F6", "status": "passed" }, { "step": "app.screenshot populated-empty-thread-before-keys", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press ArrowDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "browser.keyboard.press PageDown", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot populated-empty-thread-after-keys", "status": "passed" } ], "captures": [ "", "", "", "", "", "", "", "", "" ], "videos": [ "" ] } }