Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
9ae674e
fix(mcp): preserve project tool model output and error status (#894)
rudycelekli Oct 6, 2026
fe9b0e8
test: remove the temp dirs six files leave behind (#909)
fecolinhares Oct 6, 2026
032825f
fix(init): retain MCP server environment and client settings (#902)
rudycelekli Oct 6, 2026
a0e5142
fix(web): infer row headers beside table data cells (#891)
rudycelekli Oct 6, 2026
39cfe83
fix(mobile): update agent-device to 0.21.21 (#912)
okwasniewski Oct 6, 2026
7aafa00
fix(agent): judge fails an assertion when one repeated value contradi…
okwasniewski Oct 6, 2026
7c158ee
fix(web): require e2e 0.18.0 as peer (#913)
okwasniewski Oct 6, 2026
30e80d6
fix(e2e): resolve ./x.jsx and ./x.js in TypeScript's order, like tsx …
okwasniewski Oct 6, 2026
13da94b
fix(decision): decide through experimental_decide and reject unsuppor…
okwasniewski Oct 6, 2026
89b783d
fix(mobile): update agent-device to 0.21.22 (#917)
jbroma Oct 6, 2026
b2a28d4
chore: version packages (#825)
github-actions[bot] Oct 6, 2026
9fb70b9
fix(config): reject a non-string credential username with INVALID_CON…
okwasniewski Oct 6, 2026
e77c17a
fix(cache): drop the engine version from the replay cache key (#929)
okwasniewski Oct 6, 2026
b7ba009
test(web-benchmark): re-record agent recordings for @e2e-dev/web 0.13…
okwasniewski Oct 6, 2026
a1a6b2b
docs(examples): add Jetpack Compose, Kotlin Multiplatform, and Flutte…
kacperkapusciak Oct 7, 2026
957d71d
chore(skills): move repo-only skills to .dev/skills so skills add off…
kacperkapusciak Oct 7, 2026
1b92a6d
feat: e2e trace pages replace the Playwright trace (#869)
okwasniewski Oct 7, 2026
59113aa
ci: gate merges through the merge queue with one required check per w…
okwasniewski Oct 7, 2026
4132715
fix(cli): init never writes an MCP config through a symlink (#887)
DeryFerd Oct 7, 2026
fef1246
fix(locator): preserve the direct read deadline through retries (#907)
rudycelekli Oct 7, 2026
b36ea5c
fix(web): accept case-insensitive aria-selected and aria-hidden (#898)
rudycelekli Oct 7, 2026
d5a4eab
fix(oauth): cancel the initial device-code request on interrupt (#899)
rudycelekli Oct 7, 2026
00c6bba
docs(ci): give each CI service its own sidebar page (#964)
kacperkapusciak Oct 7, 2026
a70bb5f
docs(bug-bash): simplify the page, add the skill install command and …
kacperkapusciak Oct 7, 2026
6d5c24a
docs: remove the Run in CI section from the introduction (#966)
kacperkapusciak Oct 7, 2026
9bd1284
fix(docs): load the bug bash and explore videos under the /docs subpa…
kacperkapusciak Oct 7, 2026
73716d2
docs(explore): shorten the explore guide, move the detail to the CLI …
kacperkapusciak Oct 7, 2026
67b11b5
fix(mcp): skip cancelled queued tool calls (#901)
rudycelekli Oct 7, 2026
34b90ae
fix(kernel): preserve the default idle timeout for undefined options …
rudycelekli Oct 7, 2026
ea0681a
fix(oauth): reject read-only credentials before starting login (#905)
rudycelekli Oct 7, 2026
9236bea
fix(eas): refuse cancelled acquisition before creating sessions (#906)
rudycelekli Oct 7, 2026
0ddea76
fix(core): match Unicode characters in test globs (#927)
rudycelekli Oct 7, 2026
5120ae8
docs(quickstart): add the e2e init demo video (#971)
kacperkapusciak Oct 7, 2026
745b353
fix(web): poll checked state after check/uncheck click until the acti…
okwasniewski Oct 7, 2026
f1a1ac2
feat(decision): send providerOptions with every decide call (#937)
outof-place Oct 7, 2026
cae1c65
fix(cache): a hand-off no longer inflates the recorded end wait (#881)
fecolinhares Oct 8, 2026
99d5ab5
fix(cache): --strict-cache replays on retries and never writes the ca…
okwasniewski Oct 8, 2026
c10dc00
fix(agent): name the status and the body of a provider error the SDK …
okwasniewski Oct 8, 2026
f2cf2ad
fix(agent): retry the auto-only tool_choice refusal of Meta's Muse Sp…
okwasniewski Oct 8, 2026
d3d9081
fix(runner)!: a failed expect.soft before test.skip fails the attempt…
okwasniewski Oct 8, 2026
b6efcf7
fix(agent): send cache hints only to OpenAI Responses models (#919)
okwasniewski Oct 8, 2026
d85702a
feat(skills): create-verification-skill generates a verify-<app> skil…
okwasniewski Oct 8, 2026
7ea9aac
docs(subscriptions): use Claude Max and Team monthly API credits (#982)
okwasniewski Oct 8, 2026
5fb69de
fix(web): read a sentence whole across its inline links and emphasis …
okwasniewski Oct 8, 2026
0dffb3b
fix(web): dismiss an unanswered dialog when its handler throws (#889)
rudycelekli Oct 8, 2026
7949c25
fix(web): validate the focused keyboard control (#903)
rudycelekli Oct 8, 2026
7eb03ca
fix(run): stop abandoned fixture setup before later test work (#893)
rudycelekli Oct 8, 2026
9e33593
fix(web): scope shadow landmarks to outer sections (#943)
rudycelekli Oct 8, 2026
f55a616
docs(examples): add standalone Astro project (#972)
kacperkapusciak Oct 8, 2026
5cdd3c6
fix(core): cancel readiness HTTP probes when interrupted (#936)
rudycelekli Oct 8, 2026
bc453bd
fix(cli): align replay cache columns by displayed width (#984)
ASVLCII Oct 8, 2026
7980bb3
docs(subscriptions): add Claude Max and Team to the plan tables and s…
kacperkapusciak Oct 8, 2026
2f60b54
feat(runner): expose list() on the e2e/runner subpath (#978)
mvanhorn Oct 8, 2026
5137778
feat(expect): toHaveScreenshot visual comparison on web, iOS, and And…
okwasniewski Oct 8, 2026
56c25bd
fix(web): serialize method functions for page evaluation (#941)
rudycelekli Oct 8, 2026
9a32bd4
docs: group cross-target pages under Features (#990)
kacperkapusciak Oct 8, 2026
11a1011
ci(release): publish a nightly snapshot of main (#991)
okwasniewski Oct 8, 2026
06bb726
feat(smol): @e2e-dev/smol, browsers and the app under test in brancha…
BinSquare Oct 8, 2026
19cbfd6
docs(skills): add authoring-docs skill for skimmable guide pages (#995)
kacperkapusciak Oct 9, 2026
f3aa4c8
feat(locator): add dblclick as an alias of doubleTap (#947)
kblok Oct 9, 2026
3c37d98
fix(oauth): cancel ChatGPT authorization-code exchange (#935)
rudycelekli Oct 9, 2026
ef1ae5f
docs(integrations): grey smol machines sidebar icon like its neighbor…
kacperkapusciak Oct 9, 2026
b27eee1
docs(skills): put the fast path first on guide pages in authoring-doc…
kacperkapusciak Oct 9, 2026
c994aa6
docs: move Caching to the top of Features (#1003)
kacperkapusciak Oct 9, 2026
111251b
docs(skills): require a shortening pass on every docs page in authori…
kacperkapusciak Oct 9, 2026
67ab7d5
docs(integrations): shorten the smol machines page (#1005)
kacperkapusciak Oct 9, 2026
841ea3f
fix(cache): a row of a windowed list is not keyed by its list's first…
okwasniewski Oct 9, 2026
1496ec1
chore(examples): rename example tests to deterministic.e2e.ts and age…
kacperkapusciak Oct 9, 2026
b92658b
feat(decision): full action grammar, none fallback, and vision throug…
okwasniewski Oct 9, 2026
5219884
docs(security): split the security page into a short guide and a rule…
kacperkapusciak Oct 9, 2026
3f2f8fd
docs: credit TesterArmy beside Mintlify in the footer (#1007)
kacperkapusciak Oct 9, 2026
cae1028
chore: version packages (#928)
github-actions[bot] Oct 9, 2026
da790a1
docs(visual-testing): show a failed screenshot comparison in a clip (…
kacperkapusciak Oct 9, 2026
5e55d7c
fix(decision): count failed actions as no progress in the stall guard…
pvedula7 Oct 9, 2026
ac657d1
fix(decision): offer dismiss_keyboard while an on-screen keyboard is …
pvedula7 Oct 9, 2026
163257b
fix(scripts): derive error-code source roots from the published packa…
DeryFerd Oct 9, 2026
449fa93
docs: rewrite and shorten the guide pages with the authoring-docs ski…
kacperkapusciak Oct 10, 2026
c807f94
feat(limrun): add hosted device provider and app-flow example (#988)
enesonus Oct 12, 2026
71176d5
Merge tester-army/e2e main into LambdaTest/e2e main
amankansal-lt Oct 12, 2026
3849479
fix(mobile): update agent-device to 0.21.25
amankansal-lt Oct 12, 2026
d58b42d
fix(testmu): keep each lease through session close
amankansal-lt Oct 12, 2026
3bbb8e8
docs(testmu): install TestMu AI support as the @agent-device/testmu p…
amankansal-lt Oct 12, 2026
bd2ec29
test(testmu): grant retainOnClose in the pruning tests' daemon stub
amankansal-lt Oct 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions .changeset/agent-device-0-21-25.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@e2e-dev/mobile": patch
"@e2e-dev/limrun": patch
---

Update agent-device to 0.21.25, the first release whose daemon loads WebDriver provider plugins such as `@agent-device/testmu`, which `@e2e-dev/testmu` needs on the same agent-device copy as `@e2e-dev/mobile`. agent-device 0.21.22 loads only plugins that return a native provider runtime, so it refuses that plugin. `@e2e-dev/limrun` pins the same version as `@e2e-dev/mobile`, so its `agent-device` peer moves to 0.21.25 too.
5 changes: 0 additions & 5 deletions .changeset/browser-install-verdict.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/cache-empty-typed-value.md

This file was deleted.

5 changes: 5 additions & 0 deletions .changeset/decision-dismiss-keyboard.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@e2e-dev/decision": patch
---

The decision executor offers `dismiss_keyboard` while an on-screen keyboard is showing and the engine can dismiss it. Before, a control the keyboard covered after typing (an iOS number pad over a submit button) could not be reached, and the step failed.
11 changes: 0 additions & 11 deletions .changeset/decision-executor.md

This file was deleted.

5 changes: 5 additions & 0 deletions .changeset/decision-stall-clock.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@e2e-dev/decision": patch
---

The decision executor's stall guard now counts an action that errored as no progress, so three actions in a row that failed or changed nothing on screen block the step. It used to look only at whether the page changed, and a ticking timer on screen changes it every time: a tap that failed with `APP_UNREACHABLE` again and again never tripped the guard, and the model could repeat it until it gave up and claimed the step failed. A skipped pick and a rejected `done` or `failed` claim also carry an error in the step's history, so they count toward the three as well.
5 changes: 0 additions & 5 deletions .changeset/download-full-ledger-pass.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/engine-prepare-headed.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/error-default-redactor.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/evaluate-string-expression.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/failure-evidence-budget.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/forced-conclusion-wrong-tool.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/foreign-engine-errors.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/in-process-stray-rejections.md

This file was deleted.

9 changes: 9 additions & 0 deletions .changeset/limrun-provider.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
"@e2e-dev/mobile": patch
"@e2e-dev/limrun": minor
---

Add the Limrun device provider with one hosted instance per worker, app
installation, recording through agent-device, and cleanup on run exit.
Renew retained driver leases while other targets run. Keep provider-owned
local daemons isolated from ambient remote-daemon environment settings.
5 changes: 0 additions & 5 deletions .changeset/mcp-error-redaction.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/mcp-headless-default.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/mcp-user-output-redaction.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/npm-exec-cli-hint.md

This file was deleted.

12 changes: 0 additions & 12 deletions .changeset/oxc-typescript-loader.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/plain-string-secret-trace.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/replay-lost-list-once.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/retry-crash-attempts.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/run-user-output-redaction.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/serial-group-verdicts.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/strict-mode-reresolve.md

This file was deleted.

7 changes: 0 additions & 7 deletions .changeset/swipe-path-duration.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/tainted-fallback-policy-denied.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/telemetry-identity.md

This file was deleted.

2 changes: 1 addition & 1 deletion .changeset/testmu-devices.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
"@e2e-dev/testmu": minor
---

`@e2e-dev/testmu`: `mobile({ device: testmu({ device, osVersion, app }) })` runs a mobile target on TestMu AI (formerly LambdaTest) Android emulators, iOS simulators, and real devices (`deviceType: 'real'`), one per worker slot, through agent-device's `testmu` cloud provider. Each slot leases a device from an agent-device daemon the provider starts for the run under `stateDir` (default `.e2e/testmu`), in a directory per run that it marks as its own and that later runs remove once nothing in it has changed for 24 hours; allocating a lease starts its TestMu AI session, which installs `app` (an `lt://` id, an `https` URL, or a local path), so every slot is billed from the moment it is leased, and releasing the lease ends it. It reads `LT_USERNAME` and `LT_ACCESS_KEY` from the run's environment and fails the lease before starting anything when either is missing, sets up the device with `orientation`, `geoLocation`, `timezone`, `language`, `locale`, and `appiumVersion` when given, groups sessions on the dashboard under `project` (default `e2e`) and `build` (default the run id) and names each slot's session `sessionName` (default `e2e-<run id>-<target>-<slot>`, with `-<slot>` appended to a given name when the target has more than one slot), allocates each lease with agent-device's longest inactivity window and heartbeats it every 2 minutes while the run holds it, so a session that takes up to 10 minutes to start keeps its lease, links TestMu AI's recording of the slot's session as the video of an attempt that records one (the whole session, starting at the session's start time), found through TestMu AI's sessions API by the session's build and name, releases a lease it allocated when the run was interrupted, and releases each lease once. It needs an agent-device that includes the `testmu` provider, which no published release does yet, with `@e2e-dev/mobile`'s agent-device overridden to the same version; `agent-device` and `@e2e-dev/mobile` are its peers.
`@e2e-dev/testmu`: `mobile({ device: testmu({ device, osVersion, app }) })` runs a mobile target on TestMu AI (formerly LambdaTest) Android emulators, iOS simulators, and real devices (`deviceType: 'real'`), one per worker slot, through agent-device's `@agent-device/testmu` plugin. Each slot leases a device from an agent-device daemon the provider starts for the run under `stateDir` (default `.e2e/testmu`), in a directory per run that it marks as its own and that later runs remove once nothing in it has changed for 24 hours; allocating a lease starts its TestMu AI session, which installs `app` (an `lt://` id, an `https` URL, or a local path), so every slot is billed from the moment it is leased, and releasing the lease ends it. It reads `LT_USERNAME` and `LT_ACCESS_KEY` from the run's environment and fails the lease before starting anything when either is missing, sets up the device with `orientation`, `geoLocation`, `timezone`, `language`, `locale`, and `appiumVersion` when given, groups sessions on the dashboard under `project` (default `e2e`) and `build` (default the run id) and names each slot's session `sessionName` (default `e2e-<run id>-<target>-<slot>`, with `-<slot>` appended to a given name when the target has more than one slot), allocates each lease with agent-device's longest inactivity window and heartbeats it every 2 minutes while the run holds it, so a session that takes up to 10 minutes to start keeps its lease, links TestMu AI's recording of the slot's session as the video of an attempt that records one (the whole session, starting at the session's start time), found through TestMu AI's sessions API by the session's build and name, releases a lease it allocated when the run was interrupted, and releases each lease once. Each lease is allocated with `retainOnClose`, so the engine closing a worker's agent-device session does not end the TestMu AI session; a daemon that does not keep the lease fails it and the provider releases it. It needs agent-device 0.21.25 or later, the same copy `@e2e-dev/mobile` 0.11.1 or later uses, with the plugin added once per machine (`agent-device plugins add @agent-device/testmu`, then `agent-device daemon stop` for a daemon already running); `agent-device` and `@e2e-dev/mobile` are its peers.
6 changes: 0 additions & 6 deletions .changeset/web-hung-page-timeouts.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/worker-hang-watchdog.md

This file was deleted.

1 change: 1 addition & 0 deletions .claude/skills/authoring-docs
1 change: 1 addition & 0 deletions .claude/skills/babysit
1 change: 1 addition & 0 deletions .claude/skills/ship-pr
1 change: 1 addition & 0 deletions .claude/skills/verify
1 change: 1 addition & 0 deletions .claude/skills/writing-pr
Loading