[docs] add design decision record process and template - #17665

Merged
titusfortner merged 1 commit into
trunkfrom
adr
Jun 18, 2026
Merged

[docs] add design decision record process and template#17665
titusfortner merged 1 commit into
trunkfrom
adr

Conversation

@titusfortner

@titusfortnertitusfortner commented Jun 10, 2026

Copy link
Copy Markdown
Member

💥 What does this PR do?

Adds docs/decisions/ — a lightweight process for recording design decisions that apply across bindings (API shape, cross-binding semantics, deprecation commitments), plus the template for writing one. Decisions are proposed as PRs, discussed on the PR thread and at TLC meetings, and accepted by TLC consensus; the merged file is the canonical record, so settled questions get answered with a link instead of being re-litigated.

🔧 Implementation Notes

  • Format is based on MADR/Nygard ADRs with one Selenium-specific addition: a per-binding status table so convergence across the five bindings is tracked in the record itself.
  • These live in trunk rather than the website repo because the audience is contributors and the merge-is-acceptance process depends on the code-review flow. They can be rendered to selenium.dev later without moving the source of truth.

🤖 AI assistance

  • AI assisted (complete below)
    • Tool(s): Claude Code
    • What was generated: Initial drafts of the README and template, revised through discussion and review
    • I reviewed all AI output and can explain the change

💡 Additional Considerations

  • This PR follows the process it introduces: feedback is encouraged from all contributors; it merges by TLC consensus — a majority of TLC members responding with no unresolved objections, after at least one week open and discussion at a TLC meeting — with the Selenium Project Lead performing the merge. Merging adopts the process.

🔄 Types of changes

  • Documentation (contributor process)

@qodo-code-review

qodo-code-reviewBot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (1)📘 Rule violations (0)

Grey Divider


Remediation recommended

1. Filename convention mismatch 🐞 Bug⚙ Maintainability
Description
The ADR template’s supersedence example points to NNNN-title.md, but the README standardizes
decision filenames as NNNN-short-title.md, creating conflicting guidance that can lead to
inconsistent ADR filenames/links when contributors copy the template verbatim.
Code

docs/decisions/0000-template.md[6]

+- Status: Proposed <!-- Proposed | Accepted | Rejected | Superseded by [NNNN](NNNN-title.md) -->
Evidence
The README defines the canonical ADR filename format as NNNN-short-title.md, while the template’s
status-line example uses a different filename (NNNN-title.md), so the two new docs conflict on how
supersedence links should be written.

docs/decisions/README.md[30-32]
docs/decisions/0000-template.md[6-6]
docs/decisions/README.md[65-67]

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 ADR template and README disagree on the expected decision filename pattern for supersedence links (`NNNN-title.md` vs `NNNN-short-title.md`). This can cause inconsistent file naming and incorrect/inconsistent links across ADRs.
## Issue Context
- README instructs authors to create ADRs as `NNNN-short-title.md`.
- Template’s status-line comment suggests `Superseded by [NNNN](NNNN-title.md)`.
## Fix Focus Areas
- docs/decisions/0000-template.md[6-6]
- docs/decisions/README.md[30-32]
- docs/decisions/README.md[65-67]
## Suggested fix
- Update the template’s supersedence example to use `NNNN-short-title.md` (or a neutral placeholder matching the README’s convention).
- Update the README’s `Superseded by [NNNN](...)` example to show the same filename pattern explicitly (e.g., `Superseded by [NNNN](NNNN-short-title.md)`).

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


Grey Divider

Previous review results

Review updated until commit 9288155

Results up to commit 9554f29


🐞 Bugs (1)📘 Rule violations (0)📎 Requirement gaps (0)🎨 UX issues (0)🔗 Cross-repo conflicts (0)


Remediation recommended
1. Filename convention mismatch 🐞 Bug⚙ Maintainability
Description
The ADR template’s supersedence example points to NNNN-title.md, but the README standardizes
decision filenames as NNNN-short-title.md, creating conflicting guidance that can lead to
inconsistent ADR filenames/links when contributors copy the template verbatim.
Code

docs/decisions/0000-template.md[6]

+- Status: Proposed <!-- Proposed | Accepted | Rejected | Superseded by [NNNN](NNNN-title.md) -->
Evidence
The README defines the canonical ADR filename format as NNNN-short-title.md, while the template’s
status-line example uses a different filename (NNNN-title.md), so the two new docs conflict on how
supersedence links should be written.

docs/decisions/README.md[30-32]
docs/decisions/0000-template.md[6-6]
docs/decisions/README.md[65-67]

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 ADR template and README disagree on the expected decision filename pattern for supersedence links (`NNNN-title.md` vs `NNNN-short-title.md`). This can cause inconsistent file naming and incorrect/inconsistent links across ADRs.
## Issue Context
- README instructs authors to create ADRs as `NNNN-short-title.md`.
- Template’s status-line comment suggests `Superseded by [NNNN](NNNN-title.md)`.
## Fix Focus Areas
- docs/decisions/0000-template.md[6-6]
- docs/decisions/README.md[30-32]
- docs/decisions/README.md[65-67]
## Suggested fix
- Update the template’s supersedence example to use `NNNN-short-title.md` (or a neutral placeholder matching the README’s convention).
- Update the README’s `Superseded by [NNNN](...)` example to show the same filename pattern explicitly (e.g., `Superseded by [NNNN](NNNN-short-title.md)`).

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


Qodo Logo

@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Add ADR process and template under docs/decisions
📝 Documentation🕐 10-20 Minutes

Grey Divider

Walkthroughs

Description
• Introduce a Design Decision Record (ADR) log for cross-binding Selenium decisions
• Document proposal/approval workflow (PR discussion + TLC consensus; merge equals acceptance)
• Provide a reusable ADR template including per-binding convergence status tracking
Diagram
flowchart TD
C(["Contributor"]) --> T["Copy template"] --> PR["Open PR (Proposed)"] --> TLC{"TLC consensus"} --> M["Merge PR"] --> ADR["Decision record"] --> B["Update binding status"]
subgraph Legend
direction LR
_term(["Terminator"]) ~~~ _proc["Process"] ~~~ _dec{"Decision"}
end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Host ADRs in selenium.dev (website repo)
  • ➕ Immediate public discoverability and site navigation/search integration
  • ➕ Keeps governance/process docs near other public-facing documentation
  • ➖ Weakens the “merge equals acceptance” workflow tied to core repo reviews
  • ➖ Harder to keep contributor-targeted process close to where changes are made
2. Use GitHub Discussions/issues as the canonical decision record
  • ➕ Native threading and visibility; easy to reference and participate
  • ➕ No need to maintain a file format/template
  • ➖ Harder to keep a concise, immutable, durable summary of the final decision
  • ➖ More risk of re-litigating settled questions across multiple threads
3. Adopt MADR/Nygard format verbatim (no binding-status table)
  • ➕ Maximum familiarity and portability to other ADR tooling
  • ➕ Less bespoke structure to maintain
  • ➖ Doesn’t directly address Selenium’s multi-binding convergence tracking needs
  • ➖ Status per binding would likely drift into external trackers or PR comments

Recommendation: The PR’s approach (ADRs in-repo, merge-as-acceptance, and a per-binding status table) is the best fit for Selenium’s cross-binding governance: it keeps the canonical record in the review workflow contributors already use, while explicitly tracking convergence across languages. The main thing to validate in review is whether the approval/consensus wording matches current TLC expectations.

Grey Divider

File Changes

Documentation (2)
0000-template.mdAdd ADR template with binding-status table+56/-0

Add ADR template with binding-status table

• Introduces a numbered decision record template based on common ADR formats. Includes required sections (Context, Decision, Considered options, Consequences) and adds a dedicated per-binding status table to track convergence across Selenium bindings.

docs/decisions/0000-template.md


README.mdDocument ADR scope, workflow, and TLC approval rules+71/-0

Document ADR scope, workflow, and TLC approval rules

• Defines what qualifies for a cross-binding decision record and what does not. Specifies the end-to-end process (propose via PR, discuss in PR/TLC, merge as acceptance/rejection, and binding implementation tracking) plus approval/immutability and numbering rules.

docs/decisions/README.md


Grey Divider

Qodo Logo

Comment threaddocs/decisions/README.md
Comment threaddocs/decisions/README.md
@qodo-code-review

qodo-code-reviewBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

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

@AutomatedTesterAutomatedTester added A-needs decision TLC needs to discuss and agree and removed A-needs decision TLC needs to discuss and agree labels Jun 15, 2026
@titusfortner
titusfortner merged commit 719cd30 into trunkJun 18, 2026
27 checks passed
@titusfortner
titusfortner deleted the adr branch June 18, 2026 14:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@titusfortner@AutomatedTester@diemol
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[docs] add design decision record process and template - #17665

