jdx/mise · error
brew-cask:{token}: Homebrew metadata exists, but no installe
Error message
brew-cask:{token}: Homebrew metadata exists, but no installed Caskroom version was found; repair it with `brew reinstall --cask {token}` What it means
homebrew_installed_version resolves the single installed Caskroom version for a token. When Homebrew's own metadata exists but the Caskroom directory contains no version directory, the cask state is inconsistent, so mise bails and asks the user to repair via Homebrew. mise never guesses a version when Homebrew claims ownership but nothing is installed.
Source
Thrown at src/system/packages/brew/cask/state.rs:80
path.display()
)
})?;
if file_type.is_dir() && name != ".metadata" && !name.starts_with(".mise-") {
versions.push(name);
}
}
Ok(versions)
}
pub(super) fn homebrew_installed_version(token: &str) -> Result<Option<String>> {
if !homebrew_metadata_present(token)? {
return Ok(None);
}
let versions = homebrew_installed_versions(token)?;
match versions.as_slice() {
[version] => Ok(Some(version.clone())),
[] => bail!(
"brew-cask:{token}: Homebrew metadata exists, but no installed Caskroom version was found; repair it with `brew reinstall --cask {token}`"
),
versions => bail!(
"brew-cask:{token}: Homebrew metadata exists with multiple Caskroom versions ({}); repair it with Homebrew",
{
let mut versions = versions.to_vec();
versions.sort();
versions.join(", ")
}
),
}
}
pub(super) fn ensure_homebrew_did_not_take_ownership(token: &str, stage: &Path) -> Result<()> {
let metadata_present = match homebrew_metadata_present(token) {
Ok(present) => present,
Err(err) => {
file::remove_all(stage).wrap_err_with(|| {View on GitHub (pinned to afd2eddd3a)
Solutions
- Run `brew reinstall --cask <token>` to restore the missing Caskroom version
- If the cask is unwanted, run `brew uninstall --cask <token>` to clear the stale metadata, then let mise reinstall
- Run `brew cleanup --cask` and retry the mise operation
Example fix
// terminal, not code // before: broken state (metadata exists, no Caskroom dir) // after: brew reinstall --cask <token>
Defensive patterns
Strategy: try-catch
Validate before calling
// before installing via mise, check consistency ls "$(brew --repository)/Caskroom/<token>" 2>/dev/null brew info --cask <token> >/dev/null 2>&1 && echo metadata-ok
Try / catch
match result {
Ok(v) => v,
Err(e) if e.to_string().contains("no installed Caskroom version") => {
run("brew reinstall --cask <token>")?; retry()
}
Err(e) => return Err(e),
} Prevention
- Never manually delete Caskroom version directories; use brew uninstall/cleanup
- Run `brew cleanup --cask` after upgrades
- Avoid killing brew mid-operation
When it happens
Trigger: homebrew_installed_version is called (from install_one_with_ancestors or package_state), homebrew_installed_versions(token) returns an empty list while Homebrew metadata (e.g. the caskroom metadata dir / receipt) is still present.
Common situations: A previous `brew uninstall --cask` or `brew cleanup` partially removed the Caskroom version directory but left metadata; interrupted brew operations; manually deleting ~/Caskroom subdirectories.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- Homebrew now owns this cask
- ownership receipt has changed
- receipt is not marked safe for direct-artifact pruning
- metadata-only app ownership cannot be proven safely during p
- receipt target inventory is incomplete or duplicated
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/ca41a674b563d0cd.
Report an issue: GitHub.