Problem
The Dashboard filter field collection has no accessible group name.
src/ui/dashboard.ts calls buildFilterBar(...) without ariaLabel, so .dash-filters renders without:
role="group"
aria-label="Dashboard filters"
The detached query view already passes ariaLabel: 'Query filters' through the same shared builder.
Required change
Pass ariaLabel: 'Dashboard filters' in the Dashboard buildFilterBar(...) call.
Do not change buildFilterBar() defaults. Callers that omit ariaLabel must continue rendering without an implicit group name.
Regression test
Add a Dashboard integration assertion in tests/unit/dashboard.test.ts using a Dashboard with at least one filter:
const filterBar = qs(app.root, '.dash-filters');
expect(filterBar.getAttribute('role')).toBe('group');
expect(filterBar.getAttribute('aria-label')).toBe('Dashboard filters');
Do not duplicate the existing shared-builder unit test for ariaLabel; this test must verify the Dashboard wiring.
Acceptance criteria
Problem
The Dashboard filter field collection has no accessible group name.
src/ui/dashboard.tscallsbuildFilterBar(...)withoutariaLabel, so.dash-filtersrenders without:The detached query view already passes
ariaLabel: 'Query filters'through the same shared builder.Required change
Pass
ariaLabel: 'Dashboard filters'in the DashboardbuildFilterBar(...)call.Do not change
buildFilterBar()defaults. Callers that omitariaLabelmust continue rendering without an implicit group name.Regression test
Add a Dashboard integration assertion in
tests/unit/dashboard.test.tsusing a Dashboard with at least one filter:Do not duplicate the existing shared-builder unit test for
ariaLabel; this test must verify the Dashboard wiring.Acceptance criteria
role="group".Dashboard filters.Query filters.ariaLabelretain current behavior.