Merged
titusfortner merged 1 commit into
trunkfrom
adr
Jun 18, 2026
Merged

[docs] add design decision record process and template#17665
titusfortner merged 1 commit into
trunkfrom
adr

Conversation

@titusfortner

@titusfortnertitusfortner commented Jun 10, 2026

Copy link
Copy Markdown
Member

💥 What does this PR do?

Adds docs/decisions/ — a lightweight process for recording design decisions that apply across bindings (API shape, cross-binding semantics, deprecation commitments), plus the template for writing one. Decisions are proposed as PRs, discussed on the PR thread and at TLC meetings, and accepted by TLC consensus; the merged file is the canonical record, so settled questions get answered with a link instead of being re-litigated.

🔧 Implementation Notes

  • Format is based on MADR/Nygard ADRs with one Selenium-specific addition: a per-binding status table so convergence across the five bindings is tracked in the record itself.
  • These live in trunk rather than the website repo because the audience is contributors and the merge-is-acceptance process depends on the code-review flow. They can be rendered to selenium.dev later without moving the source of truth.

🤖 AI assistance

  • AI assisted (complete below)
    • Tool(s): Claude Code
    • What was generated: Initial drafts of the README and template, revised through discussion and review
    • I reviewed all AI output and can explain the change

💡 Additional Considerations

  • This PR follows the process it introduces: feedback is encouraged from all contributors; it merges by TLC consensus — a majority of TLC members responding with no unresolved objections, after at least one week open and discussion at a TLC meeting — with the Selenium Project Lead performing the merge. Merging adopts the process.

🔄 Types of changes

  • Documentation (contributor process)

@qodo-code-review

qodo-code-reviewBot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (1)📘 Rule violations (0)

Grey Divider


Remediation recommended

1. Filename convention mismatch 🐞 Bug⚙ Maintainability
Description
The ADR template’s supersedence example points to NNNN-title.md, but the README standardizes
decision filenames as NNNN-short-title.md, creating conflicting guidance that can lead to
inconsistent ADR filenames/links when contributors copy the template verbatim.
Code

docs/decisions/0000-template.md[6]

+- Status: Proposed <!-- Proposed | Accepted | Rejected | Superseded by [NNNN](NNNN-title.md) -->
Evidence
The README defines the canonical ADR filename format as NNNN-short-title.md, while the template’s
status-line example uses a different filename (NNNN-title.md), so the two new docs conflict on how
supersedence links should be written.

docs/decisions/README.md[30-32]
docs/decisions/0000-template.md[6-6]
docs/decisions/README.md[65-67]

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 ADR template and README disagree on the expected decision filename pattern for supersedence links (`NNNN-title.md` vs `NNNN-short-title.md`). This can cause inconsistent file naming and incorrect/inconsistent links across ADRs.
## Issue Context
- README instructs authors to create ADRs as `NNNN-short-title.md`.
- Template’s status-line comment suggests `Superseded by [NNNN](NNNN-title.md)`.
## Fix Focus Areas
- docs/decisions/0000-template.md[6-6]
- docs/decisions/README.md[30-32]
- docs/decisions/README.md[65-67]
## Suggested fix
- Update the template’s supersedence example to use `NNNN-short-title.md` (or a neutral placeholder matching the README’s convention).
- Update the README’s `Superseded by [NNNN](...)` example to show the same filename pattern explicitly (e.g., `Superseded by [NNNN](NNNN-short-title.md)`).

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


Grey Divider

Previous review results

Review updated until commit 9288155

Results up to commit 9554f29


🐞 Bugs (1)📘 Rule violations (0)📎 Requirement gaps (0)🎨 UX issues (0)🔗 Cross-repo conflicts (0)


Remediation recommended
1. Filename convention mismatch 🐞 Bug⚙ Maintainability
Description
The ADR template’s supersedence example points to NNNN-title.md, but the README standardizes
decision filenames as NNNN-short-title.md, creating conflicting guidance that can lead to
inconsistent ADR filenames/links when contributors copy the template verbatim.
Code

docs/decisions/0000-template.md[6]

+- Status: Proposed <!-- Proposed | Accepted | Rejected | Superseded by [NNNN](NNNN-title.md) -->
Evidence
The README defines the canonical ADR filename format as NNNN-short-title.md, while the template’s
status-line example uses a different filename (NNNN-title.md), so the two new docs conflict on how
supersedence links should be written.

docs/decisions/README.md[30-32]
docs/decisions/0000-template.md[6-6]
docs/decisions/README.md[65-67]

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 ADR template and README disagree on the expected decision filename pattern for supersedence links (`NNNN-title.md` vs `NNNN-short-title.md`). This can cause inconsistent file naming and incorrect/inconsistent links across ADRs.
## Issue Context
- README instructs authors to create ADRs as `NNNN-short-title.md`.
- Template’s status-line comment suggests `Superseded by [NNNN](NNNN-title.md)`.
## Fix Focus Areas
- docs/decisions/0000-template.md[6-6]
- docs/decisions/README.md[30-32]
- docs/decisions/README.md[65-67]
## Suggested fix
- Update the template’s supersedence example to use `NNNN-short-title.md` (or a neutral placeholder matching the README’s convention).
- Update the README’s `Superseded by [NNNN](...)` example to show the same filename pattern explicitly (e.g., `Superseded by [NNNN](NNNN-short-title.md)`).

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


Qodo Logo

@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Add ADR process and template under docs/decisions
📝 Documentation🕐 10-20 Minutes

Grey Divider

Walkthroughs

Description
• Introduce a Design Decision Record (ADR) log for cross-binding Selenium decisions
• Document proposal/approval workflow (PR discussion + TLC consensus; merge equals acceptance)
• Provide a reusable ADR template including per-binding convergence status tracking
Diagram
flowchart TD
C(["Contributor"]) --> T["Copy template"] --> PR["Open PR (Proposed)"] --> TLC{"TLC consensus"} --> M["Merge PR"] --> ADR["Decision record"] --> B["Update binding status"]
subgraph Legend
direction LR
_term(["Terminator"]) ~~~ _proc["Process"] ~~~ _dec{"Decision"}
end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Host ADRs in selenium.dev (website repo)
  • ➕ Immediate public discoverability and site navigation/search integration
  • ➕ Keeps governance/process docs near other public-facing documentation
  • ➖ Weakens the “merge equals acceptance” workflow tied to core repo reviews
  • ➖ Harder to keep contributor-targeted process close to where changes are made
2. Use GitHub Discussions/issues as the canonical decision record
  • ➕ Native threading and visibility; easy to reference and participate
  • ➕ No need to maintain a file format/template
  • ➖ Harder to keep a concise, immutable, durable summary of the final decision
  • ➖ More risk of re-litigating settled questions across multiple threads
3. Adopt MADR/Nygard format verbatim (no binding-status table)
  • ➕ Maximum familiarity and portability to other ADR tooling
  • ➕ Less bespoke structure to maintain
  • ➖ Doesn’t directly address Selenium’s multi-binding convergence tracking needs
  • ➖ Status per binding would likely drift into external trackers or PR comments

Recommendation: The PR’s approach (ADRs in-repo, merge-as-acceptance, and a per-binding status table) is the best fit for Selenium’s cross-binding governance: it keeps the canonical record in the review workflow contributors already use, while explicitly tracking convergence across languages. The main thing to validate in review is whether the approval/consensus wording matches current TLC expectations.

Grey Divider

File Changes

Documentation (2)
0000-template.mdAdd ADR template with binding-status table+56/-0

Add ADR template with binding-status table

• Introduces a numbered decision record template based on common ADR formats. Includes required sections (Context, Decision, Considered options, Consequences) and adds a dedicated per-binding status table to track convergence across Selenium bindings.

docs/decisions/0000-template.md


README.mdDocument ADR scope, workflow, and TLC approval rules+71/-0

Document ADR scope, workflow, and TLC approval rules

• Defines what qualifies for a cross-binding decision record and what does not. Specifies the end-to-end process (propose via PR, discuss in PR/TLC, merge as acceptance/rejection, and binding implementation tracking) plus approval/immutability and numbering rules.

docs/decisions/README.md


Grey Divider

Qodo Logo

Comment threaddocs/decisions/README.md
Comment threaddocs/decisions/README.md
@qodo-code-review

qodo-code-reviewBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

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

@AutomatedTesterAutomatedTester added A-needs decision TLC needs to discuss and agree and removed A-needs decision TLC needs to discuss and agree labels Jun 15, 2026
@titusfortner
titusfortner merged commit 719cd30 into trunkJun 18, 2026
27 checks passed
@titusfortner
titusfortner deleted the adr branch June 18, 2026 14:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@titusfortner@AutomatedTester@diemol
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[docs] add design decision record process and template - #17665

