jdx/mise · warning
{err:#}
Error message
{err:#} What it means
Mas (Mac App Store) backend's unavailable_reason_async in src/system/packages/mas.rs maps an error from self.bin().await into a human-readable unavailable reason via format!("{err:#}"), preserving the full cause chain. The package is reported unavailable (rather than erroring the whole operation) when the mas CLI cannot be located/executed.
Solutions
- Install the mas CLI (e.g. `brew install mas`) so the binary lookup succeeds.
- If on non-macOS, remove mas package entries from the config or gate them to macOS environments.
- Verify mas is on PATH for the environment running mise (`which mas`).
Example fix
# before (CI on linux)
[pkg]
mas = { "Xcode" = "497799835" }
# after: only on macOS hosts
[pkg.mas]
"Xcode" = "497799835" # ensure `brew install mas` on macOS runners Defensive patterns
Strategy: validation
Validate before calling
# verify mas is usable before resolving mas packages
command -v mas >/dev/null 2>&1 || { echo "mas CLI not installed; skip mas packages"; exit 0; } Try / catch
match backend.unavailable_reason().await {
Some(reason) => eprintln!("skipping mas package: {reason}"),
None => proceed_with_install(),
} Prevention
- Install mas (`brew install mas`) on all macOS machines using the config.
- Gate mas package entries to macOS hosts in CI matrices.
- Check mas is on PATH for non-interactive shells (mise exec contexts).
When it happens
Trigger: Resolving mas-managed packages on a system where the `mas` binary lookup fails — mas not installed, not on PATH, or running on non-macOS where mas cannot work.
Common situations: A mise.toml referencing `mas`-sourced apps is used on Linux or in CI without mas installed; or mas exists but is broken/incompatible with the macOS version.
Related errors
- only available on macos
- another process is installing the mise notification helper
- apk info failed
- app target is outside an allowed Applications directory
- apt-cache policy failed
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/6654f023595a681b.
Report an issue: GitHub.
Appendix: source
Thrown at src/system/packages/mas.rs:243
impl SystemPackageManager for MasManager {
fn name(&self) -> &str {
"mas"
}
fn is_available(&self) -> bool {
cfg!(target_os = "macos") && crate::file::which_non_pristine("mas").is_some()
}
fn unavailable_reason(&self) -> String {
if cfg!(target_os = "macos") {
"mas not found".to_string()
} else {
"only available on macos".to_string()
}
}
async fn unavailable_reason_async(&self) -> Option<String> {
self.bin().await.err().map(|err| format!("{err:#}"))
}
fn supports_version_pins(&self) -> bool {
false
}
async fn installed(&self, pkgs: &[PackageRequest]) -> Result<Vec<PackageStatus>> {
let apps = mas_list(self.bin().await?).await?;
Ok(statuses_from_apps(&apps, pkgs))
}
async fn install(&self, pkgs: &[PackageRequest], opts: &InstallOpts) -> Result<()> {
if let Some(p) = pkgs.iter().find(|p| p.version.is_some()) {
bail!("mas cannot install a pinned version ('{p}')");
}
if let Some(p) = pkgs.iter().find(|p| !is_adam_id(&p.name)) {
bail!("mas install requires a numeric ADAM ID ('{p}'); use `mas search` to find it");
}View on GitHub (pinned to 533346cc37)