feat: rotate wallpapers independently per display (#27075)
Fixes #27075
Leo asked: “can you have it sync up with the desktop wallpapers? And, you know, like if you have different displays, that might have different kinds of situations that you can run into.” He also asked for wallpapers that “swap” “on whatever cadence.”
This adds opt-in per-display background and cadence overrides while preserving the global defaults from #22577. A stable NSScreenNumber binds a window to its display; screen changes rebind immediately, workspace and pane pins keep precedence, and stop() cancels the cadence timer and removes the observer. The display map accepts daily, folder:<absolute path>, fixed selections, and explicit none.
Coverage first reproduces independent display folder/hourly cadence, moves between screens, global fallback, workspace opt-outs, and observer cleanup in DisplayBackdropBindingTests. The binding is wired into each WindowController and follows settings snapshots.
Fleet focused check: cmux-ci run --class light --script scripts/ci/package-test-lane.sh --ref d40d897f009d4bc480982b17f02fe2b68de0cb59 --key wallpaper-rotation-d40d897f --arg=suite --arg=Packages/macOS/CmuxNext --arg=CmuxNextSettingsTests.DisplayBackdropBindingTests --env CMUX_CI_XCODE_APP=/Applications/Xcode_26.6.app --timeout 3000 (step pending).
Reference inspected: cmux-design-references/apps/t3-code/live/settings-appearance-themes.png and its NOTES; this behavior adds no motion or visual redesign. The supported capture-host two-display primitive is ready for the fleet capture owner; no synthetic/private image is included.
Exact-head fleet capture at 45379eb17c4483ffbf94641a0b5a23c157c388f3: six two-display states passed (global painting, UUID-keyed folder override, 0→1→0 restoration, explicit none, and global daily/hourly cadence inheritance). Build bf802bf611ed2adff6a4d83f, artifact sha256:a1252018c78d07071961bb0b6a81f0edb2ef62f1e7bc0be4c8d57c1ffb09c9f7.
Agent session: agent session