Merged
titusfortner merged 1 commit into
trunkfrom
adr
Jun 18, 2026
Merged

[docs] add design decision record process and template#17665
titusfortner merged 1 commit into
trunkfrom
adr

Conversation

@titusfortner

@titusfortnertitusfortner commented Jun 10, 2026

Copy link
Copy Markdown
Member

💥 What does this PR do?

Adds docs/decisions/ — a lightweight process for recording design decisions that apply across bindings (API shape, cross-binding semantics, deprecation commitments), plus the template for writing one. Decisions are proposed as PRs, discussed on the PR thread and at TLC meetings, and accepted by TLC consensus; the merged file is the canonical record, so settled questions get answered with a link instead of being re-litigated.

🔧 Implementation Notes

  • Format is based on MADR/Nygard ADRs with one Selenium-specific addition: a per-binding status table so convergence across the five bindings is tracked in the record itself.
  • These live in trunk rather than the website repo because the audience is contributors and the merge-is-acceptance process depends on the code-review flow. They can be rendered to selenium.dev later without moving the source of truth.

🤖 AI assistance

  • AI assisted (complete below)
    • Tool(s): Claude Code
    • What was generated: Initial drafts of the README and template, revised through discussion and review
    • I reviewed all AI output and can explain the change

💡 Additional Considerations

  • This PR follows the process it introduces: feedback is encouraged from all contributors; it merges by TLC consensus — a majority of TLC members responding with no unresolved objections, after at least one week open and discussion at a TLC meeting — with the Selenium Project Lead performing the merge. Merging adopts the process.

🔄 Types of changes

  • Documentation (contributor process)

@qodo-code-review

qodo-code-reviewBot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (1)📘 Rule violations (0)

Grey Divider


Remediation recommended

1. Filename convention mismatch 🐞 Bug⚙ Maintainability
Description
The ADR template’s supersedence example points to NNNN-title.md, but the README standardizes
decision filenames as NNNN-short-title.md, creating conflicting guidance that can lead to
inconsistent ADR filenames/links when contributors copy the template verbatim.
Code

docs/decisions/0000-template.md[6]

+- Status: Proposed <!-- Proposed | Accepted | Rejected | Superseded by [NNNN](NNNN-title.md) -->
Evidence
The README defines the canonical ADR filename format as NNNN-short-title.md, while the template’s
status-line example uses a different filename (NNNN-title.md), so the two new docs conflict on how
supersedence links should be written.

docs/decisions/README.md[30-32]
docs/decisions/0000-template.md[6-6]
docs/decisions/README.md[65-67]

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 ADR template and README disagree on the expected decision filename pattern for supersedence links (`NNNN-title.md` vs `NNNN-short-title.md`). This can cause inconsistent file naming and incorrect/inconsistent links across ADRs.
## Issue Context
- README instructs authors to create ADRs as `NNNN-short-title.md`.
- Template’s status-line comment suggests `Superseded by [NNNN](NNNN-title.md)`.
## Fix Focus Areas
- docs/decisions/0000-template.md[6-6]
- docs/decisions/README.md[30-32]
- docs/decisions/README.md[65-67]
## Suggested fix
- Update the template’s supersedence example to use `NNNN-short-title.md` (or a neutral placeholder matching the README’s convention).
- Update the README’s `Superseded by [NNNN](...)` example to show the same filename pattern explicitly (e.g., `Superseded by [NNNN](NNNN-short-title.md)`).

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


Grey Divider

Previous review results

Review updated until commit 9288155

Results up to commit 9554f29


🐞 Bugs (1)📘 Rule violations (0)📎 Requirement gaps (0)🎨 UX issues (0)🔗 Cross-repo conflicts (0)


Remediation recommended
1. Filename convention mismatch 🐞 Bug⚙ Maintainability
Description
The ADR template’s supersedence example points to NNNN-title.md, but the README standardizes
decision filenames as NNNN-short-title.md, creating conflicting guidance that can lead to
inconsistent ADR filenames/links when contributors copy the template verbatim.
Code

docs/decisions/0000-template.md[6]

+- Status: Proposed <!-- Proposed | Accepted | Rejected | Superseded by [NNNN](NNNN-title.md) -->
Evidence
The README defines the canonical ADR filename format as NNNN-short-title.md, while the template’s
status-line example uses a different filename (NNNN-title.md), so the two new docs conflict on how
supersedence links should be written.

docs/decisions/README.md[30-32]
docs/decisions/0000-template.md[6-6]
docs/decisions/README.md[65-67]

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 ADR template and README disagree on the expected decision filename pattern for supersedence links (`NNNN-title.md` vs `NNNN-short-title.md`). This can cause inconsistent file naming and incorrect/inconsistent links across ADRs.
## Issue Context
- README instructs authors to create ADRs as `NNNN-short-title.md`.
- Template’s status-line comment suggests `Superseded by [NNNN](NNNN-title.md)`.
## Fix Focus Areas
- docs/decisions/0000-template.md[6-6]
- docs/decisions/README.md[30-32]
- docs/decisions/README.md[65-67]
## Suggested fix
- Update the template’s supersedence example to use `NNNN-short-title.md` (or a neutral placeholder matching the README’s convention).
- Update the README’s `Superseded by [NNNN](...)` example to show the same filename pattern explicitly (e.g., `Superseded by [NNNN](NNNN-short-title.md)`).

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


Qodo Logo

@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Add ADR process and template under docs/decisions
📝 Documentation🕐 10-20 Minutes

Grey Divider

Walkthroughs

Description
• Introduce a Design Decision Record (ADR) log for cross-binding Selenium decisions
• Document proposal/approval workflow (PR discussion + TLC consensus; merge equals acceptance)
• Provide a reusable ADR template including per-binding convergence status tracking
Diagram
flowchart TD
C(["Contributor"]) --> T["Copy template"] --> PR["Open PR (Proposed)"] --> TLC{"TLC consensus"} --> M["Merge PR"] --> ADR["Decision record"] --> B["Update binding status"]
subgraph Legend
direction LR
_term(["Terminator"]) ~~~ _proc["Process"] ~~~ _dec{"Decision"}
end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Host ADRs in selenium.dev (website repo)
  • ➕ Immediate public discoverability and site navigation/search integration
  • ➕ Keeps governance/process docs near other public-facing documentation
  • ➖ Weakens the “merge equals acceptance” workflow tied to core repo reviews
  • ➖ Harder to keep contributor-targeted process close to where changes are made
2. Use GitHub Discussions/issues as the canonical decision record
  • ➕ Native threading and visibility; easy to reference and participate
  • ➕ No need to maintain a file format/template
  • ➖ Harder to keep a concise, immutable, durable summary of the final decision
  • ➖ More risk of re-litigating settled questions across multiple threads
3. Adopt MADR/Nygard format verbatim (no binding-status table)
  • ➕ Maximum familiarity and portability to other ADR tooling
  • ➕ Less bespoke structure to maintain
  • ➖ Doesn’t directly address Selenium’s multi-binding convergence tracking needs
  • ➖ Status per binding would likely drift into external trackers or PR comments

Recommendation: The PR’s approach (ADRs in-repo, merge-as-acceptance, and a per-binding status table) is the best fit for Selenium’s cross-binding governance: it keeps the canonical record in the review workflow contributors already use, while explicitly tracking convergence across languages. The main thing to validate in review is whether the approval/consensus wording matches current TLC expectations.

Grey Divider

File Changes

Documentation (2)
0000-template.mdAdd ADR template with binding-status table+56/-0

Add ADR template with binding-status table

• Introduces a numbered decision record template based on common ADR formats. Includes required sections (Context, Decision, Considered options, Consequences) and adds a dedicated per-binding status table to track convergence across Selenium bindings.

docs/decisions/0000-template.md


README.mdDocument ADR scope, workflow, and TLC approval rules+71/-0

Document ADR scope, workflow, and TLC approval rules

• Defines what qualifies for a cross-binding decision record and what does not. Specifies the end-to-end process (propose via PR, discuss in PR/TLC, merge as acceptance/rejection, and binding implementation tracking) plus approval/immutability and numbering rules.

docs/decisions/README.md


Grey Divider

Qodo Logo

Comment threaddocs/decisions/README.md
Comment threaddocs/decisions/README.md
@qodo-code-review

qodo-code-reviewBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

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

@AutomatedTesterAutomatedTester added A-needs decision TLC needs to discuss and agree and removed A-needs decision TLC needs to discuss and agree labels Jun 15, 2026
@titusfortner
titusfortner merged commit 719cd30 into trunkJun 18, 2026
27 checks passed
@titusfortner
titusfortner deleted the adr branch June 18, 2026 14:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@titusfortner@AutomatedTester@diemol
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[docs] add design decision record process and template - #17665

