Focused sidebar border: use accent colour, not bold (box-art renders broken in casts) #25

Closed
opened 2026-06-11 14:35:26 +01:00 by claude-clouddev1 · 1 comment
Collaborator

Summary

The focused schema-sidebar panel border (ADR-0046 DC3) is drawn bold. Bold
box-drawing glyphs render as broken / gapped line-art in the asciinema player
used for the website casts (the vertical strokes don't connect and don't line
up with the corner glyphs), and bold box-art is fragile in some terminals too.
Switch the focus indicator from bold to a non-bold accent colour.

Discovered while reviewing the website schema-sidebar cast (website branch);
filing here because the fix is app-side on main.

Where

src/ui.rs, panel_border_style (~line 280):

fn panel_border_style(theme: &Theme, focused: bool) -> Style {
    if focused {
        Style::default()
            .fg(theme.fg)
            .add_modifier(Modifier::BOLD)   // <- the problem
    } else {
        Style::default().fg(theme.border)
    }
}

Proposed change (option A, user-approved)

Drop Modifier::BOLD from the focused arm and rely on colour for the focus
cue. Two viable flavours — implementer's choice (a quick visual check decides):

  • Minimal: keep theme.fg (bright) without bold. The focused panel already
    contrasts bright fg against the muted theme.border of the unfocused
    panels, so a clear focus cue remains with no bold.
  • More pop: use an accent colour instead, e.g. theme.mode_simple (blue) or
    another existing theme colour, non-bold — a stronger, lazygit-style focus
    border.

Either way: no Modifier::BOLD on box-drawing borders.

Expected fallout (please handle as part of the change)

  • Tier-2 insta snapshots (src/snapshots/): the ADR-0046 focus / expand
    snapshots encode the bold border attribute and will need re-accepting
    (cargo insta review).
  • Tier-1 tests asserting panel_border_style (if any) that check for
    BOLD need updating.
  • Doc comment on panel_border_style ("an accented, bold border")
    should be reworded.
  • ADR-0046 DC3 describes the focused panel as an accent (bold) border —
    record the refinement (colour, not bold) as an amendment/note in the ADR, and
    update docs/adr/README.md per the index-upkeep rule if the ADR status line
    changes.

Website follow-up (tracked separately on the website branch)

After this lands and merges, the schema-sidebar cast (and likely all casts)
will be re-recorded against the updated binary — no action needed here.

## Summary The focused schema-sidebar panel border (ADR-0046 DC3) is drawn **bold**. Bold box-drawing glyphs render as broken / gapped line-art in the asciinema player used for the website casts (the vertical strokes don't connect and don't line up with the corner glyphs), and bold box-art is fragile in some terminals too. Switch the focus indicator from **bold** to a **non-bold accent colour**. Discovered while reviewing the website `schema-sidebar` cast (website branch); filing here because the fix is app-side on `main`. ## Where `src/ui.rs`, `panel_border_style` (~line 280): ```rust fn panel_border_style(theme: &Theme, focused: bool) -> Style { if focused { Style::default() .fg(theme.fg) .add_modifier(Modifier::BOLD) // <- the problem } else { Style::default().fg(theme.border) } } ``` ## Proposed change (option A, user-approved) Drop `Modifier::BOLD` from the focused arm and rely on **colour** for the focus cue. Two viable flavours — implementer's choice (a quick visual check decides): - **Minimal:** keep `theme.fg` (bright) without bold. The focused panel already contrasts bright `fg` against the muted `theme.border` of the unfocused panels, so a clear focus cue remains with no bold. - **More pop:** use an accent colour instead, e.g. `theme.mode_simple` (blue) or another existing theme colour, non-bold — a stronger, lazygit-style focus border. Either way: **no `Modifier::BOLD` on box-drawing borders.** ## Expected fallout (please handle as part of the change) - **Tier-2 `insta` snapshots** (`src/snapshots/`): the ADR-0046 focus / expand snapshots encode the bold border attribute and will need re-accepting (`cargo insta review`). - **Tier-1 tests** asserting `panel_border_style` (if any) that check for `BOLD` need updating. - **Doc comment** on `panel_border_style` ("an accented, **bold** border") should be reworded. - **ADR-0046 DC3** describes the focused panel as an accent (bold) border — record the refinement (colour, not bold) as an amendment/note in the ADR, and update `docs/adr/README.md` per the index-upkeep rule if the ADR status line changes. ## Website follow-up (tracked separately on the website branch) After this lands and merges, the `schema-sidebar` cast (and likely all casts) will be re-recorded against the updated binary — no action needed here.
claude-clouddev1 added the enhancement label 2026-06-11 14:35:26 +01:00
Author
Collaborator

Fixed in fde50ce (user-confirmed visually).

panel_border_style now marks the focused sidebar panel with a non-bold accent colour (theme.mode_simple, blue) instead of bright fg + Modifier::BOLD. The unfocused border stays muted (theme.border). Bold is untouched on text spans (titles, key hints) — the constraint is specifically that box-drawing borders carry no bold attribute, so they render cleanly in the asciinema cast player.

One correction to the fallout list: the Tier-2 insta snapshots did not need re-accepting — render_to_string captures cell symbols only, not styles, so a bold→colour change is invisible to them (full suite confirms, no snapshot churn). The Tier-1 panel_border_style assertion was updated, and a new render-level test now inspects the actual buffer border cells (focused → mode_simple, never BOLD; nothing focused → no border cell wears the accent), covering both the inline panel and the DC2 expand-on-focus overlay.

Decision recorded as ADR-0046 Amendment 1 (focus accent is a colour, not bold). Full suite green (2425 pass, 1 ignored).

The website schema-sidebar cast re-recording is tracked separately on the website branch, as noted.

Fixed in `fde50ce` (user-confirmed visually). `panel_border_style` now marks the focused sidebar panel with a **non-bold accent colour** (`theme.mode_simple`, blue) instead of bright `fg` + `Modifier::BOLD`. The unfocused border stays muted (`theme.border`). Bold is untouched on *text* spans (titles, key hints) — the constraint is specifically that **box-drawing borders carry no bold attribute**, so they render cleanly in the asciinema cast player. **One correction to the fallout list:** the Tier-2 `insta` snapshots did **not** need re-accepting — `render_to_string` captures cell *symbols* only, not styles, so a bold→colour change is invisible to them (full suite confirms, no snapshot churn). The Tier-1 `panel_border_style` assertion was updated, and a new **render-level test** now inspects the actual buffer border cells (focused → `mode_simple`, never `BOLD`; nothing focused → no border cell wears the accent), covering both the inline panel and the DC2 expand-on-focus overlay. Decision recorded as **ADR-0046 Amendment 1** (focus accent is a colour, not bold). Full suite green (2425 pass, 1 ignored). The website `schema-sidebar` cast re-recording is tracked separately on the website branch, as noted.
Sign in to join this conversation.