{"record":{"id":"c921b58c114db929","repo":"vectordotdev/vector","slug":"removed-in-version-must-be-in-a-later-minor-release-than","errorCode":null,"errorMessage":"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.","messagePattern":"removed_in \\((.+?)\\) 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\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"vdev/src/commands/deprecation/enact.rs","lineNumber":64,"sourceCode":"            .find(|e| e.filename == filename)\n            .ok_or_else(|| anyhow::anyhow!(\"Could not parse {filename}\"))?;\n\n        let version = if let Some(v) = self.version {\n            // Reject `--version 0.58.0-alpha` and friends: only release-shaped\n            // semver is valid here.\n            if !v.pre.is_empty() || !v.build.is_empty() {\n                bail!(\n                    \"--version {v} has prerelease or build metadata; only plain X.Y.Z is allowed\"\n                );\n            }\n            v\n        } else {\n            let latest = git::latest_release_version()?;\n            Version::new(latest.major, latest.minor + 1, 0)\n        };\n\n        if !deprecation::later_minor(&version, &entry.deprecated_since.0) {\n            bail!(\n                \"removed_in ({version}) must be in a later minor release than deprecated_since ({}); \\\n                 the deprecation policy requires at least one minor release between \\\n                 the announcement and removal. \\\n                 Check --version or the fragment's `deprecated_since` field.\",\n                entry.deprecated_since\n            );\n        }\n\n        let enacted = deprecation::EnactedEntry {\n            what: entry.what.clone(),\n            deprecated_since: entry.deprecated_since.to_string(),\n            removed_in: version.to_string(),\n            description: entry.description.clone(),\n        };\n\n        // Append to enacted JSON.\n        deprecation::append_enacted(&repo_root, enacted)?;\n        println!(\"Recorded enacted entry for: {}\", entry.what);","sourceCodeStart":46,"sourceCodeEnd":82,"githubUrl":"https://github.com/vectordotdev/vector/blob/bdb87aeaa4c4ff27c0ba643c1c77b21bf2ef4013/vdev/src/commands/deprecation/enact.rs#L46-L82","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before (deprecated_since = 0.49.0)\ncargo vdev deprecation enact my-feature --version 0.49.0\n// after\ncargo vdev deprecation enact my-feature --version 0.50.0","handlingStrategy":"validation","validationCode":"let removed: Version = version_str.parse()?;\nlet since: Version = fragment.deprecated_since.parse()?;\nif !deprecation::later_minor(&removed, &since) { eprintln!(\"removed_in must be >= one minor after deprecated_since ({since})\"); return; }","typeGuard":"fn removal_is_valid(removed: &Version, since: &Version) -> bool { deprecation::later_minor(removed, since) }","tryCatchPattern":"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 }","preventionTips":["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"],"tags":["deprecation","versioning","policy"],"backgroundTag":"value-out-of-range","analyzedSha":"bdb87aeaa4c4ff27c0ba643c1c77b21bf2ef4013","analyzedAt":"2026-09-16T02:53:35.741Z","contentChangedAt":"2026-09-16T02:53:35.741Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}