Skip to content

[docs] Selenium 5 release charter#17717

Open
titusfortner wants to merge 1 commit into
SeleniumHQ:trunkfrom
titusfortner:c/modest-benz-4f2db6
Open

[docs] Selenium 5 release charter#17717
titusfortner wants to merge 1 commit into
SeleniumHQ:trunkfrom
titusfortner:c/modest-benz-4f2db6

Conversation

@titusfortner

@titusfortner titusfortner commented Jun 25, 2026

Copy link
Copy Markdown
Member

📄 This body is the context: why we need it, the required decisions, and the possible additions to consider.

Why we need this

We have dozens of ADR PRs in flight, and many assume different answers to "what is Selenium 5."
Binding-level efforts in .NET and Python are each moving on their own reading of the goal. We need
one agreed boundary for what blocks the release before arguing implementation details. This
charter is that boundary; the cross-binding mechanics are left to the ADRs it lists.

How the scope has moved

  • ~2 years ago, at the TLC Summit in San Francisco, the plan was: implement the BiDi API for Network & Script, take Selenium Manager out of beta, and decide on the mechanism for implementing a classic feature in each language (we picked Navigation). (somewhat matching https://github.com/SeleniumHQ/selenium/milestone/16)
  • Last year, at the TLC Summit in Valencia, the consensus was that we needed to implement every existing
    classic method with BiDi, each with a Classic fallback.
  • December 2025 I consolidated to a minimal, focused release in
    seleniumhq.github.io#2556.

This charter is closer to what we agreed to 2 years ago just including the per-method fallback we discussed in Valencia.

#17709 presumably wants to remove the 2 "high level API" requirements below and roll that into a more comprehensive set of methods supporting

Required decisions

Each must be settled by an accepted ADR before 5.0 ships; none is accepted yet. Each ADR has to
consolidate both what we agreed to implement — the surface, much of it settled at the summits
before we used ADRs — and how it behaves. The existing PRs cover only parts of that.

  • BiDi support boundary — is BiDi internal-only, or is some surface supported, and where is the
    line? #17670 proposes internal-only.
    #17709 describes three layers but does not
    say which is supported, why, or how they differ — so it does not yet define the boundary. The ADR
    has to pin where supported ends and internal begins, and on what basis.
  • Network async/event API — the handler surface (add / remove / clear for requests, responses,
    and authentication; #13993) and how
    handlers behave (observe vs. intercept, disposition, ordering;
    #17685). [adr] network handler behavior proposal #17685 covers only the behavior; the
    agreed surface still needs to be folded into the same decision.
  • Classic fallback for BiDi-backed commands — how is BiDi support detected, and when does a
    command fall back to Classic? No ADR yet;
    #13995 and the navigation routing work are
    partial inputs.
  • Script and logging async/event API — the surface (pinned scripts; console, JS-error, and
    DOM-mutation handlers; #13992) and how it
    behaves. No ADR yet.
  • Selenium Manager finalized API — the invocation contract, independent versioning, and which
    defaults change when it leaves Beta. No ADR yet; issues
    #11694,
    #15754,
    #17554.

Possible additions to consider

Subjects the charter defers; this PR is where we decide whether any should be required for 5.0. The
charter decides only whether a subject is in scope — each linked ADR is the design proposal
if it is. Each has an in-flight proposal:

  • Full classic-over-BiDi migration — routing specific commands now, beyond the required
    fallback mechanism (navigation: #17715,
    #17232, POC #13190).
  • DevTools deprecation#13990.
  • Convenience layersexpect_* event waiting (#17671),
    response body & request timing (#17674),
    navigation waiting (#17676).
  • Browser context API — browsing contexts as handle objects
    (#17681).
  • Capability mapping — exposing BiDi capability modules as high-level APIs: permissions
    (#17677), storage / cookies
    (#17673), emulation
    (#17675), user prompts
    (#17672).

@selenium-ci selenium-ci added the B-build Includes scripting, bazel and CI integrations label Jun 25, 2026
@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Document Selenium 5 release charter and formalize ADR tracking workflow
📝 Documentation ⚙️ Configuration changes 🕐 10-20 Minutes

Grey Divider

Description

• Add a Selenium 5 release charter defining required ADRs and explicit out-of-scope items.
• Introduce ADR PR and issue templates to separate immutable decisions from implementation tracking.
• Update ADR docs/template to number records by PR and clarify scoping and content guidance.
Diagram

graph TD
A["ADR PR (template)"] --> B["ADR record file"] --> C["Accepted decision"] --> D["ADR tracking issue"]
E["Tracking issue template"] --> D
F["Selenium 5 charter"] --> B
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Keep per-binding status table inside ADR files
  • ➕ All decision + rollout status visible in one place
  • ➕ No reliance on GitHub issue tracking conventions
  • ➖ Causes churn on otherwise-immutable ADR records as bindings converge
  • ➖ Encourages post-acceptance edits to the committed decision artifact
2. Use a GitHub Project/board for convergence tracking
  • ➕ Better cross-ADR and cross-binding rollup views
  • ➕ Can automate status via PR links/workflows
  • ➖ Harder to keep a single canonical link from each ADR PR
  • ➖ More process/tooling overhead than a simple issue checklist
3. Track convergence via labels/milestones on implementing PRs
  • ➕ Leverages existing GitHub primitives; minimal templates
  • ➕ Queryable across repo
  • ➖ Less structured per-binding checklist; easy to miss one binding
  • ➖ Weaker narrative context for blockers/caveats than a dedicated tracking issue

Recommendation: The PR’s approach (immutable ADR records + separate post-acceptance tracking issues) is the best tradeoff: it preserves ADRs as durable design artifacts while still providing a lightweight, standardized convergence mechanism across bindings. A project board could be added later for rollups without changing the ADR/issue canonical linkage model.

Files changed (5) +203 / -33

Documentation (4) +160 / -33
adr.mdAdd ADR pull request template for proposal logistics +26/-0

Add ADR pull request template for proposal logistics

• Adds a PR template specifically for ADR proposals, instructing authors to keep the PR body focused on related links, proposal notes, discussion questions, and post-acceptance tracking. Reinforces that the decision content belongs in the ADR record file.

.github/PULL_REQUEST_TEMPLATE/adr.md

0000-template.mdRefine ADR record template: scope, behavior table, and immutability guidance +28/-22

Refine ADR record template: scope, behavior table, and immutability guidance

• Updates the ADR template to clarify that the ADR number is the PR number and that records should capture what/why rather than implementation details. Adds an optional current-behavior table for documenting cross-binding divergence, and removes the in-record binding status table in favor of a post-acceptance tracking issue.

docs/decisions/0000-template.md

README.mdDefine ADR scoping rules and move convergence tracking to issues +33/-11

Define ADR scoping rules and move convergence tracking to issues

• Clarifies that ADRs are numbered by their proposing PR number and adds guidance on when to bundle vs split related sub-decisions. Updates the process to use the ADR PR template query param and replaces in-record binding convergence tracking with a dedicated ADR tracking issue created from the new issue form.

docs/decisions/README.md

selenium-5.mdAdd Selenium 5 release charter document +73/-0

Add Selenium 5 release charter document

• Introduces a proposed Selenium 5 release charter that defines Selenium 5 as an alignment release and lists the ADR decisions required to ship (BiDi boundary, classic fallback, network and script/logging event APIs, Selenium Manager API). Explicitly marks several topics as out of scope for 5.0 (full classic-over-BiDi migration, DevTools deprecation, convenience layers, browser context API, capability mapping).

docs/plans/selenium-5.md

Other (1) +43 / -0
adr-tracking.ymlAdd ADR implementation tracking issue form +43/-0

Add ADR implementation tracking issue form

• Introduces a GitHub issue form to open standardized tracking issues once an ADR is accepted. Captures the accepted ADR link and provides a per-binding checklist (Java, Python, Ruby, .NET, JavaScript) plus notes for blockers/caveats.

.github/ISSUE_TEMPLATE/adr-tracking.yml

@qodo-code-review

qodo-code-review Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (1) 📜 Skill insights (0)

Context used
✅ Compliance rules (platform): 11 rules

Grey Divider


Action required

1. DevTools deprecation set out-of-scope ✗ Dismissed 📎 Requirement gap ≡ Correctness
Description
The charter explicitly lists DevTools (CDP) deprecation as out of scope for Selenium 5. This
conflicts with the compliance requirement that CDP APIs be deprecated in Selenium 5 with guidance
for BiDi feature requests.
Code

docs/plans/selenium-5.md[R57-60]

+### DevTools deprecation
+
+Deprecating or removing DevTools (CDP) support.
+
Evidence
PR Compliance ID 389279 requires CDP-related APIs to be deprecated in Selenium 5 with user guidance.
The new charter states "DevTools deprecation" is out of scope, which directly contradicts that
requirement.

CDP usage is deprecated in Selenium 5 with guidance for BiDi feature requests
docs/plans/selenium-5.md[57-60]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The Selenium 5 release charter marks DevTools (CDP) deprecation as out of scope, but the compliance checklist requires CDP usage to be deprecated in Selenium 5 and to include guidance for users on filing BiDi gap requests.

## Issue Context
This PR adds `docs/plans/selenium-5.md` as the release charter, so its in-scope/out-of-scope decisions must align with the Selenium 5 compliance requirements.

## Fix Focus Areas
- docs/plans/selenium-5.md[20-47]
- docs/plans/selenium-5.md[57-60]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Missing BiDi navigation requirement 📎 Requirement gap ≡ Correctness
Description
The charter's "Required for release" list omits BiDi navigation commands and pageLoadStrategy-aware
waiting. This fails to reflect the compliance requirement that BiDi-based navigation be implemented
across bindings with page load strategy respected.
Code

docs/plans/selenium-5.md[R20-47]

+## Required for release
+
+### BiDi support boundary — _ADR pending_
+
+How the WebDriver BiDi protocol is exposed to users across the bindings. The ADR sets where the
+boundary sits between supported Selenium API and internal implementation, and how each binding
+marks it.
+
+### Classic fallback for BiDi-backed commands — _ADR pending_
+
+A defined, cross-binding mechanism for running a supported command over BiDi and falling back to
+Classic when BiDi or the browser does not support it. The mechanism is required; migrating every
+command is not.
+
+### Network async/event API — _ADR pending_
+
+The cross-binding API for adding, removing, and clearing handlers for requests, responses, and
+authentication.
+
+### Script and logging async/event API — _ADR pending_
+
+The cross-binding API for pinned scripts (pin / unpin / execute) and for console-message,
+JavaScript-error, and DOM-mutation handlers.
+
+### Selenium Manager finalized API — _ADR pending_
+
+A finalized, documented API the bindings invoke, versioned independently of the client.
+
Evidence
PR Compliance ID 389276 requires BiDi navigation commands across bindings with
pageLoadStrategy-aware waiting. The new charter enumerates required items for release but does not
include navigation, indicating the charter scope is not aligned with the requirement.

BiDi Navigation commands implemented across bindings with pageLoadStrategy-aware waiting
docs/plans/selenium-5.md[20-47]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The Selenium 5 release charter does not list BiDi-based navigation (with pageLoadStrategy-aware waiting) as a required-for-release item, even though the compliance checklist mandates it as a minimum viable BiDi module across bindings.

## Issue Context
This document is positioned as the definitive list of decisions/features required for Selenium 5. If navigation is required for release, it should be explicitly listed and tied to the ADR/design work.

## Fix Focus Areas
- docs/plans/selenium-5.md[20-47]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

@titusfortner titusfortner force-pushed the c/modest-benz-4f2db6 branch from f5acd6e to de97f5f Compare June 25, 2026 11:45
Comment thread docs/plans/selenium-5.md
Comment thread docs/plans/selenium-5.md
Comment on lines +20 to +47
## Required for release

### BiDi support boundary — _ADR pending_

How the WebDriver BiDi protocol is exposed to users across the bindings. The ADR sets where the
boundary sits between supported Selenium API and internal implementation, and how each binding
marks it.

### Classic fallback for BiDi-backed commands — _ADR pending_

A defined, cross-binding mechanism for running a supported command over BiDi and falling back to
Classic when BiDi or the browser does not support it. The mechanism is required; migrating every
command is not.

### Network async/event API — _ADR pending_

The cross-binding API for adding, removing, and clearing handlers for requests, responses, and
authentication.

### Script and logging async/event API — _ADR pending_

The cross-binding API for pinned scripts (pin / unpin / execute) and for console-message,
JavaScript-error, and DOM-mutation handlers.

### Selenium Manager finalized API — _ADR pending_

A finalized, documented API the bindings invoke, versioned independently of the client.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Action required

2. Missing bidi navigation requirement 📎 Requirement gap ≡ Correctness

The charter's "Required for release" list omits BiDi navigation commands and pageLoadStrategy-aware
waiting. This fails to reflect the compliance requirement that BiDi-based navigation be implemented
across bindings with page load strategy respected.
Agent Prompt
## Issue description
The Selenium 5 release charter does not list BiDi-based navigation (with pageLoadStrategy-aware waiting) as a required-for-release item, even though the compliance checklist mandates it as a minimum viable BiDi module across bindings.

## Issue Context
This document is positioned as the definitive list of decisions/features required for Selenium 5. If navigation is required for release, it should be explicitly listed and tied to the ADR/design work.

## Fix Focus Areas
- docs/plans/selenium-5.md[20-47]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

The intent was to make this part of the ADR for "Classic fallback for BiDi-backed commands" since it is kind of an implementation detail. But agreed, especially if we are going to move that bullet to out of scope (not a requirement for Selenium 5) we need to decide separately if we want to define the mechanism for deciding BiDi vs Classic path for sessions and implement something like Navigation, which Ruby already does.

@qodo-code-review

Copy link
Copy Markdown
Contributor

Code review by qodo was updated up to the latest commit de97f5f

Comment thread docs/plans/selenium-5.md
boundary sits between supported Selenium API and internal implementation, and how each binding
marks it.

### Classic fallback for BiDi-backed commands — _ADR pending_

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

  1. This is too specific of subject. It should be "Partial BiDi implementation support" where we decide what it means to support a remote end that doesn't implement every feature.
  2. One specific issue with the "per command" fallback is that not all commands can switch between classic and bidi depending on what previous commands were sent
  3. This issue is not just about "what if Safaridriver implements BiDi support but not for everything at first" it can also be about supporting older browsers with inicomplete BiDi implementations

The consensus at the 6/25 TLC meeting was that this probably doesn't belong as a blocker or a prerequisite for Selenium 5, and it can be part of the ADR for the Classic Migration.

Comment thread docs/plans/selenium-5.md
boundary sits between supported Selenium API and internal implementation, and how each binding
marks it.

### Classic fallback for BiDi-backed commands — _ADR pending_

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This could be an implementation detail of the migration to Selenium 5 ADR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

B-build Includes scripting, bazel and CI integrations

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants