{"record":{"id":"e13cff4b69bf320a","repo":"jdx/mise","slug":"mas-upgrade-requires-a-numeric-adam-id-p-us","errorCode":null,"errorMessage":"mas upgrade requires a numeric ADAM ID ('{p}'); use `mas search` to find it","messagePattern":"mas upgrade requires a numeric ADAM ID \\('(.+?)'\\); use `mas search` to find it","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/system/packages/mas.rs","lineNumber":283,"sourceCode":"            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 install failed: {}\", stderr.trim());\n        }\n        Ok(())\n    }\n\n    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(())","sourceCodeStart":265,"sourceCodeEnd":301,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/system/packages/mas.rs#L265-L301","documentation":"Request validation in the mas manager's upgrade(): a requested package name is not a numeric ADAM ID, which mas requires for upgrades (unlike searching by name). The error directs users to `mas search` to find the numeric ID.","triggerScenarios":"Calling mas upgrade with a request whose name fails is_adam_id — human-readable app names, cask-style names, or malformed identifiers.","commonSituations":"Upgrade lists generated from human-readable config; mixed provider configs where names came from Homebrew; copy/paste of app titles instead of IDs.","solutions":["Run `mas search <name>` to find the numeric ADAM ID","Replace the app name with its numeric ID in the mise package config","Re-run the upgrade with only numeric IDs"],"exampleFix":"// before\nupgrade(&[PackageRequest { name: \"Keynote\".into(), .. }])\n// after\nupgrade(&[PackageRequest { name: \"409183694\".into(), .. }])","handlingStrategy":"validation","validationCode":"pkgs.iter().all(|p| p.name.chars().all(|c| c.is_ascii_digit()))","typeGuard":null,"tryCatchPattern":"if let Err(e) = provider.upgrade(&pkgs, &opts).await {\n    if e.to_string().contains(\"numeric ADAM ID\") {\n        eprintln!(\"map names to ADAM IDs via `mas search` before upgrading\");\n    }\n}","preventionTips":["Maintain upgrade lists as ADAM IDs","Convert name-based lists once via `mas search` at config-generation time"],"tags":["macos","mas","validation","package-manager"],"backgroundTag":"invalid-argument-format","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}