Merged
titusfortner merged 1 commit into
trunkfrom
adr
Jun 18, 2026
Merged

[docs] add design decision record process and template#17665
titusfortner merged 1 commit into
trunkfrom
adr

Conversation

@titusfortner

@titusfortnertitusfortner commented Jun 10, 2026

Copy link
Copy Markdown
Member

💥 What does this PR do?

Adds docs/decisions/ — a lightweight process for recording design decisions that apply across bindings (API shape, cross-binding semantics, deprecation commitments), plus the template for writing one. Decisions are proposed as PRs, discussed on the PR thread and at TLC meetings, and accepted by TLC consensus; the merged file is the canonical record, so settled questions get answered with a link instead of being re-litigated.

🔧 Implementation Notes

  • Format is based on MADR/Nygard ADRs with one Selenium-specific addition: a per-binding status table so convergence across the five bindings is tracked in the record itself.
  • These live in trunk rather than the website repo because the audience is contributors and the merge-is-acceptance process depends on the code-review flow. They can be rendered to selenium.dev later without moving the source of truth.

🤖 AI assistance

  • AI assisted (complete below)
    • Tool(s): Claude Code
    • What was generated: Initial drafts of the README and template, revised through discussion and review
    • I reviewed all AI output and can explain the change

💡 Additional Considerations

  • This PR follows the process it introduces: feedback is encouraged from all contributors; it merges by TLC consensus — a majority of TLC members responding with no unresolved objections, after at least one week open and discussion at a TLC meeting — with the Selenium Project Lead performing the merge. Merging adopts the process.

🔄 Types of changes

  • Documentation (contributor process)

@qodo-code-review

qodo-code-reviewBot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (1)📘 Rule violations (0)

Grey Divider


Remediation recommended

1. Filename convention mismatch 🐞 Bug⚙ Maintainability
Description
The ADR template’s supersedence example points to NNNN-title.md, but the README standardizes
decision filenames as NNNN-short-title.md, creating conflicting guidance that can lead to
inconsistent ADR filenames/links when contributors copy the template verbatim.
Code

docs/decisions/0000-template.md[6]

+- Status: Proposed <!-- Proposed | Accepted | Rejected | Superseded by [NNNN](NNNN-title.md) -->
Evidence
The README defines the canonical ADR filename format as NNNN-short-title.md, while the template’s
status-line example uses a different filename (NNNN-title.md), so the two new docs conflict on how
supersedence links should be written.

docs/decisions/README.md[30-32]
docs/decisions/0000-template.md[6-6]
docs/decisions/README.md[65-67]

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 ADR template and README disagree on the expected decision filename pattern for supersedence links (`NNNN-title.md` vs `NNNN-short-title.md`). This can cause inconsistent file naming and incorrect/inconsistent links across ADRs.
## Issue Context
- README instructs authors to create ADRs as `NNNN-short-title.md`.
- Template’s status-line comment suggests `Superseded by [NNNN](NNNN-title.md)`.
## Fix Focus Areas
- docs/decisions/0000-template.md[6-6]
- docs/decisions/README.md[30-32]
- docs/decisions/README.md[65-67]
## Suggested fix
- Update the template’s supersedence example to use `NNNN-short-title.md` (or a neutral placeholder matching the README’s convention).
- Update the README’s `Superseded by [NNNN](...)` example to show the same filename pattern explicitly (e.g., `Superseded by [NNNN](NNNN-short-title.md)`).

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


Grey Divider

Previous review results

Review updated until commit 9288155

Results up to commit 9554f29


🐞 Bugs (1)📘 Rule violations (0)📎 Requirement gaps (0)🎨 UX issues (0)🔗 Cross-repo conflicts (0)


Remediation recommended
1. Filename convention mismatch 🐞 Bug⚙ Maintainability
Description
The ADR template’s supersedence example points to NNNN-title.md, but the README standardizes
decision filenames as NNNN-short-title.md, creating conflicting guidance that can lead to
inconsistent ADR filenames/links when contributors copy the template verbatim.
Code

docs/decisions/0000-template.md[6]

+- Status: Proposed <!-- Proposed | Accepted | Rejected | Superseded by [NNNN](NNNN-title.md) -->
Evidence
The README defines the canonical ADR filename format as NNNN-short-title.md, while the template’s
status-line example uses a different filename (NNNN-title.md), so the two new docs conflict on how
supersedence links should be written.

docs/decisions/README.md[30-32]
docs/decisions/0000-template.md[6-6]
docs/decisions/README.md[65-67]

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 ADR template and README disagree on the expected decision filename pattern for supersedence links (`NNNN-title.md` vs `NNNN-short-title.md`). This can cause inconsistent file naming and incorrect/inconsistent links across ADRs.
## Issue Context
- README instructs authors to create ADRs as `NNNN-short-title.md`.
- Template’s status-line comment suggests `Superseded by [NNNN](NNNN-title.md)`.
## Fix Focus Areas
- docs/decisions/0000-template.md[6-6]
- docs/decisions/README.md[30-32]
- docs/decisions/README.md[65-67]
## Suggested fix
- Update the template’s supersedence example to use `NNNN-short-title.md` (or a neutral placeholder matching the README’s convention).
- Update the README’s `Superseded by [NNNN](...)` example to show the same filename pattern explicitly (e.g., `Superseded by [NNNN](NNNN-short-title.md)`).

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


Qodo Logo

@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Add ADR process and template under docs/decisions
📝 Documentation🕐 10-20 Minutes

Grey Divider

Walkthroughs

Description
• Introduce a Design Decision Record (ADR) log for cross-binding Selenium decisions
• Document proposal/approval workflow (PR discussion + TLC consensus; merge equals acceptance)
• Provide a reusable ADR template including per-binding convergence status tracking
Diagram
flowchart TD
C(["Contributor"]) --> T["Copy template"] --> PR["Open PR (Proposed)"] --> TLC{"TLC consensus"} --> M["Merge PR"] --> ADR["Decision record"] --> B["Update binding status"]
subgraph Legend
direction LR
_term(["Terminator"]) ~~~ _proc["Process"] ~~~ _dec{"Decision"}
end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Host ADRs in selenium.dev (website repo)
  • ➕ Immediate public discoverability and site navigation/search integration
  • ➕ Keeps governance/process docs near other public-facing documentation
  • ➖ Weakens the “merge equals acceptance” workflow tied to core repo reviews
  • ➖ Harder to keep contributor-targeted process close to where changes are made
2. Use GitHub Discussions/issues as the canonical decision record
  • ➕ Native threading and visibility; easy to reference and participate
  • ➕ No need to maintain a file format/template
  • ➖ Harder to keep a concise, immutable, durable summary of the final decision
  • ➖ More risk of re-litigating settled questions across multiple threads
3. Adopt MADR/Nygard format verbatim (no binding-status table)
  • ➕ Maximum familiarity and portability to other ADR tooling
  • ➕ Less bespoke structure to maintain
  • ➖ Doesn’t directly address Selenium’s multi-binding convergence tracking needs
  • ➖ Status per binding would likely drift into external trackers or PR comments

Recommendation: The PR’s approach (ADRs in-repo, merge-as-acceptance, and a per-binding status table) is the best fit for Selenium’s cross-binding governance: it keeps the canonical record in the review workflow contributors already use, while explicitly tracking convergence across languages. The main thing to validate in review is whether the approval/consensus wording matches current TLC expectations.

Grey Divider

File Changes

Documentation (2)
0000-template.mdAdd ADR template with binding-status table+56/-0

Add ADR template with binding-status table

• Introduces a numbered decision record template based on common ADR formats. Includes required sections (Context, Decision, Considered options, Consequences) and adds a dedicated per-binding status table to track convergence across Selenium bindings.

docs/decisions/0000-template.md


README.mdDocument ADR scope, workflow, and TLC approval rules+71/-0

Document ADR scope, workflow, and TLC approval rules

• Defines what qualifies for a cross-binding decision record and what does not. Specifies the end-to-end process (propose via PR, discuss in PR/TLC, merge as acceptance/rejection, and binding implementation tracking) plus approval/immutability and numbering rules.

docs/decisions/README.md


Grey Divider

Qodo Logo

Comment threaddocs/decisions/README.md
Comment threaddocs/decisions/README.md
@qodo-code-review

qodo-code-reviewBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

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

@AutomatedTesterAutomatedTester added A-needs decision TLC needs to discuss and agree and removed A-needs decision TLC needs to discuss and agree labels Jun 15, 2026
@titusfortner
titusfortner merged commit 719cd30 into trunkJun 18, 2026
27 checks passed
@titusfortner
titusfortner deleted the adr branch June 18, 2026 14:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@titusfortner@AutomatedTester@diemol
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[docs] add design decision record process and template - #17665

