Skip to content

Enforce animations = false for screen readers#20564

Open
etraut-openai wants to merge 2 commits intomainfrom
etraut/animations-false-improvements
Open

Enforce animations = false for screen readers#20564
etraut-openai wants to merge 2 commits intomainfrom
etraut/animations-false-improvements

Conversation

@etraut-openai
Copy link
Copy Markdown
Collaborator

@etraut-openai etraut-openai commented May 1, 2026

Why

Issue #20489 calls out that animated TUI affordances can be noisy for screen-reader users. Codex already has tui.animations = false as a reduced-motion setting, but some live activity rows render spinner-style prefixes in that mode. These were relatively recent regressions.

We have also regressed this pattern more than once by adding new spinner/shimmer callsites that do not think through the reduced-motion path, so this PR adds a small guardrail while fixing the current surfaces.

What changed

  • Omit the live status-row spinner when animations are disabled, so the row starts with stable text like Working (...).
  • Render running hook headers without the spinner prefix when animations are disabled, while preserving shimmer/spinner behavior when animations are enabled.
  • Centralize TUI activity indicators in tui/src/motion.rs, with explicit reduced-motion choices for hidden prefixes, static bullets, and plain shimmer-text fallbacks.
  • Route existing spinner/shimmer callsites through the central motion helper, including exec rows, MCP/web-search/loading rows, hook rows, plugin loading, and onboarding loading text.
  • Add a source-scan regression test that rejects direct spinner(...) or shimmer_spans(...) usage outside the central module and primitive definition.
  • Add focused coverage that reduced-motion active exec rows are stable, status rows start without a spinner, running hooks omit the spinner, and MCP inventory loading stays stable.
  • Update the one affected status-indicator snapshot; the existing detail tree prefix remains unchanged.

Verification

  • cargo test -p codex-tui

Add a central motion helper and source scan so direct spinner/shimmer use goes through reduced-motion fallbacks.\n\nRefs #20489
@etraut-openai etraut-openai changed the title Quiet reduced-motion TUI activity rows Keep TUI activity indicators reduced-motion aware May 1, 2026
@etraut-openai etraut-openai changed the title Keep TUI activity indicators reduced-motion aware Enforce animations = false for screen readers May 1, 2026
Bojun-Vvibe added a commit to Bojun-Vvibe/oss-contributions that referenced this pull request May 1, 2026
…ini-cli)

- openai/codex#20564 — Enforce animations=false for screen readers (merge-as-is)
- openai/codex#20530 — Support multi-env filesystem tools (merge-after-nits)
- BerriAI/litellm#26956 — Fix MCP semantic filter native tool passthrough (merge-after-nits)
- google-gemini/gemini-cli#26277 — docs(sdk): add JSDoc to all exports (merge-as-is)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant