vectordotdev/vector · error
removed_in ( ) must be in a later minor release than…
Error message
removed_in ({version}) must be in a later minor release than deprecated_since ({}); the deprecation policy requires at least one minor release between the announcement and removal. Check --version or the fragment's `deprecated_since` field. What it means
Thrown by `cargo vdev deprecation enact` when the removal version (removed_in, from --version or the computed next release) is not a later minor release than the fragment's `deprecated_since`. Policy requires at least one full minor release between the deprecation announcement and its removal.
Solutions
- Pass a --version at least one minor greater than deprecated_since (e.g. deprecated_since 0.49 -> --version 0.50.0 or later).
- Fix the fragment's `deprecated_since` field if it was recorded incorrectly (it cannot be later than the removal).
- Omit --version so the tool defaults to next minor release and only proceed if that satisfies the policy.
- Wait for the required release cycle before enacting the deprecation.
Example fix
// before (deprecated_since = 0.49.0) cargo vdev deprecation enact my-feature --version 0.49.0 // after cargo vdev deprecation enact my-feature --version 0.50.0
Defensive patterns
Strategy: validation
Validate before calling
let removed: Version = version_str.parse()?;
let since: Version = fragment.deprecated_since.parse()?;
if !deprecation::later_minor(&removed, &since) { eprintln!("removed_in must be >= one minor after deprecated_since ({since})"); return; } Type guard
fn removal_is_valid(removed: &Version, since: &Version) -> bool { deprecation::later_minor(removed, since) } Try / catch
match result { Err(e) if e.to_string().contains("must be in a later minor release") => { eprintln!("Bump --version to at least the next minor after deprecated_since"); } Err(e) => return Err(e), Ok(v) => v } Prevention
- Schedule removals at least one minor after announcement
- Cross-check --version against the fragment's deprecated_since before enacting
- Omit --version to let the tool pick the next minor, then verify it satisfies policy
When it happens
Trigger: Calling enact where later_minor(&version, &entry.deprecated_since.0) is false — e.g. enacting for the same minor the fragment was announced in, or an earlier one.
Common situations: Occurs when a maintainer tries to remove a feature too soon after announcing it, or when --version is set to the current release rather than the next minor.
Understand the failure class
Background: "value must be between 0 and 1" / "out of range" / "must not be negative" errors: fixing range-validation failures across open-source libraries — this error's family across 42 libraries.
Related errors
- Conflicting enacted entry for
- Enacted entry ' ' has removed_in ( ) that is not in a later…
- fragment(s) have a deprecated_since version newer than the…
- Mismatched enacted entry for
- Could not find version
AI-assisted analysis of vectordotdev/vector@bdb87aeaa4 (2026-09-16).
Data as JSON: /api/errors/c921b58c114db929.
Report an issue: GitHub.
Appendix: source
Thrown at vdev/src/commands/deprecation/enact.rs:64
.find(|e| e.filename == filename)
.ok_or_else(|| anyhow::anyhow!("Could not parse {filename}"))?;
let version = if let Some(v) = self.version {
// Reject `--version 0.58.0-alpha` and friends: only release-shaped
// semver is valid here.
if !v.pre.is_empty() || !v.build.is_empty() {
bail!(
"--version {v} has prerelease or build metadata; only plain X.Y.Z is allowed"
);
}
v
} else {
let latest = git::latest_release_version()?;
Version::new(latest.major, latest.minor + 1, 0)
};
if !deprecation::later_minor(&version, &entry.deprecated_since.0) {
bail!(
"removed_in ({version}) must be in a later minor release than deprecated_since ({}); \
the deprecation policy requires at least one minor release between \
the announcement and removal. \
Check --version or the fragment's `deprecated_since` field.",
entry.deprecated_since
);
}
let enacted = deprecation::EnactedEntry {
what: entry.what.clone(),
deprecated_since: entry.deprecated_since.to_string(),
removed_in: version.to_string(),
description: entry.description.clone(),
};
// Append to enacted JSON.
deprecation::append_enacted(&repo_root, enacted)?;
println!("Recorded enacted entry for: {}", entry.what);View on GitHub (pinned to bdb87aeaa4)