Merged
titusfortner merged 1 commit into
trunkfrom
adr
Jun 18, 2026
Merged

[docs] add design decision record process and template#17665
titusfortner merged 1 commit into
trunkfrom
adr

Conversation

@titusfortner

@titusfortnertitusfortner commented Jun 10, 2026

Copy link
Copy Markdown
Member

💥 What does this PR do?

Adds docs/decisions/ — a lightweight process for recording design decisions that apply across bindings (API shape, cross-binding semantics, deprecation commitments), plus the template for writing one. Decisions are proposed as PRs, discussed on the PR thread and at TLC meetings, and accepted by TLC consensus; the merged file is the canonical record, so settled questions get answered with a link instead of being re-litigated.

🔧 Implementation Notes

  • Format is based on MADR/Nygard ADRs with one Selenium-specific addition: a per-binding status table so convergence across the five bindings is tracked in the record itself.
  • These live in trunk rather than the website repo because the audience is contributors and the merge-is-acceptance process depends on the code-review flow. They can be rendered to selenium.dev later without moving the source of truth.

🤖 AI assistance

  • AI assisted (complete below)
    • Tool(s): Claude Code
    • What was generated: Initial drafts of the README and template, revised through discussion and review
    • I reviewed all AI output and can explain the change

💡 Additional Considerations

  • This PR follows the process it introduces: feedback is encouraged from all contributors; it merges by TLC consensus — a majority of TLC members responding with no unresolved objections, after at least one week open and discussion at a TLC meeting — with the Selenium Project Lead performing the merge. Merging adopts the process.

🔄 Types of changes

  • Documentation (contributor process)

@qodo-code-review

qodo-code-reviewBot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (1)📘 Rule violations (0)

Grey Divider


Remediation recommended

1. Filename convention mismatch 🐞 Bug⚙ Maintainability
Description
The ADR template’s supersedence example points to NNNN-title.md, but the README standardizes
decision filenames as NNNN-short-title.md, creating conflicting guidance that can lead to
inconsistent ADR filenames/links when contributors copy the template verbatim.
Code

docs/decisions/0000-template.md[6]

+- Status: Proposed <!-- Proposed | Accepted | Rejected | Superseded by [NNNN](NNNN-title.md) -->
Evidence
The README defines the canonical ADR filename format as NNNN-short-title.md, while the template’s
status-line example uses a different filename (NNNN-title.md), so the two new docs conflict on how
supersedence links should be written.

docs/decisions/README.md[30-32]
docs/decisions/0000-template.md[6-6]
docs/decisions/README.md[65-67]

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 ADR template and README disagree on the expected decision filename pattern for supersedence links (`NNNN-title.md` vs `NNNN-short-title.md`). This can cause inconsistent file naming and incorrect/inconsistent links across ADRs.
## Issue Context
- README instructs authors to create ADRs as `NNNN-short-title.md`.
- Template’s status-line comment suggests `Superseded by [NNNN](NNNN-title.md)`.
## Fix Focus Areas
- docs/decisions/0000-template.md[6-6]
- docs/decisions/README.md[30-32]
- docs/decisions/README.md[65-67]
## Suggested fix
- Update the template’s supersedence example to use `NNNN-short-title.md` (or a neutral placeholder matching the README’s convention).
- Update the README’s `Superseded by [NNNN](...)` example to show the same filename pattern explicitly (e.g., `Superseded by [NNNN](NNNN-short-title.md)`).

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


Grey Divider

Previous review results

Review updated until commit 9288155

Results up to commit 9554f29


🐞 Bugs (1)📘 Rule violations (0)📎 Requirement gaps (0)🎨 UX issues (0)🔗 Cross-repo conflicts (0)


Remediation recommended
1. Filename convention mismatch 🐞 Bug⚙ Maintainability
Description
The ADR template’s supersedence example points to NNNN-title.md, but the README standardizes
decision filenames as NNNN-short-title.md, creating conflicting guidance that can lead to
inconsistent ADR filenames/links when contributors copy the template verbatim.
Code

docs/decisions/0000-template.md[6]

+- Status: Proposed <!-- Proposed | Accepted | Rejected | Superseded by [NNNN](NNNN-title.md) -->
Evidence
The README defines the canonical ADR filename format as NNNN-short-title.md, while the template’s
status-line example uses a different filename (NNNN-title.md), so the two new docs conflict on how
supersedence links should be written.

docs/decisions/README.md[30-32]
docs/decisions/0000-template.md[6-6]
docs/decisions/README.md[65-67]

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 ADR template and README disagree on the expected decision filename pattern for supersedence links (`NNNN-title.md` vs `NNNN-short-title.md`). This can cause inconsistent file naming and incorrect/inconsistent links across ADRs.
## Issue Context
- README instructs authors to create ADRs as `NNNN-short-title.md`.
- Template’s status-line comment suggests `Superseded by [NNNN](NNNN-title.md)`.
## Fix Focus Areas
- docs/decisions/0000-template.md[6-6]
- docs/decisions/README.md[30-32]
- docs/decisions/README.md[65-67]
## Suggested fix
- Update the template’s supersedence example to use `NNNN-short-title.md` (or a neutral placeholder matching the README’s convention).
- Update the README’s `Superseded by [NNNN](...)` example to show the same filename pattern explicitly (e.g., `Superseded by [NNNN](NNNN-short-title.md)`).

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


Qodo Logo

@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Add ADR process and template under docs/decisions
📝 Documentation🕐 10-20 Minutes

Grey Divider

Walkthroughs

Description
• Introduce a Design Decision Record (ADR) log for cross-binding Selenium decisions
• Document proposal/approval workflow (PR discussion + TLC consensus; merge equals acceptance)
• Provide a reusable ADR template including per-binding convergence status tracking
Diagram
flowchart TD
C(["Contributor"]) --> T["Copy template"] --> PR["Open PR (Proposed)"] --> TLC{"TLC consensus"} --> M["Merge PR"] --> ADR["Decision record"] --> B["Update binding status"]
subgraph Legend
direction LR
_term(["Terminator"]) ~~~ _proc["Process"] ~~~ _dec{"Decision"}
end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Host ADRs in selenium.dev (website repo)
  • ➕ Immediate public discoverability and site navigation/search integration
  • ➕ Keeps governance/process docs near other public-facing documentation
  • ➖ Weakens the “merge equals acceptance” workflow tied to core repo reviews
  • ➖ Harder to keep contributor-targeted process close to where changes are made
2. Use GitHub Discussions/issues as the canonical decision record
  • ➕ Native threading and visibility; easy to reference and participate
  • ➕ No need to maintain a file format/template
  • ➖ Harder to keep a concise, immutable, durable summary of the final decision
  • ➖ More risk of re-litigating settled questions across multiple threads
3. Adopt MADR/Nygard format verbatim (no binding-status table)
  • ➕ Maximum familiarity and portability to other ADR tooling
  • ➕ Less bespoke structure to maintain
  • ➖ Doesn’t directly address Selenium’s multi-binding convergence tracking needs
  • ➖ Status per binding would likely drift into external trackers or PR comments

Recommendation: The PR’s approach (ADRs in-repo, merge-as-acceptance, and a per-binding status table) is the best fit for Selenium’s cross-binding governance: it keeps the canonical record in the review workflow contributors already use, while explicitly tracking convergence across languages. The main thing to validate in review is whether the approval/consensus wording matches current TLC expectations.

Grey Divider

File Changes

Documentation (2)
0000-template.mdAdd ADR template with binding-status table+56/-0

Add ADR template with binding-status table

• Introduces a numbered decision record template based on common ADR formats. Includes required sections (Context, Decision, Considered options, Consequences) and adds a dedicated per-binding status table to track convergence across Selenium bindings.

docs/decisions/0000-template.md


README.mdDocument ADR scope, workflow, and TLC approval rules+71/-0

Document ADR scope, workflow, and TLC approval rules

• Defines what qualifies for a cross-binding decision record and what does not. Specifies the end-to-end process (propose via PR, discuss in PR/TLC, merge as acceptance/rejection, and binding implementation tracking) plus approval/immutability and numbering rules.

docs/decisions/README.md


Grey Divider

Qodo Logo

Comment threaddocs/decisions/README.md
Comment threaddocs/decisions/README.md
@qodo-code-review

qodo-code-reviewBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

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

@AutomatedTesterAutomatedTester added A-needs decision TLC needs to discuss and agree and removed A-needs decision TLC needs to discuss and agree labels Jun 15, 2026
@titusfortner
titusfortner merged commit 719cd30 into trunkJun 18, 2026
27 checks passed
@titusfortner
titusfortner deleted the adr branch June 18, 2026 14:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@titusfortner@AutomatedTester@diemol
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[docs] add design decision record process and template - #17665

