Skip to content

Simplify Appearance settings#6459

Open
brennanb2025 wants to merge 27 commits into
mainfrom
brennanb2025/appearance-config-improvement
Open

Simplify Appearance settings#6459
brennanb2025 wants to merge 27 commits into
mainfrom
brennanb2025/appearance-config-improvement

Conversation

@brennanb2025

@brennanb2025 brennanb2025 commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Reworks Appearance into inline expandable sections for Interface, Terminal, and Window & Sidebar.
  • Keeps App Icon at the bottom and removes the fake Code & Markdown grouping.
  • Moves lower-frequency controls behind inline Advanced disclosures while preserving search coverage and terminal customization.
  • Keeps terminal previews below controls and tightens settings-search behavior to avoid empty/noisy expanded sections.
  • Updates locale catalogs for the new labels and neutral workspace-card copy.

Review

  • Completed iterative two-reviewer code review rounds until both reviewers in the same fresh round returned clean.
  • Final clean reviewers: Hubble and Faraday, both reported no issues found.

Validation

  • pnpm exec vitest run --config config/vitest.config.ts src/renderer/src/components/settings/AppearancePane.test.tsx src/renderer/src/components/settings/terminal-search.test.ts src/renderer/src/components/settings/settings-search.test.ts src/renderer/src/components/settings/TerminalAppearanceSection.ghostty.test.ts src/renderer/src/components/settings/TerminalThemeSections.lifecycle.test.ts
  • pnpm run typecheck:web
  • pnpm run verify:localization-catalog
  • pnpm run verify:localization-coverage
  • targeted oxlint via commit hook and local touched-file runs
  • git diff --check

Notes

Made with Orca 🐋

brennanb2025 and others added 2 commits June 26, 2026 17:50
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
@coderabbitai

coderabbitai Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 03cbe9f5-d4df-4095-833e-b9ec1bfd8c49

📥 Commits

Reviewing files that changed from the base of the PR and between 9d28faf and f95a47c.

📒 Files selected for processing (2)
  • src/renderer/src/components/settings/AppearancePane.test.tsx
  • src/renderer/src/components/settings/AppearanceWindowSidebarSection.tsx
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/renderer/src/components/settings/AppearancePane.test.tsx
  • src/renderer/src/components/settings/AppearanceWindowSidebarSection.tsx

📝 Walkthrough

Walkthrough

Appearance settings now use accordion-style sections with search-driven disclosure and shared search entries. The interface and window/sidebar settings were split into dedicated sections, and the top-level appearance pane now composes them with updated tests. Terminal settings add advanced typography controls and refactor terminal appearance sections for search-aware visibility, with related locale updates. PTY hidden-output restore adds a foreground timeout path, fallback cleanup, and new stalled-snapshot tests.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description covers summary, testing, and notes, but it omits required Screenshots, AI Review Report, and Security Audit sections. Add the missing Screenshots, AI Review Report, and Security Audit sections, and fill Screenshots with images or "No visual change".
Docstring Coverage ⚠️ Warning Docstring coverage is 20.59% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately summarizes the main UI simplification in the Appearance settings.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (3)
src/renderer/src/components/settings/terminal-typography-search.ts (1)

107-109: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Document the slice(2) contract.

This now depends on the first two catalog entries always being the primary typography controls; a later reorder would silently change which settings force-open under Advanced. As per coding guidelines, "**/*.{ts,tsx,js,jsx}: When writing or modifying code driven by a design doc or non-obvious constraint, add a comment explaining why the code behaves the way it does."

Suggested diff
 export const getTerminalAdvancedTypographySearchEntries = createLocalizedCatalog(() =>
+  // Why: font size and font family stay in the primary Terminal controls;
+  // only the remaining typography entries should force-open Advanced.
   getTerminalTypographySearchEntryCatalog().slice(2)
 )

Source: Coding guidelines

src/renderer/src/components/settings/AppearanceShortcutHintList.tsx (1)

30-31: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Replace the arbitrary text-[10px] size with a design token.

text-[10px] bypasses the shared typography scale in a settings UI path that is supposed to stay on STYLEGUIDE/main.css tokens. Use the closest approved text size/token instead. As per coding guidelines, “Never invent new color values, font sizes, or shadow tiers when a documented one in STYLEGUIDE.md already covers the role” and “All UI work ... must follow docs/STYLEGUIDE.md and use tokens defined in src/renderer/src/assets/main.css.”

Source: Coding guidelines

src/renderer/src/components/settings/AppearanceInterfaceSection.tsx (1)

63-68: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a short why-comment for the advanced-search gating.

