Skip to content

Commit c28cb23

Browse files
committed
fix: use default-foreground ANSI so splash and spinner stay readable in light-mode terminals
Bright-white (\033[97m) and plain-white (\033[37m) collapse to invisible on terminals where the foreground IS white — the user reports 'Team License' and 'Syncing CodeGraph' rendering blank on a light-mode iTerm profile. Same problem with Rich's 'bold white' style. Fix: switch every body-text white to \033[39m (default foreground) and 'bold white' to plain 'bold' in the installer. Default foreground inherits the terminal's theme so text shows black on light, white on dark, and stays readable on both. Add launcher/tests/unit/test_ansi_safety.py to ban \033[97m, \033[37m, 'bold white', '[white]', and '[dim white]' from launcher/ + installer/ sources so the regression cannot reappear. The single legitimate white-on-red 'Pilot disabled' banner is allowlisted explicitly.
1 parent f1ee3ed commit c28cb23

6 files changed

Lines changed: 3 additions & 3 deletions

File tree

installer/ui.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ def banner(self, license_info: dict[str, Any] | None = None) -> None:
135135

136136
tagline = Text()
137137
tagline.append(" ✈ ", style="cyan")
138-
tagline.append("How real engineers run Claude Code.", style="bold white")
138+
tagline.append("How real engineers run Claude Code.", style="bold")
139139
self._console.print(tagline)
140140
self._console.print(" From requirement to production-grade code. Planned, tested, verified.", style="muted")
141141
self._console.print()
@@ -184,7 +184,7 @@ def step(self, name: str) -> None:
184184
return
185185
step_text = Text()
186186
step_text.append(f"[{self._current_step}/{self._total_steps}] ", style="bold magenta")
187-
step_text.append(name, style="bold white")
187+
step_text.append(name, style="bold")
188188
self._console.print()
189189
self._console.print(Rule(step_text, style="magenta"))
190190

@@ -231,7 +231,7 @@ def next_steps(self, sections: list[tuple[str, list[tuple[str, str]]]]) -> None:
231231
step_num = 1
232232
for section_title, items in sections:
233233
self._console.print()
234-
self._console.print(f" [bold white]{section_title}[/bold white]")
234+
self._console.print(f" [bold]{section_title}[/bold]")
235235
self._console.print()
236236
for title, description in items:
237237
self._console.print(f" [bold magenta]{step_num}.[/bold magenta] [bold]{title}[/bold]")

launcher/banner.py

86 Bytes
Binary file not shown.

launcher/cli.py

0 Bytes
Binary file not shown.

launcher/statusline/formatter.py

75 Bytes
Binary file not shown.
4.11 KB
Binary file not shown.

launcher/wrapper.py

82 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)