)]}'
{
  "log": [
    {
      "commit": "5ab1259c7f74ffdb8d9777486ed04d1b6aad5a36",
      "tree": "4f6aea7d5da7e89e11c1cb7e3d1478dd2a536229",
      "parents": [
        "65230af47f59589e8caf82ee8d739a6050305444"
      ],
      "author": {
        "name": "Selenium CI Bot",
        "email": "selenium-ci@users.noreply.github.com",
        "time": "Wed Sep 09 15:37:36 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 09 16:26:32 2026"
      },
      "message": "[build] Reset versions to nightly after selenium-4.49.0 release\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 0a5e0e73a688360ac3cdfe4af8be7a5c91b23878\n"
    },
    {
      "commit": "65230af47f59589e8caf82ee8d739a6050305444",
      "tree": "432428e2f4f7fce83abdcb0495d75bf355e09e82",
      "parents": [
        "26273c1a8a3ef507620088d2451f641cb8c06d48"
      ],
      "author": {
        "name": "Selenium CI Bot",
        "email": "diemol+selenium-ci@gmail.com",
        "time": "Wed Sep 09 15:27:34 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 09 16:25:54 2026"
      },
      "message": "[build] Prepare for release of selenium-4.49.0 (#18012)\n\n* bump versions\n\n* changelogs updated\n\n* rust changelogs updated\n\n* update selenium manager versions\n\n* update authors file\n\n---------\n\nCo-authored-by: Selenium CI Bot \u003cselenium-ci@users.noreply.github.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: bedb24f6f703876e7e4c5d506f0d697eb358c720\n"
    },
    {
      "commit": "26273c1a8a3ef507620088d2451f641cb8c06d48",
      "tree": "eb3119ad8761757e534e5baa0fd89ea38dc4eac2",
      "parents": [
        "fed0abfcfd6b4ecfd42f076ea1d5bf8d401d8e60"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Wed Sep 09 13:41:50 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 09 14:24:54 2026"
      },
      "message": "[py] adopt the worthwhile ruff 0.16 rule families (tranches 1 and 2) (#17992)\n\n* [py] enforce the mechanical ruff rule families from ruff 0.16 (#17989)\n\nTranche 1 of #17989. Adds the rule families whose findings are pure local\nrewrites, and fixes the 20 findings so //py:ruff-check stays green.\n\nAdopted as whole families (verified clean at full-family scope): C4, FLY, W.\nAdopted as individual rules, because the rest of their family is far noisier\nthan the subset ruff 0.16 enables by default: FURB122, FURB167, FURB188,\nFURB192, PERF102. For scale, whole-family PLR is 332 findings (251 of them\nPLR2004) against 4 in the default set, and whole-family FURB/PERF are 29/19\nagainst 10/2 -- so select entries have to be rule codes there, not family\nnames.\n\nFixes:\n- FURB188 x4 generate_bidi.py: removeprefix/removesuffix\n- FURB122 x2 generate.py, firefox_profile.py: writelines\n- FURB167 x2 update_cddl.py: re.S -\u003e re.DOTALL\n- FURB192 x2 pinned_browsers.py, update_cdp.py: sorted(...)[-1] -\u003e max(...)\n- C400 x2, C408 x2, C417, C419, C420: comprehension rewrites\n- PERF102 x2 cdp.py: .items() -\u003e .values()\n- FLY002 remote_server_tests.py: static join -\u003e literal\n\nNote on FURB192: sorted(...)[-1] and max(...) disagree when two entries tie on\nthe sort key -- a stable sort returns the last tied element, max the first.\nBoth call sites pick the newest chrome-for-testing build within a milestone,\nwhere version strings are unique, so this is inert in practice. Calling it out\nbecause it is the only behavioural change in the commit.\n\nThe comprehension rewrites in webdriver.py touch _wrap_value/_unwrap_value and\nthe one in _script_handlers.py feeds a BiDi preload script, so those were\nchecked for equivalence against the pre-change code over a generated input\ncorpus before being applied. bazel test --test_size_filters\u003dsmall //py:unit\npasses 32/32; //py:ruff-check and //py:ruff-format --check are clean.\n\nDeliberately not adopted here: FURB110 (18, if-exp -\u003e or, a readability\nregression as often as not) and the rest of PERF (PERF401/403 comprehension\nrewrites, PERF203 try-except-in-loop), which are loop-shape changes rather\nthan mechanical ones.\n\n* [py] settle shebang/exec-bit consistency and enforce ruff EXE (#17989)\n\nTranche 1 of #17989, split out from the mechanical-rewrite commit because it is\nthe only part that changes git file modes.\n\nSix files disagreed with themselves about whether they are directly\nexecutable. All six are py_binary srcs, invoked through Bazel\n(./go update_cddl -\u003e bazel run //scripts:update_cddl) or with an explicit\ninterpreter (py/tox.ini uses {envpython} ./generate_api_module_listing.py), so\nnone of them ever relies on its shebang. Resolved all six the same way -- not\ndirectly executable:\n\n- chmod -x (100755 -\u003e 100644), which clears EXE002:\n  py/generate_api_module_listing.py, py/generate_bidi.py, py/run_mypy.py,\n  py/run_sphinx_autogen.py\n- drop the now-unused shebang, which clears EXE001:\n  scripts/update_cddl.py, scripts/update_docfx.py\n\n//scripts:update_cddl, //scripts:update_docfx, //py:generate-api-listing,\n//py:generate_bidi, //py:mypy and //py:sphinx-autogen all still build.\n\n* [py] replace the assert 1 \u003d\u003d 0 idiom with pytest.raises and enforce PLR0133 (#17989)\n\nTranche 1 of #17989. All four PLR0133 (comparison-of-constant) findings are the\nsame shape in visibility_tests.py:\n\n    try:\n        element.click()\n        assert 1 \u003d\u003d 0, \"should have thrown an exception\"\n    except (ElementNotVisibleException, ElementNotInteractableException):\n        pass\n\nwhich is pytest.raises spelled the long way round, and reports \"assert 1 \u003d\u003d 0\"\nrather than \"DID NOT RAISE\" when the expectation is not met. Converted all four\nto a with pytest.raises(...) block. PT011 and PT012 are already in\nextend-ignore, so the tuple form and the trailing assert in the send_keys test\nneed no further exemption.\n\nAdds PLR0133 as an individual rule rather than the PLR family: whole-family PLR\nis 332 findings (251 of them PLR2004 magic-value-comparison), and it also\ncarries PLR0913/PLR0917 (too-many-arguments / -positional-arguments, 45 hits)\nwhich land on public constructor signatures the API-compatibility invariant\nprotects.\n\n//py:test/selenium/webdriver/common/visibility_tests-chrome passes 15/15, with\nall four converted tests confirmed as run rather than skipped.\n\n* [py] enforce ruff PIE and PLE (#17989)\n\nTranche 1 of #17989. Both families are small and clean at whole-family scope,\nso they go in as bare family names.\n\nPIE790 x5 -- dropped the unnecessary `pass` after a docstring in cdp.py,\nwebdriver.py (start_client/stop_client), webelement.py (BaseWebElement) and\nthe test webserver. Safe autofix.\n\nThe remaining four findings are false positives, suppressed with a `noqa` and\na reason rather than \"fixed\":\n\n- PIE796 x3, generate_bidi.py CddlType: the duplicate Enum values are\n  deliberate aliases (TEXT-\u003eTSTR, INT/NINT-\u003eUINT), and get_annotation already\n  resolves them through `__members__`, which includes aliases. The bug this\n  rule would have caught was fixed in 9d0ae9e68f; what is left is the intended\n  pattern, so the comment now says so explicitly.\n- PLE0605 x1, webdriver/__init__.py: `__all__ \u003d sorted(_LAZY_IMPORTS.keys())`.\n  sorted() returns a list, so this is correct at runtime; the rule only accepts\n  a literal. The usual argument for a literal is static readability, but\n  __init__.pyi already re-exports every name explicitly with `as` aliases, so\n  type checkers never read this line. Deriving __all__ from _LAZY_IMPORTS is\n  what stops the two from drifting at runtime, so it stays.\n\nNote for reviewers: nothing currently asserts that __init__.pyi\u0027s re-export\nlist and _LAZY_IMPORTS agree. That gap is worth its own change; it is not\nintroduced here.\n\nVerified: regenerating the BiDi sources with this generator produces output\nbyte-identical to trunk\u0027s across all 22 files, apart from the one\n_script_handlers.py line changed deliberately in the mechanical commit.\n//py:unit passes 32/32, including BaseWebElement\u0027s ABC subclass/register\nbehaviour and the start_client/stop_client no-op hooks whose `pass` was\nremoved.\n\n* [py] enforce ruff bugbear (B) with carve-outs (#17989)\n\nTranche 2 of #17989. Adopts B as a family rather than a list of rule codes, so\nthat new bugbear rules in a future ruff release surface as one review decision\ninstead of arriving silently. Whole-family B is 59 findings against the 33 ruff\n0.16 enables by default, so four rules are listed in extend-ignore.\n\nFixed (7):\n- B009 x5 / B010 x1 -- constant getattr/setattr in print_page_options.py,\n  proxy.py and timeouts.py. Safe autofix. proxy.py\u0027s is inside a descriptor\u0027s\n  __set__; proxyType is a plain class attribute rather than another descriptor,\n  so direct assignment is equivalent, and the dynamic setattr(obj, self.name, ...)\n  on the next line is left alone.\n- B006 x1 -- javascript/private/gen_file.py `def main(argv\u003d[])`. The default is\n  unreachable in practice (the only caller is `main(sys.argv)`) and would\n  IndexError on argv[1] if it were ever used, so it is dropped rather than\n  replaced with a None sentinel.\n- B018 x1 -- click_scrolling_tests.py accessed `.size` for its side effect to\n  prove that reading it does not scroll; now `_ \u003d ...` so the intent is explicit.\n\nCarved out via per-file-ignores (18):\nB018 under py/test/** and in py/conftest.py. 17 of the 19 findings are a\nproperty access inside `with pytest.raises(...)`, which is the idiomatic way to\nassert that reading a property raises; the 19th is the driver-liveness probe in\nconftest.py. Note that conftest.py is not under py/test/**, so the pattern\nsuggested on the issue would have missed it. Both globs resolve against the\nworking directory rather than this file, which is why they are spelled\n\"py/...\" -- there is now a comment saying so, because they silently stop\nmatching if ruff is invoked from inside py/.\n\nDeferred via extend-ignore:\n- B904 (17) raise-without-from-inside-except. This is the highest-value rule in\n  the whole 184-finding set for a library -- it materially improves user\n  tracebacks -- but it is 16 findings in py/selenium and deserves its own change\n  rather than being bundled into a lint-config commit.\n- B017 (7) pytest.raises(Exception). Narrowing each site needs the actual\n  exception type confirmed against a live browser (three are BiDi tests, where\n  8cbf4bfa2d\u0027s typed errors make narrowing most valuable), so it is deferred\n  rather than guessed.\n- B028 (4), B007 (3), B024 (2).\n\n//py:unit passes 32/32. //javascript/chrome-driver:header, :source and\n//javascript/ie-driver:header build clean, covering the gen_file.py change.\n\n* [py] narrow pytest.raises(Exception) and enforce B017 (#17989)\n\nTranche 2 of #17989, completing the bugbear adoption by dropping B017 from\nextend-ignore. Each exception type was confirmed by running the Bazel test\ntarget with a deliberately wrong assertion and reading the type back out of the\nfailure, rather than by guessing:\n\n- proxy_tests.py x2 -\u003e ValueError, from Proxy._verify_proxy_type_compatibility.\n- executing_javascript_tests.py -\u003e TypeError. Passing the driver as a script\n  argument is rejected by json.dumps client-side, before any command is sent.\n- _bidi/browsing_context_tests.py x2 -\u003e NoSuchFrameException, for get_tree on a\n  closed context.\n- _bidi/script_tests.py -\u003e NoSuchHandleException, for call_function on a\n  disowned handle.\n\nThe two BiDi files are where this is most worth having: 8cbf4bfa2d added typed\nerrors for BiDi wire error codes, so these assertions now pin the exact code\nthe spec requires instead of accepting anything at all.\n\nquit_tests.py needed a tuple. Which error surfaces after driver.quit() depends\non what is left listening -- against a local driver the process is gone and\nurllib3 raises MaxRetryError, while against a Grid the server is still up and\nthe session lookup fails with InvalidSessionIdException. Both were confirmed by\nrunning quit_tests-chrome and quit_tests-chrome-remote. Worth noting for a\nseparate change: MaxRetryError is a raw urllib3 error escaping the public API,\nand arguably ought to be wrapped in a WebDriverException.\n\nVerified: proxy_tests-chrome, quit_tests-chrome, quit_tests-chrome-remote and\nexecuting_javascript_tests-chrome all pass. In the BiDi suites the four\nnarrowed tests passed 6/6 across repeat runs; the one failure in those files is\ntest_activate_browsing_context, which fails roughly one run in two both here\nand on trunk (asynchronous focus handover) and is unrelated to this change.\n//py:ruff-check clean, //py:unit 32/32.\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 2cd4ec2aae79f3aeaf6947c63182a3a022f0e9f4\n"
    },
    {
      "commit": "fed0abfcfd6b4ecfd42f076ea1d5bf8d401d8e60",
      "tree": "bddfb3e789d83497006c020aa0083561ce5f6d29",
      "parents": [
        "8be696f29dc6f09c62816c09cfdca1956dd0e651"
      ],
      "author": {
        "name": "Selenium CI Bot",
        "email": "diemol+selenium-ci@gmail.com",
        "time": "Wed Sep 09 12:41:06 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 09 13:26:26 2026"
      },
      "message": "[build] Automated Browser Version Update (major) with CDP (#18005)\n\n* Update pinned browser versions\n\n* [java][js] ignore strict file interactability upload tests on Chrome 153+ which raises a focus error instead of ElementNotInteractable\n\n---------\n\nCo-authored-by: Selenium CI Bot \u003cselenium-ci@users.noreply.github.com\u003e\nCo-authored-by: Titus Fortner \u003ctitusfortner@users.noreply.github.com\u003e\nCo-authored-by: Titus Fortner \u003ctitus.fortner@gmail.com\u003e\nCo-authored-by: Diego Molina \u003cdiemol@users.noreply.github.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 0536451d5b340478614e5a2fdba898dec3e59e3a\n"
    },
    {
      "commit": "8be696f29dc6f09c62816c09cfdca1956dd0e651",
      "tree": "99e7a04aef39477604c6d728e36fd3a0c2b8539a",
      "parents": [
        "61fb52962b1e6dc8034e85c0ab17f5c7260dae56"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Wed Sep 09 10:03:02 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 09 10:24:07 2026"
      },
      "message": "[py] add BiDi upload tests that verify files actually reach the server (#18007)\n\nThe existing `input.setFiles` tests stop at the file input\u0027s `value`\nproperty, which only shows the filename string was accepted. Classic\n`upload_tests.py` submits the form and reads what the endpoint echoed\nback, so it proves the bytes were transmitted; the BiDi tests did not.\n\nAdd three tests to the `_bidi` input suite:\n\n- `test_set_files_posts_file_to_server` and its two-file variant mirror\n  the classic upload tests, asserting the endpoint echoed back both the\n  filename and the file content.\n- `test_type_and_set_files_in_same_form` covers filling a form the way a\n  user does, typing into a text field and attaching a file in one flow.\n  It also asserts `#fileResults` changed, so a real `change` event has\n  to fire rather than just a value write.\n\nCopse-Models: acp:claude-agent-acp#opus[1m]\n\nCo-authored-by: Copse \u003cnoreply@copse.dev\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 92394dcf7b0effa4d0a2791c9f5885eb0827bb19\n"
    },
    {
      "commit": "61fb52962b1e6dc8034e85c0ab17f5c7260dae56",
      "tree": "bb1f179a1a6bda36db69fb7afa3c9fa6c5c0d457",
      "parents": [
        "6005ad1a80afafb5371a50712e21996ae238f836"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Tue Sep 08 19:22:58 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Sep 08 20:29:32 2026"
      },
      "message": "[build] ship prebuilt Selenium Manager Linux arm64 binary in all bindings (#17999)\n\n* [build] ship prebuilt Selenium Manager Linux arm64 binary in all bindings\n\n* [build] run the Ruby Selenium Manager smoke tests on a Linux arm64 runner\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 0aaee1e6a990a8383ae04dfb607924f2cd1bc19f\n"
    },
    {
      "commit": "6005ad1a80afafb5371a50712e21996ae238f836",
      "tree": "dd4efc9997dafdc9c4e93867809d9bd40198a252",
      "parents": [
        "e1ea8c562940a3b23866db1cb66992f932842e58"
      ],
      "author": {
        "name": "aayushisabharwal",
        "email": "aayushi.sabharwal@gmail.com",
        "time": "Tue Sep 08 15:00:21 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Sep 08 15:26:27 2026"
      },
      "message": "[py] remove stale xfail markers from python tests (#18002)\n\n[py] remove stale xfail markers from window size/position tests\n\nThe xfail_edge markers on the window size/position tests were added in\n#15638 without a reason or linked issue, and the xfail_chrome,\nxfail_firefox and xfail_remote markers next to them cite a geckodriver\nwindow-positioning bug that no longer reproduces on CI.\n\nWith all of these markers removed, window_tests.py and\napi_example_tests.py pass on chrome, firefox and edge on Windows and\non chrome and firefox through a Grid on Linux, across several runs.\nThe Edge tests also pass locally on macOS.\n\nThe xfail_safari markers are untouched, as are the markers on the two\nlogging tests, which still raise AttributeError outside Chromium.\n\nCo-authored-by: aayushisabharwal \u003c174711043+aayushisabharwal@users.noreply.github.com\u003e\nCo-authored-by: Diego Molina \u003cdiemol@users.noreply.github.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 6147f47ca1bcc222f74722fb9f15d1cd5411ca7c\n"
    },
    {
      "commit": "e1ea8c562940a3b23866db1cb66992f932842e58",
      "tree": "5225d5feba29711702001cad8cb388941254758b",
      "parents": [
        "d4a1a631d7749a695282bd590dda83e1fe3f4898"
      ],
      "author": {
        "name": "Selenium CI Bot",
        "email": "diemol+selenium-ci@gmail.com",
        "time": "Tue Sep 08 09:28:06 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Sep 08 10:26:15 2026"
      },
      "message": "[build] Automated Dependency Update (#17991)\n\nupdate dependencies and pinned binaries\n\nCo-authored-by: Selenium CI Bot \u003cselenium-ci@users.noreply.github.com\u003e\nCo-authored-by: Diego Molina \u003cdiemol@users.noreply.github.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: f4721fddc0158a20d0e31397e89ca1c1bbe72991\n"
    },
    {
      "commit": "d4a1a631d7749a695282bd590dda83e1fe3f4898",
      "tree": "85959d680fd3cebe830d01b0b249e06dfca2ce78",
      "parents": [
        "8ec024458e54c11073e57cf3ac6e94f8b48ed4a8"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titus.fortner@gmail.com",
        "time": "Mon Sep 07 19:20:16 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Sep 07 19:24:10 2026"
      },
      "message": "[py] fix linting issue\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 58ddb0356569f15c459feb17c37e6864ac13b4cb\n"
    },
    {
      "commit": "8ec024458e54c11073e57cf3ac6e94f8b48ed4a8",
      "tree": "c3e21a86c529ae52c4f142f2389b3b6eb5941fca",
      "parents": [
        "b3252fc10d2390e5d79a11812861dec79b8ff37b"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titus.fortner@gmail.com",
        "time": "Mon Sep 07 17:04:18 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Sep 07 18:25:47 2026"
      },
      "message": "[py] tolerate Safari\u0027s mid-navigation window errors in click and window tests\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 4704bc5ef277e56b541f18a71d136830b55d64f0\n"
    },
    {
      "commit": "b3252fc10d2390e5d79a11812861dec79b8ff37b",
      "tree": "bbb7f1aba711125e889671227e4ee83c4d47b8b5",
      "parents": [
        "92a08810d99874b89c6f9ffc920785be0cad24c8"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Mon Sep 07 09:13:19 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Sep 07 09:26:58 2026"
      },
      "message": "[py] raise typed WebDriver errors for BiDi wire error codes (#17952)\n\n* [py] raise typed WebDriver errors for BiDi from a generated error-code map\n\n* [py] generate BiDi error classes instead of minting them at import\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 8cbf4bfa2dc9bab3d11ec78c85a93bc3605ecb83\n"
    },
    {
      "commit": "92a08810d99874b89c6f9ffc920785be0cad24c8",
      "tree": "64ebfe1be670b7b7031434b71b21116ab875c5ed",
      "parents": [
        "3f0f0997f6bc65141d0412ae4aaeb004c9cc245a"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Mon Sep 07 09:11:17 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Sep 07 09:26:27 2026"
      },
      "message": "[py] fix flaky BiDi input tests that raced the page\u0027s autofocus (#17981)\n\nsingle_text_input.html focuses #textInput via autofocus. Firefox may apply that after the load event, so keys dispatched immediately after pages.load() can land on \u003cbody\u003e and the leading characters get dropped. That is why the failure rotated between the keyboard tests in the file instead of pinning to one assertion.\n\ntest_combined_input_actions was affected too: the pointer and key sources advance tick-for-tick, so keyDown(\"t\") fires alongside the pointer move, before the click that would have focused the input.\n\nRequest focus explicitly and wait for document.activeElement before performing actions, in both the generated _bidi mirror and the driver.input facade tests.\n\nFixes #17979\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 396099a1d8ccae70d374418f25f75926c9717d7e\n"
    },
    {
      "commit": "3f0f0997f6bc65141d0412ae4aaeb004c9cc245a",
      "tree": "acc209b350a388f37dde1e9c58731c521b76ba0c",
      "parents": [
        "9bf90b7e6cfd717b1f35293f3d696489a66d96d9"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Mon Sep 07 09:10:16 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Sep 07 09:26:07 2026"
      },
      "message": "[py] run the BiDi tests against the Grid server (#17980)\n\n* [py] run BiDi tests against the Grid server\n\nAdd test-\u003cbrowser\u003e-remote-bidi targets for chrome and firefox, combining the\nBiDi test sources with the grid data/env wiring the other remote suites use.\nBIDI_TESTS was excluded from every remote suite glob, so the Python BiDi tests\nhad never run through Grid\u0027s websocket proxy.\n\nNo client change was needed: --remote and --bidi are independent code paths,\nLocalNode already rewrites webSocketUrl to /session/\u003cid\u003e/se/bidi, and\nProxyNodeWebsockets tunnels it to the node.\n\nKept out of the test-\u003cbrowser\u003e-remote aggregate for now, since this is new\ncoverage. No xfail_remote markers were added: the suite passes except for two\ntests that fail identically without --remote (a headless-Chrome\ndocument.hasFocus() artifact, and a pre-existing firefox wheel-scroll timing\nflake that fails 3/3 runs locally).\n\n* [py] wire the remote BiDi suite into CI and document it\n\nAdd a test-remote-bidi aggregate test_suite alongside test-remote, and a\nseparate remote-bidi-tests job in ci-python.yml that queries it. Keeping it as\nits own job means a red BiDi run cannot redden the established remote job while\nthis coverage is new.\n\nDocument the remote targets and the --remote / --bidi --remote pytest flags in\npy/TESTING.md, including the Grid jar prerequisite.\n\n* [py] set target_compatible_with on the remote test suites\n\nThe bidi and per-browser suites pass BROWSERS[browser][\"target_compatible_with\"]\nthrough; the remote ones did not. It is a no-op today because the value is empty\nfor chrome and firefox, but the divergence would silently drop the platform\nconstraint the first time a remote suite is added for a browser that has one\n(ie, safari, webkitgtk).\n\n* [py] collapse the duplicated xfail_remote and remote-directory guards\n\nThe \"skip unless --remote\" guard was written out three times (driver,\nfirefox_options, chromium_options) and the xfail_\u003cdriver\u003e/xfail_remote marker\ndance twice (driver, clean_driver). Extract _skip_unless_remote and\n_apply_xfail_markers.\n\nThe two marker blocks had drifted apart, so unifying them fixes two latent bugs\nin the clean_driver path:\n\n- it did not support the condition kwarg, and passed it straight to\n  pytest.xfail(), which does not accept it (TypeError)\n- neither block popped run before calling pytest.xfail(), so an explicit\n  run\u003dTrue raised TypeError as well\n\nThe `yield`/`return` after pytest.skip() in both blocks was dead code;\npytest.skip() raises.\n\nVerified against alerts_tests, which exercises all three marker paths\n(condition, run\u003dFalse, plain xfail): 20 passed, 1 skipped, 2 xfailed both\nbefore and after.\n\n* [py] give the remote test suites the COMMON_TAGS their siblings carry\n\nThe remote suites set tags \u003d [\"no-sandbox\", \"remote\", \"\u003cbrowser\u003e-remote\"],\nomitting BROWSERS[browser][\"tags\"] (COMMON_TAGS + the bare browser name) that\nevery non-remote suite carries. Compose from the sibling expression instead and\nkeep the two remote markers on top.\n\nbrowser-test and requires-network are inert here - nothing in .bazelrc*,\n.github/, scripts/ or the Rakefile filters on either, and requires-network is\nmoot anyway because no-sandbox already disables the sandbox. The tag that\nmatters is the bare browser name: py/TESTING.md documents\n\n    bazel test //py/... --test_tag_filters\u003dchrome\n\nand that silently matched no remote target. It now matches all 26 per-browser\nremote-bidi targets. Ruby already does this and says why in a comment\n(rb/spec/tests.bzl), so this aligns Python with the reference implementation.\n\nThe omission was incidental rather than deliberate: the per-browser remote\ntargets in b1904f8a89 (#16851) inherited the minimal tag set of the single\ntest-remote target they replaced, and no rationale for the tag choice is\nrecorded.\n\n* [py] make the focus and wheel-scroll bidi tests work headed and headless\n\nBoth tests read an asynchronous result exactly once, so they raced it.\n\ntest_activate_browsing_context asserted that creating a second window takes\nfocus off the first. Focus is handed over asynchronously, so poll for it. That\nalone is not enough: headless Chromium has no window manager and never hands\nfocus over at all, confirmed by a 5s wait timing out 5/5 runs. So skip in that\ncase only - gated on the new `headless` fixture, and only after the wait has\nactually expired. Headless Firefox does hand focus over and keeps the full\nassertions; headed runs still fail loudly if the handover regresses, because the\nskip cannot trigger outside headless.\n\ntest_wheel_scroll_with_duration spreads a 100px scroll over 500ms and then\nasserted pageYOffset \u003d\u003d 100 immediately; Firefox was reliably one pixel short.\nWait for the scroll to settle before asserting, keeping the exact assertion\nrather than widening it to a tolerance.\n\nVerified per browser and per mode:\n- test_activate: chrome headless skips (was failing), chrome headed passes with\n  full assertions, firefox headless passes with full assertions and 0 skips\n- test_wheel_scroll_with_duration: failed 3/3 runs at HEAD, 0/3 after\n\nBoth tests exist twice (bidi/ and _bidi/); both copies are updated.\n\nNote: py/test/selenium/webdriver/common/_bidi/input_tests.py has further\npre-existing firefox flakiness not addressed here - test_key_input_with_value_attribute,\ntest_key_input_special_characters and test_combined_input_actions each failed in\nsome runs, a different one each time, both before and after this change.\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 3952c6bd017f2d6b0b5fd963766b49cc46c53022\n"
    },
    {
      "commit": "9bf90b7e6cfd717b1f35293f3d696489a66d96d9",
      "tree": "04f6715390b2a07d270dc11677c60b8ba0f8bd51",
      "parents": [
        "09ed8a5bd12bde46de5158403eb08ff0ee616277"
      ],
      "author": {
        "name": "Selenium CI Bot",
        "email": "diemol+selenium-ci@gmail.com",
        "time": "Sun Sep 06 21:58:35 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Sep 06 22:24:09 2026"
      },
      "message": "[build] Automated Dependency Update (#17937)\n\n* update dependencies and pinned binaries\n\n* [py] override new ruff rule selection to keep existing checks\n\n---------\n\nCo-authored-by: Selenium CI Bot \u003cselenium-ci@users.noreply.github.com\u003e\nCo-authored-by: Titus Fortner \u003ctitus.fortner@gmail.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 2e989902563b799b567e7e3e938a6a959a823dd4\n"
    },
    {
      "commit": "09ed8a5bd12bde46de5158403eb08ff0ee616277",
      "tree": "218980892dd7eae76b05c72cf64a25a62b96d6e9",
      "parents": [
        "4abe1a8d9eb42a1ca00a43b9b9b17233a6b43d94"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titus.fortner@gmail.com",
        "time": "Sun Sep 06 18:40:07 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Sep 06 19:26:07 2026"
      },
      "message": "[py] remove no-op port self-assignment from the test web server\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 802accd24d0872faebdc7624b85c8820bcc0e5a9\n"
    },
    {
      "commit": "4abe1a8d9eb42a1ca00a43b9b9b17233a6b43d94",
      "tree": "2e4263e9163ec0ebd38b3abc25330b8fd79424c5",
      "parents": [
        "708876b8f6f9bb7c59bc2a4faa72261fe4748d40"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titus.fortner@gmail.com",
        "time": "Sun Sep 06 18:40:07 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Sep 06 19:25:43 2026"
      },
      "message": "[py] add missing assert in device serial options test\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 50cc58f73d68555ac8cb953df596c3ded2b63d33\n"
    },
    {
      "commit": "708876b8f6f9bb7c59bc2a4faa72261fe4748d40",
      "tree": "adbb5db2d57597fc91b596a43243129e9804ee73",
      "parents": [
        "cd6a40c830a86e60e5fe340c1f7f90dce7962e14"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titus.fortner@gmail.com",
        "time": "Sun Sep 06 18:40:07 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Sep 06 19:25:18 2026"
      },
      "message": "[py] fix swapped assert arguments in async script array tests\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 23c8a890e8505362f537c129e1ef13a61e8a0b82\n"
    },
    {
      "commit": "cd6a40c830a86e60e5fe340c1f7f90dce7962e14",
      "tree": "3c67c8acc0a1e46b39c8b3310980fa5d910fd319",
      "parents": [
        "8164663c37199983f3612468baf505a9b36fe930"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titus.fortner@gmail.com",
        "time": "Sun Sep 06 18:40:07 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Sep 06 19:24:59 2026"
      },
      "message": "[py] stop sharing the default ClientConfig proxy between instances\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 56e5c616d88a3de5eed3cac3a5031608b11a200e\n"
    },
    {
      "commit": "8164663c37199983f3612468baf505a9b36fe930",
      "tree": "d98503bf1023451cff67ee603cce17a771e74ff6",
      "parents": [
        "2afd124cc6da521dfe9333bb81989525b471515e"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titus.fortner@gmail.com",
        "time": "Sun Sep 06 18:40:07 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Sep 06 19:24:41 2026"
      },
      "message": "[py] resolve aliased CddlType members when generating BiDi annotations\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 9d0ae9e68f2773c742040cb336c1e3da241657d8\n"
    },
    {
      "commit": "2afd124cc6da521dfe9333bb81989525b471515e",
      "tree": "92896ca7d01b0e87b270335a4eac484617e21c39",
      "parents": [
        "b5ad0c02a2a67b56c2cd6e2a002e2540bc580aeb"
      ],
      "author": {
        "name": "Alex Popov",
        "email": "iampopovich@gmail.com",
        "time": "Thu Sep 03 22:12:54 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Sep 03 22:26:54 2026"
      },
      "message": "[py] chore: enable mypy disallow untyped decorators and update type hints (#17974)\n\nchore: enable mypy disallow untyped decorators and update type hints in webdriver.py\n\nCo-authored-by: Corey Goldberg \u003c1113081+cgoldberg@users.noreply.github.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 34c744284a5726b252b3adc7cdcc6d2c362ff71e\n"
    },
    {
      "commit": "b5ad0c02a2a67b56c2cd6e2a002e2540bc580aeb",
      "tree": "b9cd7ecf6fb3a13b9206619a4dac759997f91ba2",
      "parents": [
        "34fc595f57e4151158897d3573faff096341a34a"
      ],
      "author": {
        "name": "Diego Molina",
        "email": "diemol@users.noreply.github.com",
        "time": "Thu Sep 03 07:56:16 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Sep 03 08:24:43 2026"
      },
      "message": "[py] wire print_pdf_tests.py into the browser test suites (#17976)\n\nprint_pdf_tests.py imports PrintOptions from its own library\n(:common_print_page_options), which was never added as a dependency\nof the test-\u003cbrowser\u003e-common targets, so the file was excluded from\nevery glob() that feeds them instead. That left it excluded from\nBazel\u0027s target graph entirely for chrome/edge/firefox/safari, and\nreachable-but-broken (ImportError on collection) for the\nwebkitgtk/wpewebkit targets, which don\u0027t have the same exclude.\n\nFollow the existing feature-suite pattern (fedcm, timeouts, alerts,\netc.) instead: carve print_pdf_tests.py out via PRINT_TESTS, fold it\ninto FEATURE_TESTS so it\u0027s excluded from the common globs, and\nregister it in FEATURE_SUITE_DEFS so per-browser and per-browser\nremote targets are generated with the :common_print_page_options dep.\n\nVerified locally with `bazel test`: 4/4 pass on chrome, firefox and\nedge (both local and remote variants); safari correctly xfails via\nthe existing @pytest.mark.xfail_safari markers.\n\nCo-authored-by: Claude Sonnet 5 \u003cnoreply@anthropic.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 05423ea3704077adb3a8faabbd431c2926a98ddf\n"
    },
    {
      "commit": "34fc595f57e4151158897d3573faff096341a34a",
      "tree": "c07154c6518276d41ef422a066b53a91648cf95c",
      "parents": [
        "e14b847af649b208c3345d4281af8c113232ca62"
      ],
      "author": {
        "name": "Alex Popov",
        "email": "iampopovich@gmail.com",
        "time": "Wed Sep 02 16:48:01 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Sep 02 17:24:42 2026"
      },
      "message": "[py] chore fix for unreachable mypy warnings (#17969)\n\n* refactor: Enhance type annotations in options, pointer_input, and proxy modules\n\n* applied same pattern as for method from_json at the line 598\n\n---------\n\nCo-authored-by: Corey Goldberg \u003c1113081+cgoldberg@users.noreply.github.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 483f8cd73fef9cc5a151c69166706884ed1d1f27\n"
    },
    {
      "commit": "e14b847af649b208c3345d4281af8c113232ca62",
      "tree": "f4d44adcaca0ade2f05b7e00490e6a2fbeda2f71",
      "parents": [
        "851fc511764252de42526bfcdbcdb6f34260a7c4"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Mon Aug 31 19:08:59 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Aug 31 19:25:33 2026"
      },
      "message": "[js][py][rb] derive BiDi field names and enum value types in the schema (#17966)\n\n* [js] project BiDi wire keys to identifier-safe schema field names\n\n* [js][py][rb] declare enum value primitives in the schema and honor them when generating\n\n* [build] update cddl spec files and regenerate the BiDi schema and protocol\n\n* [py] hold BiDi enum values to their declared primitive type\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 8b8723bbeb277d4657cdc166f99c4e066d060e66\n"
    },
    {
      "commit": "851fc511764252de42526bfcdbcdb6f34260a7c4",
      "tree": "84cedd31a516d5f3065b57159de4b9d981c60b14",
      "parents": [
        "08ffd551d41ee8a0f3c11851dbc3ae85af7caaf6"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Fri Aug 28 20:13:45 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Aug 28 20:25:36 2026"
      },
      "message": "[js][py] Capitalize non-Latin text in the getVisibleText atom (#17964)\n\n* [js][py] Capitalize non-Latin text in the getVisibleText atom\n\nThe `text-transform: capitalize` handling matched letters with hardcoded\nLatin-only ranges, so Cyrillic, Greek and Armenian matched neither the\n\"titlecase this letter\" class nor the \"continues a word\" class, and were\nreturned untransformed.\n\nBuild the patterns from the \\p{L}, \\p{M} and \\p{N} Unicode property escapes\nunder the \"u\" flag instead. The enclosed alphanumerics range stays explicit:\nthose are symbols rather than letters, but do have case mappings. Engines\nwithout the \"u\" flag fall back to the previous Latin-only literals, so the\nIE driver\u0027s atom keeps its current behaviour.\n\nGet Element Text is a driver-side endpoint, served from each browser\u0027s own\nvendored copy of the atom, so the Python tests for non-Latin text stay\nxfail until this is upstreamed into Chromium and Gecko.\n\nFixes #17945\n\n* [py] xfail the Latin text-transform test on WebKit\n\nWebKit computes Get Element Text without applying text-transform at all, so\nSafari returns the untransformed source text even for Latin script. This is\nunrelated to the non-Latin capitalize bug the rest of this change fixes -\nChrome, Edge and Firefox all pass the Latin assertions.\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 5d90b1dce34154446da111e0c510d4c7e13f18ca\n"
    },
    {
      "commit": "08ffd551d41ee8a0f3c11851dbc3ae85af7caaf6",
      "tree": "8c76a9ca9a2eeaff59500bf5391ac45309ff4473",
      "parents": [
        "0c9c984b9659044b811cc04365e8625a4655174a"
      ],
      "author": {
        "name": "Selenium CI Bot",
        "email": "selenium-ci@users.noreply.github.com",
        "time": "Thu Aug 27 20:16:03 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Aug 27 20:24:01 2026"
      },
      "message": "[build] Reset versions to nightly after selenium-4.48.0 release\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 61d5f668bc1c146c9bb4f24aca5a03e90baf8dea\n"
    },
    {
      "commit": "0c9c984b9659044b811cc04365e8625a4655174a",
      "tree": "c4a2ebadf71f23aa092d8f2192820aaaca219dcd",
      "parents": [
        "173dd018c20183f857bd99e65163572a161e76e9"
      ],
      "author": {
        "name": "Selenium CI Bot",
        "email": "diemol+selenium-ci@gmail.com",
        "time": "Thu Aug 27 20:03:17 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Aug 27 20:23:57 2026"
      },
      "message": "[build] Prepare for release of selenium-4.48.0 (#17956)\n\n* bump versions\n\n* changelogs updated\n\n* rust changelogs updated\n\n* update selenium manager versions\n\n* update authors file\n\n---------\n\nCo-authored-by: Selenium CI Bot \u003cselenium-ci@users.noreply.github.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 27f5213055e28398a5105b7892b7a3bb2012a6ef\n"
    },
    {
      "commit": "173dd018c20183f857bd99e65163572a161e76e9",
      "tree": "91543d7c835fcd4a414b6be899af991b70b7d288",
      "parents": [
        "4a13de349d1be6784dae022e6bd7fba3ec5ef846"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Tue Aug 25 16:22:55 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Aug 25 17:23:27 2026"
      },
      "message": "[py] update new BiDi layer generation to conform to latest proposed ADR (#17942)\n\n* [py] align generated BiDi layer with the low-level contract and drop ADR cross-references\n\n* [py] always reject a missing required inbound BiDi field\n\n* [py] reject an inbound BiDi scalar outside its union\u0027s declared arms\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 5b3666d62507b79ae08b0bf0e18604c28bb8f404\n"
    },
    {
      "commit": "4a13de349d1be6784dae022e6bd7fba3ec5ef846",
      "tree": "0c02f61826a5d12556d6ce3a2aee0932dbcf2c1d",
      "parents": [
        "28b89b671489c67765baf0a3c12c77f0be242a9a"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Fri Aug 21 21:29:05 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Aug 21 22:23:34 2026"
      },
      "message": "[py] generate the internal BiDi protocol layer from the shared binding-neutral schema (#17761)\n\n* [py] add internal generated BiDi protocol layer (build-time generated)\n\n* [py] add the BiDi Domain and Transport runtime\n\n* [py] add generated _bidi integration tests and reorganize into bidi/ and _bidi/\n\n* [py] tighten BiDi wire-error/payload checks and pin generated _bidi srcs\n\n* [py] tolerate inbound BiDi schema drift (warn) with a strict opt-in; require fields outbound\n\n* [py] warn once per record for undeclared BiDi properties, not once per key\n\n* [py] resolve cross-domain BiDi refs lazily and bound tolerated-inbound warnings per record\n\n* [py] validate outbound BiDi values (primitive/list/record) at the as_json boundary\n\n* [py] include alias-union scalar arms in generated value aliases\n\n* [py] validate outbound BiDi map entries and surface real import errors in resolve\n\n* [py] validate outbound BiDi union values against the union\u0027s variants\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 7eca8c6eb9c59eab042a08eeeb35d989915ddfb2\n"
    },
    {
      "commit": "28b89b671489c67765baf0a3c12c77f0be242a9a",
      "tree": "e188723635f51bcc6ae6507205b03dedaea6afe5",
      "parents": [
        "5eefd57ce5ef07eb3afbcc254efe345907421e47"
      ],
      "author": {
        "name": "Diego Molina",
        "email": "diemol@users.noreply.github.com",
        "time": "Tue Aug 18 05:57:26 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Aug 18 06:23:51 2026"
      },
      "message": "Revert \"[py] temporarily disable nightly TestPyPI publishing (#17920)\" (#17924)\n\nThis reverts commit 7f32b68a30dc4b235857a3fe7cf8629b3f4e5ae4.\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: bfd6bd77fed0485f0ea72319fadfa309ec5c7342\n"
    },
    {
      "commit": "5eefd57ce5ef07eb3afbcc254efe345907421e47",
      "tree": "dc55366d7ffa996a18542b3d05cb64122ff71be3",
      "parents": [
        "18bbb46d34b78c59c12ea97ac020231eb8777eff"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Mon Aug 17 17:05:15 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Aug 17 17:23:25 2026"
      },
      "message": "[py] temporarily disable nightly TestPyPI publishing (#17920)\n\n[py] disable nightly TestPyPI publishing and add twine --verbose\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 7f32b68a30dc4b235857a3fe7cf8629b3f4e5ae4\n"
    },
    {
      "commit": "18bbb46d34b78c59c12ea97ac020231eb8777eff",
      "tree": "e188723635f51bcc6ae6507205b03dedaea6afe5",
      "parents": [
        "1a6661b824306d1abf1adcaf5bd11596e3876f9e"
      ],
      "author": {
        "name": "Selenium CI Bot",
        "email": "diemol+selenium-ci@gmail.com",
        "time": "Sat Aug 15 04:08:32 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Aug 15 04:23:48 2026"
      },
      "message": "[build] Automated Browser Version Update (major) with CDP (#17910)\n\nUpdate pinned browser versions\n\nCo-authored-by: Selenium CI Bot \u003cselenium-ci@users.noreply.github.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 3e387119b8709dbde85e8bd4e8b79801523b9993\n"
    },
    {
      "commit": "1a6661b824306d1abf1adcaf5bd11596e3876f9e",
      "tree": "854435ec7ca7a7ae3756f47fbcc28c09cabadf3b",
      "parents": [
        "19c2088a3dffe3cc555f5ce43dec217b25847535"
      ],
      "author": {
        "name": "Corey Goldberg",
        "email": "1113081+cgoldberg@users.noreply.github.com",
        "time": "Tue Aug 11 23:53:31 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Aug 11 23:59:13 2026"
      },
      "message": "[py] Fix broken reStructuredText link in docs (#17902)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 80f0c346c8c96a6d0372bb843aed8d05dccabb9d\n"
    },
    {
      "commit": "19c2088a3dffe3cc555f5ce43dec217b25847535",
      "tree": "10edfb4642d8401c2a9a3434ad708a255b8a193c",
      "parents": [
        "10359a997e027d699bb74ea9873494aad320e631"
      ],
      "author": {
        "name": "Navin Chandra",
        "email": "navinchandra772@gmail.com",
        "time": "Tue Aug 11 13:34:30 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Aug 11 14:23:09 2026"
      },
      "message": "[py]: fix W3C capabilities built from a list of options (create_matches) (#17897)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 86293a1554c8be53c3daa16202e3ce94469cc095\n"
    },
    {
      "commit": "10359a997e027d699bb74ea9873494aad320e631",
      "tree": "b3b2737ed0139ea9a6fd26b0daf454570d522c96",
      "parents": [
        "9f2df213ca873690ae3d474f0c997aff39ad2572"
      ],
      "author": {
        "name": "Selenium CI Bot",
        "email": "selenium-ci@users.noreply.github.com",
        "time": "Mon Aug 10 18:12:39 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Aug 10 18:23:39 2026"
      },
      "message": "[build] Reset versions to nightly after selenium-4.47.0 release\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 1ed71ed333b3c3ef37aac37c5da489d8b0474590\n"
    },
    {
      "commit": "9f2df213ca873690ae3d474f0c997aff39ad2572",
      "tree": "7c3010b724a771000d5499ff4af0c454fe165bd5",
      "parents": [
        "0f451a3fdcad71a666e27a0322d1ba51aa9524ff"
      ],
      "author": {
        "name": "Selenium CI Bot",
        "email": "diemol+selenium-ci@gmail.com",
        "time": "Mon Aug 10 17:51:09 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Aug 10 18:23:34 2026"
      },
      "message": "[build] Prepare for release of selenium-4.47.0 (#17896)\n\n* bump versions\n\n* update cddl spec files\n\n* update dependencies\n\n* changelogs updated\n\n* rust changelogs updated\n\n* update selenium manager versions\n\n* update multitool binaries\n\n* update authors file\n\n* [grid] Embed Kubernetes node in server jar without fabric8 (#17895)\n\n* refactor: update type hints and improve code readability across multiple files\n\n* Revert \"refactor: update type hints and improve code readability across multiple files\"\n\nThis reverts commit e9b8697bf1494999b945721cd4d2e74f885d3d40.\n\n* build: revert upgrade to ruff binaries to version 0.15.21\n\n* (rb) feat: add media feature and viewport meta override parameters to emulation\n\n* fix: handle null file name in TestFileLocator.java\n\n---------\n\nCo-authored-by: Selenium CI Bot \u003cselenium-ci@users.noreply.github.com\u003e\nCo-authored-by: Viet Nguyen Duc \u003cnguyenducviet4496@gmail.com\u003e\nCo-authored-by: Diego Molina \u003cdiemol@gmail.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 9175ed94d83e87cc3abeb7c9fd91367d17849d35\n"
    },
    {
      "commit": "0f451a3fdcad71a666e27a0322d1ba51aa9524ff",
      "tree": "0600cd89e135a62e543369ecb210aecf273ae14f",
      "parents": [
        "066b2d14b103f5763b359f10c785d439b09823fa"
      ],
      "author": {
        "name": "Corey Goldberg",
        "email": "1113081+cgoldberg@users.noreply.github.com",
        "time": "Sun Aug 09 19:00:39 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Aug 09 19:23:29 2026"
      },
      "message": "[py] Ensure driver service subprocess resources are cleaned up (#17889)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 8d23c9827a0417770027cbf66d53f8c276f31412\n"
    },
    {
      "commit": "066b2d14b103f5763b359f10c785d439b09823fa",
      "tree": "ae9a6a3b0fe4e9df6bea10c99d57778583bbb201",
      "parents": [
        "ad1a354da5f43c2db13bac24d516055100a31524"
      ],
      "author": {
        "name": "Navin Chandra",
        "email": "navinchandra772@gmail.com",
        "time": "Fri Aug 07 06:33:01 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Aug 07 07:23:18 2026"
      },
      "message": "[py] fix no_proxy matching so empty entries and substrings do not bypass the proxy (#17884)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 06a692ee065b90cedd2434300ca6de472576afa0\n"
    },
    {
      "commit": "ad1a354da5f43c2db13bac24d516055100a31524",
      "tree": "78c1fb4a8524ffdaf5dbef79a66eaa3d01237f92",
      "parents": [
        "8b89ab3f824f1430572778410091643db7d41ea1"
      ],
      "author": {
        "name": "Selenium CI Bot",
        "email": "diemol+selenium-ci@gmail.com",
        "time": "Wed Aug 05 12:05:40 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Aug 05 12:23:12 2026"
      },
      "message": "[build] Automated Browser Version Update with CDP (#17873)\n\nUpdate pinned browser versions\n\nCo-authored-by: Selenium CI Bot \u003cselenium-ci@users.noreply.github.com\u003e\nCo-authored-by: Titus Fortner \u003ctitusfortner@users.noreply.github.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: a25afbba6fee6e49ccaa4981b22afcc15505f812\n"
    },
    {
      "commit": "8b89ab3f824f1430572778410091643db7d41ea1",
      "tree": "1a703ee4d9315f1894b2d69fa2a9855be582d43a",
      "parents": [
        "34f75b1de021c92f7da0df1854b32dd179fea50d"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Tue Aug 04 18:02:51 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Aug 04 18:25:03 2026"
      },
      "message": "[py] accept By in find_element/find_elements type hints (#17870)\n\n[py] accept By in find_element/find_elements type hints (#17867)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 778cc7a1731dc9c19a6c0e035cde7fba711de00e\n"
    },
    {
      "commit": "34f75b1de021c92f7da0df1854b32dd179fea50d",
      "tree": "4ba1a4bfe3347295b78c2d7018b5d0f152a73a58",
      "parents": [
        "6904e3824e7f6175415f2768cbe61336266f2d33"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Mon Aug 03 02:32:56 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Aug 03 03:23:15 2026"
      },
      "message": "[dotnet][java][py][rb] pass --enable-chrome-logs unless CHROME_LOG_FILE is set (#17858)\n\n[dotnet][java][py][rb] pass --enable-chrome-logs unless CHROME_LOG_FILE is set or on Windows (#16201)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 10eeb94af04c183629f719156aaf896e4a2e4435\n"
    },
    {
      "commit": "6904e3824e7f6175415f2768cbe61336266f2d33",
      "tree": "bb7efe805f3dbadf4c1c40af4a2d291577b1b7a5",
      "parents": [
        "0e73f2761f35a23fb44edfb0be4f388b183b8316"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Fri Jul 31 14:14:15 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 31 14:23:09 2026"
      },
      "message": "[dotnet][py][rb] prevent CDP access with Firefox (#17849)\n\n* [dotnet] throw instead of warn for CDP on Firefox\n\n* [py] raise for CDP methods on Firefox\n\n* [rb] remove CDP extensions from Firefox so methods are unavailable\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 144db0c6cb2a3702dd8a99911a6b8b27326b6b06\n"
    },
    {
      "commit": "0e73f2761f35a23fb44edfb0be4f388b183b8316",
      "tree": "ffe64316768f522920438f3e200258a504773a1a",
      "parents": [
        "82c7e9b2c59e447da8206f13948321795a03fd6d"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Wed Jul 29 17:15:15 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 29 17:23:06 2026"
      },
      "message": "[grid] honor client-advertised se:remoteUrl for reachable BiDi/CDP/VNC URLs (#17790)\n\n* [grid] honor client-advertised se:remoteUrl in the Node with grid-url precedence\n\n* [grid] advertise se:remoteUrl from the language bindings\n\n* [grid] fix se:remoteUrl on URL constructor, https scheme casing, and builder capability conflict\n\n* [grid] strip se:remoteUrl from returned session caps\n\n* [grid] use only the origin of se:remoteUrl for proxied URLs\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: fc654de397f5afdbf1620f09599575a0bd8be1f8\n"
    },
    {
      "commit": "82c7e9b2c59e447da8206f13948321795a03fd6d",
      "tree": "fd4381979335e93f3f7f87d84a42de47e3707d56",
      "parents": [
        "3fb5e9458c9873f77aebe691dc6a8f114df415ab"
      ],
      "author": {
        "name": "Corey Goldberg",
        "email": "1113081+cgoldberg@users.noreply.github.com",
        "time": "Tue Jul 28 15:15:03 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 28 15:21:15 2026"
      },
      "message": "[py] Revert RtD doc build changes (#17831)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 3760c6c1703df72afb256cf2d2b57a9e2aa7395f\n"
    },
    {
      "commit": "3fb5e9458c9873f77aebe691dc6a8f114df415ab",
      "tree": "a3601d999b0dae92f9b39665536d064f43dfa6d5",
      "parents": [
        "89589d325882d86c98cbd9e09ea3aa582c818cfd"
      ],
      "author": {
        "name": "Corey Goldberg",
        "email": "1113081+cgoldberg@users.noreply.github.com",
        "time": "Tue Jul 28 14:43:18 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 28 15:21:10 2026"
      },
      "message": "[py] Fix docs build for RtD (#17830)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 02934469fb97502f3f823e0e049260675e367880\n"
    },
    {
      "commit": "89589d325882d86c98cbd9e09ea3aa582c818cfd",
      "tree": "124877c457acaa85f81115db0d284347dc0fa03c",
      "parents": [
        "bcec4775e5138a508fdf5853db1aaf52907306b7"
      ],
      "author": {
        "name": "Corey Goldberg",
        "email": "1113081+cgoldberg@users.noreply.github.com",
        "time": "Tue Jul 28 14:25:01 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 28 15:21:04 2026"
      },
      "message": "[py] Include generated files in API docs published on Read the Docs (#17794)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: a9f2bc549dcd979d27241404dcd21c7e8b3e1329\n"
    },
    {
      "commit": "bcec4775e5138a508fdf5853db1aaf52907306b7",
      "tree": "fd4381979335e93f3f7f87d84a42de47e3707d56",
      "parents": [
        "aa17fa6a4a29fc63f9d960b80e87649bf5abdc59"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Sun Jul 26 19:37:05 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Jul 26 20:23:20 2026"
      },
      "message": "[build] Download and bundle Selenium Manager SBOM and NOTICE in each package (#17820)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 0d3fcfdebf8f354fe35664f76f8e857de5f71b1b\n"
    },
    {
      "commit": "aa17fa6a4a29fc63f9d960b80e87649bf5abdc59",
      "tree": "55b5a78afc049482fdc7a1d4682224ddeb2f43be",
      "parents": [
        "ebd03cb6f2fb9a0edd7f19bbb84e5480d1220f24"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Fri Jul 24 21:47:08 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jul 24 21:56:14 2026"
      },
      "message": "[build] standardize generated-file license and not to edit markers across generators (#17816)\n\n* [build] standardize generated-file license and DO NOT EDIT markers across generators\n\n* [build] regenerate checked-in generated files with standardized marker\n\n* [build] make CDP regenerate command runnable and fail loud on missing runfiles\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 39155d8aa2fd7a77d3b84f1f8e4e7238573f99ea\n"
    },
    {
      "commit": "ebd03cb6f2fb9a0edd7f19bbb84e5480d1220f24",
      "tree": "b62fffff7df548adc8f1db1d277a151fe8a9f6da",
      "parents": [
        "7d7cfbb1827ef75ba7e6f20d21508e25ec5a8680"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Wed Jul 22 15:07:17 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 22 15:23:31 2026"
      },
      "message": "[build] Fix GeckoDriver rejecting system-access via capabilities (#17811)\n\n* [build] Fix GeckoDriver rejecting system-access via capabilities\n\n* Skip Firefox context tests when running against Grid\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: ba6292945a5c406592d089b6cb9d7420f460b9e7\n"
    },
    {
      "commit": "7d7cfbb1827ef75ba7e6f20d21508e25ec5a8680",
      "tree": "363c5e297c6e1df1dfc9ac39f71e864bfefdec16",
      "parents": [
        "26ca397a8e9b59d869bbc8ca2c0ea88160245c8e"
      ],
      "author": {
        "name": "VIPUL TRIPATHI",
        "email": "vtvipul@gmail.com",
        "time": "Tue Jul 21 17:07:14 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jul 21 17:23:39 2026"
      },
      "message": "[py] Fix default command_executor URL in RemoteWebDriver docstring (#17803)\n\n----\nCo-authored-by: Corey Goldberg \u003c1113081+cgoldberg@users.noreply.github.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 8ad2bcbcccf9011341fa30f33b88457deb31bf0a\n"
    },
    {
      "commit": "26ca397a8e9b59d869bbc8ca2c0ea88160245c8e",
      "tree": "c276e30b334e12017fe21c9179238fdd46400a31",
      "parents": [
        "8a8019718fa5ea8a5fe56cc5d6dc89efd2c9daba"
      ],
      "author": {
        "name": "Corey Goldberg",
        "email": "1113081+cgoldberg@users.noreply.github.com",
        "time": "Wed Jul 15 17:14:16 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 15 17:23:29 2026"
      },
      "message": "[py] Improve generated HTML docs for Python API (#17775)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: bbc57ef032454ad5f00148145f1fbd5bec8aedee\n"
    },
    {
      "commit": "8a8019718fa5ea8a5fe56cc5d6dc89efd2c9daba",
      "tree": "de63d7ad4438e45578768c1e5bf8e8341e39de1f",
      "parents": [
        "5fe96363e06b65d3003bab07339a19982b966999"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Mon Jul 13 23:54:18 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jul 13 23:59:52 2026"
      },
      "message": "[py] generate -bidi test targets for bidi tests only (#17630)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: faeb1f54747548cbb7f90a308f719f8bfa15ae9a\n"
    },
    {
      "commit": "5fe96363e06b65d3003bab07339a19982b966999",
      "tree": "a48ab9267ba4b9ca645b6239b2b0df6e2d605240",
      "parents": [
        "62ffb3b82b0f7327e251986dcef34a85941841d3"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Mon Jul 13 23:00:29 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jul 13 23:23:26 2026"
      },
      "message": "[py] fix add_request_handler ignoring url_patterns on callback\u003d path (#17666)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: b36c4d3447db5b1cffdca921990e88a1ab93a3be\n"
    },
    {
      "commit": "62ffb3b82b0f7327e251986dcef34a85941841d3",
      "tree": "2372ca0911623b245725939ec2685a8372ba7844",
      "parents": [
        "03a68b80b1cef6da6ce3fd56c47de5bd4c04c02c"
      ],
      "author": {
        "name": "Selenium CI Bot",
        "email": "selenium-ci@users.noreply.github.com",
        "time": "Sat Jul 11 00:57:08 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Jul 11 01:23:17 2026"
      },
      "message": "[build] Reset versions to nightly after selenium-4.46.0 release\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 6899c6988009026181c55d39c526fd04e94d5db6\n"
    },
    {
      "commit": "03a68b80b1cef6da6ce3fd56c47de5bd4c04c02c",
      "tree": "425625800e9792104efe31b6e1dde3f55619cd01",
      "parents": [
        "881b3fd1ec7cdf120d1d2d0a872bda5ef48f1e3a"
      ],
      "author": {
        "name": "Selenium CI Bot",
        "email": "diemol+selenium-ci@gmail.com",
        "time": "Sat Jul 11 00:36:04 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Jul 11 00:53:32 2026"
      },
      "message": "[build] Prepare for release of selenium-4.46.0 (#17763)\n\n* bump versions\n\n* update devtools versions\n\n* update cddl spec files\n\n* update dependencies\n\n* changelogs updated\n\n* rust changelogs updated\n\n* update pinned browser versions\n\n* update selenium manager versions\n\n* update multitool binaries\n\n* update authors file\n\n* Running linting script\n\n* [rb] feat: add screencast parameters and methods to browsing context\n\n* [java] test: disable tests related to browsing context due to known issue\n\n---------\n\nCo-authored-by: Selenium CI Bot \u003cselenium-ci@users.noreply.github.com\u003e\nCo-authored-by: Diego Molina \u003cdiemol@gmail.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: df5a6341cbb5f8f06b836bd595752775627c80dc\n"
    },
    {
      "commit": "881b3fd1ec7cdf120d1d2d0a872bda5ef48f1e3a",
      "tree": "c30e94d59c15bb0945b89fa6724b0839ced84fe7",
      "parents": [
        "c67dd2b0b5402db1929d5820412c7a28aceb58cd"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Wed Jul 08 12:38:41 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jul 08 13:22:59 2026"
      },
      "message": "Add guidance for testing conventions in each language (#16734)\n\n* [docs] add per-language TESTING.md guides and slim README testing section\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: ee4057cfd2205dd9555b8ef59b3baf7b613b20c7\n"
    },
    {
      "commit": "c67dd2b0b5402db1929d5820412c7a28aceb58cd",
      "tree": "f036184e4b875d88890c63d929b7143ebb016fe2",
      "parents": [
        "2d2ebbe9d08c1aa732fe393f11d132650b81d691"
      ],
      "author": {
        "name": "Corey Goldberg",
        "email": "1113081+cgoldberg@users.noreply.github.com",
        "time": "Tue Jun 30 23:43:28 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 30 23:49:19 2026"
      },
      "message": "[py] Fix example WebDriverWait import in docstring (#17735)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: c6e9c20f85bdb240df11570ea9eb640bc127cfc1\n"
    },
    {
      "commit": "2d2ebbe9d08c1aa732fe393f11d132650b81d691",
      "tree": "aef46dd0d697944507f4ce69765df30637c97e13",
      "parents": [
        "bc3a24bebfbc4b350b57c9bdbd751bbf00e1e4b7"
      ],
      "author": {
        "name": "Viacheslav Dermichev",
        "email": "113171440+v-dermichev@users.noreply.github.com",
        "time": "Mon Jun 29 19:24:11 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jun 29 20:23:05 2026"
      },
      "message": "[py] Route Safari, STP and WebView2 to their handlers (#17728)\n\n---------\n\nCo-authored-by: Corey Goldberg \u003c1113081+cgoldberg@users.noreply.github.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: e1f5608038ebcf9f11caa0cd0780c1631cedff79\n"
    },
    {
      "commit": "bc3a24bebfbc4b350b57c9bdbd751bbf00e1e4b7",
      "tree": "987932ce5580250166040ca8bc9cf8dad58c0580",
      "parents": [
        "f1473690f36a2e9146d668db2db851a9cab140a6"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Fri Jun 26 16:36:29 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jun 26 17:23:27 2026"
      },
      "message": "[build] add copyright headers to rbs, pyi, ts, mjs, and erb files (#17720)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: ea8ad9bb2760ae8fd12ce68e35de01ccdfb8e761\n"
    },
    {
      "commit": "f1473690f36a2e9146d668db2db851a9cab140a6",
      "tree": "a344aa0263afecfe22ea4db773f1b122e24eafc0",
      "parents": [
        "b81b3baffe0633299ad2adc89cd5ab846331ebe9"
      ],
      "author": {
        "name": "Diego Molina",
        "email": "diemol@gmail.com",
        "time": "Tue Jun 16 16:31:26 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 16 18:49:14 2026"
      },
      "message": "[build] Reset versions to nightly after 4.45.0 release\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 945692a71365d4a8945c0f0ad04c26948b952487\n"
    },
    {
      "commit": "b81b3baffe0633299ad2adc89cd5ab846331ebe9",
      "tree": "a0949501a364ea296b36939064e1e16d17602404",
      "parents": [
        "df765f59ca0b0c7cc253880b42f7956639358c9d"
      ],
      "author": {
        "name": "Selenium CI Bot",
        "email": "diemol+selenium-ci@gmail.com",
        "time": "Tue Jun 16 04:41:30 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 16 04:46:58 2026"
      },
      "message": "[build] Prepare for release of selenium-4.45.0 (#17680)\n\n* bump versions\n\n* update devtools versions\n\n* update dependencies\n\n* changelogs updated\n\n* rust changelogs updated\n\n* update selenium manager versions\n\n* update multitool binaries\n\n* update authors file\n\n* chore(dependencies): update various package versions in Cargo.lock\n\n* fix(ruby): update binary path expectation to use include matcher\n\n* fix(spotbugs): add exclusions for NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE in Selenium classes\n\n* fix(tests): remove redundant xfail_firefox markers from Chromium WebExtension tests\n\n* fix(tests): update variable type from ScriptableObject to TopLevel in atom tests\n\n---------\n\nCo-authored-by: Selenium CI Bot \u003cselenium-ci@users.noreply.github.com\u003e\nCo-authored-by: Diego Molina \u003cdiemol@gmail.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: cd6a3cdfca6970f62e5bc8344109d0fe0e2af05e\n"
    },
    {
      "commit": "df765f59ca0b0c7cc253880b42f7956639358c9d",
      "tree": "77b5b302471dfd90f53ab2fc693ba8d75d9e3683",
      "parents": [
        "8fd9e39cb479589e07ae181cc74cb0dabb4e31b4"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Fri Jun 12 11:51:22 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jun 12 11:53:31 2026"
      },
      "message": "[py] terminate driver service process when start() fails to connect (#17651)\n\n* [py] terminate driver service process when start() fails to connect\n\n* [py] guard service start cleanup against interrupts and cleanup errors\n\n* [py] add timeout to service remote shutdown request\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 18bb1d97d3db196522aa9b3873a350dc40d3ccb8\n"
    },
    {
      "commit": "8fd9e39cb479589e07ae181cc74cb0dabb4e31b4",
      "tree": "bd43cffdb4d9ae59aa4551b6b446984d25f3b4d5",
      "parents": [
        "78d55618841907b021287b0b9beaa5448f077821"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Thu Jun 11 16:06:23 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jun 11 18:39:16 2026"
      },
      "message": "[py] translate continue_request/continue_response kwargs to BiDi wire format (#17669)\n\n* [py] translate continue_request/continue_response kwargs to BiDi wire format\n\nThe high-level Request.continue_request and Response.continue_response\naccepted **kwargs and merged them straight onto the wire params. This\nbypassed the snake_case to camelCase translation (status -\u003e statusCode,\nreason_phrase -\u003e reasonPhrase) and the value encoders used everywhere\nelse in this layer, so pythonic calls like continue_response(status\u003d503)\nor continue_request(headers\u003d{...}) silently sent wrong or untranslated\nvalues.\n\nReplace the kwargs with explicit keyword-only params matching the\nset_* mutators and route them through _continue_params so they are\ntranslated uniformly while still overriding recorded mutations.\n\n* [py] add tests for continue_* override merge and falsy values\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 887237c468022cb5e4637aa98404fac2de0c8d23\n"
    },
    {
      "commit": "78d55618841907b021287b0b9beaa5448f077821",
      "tree": "c3d426697dd10a30fc5736d7d59378ac2821a878",
      "parents": [
        "df767a4cf2053a617154044e5fa96d1e08745fdf"
      ],
      "author": {
        "name": "Navin Chandra",
        "email": "navinchandra772@gmail.com",
        "time": "Tue Jun 09 17:15:47 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jun 10 01:27:12 2026"
      },
      "message": "[py][bidi]: close BiDi websocket on `quit()` (#17663)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: daffab2fef57393a4ba1d8d75358097ebc0a14ff\n"
    },
    {
      "commit": "df767a4cf2053a617154044e5fa96d1e08745fdf",
      "tree": "4959b7370ddff105572b6716a480bf39a427b0ef",
      "parents": [
        "2bdcf131cc095b240b19ca4061635f22b719f5ac"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Tue Jun 09 11:18:11 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jun 10 01:27:06 2026"
      },
      "message": "[py] use local webserver for BiDi network auth/header tests (#17660)\n\nThe BiDi network authentication and extra-header tests navigated to\npostman-echo.com, an external service that makes the tests flaky and\ndependent on network access. Move them onto the existing local\nSimpleWebServer so everything runs on the same machine.\n\nAdds a /basic-auth endpoint to the test webserver (401 + Basic\nchallenge, 200 once the expected credentials are supplied) and reuses\nthe existing /echo_headers route for the extra-header tests.\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 8c504182a52a158e272b7e20da8dda5f85a07865\n"
    },
    {
      "commit": "2bdcf131cc095b240b19ca4061635f22b719f5ac",
      "tree": "7f80e09b083d92c7083599142798bf6ac3415efa",
      "parents": [
        "34de2dd063e99f3a828c87b6862fe7d51cc7c72a"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Tue Jun 09 11:17:51 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jun 10 01:27:02 2026"
      },
      "message": "[py] make window position/rect tests robust on multi-monitor setups (#17661)\n\nThe window position/rect tests assumed the browser window lives at\nnon-negative coordinates on the primary display and that the window\nmanager honors an exact set_window_position. Neither holds on a\nmulti-monitor layout: a display left of the primary yields negative\nglobal x, and the WM may clamp a requested position to the usable area\n(below the menu bar / toolbar).\n\nRelax the spec-illegal x/y \u003e\u003d 0 lower-bound assertions to shape checks\n(negative coordinates are valid per the WebDriver spec), keep the\ngenuine width/height \u003e\u003d 0 bounds, and assert that test_move_window_position\nmoved the window rather than landed at an exact coordinate.\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 56ff9e91d0a256e5807083769a4574ee87818606\n"
    },
    {
      "commit": "34de2dd063e99f3a828c87b6862fe7d51cc7c72a",
      "tree": "b0d2b971384283416a02d7c77828e5f90f40bfab",
      "parents": [
        "5cafef821e6a1ef2c33c0f4fd397fb3bbf7e7306"
      ],
      "author": {
        "name": "Puja Jagani",
        "email": "puja.jagani93@gmail.com",
        "time": "Mon Jun 08 14:31:18 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jun 08 19:23:49 2026"
      },
      "message": "[js] Add Javascript/Typescript CDDL code generator for WebDriver BiDi (#17574)\n\n* [js] Add Javascript/Typescript CDDL code generator for WebDriver BiDi\n\n* Fix linting\n\n* [js] Add Javascript/Typescript CDDL code generator for WebDriver BiDi\n\n* Fix linting\n\n* [js] Add Javascript/Typescript CDDL code generator for WebDriver BiDi\n\n* Fix linting\n\n* [js] Fix enhancements manifest issues found in code review\n\n- back()/forward(): accept a context id instead of hard-coding an empty\n  string; delegate to traverseHistory({ context, delta: ±1 })\n- continueWithAuth: replace username!/password! non-null assertions with\n  an explicit undefined guard that throws a descriptive error\n- continueWithAuth: capture bidi.send() response and apply the same\n  response[\u0027type\u0027] \u003d\u003d\u003d \u0027error\u0027 check as generated methods, preventing\n  silent failures\n\n* ...\n\n* [js] Update comment for changes made to index.js\n\n* [js] Emit BiDi events via EventEmitter in bidi/index.js\n\n* Fix linting\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: c526eb203708a5e25957e79d3774a2333405c2af\n"
    },
    {
      "commit": "5cafef821e6a1ef2c33c0f4fd397fb3bbf7e7306",
      "tree": "1b82b7e358e7723ec11c5e9207b1b7df26b09630",
      "parents": [
        "5906355b0ec281c31c401337e5c25780aee1f79c"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Sat Jun 06 16:36:47 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Jun 06 16:50:28 2026"
      },
      "message": "[py] add Selenium Manager integration tests (#17645)\n\n* [py] add Selenium Manager integration tests\n\n* [py] strip quotes from pinned driver path in selenium manager test\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: eb0fc64ecde9f78d3ec5383eed0beb402ac65407\n"
    },
    {
      "commit": "5906355b0ec281c31c401337e5c25780aee1f79c",
      "tree": "5682f6b227837ab26b6e1b6afd9252077cb197ee",
      "parents": [
        "33e38b55f5a16687f5d5c320d3060f50c20e9860"
      ],
      "author": {
        "name": "Selenium CI Bot",
        "email": "diemol+selenium-ci@gmail.com",
        "time": "Fri Jun 05 20:22:33 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jun 05 20:28:20 2026"
      },
      "message": "[build] Automated Browser Version Update (#17609)\n\n* Update pinned browser versions\n\n* [py] Mark unsigned addon install tests as xfail on Firefox\n* [rb] Guard unsigned addon install specs on Firefox\n* [js] Ignore unsigned addon install tests on Firefox\nSee https://bugzilla.mozilla.org/show_bug.cgi?id\u003d2045054\n\n---------\n\nCo-authored-by: Selenium CI Bot \u003cselenium-ci@users.noreply.github.com\u003e\nCo-authored-by: AutomatedTester \u003cdavid.burns@theautomatedtester.co.uk\u003e\nCo-authored-by: Titus Fortner \u003ctitusfortner@users.noreply.github.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: c474d76009eafb32f334b7d5731d89cecfb9765d\n"
    },
    {
      "commit": "33e38b55f5a16687f5d5c320d3060f50c20e9860",
      "tree": "e8a8abfb058e71b4f4712de8be82e7310f1f89f6",
      "parents": [
        "110e4a6a372b18bb2582da495cce2c892a553fc0"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Fri Jun 05 12:26:28 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jun 05 15:23:00 2026"
      },
      "message": "[py] Add high-level BiDi network extra headers API (#17632)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 9d301b1759f5b7763e3e1bad90d482bd8a3f8f1b\n"
    },
    {
      "commit": "110e4a6a372b18bb2582da495cce2c892a553fc0",
      "tree": "7970ce218fd282862d41298283ad206b53d0fbe7",
      "parents": [
        "7b5ed983b341c99e06de5aebf224467d39b71731"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Fri Jun 05 11:19:47 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Jun 05 11:25:36 2026"
      },
      "message": "[py] Add high-level BiDi network authentication handler API (#17629)\n\n* [py] Add high-level BiDi network authentication handler API\n\n* [py] Omit wildcard components when translating URL globs to UrlPatterns\n\nBiDi UrlPatternPattern properties match literally and browsers reject\nwildcard characters in them (chromium-bidi: \"Forbidden characters\").\nOmitted properties match anything, so wildcard-bearing glob components\nare now dropped from the browser-side filter; Python-side glob matching\nnarrows the results.\n\n* [py] Restart driver after tests that warm the HTTP auth cache\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 822461158e132b185b41a14de9af5ece9e5b9027\n"
    },
    {
      "commit": "7b5ed983b341c99e06de5aebf224467d39b71731",
      "tree": "8dc14a8467a88f05bbf895cda0d3046a23f15166",
      "parents": [
        "1c1e25442b9074f09f86549e52dcda0a390d3309"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Thu Jun 04 16:39:48 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jun 04 19:05:09 2026"
      },
      "message": "[py] Align BiDi script module with the cross-binding API design (#17624)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: c1ffd8c3664b2b3913a06308e97966e72b0426d6\n"
    },
    {
      "commit": "1c1e25442b9074f09f86549e52dcda0a390d3309",
      "tree": "c116006f4279371e7111b754f4024c1e598f87cc",
      "parents": [
        "f7243d6751110021b8ea066f6659c0fb9280205c"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Thu Jun 04 16:39:29 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jun 04 19:05:03 2026"
      },
      "message": "[py] Add high-level BiDi network response handler API (#17623)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 1c84a0331fc9b2d2be886090c6fdacc00611767c\n"
    },
    {
      "commit": "f7243d6751110021b8ea066f6659c0fb9280205c",
      "tree": "7f5806b64b66b5da2757738f8c35aecc4d922850",
      "parents": [
        "8c392a2df9177fe180016f45f49329e3dbcf48be"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Thu Jun 04 07:49:11 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Jun 04 07:55:02 2026"
      },
      "message": "[py] Add high-level BiDi network request handler API (#17619)\n\n* [py] Add high-level BiDi network request handler API\n\nAdds the doc-aligned request interception API to driver.network:\n\n- add_request_handler(callback) / add_request_handler(url_patterns, callback)\n  with glob URL patterns (*, **, ?) translated to BiDi UrlPatterns where\n  possible, falling back to Python-side matching\n- Request exposes method, headers, cookies, body and resource_type, plus\n  fail(), provide_response(status, headers, body) and\n  set_url/set_method/set_headers/set_cookies/set_body mutators\n- After all matching handlers run, the outcome is reconciled into a single\n  BiDi command (fail \u003e provideResponse \u003e continueRequest with mutations \u003e\n  continueRequest), so observer-only handlers no longer stall the page\n- Implementation lives in py/private/_network_handlers.py (staged into the\n  generated bidi package via create-bidi-src extra_srcs) so it is lintable\n  and unit-testable; the enhancement manifest only carries thin glue\n- Legacy phase-based add_request_handler/remove_request_handler forms are\n  unchanged and still pass their existing tests\n\n* [py] Add browser tests demonstrating high-level BiDi request handler API\n\nIntegration tests mirroring the BiDi API design doc examples: observing\nrequests, failing by URL pattern, stubbing responses, mutating headers and\nURL, multi-handler reconciliation precedence, pattern scoping, and handler\nremoval. Verified locally against Chrome and Firefox (17 passed, 1 skipped\neach).\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: bcafedd07de3004a7e0ccdaebaf02b801bd0b7cb\n"
    },
    {
      "commit": "8c392a2df9177fe180016f45f49329e3dbcf48be",
      "tree": "9278de6153b1207f2092a146d510bc6cc8f28f7f",
      "parents": [
        "5de16bdff8907b00480bde41a41ed498b638fd34"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Wed Jun 03 14:07:22 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jun 03 14:41:50 2026"
      },
      "message": "trim agent formatting guidance (#17617)\n\n* trim agent formatting guidance\n\n* explain the script better and remove the pre-hook nagging\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 2e479c566fcab137a97b0f939e78b8d32e653e63\n"
    },
    {
      "commit": "5de16bdff8907b00480bde41a41ed498b638fd34",
      "tree": "241fec137305ded94be7c27e5a24a21d1d38a850",
      "parents": [
        "2b95bf22eb16caac3907e0ecfa35233b3a8fae08"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Wed Jun 03 12:10:12 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jun 03 12:15:43 2026"
      },
      "message": "[py] Extract alert and color into dedicated libraries  (#17611)\n\n* [py] Extract alert and color into dedicated libraries (P2c/P2f)\n\n- Extract selenium/webdriver/common/alert.py into //py:common_alert;\n  lazy-import Alert in switch_to.py (body) and expected_conditions.py\n  (TYPE_CHECKING) so //py:remote and //py:support no longer carry the\n  compile-time dep.\n\n- Extract selenium/webdriver/support/color.py into //py:support_color;\n  no source changes needed since no other library imports it.\n\n- Group alerts_tests.py + webdriverwait_tests.py into ALERT_TESTS (both\n  call driver.switch_to.alert at runtime, requiring :common_alert).\n\n- Add RENDERED_WEBELEMENT_TESTS for rendered_webelement_tests.py (sole\n  browser test importing Color).\n\n- Both groups added to FEATURE_TESTS (excluded from *-common suites) and\n  FEATURE_SUITE_DEFS, generating test-\u003cbrowser\u003e-alerts and\n  test-\u003cbrowser\u003e-rendered sub-suites across all browser/bidi/remote\n  variants.\n\n- Add :common_alert and :support_color to //py:selenium deps.\n\n* [py] Add :common_alert dep to bidi-common test suites\n\nbidi_browsing_context_tests.py calls EC.alert_is_present() which\ntriggers driver.switch_to.alert at runtime, requiring alert.py in\nthe runfiles. The bidi-common suite includes BIDI_TESTS (unlike the\nnon-bidi common suite which excludes them) so it needs :common_alert\nas an explicit dep.\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 73f55fa88cac9ca454e6126626eb677125287663\n"
    },
    {
      "commit": "2b95bf22eb16caac3907e0ecfa35233b3a8fae08",
      "tree": "1e860882ae45c205d55683305c7da3c4f8e50ea6",
      "parents": [
        "0561a0daa72fc3518ac3b6db0a09f0c828acd474"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Wed Jun 03 00:29:31 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Jun 03 00:42:28 2026"
      },
      "message": "[py] retry safaridriver startup in tests (#17615)\n\n* [py][rb] retry SafariDriver startup and remove Safari 26.5 test guards\n\n* [py] retry driver start on connection errors, not just WebDriverException\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 702c97b349aec20783f304bdfbd40c72ef4fa5c2\n"
    },
    {
      "commit": "0561a0daa72fc3518ac3b6db0a09f0c828acd474",
      "tree": "96f55ebb563dfedd14d242c44e36b0c312fcb909",
      "parents": [
        "7743e2dc0672610f2a2f33147bdd89cbca56338e"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Tue Jun 02 18:20:18 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Jun 02 19:29:12 2026"
      },
      "message": "[build] use pinned browser and driver for starting grid in python and ruby tests (#17610)\n\n* [py][rb] Use pinned browser and driver for remote Grid tests instead of Selenium Manager\n\n* [java] Fix --driver-configuration CLI example to use webdriver-executable\n\n* [py] guard selenium manager  test from running on rbe\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: aba540ca181d1c5c6daef841663837392b54ab99\n"
    },
    {
      "commit": "7743e2dc0672610f2a2f33147bdd89cbca56338e",
      "tree": "529bd096dbefddde163803fcc81675b3b6f05f01",
      "parents": [
        "3857ba6dc5ff76354a55256e4cd82df0c3321b6b"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Mon Jun 01 18:35:51 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jun 01 18:38:17 2026"
      },
      "message": "[py] Extract feature-specific modules from //py:common  (#17606)\n\n* [py] Extract feature-specific modules from //py:common (P2b/P2d)\n\nModules that are only used by a small subset of tests were still bundled\nin //py:common, causing those modules to be compiled into every test\u0027s\ntransitive dep graph. Changing any of them triggered a full rebuild of\nall ~700 browser test targets.\n\nThis change extracts five modules into dedicated libraries:\n  - //py:common_fedcm        (fedcm/**/*.py)\n  - //py:common_timeouts     (timeouts.py)\n  - //py:common_virtual_authenticator (virtual_authenticator.py)\n  - //py:common_api_request_context   (api_request_context.py)\n  - //py:common_print_page_options    (print_page_options.py)\n\nFor each module, the corresponding browser test file (e.g. timeout_tests.py,\nvirtual_authenticator_tests.py) is the only test that imports it directly.\nNew per-feature test sub-suites (test-chrome-timeouts, test-chrome-fedcm,\netc.) carry the right //py:common_* dep; the -common suites have no dep\non these libraries. Aggregate test_suite targets (test-chrome, test-chrome-bidi,\ntest-chrome-remote, etc.) are unchanged so CI targets are unaffected.\n\nFor the split to be precise, remote/webdriver.py previously imported these\nmodules at the top level, which would have re-added them to every test\u0027s\ndep graph via //py:remote. Three changes remove this:\n  - from __future__ import annotations makes all type annotations lazy\n    strings, so no runtime import is needed for parameter/return types.\n  - The four methods that instantiate these types (timeouts property,\n    request property, dialog property, get_credentials) now lazy-import\n    inside the method body.\n  - The required_virtual_authenticator and required_chromium_based_browser\n    decorators are inlined in remote/webdriver.py (they were only used\n    there; the 10-line definition removes the top-level dep).\n\nResult: changing timeouts.py now only rebuilds ~11 test targets\n(timeout_tests × browser variants) instead of ~700.\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: e4eac88dbdda194694c73679759b75af231ae869\n"
    },
    {
      "commit": "3857ba6dc5ff76354a55256e4cd82df0c3321b6b",
      "tree": "e637c6927c954239ea1fb3e83240a6c51ca933bd",
      "parents": [
        "b3762edc33d3a03fd0a15f95d48127a1d647016d"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Mon Jun 01 11:15:57 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jun 01 14:43:43 2026"
      },
      "message": "[py] Extract actions subpackage into //py:common_actions (#17605)\n\nThe actions subpackage (action_chains.py + actions/**) was part of the\nmonolithic //py:common library. Every browser test depended on //py:common,\nso changing any file in actions/ triggered a full rebuild of all ~700 test\ntargets across all browser/OS combinations.\n\nOnly 4 test files actually import from actions:\n  - interactions_tests.py\n  - interactions_with_device_tests.py\n  - w3c_interaction_tests.py\n  - event_firing_webdriver_tests.py\n\nThis change:\n- Adds //py:common_actions containing action_chains.py and actions/**\n- Removes those files from //py:common so the dep graph is precise\n- Splits each browser test suite into a -common variant (no actions dep) and\n  an -actions variant (deps on :common_actions only)\n- Restores the original suite names (test-chrome, test-chrome-bidi, etc.) as\n  test_suite aggregates so CI targets are unchanged\n- Preserves existing individual test names (alerts_tests-chrome unchanged;\n  actions tests now carry -actions suffix e.g. interactions_tests-chrome-actions)\n- Adds test_suffix param to py_test_suite to allow explicit override of the\n  auto-computed suffix when a suite is renamed without changing test IDs\n\nResult: changing action_chains.py or any file in actions/ now only rebuilds\nthe ~4 test files × browser variants (~44 targets) instead of all ~700.\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: fac19424b0125c611f55c028610bf914504ab203\n"
    },
    {
      "commit": "b3762edc33d3a03fd0a15f95d48127a1d647016d",
      "tree": "e7bb86188962415aa43bb7b22ac98f24fa326829",
      "parents": [
        "d68c0690d434bbf3d379f7b7adea4f072642c042"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Mon Jun 01 08:46:14 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jun 01 14:43:39 2026"
      },
      "message": "[py] Scope py_test_suite shared library to support files only (#17600)\n\nPreviously py_test_suite() bundled all srcs (test files and support files)\ninto one shared library, and every individual pytest_test depended on it.\nChanging any one test file dirtied the whole library and triggered a rebuild\nof all tests in the suite across all browser variants (~300+ targets for a\nsingle-file change).\n\nNow the shared library only contains non-test support files (helpers, utils,\n__init__.py, conftest). Each pytest_test still depends on that library for\nshared support code, but test files are no longer included in it. A change\nto alerts_tests.py now only rebuilds the alerts_tests-* targets instead of\nthe full suite.\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 6a6846609c11d182aa46c18601e09fa043a1d94f\n"
    },
    {
      "commit": "d68c0690d434bbf3d379f7b7adea4f072642c042",
      "tree": "adfe7850093a1f57a89a5a749a7aa78f55d44ba7",
      "parents": [
        "4aeb311c1deb6fd0a047726f386be3c589f49652"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Mon Jun 01 02:21:08 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Jun 01 02:23:11 2026"
      },
      "message": "[build] allow ruby and python to run remote tests on windows (#17603)\n\n[rb][py] resolve runfiles JDK realpath on Windows to avoid lib\\modules symlink bug\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: b02c5f224ea6ac1c4cf0ee8d19f7a92bc92a9766\n"
    },
    {
      "commit": "4aeb311c1deb6fd0a047726f386be3c589f49652",
      "tree": "308a95ef4381323f76671315c2b3893d1688a5ed",
      "parents": [
        "1b106542c72751e9b011282315525dbfa918b461"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Fri May 29 11:49:04 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri May 29 20:35:41 2026"
      },
      "message": "[py] Improve ruff linting DX and CI speed (#17588)\n\n- Unify ruff_check.py + ruff_format.py into a single ruff.py that\n  accepts check/format/both modes; eliminates duplicated dirs, excludes,\n  and config references. Adds //py:ruff target for running both at once.\n- Fix --exit-non-zero-on-fix footgun: ruff_check now exits 0 when all\n  issues are auto-fixed. CI verification mode uses --no-fix explicitly.\n- Add ruff check to scripts/format.sh (always, not just with --lint),\n  resolving the ruff binary once via --run_under\u003decho to halve Bazel\n  startup overhead. Auto-fixable lint issues are now committed by the\n  CI bot alongside formatting fixes.\n- Update py:lint to use --no-fix (pure verification, no side effects).\n- Split ci-python.yml lint job into parallel lint-ruff / lint-mypy /\n  lint-docs jobs so mypy does not block ruff feedback.\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 29635350e9fd6a56e1f1d6ff823e57e1d86b0b27\n"
    },
    {
      "commit": "1b106542c72751e9b011282315525dbfa918b461",
      "tree": "e3ced96757320c2a7a887b4bf305b0926203e23e",
      "parents": [
        "e82b0ba53fc499ecdc99bc074a632cfe055e110d"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Thu May 28 14:18:49 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu May 28 15:00:29 2026"
      },
      "message": "[py] Handle Data URLs when doing .continue_request() (#17583)\n\n* [py] Handle Data URLs when doing .continue_request(). Fixes #16279\n\n* [py] Remove xfail marks from data URL network test\n\nThe xfail marks were added when continue_request() would throw for\ndata: URLs. Now that continue_request() silently skips data: URLs,\nthe test should pass in all browsers that fire network.beforeRequestSent\nfor data URL sub-resources.\n\n* Fix the other linting way\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 3c94e5c1796c5132bd34638d77f9a79cd373fe65\n"
    },
    {
      "commit": "e82b0ba53fc499ecdc99bc074a632cfe055e110d",
      "tree": "3cba3e245c6724c84a793e9c961b325341d8ae0d",
      "parents": [
        "5e40a38aa3c375755f8e9d1750da5057d5a2b15b"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Wed May 27 17:26:09 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed May 27 17:55:31 2026"
      },
      "message": "[py] Allow MAX_WS_MESSAGE_SIZE to be configurable (#17581)\n\nfixes #16546\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 4749fd62fcdf8725719956a6707bc00745eef62a\n"
    },
    {
      "commit": "5e40a38aa3c375755f8e9d1750da5057d5a2b15b",
      "tree": "5aad03bf72ee6414694f5c665effc9aa1e448852",
      "parents": [
        "0bc6ee46037b3d26a4d111ebd0cf349c9ce528a4"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Mon May 25 02:14:09 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon May 25 02:21:13 2026"
      },
      "message": "[build] Use target_compatible_with to gate IE/Safari tests  (#17566)\n\n[build] Use target_compatible_with to gate IE/Safari tests\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 17168d50ef08fde5db91984ffbd5420fa20645a5\n"
    },
    {
      "commit": "0bc6ee46037b3d26a4d111ebd0cf349c9ce528a4",
      "tree": "193ba4e3ca758d9bb15e9da0f16a8139afa3f5b1",
      "parents": [
        "97a0194a96975c588a382ccbfac3ca40aac7adaa"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Sun May 24 11:10:28 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun May 24 11:17:39 2026"
      },
      "message": "[py] mark Safari tests broken by SafariDriver 26.5 as xfail (#17560)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 9d4ef39c30a82c7e56864bb37a7f52032faef0e2\n"
    },
    {
      "commit": "97a0194a96975c588a382ccbfac3ca40aac7adaa",
      "tree": "1fbbe5980c86b2d59350d59bae3faa0c61088e10",
      "parents": [
        "2016416c51b15fc1e66854f1178e17253c9f8fb6"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Sat May 23 14:15:12 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat May 23 17:26:25 2026"
      },
      "message": "[build] do not create targets for IE for browser tests (#17548)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 5b65356f6dc57123d03d9767d547b07ae90ab3a4\n"
    },
    {
      "commit": "2016416c51b15fc1e66854f1178e17253c9f8fb6",
      "tree": "76f14cd0c363d8b9c0303a38238ffede7afa43c7",
      "parents": [
        "6bd084dcf227c12cc7f5e3ed54977e17160a737b"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Tue May 19 01:41:34 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue May 19 01:47:39 2026"
      },
      "message": "[py] update python dependencies (#17490)\n\n* [py] update python dependencies\n\n* move tox requirements inline\n\n* bump multitool versions as well for parity\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 4fea2dd7d59fcfad74add404b268f45bf8ab95d6\n"
    },
    {
      "commit": "6bd084dcf227c12cc7f5e3ed54977e17160a737b",
      "tree": "316288f320d1038a7538a515a00bc327be66d4a8",
      "parents": [
        "d3432e3d3c8c585d3e99a7a86d2edf7219233aee"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Fri May 15 13:44:32 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri May 15 13:50:08 2026"
      },
      "message": "[py] replace rules_python sphinxdocs with local sphinx_docs rule (#17461)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 7a6f869c22795caa57c6d22b2aade94018212e99\n"
    },
    {
      "commit": "d3432e3d3c8c585d3e99a7a86d2edf7219233aee",
      "tree": "9a465d39f745ef7f7e4e96b4e45934fb9bc19a85",
      "parents": [
        "56b77b271fee69c75b91aed16a465d80f311a042"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Thu May 14 16:56:48 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu May 14 19:20:12 2026"
      },
      "message": "[javascript] Migrate find-elements atom from Closure to TypeScript (#17458)\n\n* [javascript] Migrate find-elements atom from Closure to TypeScript\n\nReplace the Google Closure `bot.locators.findElements` fragment with a\nself-contained TypeScript implementation, following the same pattern\nused for `get-attribute` and `is-displayed`.\n\nNew files:\n- javascript/atoms/typescript/find-elements.ts — IIFE implementing all\n  locator strategies: css selector, id, class name, tag name, link text,\n  partial link text, name, xpath, and the full relative locator\n  (above/below/left/right/near and straight-* variants with proximity sort)\n- javascript/atoms/typescript/wrap-find-elements-as-global.js — wraps\n  compiled output as window.bot.locators.typescript.findElements\n- javascript/atoms/test/find_elements_typescript_test.html — QUnit browser\n  tests covering all strategies (18 tests)\n\nBuild changes:\n- javascript/atoms/BUILD.bazel: add tsc compile, strip-semicolon, and\n  global-wrap targets; include find-elements-global in atoms filegroup\n- javascript/atoms/fragments/BUILD.bazel: add copy_file target\n  find-elements-typescript with same visibility as the old closure fragment\n- py/BUILD.bazel: switch find-elements src to the TypeScript-generated file\n\nThe relative_by_tests-chrome-bidi integration tests pass with the new\nimplementation.\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: d9cc9ea2f659a8f7a72ff054ed40edb13405d575\n"
    },
    {
      "commit": "56b77b271fee69c75b91aed16a465d80f311a042",
      "tree": "44969c03656fb417d52cf2b374e29e6efd560bb2",
      "parents": [
        "bac97fd3d2682eb86e512b385874cae6efe1bf77"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titusfortner@users.noreply.github.com",
        "time": "Thu May 14 15:41:10 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu May 14 19:20:08 2026"
      },
      "message": "Use pyproject for Python runtime deps lock input (#17452)\n\n* Use pyproject for Python runtime deps lock input\n\n* Install dependencies from lock file in tox.ini and rtd\n\n---------\n\nCo-authored-by: Corey Goldberg \u003c1113081+cgoldberg@users.noreply.github.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: aa48885e80d18be10c3fdad2ec2b1da1504bb318\n"
    },
    {
      "commit": "bac97fd3d2682eb86e512b385874cae6efe1bf77",
      "tree": "2b1eb6a6e436f2c5f2f3396727ae5ca879824a4f",
      "parents": [
        "535d2b890eefe2d1e5767d89b3d513195689ae68"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Thu May 14 10:33:18 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu May 14 10:39:29 2026"
      },
      "message": "[JavaScript] Correct handling for older browsers and missing casing (#17451)\n\nThis brings back IE11 support and fixes the case where there is className\n\nFixes #17448 and #17447\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: eea0c6c328d3e19f8691c81e4b0bda67d87e862a\n"
    },
    {
      "commit": "535d2b890eefe2d1e5767d89b3d513195689ae68",
      "tree": "d5fe3517032a2700e2f869b75cee63506bf3d278",
      "parents": [
        "854e45925612fcd9e773d65454b445fde45e2f22"
      ],
      "author": {
        "name": "Titus Fortner",
        "email": "titus.fortner@gmail.com",
        "time": "Tue May 12 23:54:35 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed May 13 00:32:08 2026"
      },
      "message": "[build] Reset versions to nightly after selenium-4.44.0 release\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: c471271c15f72519b148a49d6b432a8f7a496361\n"
    },
    {
      "commit": "854e45925612fcd9e773d65454b445fde45e2f22",
      "tree": "07fe91b95ef9fa23ceeb1251e4cbcc4fdeeb946a",
      "parents": [
        "e6d7b3baa04c5e951ac85c722be2cfc025693bcc"
      ],
      "author": {
        "name": "Selenium CI Bot",
        "email": "diemol+selenium-ci@gmail.com",
        "time": "Tue May 12 20:49:33 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed May 13 00:32:03 2026"
      },
      "message": "[build] Prepare for release of selenium-4.44.0 (#17444)\n\n* bump versions\n\n* update devtools versions\n\n* update dependencies\n\n* changelogs updated\n\n* rust changelogs updated\n\n* update pinned browser versions\n\n* update selenium manager versions\n\n* update authors file\n\n* fix Java CDP clobbering input\n\n* fix rust version mismatch\n\n---------\n\nCo-authored-by: Selenium CI Bot \u003cselenium-ci@users.noreply.github.com\u003e\nCo-authored-by: Titus Fortner \u003ctitus.fortner@gmail.com\u003e\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: da2039bd1456a161d0c284de16f9f4f179f1e8ca\n"
    },
    {
      "commit": "e6d7b3baa04c5e951ac85c722be2cfc025693bcc",
      "tree": "651d248946c7ccaddc309416f3be5c8b00b3e85a",
      "parents": [
        "6c3071412c5f8c19a469e922fde3607b4e4e889a"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Mon May 11 16:58:06 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon May 11 22:32:34 2026"
      },
      "message": "[JavaScript] Move \u0027isDisplayed\u0027 atom to be typescript (#17316)\n\n Move isDisplayed atom to typescript\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: dfcc86ead1ad4b8291cc89e139f5e25fa011a475\n"
    },
    {
      "commit": "6c3071412c5f8c19a469e922fde3607b4e4e889a",
      "tree": "c0c34ddcbff3350282f2f148d5533f47b5d8b269",
      "parents": [
        "5268da235d055c2cec6996c068f373c1c16026a3"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Mon May 11 10:08:50 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon May 11 22:32:29 2026"
      },
      "message": "[js][py] Convert getAttribute atom from Closure to TypeScript (#17370)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: cc26ec89c1bdd4a63cd994d5b185c5d169652858\n"
    },
    {
      "commit": "5268da235d055c2cec6996c068f373c1c16026a3",
      "tree": "5a2193b676cd0a91af20e3ccab9815e4017b5bf2",
      "parents": [
        "88d52ad2a57ab8201993c282cf53b4efe98bbb2b"
      ],
      "author": {
        "name": "Corey Goldberg",
        "email": "1113081+cgoldberg@users.noreply.github.com",
        "time": "Mon May 11 00:34:48 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon May 11 00:40:40 2026"
      },
      "message": "[py] Update dev dependencies and fix type annotation (#17434)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: bcdd878d78db59ad1543e4a0db184f06fa6ef9fe\n"
    },
    {
      "commit": "88d52ad2a57ab8201993c282cf53b4efe98bbb2b",
      "tree": "5ae5ae4b18581f707d5b829d180fbee9c0f2c65e",
      "parents": [
        "1efcffae1ad3e9841f2524e26ff77b6de3455627"
      ],
      "author": {
        "name": "Corey Goldberg",
        "email": "1113081+cgoldberg@users.noreply.github.com",
        "time": "Sun May 10 23:59:05 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon May 11 00:40:35 2026"
      },
      "message": "[py] fix linting and mypy to properly exclude generated bidi files (#17433)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: 7cd554da7c01dde68c7d77b155db30cc109ee201\n"
    },
    {
      "commit": "1efcffae1ad3e9841f2524e26ff77b6de3455627",
      "tree": "74687565427130f1bd9d7100064246aece2427a4",
      "parents": [
        "9856e8b37e25eb02cc406a3c8d68523f67295d17"
      ],
      "author": {
        "name": "David Burns",
        "email": "david.burns@theautomatedtester.co.uk",
        "time": "Thu May 07 14:27:11 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu May 07 14:32:18 2026"
      },
      "message": "[py] Improve docstrings in generated BiDi modules (#17392)\n\nAdd three new manifest keys to the generator so end users get meaningful\nhelp() output and IDE hover docs for the new BiDi modules:\n\n- module_docstring: file-level triple-quoted string after imports\n- class_docstrings: per-class docstring override (dataclasses and enums)\n- command_docstrings: per-command method docstring override\n\nContinuation lines are automatically re-indented to match the enclosing\nblock depth (4 spaces for class body, 8 for method body). Fallback\ndocstrings (class name only) retain the trailing period they had before.\n\nPopulate content for all four new modules:\n- permissions: module doc, PermissionState and Permissions class docs\n- bluetooth: module doc, 6 key dataclass docs, 13 command method docs\n- speculation: module doc, PreloadingStatus and PrefetchStatusUpdatedParameters docs\n- userAgentClientHints: module doc, ClientHintsMetadata and BrandVersion docs\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: fd30100d3960b678d14e9db904b97bc75423632a\n"
    },
    {
      "commit": "9856e8b37e25eb02cc406a3c8d68523f67295d17",
      "tree": "96fa250688a1c92333b6791472f427fa4a857681",
      "parents": [
        "7ad11d80aa15e70cdb1813a7506880c86aa27d43"
      ],
      "author": {
        "name": "Corey Goldberg",
        "email": "1113081+cgoldberg@users.noreply.github.com",
        "time": "Tue May 05 13:38:58 2026"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue May 05 13:44:48 2026"
      },
      "message": "[py] Add edge service arg to inherit browser i/o streams (#17415)\n\nNOKEYCHECK\u003dTrue\nGitOrigin-RevId: ca9b2449d23049fccc60163b61b716890a617975\n"
    }
  ],
  "next": "7ad11d80aa15e70cdb1813a7506880c86aa27d43"
}
