$ node scripts/prove-scenario.ts scripts/scenarios/pr-watch-after-failure.e2e.ts --base 977d613611be70026b3d8c960254268f5f71ac3d --head abbde4d1a5fe1cbc6b6c5d0bcd5f5d79aca21643 --upload-command 'ghdrop upload' ⊘ cache disabled Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 10m ago) Lockfile is up to date, resolution step is skipped Progress: resolved 1, reused 0, downloaded 0, added 0 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 302, reused 302, downloaded 0, added 287 Progress: resolved 444, reused 444, downloaded 0, added 429 Progress: resolved 537, reused 537, downloaded 0, added 524 Progress: resolved 650, reused 650, downloaded 0, added 637 Progress: resolved 753, reused 753, downloaded 0, added 738 Progress: resolved 868, reused 868, downloaded 0, added 853 Progress: resolved 1044, reused 1044, downloaded 0, added 1028 Progress: resolved 1321, reused 1321, downloaded 0, added 1305 Progress: resolved 1730, reused 1730, downloaded 0, added 1717 Progress: resolved 1774, reused 1774, downloaded 0, added 1771 Packages: +1779 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Progress: resolved 1779, reused 1775, downloaded 0, added 1779, done .../esbuild@0.28.2/node_modules/esbuild postinstall$ node install.js .../esbuild@0.28.2/node_modules/esbuild postinstall: Done .../node_modules/node-pty install$ node scripts/prebuild.js || node-gyp rebuild .../react-native-enriched-markdown postinstall$ node postinstall.mjs .../node_modules/node-pty install: > Checking prebuilds... .../node_modules/node-pty install: Done .../node_modules/node-pty postinstall$ node scripts/post-install.js .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] restoring vendored native assets ... .../node_modules/node-pty postinstall: > Cleaning release folder... .../node_modules/node-pty postinstall: > Moving conpty.dll... .../node_modules/node-pty postinstall: SKIPPED (not Windows) .../node_modules/node-pty postinstall: Done .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] fetching runtime v0.26.3 from https://github.com/tree-sitter/tree-sitter/archive/refs/tags/v0.26.3.tar.gz .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] runtime -> react-native-enriched-markdown/cpp/highlight/vendor/tree-sitter/src .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading tree-sitter-json@0.24.8 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading tree-sitter-html@0.23.2 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading tree-sitter-css@0.23.2 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading @tree-sitter-grammars/tree-sitter-markdown@0.3.2 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading @tree-sitter-grammars/tree-sitter-yaml@0.7.1 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading tree-sitter-go@0.23.4 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading tree-sitter-java@0.23.5 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading tree-sitter-javascript@0.23.1 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading tree-sitter-python@0.23.6 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading tree-sitter-c@0.23.5 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading tree-sitter-rust@0.23.2 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading tree-sitter-bash@0.23.3 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading tree-sitter-typescript@0.23.2 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading tree-sitter-cpp@0.23.4 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading tree-sitter-swift@0.7.0 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading tree-sitter-php@0.24.2 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading tree-sitter-ruby@0.23.1 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] downloading tree-sitter-c-sharp@0.23.1 ... .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] json -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/json .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] html -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/html .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] css -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/css .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] markdown -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/markdown .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] yaml -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/yaml .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] go -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/go .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] java -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/java .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] javascript -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/javascript .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] python -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/python .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] c -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/c .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] rust -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/rust .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] bash -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/bash .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] typescript -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/typescript .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] tsx -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/tsx .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] cpp -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/cpp .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] swift -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/swift .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] php -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/php .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] ruby -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/ruby .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] c-sharp -> react-native-enriched-markdown/cpp/highlight/vendor/grammars/c-sharp .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] grammar sources ready. .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] done. .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] fetching xcframework from https://github.com/erweixin/RaTeX/releases/download/v0.1.15/RaTeX.xcframework.zip .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] fetching source from https://github.com/erweixin/RaTeX/archive/refs/tags/v0.1.15.tar.gz .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] RaTeX v0.1.15 -> .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] done. .../react-native-enriched-markdown postinstall: [react-native-enriched-markdown] postinstall complete. .../react-native-enriched-markdown postinstall: 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 26s using pnpm v12.14.0 RUN e2e v0.23.0 run 01a1d1cc-6d56-7949-a37b-e19f58cb98b6 · targets: web, ios ✓ target "web" command at http://127.0.0.1:37407/.well-known/t3/environment ready 9.05s ✓ target "ios" command at http://127.0.0.1:8190/status ready 14.13s × |web| scenarios/pr-watch-after-failure.e2e.ts > PR watch wakes again when remaining checks finish after an early failure 269.94s → expect.toHaveCount failed ❯ |web| scenarios/pr-watch-after-failure.e2e.ts (1 test | 1 failed) 269.94s ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ FAIL |web| scenarios/pr-watch-after-failure.e2e.ts > PR watch wakes again when remaining checks finish after an early failure ASSERTION_FAILED: expect.toHaveCount failed locator: getByText("#42: checks finished") expected: count 1 observed: count 0 (match count 0) ❯ scenarios/pr-watch-after-failure.e2e.ts:71:3 ❯ at http://127.0.0.1:37407/80347f4e-a12c-499a-a500-be07a4d1a3c8/mcp:8f1ac963-01e9-41a6-b8cd-8b2c0770c82d ❯ app 1 warning logged ❯ trace .e2e/prove/base/results/pr-watch-after-failure-pr-watch-wakes-again-when-7d6940e543585ebf/trace.md ❯ video .e2e/prove/base/results/pr-watch-after-failure-pr-watch-wakes-again-when-7d6940e543585ebf/attempt-1/video/video.webm ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ Test Files 1 failed | 0 passed (1) Tests 1 failed | 0 passed (1) Start at 22:06:39 Duration 297.28s (4m 57s, startup 23.18s) Traces .e2e/prove/base/results/ (1 page, trace.md in each test's directory) Screenshots .e2e/prove/base/results/pr-watch-after-failure-pr-watch-wakes-again-when-7d6940e543585ebf/attempt-1/screenshots/001-early-failure.png .e2e/prove/base/results/pr-watch-after-failure-pr-watch-wakes-again-when-7d6940e543585ebf/attempt-1/screenshots/002-remaining-checks-finished.png Markdown .e2e/prove/base/summary.md Failed × |web| scenarios/pr-watch-after-failure.e2e.ts:71 > PR watch wakes again when remaining checks finish after an early failure ASSERTION_FAILED: expect.toHaveCount failed trace .e2e/prove/base/results/pr-watch-after-failure-pr-watch-wakes-again-when-7d6940e543585ebf/trace.md Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 16m 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 739, reused 739, downloaded 0, added 724 Progress: resolved 1238, reused 1238, downloaded 0, added 1223 Progress: resolved 1441, reused 1441, downloaded 0, added 1426 Progress: resolved 1643, reused 1643, downloaded 0, added 1628 Progress: resolved 1762, reused 1762, downloaded 0, added 1752 Progress: resolved 1770, reused 1770, downloaded 0, added 1765 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 8.9s using pnpm v12.14.0 RUN e2e v0.23.0 run 01a1d1d1-5125-7cca-984d-5d4da9068f45 · targets: web, ios ✓ target "web" command at http://127.0.0.1:43005/.well-known/t3/environment ready 7.39s ✓ target "ios" command at http://127.0.0.1:8190/status ready 8.54s ✓ |web| scenarios/pr-watch-after-failure.e2e.ts > PR watch wakes again when remaining checks finish after an early failure 232.37s ✓ |web| scenarios/pr-watch-after-failure.e2e.ts (1 test) 232.37s Test Files 1 passed (1) Tests 1 passed (1) Start at 22:12:00 Duration 250.03s (4m 10s, startup 15.93s) Traces .e2e/prove/head/results/ (1 page, trace.md in each test's directory) Screenshots .e2e/prove/head/results/pr-watch-after-failure-pr-watch-wakes-again-when-7d6940e543585ebf/attempt-1/screenshots/001-early-failure.png .e2e/prove/head/results/pr-watch-after-failure-pr-watch-wakes-again-when-7d6940e543585ebf/attempt-1/screenshots/002-remaining-checks-finished.png Markdown .e2e/prove/head/summary.md { "scenario": "PR watch wakes again when remaining checks finish after an early failure", "failsOnBase": true, "passesOnHead": true, "baseSha": "977d613611be70026b3d8c960254268f5f71ac3d", "headSha": "abbde4d1a5fe1cbc6b6c5d0bcd5f5d79aca21643", "verdict": "Proven: the scenario fails on base `977d613611` and passes on head `abbde4d1a5`.", "steps": { "base": [ { "step": "app.open ", "status": "passed" }, { "step": "locator.waitFor getByRole(\"combobox\", name: \"Search threads\") → visible", "status": "passed" }, { "step": "app.open /80347f4e-a12c-499a-a500-be07a4d1a3c8/mcp:8f1ac963-01e9-41a6-b8cd-8b2c0770c82d", "status": "passed" }, { "step": "locator.waitFor getByText(\"#42: checks failed\").first() → visible", "status": "passed" }, { "step": "locator.waitFor getByRole(\"button\", name: \"Stop generation\") → hidden", "status": "passed" }, { "step": "app.screenshot early-failure", "status": "passed" }, { "step": "locator.waitFor getByText(\"#42: checks finished\") → visible", "status": "failed" }, { "step": "locator.waitFor getByRole(\"button\", name: \"Stop generation\") → hidden", "status": "passed" }, { "step": "app.screenshot remaining-checks-finished", "status": "passed" }, { "step": "expect.toHaveCount getByText(\"#42: checks finished\")", "status": "failed" } ], "head": [ { "step": "app.open ", "status": "passed" }, { "step": "locator.waitFor getByRole(\"combobox\", name: \"Search threads\") → visible", "status": "passed" }, { "step": "app.open /ba1ecf70-02d2-4b2c-a314-1805d61a5bfb/mcp:f9d2e9eb-90dd-4ccf-8aa4-be0b3d5fa2e8", "status": "passed" }, { "step": "locator.waitFor getByText(\"#42: checks failed\").first() → visible", "status": "passed" }, { "step": "locator.waitFor getByRole(\"button\", name: \"Stop generation\") → hidden", "status": "passed" }, { "step": "app.screenshot early-failure", "status": "passed" }, { "step": "locator.waitFor getByText(\"#42: checks finished\") → visible", "status": "passed" }, { "step": "locator.waitFor getByRole(\"button\", name: \"Stop generation\") → hidden", "status": "passed" }, { "step": "app.screenshot remaining-checks-finished", "status": "passed" }, { "step": "expect.toHaveCount getByText(\"#42: checks finished\")", "status": "passed" }, { "step": "expect.toBeVisible getByText(\"#42: checks finished\")", "status": "passed" } ] }, "captures": [ "", "", "", "", "" ], "videos": [ "", "" ], "markdown": "### Scenario: PR watch wakes again when remaining checks finish after an early failure\n\n**Proven: the scenario fails on base `977d613611` and passes on head `abbde4d1a5`.**\n\n| | Base `977d613611` | Head `abbde4d1a5` |\n| --- | --- | --- |\n| Result | ❌ failed
ASSERTION_FAILED: expect.toHaveCount failed
locator: getByText(\"#42: checks finished\")
expected: count 1
observed: count 0 (match count 0) | ✅ passed |\n| early failure | ![Base 977d613611: early failure](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/88001ccc0f80e859/001-early-failure.png) | ![Head abbde4d1a5: early failure](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cce0eb84ba2a3908/001-early-failure.png) |\n| remaining checks finished | ![Base 977d613611: remaining checks finished](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4e75c55499522f11/002-remaining-checks-finished.png) | ![Head abbde4d1a5: remaining checks finished](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d0594a1396a48438/002-remaining-checks-finished.png) |\n| failure | ![Base 977d613611: failure](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/e6de304a39ecaf60/003-failure.png) | |\n", "base": { "sha": "977d613611be70026b3d8c960254268f5f71ac3d", "status": "failed", "title": "PR watch wakes again when remaining checks finish after an early failure", "message": "ASSERTION_FAILED: expect.toHaveCount failed\nlocator: getByText(\"#42: checks finished\")\nexpected: count 1\nobserved: count 0 (match count 0)", "steps": [ { "step": "app.open ", "status": "passed" }, { "step": "locator.waitFor getByRole(\"combobox\", name: \"Search threads\") → visible", "status": "passed" }, { "step": "app.open /80347f4e-a12c-499a-a500-be07a4d1a3c8/mcp:8f1ac963-01e9-41a6-b8cd-8b2c0770c82d", "status": "passed" }, { "step": "locator.waitFor getByText(\"#42: checks failed\").first() → visible", "status": "passed" }, { "step": "locator.waitFor getByRole(\"button\", name: \"Stop generation\") → hidden", "status": "passed" }, { "step": "app.screenshot early-failure", "status": "passed" }, { "step": "locator.waitFor getByText(\"#42: checks finished\") → visible", "status": "failed" }, { "step": "locator.waitFor getByRole(\"button\", name: \"Stop generation\") → hidden", "status": "passed" }, { "step": "app.screenshot remaining-checks-finished", "status": "passed" }, { "step": "expect.toHaveCount getByText(\"#42: checks finished\")", "status": "failed" } ], "captures": [ "", "", "" ], "videos": [ "" ] }, "head": { "sha": "abbde4d1a5fe1cbc6b6c5d0bcd5f5d79aca21643", "status": "passed", "title": "PR watch wakes again when remaining checks finish after an early failure", "steps": [ { "step": "app.open ", "status": "passed" }, { "step": "locator.waitFor getByRole(\"combobox\", name: \"Search threads\") → visible", "status": "passed" }, { "step": "app.open /ba1ecf70-02d2-4b2c-a314-1805d61a5bfb/mcp:f9d2e9eb-90dd-4ccf-8aa4-be0b3d5fa2e8", "status": "passed" }, { "step": "locator.waitFor getByText(\"#42: checks failed\").first() → visible", "status": "passed" }, { "step": "locator.waitFor getByRole(\"button\", name: \"Stop generation\") → hidden", "status": "passed" }, { "step": "app.screenshot early-failure", "status": "passed" }, { "step": "locator.waitFor getByText(\"#42: checks finished\") → visible", "status": "passed" }, { "step": "locator.waitFor getByRole(\"button\", name: \"Stop generation\") → hidden", "status": "passed" }, { "step": "app.screenshot remaining-checks-finished", "status": "passed" }, { "step": "expect.toHaveCount getByText(\"#42: checks finished\")", "status": "passed" }, { "step": "expect.toBeVisible getByText(\"#42: checks finished\")", "status": "passed" } ], "captures": [ "", "" ], "videos": [ "" ] } }