TLC Meeting - August 6, 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
- Download statistics anomaly and Selenium Manager telemetry
- Low-level WebDriver BiDi layer ADR
- Network async/event API ADR
- Script and logging async/event API ADR
Meeting Summary
The TLC discussed an anomalous spike in download statistics attributed to suspected synthetic monitoring traffic and a plan to filter it out of the analytics. titusfortner gave a status update on the low-level BiDi ADR, the group worked through the remaining open points of the network async/event API ADR, and began reviewing the script and logging async/event API ADR. After the main session, pujagani and AutomatedTester dug into a specification gap around mapping BiDi events back to the browsing and user contexts they came from.
Decisions
- Network request handlers that set no disposition will default to continuing through the
remaining handlers. Explicit
fail,respond, orsubmitcalls shortcut the remaining handlers, and handlers run last in, first out, so a locally added handler can override one registered earlier, for example by an imported library. This differs from Playwright, which requires an explicit continue or fallback call. - Setting more than one disposition inside a single callable will raise an error rather than the last call silently winning; the group saw no valid case for setting several.
- Users are responsible for error handling inside their handler callables; uncaught exceptions will not be swallowed by Selenium. The group will revisit a toggle or built-in handling if user feedback asks for it.
- Return values from handler callables are ignored; the disposition is determined only by state set on the event object during the callable’s execution.
- URL pattern inputs that look like glob patterns but are valid per the URL Pattern specification will be passed through to the remote end rather than rejected client side, revising the July 23 leaning toward erroring on them. AutomatedTester showed such values are accepted by the browser’s URL Pattern implementation, and the group agreed to follow whatever the specification and browsers do. The client-side exception will be removed from the ADR; what helpful messaging, if any, accompanies this is still open.
- Event handlers will be scoped to the current browsing context by default, with an optional user-provided browsing context or user context to override it; a bullet stating this will be added to the ADR.
- Script pinning and preloading will be treated as a single concept rather than two separately named behaviors: a script is preloaded into every page, and depending on its shape it can run automatically or be called on demand, similar to how extensions work.
Discussion Notes
Download statistics and Selenium Manager telemetry
titusfortner reported tracing an anomalous traffic spike in the project’s Plausible analytics: the requests all came from AWS data centers and all reported the same Selenium version, 4.36, which fits the constant open-run-close pattern of a synthetic monitoring product. Attempts to reach a contact at the suspected vendor had not succeeded. The plan he laid out is to ask Plausible to filter out the Selenium 4.36 traffic, as was done for a similar incident involving Selenium 4.24, so the statistics regain a usable signal.
Longer term, he floated enriching the Selenium Manager user agent, which today carries only the Selenium Manager version, so specific signatures could be filtered instead of an entire Selenium version. He also described changing when telemetry is logged: instead of logging the first run, log on a later run once the cache shows the session is not ephemeral, so constantly recreated environments stop generating noise. He noted a new Selenium release is needed soon and coordination with diemol, who had offered to run it, was still pending.
Low-level WebDriver BiDi layer ADR
titusfortner and pujagani had met to compare the low-level BiDi ADR with the approach jimevans is taking in his WebDriverBiDi.NET project. The proposals match everywhere except one point, which is easy for a dynamic language to work around but much harder for a static language. pujagani will investigate whether that point is feasible to support in Java; if it is not, the ADR would switch to follow jimevans’ approach throughout. pujagani noted the investigation will take some time, and the group deferred detailed discussion until it is done.
Network async/event API ADR
titusfortner walked through his latest revision of the network async/event API ADR. He removed the observation versus interception section entirely: since the group previously agreed to assume everything that can intercept does intercept, defining observability was consuming energy without helping the current scope. He will instead state explicitly in the ADR that handlers set blocking interception by default when it is available at that stage, so the contract is clear that observation would require something new rather than a behavior change to existing methods.
On URL filtering, the draft had proposed rejecting glob-like input client side. AutomatedTester tested the highlighted example against the browser’s URL Pattern implementation and found it is accepted as a valid host name per the specification, and argued Selenium should not reject or pre-judge values the browser will interpret: users will assume that what works in JavaScript works in their tests, and browsers must converge on the specification. titusfortner’s concern was users writing Playwright-style globs, getting exact-match behavior, and blaming Selenium for the surprise; he initially wanted a warning, while AutomatedTester preferred no warning and at most enhanced exception messages after a failure. titusfortner will run examples against real browsers to see the actual user experience before settling on any messaging.
On handler dispositions, the request-stage methods are fail, respond, and submit, where
submit stops processing other handlers and sends exactly the given request; the response stage has
fail and submit, since continuing versus providing a response collapses once the request has
already round-tripped. titusfortner also recapped his recollection of the earlier direction that
a convenience add authentication method taking credentials and a URL will wrap the
callable-based authentication handler.
The event object passed to callables would carry an immutable copy of the original request or response alongside any staged mutations, so later handlers can compare the current state with the original; no objections were raised. For body data, titusfortner proposed requesting collection via the handler rather than a separate data collector mechanism, and noted that an intercepted response sits in a blocked state where its body is never collected, so body access would likely apply only to request handlers until observation is defined. How options like body collection and context are expressed in static languages, for example an options class instead of overloads, was treated as an implementation detail.
AutomatedTester raised that the design must consider browsing contexts now because they become important later, for example keeping interception working on a background tab that no longer has focus. This led to the context-scoping decision above, with pujagani noting the override should allow browsing context, user context, or a combination.
Script and logging async/event API ADR
titusfortner introduced the script and logging ADR, which continues the
previously agreed direction of script.execute naming without exposing a sync versus async
distinction. The draft separated pinning, registering a script to call on demand by reference, from
preloading, registering a script to run automatically on every page. AutomatedTester argued
these are the same concept: preload a callable object into every page, like an extension, and
invoke it whenever needed; whether it runs automatically depends on the script’s own shape.
p0deje, who implemented pinning in Ruby following the original design, agreed, and
titusfortner will update the ADR to unify them.
The draft keeps console message handlers and JavaScript error handlers as separate methods. AutomatedTester described them as effectively the same thing under the hood with syntactic sugar that helps people think through the problem differently, and the group kept the separation. As with the network handlers, script handlers will return an object rather than a bare ID, with room to add functionality to it later. AutomatedTester caught that the draft’s console message event shape wrongly included a stack trace, which belongs to the JavaScript error event instead; titusfortner will fix the example and represent each event’s fields as typed getters.
AutomatedTester also pointed out the draft has no way to reach web workers, iframes, and other non-default contexts, which matters for script APIs across the board. He thought a worker would likely be addressed through its context rather than a separate worker ID, though he wanted to double-check; either way, the same context-scoping addition as the network ADR applies here.
Mapping BiDi events back to contexts
pujagani raised that while subscribing to events within a browsing or user context works, event payloads do not carry the information needed to map a received event back to the context it came from, a gap she hit while designing event subscription support for the Java generator work and which caused her to shelve part of that design. AutomatedTester pointed to the specification work tracking this: webdriver-bidi#1046, adding user context to protocol events, has been merged, while webdriver-bidi#1071, raised by jimevans to make the user context properties mandatory for events, remains open. AutomatedTester will take a stab at a specification fix for the open issue, since several designs under discussion depend on it.
Action Items
- titusfortner will ask Plausible to filter out the Selenium 4.36 traffic from the download statistics.
- titusfortner will run URL pattern examples against real browsers to see how glob-like input behaves and use that to decide what helpful messaging, if any, Selenium should add.
- titusfortner will update the network async/event API ADR to state that interception is the default when available, remove the client-side exception for glob-like URL patterns, and add the default context scoping with user override.
- titusfortner will update the script and logging ADR to unify pinning and preloading, fix the console message event shape, and cover context scoping including workers.
- pujagani will investigate whether the low-level BiDi ADR’s divergent point is feasible to support in Java.
- AutomatedTester will attempt a specification fix for webdriver-bidi#1071 so events carry the context information needed to map them back to subscriptions.




