cmux-next settings: the Motion switches get a home on the Appearance page (Settings base reds)

Merged
TE
16d ago
+58-9

Summary

The Motion switches (ui.animations.enabled and the ten per-area switches, group settings.group.motion) never showed on the Settings page: SettingsPageLayout never placed their group, so the page dropped all eleven rows. They now sit in Appearance, right after Density and Motion. @lawrencecchen, this is your Motion feature; please check the placement.

That missing group, plus the rows the last schema regeneration exported, turned four web / react-apps-check tests red on the base (push 3cc9733dfc, run 39503278983):

  • categories.test.ts "every page row has exactly one home": the 11 Motion rows had no home. Fixed by the layout change.
  • editors.test.tsx "every schema row renders the editor for its kind": the density card draws appearance.density and the custom density keys itself (SectionView hides those rows), and browser.siteEngines is a string_map, which the page has no editor for, so it drew a title with no control. SectionView and search now leave string_map rows out, as they already did for appearance.themeEdits, and the test knows about the density card.
  • settings-scroll.test.ts (WebKit, Appearance top to bottom): WebKit moves about 110px per 120px wheel step and 80 steps stopped short of the longer page. The cap is now 200; the loop still stops at the end.
  • settings-open-frames.test.ts (cold open): see Testing.

The page-layout and webview commits are Leo's from #22543 (d1973b0886, 013985639a, 86081a806b), cherry-picked on their own because #22543 also carries workflow and guard changes and conflicts with the base.

A new Swift test, SettingsPageLayoutHomeTests, fails when a row the page shows has no home or two in SettingsPageLayout, so this is caught where the schema changes instead of only in the web check after the Mac export.

The settings exports (schemas/settings/settings-schema.json, its source stamp, docs/mdm) are regenerated on a Mac by the PR autofix, the established path for them.

Testing

Run from webviews/:

  • bun test src/pages/settings/categories.test.ts: red on the base (every page row has exactly one home), green on the head with the Motion group in the exported page layout (simulated locally until the autofix regenerates the export).
  • bun test src/pages/settings/editors.test.tsx: red on the base, 20/20 on the head.
  • CMUX_BROWSER_TESTS=1 bun test test/settings-scroll.test.ts: red on the base (WebKit "Expected: 9461, Received: 9275").

Observed / Not run

  • Observed: the two bun test results above, and settings-scroll red on the base.
  • Not run locally: settings-scroll and settings-open-frames on the head. This Linux host's bun is 1.3.14 (CI pins 1.4.2), and warmDevServer times out here before either test starts. They run in this PR's web / react-apps-check.
  • Not run: SettingsPageLayoutHomeTests. The fleet suite step failed before the tests ran (the cmux-tui build stopped on a Cargo.lock --locked error, then the step was cancelled). The PR's Swift lanes run it.

Changelog

Fixed: Settings > Appearance shows the Motion switches (motion on or off, and each area's animations)

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Fixes the Motion switches never appearing on the Settings page: SettingsPageLayout never placed settings.group.motion, so all eleven rows were dropped. They now sit in Appearance after the Density & Motion group, and a new Swift test catches any future row without a home at schema time.

  • SectionView and search leave string_map rows out (like browser.siteEngines, edited in cmux.json), matching how appearance.themeEdits was already handled.
  • Bumps the WebKit scroll test cap from 80 to 200 steps so Appearance's now longer page is reached; the loop still stops at the end.
  • A cold Settings open now draws its first category whole instead of 24 rows first, so the page no longer grows after the first frame.