Merged
titusfortner merged 1 commit into
trunkfrom
adr
Jun 18, 2026
Merged

[docs] add design decision record process and template#17665
titusfortner merged 1 commit into
trunkfrom
adr

Conversation

@titusfortner

@titusfortnertitusfortner commented Jun 10, 2026

Copy link
Copy Markdown
Member

💥 What does this PR do?

Adds docs/decisions/ — a lightweight process for recording design decisions that apply across bindings (API shape, cross-binding semantics, deprecation commitments), plus the template for writing one. Decisions are proposed as PRs, discussed on the PR thread and at TLC meetings, and accepted by TLC consensus; the merged file is the canonical record, so settled questions get answered with a link instead of being re-litigated.

🔧 Implementation Notes

  • Format is based on MADR/Nygard ADRs with one Selenium-specific addition: a per-binding status table so convergence across the five bindings is tracked in the record itself.
  • These live in trunk rather than the website repo because the audience is contributors and the merge-is-acceptance process depends on the code-review flow. They can be rendered to selenium.dev later without moving the source of truth.

🤖 AI assistance

  • AI assisted (complete below)
    • Tool(s): Claude Code
    • What was generated: Initial drafts of the README and template, revised through discussion and review
    • I reviewed all AI output and can explain the change

💡 Additional Considerations

  • This PR follows the process it introduces: feedback is encouraged from all contributors; it merges by TLC consensus — a majority of TLC members responding with no unresolved objections, after at least one week open and discussion at a TLC meeting — with the Selenium Project Lead performing the merge. Merging adopts the process.

🔄 Types of changes

  • Documentation (contributor process)

@qodo-code-review

qodo-code-reviewBot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (1)📘 Rule violations (0)

Grey Divider


Remediation recommended

1. Filename convention mismatch 🐞 Bug⚙ Maintainability
Description
The ADR template’s supersedence example points to NNNN-title.md, but the README standardizes
decision filenames as NNNN-short-title.md, creating conflicting guidance that can lead to
inconsistent ADR filenames/links when contributors copy the template verbatim.
Code

docs/decisions/0000-template.md[6]

+- Status: Proposed <!-- Proposed | Accepted | Rejected | Superseded by [NNNN](NNNN-title.md) -->
Evidence
The README defines the canonical ADR filename format as NNNN-short-title.md, while the template’s
status-line example uses a different filename (NNNN-title.md), so the two new docs conflict on how
supersedence links should be written.

docs/decisions/README.md[30-32]
docs/decisions/0000-template.md[6-6]
docs/decisions/README.md[65-67]

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 ADR template and README disagree on the expected decision filename pattern for supersedence links (`NNNN-title.md` vs `NNNN-short-title.md`). This can cause inconsistent file naming and incorrect/inconsistent links across ADRs.
## Issue Context
- README instructs authors to create ADRs as `NNNN-short-title.md`.
- Template’s status-line comment suggests `Superseded by [NNNN](NNNN-title.md)`.
## Fix Focus Areas
- docs/decisions/0000-template.md[6-6]
- docs/decisions/README.md[30-32]
- docs/decisions/README.md[65-67]
## Suggested fix
- Update the template’s supersedence example to use `NNNN-short-title.md` (or a neutral placeholder matching the README’s convention).
- Update the README’s `Superseded by [NNNN](...)` example to show the same filename pattern explicitly (e.g., `Superseded by [NNNN](NNNN-short-title.md)`).

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


Grey Divider

Previous review results

Review updated until commit 9288155

Results up to commit 9554f29


🐞 Bugs (1)📘 Rule violations (0)📎 Requirement gaps (0)🎨 UX issues (0)🔗 Cross-repo conflicts (0)


Remediation recommended
1. Filename convention mismatch 🐞 Bug⚙ Maintainability
Description
The ADR template’s supersedence example points to NNNN-title.md, but the README standardizes
decision filenames as NNNN-short-title.md, creating conflicting guidance that can lead to
inconsistent ADR filenames/links when contributors copy the template verbatim.
Code

docs/decisions/0000-template.md[6]

+- Status: Proposed <!-- Proposed | Accepted | Rejected | Superseded by [NNNN](NNNN-title.md) -->
Evidence
The README defines the canonical ADR filename format as NNNN-short-title.md, while the template’s
status-line example uses a different filename (NNNN-title.md), so the two new docs conflict on how
supersedence links should be written.

docs/decisions/README.md[30-32]
docs/decisions/0000-template.md[6-6]
docs/decisions/README.md[65-67]

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 ADR template and README disagree on the expected decision filename pattern for supersedence links (`NNNN-title.md` vs `NNNN-short-title.md`). This can cause inconsistent file naming and incorrect/inconsistent links across ADRs.
## Issue Context
- README instructs authors to create ADRs as `NNNN-short-title.md`.
- Template’s status-line comment suggests `Superseded by [NNNN](NNNN-title.md)`.
## Fix Focus Areas
- docs/decisions/0000-template.md[6-6]
- docs/decisions/README.md[30-32]
- docs/decisions/README.md[65-67]
## Suggested fix
- Update the template’s supersedence example to use `NNNN-short-title.md` (or a neutral placeholder matching the README’s convention).
- Update the README’s `Superseded by [NNNN](...)` example to show the same filename pattern explicitly (e.g., `Superseded by [NNNN](NNNN-short-title.md)`).

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


Qodo Logo

@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Add ADR process and template under docs/decisions
📝 Documentation🕐 10-20 Minutes

Grey Divider

Walkthroughs

Description
• Introduce a Design Decision Record (ADR) log for cross-binding Selenium decisions
• Document proposal/approval workflow (PR discussion + TLC consensus; merge equals acceptance)
• Provide a reusable ADR template including per-binding convergence status tracking
Diagram
flowchart TD
C(["Contributor"]) --> T["Copy template"] --> PR["Open PR (Proposed)"] --> TLC{"TLC consensus"} --> M["Merge PR"] --> ADR["Decision record"] --> B["Update binding status"]
subgraph Legend
direction LR
_term(["Terminator"]) ~~~ _proc["Process"] ~~~ _dec{"Decision"}
end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Host ADRs in selenium.dev (website repo)
  • ➕ Immediate public discoverability and site navigation/search integration
  • ➕ Keeps governance/process docs near other public-facing documentation
  • ➖ Weakens the “merge equals acceptance” workflow tied to core repo reviews
  • ➖ Harder to keep contributor-targeted process close to where changes are made
2. Use GitHub Discussions/issues as the canonical decision record
  • ➕ Native threading and visibility; easy to reference and participate
  • ➕ No need to maintain a file format/template
  • ➖ Harder to keep a concise, immutable, durable summary of the final decision
  • ➖ More risk of re-litigating settled questions across multiple threads
3. Adopt MADR/Nygard format verbatim (no binding-status table)
  • ➕ Maximum familiarity and portability to other ADR tooling
  • ➕ Less bespoke structure to maintain
  • ➖ Doesn’t directly address Selenium’s multi-binding convergence tracking needs
  • ➖ Status per binding would likely drift into external trackers or PR comments

Recommendation: The PR’s approach (ADRs in-repo, merge-as-acceptance, and a per-binding status table) is the best fit for Selenium’s cross-binding governance: it keeps the canonical record in the review workflow contributors already use, while explicitly tracking convergence across languages. The main thing to validate in review is whether the approval/consensus wording matches current TLC expectations.

Grey Divider

File Changes

Documentation (2)
0000-template.mdAdd ADR template with binding-status table+56/-0

Add ADR template with binding-status table

• Introduces a numbered decision record template based on common ADR formats. Includes required sections (Context, Decision, Considered options, Consequences) and adds a dedicated per-binding status table to track convergence across Selenium bindings.

docs/decisions/0000-template.md


README.mdDocument ADR scope, workflow, and TLC approval rules+71/-0

Document ADR scope, workflow, and TLC approval rules

• Defines what qualifies for a cross-binding decision record and what does not. Specifies the end-to-end process (propose via PR, discuss in PR/TLC, merge as acceptance/rejection, and binding implementation tracking) plus approval/immutability and numbering rules.

docs/decisions/README.md


Grey Divider

Qodo Logo

Comment threaddocs/decisions/README.md
Comment threaddocs/decisions/README.md
@qodo-code-review

qodo-code-reviewBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

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

@AutomatedTesterAutomatedTester added A-needs decision TLC needs to discuss and agree and removed A-needs decision TLC needs to discuss and agree labels Jun 15, 2026
@titusfortner
titusfortner merged commit 719cd30 into trunkJun 18, 2026
27 checks passed
@titusfortner
titusfortner deleted the adr branch June 18, 2026 14:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@titusfortner@AutomatedTester@diemol
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[docs] add design decision record process and template - #17665

