Use Wave 3 to convert the existing accessibility baseline and regression-gate scaffolding into real debt reduction for issue #5149.
- Enable active
injectAxe/checkA11ycoverage for every currently gated critical spec. - Remove the remaining non-gated global
link-namesuppression fromfrontend/cypress/support/e2e.js. - Reduce scoped allowlist entries by fixing underlying UI issues in critical flows.
- Keep
docs/accessibility/audit-baseline-2026-02-25.mdin sync with current findings and status. - Track follow-up remediation issues for any non-blocking findings that remain deferred.
- Branch:
OPS-5149/a11y-wave-three - Issue:
#5149 - Working mode: remediation-first
- Existing regression gate: active in
.github/workflows/ci.yml - Existing allowlist validation: active in
frontend/cypress/support/a11yAllowlist.js - Remaining broad suppression: none
-
frontend/cypress/e2e/notificationCenter.cy.jsshould actively runcy.injectAxe()andcy.checkA11y(). - Confirm every spec named in the CI regression gate is actually executing accessibility checks.
- Remove the fallback global
link-namedisable infrontend/cypress/support/e2e.js. - Keep only scoped, expiring exceptions in
frontend/cypress/support/a11yAllowlist.jswhen justified.
-
link-namefindings across agreement, portfolio, budget line, upload, and notification flows -
svg-img-altfindings in data visualization and icon-driven components -
landmark-one-main,page-has-heading-one, andregionfindings in review and upload flows
| Rule | Entries | Notes |
|---|---|---|
link-name |
0 | Removed on 2026-03-11; targeted specs now pass without allowlist coverage |
svg-img-alt |
0 | Removed on 2026-03-11; decorative chart and action icons now hide from assistive tech |
landmark-one-main |
0 | Removed on 2026-03-11 after preserving layout landmarks during route loading |
page-has-heading-one |
0 | Removed on 2026-03-11 after preserving page headings during route loading |
region |
0 | Removed on 2026-03-11 after preserving landmark-wrapped loading states |
frontend/cypress/support/e2e.jsfrontend/cypress/support/a11yAllowlist.jsfrontend/cypress/e2e/notificationCenter.cy.jsfrontend/src/components/UI/NotificationCenter/NotificationCenter.jsxfrontend/src/pages/agreements/review/ReviewAgreement.jsxfrontend/src/components/Agreements/Documents/UploadDocument.jsxdocs/accessibility/audit-baseline-2026-02-25.md
- Established Wave 3 as a remediation-first phase rather than more test-surface expansion.
- Identified that regression-gate plumbing and suppression metadata validation are already in place.
- Identified remaining major gaps:
frontend/cypress/e2e/notificationCenter.cy.jsis not yet executing axe checks.frontend/cypress/support/e2e.jsstill applies a non-gated globallink-namesuppression.- Baseline summary numbers in
docs/accessibility/audit-baseline-2026-02-25.mdneed refreshing.
- Implemented first Wave 3 remediation slice:
- added active
cy.injectAxe()andcy.checkA11y()coverage tofrontend/cypress/e2e/notificationCenter.cy.js - replaced clickable notification SVGs with accessible buttons in
frontend/src/components/UI/NotificationCenter/NotificationCenter.jsx - removed the fallback global
link-namesuppression fromfrontend/cypress/support/e2e.js
- added active
- Validation:
bun run a11y:validate-suppressionspassesnpx cypress run --config-file ./cypress.config.js --headless --spec "cypress/e2e/notificationCenter.cy.js,cypress/e2e/agreementList.cy.js,cypress/e2e/uploadDocument.cy.js"passes- no flaky retries detected in the targeted run
- Completed
link-nameburn-down for currently tracked critical specs:- added fallback accessible names to the shared user-profile link in
frontend/src/components/UI/Header/User.jsx - added explicit accessible names to agreement links in
frontend/src/components/BudgetLineItems/AllBudgetLinesTable/AllBLIRow.jsx - added explicit accessible names to agreement links in
frontend/src/components/CANs/CANBudgetLineTable/CANBudgetLineTableRow.jsx - removed all remaining
link-nameallowlist entries fromfrontend/cypress/support/a11yAllowlist.js
- added fallback accessible names to the shared user-profile link in
- Expanded validation:
npx cypress run --config-file ./cypress.config.js --headless --spec "cypress/e2e/agreementList.cy.js,cypress/e2e/agreementsPagination.cy.js,cypress/e2e/agreementDetails.cy.js,cypress/e2e/portfolioList.cy.js,cypress/e2e/portfolioDetail.cy.js,cypress/e2e/budgetLineItemsList.cy.js,cypress/e2e/createAgreement.cy.js,cypress/e2e/createAgreementWithValidations.cy.js,cypress/e2e/uploadDocument.cy.js,cypress/e2e/notificationCenter.cy.js"passes- no
link-namefailures remain in the targeted regression set
- Completed structural burn-down for the routed agreement/review flows:
- preserved
Applayout landmarks and page headings during agreement detail loading infrontend/src/pages/agreements/details/Agreement.jsx - preserved
Applayout landmarks during review-page loading infrontend/src/pages/agreements/review/ReviewAgreement.jsx - removed the nested page-level
<main>fromfrontend/src/components/Agreements/Documents/UploadDocument.jsx - removed the remaining
landmark-one-main,page-has-heading-one, andregionallowlist entries fromfrontend/cypress/support/a11yAllowlist.js
- preserved
- Structural validation:
npx cypress run --config-file ./cypress.config.js --headless --spec "cypress/e2e/agreementDetails.cy.js,cypress/e2e/budgetLineItemsList.cy.js,cypress/e2e/createAgreementWithValidations.cy.js,cypress/e2e/uploadDocument.cy.js"passes- no structural allowlist-backed failures remain in that targeted regression set
- Completed
svg-img-altburn-down for the remaining tracked specs:- hid decorative portfolio legend and CAN funding icons from assistive tech in
frontend/src/components/Portfolios/PortfolioSummaryCards/PortfolioLegend.jsxandfrontend/src/components/Portfolios/PortfolioFundingByCAN/PortfolioFundingByCAN.jsx - hid decorative external-link icon in
frontend/src/components/Portfolios/PortfolioHero/HeroDescription.jsx - hid decorative budget line summary and change-action icons in
frontend/src/components/BudgetLineItems/BLIStatusSummaryCard/BLIStatusSummaryCard.jsxandfrontend/src/components/BudgetLineItems/ChangeIcons/ChangeIcons.jsx - removed the final
svg-img-altallowlist entries fromfrontend/cypress/support/a11yAllowlist.js
- hid decorative portfolio legend and CAN funding icons from assistive tech in
- SVG validation:
npx cypress run --config-file ./cypress.config.js --headless --spec "cypress/e2e/portfolioDetail.cy.js,cypress/e2e/budgetLineItemsList.cy.js"passes- no
svg-img-altfailures remain in the targeted regression set
-
bun run a11y:validate-suppressions - Relevant Cypress regression specs pass locally
- Findings register updated for each removed or narrowed exception
- Child follow-up issues linked for deferred findings
Use this comment on the parent issue when Wave 3 changes start landing:
Wave 3 update (`#5149`):
- Shifted this phase to remediation-first work on top of the existing a11y regression gate.
- Added developer tracker: `docs/developers/frontend/accessibility/issue-5149-wave-3.md`
- Current focus:
- enable active axe execution for all gated critical specs
- remove the remaining global `link-name` suppression
- burn down scoped allowlist entries by rule and route
Next implementation targets:
- `frontend/cypress/e2e/notificationCenter.cy.js`
- `frontend/cypress/support/e2e.js`
- `frontend/src/components/UI/NotificationCenter/NotificationCenter.jsx`
- `frontend/src/pages/agreements/review/ReviewAgreement.jsx`
- `frontend/src/components/Agreements/Documents/UploadDocument.jsx`