{"id":"01f0983dcb3beb52","repo":"rust-lang/cargo","slug":"package-id-specification-plural-did-not-match-any","errorCode":null,"errorMessage":"package ID specification{plural} did not match any direct dependencies that could be upgraded","messagePattern":"package ID specification(.+?) did not match any direct dependencies that could be upgraded","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/ops/cargo_update.rs","lineNumber":315,"sourceCode":"                        && spec\n                            .version()\n                            .map_or(true, |v| dep.version_req().matches(&v))\n                })\n            });\n\n            // Track transitive specs for notes at the end\n            if in_lockfile && !matches_direct_dep {\n                transitive_specs.push(spec);\n            }\n        }\n\n        for spec in transitive_specs {\n            error_msg.push_str(&format!(\n                \"\\nnote: `{spec}` exists as a transitive dependency but those are not available for upgrading through `--breaking`\"\n            ));\n        }\n\n        anyhow::bail!(\"{error_msg}\");\n    }\n\n    Ok(upgrades)\n}\n\nfn upgrade_dependency(\n    gctx: &GlobalContext,\n    to_update: &Vec<PackageIdSpec>,\n    registry: &mut PackageRegistry<'_>,\n    upgrades: &mut UpgradeMap,\n    upgrade_messages: &mut HashSet<String>,\n    remaining_specs: &mut IndexSet<PackageIdSpec>,\n    dependency: Dependency,\n) -> CargoResult<Dependency> {\n    let name = dependency.package_name();\n    let renamed_to = dependency.name_in_toml();\n\n    if name != renamed_to {","sourceCodeStart":297,"sourceCodeEnd":333,"githubUrl":"https://github.com/rust-lang/cargo/blob/0e07a155371a6ce88ae53a2c00df940280c09a67/src/ops/cargo_update.rs#L297-L333","documentation":"During breaking-dependency upgrades (update_breaking_deps), each package ID spec given must match a direct registry dependency of some workspace member. Any spec left in remaining_specs after walking all members is unmatched, so cargo_update.rs:315 bails, optionally noting specs that exist only as transitive deps (which --breaking cannot upgrade).","triggerScenarios":"`cargo update --breaking <spec>` (or passing specs that resolve to zero direct deps) where spec is misspelled, refers to a transitive-only dep, or is a path/git dependency (only registry deps are upgradable).","commonSituations":"Trying to upgrade a transitive dep directly via --breaking; typo in the package name; dep was renamed; dep is a workspace/path dep not on a registry.","solutions":["Verify the spec names a direct registry dependency of a workspace member (check Cargo.toml).","For transitive deps, upgrade the direct dependency that pulls them in, or drop --breaking and use `cargo update -p <transitive>`.","Check for renames in Cargo.toml and use the name_in_toml / correct package name."],"exampleFix":"# before\n$ cargo update --breaking -p transitive-only-crate\nerror: package ID specification did not match any direct dependencies ...\n  note: `transitive-only-crate` exists as a transitive dependency ...\n\n# after - upgrade the direct dep, or drop --breaking\n$ cargo update --breaking -p my-direct-dep\n#   or, for a transitive dep without --breaking:\n$ cargo update -p transitive-only-crate","handlingStrategy":"validation","validationCode":"# Confirm each spec is a direct registry dependency before --breaking:\nfor spec in \"$@\"; do\n  name=\"${spec%%:*}\"\n  if ! cargo tree --edges normal --depth 1 2>/dev/null | grep -q \"$name\"; then\n    echo \"$name is not a direct dependency\" >&2; exit 1\n  fi\ndone\ncargo update --breaking \"$@\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only pass direct registry dependencies to `cargo update --breaking`.","Use `cargo tree --depth 1` to enumerate direct deps.","For transitive deps, drop --breaking and use `cargo update -p`."],"tags":["update","dependencies","breaking","lockfile"],"analyzedSha":"0e07a155371a6ce88ae53a2c00df940280c09a67","analyzedAt":"2026-08-06T01:46:58.334Z","schemaVersion":2}