Summary
34 of 64 UI component files contain no aria-label, aria-describedby, role, or tabIndex attributes, creating significant accessibility gaps for screen reader and keyboard-only users.
Detail
Components without any a11y attributes include: BulkActions.tsx, ColumnEditor.tsx, ConditionalBuilder.tsx, DataDiffView.tsx, DatasetHeader.tsx, DryRunPanel.tsx, DuplicateGroupView.tsx, FieldAnalyticsChart.tsx, FieldDiffDetail.tsx, FieldGeneratorConfig.tsx, FieldRecommendations.tsx, MergeWizard.tsx, MigrationProgressDashboard.tsx, OrderBySelector.tsx, OrgPicker.tsx, PreviewGrid.tsx, QualityRuleEditor.tsx, QualityScorecard.tsx, QueryExplainPanel.tsx, QueryMetricsPanel.tsx, RelationshipConfig.tsx, RelationshipTree.tsx, SchemaDiffView.tsx, ShortcutEditor.tsx, Skeleton.tsx, SoqlHighlighter.tsx, SoqlPreview.tsx, StepConfigPanel.tsx, SubqueryBuilder.tsx, TemplateCard.tsx, TemplateEditor.tsx, UndoHistoryPanel.tsx, ValidationPanel.tsx, WhereBuilder.tsx. Additionally, 37 of 49 screen files lack a11y attributes. The jsx-a11y ESLint plugin is configured but cannot catch runtime semantic gaps where interactive elements lack programmatic labels.
Location
src/ui/components/
Reproduction
Run: Get-ChildItem src/ui/components -Include *.tsx -Recurse | Select-String -Pattern ''(aria-label|aria-describedby|role=|tabIndex)'' -List; compare against total component count. 30 of 64 have attributes; 34 do not.
Suggested Fix
Audit each listed component for interactive elements (buttons, inputs, custom widgets) and add appropriate aria-label or aria-labelledby. For data visualization components like FieldAnalyticsChart and QualityScorecard, add role=''img'' with aria-label describing the chart content. Add aria-live regions to dynamic panels like MigrationProgressDashboard and Toast. Consider adding a CI check that flags new components without a11y attributes.
Verification
REAL(high): Verified via PowerShell search confirming 34 of 64 .tsx files in src/ui/components/ contain zero ari | REAL(high): Verified by scanning all 34 flagged files: 27 use semantic HTML (button, input, table, label) provid | REFUTED(high): The finding is overstated because it treats absence of explicit ARIA attributes as equivalent to mis
🤖 Found by automated codebase audit (Claude Fable 5.1)
Summary
34 of 64 UI component files contain no aria-label, aria-describedby, role, or tabIndex attributes, creating significant accessibility gaps for screen reader and keyboard-only users.
Detail
Components without any a11y attributes include: BulkActions.tsx, ColumnEditor.tsx, ConditionalBuilder.tsx, DataDiffView.tsx, DatasetHeader.tsx, DryRunPanel.tsx, DuplicateGroupView.tsx, FieldAnalyticsChart.tsx, FieldDiffDetail.tsx, FieldGeneratorConfig.tsx, FieldRecommendations.tsx, MergeWizard.tsx, MigrationProgressDashboard.tsx, OrderBySelector.tsx, OrgPicker.tsx, PreviewGrid.tsx, QualityRuleEditor.tsx, QualityScorecard.tsx, QueryExplainPanel.tsx, QueryMetricsPanel.tsx, RelationshipConfig.tsx, RelationshipTree.tsx, SchemaDiffView.tsx, ShortcutEditor.tsx, Skeleton.tsx, SoqlHighlighter.tsx, SoqlPreview.tsx, StepConfigPanel.tsx, SubqueryBuilder.tsx, TemplateCard.tsx, TemplateEditor.tsx, UndoHistoryPanel.tsx, ValidationPanel.tsx, WhereBuilder.tsx. Additionally, 37 of 49 screen files lack a11y attributes. The jsx-a11y ESLint plugin is configured but cannot catch runtime semantic gaps where interactive elements lack programmatic labels.
Location
src/ui/components/Reproduction
Run: Get-ChildItem src/ui/components -Include *.tsx -Recurse | Select-String -Pattern ''(aria-label|aria-describedby|role=|tabIndex)'' -List; compare against total component count. 30 of 64 have attributes; 34 do not.
Suggested Fix
Audit each listed component for interactive elements (buttons, inputs, custom widgets) and add appropriate aria-label or aria-labelledby. For data visualization components like FieldAnalyticsChart and QualityScorecard, add role=''img'' with aria-label describing the chart content. Add aria-live regions to dynamic panels like MigrationProgressDashboard and Toast. Consider adding a CI check that flags new components without a11y attributes.
Verification
REAL(high): Verified via PowerShell search confirming 34 of 64 .tsx files in src/ui/components/ contain zero ari | REAL(high): Verified by scanning all 34 flagged files: 27 use semantic HTML (button, input, table, label) provid | REFUTED(high): The finding is overstated because it treats absence of explicit ARIA attributes as equivalent to mis
🤖 Found by automated codebase audit (Claude Fable 5.1)