{"record":{"id":"d3a3f8de45c81006","repo":"jdx/mise","slug":"mas-upgrade-failed","errorCode":null,"errorMessage":"mas upgrade failed: {}","messagePattern":"mas upgrade failed: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/packages/mas.rs","lineNumber":299,"sourceCode":"    async fn upgrade(&self, pkgs: &[PackageRequest], opts: &InstallOpts) -> Result<()> {\n        if let Some(p) = pkgs.iter().find(|p| !is_adam_id(&p.name)) {\n            bail!(\"mas upgrade requires a numeric ADAM ID ('{p}'); use `mas search` to find it\");\n        }\n        let mut args = vec![\"upgrade\".to_string()];\n        args.extend(pkgs.iter().map(|p| p.name.clone()));\n        if opts.dry_run {\n            miseprintln!(\"mas {}\", args.join(\" \"));\n            return Ok(());\n        }\n        debug!(\"$ mas {}\", args.join(\" \"));\n        let output = tokio::process::Command::new(self.bin().await?)\n            .args(&args)\n            .stdin(Stdio::null())\n            .output()\n            .await?;\n        if !output.status.success() {\n            let stderr = String::from_utf8_lossy(&output.stderr);\n            bail!(\"mas upgrade failed: {}\", stderr.trim());\n        }\n        Ok(())\n    }\n}\n\npub(crate) fn is_adam_id(name: &str) -> bool {\n    !name.is_empty() && name.chars().all(|c| c.is_ascii_digit())\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    fn req(name: &str, version: Option<&str>) -> PackageRequest {\n        PackageRequest {\n            name: name.to_string(),\n            version: version.map(str::to_string),\n            tap_url: None,","sourceCodeStart":281,"sourceCodeEnd":317,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/system/packages/mas.rs#L281-L317","documentation":"Process failure in the mas manager's upgrade(): `mas upgrade <ids...>` exited non-zero and its trimmed stderr is surfaced. Fires when the App Store session is stale, an app cannot update, or the mas CLI fails.","triggerScenarios":"`mas upgrade` exits non-zero — not signed in, app updates fail to download/install, App Store daemon errors, or an app requires a newer macOS than installed.","commonSituations":"Pending updates needing a macOS upgrade; App Store authentication expired; disk space exhaustion during download; Apple service interruptions.","solutions":["Read the stderr embedded in the error for mas's specific complaint","Re-authenticate (`mas account` / App Store sign-in) and retry","Free disk space and ensure macOS meets each app's requirements","Run `mas upgrade` manually to reproduce outside mise"],"exampleFix":null,"handlingStrategy":"retry","validationCode":"mas list >/dev/null 2>&1 || echo \"App Store session broken; re-sign in\"","typeGuard":null,"tryCatchPattern":"for attempt in 0..3 {\n    match provider.upgrade(&pkgs, &opts).await {\n        Err(e) if e.to_string().contains(\"mas upgrade failed\") && attempt < 2 => {\n            tokio::time::sleep(Duration::from_secs(30)).await;\n        }\n        other => { other?; break; }\n    }\n}","preventionTips":["Re-authenticate before long automation runs","Ensure adequate disk space for app updates","Keep macOS versions within each app's supported range"],"tags":["macos","mas","subprocess","package-manager"],"backgroundTag":"command-failed","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}