$ node scripts/prove-scenario.ts scripts/scenarios/peer-relink-revokes-old-session.e2e.ts --base d8b80a1097a92cc7dcaf2998a71816825d004dad --head a411e4176f35a37c14a40d901b86ce247f0e7272 --upload-command 'ghdrop upload' ⊘ cache disabled Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 21m 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 1084, reused 1084, downloaded 0, added 1069 Progress: resolved 1776, reused 1776, downloaded 0, added 1767 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 4s using pnpm v12.14.0 RUN e2e v0.23.0 /scripts run 01a1ddcc-0d1b-70a4-90d2-029ee36b517a · targets: web, ios ✓ target "web" command at http://127.0.0.1:34811/.well-known/t3/environment ready 8.83s stdout | |web| scenarios/peer-relink-revokes-old-session.e2e.ts > Re-linking retires every replaced peer session and preserves the current link Peer renewal runtime results: {"renewalSessionCounts":[1,2,3,4,5],"replacedBearerHttpStatus":200,"currentBearerHttpStatus":200,"garbageBearerHttpStatus":401,"localLinkCount":1,"localTokenFileCount":1} × |web| scenarios/peer-relink-revokes-old-session.e2e.ts > Re-linking retires every replaced peer session and preserves the current link 43.67s → expect.toHaveCount failed ❯ |web| scenarios/peer-relink-revokes-old-session.e2e.ts (1 test | 1 failed) 43.67s ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ FAIL |web| scenarios/peer-relink-revokes-old-session.e2e.ts > Re-linking retires every replaced peer session and preserves the current link ASSERTION_FAILED: expect.toHaveCount failed locator: getByText("T3 Code · Scenario") expected: count 1 observed: count 5 (match count 5) ❯ scenarios/peer-relink-revokes-old-session.e2e.ts:64:3 62| }); 63| await app.screenshot("authorized-clients-after-five-links"); 64| await expect(screen.getByText("T3 Code · Scenario", { exact: true }… | ^ 65| expect(results.replacedBearerHttpStatus).toBe(401); 66| expect(results.currentBearerHttpStatus).toBe(200); ❯ at http://127.0.0.1:34811/settings/access ❯ trace .e2e/prove/base/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/trace.md ❯ video .e2e/prove/base/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/video/video.webm ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯ Test Files 1 failed | 0 passed (1) Tests 1 failed | 0 passed (1) Start at 06:01:40 Duration 54.11s (startup 8.83s) Traces .e2e/prove/base/results/ (1 page, trace.md in each test's directory) Screenshots .e2e/prove/base/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/screenshots/001-before-renewals.png .e2e/prove/base/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/screenshots/002-authorized-clients-after-five-links.png Markdown .e2e/prove/base/summary.md Failed × |web| scenarios/peer-relink-revokes-old-session.e2e.ts:64 > Re-linking retires every replaced peer session and preserves the current link ASSERTION_FAILED: expect.toHaveCount failed trace .e2e/prove/base/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/trace.md Scope: all 42 workspace projects ✓ Lockfile passes supply-chain policies (verified 22m 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 1285, reused 1285, downloaded 0, added 1270 Progress: resolved 1775, reused 1775, downloaded 0, added 1770 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.9s using pnpm v12.14.0 RUN e2e v0.23.0 /scripts run 01a1ddcd-2a6a-714a-aaef-435d936ef5b4 · targets: web, ios ✓ target "web" command at http://127.0.0.1:41099/.well-known/t3/environment ready 5.16s stdout | |web| scenarios/peer-relink-revokes-old-session.e2e.ts > Re-linking retires every replaced peer session and preserves the current link Peer renewal runtime results: {"renewalSessionCounts":[1,1,1,1,1],"replacedBearerHttpStatus":401,"currentBearerHttpStatus":200,"garbageBearerHttpStatus":401,"localLinkCount":1,"localTokenFileCount":1} ✓ |web| scenarios/peer-relink-revokes-old-session.e2e.ts > Re-linking retires every replaced peer session and preserves the current link 25.12s ✓ |web| scenarios/peer-relink-revokes-old-session.e2e.ts (1 test) 25.12s Test Files 1 passed (1) Tests 1 passed (1) Start at 06:02:53 Duration 30.98s (startup 5.16s) Traces .e2e/prove/head/results/ (1 page, trace.md in each test's directory) Screenshots .e2e/prove/head/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/screenshots/001-before-renewals.png .e2e/prove/head/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/screenshots/002-authorized-clients-after-five-links.png Markdown .e2e/prove/head/summary.md { "scenario": "Re-linking retires every replaced peer session and preserves the current link", "failsOnBase": true, "passesOnHead": true, "couldNotRun": null, "baseSha": "d8b80a1097a92cc7dcaf2998a71816825d004dad", "headSha": "a411e4176f35a37c14a40d901b86ce247f0e7272", "verdict": "Proven: the scenario fails on base `d8b80a1097` and passes on head `a411e4176f`.", "steps": { "base": [ { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /settings/labs", "status": "passed" }, { "step": "locator.tap getByRole(\"switch\", name: \"Linked environments\")", "status": "passed" }, { "step": "app.open /settings/access", "status": "passed" }, { "step": "locator.tap getByText(\"Authorized clients\")", "status": "passed" }, { "step": "app.screenshot before-renewals", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot authorized-clients-after-five-links", "status": "passed" }, { "step": "expect.toHaveCount getByText(\"T3 Code · Scenario\")", "status": "failed" } ], "head": [ { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /settings/labs", "status": "passed" }, { "step": "locator.tap getByRole(\"switch\", name: \"Linked environments\")", "status": "passed" }, { "step": "app.open /settings/access", "status": "passed" }, { "step": "locator.tap getByText(\"Authorized clients\")", "status": "passed" }, { "step": "app.screenshot before-renewals", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot authorized-clients-after-five-links", "status": "passed" }, { "step": "expect.toHaveCount getByText(\"T3 Code · Scenario\")", "status": "passed" } ] }, "captures": [ "/scripts/.e2e/prove/base/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/screenshots/001-before-renewals.png", "/scripts/.e2e/prove/base/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/screenshots/002-authorized-clients-after-five-links.png", "/scripts/.e2e/prove/base/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/screenshots/003-failure.png", "/scripts/.e2e/prove/head/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/screenshots/001-before-renewals.png", "/scripts/.e2e/prove/head/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/screenshots/002-authorized-clients-after-five-links.png" ], "videos": [ "/scripts/.e2e/prove/base/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/video/video.webm", "/scripts/.e2e/prove/head/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/video/video.webm" ], "markdown": "### Scenario: Re-linking retires every replaced peer session and preserves the current link\n\n**Proven: the scenario fails on base `d8b80a1097` and passes on head `a411e4176f`.**\n\n| | Base `d8b80a1097` | Head `a411e4176f` |\n| --- | --- | --- |\n| Result | ❌ failed
ASSERTION_FAILED: expect.toHaveCount failed
locator: getByText(\"T3 Code · Scenario\")
expected: count 1
observed: count 5 (match count 5) | ✅ passed |\n| before renewals | ![Base d8b80a1097: before renewals](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f6fb518eb46fc532/001-before-renewals.png) | ![Head a411e4176f: before renewals](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d3bb95b18e430282/001-before-renewals.png) |\n| authorized clients after five links | ![Base d8b80a1097: authorized clients after five links](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4fe2d4e3d236e63c/002-authorized-clients-after-five-links.png) | ![Head a411e4176f: authorized clients after five links](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a39a6db834f25c76/002-authorized-clients-after-five-links.png) |\n| failure | ![Base d8b80a1097: failure](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/9f9840e8ed4e468a/003-failure.png) | |\n", "base": { "sha": "d8b80a1097a92cc7dcaf2998a71816825d004dad", "status": "failed", "title": "Re-linking retires every replaced peer session and preserves the current link", "message": "ASSERTION_FAILED: expect.toHaveCount failed\nlocator: getByText(\"T3 Code · Scenario\")\nexpected: count 1\nobserved: count 5 (match count 5)", "steps": [ { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /settings/labs", "status": "passed" }, { "step": "locator.tap getByRole(\"switch\", name: \"Linked environments\")", "status": "passed" }, { "step": "app.open /settings/access", "status": "passed" }, { "step": "locator.tap getByText(\"Authorized clients\")", "status": "passed" }, { "step": "app.screenshot before-renewals", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot authorized-clients-after-five-links", "status": "passed" }, { "step": "expect.toHaveCount getByText(\"T3 Code · Scenario\")", "status": "failed" } ], "captures": [ "/scripts/.e2e/prove/base/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/screenshots/001-before-renewals.png", "/scripts/.e2e/prove/base/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/screenshots/002-authorized-clients-after-five-links.png", "/scripts/.e2e/prove/base/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/screenshots/003-failure.png" ], "videos": [ "/scripts/.e2e/prove/base/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/video/video.webm" ] }, "head": { "sha": "a411e4176f35a37c14a40d901b86ce247f0e7272", "status": "passed", "title": "Re-linking retires every replaced peer session and preserves the current link", "steps": [ { "step": "app.open ", "status": "passed" }, { "step": "expect.not.toHaveURL /\\/pair(?:[?#]|$)/", "status": "passed" }, { "step": "app.open /settings/labs", "status": "passed" }, { "step": "locator.tap getByRole(\"switch\", name: \"Linked environments\")", "status": "passed" }, { "step": "app.open /settings/access", "status": "passed" }, { "step": "locator.tap getByText(\"Authorized clients\")", "status": "passed" }, { "step": "app.screenshot before-renewals", "status": "passed" }, { "step": "browser.evaluate ", "status": "passed" }, { "step": "app.screenshot authorized-clients-after-five-links", "status": "passed" }, { "step": "expect.toHaveCount getByText(\"T3 Code · Scenario\")", "status": "passed" } ], "captures": [ "/scripts/.e2e/prove/head/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/screenshots/001-before-renewals.png", "/scripts/.e2e/prove/head/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/screenshots/002-authorized-clients-after-five-links.png" ], "videos": [ "/scripts/.e2e/prove/head/results/peer-relink-revokes-old-session-re-linking-retires-every-7e78bc6538e61ea8/attempt-1/video/video.webm" ] } }