Skip to content

[codex] Use progressbar for autosave progress#3817

Draft
ashfame wants to merge 1 commit into
trunkfrom
codex/autosave-status-progressbar
Draft

[codex] Use progressbar for autosave progress#3817
ashfame wants to merge 1 commit into
trunkfrom
codex/autosave-status-progressbar

Conversation

@ashfame

@ashfame ashfame commented Jun 21, 2026

Copy link
Copy Markdown
Member

What changed

This is the semantic accessibility fix for #3815. The in-progress save/autosave indicator no longer uses role="status" as the progress surface. Instead, the indicator is exposed as a role="progressbar" with exact aria-valuenow and aria-valuetext values.

A separate visually hidden polite status region now announces only meaningful transitions, such as save/autosave completion and failure. The visible progress ring still updates with exact progress.

The existing Playwright autosave status sampling was updated to include progressbar nodes, assert exact progress on aria-valuetext, and assert that percent progress is no longer exposed through role="status".

Approach

The in-progress indicator now uses:

  • role="progressbar"
  • aria-label="Autosave progress" or aria-label="Save progress"
  • aria-valuemin="0"
  • aria-valuemax="100"
  • aria-valuenow={progressPercent}
  • aria-valuetext, for example Autosaving 42%

A hidden role="status" live region announces only completion/failure messages and skips initial render announcements.

Pros

  • Models progress with the correct ARIA role.
  • Lets screen reader users inspect the exact current percentage without unsolicited percent-by-percent announcements.
  • Keeps visual progress fidelity unchanged.
  • Separates queryable progress state from live status announcements.
  • Avoids stale bucketed labels.

Cons

  • Larger change than simple bucketing.
  • Adds state/effect logic for transition announcements.
  • Screen readers generally will not announce progressbar value changes unless users navigate to the progressbar, so completion/failure needs the separate live region.
  • Slightly more test maintenance because autosave sampling must include progressbar nodes.

Validation

  • npm exec nx -- run playground-website:typecheck
  • npm exec nx -- run playground-website:lint

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant