Repository navigation
[SE-710] Audit work package, backlogs, boards and meetings pages with AXe - #25846
Merged
Merged
Conversation
bsatarnejad
force-pushed
the
feature/se-659-audit-pages-with-axe-scan
branch
from
October 6, 2026 14:20
d4bfb3b to
e292880
Compare
myabc
force-pushed
the
feature/se-659-audit-pages-with-axe-scan
branch
from
October 7, 2026 16:11
e292880 to
c054ae2
Compare
myabc
force-pushed
the
feature/se-659-audit-pages-with-axe-scan
branch
4 times, most recently
from
October 16, 2026 20:18
bf1992b to
2448f2c
Compare
myabc
marked this pull request as ready for review
October 16, 2026 20:22
|
Warning Flaky specs
🤖 Ask Copilot to investigateCopy the prompt below into a new comment on this PR to delegate the investigation to GitHub Copilot. It will look into the flakiness and open a separate pull request with you as reviewer. |
1 of 3 tasks
myabc
added this pull request to stack #26116
October 18, 2026 15:14
bsatarnejad
requested changes
Oct 21, 2026
The modal overlay is rendered in the base layout on every page with cdkTrapFocus always enabled. Angular CDK inserts two visually hidden anchor divs next to the overlay carrying aria-hidden="true" and tabindex="0", which trips the axe rule aria-hidden-focus on every page and forces the accessibility specs to scope their scan to #content. Binds the trap to the active modal instance so the anchors carry no tabindex while no modal is open. The CDK re-adds tabindex="0" as soon as a modal opens. https://community.openproject.org/wp/SE-710
myabc
force-pushed
the
feature/se-659-audit-pages-with-axe-scan
branch
from
October 22, 2026 10:26
2448f2c to
9c956f9
Compare
Restores the `<th>` for the drag handle column. As a `<td>` it made Chrome expose the neighbouring `<th>` cells as `rowheader`, which broke every `have_columnheader` assertion on the work package table, and it shifted the `th:nth-of-type` positions the a11y sort spec relies on. Labels the cell with visually hidden text instead, so that AXe's `empty-table-header` rule still passes. The column spec now counts four named headers.
The specs added on this branch scoped the axe scan to #content to dodge the focus trap anchors of the always-present modal overlay. With the trap disabled while no modal is open, the scan can cover the whole page, including header, sidebar and global menus. https://community.openproject.org/wp/SE-710
The screen reader description for links opening a new tab sat directly under body, outside every landmark. With whole-page axe scans the region rule flags it on every page. Moves the span into #content, just before the hidden content heading. The heading must stay directly before #content-body, which takes its top padding from the .accessibility-helper + #content-body rule on pages without a content header. The links reference the span by id, so its position does not matter to them. https://community.openproject.org/wp/SE-710
The user menu button gets its accessible name from the avatar, which Angular renders after page load. An axe scan that runs before that sees an unnamed button and fails the button-name rule, as happened on the boards index spec in CI. Gives the button the same aria-label the icon variant already carries, and lets the boards index and backlogs specs wait for their page content before scanning. https://community.openproject.org/wp/SE-710
myabc
force-pushed
the
feature/se-659-audit-pages-with-axe-scan
branch
from
October 22, 2026 10:32
9c956f9 to
3a7f915
Compare
bsatarnejad
approved these changes
Oct 22, 2026
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Ticket
https://community.openproject.org/wp/SE-710
What are you trying to accomplish?
Scans a first batch of pages with axe in their feature specs and fixes what the scans found: work packages index and show, backlogs editing, boards index and management, meetings index and agenda. Sister PR #25892 did the same for Lookbook component previews. Parent feature: SE-659.
Every scan so far had to stay inside
#content. The modal overlay in the base layout keeps its CDK focus trap enabled on every page, and the trap's hidden anchor elements carryaria-hidden="true"withtabindex="0", failing thearia-hidden-focusrule on every page. The first commit binds the trap to the active modal, so the specs on this branch scan the whole page.What approach did you choose and why?
Axe assertions sit in the existing feature specs for each page, so the pages render with the realistic data already set up there. A crawl-based sweep over demo data with a known-violations registry is a separate follow-up, SE-712; this PR stays per-page.
The focus trap fix leaves the overlay's
role="dialog"markup unchanged; it isdisplay: nonewhile idle, so assistive tech never reaches it. Only the always-visible anchors needed to stop being tabbable. The nine axe specs written before this PR keep their#contentscoping until SE-711 drops it.AI involvement
Collaborative – AI generated a substantial part of the code; I reviewed and understand every line.
Merge checklist