jdx/mise · warning · eyre::Report
receipt target inventory contains an unclassified path
Error message
receipt target inventory contains an unclassified path
What it means
Every path in receipt.targets must be classifiable — it must appear in at least one of the receipt's apps/binaries/fonts/completions lists, because the validator applies per-kind rules (directory/symlink/file, allowed roots, staged-copy match). A target record whose path is in none of those lists is 'unclassified', and the prune is refused since the validator cannot decide which rule set applies.
Solutions
- Upgrade mise to at least the version that installed the cask (so new artifact kinds are classified) and retry the prune.
- Reinstall the cask with the current mise so targets and classified lists are rewritten together.
- Manually inspect `.mise-cask.toml` and repair/remove the stray target entry only if you understand the artifact.
Defensive patterns
Strategy: validation
Validate before calling
// Ensure every recorded target is classifiable before pruning
let classified: BTreeSet<_> = receipt.apps.iter().chain(&receipt.binaries).chain(&receipt.fonts).chain(&receipt.completions).collect();
if receipt.targets.iter().any(|t| !classified.contains(&t.path)) {
// unknown artifact kind; skip prune, reinstall or upgrade mise
} Try / catch
Catch the Err and add a CaskPruneSkip carrying the reason; recommend reinstalling the cask with the current mise version.
Prevention
- Don't downgrade mise below the version that installed a cask and then prune it.
- Reinstall casks after upgrades that add new artifact kinds.
When it happens
Trigger: A receipt.targets entry whose path is absent from all classified lists — a corrupted receipt, a receipt mixing data from different mise versions, or a new artifact kind written by a newer mise that this validator does not know.
Common situations: Pruning casks installed by a newer mise version after downgrading; partially corrupted receipts after disk trouble or interrupted writes.
Related errors
- metadata-only app ownership cannot be proven safely during…
- ownership receipt has changed
- receipt is not marked safe for direct-artifact pruning
- receipt target inventory is incomplete or duplicated
- app target is outside an allowed Applications directory
AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22).
Data as JSON: /api/errors/138aef5dec35f4c2.
Report an issue: GitHub.
Appendix: source
Thrown at src/system/packages/brew/cask.rs:7286
.apps
.iter()
.chain(&receipt.binaries)
.chain(&receipt.fonts)
.chain(&receipt.completions)
.cloned()
.collect::<BTreeSet<_>>();
if expected.is_empty()
|| records.len() != receipt.targets.len()
|| records.len() != expected.len()
|| receipt
.metadata_only_apps
.iter()
.any(|path| !receipt.apps.contains(path))
{
bail!("receipt target inventory is incomplete or duplicated");
}
if records.keys().any(|path| !expected.contains(path)) {
bail!("receipt target inventory contains an unclassified path");
}
for path in &receipt.apps {
let record = records
.get(path)
.ok_or_else(|| eyre!("missing app target record"))?;
if record.fingerprint.kind != CaskTargetKind::Directory
|| !allowed_appdir_roots()?
.iter()
.any(|root| path_is_below(path, root))
|| !path.file_name().is_some_and(|name| {
staged_app_matches_target(record, &candidate.version_dir.join(name))
})
{
bail!(
"app target is outside an allowed Applications directory: {}",
path.display()
);View on GitHub (pinned to 6f52dcdf99)