Merged
titusfortner merged 1 commit into
trunkfrom
adr
Jun 18, 2026
Merged

[docs] add design decision record process and template#17665
titusfortner merged 1 commit into
trunkfrom
adr

Conversation

@titusfortner

@titusfortnertitusfortner commented Jun 10, 2026

Copy link
Copy Markdown
Member

💥 What does this PR do?

Adds docs/decisions/ — a lightweight process for recording design decisions that apply across bindings (API shape, cross-binding semantics, deprecation commitments), plus the template for writing one. Decisions are proposed as PRs, discussed on the PR thread and at TLC meetings, and accepted by TLC consensus; the merged file is the canonical record, so settled questions get answered with a link instead of being re-litigated.

🔧 Implementation Notes

  • Format is based on MADR/Nygard ADRs with one Selenium-specific addition: a per-binding status table so convergence across the five bindings is tracked in the record itself.
  • These live in trunk rather than the website repo because the audience is contributors and the merge-is-acceptance process depends on the code-review flow. They can be rendered to selenium.dev later without moving the source of truth.

🤖 AI assistance

  • AI assisted (complete below)
    • Tool(s): Claude Code
    • What was generated: Initial drafts of the README and template, revised through discussion and review
    • I reviewed all AI output and can explain the change

💡 Additional Considerations

  • This PR follows the process it introduces: feedback is encouraged from all contributors; it merges by TLC consensus — a majority of TLC members responding with no unresolved objections, after at least one week open and discussion at a TLC meeting — with the Selenium Project Lead performing the merge. Merging adopts the process.

🔄 Types of changes

  • Documentation (contributor process)

@qodo-code-review

qodo-code-reviewBot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (1)📘 Rule violations (0)

Grey Divider


Remediation recommended

1. Filename convention mismatch 🐞 Bug⚙ Maintainability
Description
The ADR template’s supersedence example points to NNNN-title.md, but the README standardizes
decision filenames as NNNN-short-title.md, creating conflicting guidance that can lead to
inconsistent ADR filenames/links when contributors copy the template verbatim.
Code

docs/decisions/0000-template.md[6]

+- Status: Proposed <!-- Proposed | Accepted | Rejected | Superseded by [NNNN](NNNN-title.md) -->
Evidence
The README defines the canonical ADR filename format as NNNN-short-title.md, while the template’s
status-line example uses a different filename (NNNN-title.md), so the two new docs conflict on how
supersedence links should be written.

docs/decisions/README.md[30-32]
docs/decisions/0000-template.md[6-6]
docs/decisions/README.md[65-67]

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 ADR template and README disagree on the expected decision filename pattern for supersedence links (`NNNN-title.md` vs `NNNN-short-title.md`). This can cause inconsistent file naming and incorrect/inconsistent links across ADRs.
## Issue Context
- README instructs authors to create ADRs as `NNNN-short-title.md`.
- Template’s status-line comment suggests `Superseded by [NNNN](NNNN-title.md)`.
## Fix Focus Areas
- docs/decisions/0000-template.md[6-6]
- docs/decisions/README.md[30-32]
- docs/decisions/README.md[65-67]
## Suggested fix
- Update the template’s supersedence example to use `NNNN-short-title.md` (or a neutral placeholder matching the README’s convention).
- Update the README’s `Superseded by [NNNN](...)` example to show the same filename pattern explicitly (e.g., `Superseded by [NNNN](NNNN-short-title.md)`).

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


Grey Divider

Previous review results

Review updated until commit 9288155

Results up to commit 9554f29


🐞 Bugs (1)📘 Rule violations (0)📎 Requirement gaps (0)🎨 UX issues (0)🔗 Cross-repo conflicts (0)


Remediation recommended
1. Filename convention mismatch 🐞 Bug⚙ Maintainability
Description
The ADR template’s supersedence example points to NNNN-title.md, but the README standardizes
decision filenames as NNNN-short-title.md, creating conflicting guidance that can lead to
inconsistent ADR filenames/links when contributors copy the template verbatim.
Code

docs/decisions/0000-template.md[6]

+- Status: Proposed <!-- Proposed | Accepted | Rejected | Superseded by [NNNN](NNNN-title.md) -->
Evidence
The README defines the canonical ADR filename format as NNNN-short-title.md, while the template’s
status-line example uses a different filename (NNNN-title.md), so the two new docs conflict on how
supersedence links should be written.

docs/decisions/README.md[30-32]
docs/decisions/0000-template.md[6-6]
docs/decisions/README.md[65-67]

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 ADR template and README disagree on the expected decision filename pattern for supersedence links (`NNNN-title.md` vs `NNNN-short-title.md`). This can cause inconsistent file naming and incorrect/inconsistent links across ADRs.
## Issue Context
- README instructs authors to create ADRs as `NNNN-short-title.md`.
- Template’s status-line comment suggests `Superseded by [NNNN](NNNN-title.md)`.
## Fix Focus Areas
- docs/decisions/0000-template.md[6-6]
- docs/decisions/README.md[30-32]
- docs/decisions/README.md[65-67]
## Suggested fix
- Update the template’s supersedence example to use `NNNN-short-title.md` (or a neutral placeholder matching the README’s convention).
- Update the README’s `Superseded by [NNNN](...)` example to show the same filename pattern explicitly (e.g., `Superseded by [NNNN](NNNN-short-title.md)`).

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


Qodo Logo

@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Add ADR process and template under docs/decisions
📝 Documentation🕐 10-20 Minutes

Grey Divider

Walkthroughs

Description
• Introduce a Design Decision Record (ADR) log for cross-binding Selenium decisions
• Document proposal/approval workflow (PR discussion + TLC consensus; merge equals acceptance)
• Provide a reusable ADR template including per-binding convergence status tracking
Diagram
flowchart TD
C(["Contributor"]) --> T["Copy template"] --> PR["Open PR (Proposed)"] --> TLC{"TLC consensus"} --> M["Merge PR"] --> ADR["Decision record"] --> B["Update binding status"]
subgraph Legend
direction LR
_term(["Terminator"]) ~~~ _proc["Process"] ~~~ _dec{"Decision"}
end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Host ADRs in selenium.dev (website repo)
  • ➕ Immediate public discoverability and site navigation/search integration
  • ➕ Keeps governance/process docs near other public-facing documentation
  • ➖ Weakens the “merge equals acceptance” workflow tied to core repo reviews
  • ➖ Harder to keep contributor-targeted process close to where changes are made
2. Use GitHub Discussions/issues as the canonical decision record
  • ➕ Native threading and visibility; easy to reference and participate
  • ➕ No need to maintain a file format/template
  • ➖ Harder to keep a concise, immutable, durable summary of the final decision
  • ➖ More risk of re-litigating settled questions across multiple threads
3. Adopt MADR/Nygard format verbatim (no binding-status table)
  • ➕ Maximum familiarity and portability to other ADR tooling
  • ➕ Less bespoke structure to maintain
  • ➖ Doesn’t directly address Selenium’s multi-binding convergence tracking needs
  • ➖ Status per binding would likely drift into external trackers or PR comments

Recommendation: The PR’s approach (ADRs in-repo, merge-as-acceptance, and a per-binding status table) is the best fit for Selenium’s cross-binding governance: it keeps the canonical record in the review workflow contributors already use, while explicitly tracking convergence across languages. The main thing to validate in review is whether the approval/consensus wording matches current TLC expectations.

Grey Divider

File Changes

Documentation (2)
0000-template.mdAdd ADR template with binding-status table+56/-0

Add ADR template with binding-status table

• Introduces a numbered decision record template based on common ADR formats. Includes required sections (Context, Decision, Considered options, Consequences) and adds a dedicated per-binding status table to track convergence across Selenium bindings.

docs/decisions/0000-template.md


README.mdDocument ADR scope, workflow, and TLC approval rules+71/-0

Document ADR scope, workflow, and TLC approval rules

• Defines what qualifies for a cross-binding decision record and what does not. Specifies the end-to-end process (propose via PR, discuss in PR/TLC, merge as acceptance/rejection, and binding implementation tracking) plus approval/immutability and numbering rules.

docs/decisions/README.md


Grey Divider

Qodo Logo

Comment threaddocs/decisions/README.md
Comment threaddocs/decisions/README.md
@qodo-code-review

qodo-code-reviewBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

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

@AutomatedTesterAutomatedTester added A-needs decision TLC needs to discuss and agree and removed A-needs decision TLC needs to discuss and agree labels Jun 15, 2026
@titusfortner
titusfortner merged commit 719cd30 into trunkJun 18, 2026
27 checks passed
@titusfortner
titusfortner deleted the adr branch June 18, 2026 14:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@titusfortner@AutomatedTester@diemol
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[docs] add design decision record process and template - #17665

