Skip to content

chore: rebase beta onto master - #3110

Closed
mykola-mokhnach wants to merge 109 commits into
betafrom
sync/rebase-beta
Closed

mykola-mokhnach wants to merge 109 commits into
betafrom
sync/rebase-beta

Conversation

@mykola-mokhnach

@mykola-mokhnach mykola-mokhnach commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

Rebases beta onto master so that master becomes an ancestor of beta, which allows promoting beta to the stable 13.0.0 release with a fast-forward push (merge commits are disabled).

Do not merge with the GitHub buttons. This is landed with git push --force-with-lease=beta:cfc27be50 origin sync/rebase-beta:beta, so original commit SHAs are preserved.

Local verification: tsc -b, oxlint, 807 unit tests pass.

KazuCocoa and others added 30 commits September 24, 2026 00:03
## [12.13.2](v12.13.1...v12.13.2) (2026-09-23)

### Bug Fixes

* grepFile error handling ([#2989](#2989)) ([79b387b](79b387b))
## [12.13.3](v12.13.2...v12.13.3) (2026-09-28)

### Bug Fixes

* bump WDA for package creation with Xcode 26+ ([#2996](#2996)) ([b9750ba](b9750ba))
## [12.14.0](v12.13.3...v12.14.0) (2026-10-03)

### Features

* support simulatorPasteboardAutomaticSync and connect hardware preference for Device Hub ([#2999](#2999)) ([3cda6b2](3cda6b2))
## [12.14.1](v12.14.0...v12.14.1) (2026-10-03)

### Bug Fixes

* merge tunnel and legacy device discovery ([#2991](#2991)) ([77b451f](77b451f))
* feat: partial support Duo

* bump the appium-ios-simulator
## [12.15.0](v12.14.1...v12.15.0) (2026-10-03)

### Features

* support launching WDA on Duo ([#3000](#3000)) ([a097de0](a097de0))
* fix: apply MJPEG orientation before converting screenshots

* fix: make MJPEG screenshot orientation correction opt-in

* test: import MJPEG metadata type explicitly
## [12.15.1](v12.15.0...v12.15.1) (2026-10-07)

### Bug Fixes

* honor explicit MJPEG screenshot orientation correction ([#3008](#3008)) ([4205137](4205137))
* include native geometry in web calibration cache ([#3009](#3009)) ([c73578f](c73578f))
* fix: preserve app iframe selection after native tap calibration

* fix: serialize native web tap atom requests

* style: format native web tap regression tests

* style: apply repository formatter configuration
## [12.15.2](v12.15.1...v12.15.2) (2026-10-07)

### Bug Fixes

* preserve app iframe selection after native tap calibration ([#3015](#3015)) ([9de5422](9de5422))
* fix: refresh display geometry for viewport screenshots

* bump wda

* fix: return best-effort screenshot for invalid crop geometry

* fix: reject negative fractional viewport crop heights
* feat: add simulated Duo hinge angle command

* update docs and add get

* remove js code example

* fix: delegate hinge platform support checks to WDA

* fix: delegate hinge angle validation to WDA
## [12.16.0](v12.15.2...v12.16.0) (2026-10-08)

### Features

* add simulated Duo hinge angle command ([#3001](#3001)) ([3f4d513](3f4d513))

### Bug Fixes

* refresh display geometry for viewport screenshots ([#3007](#3007)) ([68d3103](68d3103))
…DA (#3017)

mobile selectPickerWheelValue ignored value and maxAttempts.
docs/reference/execute-methods.md documents both, and
mobileSelectPickerWheelValue in lib/commands/gesture.ts forwards both to
WDA /wda/pickerwheel/<id>/select. But the entry in
lib/execute-method-map.ts only listed offset as optional, so BaseDriver
logged value and maxAttempts as unknown and dropped them before the
call. WDA then moved the wheel by one step and didn't scroll to the
requested value.

I added value and maxAttempts to the optional params of the map entry
and a unit test in test/unit/commands/gesture.spec.ts that expects both
to reach proxyCommand. A sweep of all 117 executeMethodMap entries
against their command signatures found no other missing or misordered
parameter.

Tests I ran

    $ npm run build, then the node test runner on build/test/unit/commands/gesture.spec.js   (execute-method-map.ts from master f528f59)
    info BaseDriver The following arguments are not known and will be ignored: value,maxAttempts
    Error [ExpectationError]: Unexpected call: proxyCommand('/wda/pickerwheel/4/select', 'POST', { order: 'next' })
    1 failed

    $ npm test   (this branch)
    tests 569, pass 569, fail 0
    $ npm run lint           exit 0
    $ npm run format:check   exit 0

End to end, XCUITestDriver.execute() from build/lib with its WDA proxy
pointed at a local fake WDA server

    master  POST /session/wda1/wda/pickerwheel/abc-4/select {"order":"next"}
    branch  POST /session/wda1/wda/pickerwheel/abc-4/select {"order":"next","value":"March","maxAttempts":50}

The e2e suites didn't run, since they need Xcode, a booted simulator and a built WebDriverAgent.
## [12.16.1](v12.16.0...v12.16.1) (2026-10-10)

### Bug Fixes

* pass value and maxAttempts of mobile selectPickerWheelValue to WDA ([#3017](#3017)) ([ba9e634](ba9e634))
… support (#3013)

* feat: add mobile: getScreens and document the currentDisplayId setting

* fix: bypass stale MJPEG frames after display selection changes

* docs: add duo tutorial

* adjust version

* follow uia2 format as possible

* docs as well

* simplified

* add x, y and trains

* fix typo, tsets

* fix typo

* do not address simctl

* do not address simctl

* review

* review

---------

Co-authored-by: Jason Steinberg <j.steinberg702@gmail.com>
## [12.17.0](v12.16.1...v12.17.0) (2026-10-10)

### Features

* add multi-display discovery and safe screenshot routing for Duo support ([#3013](#3013)) ([0fac1ec](0fac1ec))
* fix: preserve recording aspect ratio and input frame rate

* fix: tolerate recording canvas probe failures

* fix: preserve recording geometry entirely in ffmpeg

* docs: explain ffmpeg-only recording performance rationale

* docs: describe Duo simulator XCTest recording limitation

* shorten

* chore: shorten screen recording comments
## [12.17.1](v12.17.0...v12.17.1) (2026-10-10)

### Bug Fixes

* preserve recording aspect ratio and input frame rate ([#3010](#3010)) ([caabeb3](caabeb3))
## [12.17.2](v12.17.1...v12.17.2) (2026-10-12)

### Bug Fixes

* track Apple TV tunnels by pair record UDID ([#3032](#3032)) ([10e7d17](10e7d17))
- shutdown signals ran cleanup but never called process.exit, so any handle left open kept the process alive
- repeated signals were swallowed by the cleanup-once guard, so Ctrl+C could not stop it
- exit after cleanup on shutdown signals
- force exit on a repeated signal while cleanup is still running
## [12.17.3](v12.17.2...v12.17.3) (2026-10-12)

### Bug Fixes

* make tunnel-creation exit on Ctrl+C ([#3033](#3033)) ([1dde1ec](1dde1ec))
mykola-mokhnach and others added 21 commits October 31, 2026 20:32
)

* fix: declare autoLaunch capability in driver constraints

* fix: accept nullable implicit wait values from beta dependencies
* fix: retain and clean up screen recorder after stop failure

(cherry picked from commit 1a32f67)

* test: adapt beta recorder retry regression to kill escalation
BREAKING CHANGE: Removed the undocumented XCUITestDriver.executeAtomAsync method. It had no internal callers and was not exposed as a command. Driver subclasses that call it should use this.remote.executeAtomAsync(atom, args, this.curWebFrames) followed by this.waitForAtom(promise) instead.
#3041)

BREAKING CHANGE: Removed the asyncWaitMs driver property. Use scriptTimeoutMs (base driver) instead.
BREAKING CHANGE: GET /timeouts reports script: null for a new session, not 0.
BREAKING CHANGE: execute now uses the script timeout that the client sets (before: ignored). A client that sends 0, or a value shorter than its scripts, now gets script timeout.
* feat: add execute method for retrieving pressable buttons

* chore: fix route name

* docs: update description
…m unzip (#3080)

BREAKING CHANGE: the bsdtar utility is no longer used and the APPIUM_PREFER_SYSTEM_UNZIP environment variable has no effect. Non-UTF-8-flagged zip file names are decoded as utf8; cp437 is not supported.
…(tunnel preferred, usbmux fallback) (#3082)

BREAKING CHANGE: appium-ios-device is no longer used.
BREAKING CHANGE: The lockdown simulate-location service is gone, so setting the geolocation on real devices below iOS/tvOS 17 is not supported.
BREAKING CHANGE: The appium:safariSocketChunkSize capability has been removed.
BREAKING CHANGE: The appium:safariWebInspectorMaxFrameLength no longer has an effect on real devices.
BREAKING CHANGE: mobile: killApp always returns false on real devices below iOS/tvOS 17 (and on Linux/Windows hosts without a tunnel), because the instruments service it used is gone.
…exts (#3090)

* fix: stop stale remote debugger listeners when switching webview contexts

* chore(deps): bump appium-remote-debugger to ^18.0.3

* refactor: split setContext into private helpers
* fix: remove perf recording temp files when start or upload fails

* style: format performance spec
* fix: align default screenshotQuality setting with WDA

* refactor: make WDA the source of truth for its settings
@linux-foundation-easycla

linux-foundation-easycla Bot commented Oct 31, 2026 •

Copy link
Copy Markdown

CLA Not Signed

@greptile-apps

greptile-apps Bot commented Oct 31, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 5/5

[High impact] The PR appears safe to merge; the remaining duplicate-test finding is non-blocking.

Findings

  1. P2 Tests repeat existing checks ▶

Summary

Rebases beta onto master for the planned stable release while retaining beta’s driver design.

  • Real-device sessions choose a tunnel or a limited usbmux fallback.
  • Duo simulator sessions can select displays and change the hinge angle.
  • Device commands and recordings gain new options and updated behavior.
  • New sessions wait for prior teardown, and monitor starts share in-flight work.
  • Beta carries master’s release notes, workflow updates, and supporting changes.

No new actionable findings were established.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart TD
  A[Real-device service request] --> B{Session transport}
  B -->|Tunnel available| C[Remote XPC tunnel]
  B -->|No tunnel| D[Temporary usbmux fallback]
  D --> E{Service needs a tunnel?}
  E -->|No| F[Run service over usbmux]
  E -->|Yes| G[Return tunnel setup guidance]
Loading

Reviews (2) · Last reviewed commit: "chore: reconcile beta sources after reba..." · Reviewed by Greptile

Comment on lines +272 to +278
it('should pass value and maxAttempts through to WDA', async function () {
const opts = {elementId: 4, order: 'next', value: 'myvalue', maxAttempts: 50};
mockDriver
.expects('proxyCommand')
.once()
.withExactArgs('/wda/pickerwheel/4/select', 'POST', {order: 'next', value: 'myvalue', maxAttempts: 50});
await driver.execute(`mobile: ${commandName}`, opts);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Tests repeat existing checks

This test exactly repeats the picker-wheel test at lines 254–261. The rebase also duplicates the PerfRecorder.start cleanup test in test/unit/commands/performance.spec.ts. Remove one copy of each: running both adds no coverage and leaves future fixes to update two places.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Restore beta's versions of files where the rebase of duplicated master
backports regressed them (recordscreen, types, implicit-wait, driver
command table) and fix a duplicated test declaration.
@mykola-mokhnach

Copy link
Copy Markdown
Contributor Author

Superseded by #3111: this PR conflicts with the old beta (rewritten SHAs), so CI cannot run here. The rebased branch is validated through #3111 and then landed with a force-push to beta.

@mykola-mokhnach
mykola-mokhnach deleted the sync/rebase-beta branch November 1, 2026 07:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.