cmux-tui: refuse tabs.newTabKind and tabs.hiddenButtons as removed, and keep the retired keys in step with the app
Summary
The settings export leaves retired keys out, so cmux-tui keeps its own copy of the app's retired-key list (cmux-config/src/schema/retired.rs). That copy had fallen behind. tabs.newTabKind (#20127) and tabs.hiddenButtons (#20144) were retired in the app but not here. With no schema row and no retired entry for them, a cmux-tui settings set on either key went down the unknown-path branch, which can write a value nothing reads. The app refuses it as removed.
- Adds both keys, with the app's reasons.
tests/retired_parity.rsreads the app'sretiredKeysliteral (SettingsSchema+Retired.swift, viainclude_str!) and compares keys and reasons withRETIRED_KEYS, so the next key the app retires fails here until it is mirrored.
Verification
every_key_the_app_retired_is_refused_here_with_its_reason, run with scripts/verify-cmux-tui-hosted.sh --filter:
- Red on 91616deb3a73 (run 38350778388, Linux and macOS): the left side had
appearance.tabBarBackgroundandupdates.quietHours; the right side also hadtabs.hiddenButtonsandtabs.newTabKind. - Green on 35457bb63f78 (run 38353713501): Linux and macOS tests, Linux lint and macOS clippy, and MSRV pass.
- Windows: no check needed. The change is a const table entry in cmux-config plus a test, and it doesn't touch cmux-tui-core or cmux-tui.
Changelog
Fixed: cmux-tui refuses settings set on the removed tabs.newTabKind and tabs.hiddenButtons keys, as the app does.
🤖 Generated with Claude Code
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Makes settings set reject removed tabs.newTabKind and tabs.hiddenButtons as removed, matching the app instead of writing unused values.
- Mirrors the app’s retirement reasons and checks exact key/reason parity.
- Tracks the app’s retired-key source in the cmux-tui tree key and artifact workflow, so Swift-only retirements trigger validation.