Skip to content

feat(settings): fold each page's rarely changed rows under More settings and Experimental - #3096

Merged
devswha merged 3 commits into
mainfrom
feat/settings-folds
Nov 6, 2026
Merged

devswha merged 3 commits into
mainfrom
feat/settings-folds

Conversation

@devswha

@devswha devswha commented Nov 6, 2026

Copy link
Copy Markdown
Owner

What

Each Settings page now shows the settings people change first, and folds the rest under one quiet line at its end: More settings, plus Experimental for what is still being shaped. Nothing is removed and no value changes.

  • First view: 40 rows across the pages, down from 88 (Shortcuts aside): Appearance 9, Chat 9, Terminal 4, Alerts 4, Voice input 2, Agents 5, Phone & devices 3, Remote PCs 2, About 2.
  • What stays up front: rows that installs often move off their default, plus what a first setup needs. Rows that are rarely moved, or are opt-in, go under More settings. Rows labelled experimental go under Experimental.
  • Count on the folded line: it shows how many of the settings inside this device changed ("1 changed", in the accent colour), so a choice never hides without a trace.
  • Search: Settings' search (feat(settings): search every page's settings from the dialog #3085) shows folded rows as if unfolded.
  • Links and the palette: a link or a palette pick that names a group inside a fold opens the fold on that group. The new groups are typography-more, sidebar-more, chat-more, composer-more, file-viewer-more, chat-experimental, terminal-more, alerts-more, voice-more and remote-more. The palette gets entries for the moved Composer and Typography rows, and for the Experimental chip.
  • Implementation: SettingsFold is a native details, so the browser's find-in-page opens it too.
  • Phone layout: Open files and Web links stack on a phone (they read in a narrow column before).

Design: herdr-app keeps its Settings to about a dozen rows and leaves the rest to its settings file. Ovis keeps every row reachable, but out of the first view. DESIGN.md → Settings dialog has the entry.

