$ node scripts/prove-scenario.ts scripts/scenarios/live-dictation-follows-text.e2e.ts --base 9f815c94af72e17e288969b5647da6a34ccace38 --head a50c6690e87ac48a62e36863cfbbaf6e085e54be --upload-command 'ghdrop upload' ⊘ cache disabled Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 32m 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: [local-path] Virtual store is at: node_modules/.pnpm Progress: resolved 1334, reused 1334, downloaded 0, added 1319 Packages: +1780 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Progress: resolved 1780, reused 1776, downloaded 0, added 1780, 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 3.2s using pnpm v12.14.0 RUN e2e v0.23.0 [local-path] run 01a1de0e-bb80-7bf5-8e5f-9b21592d80b4 · targets: web, ios ✓ target "web" command at http://127.0.0.1:43739/.well-known/t3/environment ready 4.64s × |web| scenarios/live-dictation-follows-text.e2e.ts > Live dictation keeps the newest words visible 123.73s → expected {"newestWordsVisible":false,"rereadingRespected":true} to equal… ❯ |web| scenarios/live-dictation-follows-text.e2e.ts (1 test | 1 failed) 123.73s ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ FAIL |web| scenarios/live-dictation-follows-text.e2e.ts > Live dictation keeps the newest words visible ASSERTION_FAILED: expected {"newestWordsVisible":false,"rereadingRespected":true} to equal {"newestWordsVisible":true,"rereadingRespected":true} ❯ scenarios/live-dictation-follows-text.e2e.ts:74:91 72| return start.top >= bounds.top && start.bottom <= bounds.bottom; 73| }); 74| await expect({ newestWordsVisible: visibleEnd, rereadingRespected: … 75| }); 76| ❯ at http://127.0.0.1:43739/0e85054a-a4aa-49b9-8c85-5b26f977326c/mcp:472159ae-5cd0-4a54-b21f-2a7dca852167 ❯ app 1 warning logged ❯ trace .e2e/prove/base/results/live-dictation-follows-text-live-dictation-keeps-the-newest-6be3205599de0ce1/trace.md ❯ video .e2e/prove/base/results/live-dictation-follows-text-live-dictation-keeps-the-newest-6be3205599de0ce1/attempt-1/video/video.webm ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ Test Files 1 failed | 0 passed (1) Tests 1 failed | 0 passed (1) Start at 07:14:30 Duration 129.18s (2m 9s, startup 4.64s) Traces .e2e/prove/base/results/ (1 page, trace.md in each test's directory) Screenshots .e2e/prove/base/results/live-dictation-follows-text-live-dictation-keeps-the-newest-6be3205599de0ce1/attempt-1/screenshots/001-newest-words.png .e2e/prove/base/results/live-dictation-follows-text-live-dictation-keeps-the-newest-6be3205599de0ce1/attempt-1/screenshots/002-rereading-start.png .e2e/prove/base/results/live-dictation-follows-text-live-dictation-keeps-the-newest-6be3205599de0ce1/attempt-1/screenshots/003-rereading-new-words-arrive.png Markdown .e2e/prove/base/summary.md Failed × |web| scenarios/live-dictation-follows-text.e2e.ts:74 > Live dictation keeps the newest words visible ASSERTION_FAILED: expected {"newestWordsVisible":false,"rereadingRespected":true} to equal {"newestWordsVisible":true,"rereadingRespected":true} trace .e2e/prove/base/results/live-dictation-follows-text-live-dictation-keeps-the-newest-6be3205599de0ce1/trace.md Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 35m 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: [local-path] Virtual store is at: node_modules/.pnpm Progress: resolved 806, reused 806, downloaded 0, added 791 Progress: resolved 1775, reused 1775, downloaded 0, added 1775 Packages: +1780 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Progress: resolved 1780, reused 1776, downloaded 0, added 1780, 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 3.5s using pnpm v12.14.0 RUN e2e v0.23.0 [local-path] run 01a1de10-df3a-78a8-a87f-fc9b013bfdff · targets: web, ios ✓ target "web" command at http://127.0.0.1:37701/.well-known/t3/environment ready 3.90s ✓ |web| scenarios/live-dictation-follows-text.e2e.ts > Live dictation keeps the newest words visible 137.33s ✓ |web| scenarios/live-dictation-follows-text.e2e.ts (1 test) 137.33s Test Files 1 passed (1) Tests 1 passed (1) Start at 07:16:50 Duration 142.40s (2m 22s, startup 3.90s) Traces .e2e/prove/head/results/ (1 page, trace.md in each test's directory) Screenshots .e2e/prove/head/results/live-dictation-follows-text-live-dictation-keeps-the-newest-6be3205599de0ce1/attempt-1/screenshots/001-newest-words.png .e2e/prove/head/results/live-dictation-follows-text-live-dictation-keeps-the-newest-6be3205599de0ce1/attempt-1/screenshots/002-rereading-start.png .e2e/prove/head/results/live-dictation-follows-text-live-dictation-keeps-the-newest-6be3205599de0ce1/attempt-1/screenshots/003-rereading-new-words-arrive.png Markdown .e2e/prove/head/summary.md { "scenario": "Live dictation keeps the newest words visible", "failsOnBase": true, "passesOnHead": true, "couldNotRun": null, "baseSha": "9f815c94af72e17e288969b5647da6a34ccace38", "headSha": "a50c6690e87ac48a62e36863cfbbaf6e085e54be", "verdict": "Proven: the scenario fails on base `9f815c94af` and passes on head `a50c6690e8`.", "steps": { "base": [ { "step": "browser.route \"**/dictation-fixture.mp3\"", "status": "passed" }, { "step": "browser.addInitScript function", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /settings/voice", "status": "passed" }, { "step": "locator.tap getByRole(\"combobox\", name: \"Transcribe with\")", "status": "passed" }, { "step": "locator.tap getByRole(\"option\", name: \"Scenario\")", "status": "passed" }, { "step": "locator.fill getByRole(\"searchbox\", name: \"Search transcription models\")", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Download\")", "status": "passed" }, { "step": "locator.waitFor locator(\"button\").filter({ hasText: /^(Selected|Use model)$/ }) → visible", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /0e85054a-a4aa-49b9-8c85-5b26f977326c/mcp:472159ae-5cd0-4a54-b21f-2a7dca852167", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Start voice input\")", "status": "passed" }, { "step": "locator.waitFor locator(\"[aria-label=\\\"Live transcription\\\"]\").filter({ hasText: /followed along/i }) → visible", "status": "passed" }, { "step": "app.screenshot newest-words", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "locator.hover locator(\"[aria-label=\\\"Live transcription\\\"]\")", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "app.screenshot rereading-start", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "locator.waitFor locator(\"[data-reread-growth=\\\"ready\\\"]\") → visible", "status": "passed" }, { "step": "app.screenshot rereading-new-words-arrive", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" } ], "head": [ { "step": "browser.route \"**/dictation-fixture.mp3\"", "status": "passed" }, { "step": "browser.addInitScript function", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /settings/voice", "status": "passed" }, { "step": "locator.tap getByRole(\"combobox\", name: \"Transcribe with\")", "status": "passed" }, { "step": "locator.tap getByRole(\"option\", name: \"Scenario\")", "status": "passed" }, { "step": "locator.fill getByRole(\"searchbox\", name: \"Search transcription models\")", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Download\")", "status": "passed" }, { "step": "locator.waitFor locator(\"button\").filter({ hasText: /^(Selected|Use model)$/ }) → visible", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /a4e69a52-ce0f-4e35-90f6-ce8874359acd/mcp:83e7b0f2-dca3-4baf-8498-5a21a353d32e", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Start voice input\")", "status": "passed" }, { "step": "locator.waitFor locator(\"[aria-label=\\\"Live transcription\\\"]\").filter({ hasText: /followed along/i }) → visible", "status": "passed" }, { "step": "app.screenshot newest-words", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "locator.hover locator(\"[aria-label=\\\"Live transcription\\\"]\")", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "app.screenshot rereading-start", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "locator.waitFor locator(\"[data-reread-growth=\\\"ready\\\"]\") → visible", "status": "passed" }, { "step": "app.screenshot rereading-new-words-arrive", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" } ] }, "captures": [ "[local-path]", "[local-path]", "[local-path]", "[local-path]", "[local-path]", "[local-path]", "[local-path]" ], "videos": [ "[local-path]", "[local-path]" ], "markdown": "### Scenario: Live dictation keeps the newest words visible\n\n**Proven: the scenario fails on base `9f815c94af` and passes on head `a50c6690e8`.**\n\n| | Base `9f815c94af` | Head `a50c6690e8` |\n| --- | --- | --- |\n| Result | ❌ failed
ASSERTION_FAILED: expected {\"newestWordsVisible\":false,\"rereadingRespected\":true} to equal {\"newestWordsVisible\":true,\"rereadingRespected\":true} | ✅ passed |\n| newest words | ![Base 9f815c94af: newest words](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/da750b7e298dd34d/001-newest-words.png) | ![Head a50c6690e8: newest words](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/c10d25f6ccec6912/001-newest-words.png) |\n| rereading start | ![Base 9f815c94af: rereading start](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/7a392abe25ee6e28/002-rereading-start.png) | ![Head a50c6690e8: rereading start](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/217d5fe20cf78173/002-rereading-start.png) |\n| rereading new words arrive | ![Base 9f815c94af: rereading new words arrive](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3ce42d4362ac0613/003-rereading-new-words-arrive.png) | ![Head a50c6690e8: rereading new words arrive](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f7b432f38bd4b5be/003-rereading-new-words-arrive.png) |\n| failure | ![Base 9f815c94af: failure](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/22648b757d2536fd/004-failure.png) | |\n", "base": { "sha": "9f815c94af72e17e288969b5647da6a34ccace38", "status": "failed", "title": "Live dictation keeps the newest words visible", "message": "ASSERTION_FAILED: expected {\"newestWordsVisible\":false,\"rereadingRespected\":true} to equal {\"newestWordsVisible\":true,\"rereadingRespected\":true}", "steps": [ { "step": "browser.route \"**/dictation-fixture.mp3\"", "status": "passed" }, { "step": "browser.addInitScript function", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /settings/voice", "status": "passed" }, { "step": "locator.tap getByRole(\"combobox\", name: \"Transcribe with\")", "status": "passed" }, { "step": "locator.tap getByRole(\"option\", name: \"Scenario\")", "status": "passed" }, { "step": "locator.fill getByRole(\"searchbox\", name: \"Search transcription models\")", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Download\")", "status": "passed" }, { "step": "locator.waitFor locator(\"button\").filter({ hasText: /^(Selected|Use model)$/ }) → visible", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /0e85054a-a4aa-49b9-8c85-5b26f977326c/mcp:472159ae-5cd0-4a54-b21f-2a7dca852167", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Start voice input\")", "status": "passed" }, { "step": "locator.waitFor locator(\"[aria-label=\\\"Live transcription\\\"]\").filter({ hasText: /followed along/i }) → visible", "status": "passed" }, { "step": "app.screenshot newest-words", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "locator.hover locator(\"[aria-label=\\\"Live transcription\\\"]\")", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "app.screenshot rereading-start", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "locator.waitFor locator(\"[data-reread-growth=\\\"ready\\\"]\") → visible", "status": "passed" }, { "step": "app.screenshot rereading-new-words-arrive", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" } ], "captures": [ "[local-path]", "[local-path]", "[local-path]", "[local-path]" ], "videos": [ "[local-path]" ] }, "head": { "sha": "a50c6690e87ac48a62e36863cfbbaf6e085e54be", "status": "passed", "title": "Live dictation keeps the newest words visible", "steps": [ { "step": "browser.route \"**/dictation-fixture.mp3\"", "status": "passed" }, { "step": "browser.addInitScript function", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /settings/voice", "status": "passed" }, { "step": "locator.tap getByRole(\"combobox\", name: \"Transcribe with\")", "status": "passed" }, { "step": "locator.tap getByRole(\"option\", name: \"Scenario\")", "status": "passed" }, { "step": "locator.fill getByRole(\"searchbox\", name: \"Search transcription models\")", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Download\")", "status": "passed" }, { "step": "locator.waitFor locator(\"button\").filter({ hasText: /^(Selected|Use model)$/ }) → visible", "status": "passed" }, { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /a4e69a52-ce0f-4e35-90f6-ce8874359acd/mcp:83e7b0f2-dca3-4baf-8498-5a21a353d32e", "status": "passed" }, { "step": "locator.tap getByRole(\"button\", name: \"Start voice input\")", "status": "passed" }, { "step": "locator.waitFor locator(\"[aria-label=\\\"Live transcription\\\"]\").filter({ hasText: /followed along/i }) → visible", "status": "passed" }, { "step": "app.screenshot newest-words", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "locator.hover locator(\"[aria-label=\\\"Live transcription\\\"]\")", "status": "passed" }, { "step": "browser.mouse.wheel ", "status": "passed" }, { "step": "app.screenshot rereading-start", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "locator.waitFor locator(\"[data-reread-growth=\\\"ready\\\"]\") → visible", "status": "passed" }, { "step": "app.screenshot rereading-new-words-arrive", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" } ], "captures": [ "[local-path]", "[local-path]", "[local-path]" ], "videos": [ "[local-path]" ] } }