Release notes
Overview of the release.
New features
Details about new features.
Bug fixes
Details about bug fixes.
separator Elements Without tabindexBug (ENG-1725): Access Engine test 1044 evaluates elements with the separator role (explicit role="separator" and the implicit role of <hr>). The rule incorrectly required value semantics (aria-valuenow, and typically aria-valuemin/aria-valuemax) on every separator. Plain, non-focusable separators were flagged for "missing aria-valuenow" even though they are purely static dividers — a false positive.
Impact: Practically every <hr> and every decorative role="separator" divider on a page got flagged, drowning real issues in noise.
tabindex is present, i.e. a "splitter"/draggable divider) behaves like a slider widget and is required to expose aria-valuenow. Per ARIA 1.2/1.3 that is the only mandatory value attribute — aria-valuemin (defaults to 0) and aria-valuemax (defaults to 100) are optional, and Access Engine Test 1044 relies on those spec defaults, so it does not require them.tabindex, an empty tabindex, or a negative tabindex) is a static/decorative divider, is out of scope for the test, and requires none of those attributes.aria-valuenow is required.<hr> dividers between sections of content (non-focusable — needs nothing)role="separator" dividing groups of items in a menu (non-focusable — needs nothing)The canonical/companion engine fixture for Access Engine Test 1044 is aria-values.html ("ARIA Values Examples - Test 1044"). This page provides additional manual scenarios not covered there — plain <hr> dividers, hidden / role="presentation" separators, and real-world splitters and menus. Note: after ENG-1725 a focusable separator (role="separator" with a non-negative tabindex) that has aria-valuenow but is missing aria-valuemin or aria-valuemax is a PASS — the engine no longer flags missing bounds. The aria-values.html cases that still treat missing aria-valuemin/aria-valuemax as a FAIL (ids fail-1044-2, fail-1044-3) document the pre-ENG-1725 behavior and need a separate follow-up to align them with this fix.
Note — different rule: This is a different rule from the monitoring fixture test044.inc, which validates the roles permitted on <hr>, not separator value semantics. Do not conflate the two.
tabindex — present, non-empty, and non-negative (e.g. tabindex="0"); separators with no tabindex, an empty tabindex, or a negative one fall out of scope. (2) For the in-scope focusable separators, only aria-valuenow is required (per ARIA 1.2/1.3); aria-valuemin/aria-valuemax are no longer required because the engine relies on their spec defaults of 0/100.
applicable = role==="separator" && tabindex !== "" && Number(tabindex) >= 0;
fail = applicable && !separator.hasAttribute("aria-valuenow");
[tabindex]:not([tabindex=""]):not([tabindex^="-"]) applied to two clauses — explicit [data-ae_ar="separator"] (i.e. role="separator") and implicit-role hr[data-ae_ar="null"] (an <hr> with no overriding explicit role); failure adds :not([aria-valuenow]) to each clause. The <hr> clause was added in ENG-1725 so focusable <hr> separators are covered (the engine derives data-ae_ar only from an explicit role attribute, so a bare <hr> has data-ae_ar="null"). Non-focusable <hr> and role="separator" dividers are out of scope and are no longer flagged.
display:none) — id="na-hidden-sep"A horizontal rule that is not rendered.
Element is not rendered, so it is excluded from evaluation regardless of focusability or value attributes. Should not be flagged.
id="na-not-separator"No separator role (explicit or implicit). Test 1044 does not apply. Should not be flagged.
id="na-role-overridden"An <hr> whose implicit separator role is removed via role="presentation".
With role="presentation" the element no longer maps to the separator role, so test 1044 does not evaluate it. Should not be flagged.
Note on outcomes: "PASS" here means correctly not flagged after the fix. Two distinct engine outcomes land in this bucket: the focusable splitters that expose aria-valuenow are genuine pass results (applicable and satisfy the rule), while the non-focusable separators (plain <hr>, role="separator" dividers, menu separators) fall outside applicability and the engine returns na for them — they are grouped here because they are the core false-positive targets of ENG-1725.
<hr> divider — id="pass-plain-hr"Section one of the content.
Section two of the content.
Implicit separator role, no tabindex → non-focusable static divider. Value semantics NOT required. Should not be flagged (post-fix).
<div role="separator"> with NO tabindex and no value attrs — id="pass-div-sep"Above the divider.
Below the divider.
Explicit separator, non-focusable (no tabindex), no value attributes. As a static divider it needs none. Should not be flagged (post-fix).
<li role="separator"> without tabindex — id="pass-menu-sep"Separator used to divide menu groups, no tabindex → non-focusable. No value semantics required. Should not be flagged (post-fix).
id="pass-focusable-splitter"Focusable separator (tabindex="0") acting as a splitter, with aria-valuenow, aria-valuemin, aria-valuemax and aria-orientation. Fully satisfies the requirement. Should not be flagged.
id="pass-horizontal-splitter"Focusable horizontal splitter with complete value semantics and explicit orientation. Should not be flagged.
aria-valuenow only (no min/max) — id="pass-focusable-no-minmax"Focusable separator that exposes aria-valuenow but omits aria-valuemin/aria-valuemax. Per ARIA 1.2/1.3 only aria-valuenow is mandatory; the bounds default to 0/100, and post-ENG-1725 the engine relies on those defaults. Should not be flagged. (Regression guard for the simplified aria-valuenow-only failure condition.)
<hr> dividers on one page — id="pass-multi-hr"Paragraph A.
Paragraph B.
Paragraph C.
Each <hr> is non-focusable. Pre-fix this is exactly the pattern that produced many false positives; post-fix none should be flagged.
aria-valuenow — id="fail-focusable-no-valuenow"Focusable separator (tabindex="0") behaves as a slider but has no aria-valuenow. The fix must keep flagging this. Should still be flagged.
id="fail-focusable-bare"Focusable separator (tabindex="0") with no value attributes at all — in particular no aria-valuenow. This is the worst case the rule is meant to catch. Should still be flagged.
<hr> (implicit separator) missing value semantics — id="fail-hr-focusable"Above the focusable rule.
Below the focusable rule.
An <hr> with tabindex="0" is a focusable separator and therefore subject to the value-semantics requirement. With none present, it should be still flagged. (Confirms the fix keys off focusability, not the tag.)
<hr> (the original false positive) — id="bug-plain-hr"Intro paragraph.
Following paragraph.
Pre-fix: flagged ❌ for "missing aria-valuenow" even though it is a non-focusable decorative divider. Post-fix: not flagged ✓ (no tabindex → value check skipped).
role="separator" divider — id="bug-div-sep"Content before.
Content after.
Pre-fix: flagged ❌ for missing aria-valuenow/value attributes. Post-fix: not flagged ✓ (non-focusable separator requires no value semantics).
id="bug-menu-sep"Pre-fix: flagged ❌ for missing value semantics. Post-fix: not flagged ✓ (non-focusable menu separator is a static divider).
id="rw-resizable-panes"Drag the purple handle (or focus it and use arrow keys) to resize.
Real splitter: focusable, with aria-valuenow/valuemin/valuemax and aria-orientation. Correctly satisfies test 1044. Should not be flagged.
<hr> dividers between sections — id="rw-article-dividers"Overview of the release.
Details about new features.
Details about bug fixes.
Decorative section dividers, none focusable. This is the most common real-world false-positive pattern. Post-fix none should be flagged.
role="separator" between groups — id="rw-menu-groups"Two non-focusable menu separators dividing item groups. No value semantics required. Should not be flagged.
id="rw-broken-splitter"A genuinely buggy draggable splitter: focusable but exposes no aria-valuenow (and no aria-orientation), so screen reader users get no position feedback. The engine flags it specifically for the missing aria-valuenow. Correctly still flagged after the fix.
End of manual test cases for ENG-1725. Summary: non-focusable separators (no tabindex) are out of scope and must not be flagged by test 1044; focusable separators (splitters with a non-negative tabindex) behave as sliders and must expose aria-valuenow — the only attribute the engine requires post-ENG-1725 (aria-valuemin/aria-valuemax default to 0/100 and are not required).