Merged
titusfortner merged 1 commit into
trunkfrom
adr
Jun 18, 2026
Merged

[docs] add design decision record process and template#17665
titusfortner merged 1 commit into
trunkfrom
adr

Conversation

@titusfortner

@titusfortnertitusfortner commented Jun 10, 2026

Copy link
Copy Markdown
Member

💥 What does this PR do?

Adds docs/decisions/ — a lightweight process for recording design decisions that apply across bindings (API shape, cross-binding semantics, deprecation commitments), plus the template for writing one. Decisions are proposed as PRs, discussed on the PR thread and at TLC meetings, and accepted by TLC consensus; the merged file is the canonical record, so settled questions get answered with a link instead of being re-litigated.

🔧 Implementation Notes

  • Format is based on MADR/Nygard ADRs with one Selenium-specific addition: a per-binding status table so convergence across the five bindings is tracked in the record itself.
  • These live in trunk rather than the website repo because the audience is contributors and the merge-is-acceptance process depends on the code-review flow. They can be rendered to selenium.dev later without moving the source of truth.

🤖 AI assistance

  • AI assisted (complete below)
    • Tool(s): Claude Code
    • What was generated: Initial drafts of the README and template, revised through discussion and review
    • I reviewed all AI output and can explain the change

💡 Additional Considerations

  • This PR follows the process it introduces: feedback is encouraged from all contributors; it merges by TLC consensus — a majority of TLC members responding with no unresolved objections, after at least one week open and discussion at a TLC meeting — with the Selenium Project Lead performing the merge. Merging adopts the process.

🔄 Types of changes

  • Documentation (contributor process)

@qodo-code-review

qodo-code-reviewBot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (1)📘 Rule violations (0)

Grey Divider


Remediation recommended

1. Filename convention mismatch 🐞 Bug⚙ Maintainability
Description
The ADR template’s supersedence example points to NNNN-title.md, but the README standardizes
decision filenames as NNNN-short-title.md, creating conflicting guidance that can lead to
inconsistent ADR filenames/links when contributors copy the template verbatim.
Code

docs/decisions/0000-template.md[6]

+- Status: Proposed <!-- Proposed | Accepted | Rejected | Superseded by [NNNN](NNNN-title.md) -->
Evidence
The README defines the canonical ADR filename format as NNNN-short-title.md, while the template’s
status-line example uses a different filename (NNNN-title.md), so the two new docs conflict on how
supersedence links should be written.

docs/decisions/README.md[30-32]
docs/decisions/0000-template.md[6-6]
docs/decisions/README.md[65-67]

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 ADR template and README disagree on the expected decision filename pattern for supersedence links (`NNNN-title.md` vs `NNNN-short-title.md`). This can cause inconsistent file naming and incorrect/inconsistent links across ADRs.
## Issue Context
- README instructs authors to create ADRs as `NNNN-short-title.md`.
- Template’s status-line comment suggests `Superseded by [NNNN](NNNN-title.md)`.
## Fix Focus Areas
- docs/decisions/0000-template.md[6-6]
- docs/decisions/README.md[30-32]
- docs/decisions/README.md[65-67]
## Suggested fix
- Update the template’s supersedence example to use `NNNN-short-title.md` (or a neutral placeholder matching the README’s convention).
- Update the README’s `Superseded by [NNNN](...)` example to show the same filename pattern explicitly (e.g., `Superseded by [NNNN](NNNN-short-title.md)`).

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


Grey Divider

Previous review results

Review updated until commit 9288155

Results up to commit 9554f29


🐞 Bugs (1)📘 Rule violations (0)📎 Requirement gaps (0)🎨 UX issues (0)🔗 Cross-repo conflicts (0)


Remediation recommended
1. Filename convention mismatch 🐞 Bug⚙ Maintainability
Description
The ADR template’s supersedence example points to NNNN-title.md, but the README standardizes
decision filenames as NNNN-short-title.md, creating conflicting guidance that can lead to
inconsistent ADR filenames/links when contributors copy the template verbatim.
Code

docs/decisions/0000-template.md[6]

+- Status: Proposed <!-- Proposed | Accepted | Rejected | Superseded by [NNNN](NNNN-title.md) -->
Evidence
The README defines the canonical ADR filename format as NNNN-short-title.md, while the template’s
status-line example uses a different filename (NNNN-title.md), so the two new docs conflict on how
supersedence links should be written.

docs/decisions/README.md[30-32]
docs/decisions/0000-template.md[6-6]
docs/decisions/README.md[65-67]

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 ADR template and README disagree on the expected decision filename pattern for supersedence links (`NNNN-title.md` vs `NNNN-short-title.md`). This can cause inconsistent file naming and incorrect/inconsistent links across ADRs.
## Issue Context
- README instructs authors to create ADRs as `NNNN-short-title.md`.
- Template’s status-line comment suggests `Superseded by [NNNN](NNNN-title.md)`.
## Fix Focus Areas
- docs/decisions/0000-template.md[6-6]
- docs/decisions/README.md[30-32]
- docs/decisions/README.md[65-67]
## Suggested fix
- Update the template’s supersedence example to use `NNNN-short-title.md` (or a neutral placeholder matching the README’s convention).
- Update the README’s `Superseded by [NNNN](...)` example to show the same filename pattern explicitly (e.g., `Superseded by [NNNN](NNNN-short-title.md)`).

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


Qodo Logo

@qodo-code-review

Copy link
Copy Markdown
Contributor

PR Summary by Qodo

Add ADR process and template under docs/decisions
📝 Documentation🕐 10-20 Minutes

Grey Divider

Walkthroughs

Description
• Introduce a Design Decision Record (ADR) log for cross-binding Selenium decisions
• Document proposal/approval workflow (PR discussion + TLC consensus; merge equals acceptance)
• Provide a reusable ADR template including per-binding convergence status tracking
Diagram
flowchart TD
C(["Contributor"]) --> T["Copy template"] --> PR["Open PR (Proposed)"] --> TLC{"TLC consensus"} --> M["Merge PR"] --> ADR["Decision record"] --> B["Update binding status"]
subgraph Legend
direction LR
_term(["Terminator"]) ~~~ _proc["Process"] ~~~ _dec{"Decision"}
end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Host ADRs in selenium.dev (website repo)
  • ➕ Immediate public discoverability and site navigation/search integration
  • ➕ Keeps governance/process docs near other public-facing documentation
  • ➖ Weakens the “merge equals acceptance” workflow tied to core repo reviews
  • ➖ Harder to keep contributor-targeted process close to where changes are made
2. Use GitHub Discussions/issues as the canonical decision record
  • ➕ Native threading and visibility; easy to reference and participate
  • ➕ No need to maintain a file format/template
  • ➖ Harder to keep a concise, immutable, durable summary of the final decision
  • ➖ More risk of re-litigating settled questions across multiple threads
3. Adopt MADR/Nygard format verbatim (no binding-status table)
  • ➕ Maximum familiarity and portability to other ADR tooling
  • ➕ Less bespoke structure to maintain
  • ➖ Doesn’t directly address Selenium’s multi-binding convergence tracking needs
  • ➖ Status per binding would likely drift into external trackers or PR comments

Recommendation: The PR’s approach (ADRs in-repo, merge-as-acceptance, and a per-binding status table) is the best fit for Selenium’s cross-binding governance: it keeps the canonical record in the review workflow contributors already use, while explicitly tracking convergence across languages. The main thing to validate in review is whether the approval/consensus wording matches current TLC expectations.

Grey Divider

File Changes

Documentation (2)
0000-template.mdAdd ADR template with binding-status table+56/-0

Add ADR template with binding-status table

• Introduces a numbered decision record template based on common ADR formats. Includes required sections (Context, Decision, Considered options, Consequences) and adds a dedicated per-binding status table to track convergence across Selenium bindings.

docs/decisions/0000-template.md


README.mdDocument ADR scope, workflow, and TLC approval rules+71/-0

Document ADR scope, workflow, and TLC approval rules

• Defines what qualifies for a cross-binding decision record and what does not. Specifies the end-to-end process (propose via PR, discuss in PR/TLC, merge as acceptance/rejection, and binding implementation tracking) plus approval/immutability and numbering rules.

docs/decisions/README.md


Grey Divider

Qodo Logo

Comment threaddocs/decisions/README.md
Comment threaddocs/decisions/README.md
@qodo-code-review

qodo-code-reviewBot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

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

@AutomatedTesterAutomatedTester added A-needs decision TLC needs to discuss and agree and removed A-needs decision TLC needs to discuss and agree labels Jun 15, 2026
@titusfortner
titusfortner merged commit 719cd30 into trunkJun 18, 2026
27 checks passed
@titusfortner
titusfortner deleted the adr branch June 18, 2026 14:08
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@titusfortner@AutomatedTester@diemol