cmux-tui: refuse tabs.newTabKind and tabs.hiddenButtons as removed, and keep the retired keys in step with the app

Closed
TE
24d ago
+50-4

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.rs reads the app's retiredKeys literal (SettingsSchema+Retired.swift, via include_str!) and compares keys and reasons with RETIRED_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.tabBarBackground and updates.quietHours; the right side also had tabs.hiddenButtons and tabs.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


View with [code]smith Autofix with [code]smith
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.