{"record":{"id":"72135518e2d8510f","repo":"jdx/mise","slug":"artifact-bundle-executable-does-not-exist","errorCode":null,"errorMessage":"artifact bundle executable does not exist: {}","messagePattern":"artifact bundle executable does not exist: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/backend/spm.rs","lineNumber":1017,"sourceCode":") -> eyre::Result<Vec<ArtifactBundleBinary>> {\n    let mut binaries = vec![];\n    for bundle in artifactbundle_dirs(extract_dir)? {\n        let info = file::read_to_string(bundle.join(\"info.json\"))?;\n        let manifest = serde_json::from_str::<ArtifactBundleInfo>(&info)\n            .wrap_err(\"Failed to parse artifact bundle info.json\")?;\n        for (name, artifact) in manifest.artifacts {\n            if artifact.r#type != \"executable\" {\n                continue;\n            }\n            for variant in artifact.variants {\n                if variant\n                    .supported_triples\n                    .iter()\n                    .any(|triple| target_triples.contains(triple))\n                {\n                    let path = bundle.join(&variant.path);\n                    if !path.is_file() {\n                        bail!(\n                            \"artifact bundle executable does not exist: {}\",\n                            path.display()\n                        );\n                    }\n                    binaries.push(ArtifactBundleBinary {\n                        name: name.clone(),\n                        path,\n                    });\n                    break;\n                }\n            }\n        }\n    }\n    Ok(binaries)\n}\n\nfn artifactbundle_dirs(extract_dir: &Path) -> eyre::Result<Vec<PathBuf>> {\n    let mut bundles = vec![];","sourceCodeStart":999,"sourceCodeEnd":1035,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/backend/spm.rs#L999-L1035","documentation":"artifactbundle_binaries walks the selected artifact bundle variant and, for each declared binary, checks that the file exists on disk inside the extracted bundle. A declared executable missing from the archive means a corrupt/malformed bundle, so mise bails before wiring up shims.","triggerScenarios":"try_install_artifactbundle calls artifactbundle_binaries after matching a variant by supported_triples; bundle.join(&variant.path) is not a file (Info.plist lists an executable path that is absent from the downloaded/extracted archive).","commonSituations":"Upstream published a bundle whose Info.plist names binaries that weren't included; truncated/corrupt download; manually crafted bundle with wrong paths.","solutions":["Re-download / reinstall the tool to rule out a truncated archive","Inspect the extracted bundle to see which binaries are actually present","Report a broken artifact bundle upstream","Fall back to a source build (unset artifactbundle_only) or pin another version"],"exampleFix":"// verify manually after failure\n// unzip <tool>.artifactbundle.zip && ls <bundle>/<triple>/bin/\n// if empty, report upstream or pin a working version","handlingStrategy":"retry","validationCode":"// after extraction, verify binaries exist before use\nunzip -q <bundle>.zip -d /tmp/b && find /tmp/b -type f -path '*/bin/*' | wc -l","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Retry install once to rule out truncated downloads","Report bundles with mismatched Info.plist binary lists upstream","Pin a known-good version if the latest bundle is broken"],"tags":["swiftpm","artifact-bundle","corrupt-download"],"backgroundTag":"file-not-found","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}