1jehuang / 1jehuang/jcode

Accessibility: low-emphasis (dim) text is unreadable for colorblind users; the hardcoded `.dim()` modifier cannot be fixed via `/colors`

Open
#959 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

autonomous: no bug priority: high triage: needs-decision ux
Dominant language
Rust
Stars
19.9k
Forks
2.3k
Avg merge
2d 7h
Merged PRs (30d)
30

Description

Environment
  • jcode v0.75.0 (5ae238574)
  • Windows x64, Windows Terminal (latest, truecolor)
  • User has a color vision deficiency (specific type unknown)
Problem

Several low-emphasis UI elements are too dark / low-contrast for colorblind
users, and the built-in /colors configuration cannot fix them:

  • The tool-call line tool: edit (the tool: prefix and the tool name)
  • The top-of-screen previous-question indicator with its number (73>)
  • Box lines, diff lines, frame lines, and the streaming status line are also on
    the weak-contrast side at default, but those ARE fixable via /colors.
Root cause (from source)

In crates/jcode-tui/src/tui/ui_messages.rs, render_assistant_tool_call_lines
styles the tool call line like this:

let prefix_style = Style::default().fg(tool_color()).dim();   // "tool:" prefix
let separator_style = Style::default().fg(dim_color()).dim();
let name_style = Style::default().fg(accent_color()).dim();   // tool name

The .dim() modifier is a rendering attribute applied on top of the color.
Brightening the role colors via /colors <role> #rrggbb has almost no visible
effect because the terminal still renders the text dim. There is no config to
change the dim strength or remove the hardcoded dim.

The same class of problem applies to:

  • The top-of-screen previous-question indicator and its number (73>), which
    use the same low-emphasis dim styling.
  • Inline code spans (the "gray background, white text" look in chat). Inline
    code uses the markdown renderer's dedicated code styling
    (code_fg() / code-block helpers in crates/jcode-tui-markdown), including
    a fixed gray frame/background that is not one of the 22 configurable
    /colors roles, so /colors cannot change it.
Steps to reproduce
  1. Run jcode with default colors.
  2. Ask the agent to make a tool call (e.g., edit a file).
  3. Observe the tool: edit line: it is dim and hard to read.
  4. Run /colors tool #989ea6 (very bright) - the line barely changes.
Expected behavior
  • Low-emphasis text should remain readable for users with color vision
    deficiencies on a dark background.
  • Ideally, the dim/weak styling should be configurable, e.g.:
    • a display.dim_strength (0-100%) setting that scales the .dim() effect,
    • or removing the hardcoded .dim() and using a dedicated role value that
      users can tune with /colors,
    • or a high-contrast low-emphasis style (brighter gray, same hue family).
Notes
  • The default grays (dim #505050, tool #787878, border #64646e) are
    already low-contrast on dark backgrounds; brightening them via /colors
    helps, but the .dim() modifier on some elements defeats it.
  • A full palette override (/colors generate) and switching to a light
    terminal background were both tried and did not resolve the low-emphasis
    contrast for this user.
Impact

Colorblind users (and anyone with low-contrast sensitivity) struggle to read
tool-call labels, status context, and frame lines. The color system is
impressive for the color roles themselves, but the extra hardcoded dim pass
makes some text unreachable by configuration.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in crates/jcode-tui/src/tui/ui_messages.rs, especially render_assistant_tool_call_lines and the styles applied to the previous-question indicator. Then inspect crates/jcode-tui-markdown for code_fg() and code-block helpers, along with the /colors configuration path. Done means low-emphasis tool, indicator, frame, and inline-code text remains readable and the affected styling can be adjusted through the available configuration.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
accessibility, cli
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.