TLC Meeting - September 3, 2026

Meetings are happening weekly on Thursday at 0700 Pacific / 1000 Eastern / 1500 UK / 1930 India as a video call, and the invite is posted to the #selenium-tlc channel on Selenium Slack. To add items to the agenda for the next meeting, please see our public Rolling Agenda

Participation

Agenda


Meeting Summary

titusfortner caught the group up on the remaining changes to the network and script and logging ADRs and said both have enough consensus to approve. The web extensions ADR has merged, a Ruby implementation is ready to merge, and a Python implementation is up for review. Most of the discussion covered how the low-level BiDi ADR applies to the hand-maintained .NET implementation and how the generated schema is tracked. AutomatedTester proposed dropping CDP updates now that releases run every two weeks, and the group agreed to gather usage data before revisiting the CDP deprecation timeline.

Decisions

  • When a network event handler raises an unhandled exception, the event fails and the exception surfaces to the user. This replaces the earlier text that submitted the event with the state passed into the handler. How each language exposes the failure is out of scope for the ADR. titusfortner still needs to update the record to say this.
  • The context scoping text in the network ADR is settled; AutomatedTester confirmed being fine with what is in the record.
  • No objections were raised to treating the network and script ADRs as having consensus.
  • The group agreed to gather data on how many sessions use CDP and what they do with it before revisiting when to deprecate it.

Discussion Notes

Network and script async/event API ADRs

titusfortner summarized the two open points from earlier meetings. The context scoping wording went back and forth between AutomatedTester and titusfortner, and both are fine with the result. On error handling, the earlier plan was to follow Playwright, but Playwright’s behavior turned out to be undesirable. titusfortner and p0deje discussed it the week before and settled on the middleware pattern used by Rack: an unhandled exception fails the event rather than sending along whatever state the handler had. Starting strict is easier to relax later if users complain than the reverse. pujagani confirmed the group already had overall consensus on the network ADR two meetings ago apart from wording changes.

Selenium Manager released API ADR

titusfortner made progress updating the record after last week’s discussion with p0deje but did not finish. diemol raised concerns that the first version was too strict, so titusfortner is working out a middle ground and will present three options next week for the group to choose between.

Web extensions ADR implementations

The web extensions ADR merged. titusfortner has a Ruby implementation ready that reuses the Grid file upload endpoint to support Chrome through the Grid, since Chrome only accepts a local directory for extensions. That is an implementation detail outside the ADR, and not every binding can do the same: the endpoint handles a directory correctly, but most bindings’ file detector code assumes a single file because upload was its only use. Mozilla is also working out how to publish its vendor-namespaced web extension fields so the project can pull them into the schema programmatically.

AutomatedTester has a Python implementation up for review. The allowPrivateBrowsing option is hard to test meaningfully today because each Firefox session gets a fresh profile and the bindings do not yet have user contexts; verifying it would mean creating a second user context and checking the extension across both. AutomatedTester cited this as an example of why user contexts need settling first. titusfortner only tested that the option is passed and the response is correct, and noted Firefox backported the option to the classic install add-on command as well.

Low-level BiDi ADR and the .NET implementation

titusfortner shared an assessment of where the .NET BiDi implementation stands against the low-level BiDi ADR so the conversation with its maintainer could be specific. Several missing items have already been added. The contentious point remains missing required inbound fields, which usually happens when the specification adds a field before the browser sends it. .NET currently fills in placeholders such as zero, null, or false, which titusfortner called bad because it indicates data is present when that is not necessarily correct. The maintainer wants a standard everyone follows and has not pushed back on anything as impossible, and may generate some of the layer while keeping hand-written code elsewhere. The ADR describes behavior only, not how it is implemented.

The ADR now validates against a declared schema rather than the specification directly. That schema includes the published BiDi specifications and supported vendor extensions, and may include project-maintained overrides. When a browser stops sending a field the specification marks required, titusfortner’s proposed approach is to add an override CDDL file that temporarily marks it optional, regenerate the schema, and periodically review the overrides. AutomatedTester did not entirely follow the approach but was willing to see how it plays out, and raised that the number of W3C CDDL files will grow quickly because every specification is now expected to provide one for web platform tests. The project currently pulls in seven.

AutomatedTester questioned why the generated schema JSON is checked in when it is derived from the CDDL files. titusfortner explained the CDDL files are fetched at build time by pinned commit and are not checked in; AutomatedTester recalled they once were, and titusfortner was fairly sure they were not, but the point did not matter. The checked-in schema is the typed output the Ruby, Python, and Java generators read, similar to the PDL files kept for CDP. Checking it in gives version control over what each release validated against and gives the .NET maintainer a diff to work from. AutomatedTester accepted that if it is needed.

Generated BiDi layer status

Ruby and Python are merged and current. The Java and JavaScript generators are in PRs that are close to ready. titusfortner warned that recent schema changes for dashed names and numeric fields may break the Java work. pujagani asked for review of the JavaScript generator and will start on the script ADR implementation in parallel once the generators merge. titusfortner expects Python to be the hardest transition because its existing BiDi code differs most from what the ADRs describe, while Ruby should be straightforward because little was implemented there.

Release cadence and CDP support

titusfortner walked through the release automation. A daily workflow checks for browser version updates and opens PRs, and a major Chrome update now also generates the CDP code so a release is ready to go. The last release ran end to end in about three hours with no manual work, though the dependency updates were moved out of the release because tool updates such as ruff break code that previously passed, and keeping up with them still needs an owner.

AutomatedTester proposed dropping CDP updates, since CDP was always a beta feature and Chrome and Firefox are moving to two-week releases. titusfortner said the cadence is not a problem, since CDP generation is tied to Chrome major versions and the automation keeps up, and people still rely on CDP. AutomatedTester did not press that point and instead asked for Selenium 5 to have no CDP, or at least to deprecate it sooner. titusfortner recalled the earlier decision to deprecate CDP in Selenium 5 rather than remove it, and argued the project has not made clear that direct CDP use was unsupported and has not provided an alternative for long enough that many users depend on it. The position titusfortner laid out is to mark CDP deprecated once BiDi parity exists, meaning the network and script ADRs are implemented across the bindings, and remove it later, possibly in Selenium 6. AutomatedTester expects usage to be very low and will pull data from BrowserStack by looking for the BiDi capability and tracking what those sessions do; pujagani noted most users would have that capability set. harsha509 and Navin were asked to do the same at TestMu AI, and titusfortner will ask diemol about Sauce Labs.

Tracking development sponsor contributions

titusfortner raised that one development sponsor has not been present, and the project needs a way to see what work each sponsor contributes. titusfortner plans to label issues per sponsor so the work can be reviewed. A community member with a product and project management background has offered to help with planning and tracking, which titusfortner welcomed given the current lack of bandwidth for coordination and for reviewing contributor PRs that have been waiting.

Conference and in-person TLC meeting

harsha509 reported that TestMu AI is still planning to host a Selenium conference in India next year and is working through approvals and discussions with other sponsors; no timeframe is set yet. titusfortner wants an in-person TLC meeting and leaned toward London as the most reasonable location, with availability pointing to mid-November. Appium participation is being explored, since moving to BiDi will affect what Selenium and Appium each own.

Action Items