jdx/mise · error
pacman -Q returned no package for satisfied requirement '{}'
Error message
pacman -Q returned no package for satisfied requirement '{}' What it means
During installed() resolution, pacman -T (deptest) said a requirement is satisfied, so mise re-queries `pacman -Q <name>` to attribute it to a provider package; apply_provider_query (src/system/packages/pacman.rs:104) expects a 'name version' line on stdout and bails when there is none. It signals pacman giving inconsistent answers — the dependency is satisfied per -T but unfindable by the name-only local query — typical for virtual/provided packages and versioned provides.
Source
Thrown at src/system/packages/pacman.rs:104
.map(str::trim)
.filter(|line| !line.is_empty())
.collect()
}
fn deptest_requirement(req: &PackageRequest) -> String {
match &req.version {
Some(version) => format!("{}={version}", req.name),
None => req.name.clone(),
}
}
fn apply_provider_query<'a>(
status: &mut PackageStatus,
output: &'a str,
constraint_satisfied: bool,
) -> Result<&'a str> {
let Some((provider, version)) = parse_pacman_package(output) else {
bail!(
"pacman -Q returned no package for satisfied requirement '{}'",
status.request.name
);
};
// The provider's package version is display metadata; pacman -T evaluates
// the requested version against the version declared in Provides.
status.state = if constraint_satisfied {
PackageState::Installed {
version: version.to_string(),
}
} else {
PackageState::VersionMismatch {
installed: version.to_string(),
}
};
Ok(provider)
}
View on GitHub (pinned to 6f52dcdf99)
Solutions
- Reproduce with both commands: `pacman -T <name>` (expect success) then `pacman -Q <name>` (expect the failure)
- Replace the virtual name in config with the real provider package (request gawk instead of awk)
- Refresh the local db (`pacman -Syu`) to clear stale state and retry
- If reproducible, report to mise with both command outputs
Defensive patterns
Strategy: try-catch
Validate before calling
# reproduce the inconsistency before trusting the manager pacman -T "$req" >/dev/null; echo "deptest exit: $?" # 0 = satisfied pacman -Q "$name" # must print "name version" for the provider
Try / catch
if let Err(err) = pacman_manager.installed(&pkgs).await {
if format!("{err:#}").contains("returned no package for satisfied requirement") {
// pacman -T/-Q disagree on a virtual: replace the entry with the real provider name
} else {
return Err(err);
}
} Prevention
- Prefer real package names over capability virtuals in [bootstrap.packages]
- Refresh the local db before package status runs after partial updates
When it happens
Trigger: A [bootstrap.packages] entry naming a virtual package (a capability like 'awk' or a versioned 'foo=1.2') where `pacman -T` exits satisfied but `pacman -Q <name>` prints no parseable package line, because -Q resolves installed names rather than provides.
Common situations: Requesting capability-style virtuals instead of real package names; stale local databases after partial updates; unusual versioned provides in AUR-adjacent packages.
Related errors
- pacman -Qi failed: {}
- pacman -Q failed: {}
- action prediction payload is too large
- task action manifest has an invalid identity
- task action manifest contains duplicate predictions
AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22).
Data as JSON: /api/errors/bef70f239fffbe5d.
Report an issue: GitHub.