{"record":{"id":"c36fe2b5eb987231","repo":"vectordotdev/vector","slug":"the-specified-version-new-must-be-a-single-patch-minor-or","errorCode":null,"errorMessage":"The specified version '{new}' must be a single patch, minor, or major bump from {last}","messagePattern":"The specified version '(.+?)' must be a single patch, minor, or major bump from (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"vdev/src/commands/release/generate_cue.rs","lineNumber":266,"sourceCode":"                .parse::<u32>()\n                .ok()\n        })\n        .max()\n        .unwrap_or(0);\n\n    let content = format!(\n        \"---\\ntitle: Vector v{version} release notes\\nweight: {}\\n---\\n\",\n        max_weight + 1\n    );\n    atomic_write(&stub_path, &content)?;\n    Ok(())\n}\n\n// ---------- Tag / version discovery ----------\n\nfn validate_single_bump(last: &Version, new: &Version) -> Result<()> {\n    if bump_type(last, new).is_none() {\n        bail!(\n            \"The specified version '{new}' must be a single patch, minor, or major bump from {last}\"\n        );\n    }\n    Ok(())\n}\n\n/// Returns Some(\"patch\"|\"minor\"|\"major\") if `new` is exactly one bump above `last`, else None.\nfn bump_type(last: &Version, new: &Version) -> Option<&'static str> {\n    if new <= last {\n        return None;\n    }\n    let patch = Version::new(last.major, last.minor, last.patch + 1);\n    let minor = Version::new(last.major, last.minor + 1, 0);\n    let major = if last.major == 0 {\n        Version::new(0, last.minor + 1, 0)\n    } else {\n        Version::new(last.major + 1, 0, 0)\n    };","sourceCodeStart":248,"sourceCodeEnd":284,"githubUrl":"https://github.com/vectordotdev/vector/blob/0d4ab78a4f0d9c9e5d03a50108a2ae4d2f4b2460/vdev/src/commands/release/generate_cue.rs#L248-L284","documentation":"`validate_single_bump` enforces that the requested release version is exactly one patch, minor, or major increment above the last tagged version. If `bump_type(last, new)` returns none (e.g. skipping a version, downgrading, or a pre-release mismatch), the command fails with this message.","triggerScenarios":"Running `vdev release generate-cue <version>` where `<version>` is more than one bump above the latest tag (e.g. last=0.45.0, new=0.47.0), is lower than the last tag, or is otherwise not a single patch/minor/major step.","commonSituations":"Typo in the version argument; skipping a release that was decided to be cut; releasing from a branch that has missed intermediate versions; forgetting the actual latest tag on a fork or shallow clone.","solutions":["Run the command with the next single version bump (e.g. last=0.45.0 → use 0.45.1, 0.46.0, or 1.0.0).","If multiple versions must be cut, generate each release one bump at a time.","Check the actual latest tag with `git tag --sort=-v:refname | head` and align your version argument to it."],"exampleFix":"// before\nvdev release generate-cue 0.47.0   # last tag is 0.45.0 → two bumps\n// after\nvdev release generate-cue 0.46.0\nvdev release generate-cue 0.47.0","handlingStrategy":"validation","validationCode":"LAST=$(git tag --sort=-v:refname | head -1); echo \"next versions: patch/minor/major bump of $LAST\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always derive the next version from the latest tag, not memory.","Cut intermediate releases one at a time; never skip versions.","Script the version bump calculation instead of typing it manually."],"tags":["cli","release-tooling","versioning"],"backgroundTag":"invalid-argument-value","analyzedSha":"0d4ab78a4f0d9c9e5d03a50108a2ae4d2f4b2460","analyzedAt":"2026-09-16T02:53:35.741Z","contentChangedAt":"2026-09-16T02:53:35.741Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}