{"record":{"id":"cd69d8baf3437256","repo":"wezterm/wezterm","slug":"missing-cursor-x","errorCode":null,"errorMessage":"missing cursor_x","messagePattern":"missing cursor_x","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"mux/src/tmux_commands.rs","lineNumber":702,"sourceCode":"            if line.is_empty() {\n                continue;\n            }\n            let mut fields = line.split(' ');\n            // These ids all have various sigils such as `$`, `%`, `@`,\n            // so skip those prior to parsing them\n            let session_id =\n                parse_sigil_number(fields.next().ok_or_else(|| anyhow!(\"missing session_id\"))?)?;\n            let window_id =\n                parse_sigil_number(fields.next().ok_or_else(|| anyhow!(\"missing window_id\"))?)?;\n            let pane_id =\n                parse_sigil_number(fields.next().ok_or_else(|| anyhow!(\"missing pane_id\"))?)?;\n            let _pane_index = fields\n                .next()\n                .ok_or_else(|| anyhow!(\"missing pane_index\"))?\n                .parse()?;\n            let cursor_x = fields\n                .next()\n                .ok_or_else(|| anyhow!(\"missing cursor_x\"))?\n                .parse()?;\n            let cursor_y = fields\n                .next()\n                .ok_or_else(|| anyhow!(\"missing cursor_y\"))?\n                .parse()?;\n            let pane_width = fields\n                .next()\n                .ok_or_else(|| anyhow!(\"missing pane_width\"))?\n                .parse()?;\n            let pane_height = fields\n                .next()\n                .ok_or_else(|| anyhow!(\"missing pane_height\"))?\n                .parse()?;\n            let pane_left = fields\n                .next()\n                .ok_or_else(|| anyhow!(\"missing pane_left\"))?\n                .parse()?;\n            let pane_top = fields","sourceCodeStart":684,"sourceCodeEnd":720,"githubUrl":"https://github.com/wezterm/wezterm/blob/9c04f79f86649f76a8c978ff4b674f60297a6ec9/mux/src/tmux_commands.rs#L684-L720","documentation":"Same ListAllPanes parser: the fifth field (cursor_x) is missing from a list-panes line that already yielded session_id, window_id, pane_id and pane_index. A present-but-non-numeric cursor_x would raise a ParseIntError instead.","triggerScenarios":"list-panes output truncated after four columns — custom tmux format overrides, a wrapper emitting partial lines, or output interleaving where a line break lands mid-record.","commonSituations":"Heavily customized tmux setups, or tmux built from source with patches; also seen when the tmux control stream mixes in partial writes under load.","solutions":["Run `tmux list-panes -F '#{session_id} #{window_id} #{pane_id} #{pane_index} #{cursor_x} ...'` manually and inspect for 4-column lines","Test with a clean tmux server (`tmux -f /dev/null new-session -d`) to rule out config/plugins","Upgrade tmux; retry the domain attach after restarting the tmux server (`tmux kill-server`)","File a wezterm issue including tmux version and the raw malformed line"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"let cols: Vec<&str> = line.split(' ').collect();\nif cols.len() < 11 || cols.get(4).map(|s| s.parse::<u32>().is_ok()) != Some(true) {\n    log::warn!(\"skipping line without numeric cursor_x: {line:?}\");\n    continue;\n}","typeGuard":null,"tryCatchPattern":"Err(e) if e.to_string().contains(\"missing cursor_x\") => {\n    log::warn!(\"list-panes reply truncated at cursor_x; resync domain: {e:#}\");\n}","preventionTips":["Wrap tmux traffic over stable transports (avoid flaky ssh multiplexers that truncate streams)","After tmux upgrades, run one manual attach and watch logs before automating against the domain"],"tags":["tmux","parsing","mux","rust","wezterm"],"backgroundTag":"tmux-output-parse-failed","analyzedSha":"9c04f79f86649f76a8c978ff4b674f60297a6ec9","analyzedAt":"2026-08-16T21:23:27.157Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}