Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
4 changes: 2 additions & 2 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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.
2 changes: 1 addition & 1 deletion docs/ci.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`.

Expand Down
9 changes: 9 additions & 0 deletions docs/compatibility-2026-11-13.md
Original file line number Diff line number Diff line change
@@ -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.
4 changes: 2 additions & 2 deletions docs/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
```

Expand Down
2 changes: 1 addition & 1 deletion docs/quickstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions docs/stability.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ 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.

## Upgrade from 0.1.0

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.
2 changes: 1 addition & 1 deletion docs/studio.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion docs/troubleshooting.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
2 changes: 1 addition & 1 deletion packages/browser/src/index.ts
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
2 changes: 1 addition & 1 deletion packages/test/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
"dependencies": {
"@latch-local/runtime": "workspace:*",
"@latch-local/contracts": "workspace:*",
"playwright": "1.63.0"
"playwright": "1.64.1"
},
"repository": {
"type": "git",
Expand Down
2 changes: 1 addition & 1 deletion packages/test/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ export async function runTests(project: TestProject): Promise<Report> {
}
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 = {
Expand Down
22 changes: 11 additions & 11 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading