{"record":{"id":"ace9dcde81e29aec","repo":"jdx/mise","slug":"the-packslip-lists-executable-in-but-the-ar","errorCode":null,"errorMessage":"the packslip lists executable {} in {}, but the archive holds no such file","messagePattern":"the packslip lists executable (.+?) in (.+?), but the archive holds no such file","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/backend/packslip.rs","lineNumber":935,"sourceCode":"\n    /// Put every executable the packslip names into the install's bin dir\n    /// under the name it should have on PATH.\n    fn link_bins(tv: &ToolVersion, artifact: &Artifact) -> Result<()> {\n        if artifact.bin.is_empty() {\n            return Ok(());\n        }\n        let install_path = tv.install_path();\n        let bins_dir = install_path.join(MISE_BINS_DIR);\n        file::create_dir_all(&bins_dir)?;\n        for bin in &artifact.bin {\n            if !file::is_plain_file_name(&bin.name) {\n                bail!(\n                    \"the packslip names an executable {:?}, which is not a plain file name\",\n                    bin.name\n                );\n            }\n            let Some(src) = locate_in_install(&install_path, &bin.path) else {\n                bail!(\n                    \"the packslip lists executable {} in {}, but the archive holds no such file\",\n                    bin.path,\n                    artifact.name\n                );\n            };\n            file::make_executable(&src)?;\n            let dst = bins_dir.join(&bin.name);\n            if dst.exists() || dst.is_symlink() {\n                file::remove_all(&dst)?;\n            }\n            file::make_symlink_or_copy(&src, &dst)?;\n        }\n        Ok(())\n    }\n\n    /// Every version the vendor published, before stamps are applied.\n    async fn vendor_versions(&self, raw_opts: &ToolVersionOptions) -> Result<Vec<VersionInfo>> {\n        let project = self.project()?;","sourceCodeStart":917,"sourceCodeEnd":953,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/backend/packslip.rs#L917-L953","documentation":"After validating the declared executable name, mise locates the file inside the extracted install directory using the manifest's declared path. If no file exists at that path in the archive, the install fails because a listed executable cannot be linked. This catches manifests that don't match the actual archive contents.","triggerScenarios":"link_bins during install when locate_in_install cannot find `bin.path` inside the tool's install directory for the given artifact — the manifest lists a file the archive doesn't contain (wrong archive attached, renamed binary, path casing mismatch).","commonSituations":"Vendor re-uploaded an archive with renamed binaries but didn't update the packslip manifest; wrong-platform artifact attached to the release entry; case-sensitive filesystem makes `Tool` vs `tool` fail on Linux but not macOS.","solutions":["Check the actual archive contents (`tar tf`) and correct the manifest's `bin.path` to the real file location","Report the mismatch to the vendor so the manifest/archive pair is fixed","Re-download the artifact in case a partial/corrupt extraction dropped files"],"exampleFix":"// before (packslip manifest)\n[[bin]]\nname = \"mytool\"\npath = \"bin/mytool\"\n// after (archive actually has target/release/mytool)\n[[bin]]\nname = \"mytool\"\npath = \"target/release/mytool\"","handlingStrategy":"validation","validationCode":"fn bins_present(archive_listing: &[String], bins: &[(String, String)]) -> Vec<String> {\n    bins.iter()\n        .filter(|(_, path)| !archive_listing.iter().any(|f| f == path))\n        .map(|(name, path)| format!(\"{name}: {path}\"))\n        .collect()\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Verify manifest bin paths against `tar tf <archive>` when authoring or reviewing packslips","Watch for platform artifacts where binaries get renamed between builds","Be aware of case-sensitivity differences between macOS and Linux paths"],"tags":["packslip","archive","file-not-found","manifest"],"backgroundTag":"file-not-found","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"}