diff --git a/bun.lock b/bun.lock index d2d2584..e32feab 100644 --- a/bun.lock +++ b/bun.lock @@ -25,7 +25,7 @@ }, "devDependencies": { "@libre-ai/contracts": "file:../../../../schemas-and-contracts/packages/sdk-ts", - "@playwright/test": "1.62.1", + "@playwright/test": "1.64.0", }, }, "packages/starter/starter": { @@ -40,7 +40,7 @@ "react-dom": "19.2.7", }, "devDependencies": { - "@playwright/test": "1.62.1", + "@playwright/test": "1.64.0", }, }, "packages/testing": { @@ -65,7 +65,7 @@ "devDependencies": { "@biomejs/biome": "2.5.3", "@libre-ai/governance": "file:../../../project-governance", - "@playwright/test": "1.62.1", + "@playwright/test": "1.64.0", "@types/bun": "1.3.14", "@types/react": "19.2.17", "@types/react-dom": "19.2.3", @@ -105,7 +105,7 @@ }, }, "patchedDependencies": { - "playwright-core@1.62.1": "patches/playwright-core@1.62.1.patch", + "playwright-core@1.64.0": "patches/playwright-core@1.64.0.patch", }, "overrides": { "@libre-ai/auth-web": "file:../ai-work-supervision/packages/auth-web", @@ -151,7 +151,7 @@ "@libre-ai/web-platform": ["@libre-ai/web-platform@workspace:packages/web-platform"], - "@playwright/test": ["@playwright/test@1.62.1", "", { "dependencies": { "playwright": "1.62.1" }, "bin": { "playwright": "cli.js" } }, "sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ=="], + "@playwright/test": ["@playwright/test@1.64.0", "", { "dependencies": { "playwright": "1.64.0" }, "bin": { "playwright": "cli.js" } }, "sha512-oTN9FNYuN6bqQMwiho6jJKLCG2/QOYCixGXuCjRmzOq23eODeukuY2XiAVoVpAECbuezMt1MHQjAiQxK8F+Y+g=="], "@react-types/shared": ["@react-types/shared@3.36.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-AzsuD9OfxTOZMMvTRhlN3oHBwOmFN7tDh27LzqmHt4+uOgPhJT7ZM7/kVs/8/o0WxayMUIk3hBmCFRHv1FUoag=="], @@ -229,9 +229,9 @@ "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "playwright": ["playwright@1.62.1", "", { "dependencies": { "playwright-core": "1.62.1" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg=="], + "playwright": ["playwright@1.64.0", "", { "dependencies": { "playwright-core": "1.64.0" }, "bin": { "playwright": "cli.js" } }, "sha512-kVzTnYFYEyQ9RGzBjNCd2+yEqWmVbxl3AHPynv3qQ6JTjv4a+kwRcnqQwIpuP3NnrnIrE/Q6wWAIAvMfIE2/Yg=="], - "playwright-core": ["playwright-core@1.62.1", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw=="], + "playwright-core": ["playwright-core@1.64.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-T9r+MZkTECl2+oUcZ26YgZzTrYidTsIhYYkJix+6iDOymOb1FB2RLLSOxRGnZGv5DStt+aduIVbt+E8WygXYpg=="], "react": ["react@19.2.7", "", {}, "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ=="], @@ -261,7 +261,7 @@ "@libre-ai/starter-gates/@libre-ai/governance": ["@libre-ai/governance@file:../project-governance", { "dependencies": { "ajv": "8.20.0", "ajv-formats": "3.0.1", "entities": "8.0.0" }, "devDependencies": { "@biomejs/biome": "2.5.3", "@types/bun": "1.3.14", "typescript": "7.0.2" } }], - "@libre-ai/starter-template/@libre-ai/auth-web": ["@libre-ai/auth-web@file:../ai-work-supervision/packages/auth-web", { "devDependencies": { "@biomejs/biome": "2.5.3", "@libre-ai/governance": "file:../../../project-governance", "@playwright/test": "1.61.1", "@types/bun": "1.3.14", "@types/react": "19.2.17", "@types/react-dom": "19.2.3", "typescript": "7.0.2" }, "peerDependencies": { "@libre-ai/contracts": "=0.1.0", "@libre-ai/web-platform": "=0.1.0" } }], + "@libre-ai/starter-template/@libre-ai/auth-web": ["@libre-ai/auth-web@file:../ai-work-supervision/packages/auth-web", { "devDependencies": { "@biomejs/biome": "2.5.3", "@libre-ai/governance": "file:../../../project-governance", "@playwright/test": "1.62.1", "@types/bun": "1.3.14", "@types/react": "19.2.17", "@types/react-dom": "19.2.3", "typescript": "7.0.2" }, "peerDependencies": { "@libre-ai/contracts": "=0.1.0", "@libre-ai/web-platform": "=0.1.0" } }], "@libre-ai/starter-template/@libre-ai/contracts": ["@libre-ai/contracts@file:../schemas-and-contracts/packages/sdk-ts", { "dependencies": { "ajv": "8.20.0", "ajv-formats": "3.0.1" }, "devDependencies": { "@biomejs/biome": "2.5.3", "@libre-ai/governance": "file:../../../project-governance", "@types/bun": "1.3.14", "typescript": "7.0.2" } }], @@ -277,12 +277,12 @@ "@libre-ai/starter-template/@libre-ai/auth-web/@libre-ai/governance": ["@libre-ai/governance@file:../project-governance", {}], - "@libre-ai/starter-template/@libre-ai/auth-web/@playwright/test": ["@playwright/test@1.61.1", "", { "dependencies": { "playwright": "1.61.1" }, "bin": { "playwright": "cli.js" } }, "sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig=="], + "@libre-ai/starter-template/@libre-ai/auth-web/@playwright/test": ["@playwright/test@1.62.1", "", { "dependencies": { "playwright": "1.62.1" }, "bin": { "playwright": "cli.js" } }, "sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ=="], "@libre-ai/starter-template/@libre-ai/contracts/@libre-ai/governance": ["@libre-ai/governance@file:../project-governance", {}], - "@libre-ai/starter-template/@libre-ai/auth-web/@playwright/test/playwright": ["playwright@1.61.1", "", { "dependencies": { "playwright-core": "1.61.1" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ=="], + "@libre-ai/starter-template/@libre-ai/auth-web/@playwright/test/playwright": ["playwright@1.62.1", "", { "dependencies": { "playwright-core": "1.62.1" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg=="], - "@libre-ai/starter-template/@libre-ai/auth-web/@playwright/test/playwright/playwright-core": ["playwright-core@1.61.1", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg=="], + "@libre-ai/starter-template/@libre-ai/auth-web/@playwright/test/playwright/playwright-core": ["playwright-core@1.62.1", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw=="], } } diff --git a/docs/playwright-validation.md b/docs/playwright-validation.md index 961577f..ba55bca 100644 --- a/docs/playwright-validation.md +++ b/docs/playwright-validation.md @@ -1,7 +1,7 @@ # Playwright validation patch -The workspace pins Playwright Core 1.62.1. Bun applies -`patches/playwright-core@1.62.1.patch` during installation; use the committed lockfile. +The workspace pins Playwright Core 1.64.0. Bun applies +`patches/playwright-core@1.64.0.patch` during installation; use the committed lockfile. `bun run check:playwright` checks the installed starter dependency with four synthetic protocol cases. The workspace `check` command includes this gate. @@ -10,23 +10,34 @@ It requires the repository-pinned Node 26.5.0. Browser E2E remain separate. The patch rejects the pending RPC promise when result validation throws. Upstream removes that callback before validation, leaving the promise unsettled and throwing outside it. Invalid results remain errors. Event validation is unchanged. -Upstream 1.62.1 still ships the unpatched code: its `lib/coreBundle.js` deletes the -callback and then calls the result validator outside any `try` (line 63499), so the -patch is carried forward, re-derived for the 1.62.1 line offsets. +Upstream 1.64.0 still ships the unpatched code: its `lib/coreBundle.js` deletes the +callback (line 65438) and then calls the result validator outside any `try` +(line 65450), so the patch is carried forward, re-derived for the 1.64.0 line +offsets. The hunk body is unchanged from the 1.62.1 patch; only its offset moved +from 63496 to 65447. The patch modifies the distributed `lib/coreBundle.js` from the Apache-2.0 Playwright package. Its attribution is retained in the adjacent `.license` file. -The original bundle SHA-256 is -`9393fa79e1c67c74edc26b610d65a4f7ed73d345a762465cc88340a33a2454ac`; +The original 1.64.0 bundle SHA-256 is +`2325ca4c1c83070e89dc49fb82525508f0a68e0cf12e2a624277968da216b7e0`; the patched bundle SHA-256 is -`72a5af51a1e77ee468a07b3094f2642f507052a332c574f91e981909d9f0cea8`. +`5b55e2391e6afe560230c9228098edc37b3e7f5c505a911aa2c09927c18010ac`. This is a validation candidate. Synthetic protocol regression tests and local browser tests do not establish the cause of every CI failure. Keep the patch only with passing required CI; reassess it when upgrading Playwright and remove it when an upstream version passes the same regression tests without it. -## Why Playwright 1.62.1 and not 1.61.1 +## Why Playwright 1.64.0 + +Playwright 1.64.0 contains the change that closed microsoft/playwright#42731 +(microsoft/playwright#42788, merge `b30584c2`, an ancestor of tag `v1.64.0`): the +first Firefox navigation to a `Cross-Origin-Opener-Policy: same-origin` page no +longer hangs. The starter Firefox projects therefore no longer set +`browser.tabs.remote.useCrossOriginOpenerPolicy=false`, the temporary workaround +carried on 1.62.1. + +## Why Playwright 1.62.1 and not 1.61.1 (history) Playwright 1.61.1 installs Chrome for Testing 149.0.7827.55 (Chromium revision 1228, headless shell revision 1228 as well). On the hosted `ubuntu-24.04` runner diff --git a/package.json b/package.json index da86134..577fbd3 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,6 @@ "@libre-ai/auth-web": "file:../ai-work-supervision/packages/auth-web" }, "patchedDependencies": { - "playwright-core@1.62.1": "patches/playwright-core@1.62.1.patch" + "playwright-core@1.64.0": "patches/playwright-core@1.64.0.patch" } } diff --git a/packages/starter/bun-app/package.json b/packages/starter/bun-app/package.json index 44e6081..eb7c360 100644 --- a/packages/starter/bun-app/package.json +++ b/packages/starter/bun-app/package.json @@ -27,6 +27,6 @@ }, "devDependencies": { "@libre-ai/contracts": "file:../../../../schemas-and-contracts/packages/sdk-ts", - "@playwright/test": "1.62.1" + "@playwright/test": "1.64.0" } } diff --git a/packages/starter/bun-app/playwright.config.ts b/packages/starter/bun-app/playwright.config.ts index ddb54df..5f77db5 100644 --- a/packages/starter/bun-app/playwright.config.ts +++ b/packages/starter/bun-app/playwright.config.ts @@ -12,13 +12,7 @@ export default defineConfig({ { name: "firefox", testMatch: /(reference|hydration-marker)\.e2e\.ts/, - use: { - ...devices["Desktop Firefox"], - // TODO(playwright-1.64): remove once @playwright/test >= 1.64.0 (microsoft/playwright#42731) — Juggler loses a message on COOP-triggered context replacement. - launchOptions: { - firefoxUserPrefs: { "browser.tabs.remote.useCrossOriginOpenerPolicy": false }, - }, - }, + use: { ...devices["Desktop Firefox"] }, }, { name: "webkit", diff --git a/packages/starter/starter/package.json b/packages/starter/starter/package.json index f6d0c69..c2e5e2b 100644 --- a/packages/starter/starter/package.json +++ b/packages/starter/starter/package.json @@ -28,6 +28,6 @@ "react-dom": "19.2.7" }, "devDependencies": { - "@playwright/test": "1.62.1" + "@playwright/test": "1.64.0" } } diff --git a/packages/starter/starter/playwright.config.ts b/packages/starter/starter/playwright.config.ts index 04a4eae..b521e92 100644 --- a/packages/starter/starter/playwright.config.ts +++ b/packages/starter/starter/playwright.config.ts @@ -22,13 +22,7 @@ export default defineConfig({ { name: "firefox", testMatch: /journal\.e2e\.ts/, - use: { - ...devices["Desktop Firefox"], - // TODO(playwright-1.64): remove once @playwright/test >= 1.64.0 (microsoft/playwright#42731) — Juggler loses a message on COOP-triggered context replacement. - launchOptions: { - firefoxUserPrefs: { "browser.tabs.remote.useCrossOriginOpenerPolicy": false }, - }, - }, + use: { ...devices["Desktop Firefox"] }, }, { name: "webkit", diff --git a/packages/ui/package.json b/packages/ui/package.json index ac4084c..0a2e9f1 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -90,7 +90,7 @@ "devDependencies": { "@biomejs/biome": "2.5.3", "@libre-ai/governance": "file:../../../project-governance", - "@playwright/test": "1.62.1", + "@playwright/test": "1.64.0", "@types/bun": "1.3.14", "@types/react": "19.2.17", "@types/react-dom": "19.2.3", diff --git a/patches/playwright-core@1.62.1.patch b/patches/playwright-core@1.64.0.patch similarity index 96% rename from patches/playwright-core@1.62.1.patch rename to patches/playwright-core@1.64.0.patch index 31492f3..8e3fca9 100644 --- a/patches/playwright-core@1.62.1.patch +++ b/patches/playwright-core@1.64.0.patch @@ -1,6 +1,6 @@ --- a/lib/coreBundle.js +++ b/lib/coreBundle.js -@@ -63496,8 +63496,12 @@ +@@ -65447,8 +65447,12 @@ parsedError.details = detailsValidator(errorDetails ?? {}, "", this._validatorFromWireContext()); callback.reject(parsedError); } else { diff --git a/patches/playwright-core@1.62.1.patch.license b/patches/playwright-core@1.64.0.patch.license similarity index 100% rename from patches/playwright-core@1.62.1.patch.license rename to patches/playwright-core@1.64.0.patch.license diff --git a/scripts/playwright-rpc-regression-child.cjs b/scripts/playwright-rpc-regression-child.cjs index 462adbc..f389b86 100644 --- a/scripts/playwright-rpc-regression-child.cjs +++ b/scripts/playwright-rpc-regression-child.cjs @@ -16,7 +16,7 @@ const coreEntry = createRequire(playwrightEntry).resolve("playwright-core"); const packageRoot = path.dirname(coreEntry); assert.equal( JSON.parse(fs.readFileSync(path.join(packageRoot, "package.json"))).version, - "1.62.1", + "1.64.0", ); const bundle = path.join(packageRoot, "lib/coreBundle.js"); const hash = () =>