{"record":{"id":"e2de58b75c132c2c","repo":"GitoxideLabs/gitoxide","slug":"unsupported-rebase-todo-command-verb","errorCode":null,"errorMessage":"unsupported rebase todo command {verb:?}","messagePattern":"unsupported rebase todo command (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"gix-tix/src/edit/todo.rs","lineNumber":992,"sourceCode":"                    anyhow::bail!(\"a pick is outside the editable history\");\n                }\n                if picked.contains_key(&id) {\n                    anyhow::bail!(\"a commit is picked more than once\");\n                }\n                if resolved {\n                    rebase::PlanCommit::Resolved(id)\n                } else {\n                    rebase::PlanCommit::Pick(id)\n                }\n            }\n            \"empty\" => {\n                let title = if value.trim().is_empty() { tail } else { value.trim() };\n                if title.is_empty() {\n                    anyhow::bail!(\"an empty commit needs a title\");\n                }\n                rebase::PlanCommit::Empty(BString::from(title))\n            }\n            _ => anyhow::bail!(\"unsupported rebase todo command {verb:?}\"),\n        };\n        let index = steps.len();\n        if let rebase::PlanCommit::Pick(id) | rebase::PlanCommit::Resolved(id) = commit {\n            picked.insert(id, index);\n        }\n        steps.push(rebase::PlanStep {\n            parent,\n            commit,\n            squash: Vec::new(),\n        });\n        cursor = Some(rebase::PlanParent::Step(index));\n        section_last_step = Some(index);\n        if marked {\n            let target = rebase::PlanParent::Step(index);\n            if checkout_target.is_some_and(|checkout| checkout != target) {\n                anyhow::bail!(\"the @ command and @ reference point to different results\");\n            }\n            checkout_target = Some(target);","sourceCodeStart":974,"sourceCodeEnd":1010,"githubUrl":"https://github.com/GitoxideLabs/gitoxide/blob/e73179060badf27222d790981fac3f84c1830a7e/gix-tix/src/edit/todo.rs#L974-L1010","documentation":"Terminal validation arm in `edit::todo::parse`: after handling the recognized verbs (`pick`, `empty`, `squash`, `reset`, etc.), any remaining unknown command word causes this bail with the offending verb quoted. The rebase-todo grammar only accepts a fixed verb set, so a typo, a git-rebase verb the tool doesn't support (e.g. `exec`, `fixup` variants), or a corrupted line triggers it. Fix by correcting the verb to one of the supported commands or deleting the line.","triggerScenarios":"`parse_plan` encounters a verb like `reword`, `fixup`, `exec`, `drop`, `label`, or a typo such as `pik`, in the todo text.","commonSituations":"Feeding a git-generated todo (which contains `pick`, `exec`, `fixup`, etc.) directly into this stricter editor API; typos; scripts emitting non-standard verbs; locale or alias differences.","solutions":["Use only the supported verbs in the todo (e.g. pick, squash, empty)","Rewrite unsupported git verbs (fixup/reword/exec/drop) into supported equivalents before parsing","Fix typos in the command verb"],"exampleFix":"// before\nfixup abc123\n// after\nsquash abc123","handlingStrategy":"validation","validationCode":"const SUPPORTED: [&str; 3] = [\"pick\", \"squash\", \"empty\"];\nfor line in todo.lines() {\n    if let Some(verb) = line.split_whitespace().next() {\n        if !SUPPORTED.contains(&verb) {\n            anyhow::bail!(\"unsupported verb {verb}; use pick, squash, or empty\");\n        }\n    }\n}","typeGuard":"fn is_supported_verb(verb: &str) -> bool {\n    matches!(verb, \"pick\" | \"squash\" | \"empty\")\n}","tryCatchPattern":"match parse_plan(...) {\n    Err(e) if e.to_string().contains(\"unsupported rebase todo command\") => { /* rewrite unsupported verbs */ }\n    other => other?,\n}","preventionTips":["Translate git-generated verbs (fixup, reword, exec, drop) into supported ones before parsing","Validate verbs against the supported set before calling the parser","Avoid feeding raw `git rebase -i` todo files directly into this API"],"tags":["git","rebase","todo-parsing","unsupported-command"],"backgroundTag":"invalid-enum-value","analyzedSha":"e73179060badf27222d790981fac3f84c1830a7e","analyzedAt":"2026-09-08T11:26:50.865Z","contentChangedAt":"2026-09-08T11:26:50.865Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}