Validation

  • bun run check fast on the pushed head: all green (typecheck, build, unit tests).
  • Unit: paletteSettings (the new entries; the matrix's Send queued / Suggestion chip rows now land on composer-more), i18n, conventions and settings all pass.
  • Browser, all PASS on this branch, with one shared demo build:
    • settings-pages-demo-regression.ts, including the new foldedGroups step at 1440 and 390. The step checks that a fold is closed on opening, shows "1 changed", opens on click, opens when a link names a group inside it (the group is focused), and that search finds a folded row.
    • Also: agent-groups, agent-helpers-fold, agent-lock, alert-webhook, chat-request-details, chat-size, composer-fit, files-documents, files-panel, file-text-size, follow-focus, interface-font, markdown-outline, omp-codex-image, pc-load, pending-pane-switch, portal, security-summary, settings-tabs, sidebar-agent-tree, sidebar-background-workspaces, sidebar-context-ring, sidebar-declutter, sidebar-filter, sidebar-peek, sidebar-split-access, sidebar-split, terminal-ghostty, terminal-images, terminal-keyboard, terminal-release-no-watch, text-file-edit and virtual-source.
    • Scripts that reach a folded row now open the fold first, as a reader would: openSettingsPage does it, and openSettingsFolds or a link to the group's own section does it elsewhere. heldGroupLanding runs at 390×480, so the OpenAI key's group still starts below the fold.
  • text-file-edit-regression.ts timed out once on the file editor's text box while six scripts ran at once; alone it passes (all 1280 and 390 steps).
  • Failing on main too, so not caused by this PR: font-swap-demo-regression.ts and ui-regression.ts, run on a clean origin/main checkout with the same results.
  • Not run locally: bun run check full and the rest of the browser lane (CI runs them).

Screenshots (demo build)

Light Dark
1280 Appearance, folded
1280 Appearance, More settings open
1280 Chat
390 Appearance
390 Chat
390 Terminal

…ngs and Experimental

Each Settings page shows first what people change and folds the rest under More settings and Experimental (SettingsFold, a native details) at its end; the folded line counts the settings in it this device changed. Settings' search shows folded rows as if unfolded, and a link or the palette naming a group inside opens the fold (new groups typography-more, composer-more, file-viewer-more, chat-experimental, ...). The first view is 40 rows across the pages, Shortcuts aside, down from 88. Nothing is removed. Open files and Web links stack on a phone.
@coderabbitai

coderabbitai Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 19 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

Learn how review limits work.

Review configuration:

Run configuration

Commits

Reviewing files that changed from the base of the PR and between e88044a and d97bc47.

Files selected for processing: 20

  • DESIGN.md
  • changelog.d/settings-folds.md
  • scripts/file-text-size-demo-regression.ts
  • scripts/files-documents-demo-regression.ts
  • scripts/files-panel-demo-regression.ts
  • scripts/interface-font-demo-regression.ts
  • scripts/security-summary-demo-regression.ts
  • scripts/settings-page.ts
  • scripts/settings-pages-demo-regression.ts
  • scripts/sidebar-split-access-demo-regression.ts
  • scripts/terminal-images-demo-regression.ts
  • scripts/text-file-edit-regression.ts
  • src/components/SettingsControls.css
  • src/components/SettingsControls.tsx
  • src/components/SettingsDialog.tsx
  • src/lib/i18n/settings-layout.ja.ts
  • src/lib/i18n/settings-layout.ko.ts
  • src/lib/i18n/settings-layout.zh.ts
  • src/lib/paletteSettings.test.ts
  • src/lib/paletteSettings.ts
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

…ge in sight

Review of #3096: the Also send to group stays in the Alerts page's first view, where its last failed post is said, and the bridge switch's refusal is drawn beside the switch in its fold (and in a search).
@devswha

devswha commented Nov 6, 2026

Copy link
Copy Markdown
Owner Author

Review (omo + Codex Terra xhigh) and resolutions

omo: CLEAR at 09ebeb0. Codex: no HIGH; two MEDIUM and two LOW, traced in code (not run).

Finding Severity Status
The bridge switch moved into the fold, but its refusal (pcSettingsError) stayed in the first group, so a search showing the switch hid the error MEDIUM Fixed in this push: the refusal is drawn beside the switch, in its fold and in a search
A webhook destination's "Last post failed" status sat in the closed Alerts fold with no sign on its line MEDIUM Fixed: Also send to stays in the Alerts page's first view (first view now 41 rows)
The fold's count covers Settings keys only: Stopped on an error (alertFilters), the server's bridge switch and a webhook are not counted LOW Not changed: the count is the device's own settings; noted for a follow-up if wanted
A saved choice whose row is hidden by its condition (Within a state with grouping off, tidy options with the browser engine) still counts LOW Not changed: the value is still saved and comes back with its row

CodeRabbit did not review this head (review limits).

Validation after the fix and merging main: bun run check fast green; alert-webhook-demo-regression.ts, pc-load-demo-regression.ts, settings-pages-demo-regression.ts and markdown-outline-browser-qa.ts PASS on the pushed head.

@devswha

devswha commented Nov 6, 2026

Copy link
Copy Markdown
Owner Author

Local merge gate (owner-approved): bun run check fast passed at this head, omo CLEAR at this head, Codex MEDIUMs fixed (webhook failure hidden in a fold; bridge switch error placement), threads resolved, merges cleanly; 34 settings-related browser regressions pass (text-file-edit timed out once under parallel load and passes alone; font-swap and ui-regression fail on main too, tracked separately); screenshots 390/1280 light/dark. Second step of the owner-requested Settings simplification: first view 88 -> 41 rows, nothing removed; folds show how many rows were changed, search and links open them. Merged without waiting for GitHub CI.

@devswha
devswha merged commit 3904098 into main Nov 6, 2026
14 of 15 checks passed
@devswha
devswha deleted the feat/settings-folds branch November 6, 2026 01:37
devswha added a commit that referenced this pull request Nov 6, 2026
…s in the font-swap script (#3105)

## What it changes

Two browser scripts were red on `main` in the CI runner image
(`herdr-ci-runner:local`). Both now follow the app as it is today, and
each still asserts what it asserted before.

- **`scripts/ui-regression.ts`** (CI's required "Browser regression
(ui-regression)" job): #3096 moved the Suggestion chip switch into the
Composer's "More settings" fold, so `?settings=chat&section=composer` no
longer showed it, and `setChecked` timed out after 30 s waiting for the
switch. The script now opens `section=composer-more`, the link #3096
added, which opens that fold. The steps and assertions after it are
unchanged.
- **`scripts/font-swap-demo-regression.ts`** (manual script; it is not
in CI's browser list): it stripped `local()` sources from the built
stylesheet and asserted that it had found at least one. #2272 removed
the last `local()` face (JetBrains Mono is always the bundled file), so
this assertion has failed since #2272. The point of that step, that a
font request the script holds is the only way to a face, now holds by
construction, so the script asserts that no built stylesheet names a
`local()` face, instead of stripping them. If one comes back, the script
fails and says so.

No product code changes.

## Validation

- In `herdr-ci-runner:local` (CI env, a fresh copy of the branch, `bun
install --frozen-lockfile`, `bun run build`):
- on `origin/main` 3904098: `font-swap-demo-regression` FAIL ("the
built stylesheet names an installed face..."), `ui-regression` FAIL
(`waiting for getByRole('switch', { name: 'Suggestion chip' })`),
`interface-font-demo-regression` PASS.
- on this branch: `font-swap-demo-regression` PASS (all 5 cases),
`ui-regression` exit 0.
- `bun run check fast`: green. A first run had one
`scripts/plugin.test.ts` failure (ENOENT on the stand-in's output while
the PC was under heavy load). That test passes alone, and a second full
run had 12525 pass and 0 fail.
- Skipped: the integration suite and the other browser scripts (only
these two scripts changed).
devswha added a commit that referenced this pull request Nov 6, 2026
## What

Settings keeps a few more rarely changed rows out of the first view,
under each page's **More settings** fold (the `SettingsFold` from
#3096). Nothing is removed, no default changes, and no stored value
moves.

| Page | Row | Now |
|---|---|---|
| Alerts | Needs input, Needs permission, Finished | More settings, in a
new **Alert me when** group (`alert-kinds`) with Stopped on an error |
| Chat | Dictation language | More settings, at the top of the voice
group (`voice-more`) |
| Chat | Wrap long lines | More settings, File viewer
(`file-viewer-more`) |
| Chat | Quick replies list | shown only while **Show above the message
box** is on |
| Devices and PCs | Keep screen on | More settings, new **Phone** group
(`phone-more`) |
| Appearance | Name tabs from the first message | More settings, Sidebar
(`sidebar-more`) |

- The fold's "n changed" count now also counts `alertInput`,
`alertDone`, `voiceLanguage`, `wrapCode`, `keepScreenOn` and
`autoTabNames`, so a moved value is never hidden without a trace.
- Settings search shows folded rows as if unfolded, and a link naming a
group inside a fold opens it. Both behave as before (#3096).
- One new string, "Alert me when" (ko/ja/zh added). A changelog fragment
and the DESIGN.md Settings entry are updated.
- First view: Alerts goes from 6 rows to 3, Chat from 11 to 9 (plus the
5-field list, which is now hidden while off), Devices and PCs from 5 to
4, and Appearance from 9 to 8.

Design: same rule as #3096. Rows few people change go into the fold, the
way herdr-app keeps its Settings short.

## Validation

- `bun run check fast` on 4aa8523: green (typecheck, build, unit 12617
pass / 0 fail). DESIGN.md commit: conventions tests 59 pass.
- Browser regressions in the self-hosted CI runner image
(`herdr-ci-runner:local`, isolated herdr), all PASS:
`settings-pages-demo`, `wake-lock`, `push-settings`,
`alert-webhook-demo`, `droplet-demo`, `droplet`, `pane-mute-demo`,
`split-view`, `file-viewer`, `ui-regression`.
- `alert-sound-regression` fails at setup ("the status subscription
includes the new panes"). It fails the same way on origin/main 74976f2
in the same image, so this PR did not cause it.
- Screenshots before/after at 1280 and 390, light and dark (Alerts,
Chat, Devices and PCs, Appearance), from the demo build. Shared with the
maintainer.
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