showAdvanced is enforcing the PR’s “don’t expand empty/noisy advanced sections during search” behavior, but that constraint isn’t obvious from the predicate alone. Please document that intent here so this doesn’t get simplified away later.

Source: Coding guidelines


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: e9f8ee3f-6300-4abf-954a-cad75eb35a0b

📥 Commits

Reviewing files that changed from the base of the PR and between d18cdc6 and 8736ca9.

📒 Files selected for processing (25)
  • src/renderer/src/components/settings/AppearanceAdvancedDisclosure.tsx
  • src/renderer/src/components/settings/AppearanceInterfaceSection.tsx
  • src/renderer/src/components/settings/AppearancePane.test.tsx
  • src/renderer/src/components/settings/AppearancePane.tsx
  • src/renderer/src/components/settings/AppearanceSection.tsx
  • src/renderer/src/components/settings/AppearanceShortcutHintList.tsx
  • src/renderer/src/components/settings/AppearanceWindowSidebarSection.tsx
  • src/renderer/src/components/settings/TerminalAdvancedTypographyControls.tsx
  • src/renderer/src/components/settings/TerminalAppearanceSection.ghostty.test.ts
  • src/renderer/src/components/settings/TerminalAppearanceSection.tsx
  • src/renderer/src/components/settings/TerminalCursorAppearanceSection.tsx
  • src/renderer/src/components/settings/TerminalFontSizeSetting.tsx
  • src/renderer/src/components/settings/TerminalPaneAppearanceSection.tsx
  • src/renderer/src/components/settings/TerminalThemeSections.tsx
  • src/renderer/src/components/settings/TerminalWindowSection.tsx
  • src/renderer/src/components/settings/appearance-search.ts
  • src/renderer/src/components/settings/appearance-sidebar-search.ts
  • src/renderer/src/components/settings/terminal-search.test.ts
  • src/renderer/src/components/settings/terminal-search.ts
  • src/renderer/src/components/settings/terminal-typography-search.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/zh.json

Comment thread src/renderer/src/components/settings/TerminalAppearanceSection.tsx
Comment thread src/renderer/src/i18n/locales/es.json Outdated
Comment thread src/renderer/src/i18n/locales/es.json Outdated
Comment thread src/renderer/src/i18n/locales/ja.json Outdated
brennanb2025 and others added 3 commits June 26, 2026 18:06
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/renderer/src/components/settings/AppearanceShortcutHintList.tsx (1)

22-31: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Document why only the primary combo is rendered.

Line 22 intentionally ignores any secondary shortcut combos, which is a non-obvious UI constraint. Please add a short why-comment so this doesn’t get “fixed” later.

Suggested change
-  const primaryCombo = combos[0]
+  // Why: Appearance rows stay compact by showing only the primary shortcut hint inline.
+  const primaryCombo = combos[0]

As per coding guidelines, code driven by a non-obvious constraint should include a short why comment; the PR summary also calls out revised shortcut-hint behavior.

Source: Coding guidelines


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 6ab5305d-5a68-4ef0-9e1f-a362ebb6b4e0

📥 Commits

Reviewing files that changed from the base of the PR and between 0e422d7 and 4ccb90c.

📒 Files selected for processing (2)
  • src/renderer/src/components/settings/AppearanceShortcutHintList.tsx
  • src/renderer/src/components/settings/SettingsFormControls.tsx

brennanb2025 and others added 3 commits June 26, 2026 18:13
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: bde52ca5-dbdc-4772-9e47-1d631180bcba

📥 Commits

Reviewing files that changed from the base of the PR and between 4ccb90c and 1e44f43.

📒 Files selected for processing (4)
  • src/renderer/src/components/settings/SettingsFormControls.tsx
  • src/renderer/src/components/settings/TerminalAppearanceSection.ghostty.test.ts
  • src/renderer/src/components/settings/TerminalAppearanceSection.tsx
  • src/renderer/src/components/settings/TerminalThemeSections.tsx
🚧 Files skipped from review as they are similar to previous changes (2)
  • src/renderer/src/components/settings/TerminalAppearanceSection.ghostty.test.ts
  • src/renderer/src/components/settings/TerminalAppearanceSection.tsx

Comment thread src/renderer/src/components/settings/TerminalThemeSections.tsx
brennanb2025 and others added 18 commits June 26, 2026 18:46
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Orca <help@stably.ai>
…ce-config-improvement

# Conflicts:
#	src/renderer/src/components/terminal-pane/pty-connection.test.ts
#	src/renderer/src/components/terminal-pane/pty-connection.ts
@brennanb2025

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/renderer/src/components/settings/AppearanceWindowSidebarSection.tsx (1)

