[ILM] A11y: Announce invalid field#260673
Merged
SoniaSanzV merged 5 commits intoelastic:mainfrom Apr 10, 2026
Merged
Conversation
Contributor
|
Pinging @elastic/kibana-management (Team:Kibana Management) |
…nnouncement#219056
…nnouncement#219056
…nnouncement#219056
…nnouncement#219056
Contributor
💚 Build Succeeded
Metrics [docs]Async chunks
History
cc @SoniaSanzV |
Contributor
|
Starting backport for target branches: 8.19, 9.2, 9.3 |
kibanamachine
pushed a commit
to kibanamachine/kibana
that referenced
this pull request
Apr 10, 2026
Closes elastic#219056 ## Summary - Fixes a screen reader gap on Index Lifecycle Policies → Edit policy where the Timing field showed a validation error visually, but NVDA would only announce a generic invalid state when the error was triggered via the units control. - Wires the Timing error message to both the min-age number input and its units select so the specific error text is announced when either control is focused while invalid. ### Test plan - Manual (Windows 11 Pro, Chrome 131, NVDA) - Stack Management → Index Lifecycle Policies → Edit policy - Navigate to the Delete phase, then to the Timing controls for “Move data into phase when” - Trigger an invalid state for Timing - Focus the number input - **Expected**: NVDA announces the specific validation error text (not only “invalid entry”) - Change the units select to a value that produces the same invalid state, then move focus away and back to the units select - **Expected**: NVDA announces the same specific validation error text for the invalid field - Automated ### Before/after notes - References: WCAG 2.2 SC 3.3.1 (Error Identification) https://www.w3.org/WAI/WCAG22/Understanding/error-identification.html - Before/after behavior - **Before**: Error text was visible below the Timing field, but NVDA did not announce it when the error was produced by interacting with the units control (only a generic “invalid entry”). - **After**: The specific Timing error text is programmatically associated to both Timing controls and is announced by NVDA when focusing either control while invalid. ### Evidence <img width="654" height="303" alt="Screenshot 2026-04-01 at 12 23 37" src="https://github.com/user-attachments/assets/45ec7310-8acc-476d-8f10-294885c816e0" /> (cherry picked from commit c2ef716)
kibanamachine
pushed a commit
to kibanamachine/kibana
that referenced
this pull request
Apr 10, 2026
Closes elastic#219056 ## Summary - Fixes a screen reader gap on Index Lifecycle Policies → Edit policy where the Timing field showed a validation error visually, but NVDA would only announce a generic invalid state when the error was triggered via the units control. - Wires the Timing error message to both the min-age number input and its units select so the specific error text is announced when either control is focused while invalid. ### Test plan - Manual (Windows 11 Pro, Chrome 131, NVDA) - Stack Management → Index Lifecycle Policies → Edit policy - Navigate to the Delete phase, then to the Timing controls for “Move data into phase when” - Trigger an invalid state for Timing - Focus the number input - **Expected**: NVDA announces the specific validation error text (not only “invalid entry”) - Change the units select to a value that produces the same invalid state, then move focus away and back to the units select - **Expected**: NVDA announces the same specific validation error text for the invalid field - Automated ### Before/after notes - References: WCAG 2.2 SC 3.3.1 (Error Identification) https://www.w3.org/WAI/WCAG22/Understanding/error-identification.html - Before/after behavior - **Before**: Error text was visible below the Timing field, but NVDA did not announce it when the error was produced by interacting with the units control (only a generic “invalid entry”). - **After**: The specific Timing error text is programmatically associated to both Timing controls and is announced by NVDA when focusing either control while invalid. ### Evidence <img width="654" height="303" alt="Screenshot 2026-04-01 at 12 23 37" src="https://github.com/user-attachments/assets/45ec7310-8acc-476d-8f10-294885c816e0" /> (cherry picked from commit c2ef716)
kibanamachine
pushed a commit
to kibanamachine/kibana
that referenced
this pull request
Apr 10, 2026
Closes elastic#219056 ## Summary - Fixes a screen reader gap on Index Lifecycle Policies → Edit policy where the Timing field showed a validation error visually, but NVDA would only announce a generic invalid state when the error was triggered via the units control. - Wires the Timing error message to both the min-age number input and its units select so the specific error text is announced when either control is focused while invalid. ### Test plan - Manual (Windows 11 Pro, Chrome 131, NVDA) - Stack Management → Index Lifecycle Policies → Edit policy - Navigate to the Delete phase, then to the Timing controls for “Move data into phase when” - Trigger an invalid state for Timing - Focus the number input - **Expected**: NVDA announces the specific validation error text (not only “invalid entry”) - Change the units select to a value that produces the same invalid state, then move focus away and back to the units select - **Expected**: NVDA announces the same specific validation error text for the invalid field - Automated ### Before/after notes - References: WCAG 2.2 SC 3.3.1 (Error Identification) https://www.w3.org/WAI/WCAG22/Understanding/error-identification.html - Before/after behavior - **Before**: Error text was visible below the Timing field, but NVDA did not announce it when the error was produced by interacting with the units control (only a generic “invalid entry”). - **After**: The specific Timing error text is programmatically associated to both Timing controls and is announced by NVDA when focusing either control while invalid. ### Evidence <img width="654" height="303" alt="Screenshot 2026-04-01 at 12 23 37" src="https://github.com/user-attachments/assets/45ec7310-8acc-476d-8f10-294885c816e0" /> (cherry picked from commit c2ef716)
Contributor
💚 All backports created successfully
Note: Successful backport PRs will be merged automatically after passing CI. Questions ?Please refer to the Backport tool documentation |
kibanamachine
added a commit
that referenced
this pull request
Apr 10, 2026
# Backport This will backport the following commits from `main` to `8.19`: - [[ILM] A11y: Announce invalid field (#260673)](#260673) <!--- Backport version: 9.6.6 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) <!--BACKPORT [{"author":{"name":"Sonia Sanz Vivas","email":"sonia.sanzvivas@elastic.co"},"sourceCommit":{"committedDate":"2026-04-10T07:48:10Z","message":"[ILM] A11y: Announce invalid field (#260673)\n\nCloses https://github.com/elastic/kibana/issues/219056\n\n## Summary\n- Fixes a screen reader gap on Index Lifecycle Policies → Edit policy\nwhere the Timing field showed a validation error visually, but NVDA\nwould only announce a generic invalid state when the error was triggered\nvia the units control.\n- Wires the Timing error message to both the min-age number input and\nits units select so the specific error text is announced when either\ncontrol is focused while invalid.\n\n### Test plan\n- Manual (Windows 11 Pro, Chrome 131, NVDA)\n - Stack Management → Index Lifecycle Policies → Edit policy\n- Navigate to the Delete phase, then to the Timing controls for “Move\ndata into phase when”\n - Trigger an invalid state for Timing\n - Focus the number input\n- **Expected**: NVDA announces the specific validation error text (not\nonly “invalid entry”)\n- Change the units select to a value that produces the same invalid\nstate, then move focus away and back to the units select\n- **Expected**: NVDA announces the same specific validation error text\nfor the invalid field\n- Automated\n\n### Before/after notes\n- References: WCAG 2.2 SC 3.3.1 (Error Identification)\nhttps://www.w3.org/WAI/WCAG22/Understanding/error-identification.html\n- Before/after behavior\n- **Before**: Error text was visible below the Timing field, but NVDA\ndid not announce it when the error was produced by interacting with the\nunits control (only a generic “invalid entry”).\n- **After**: The specific Timing error text is programmatically\nassociated to both Timing controls and is announced by NVDA when\nfocusing either control while invalid.\n\n### Evidence\n<img width=\"654\" height=\"303\" alt=\"Screenshot 2026-04-01 at 12 23 37\"\nsrc=\"https://github.com/user-attachments/assets/45ec7310-8acc-476d-8f10-294885c816e0\"\n/>","sha":"c2ef7162bd38774836f7109cbed66b422e7b10ac","branchLabelMapping":{"^v9.4.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:fix","Feature:ILM","Team:Kibana Management","backport:all-open","v9.4.0"],"title":"[ILM] A11y: Announce invalid field","number":260673,"url":"https://github.com/elastic/kibana/pull/260673","mergeCommit":{"message":"[ILM] A11y: Announce invalid field (#260673)\n\nCloses https://github.com/elastic/kibana/issues/219056\n\n## Summary\n- Fixes a screen reader gap on Index Lifecycle Policies → Edit policy\nwhere the Timing field showed a validation error visually, but NVDA\nwould only announce a generic invalid state when the error was triggered\nvia the units control.\n- Wires the Timing error message to both the min-age number input and\nits units select so the specific error text is announced when either\ncontrol is focused while invalid.\n\n### Test plan\n- Manual (Windows 11 Pro, Chrome 131, NVDA)\n - Stack Management → Index Lifecycle Policies → Edit policy\n- Navigate to the Delete phase, then to the Timing controls for “Move\ndata into phase when”\n - Trigger an invalid state for Timing\n - Focus the number input\n- **Expected**: NVDA announces the specific validation error text (not\nonly “invalid entry”)\n- Change the units select to a value that produces the same invalid\nstate, then move focus away and back to the units select\n- **Expected**: NVDA announces the same specific validation error text\nfor the invalid field\n- Automated\n\n### Before/after notes\n- References: WCAG 2.2 SC 3.3.1 (Error Identification)\nhttps://www.w3.org/WAI/WCAG22/Understanding/error-identification.html\n- Before/after behavior\n- **Before**: Error text was visible below the Timing field, but NVDA\ndid not announce it when the error was produced by interacting with the\nunits control (only a generic “invalid entry”).\n- **After**: The specific Timing error text is programmatically\nassociated to both Timing controls and is announced by NVDA when\nfocusing either control while invalid.\n\n### Evidence\n<img width=\"654\" height=\"303\" alt=\"Screenshot 2026-04-01 at 12 23 37\"\nsrc=\"https://github.com/user-attachments/assets/45ec7310-8acc-476d-8f10-294885c816e0\"\n/>","sha":"c2ef7162bd38774836f7109cbed66b422e7b10ac"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v9.4.0","branchLabelMappingKey":"^v9.4.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/260673","number":260673,"mergeCommit":{"message":"[ILM] A11y: Announce invalid field (#260673)\n\nCloses https://github.com/elastic/kibana/issues/219056\n\n## Summary\n- Fixes a screen reader gap on Index Lifecycle Policies → Edit policy\nwhere the Timing field showed a validation error visually, but NVDA\nwould only announce a generic invalid state when the error was triggered\nvia the units control.\n- Wires the Timing error message to both the min-age number input and\nits units select so the specific error text is announced when either\ncontrol is focused while invalid.\n\n### Test plan\n- Manual (Windows 11 Pro, Chrome 131, NVDA)\n - Stack Management → Index Lifecycle Policies → Edit policy\n- Navigate to the Delete phase, then to the Timing controls for “Move\ndata into phase when”\n - Trigger an invalid state for Timing\n - Focus the number input\n- **Expected**: NVDA announces the specific validation error text (not\nonly “invalid entry”)\n- Change the units select to a value that produces the same invalid\nstate, then move focus away and back to the units select\n- **Expected**: NVDA announces the same specific validation error text\nfor the invalid field\n- Automated\n\n### Before/after notes\n- References: WCAG 2.2 SC 3.3.1 (Error Identification)\nhttps://www.w3.org/WAI/WCAG22/Understanding/error-identification.html\n- Before/after behavior\n- **Before**: Error text was visible below the Timing field, but NVDA\ndid not announce it when the error was produced by interacting with the\nunits control (only a generic “invalid entry”).\n- **After**: The specific Timing error text is programmatically\nassociated to both Timing controls and is announced by NVDA when\nfocusing either control while invalid.\n\n### Evidence\n<img width=\"654\" height=\"303\" alt=\"Screenshot 2026-04-01 at 12 23 37\"\nsrc=\"https://github.com/user-attachments/assets/45ec7310-8acc-476d-8f10-294885c816e0\"\n/>","sha":"c2ef7162bd38774836f7109cbed66b422e7b10ac"}}]}] BACKPORT--> Co-authored-by: Sonia Sanz Vivas <sonia.sanzvivas@elastic.co>
kibanamachine
added a commit
that referenced
this pull request
Apr 10, 2026
# Backport This will backport the following commits from `main` to `9.3`: - [[ILM] A11y: Announce invalid field (#260673)](#260673) <!--- Backport version: 9.6.6 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) <!--BACKPORT [{"author":{"name":"Sonia Sanz Vivas","email":"sonia.sanzvivas@elastic.co"},"sourceCommit":{"committedDate":"2026-04-10T07:48:10Z","message":"[ILM] A11y: Announce invalid field (#260673)\n\nCloses https://github.com/elastic/kibana/issues/219056\n\n## Summary\n- Fixes a screen reader gap on Index Lifecycle Policies → Edit policy\nwhere the Timing field showed a validation error visually, but NVDA\nwould only announce a generic invalid state when the error was triggered\nvia the units control.\n- Wires the Timing error message to both the min-age number input and\nits units select so the specific error text is announced when either\ncontrol is focused while invalid.\n\n### Test plan\n- Manual (Windows 11 Pro, Chrome 131, NVDA)\n - Stack Management → Index Lifecycle Policies → Edit policy\n- Navigate to the Delete phase, then to the Timing controls for “Move\ndata into phase when”\n - Trigger an invalid state for Timing\n - Focus the number input\n- **Expected**: NVDA announces the specific validation error text (not\nonly “invalid entry”)\n- Change the units select to a value that produces the same invalid\nstate, then move focus away and back to the units select\n- **Expected**: NVDA announces the same specific validation error text\nfor the invalid field\n- Automated\n\n### Before/after notes\n- References: WCAG 2.2 SC 3.3.1 (Error Identification)\nhttps://www.w3.org/WAI/WCAG22/Understanding/error-identification.html\n- Before/after behavior\n- **Before**: Error text was visible below the Timing field, but NVDA\ndid not announce it when the error was produced by interacting with the\nunits control (only a generic “invalid entry”).\n- **After**: The specific Timing error text is programmatically\nassociated to both Timing controls and is announced by NVDA when\nfocusing either control while invalid.\n\n### Evidence\n<img width=\"654\" height=\"303\" alt=\"Screenshot 2026-04-01 at 12 23 37\"\nsrc=\"https://github.com/user-attachments/assets/45ec7310-8acc-476d-8f10-294885c816e0\"\n/>","sha":"c2ef7162bd38774836f7109cbed66b422e7b10ac","branchLabelMapping":{"^v9.4.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:fix","Feature:ILM","Team:Kibana Management","backport:all-open","v9.4.0"],"title":"[ILM] A11y: Announce invalid field","number":260673,"url":"https://github.com/elastic/kibana/pull/260673","mergeCommit":{"message":"[ILM] A11y: Announce invalid field (#260673)\n\nCloses https://github.com/elastic/kibana/issues/219056\n\n## Summary\n- Fixes a screen reader gap on Index Lifecycle Policies → Edit policy\nwhere the Timing field showed a validation error visually, but NVDA\nwould only announce a generic invalid state when the error was triggered\nvia the units control.\n- Wires the Timing error message to both the min-age number input and\nits units select so the specific error text is announced when either\ncontrol is focused while invalid.\n\n### Test plan\n- Manual (Windows 11 Pro, Chrome 131, NVDA)\n - Stack Management → Index Lifecycle Policies → Edit policy\n- Navigate to the Delete phase, then to the Timing controls for “Move\ndata into phase when”\n - Trigger an invalid state for Timing\n - Focus the number input\n- **Expected**: NVDA announces the specific validation error text (not\nonly “invalid entry”)\n- Change the units select to a value that produces the same invalid\nstate, then move focus away and back to the units select\n- **Expected**: NVDA announces the same specific validation error text\nfor the invalid field\n- Automated\n\n### Before/after notes\n- References: WCAG 2.2 SC 3.3.1 (Error Identification)\nhttps://www.w3.org/WAI/WCAG22/Understanding/error-identification.html\n- Before/after behavior\n- **Before**: Error text was visible below the Timing field, but NVDA\ndid not announce it when the error was produced by interacting with the\nunits control (only a generic “invalid entry”).\n- **After**: The specific Timing error text is programmatically\nassociated to both Timing controls and is announced by NVDA when\nfocusing either control while invalid.\n\n### Evidence\n<img width=\"654\" height=\"303\" alt=\"Screenshot 2026-04-01 at 12 23 37\"\nsrc=\"https://github.com/user-attachments/assets/45ec7310-8acc-476d-8f10-294885c816e0\"\n/>","sha":"c2ef7162bd38774836f7109cbed66b422e7b10ac"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v9.4.0","branchLabelMappingKey":"^v9.4.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/260673","number":260673,"mergeCommit":{"message":"[ILM] A11y: Announce invalid field (#260673)\n\nCloses https://github.com/elastic/kibana/issues/219056\n\n## Summary\n- Fixes a screen reader gap on Index Lifecycle Policies → Edit policy\nwhere the Timing field showed a validation error visually, but NVDA\nwould only announce a generic invalid state when the error was triggered\nvia the units control.\n- Wires the Timing error message to both the min-age number input and\nits units select so the specific error text is announced when either\ncontrol is focused while invalid.\n\n### Test plan\n- Manual (Windows 11 Pro, Chrome 131, NVDA)\n - Stack Management → Index Lifecycle Policies → Edit policy\n- Navigate to the Delete phase, then to the Timing controls for “Move\ndata into phase when”\n - Trigger an invalid state for Timing\n - Focus the number input\n- **Expected**: NVDA announces the specific validation error text (not\nonly “invalid entry”)\n- Change the units select to a value that produces the same invalid\nstate, then move focus away and back to the units select\n- **Expected**: NVDA announces the same specific validation error text\nfor the invalid field\n- Automated\n\n### Before/after notes\n- References: WCAG 2.2 SC 3.3.1 (Error Identification)\nhttps://www.w3.org/WAI/WCAG22/Understanding/error-identification.html\n- Before/after behavior\n- **Before**: Error text was visible below the Timing field, but NVDA\ndid not announce it when the error was produced by interacting with the\nunits control (only a generic “invalid entry”).\n- **After**: The specific Timing error text is programmatically\nassociated to both Timing controls and is announced by NVDA when\nfocusing either control while invalid.\n\n### Evidence\n<img width=\"654\" height=\"303\" alt=\"Screenshot 2026-04-01 at 12 23 37\"\nsrc=\"https://github.com/user-attachments/assets/45ec7310-8acc-476d-8f10-294885c816e0\"\n/>","sha":"c2ef7162bd38774836f7109cbed66b422e7b10ac"}}]}] BACKPORT--> Co-authored-by: Sonia Sanz Vivas <sonia.sanzvivas@elastic.co>
kibanamachine
added a commit
that referenced
this pull request
Apr 10, 2026
# Backport This will backport the following commits from `main` to `9.2`: - [[ILM] A11y: Announce invalid field (#260673)](#260673) <!--- Backport version: 9.6.6 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) <!--BACKPORT [{"author":{"name":"Sonia Sanz Vivas","email":"sonia.sanzvivas@elastic.co"},"sourceCommit":{"committedDate":"2026-04-10T07:48:10Z","message":"[ILM] A11y: Announce invalid field (#260673)\n\nCloses https://github.com/elastic/kibana/issues/219056\n\n## Summary\n- Fixes a screen reader gap on Index Lifecycle Policies → Edit policy\nwhere the Timing field showed a validation error visually, but NVDA\nwould only announce a generic invalid state when the error was triggered\nvia the units control.\n- Wires the Timing error message to both the min-age number input and\nits units select so the specific error text is announced when either\ncontrol is focused while invalid.\n\n### Test plan\n- Manual (Windows 11 Pro, Chrome 131, NVDA)\n - Stack Management → Index Lifecycle Policies → Edit policy\n- Navigate to the Delete phase, then to the Timing controls for “Move\ndata into phase when”\n - Trigger an invalid state for Timing\n - Focus the number input\n- **Expected**: NVDA announces the specific validation error text (not\nonly “invalid entry”)\n- Change the units select to a value that produces the same invalid\nstate, then move focus away and back to the units select\n- **Expected**: NVDA announces the same specific validation error text\nfor the invalid field\n- Automated\n\n### Before/after notes\n- References: WCAG 2.2 SC 3.3.1 (Error Identification)\nhttps://www.w3.org/WAI/WCAG22/Understanding/error-identification.html\n- Before/after behavior\n- **Before**: Error text was visible below the Timing field, but NVDA\ndid not announce it when the error was produced by interacting with the\nunits control (only a generic “invalid entry”).\n- **After**: The specific Timing error text is programmatically\nassociated to both Timing controls and is announced by NVDA when\nfocusing either control while invalid.\n\n### Evidence\n<img width=\"654\" height=\"303\" alt=\"Screenshot 2026-04-01 at 12 23 37\"\nsrc=\"https://github.com/user-attachments/assets/45ec7310-8acc-476d-8f10-294885c816e0\"\n/>","sha":"c2ef7162bd38774836f7109cbed66b422e7b10ac","branchLabelMapping":{"^v9.4.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:fix","Feature:ILM","Team:Kibana Management","backport:all-open","v9.4.0"],"title":"[ILM] A11y: Announce invalid field","number":260673,"url":"https://github.com/elastic/kibana/pull/260673","mergeCommit":{"message":"[ILM] A11y: Announce invalid field (#260673)\n\nCloses https://github.com/elastic/kibana/issues/219056\n\n## Summary\n- Fixes a screen reader gap on Index Lifecycle Policies → Edit policy\nwhere the Timing field showed a validation error visually, but NVDA\nwould only announce a generic invalid state when the error was triggered\nvia the units control.\n- Wires the Timing error message to both the min-age number input and\nits units select so the specific error text is announced when either\ncontrol is focused while invalid.\n\n### Test plan\n- Manual (Windows 11 Pro, Chrome 131, NVDA)\n - Stack Management → Index Lifecycle Policies → Edit policy\n- Navigate to the Delete phase, then to the Timing controls for “Move\ndata into phase when”\n - Trigger an invalid state for Timing\n - Focus the number input\n- **Expected**: NVDA announces the specific validation error text (not\nonly “invalid entry”)\n- Change the units select to a value that produces the same invalid\nstate, then move focus away and back to the units select\n- **Expected**: NVDA announces the same specific validation error text\nfor the invalid field\n- Automated\n\n### Before/after notes\n- References: WCAG 2.2 SC 3.3.1 (Error Identification)\nhttps://www.w3.org/WAI/WCAG22/Understanding/error-identification.html\n- Before/after behavior\n- **Before**: Error text was visible below the Timing field, but NVDA\ndid not announce it when the error was produced by interacting with the\nunits control (only a generic “invalid entry”).\n- **After**: The specific Timing error text is programmatically\nassociated to both Timing controls and is announced by NVDA when\nfocusing either control while invalid.\n\n### Evidence\n<img width=\"654\" height=\"303\" alt=\"Screenshot 2026-04-01 at 12 23 37\"\nsrc=\"https://github.com/user-attachments/assets/45ec7310-8acc-476d-8f10-294885c816e0\"\n/>","sha":"c2ef7162bd38774836f7109cbed66b422e7b10ac"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v9.4.0","branchLabelMappingKey":"^v9.4.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/260673","number":260673,"mergeCommit":{"message":"[ILM] A11y: Announce invalid field (#260673)\n\nCloses https://github.com/elastic/kibana/issues/219056\n\n## Summary\n- Fixes a screen reader gap on Index Lifecycle Policies → Edit policy\nwhere the Timing field showed a validation error visually, but NVDA\nwould only announce a generic invalid state when the error was triggered\nvia the units control.\n- Wires the Timing error message to both the min-age number input and\nits units select so the specific error text is announced when either\ncontrol is focused while invalid.\n\n### Test plan\n- Manual (Windows 11 Pro, Chrome 131, NVDA)\n - Stack Management → Index Lifecycle Policies → Edit policy\n- Navigate to the Delete phase, then to the Timing controls for “Move\ndata into phase when”\n - Trigger an invalid state for Timing\n - Focus the number input\n- **Expected**: NVDA announces the specific validation error text (not\nonly “invalid entry”)\n- Change the units select to a value that produces the same invalid\nstate, then move focus away and back to the units select\n- **Expected**: NVDA announces the same specific validation error text\nfor the invalid field\n- Automated\n\n### Before/after notes\n- References: WCAG 2.2 SC 3.3.1 (Error Identification)\nhttps://www.w3.org/WAI/WCAG22/Understanding/error-identification.html\n- Before/after behavior\n- **Before**: Error text was visible below the Timing field, but NVDA\ndid not announce it when the error was produced by interacting with the\nunits control (only a generic “invalid entry”).\n- **After**: The specific Timing error text is programmatically\nassociated to both Timing controls and is announced by NVDA when\nfocusing either control while invalid.\n\n### Evidence\n<img width=\"654\" height=\"303\" alt=\"Screenshot 2026-04-01 at 12 23 37\"\nsrc=\"https://github.com/user-attachments/assets/45ec7310-8acc-476d-8f10-294885c816e0\"\n/>","sha":"c2ef7162bd38774836f7109cbed66b422e7b10ac"}}]}] BACKPORT--> Co-authored-by: Sonia Sanz Vivas <sonia.sanzvivas@elastic.co>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #219056
Summary
Test plan
Before/after notes
Evidence