{"record":{"id":"8eb2477b8c64db10","repo":"kovidgoyal/kitty","slug":"invalid-panel-options-specified-e-8eb247","errorCode":null,"errorMessage":"Invalid panel options specified: {e}","messagePattern":"Invalid panel options specified: (.+?)","errorType":"exception","errorClass":"RemoteControlErrorWithoutTraceback","httpStatus":null,"severity":"error","filePath":"kitty/rc/resize_os_window.py","lineNumber":147,"sourceCode":"                    if not panels:\n                        raise RemoteControlErrorWithoutTraceback('Must specify at least one panel setting')\n                    if payload_get('incremental'):\n                        existing = layer_shell_config_for_os_window(os_window_id)\n                        if existing is None:\n                            raise RemoteControlErrorWithoutTraceback(f'The OS Window {os_window_id} has no panel configuration')\n                        from kittens.panel.main import incrementally_update_layer_shell_config\n\n                        try:\n                            lsc = incrementally_update_layer_shell_config(existing, panels)\n                        except Exception as e:\n                            raise RemoteControlErrorWithoutTraceback(str(e))\n                    else:\n                        from kitty.launch import layer_shell_config_from_panel_opts\n\n                        try:\n                            lsc = layer_shell_config_from_panel_opts(panels)\n                        except Exception as e:\n                            raise RemoteControlErrorWithoutTraceback(f'Invalid panel options specified: {e}')\n                    if not set_layer_shell_config(os_window_id, lsc):\n                        raise RemoteControlErrorWithoutTraceback(f'Failed to change panel configuration for OS Window {os_window_id}')\n                elif ac == 'toggle-visibility':\n                    toggle_os_window_visibility(os_window_id)\n                elif ac == 'hide':\n                    toggle_os_window_visibility(os_window_id, False)\n                elif ac == 'show':\n                    toggle_os_window_visibility(os_window_id, True)\n                elif ac == 'toggle-fullscreen':\n                    if not toggle_fullscreen(os_window_id):\n                        raise RemoteControlErrorWithoutTraceback(f'The OS Window {os_window_id} is a desktop panel that cannot be made fullscreen')\n                elif is_panel:\n                    raise RemoteControlErrorWithoutTraceback(\n                        f'The OS Window {os_window_id} is a desktop panel, no actions other than resizing are supported for it'\n                    )\n                elif ac == 'resize':\n                    boss.resize_os_window(\n                        os_window_id,","sourceCodeStart":129,"sourceCodeEnd":165,"githubUrl":"https://github.com/kovidgoyal/kitty/blob/6d5d0c440603ad9bdf6dcd599f73f6dde21acb44/kitty/rc/resize_os_window.py#L129-L165","documentation":"Raised when the panel options payload fails validation in kitty.launch.layer_shell_config_from_panel_opts. The parser expects a dict of recognized panel keys (edge, size, margin, exclusive zone, layer, keyboard interactivity, etc.); unknown keys or bad value types raise, and the handler re-raises as Invalid panel options specified: {e} with the underlying message.","triggerScenarios":"Passing unrecognized keys or wrong types in the os_panel payload, e.g. {'edge': 'diagonal'} or a string size where a number is required.","commonSituations":"Sending raw RPC payloads built by hand instead of via the CLI; version skew where option names changed between kitty releases; JSON numbers sent as strings.","solutions":["Read the underlying message after the colon — it names the failing key/value","Validate keys/types against kitty.launch layer_shell config options (edge in top/bottom/left/right, numeric size/margins, boolean exclusive)","Prefer the documented CLI flags (kitten @ resize-os-window --os-panel-*) so the CLI parser normalizes values for you","Update both client and server kitty versions to match"],"exampleFix":"# before (raw payload)\n{'cmd': 'resize_os_window', 'action': 'os-panel', 'os_panel': {'edge': 'Top', 'size': '40'}}\n# after\n{'cmd': 'resize_os_window', 'action': 'os-panel', 'os_panel': {'edge': 'top', 'size': 40}}","handlingStrategy":"try-catch","validationCode":"ALLOWED = {'edge', 'size', 'margin', 'exclusive', 'layer', 'keyboard_interactivity'}\npanels = {k: v for k, v in panels.items() if k in ALLOWED}\nassert panels.get('edge') in {'top','bottom','left','right'}\nassert isinstance(panels.get('size'), int)","typeGuard":null,"tryCatchPattern":"try:\n    apply_panel_opts(win, panels)\nexcept RCError as e:\n    if str(e).startswith('Invalid panel options'):\n        log_bad_payload(panels); fix_and_retry(panels)","preventionTips":["Whitelist and type-check keys client-side before sending","Prefer kitten @ flags over hand-built RPC payloads","Keep client and daemon kitty versions in sync"],"tags":["kitty","remote-control","os-panel","validation","payload"],"backgroundTag":"schema-validation-failed","analyzedSha":"6d5d0c440603ad9bdf6dcd599f73f6dde21acb44","analyzedAt":"2026-08-27T14:20:20.142Z","schemaVersion":2},"datasetVersion":"2026-08-27T19:17:21.184Z"}