Secondary path: when starting from a rule id, jump to the canonical component guide that explains the pattern. Read shared_principles.md first; the manual-review column lists shapes the rule cannot resolve automatically.
| Rule id | Component guide | Manual review |
|---|---|---|
@elastic/eui/accessible-interactive-element |
components/focus_and_keyboard.md |
tabIndex only from {...props} or HOC; do not redesign roving tabindex. |
@elastic/eui/badge-accessibility-rules |
components/interactive_components.md |
Direct child of EuiFormRow (row supplies name); {...props} with unknown aria-*. |
@elastic/eui/callout-announce-on-mount |
components/callouts.md |
{...props} on EuiCallOut without explicit announceOnMount; always-mounted callout (rule should not fire). |
@elastic/eui/consistent-is-invalid-props |
components/form_layout.md |
Nested EuiFormRow (innermost pair first); child is {...fieldProps} — confirm isInvalid not already in spread. |
@elastic/eui/icon-accessibility-rules |
components/icons_and_tooltips.md |
{...iconProps} may already include a11y props. |
@elastic/eui/no-unnamed-interactive-element |
components/interactive_components.md |
Direct child of EuiFormRow (row supplies name); {...props} with unknown aria-*. |
@elastic/eui/no-unnamed-radio-group |
components/radio_groups.md |
{...groupProps} — verify name in spread before adding. |
@elastic/eui/prefer-eui-icon-tip |
components/icons_and_tooltips.md |
Not a single EuiIcon child; icon has onClick / unsupported props — skip or escalate. |
@elastic/eui/require-aria-label-for-modals |
components/overlays.md |
{...props} hides wiring; no visible title without UX change — escalate. |
@elastic/eui/require-table-caption |
components/data_tables.md |
tableCaption only via {...tableProps} — fix at source; no duplicate conflicting captions. |
@elastic/eui/sr-output-disabled-tooltip |
components/tooltip_icon.md |
EuiToolTip props from spread; child not EuiButtonIcon. |
@elastic/eui/tooltip-button-icon-wrap |
components/tooltip_icon.md |
{...props} without an explicit title is silently skipped — verify the spread does not omit a tooltip. No aria-label on the button → autofix can't run; supply both aria-label and EuiToolTip content. |
@elastic/eui/tooltip-focusable-anchor |
components/focus_and_keyboard.md |
{...anchorProps} or unknown custom anchor. |
@elastic/eui/tooltip-no-interactive-content |
components/tooltip_content.md |
Variable content (content={var} / title={var}) is silently skipped — trace and verify. EuiBadge / EuiBetaBadge / EuiCard with onClick / href become focusable and need migration to EuiPopover. |