61-75: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Expand status-bar toggles for top-level status-bar matches.

SearchableSetting can render the Status Bar row when the query matches its own title/keywords, but showStatusBarControls only considers individual toggle matches. Searches like “status bar” can land on just the description instead of the controls.

Suggested adjustment
+  const statusBarSectionMatches = matchesSettingsSearch(searchQuery, {
+    title: translate('auto.components.settings.AppearancePane.3e4175e5c6', 'Status Bar'),
+    keywords: ['status bar', 'indicators']
+  })
   const statusBarControlMatches = visibleStatusBarToggles.some((toggle) =>
     matchesSettingsSearch(searchQuery, {
       title: toggle.title,
       description: toggle.description,
       keywords: toggle.keywords
     })
   )
@@
-  const showStatusBarControls = !isSearching || statusBarControlMatches
+  const showStatusBarControls = !isSearching || statusBarSectionMatches || statusBarControlMatches
@@
-          forceVisible={forceVisiblePrimary || statusBarControlMatches}
+          forceVisible={forceVisiblePrimary || statusBarSectionMatches || statusBarControlMatches}

Also applies to: 91-105

🧹 Nitpick comments (1)
src/renderer/src/components/terminal-pane/pty-connection.test.ts (1)

6133-6473: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract the stalled-restore test harness.

These tests repeat the same transport, captured callback, snapshot mock, pane/deps setup, and disposal flow. A small helper would reduce drift and make timer cleanup expectations easier to keep consistent.

Refactor sketch
+async function createHiddenRestoreHarness(depsOptions?: Parameters<typeof createDeps>[0]) {
+  const { connectPanePty } = await import('./pty-connection')
+  const transport = createMockTransport('pty-id')
+  const capturedDataCallback = {
+    current: null as ((data: string, meta?: { seq?: number; rawLength?: number }) => void) | null
+  }
+
+  transport.connect.mockImplementation(async ({ callbacks }: { callbacks: ConnectCallbacks }) => {
+    capturedDataCallback.current = callbacks.onData ?? null
+    return 'pty-id'
+  })
+  transportFactoryQueue.push(transport)
+
+  const pane = createPane(1)
+  const manager = createManager(1)
+  const deps = createDeps(depsOptions)
+  const disposable = connectPanePty(pane as never, manager as never, deps as never)
+  await flushAsyncTicks(6)
+
+  return {
+    pane,
+    manager,
+    deps,
+    disposable,
+    getMainBufferSnapshot: window.api.pty.getMainBufferSnapshot as unknown as ReturnType<typeof vi.fn>,
+    emit: capturedDataCallback.current
+  }
+}

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: ed46c02c-941a-49ca-aafb-846a111fb541

📥 Commits

Reviewing files that changed from the base of the PR and between 1e44f43 and 9d28faf.

📒 Files selected for processing (17)
  • src/renderer/src/components/settings/AppearanceAdvancedDisclosure.tsx
  • src/renderer/src/components/settings/AppearancePane.test.tsx
  • src/renderer/src/components/settings/AppearanceWindowSidebarSection.tsx
  • src/renderer/src/components/settings/SettingsFormControls.tsx
  • src/renderer/src/components/settings/TerminalAppearanceSection.ghostty.test.ts
  • src/renderer/src/components/settings/TerminalAppearanceSection.tsx
  • src/renderer/src/components/settings/TerminalCursorAppearanceSection.tsx
  • src/renderer/src/components/settings/TerminalPaneAppearanceSection.tsx
  • src/renderer/src/components/settings/TerminalThemeSections.tsx
  • src/renderer/src/components/settings/TerminalWindowSection.tsx
  • src/renderer/src/components/terminal-pane/pty-connection.test.ts
  • src/renderer/src/components/terminal-pane/pty-connection.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/zh.json
🚧 Files skipped from review as they are similar to previous changes (12)
  • src/renderer/src/components/settings/TerminalPaneAppearanceSection.tsx
  • src/renderer/src/components/settings/AppearanceAdvancedDisclosure.tsx
  • src/renderer/src/components/settings/TerminalCursorAppearanceSection.tsx
  • src/renderer/src/components/settings/SettingsFormControls.tsx
  • src/renderer/src/i18n/locales/zh.json
  • src/renderer/src/components/settings/TerminalWindowSection.tsx
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/components/settings/AppearancePane.test.tsx
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/components/settings/TerminalAppearanceSection.tsx
  • src/renderer/src/i18n/locales/en.json

Co-authored-by: Orca <help@stably.ai>
@brennanb2025

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

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