From b3ad0b3857457c1f4415dd120e87d09cdadf0f5e Mon Sep 17 00:00:00 2001 From: Ammann Labs <161159040+agammann@users.noreply.github.com> Date: Fri, 13 Nov 2026 01:29:46 -0800 Subject: [PATCH] Verify Chromium 156 native API and update Playwright --- README.md | 2 +- docs/README.md | 4 ++-- docs/ci.md | 2 +- docs/compatibility-2026-11-13.md | 9 +++++++++ docs/installation.md | 4 ++-- docs/quickstart.md | 2 +- docs/stability.md | 4 ++-- docs/studio.md | 2 +- docs/troubleshooting.md | 2 +- package.json | 2 +- packages/browser/src/index.ts | 2 +- packages/test/package.json | 2 +- packages/test/src/index.ts | 2 +- pnpm-lock.yaml | 22 +++++++++++----------- 14 files changed, 35 insertions(+), 26 deletions(-) create mode 100644 docs/compatibility-2026-11-13.md diff --git a/README.md b/README.md index 20133e3..a858a92 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ No account or API key is required. Editing and generation happen in the browser. | Handler and UI tests | The validated wrapper returns expected results and configured UI assertions pass against your running development app. | | Native tests | A compatible browser registers, discovers, and invokes the tools, with cleanup checked where configured. | -Native WebMCP support is experimental. The current target is Chrome **155.0.8059.39** with `WebMCPTesting` enabled and object inputs to `document.modelContext.executeTool`. See the [October 6 compatibility record](docs/compatibility-2026-10-06.md) for the measured API forms and scope. Native absence or blocked execution produces a failing check; ordinary application UI remains available when WebMCP is unsupported. +Native WebMCP support is experimental. The measured targets include Chrome **155.0.8059.39** and Playwright's Chromium **156.0.8078.4**, with `WebMCPTesting` enabled and object inputs to `document.modelContext.executeTool`. See the [current compatibility record](docs/compatibility-2026-11-13.md) for the measured API forms and scope. Native absence or blocked execution produces a failing check; ordinary application UI remains available when WebMCP is unsupported. The [September compatibility record](docs/compatibility-2026-09-08.md), [September acceptance check](reports/acceptance-2026-09-19.md), and [October 2 verification](reports/verification-2026-10-02.json) retain their original Chrome 153/154 and Chromium 153 evidence. Run the [current verification commands](docs/ci.md) for the revision you are using. diff --git a/docs/README.md b/docs/README.md index 3687cff..02abf30 100644 --- a/docs/README.md +++ b/docs/README.md @@ -18,7 +18,7 @@ | ---------------------------------------------------------- | ----------------------------------------------------------- | | Queues, committed state, scopes, cancellation, and errors | [Runtime semantics](runtime.md) | | Regeneration, ownership, upgrades, and rollback | [Maintenance and removal](maintenance.md) | -| Browser versions, native API behavior, and measured limits | [Current compatibility record](compatibility-2026-10-06.md) | +| Browser versions, native API behavior, and measured limits | [Current compatibility record](compatibility-2026-11-13.md) | | Automated Handler checks and separate native verification | [CI lanes](ci.md) | ## Working on Latch @@ -29,4 +29,4 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md) for the repository map, build commands The [September 19 acceptance check](../reports/acceptance-2026-09-19.md) covers the public Studio, downloaded packages, a fresh consumer application, browser interactions, and fixes found during that run. -[Release notes](../RELEASE_NOTES.md), [changelog](../CHANGELOG.md), and [reports](../reports) include v1.0.0 release notes and historical 0.1.0 evidence. See the [v1 stability contract](stability.md) and [current native compatibility record](compatibility-2026-10-06.md). The [security review correction](security-review.md) and [local console visual review](visual-qa.md) retain their original scope. The [initial release checklist](../PLAN.md) is historical. +[Release notes](../RELEASE_NOTES.md), [changelog](../CHANGELOG.md), and [reports](../reports) include v1.0.0 release notes and historical 0.1.0 evidence. See the [v1 stability contract](stability.md) and [current native compatibility record](compatibility-2026-11-13.md). The [security review correction](security-review.md) and [local console visual review](visual-qa.md) retain their original scope. The [initial release checklist](../PLAN.md) is historical. diff --git a/docs/ci.md b/docs/ci.md index 791027b..36018d2 100644 --- a/docs/ci.md +++ b/docs/ci.md @@ -26,7 +26,7 @@ After the same build and browser installation, run `node scripts/ci-handler.mjs ## Native release lane -Use the target Chrome installation described in the [compatibility record](compatibility-2026-10-06.md), keep the unchanged example configurations, and run `pnpm verify`. Retain reports that record the actual browser version. If Chrome or its API is unavailable, the native case must remain blocked with a nonzero exit. A passing Handler lane does not substitute for this evidence. +Use the target Chrome installation described in the [compatibility record](compatibility-2026-11-13.md), keep the unchanged example configurations, and run `pnpm verify`. Retain reports that record the actual browser version. If Chrome or its API is unavailable, the native case must remain blocked with a nonzero exit. A passing Handler lane does not substitute for this evidence. Full verification also runs the intentional regression demonstration. That script requires the documentation development server on port 5174 when run separately as `pnpm regression:demo`. It detects a wrong handler result shape, verifies the corrected mapping, and restores the original source and configuration in `finally`. diff --git a/docs/compatibility-2026-11-13.md b/docs/compatibility-2026-11-13.md new file mode 100644 index 0000000..d362836 --- /dev/null +++ b/docs/compatibility-2026-11-13.md @@ -0,0 +1,9 @@ +# Native compatibility — 2026-11-13 + +On Windows with Node 24.22.1 and pnpm 10.17.1, Playwright 1.64.1's bundled headless Chromium **156.0.8078.4** was tested against local loopback origins with `--enable-features=WebMCPTesting`. + +An isolated synthetic probe registered a tool, invoked it once using object input, observed that JSON-string input was rejected before the callback, and confirmed that aborting the registration removed the tool. The project native CI lane then passed all 18 catalog and documentation example cases, including native invocation, visible results, and cleanup. These tests do not establish agent-host interoperability, production origin trials, other browser builds, or arbitrary application compatibility. + +The runner chooses JSON-string input for browser majors 153/154 and object input for 155/156 before a call. It never retries a rejected mutation with a different form. Unknown browser majors remain blocked until measured. + +The [October 6 record](compatibility-2026-10-06.md) preserves the earlier installed Chrome 155 and bundled Chromium 153 observations. Playwright 1.65.0's Chromium 158 was also probed on the same local setup, but `document.modelContext` was unavailable with the existing flag; it is not supported by this record. diff --git a/docs/installation.md b/docs/installation.md index f0d2762..6828d6a 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -106,12 +106,12 @@ Choose a browser setup: | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | Installed Google Chrome, ordinary Handler tests | `"browser": { "channel": "chrome", "native": false }` | | Playwright Chromium, ordinary Handler tests | Install Chromium as shown below, then set `"browser": { "channel": "chromium", "native": false }` | -| Native WebMCP verification | Follow the separate [compatibility record](compatibility-2026-10-06.md) and configure a native test. | +| Native WebMCP verification | Follow the separate [compatibility record](compatibility-2026-11-13.md) and configure a native test. | For Chromium in a consumer application, add the CLI directly so `pnpm exec playwright` is available: ```sh -pnpm add -D --ignore-scripts playwright@1.63.0 +pnpm add -D --ignore-scripts playwright@1.64.1 pnpm exec playwright install chromium ``` diff --git a/docs/quickstart.md b/docs/quickstart.md index d16a9f4..93b0277 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -55,7 +55,7 @@ To explore the documentation example instead, run `pnpm --dir examples/docs dev` ## 4. Run native tests when your browser is ready -The shipped example configurations include required native cases. Read the [dated compatibility record](compatibility-2026-10-06.md) first. With the catalog server still running and the target Chrome installation available: +The shipped example configurations include required native cases. Read the [dated compatibility record](compatibility-2026-11-13.md) first. With the catalog server still running and the target Chrome installation available: ```sh node packages/cli/dist/main.js test --root examples/catalog diff --git a/docs/stability.md b/docs/stability.md index e117b5f..f37f1f2 100644 --- a/docs/stability.md +++ b/docs/stability.md @@ -8,7 +8,7 @@ Configuration, ownership manifests and regression reports retain format version Generated ownership remains limited to the two fixed integration outputs and the reviewed component import/hook transition. Later source or generated edits cause refusal instead of silent replacement. Regeneration is deterministic for the same version/configuration. Individual files are replaced atomically; a multi-file transaction is not guaranteed. Preserve the ownership manifest for upgrades and removal. -Native WebMCP remains experimental and browser-version specific. The [current compatibility record](compatibility-2026-10-06.md) identifies measured browser builds and invocation forms. Native version changes require a new real-browser check; unsupported native targets produce a blocked result. Ordinary application UI and handler tests remain usable without a native API. Browser-agent interoperability, cross-origin exposure, production origin trials and unmeasured browsers are outside this release's promise. +Native WebMCP remains experimental and browser-version specific. The [current compatibility record](compatibility-2026-11-13.md) identifies measured browser builds and invocation forms. Native version changes require a new real-browser check; unsupported native targets produce a blocked result. Ordinary application UI and handler tests remain usable without a native API. Browser-agent interoperability, cross-origin exposure, production origin trials and unmeasured browsers are outside this release's promise. Studio is maintained separately and requires no account for its documented editing workflow. Its runtime download has not been established as the matching v1.0.0 package set. Obtain the six v1 packages from the GitHub release or matching source checkout, then check any downloaded integration with the installed CLI. @@ -16,4 +16,4 @@ Studio is maintained separately and requires no account for its documented editi Keep a backup of your source, configuration and `.latch/manifest.json`. Replace all six tarballs/overrides with v1.0.0 and install them as described in [installation](installation.md). Schema 1 is unchanged. A valid 0.1.0 ownership manifest is accepted; `latch generate` verifies existing hashes, rewrites the generator version/output, and retains the recorded component transition. Review the diff, run `latch check`, apply if needed, and rerun handler/native tests. Rollback and conflict refusal still protect later edits. Run rollback before changing installed React callback references, as described in [maintenance](maintenance.md). -Chrome 155 uses object input for native execution. The test runner selects the previously measured JSON-string input only for browser majors 153/154 and object input for 155 before a call; it never retries a rejected mutation with another form. Unknown native browser versions block pending verification. Custom browser integration code must use the API form of its measured target. +Chrome 155 and Chromium 156 use object input for native execution. The test runner selects the previously measured JSON-string input only for browser majors 153/154 and object input for 155/156 before a call; it never retries a rejected mutation with another form. Unknown native browser versions block pending verification. Custom browser integration code must use the API form of its measured target. diff --git a/docs/studio.md b/docs/studio.md index 8b0a344..80e618a 100644 --- a/docs/studio.md +++ b/docs/studio.md @@ -23,7 +23,7 @@ The starter values are examples. They do not establish that your handler exists In **Test samples**, supply a representative input and the result your real handler should return. Select **Check sample values**. A successful check means the values match the schemas; it does not execute the handler. -In **Project setup**, set the application's loopback development URL and installation component. Studio exports Handler tests. Native invocation must be configured and verified separately using the [current compatibility record](compatibility-2026-10-06.md). +In **Project setup**, set the application's loopback development URL and installation component. Studio exports Handler tests. Native invocation must be configured and verified separately using the [current compatibility record](compatibility-2026-11-13.md). ## 3. Save and download diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index 53c0a0e..946f0b4 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -13,7 +13,7 @@ | `pnpm` is not recognized | Install pnpm and reopen the terminal. Confirm `node --version` and `pnpm --version` before the setup steps. | | `latch` is not recognized | Run `pnpm exec latch` from the application where the CLI package is installed. A global installation is not required. | | `ERR_PNPM_IGNORED_BUILDS` during package installation | The prebuilt Latch packages need no install scripts. Use the documented `pnpm add --ignore-scripts` commands. Configure build scripts needed by your existing application separately. | -| `playwright` is not recognized in a consumer app | Add `playwright@1.58.2` as a direct development dependency before using `pnpm exec playwright install chromium`, as described in Installation. | +| `playwright` is not recognized in a consumer app | Add `playwright@1.64.1` as a direct development dependency before using `pnpm exec playwright install chromium`, as described in Installation. | | Port already in use | Stop the process you started on that port, or deliberately update the application origin and configuration together. The supplied scripts use strict ports and will not silently switch. | ## Integration and tests diff --git a/package.json b/package.json index 1325ee2..32bb22a 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@types/node": "22.19.11", "@types/react": "19.3.0", "@types/react-dom": "19.2.3", - "playwright": "1.63.0", + "playwright": "1.64.1", "prettier": "3.9.10", "react": "19.3.1", "react-dom": "19.3.1", diff --git a/packages/browser/src/index.ts b/packages/browser/src/index.ts index b58555a..618bc50 100644 --- a/packages/browser/src/index.ts +++ b/packages/browser/src/index.ts @@ -1,4 +1,4 @@ -/** Chrome 155 document API adapter. See the dated compatibility record. */ +/** Chrome 155/Chromium 156 document API adapter. See the dated compatibility record. */ export interface NativeTool { name: string; description: string; diff --git a/packages/test/package.json b/packages/test/package.json index dcce5ae..1f83336 100644 --- a/packages/test/package.json +++ b/packages/test/package.json @@ -29,7 +29,7 @@ "dependencies": { "@latch-local/runtime": "workspace:*", "@latch-local/contracts": "workspace:*", - "playwright": "1.63.0" + "playwright": "1.64.1" }, "repository": { "type": "git", diff --git a/packages/test/src/index.ts b/packages/test/src/index.ts index f772157..21cb432 100644 --- a/packages/test/src/index.ts +++ b/packages/test/src/index.ts @@ -201,7 +201,7 @@ export async function runTests(project: TestProject): Promise { } try { const major = Number(report.browser.split('.')[0]); - const nativeInput = major === 155 ? 'object' : major === 153 || major === 154 ? 'json-string' : undefined; + const nativeInput = major === 155 || major === 156 ? 'object' : major === 153 || major === 154 ? 'json-string' : undefined; for (const t of project.tests) { const start = Date.now(); const r: CaseReport = { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ed9f0cb..efb3213 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,8 +31,8 @@ importers: specifier: 19.2.3 version: 19.2.3(@types/react@19.3.0) playwright: - specifier: 1.63.0 - version: 1.63.0 + specifier: 1.64.1 + version: 1.64.1 prettier: specifier: 3.9.10 version: 3.9.10 @@ -160,8 +160,8 @@ importers: specifier: workspace:* version: link:../runtime playwright: - specifier: 1.63.0 - version: 1.63.0 + specifier: 1.64.1 + version: 1.64.1 packages: @@ -560,13 +560,13 @@ packages: resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} engines: {node: '>=12'} - playwright-core@1.63.0: - resolution: {integrity: sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==} + playwright-core@1.64.1: + resolution: {integrity: sha512-BC4s8y6SEVA6Q1rSxZTto8hI1KUI3xXlHGZgvGqP4IqPdI/a6FX9H29IDNz7vKo9l21b6LfYosScPL6M3xxyDQ==} engines: {node: '>=20'} hasBin: true - playwright@1.63.0: - resolution: {integrity: sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==} + playwright@1.64.1: + resolution: {integrity: sha512-HCrVhHr5QQuwYoswEUGTb7gGp522yflbv/ST8nF4sFWGuLjQCt17Q/EubpGGSNKYn1tsTCPZxqHhHCfVURu7UA==} engines: {node: '>=20'} hasBin: true @@ -930,11 +930,11 @@ snapshots: picomatch@4.0.7: {} - playwright-core@1.63.0: {} + playwright-core@1.64.1: {} - playwright@1.63.0: + playwright@1.64.1: dependencies: - playwright-core: 1.63.0 + playwright-core: 1.64.1 postcss@8.5.32: dependencies: