{"record":{"id":"76d3e1d7dc29ae7f","repo":"jdx/mise","slug":"archive-does-not-contain-registry-entries","errorCode":null,"errorMessage":"archive does not contain registry entries","messagePattern":"archive does not contain registry entries","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/registry.rs","lineNumber":360,"sourceCode":"        }\n        let file_path = PathBuf::from(components[1]);\n        if file_path\n            .extension()\n            .is_none_or(|extension| extension != \"toml\")\n        {\n            continue;\n        }\n        let short = file_path\n            .file_stem()\n            .and_then(|stem| stem.to_str())\n            .ok_or_else(|| eyre::eyre!(\"invalid registry filename: {}\", path.display()))?\n            .to_string();\n        let mut source = String::new();\n        entry.read_to_string(&mut source)?;\n        sources.insert(short, source);\n    }\n\n    ensure!(\n        !sources.is_empty(),\n        \"archive does not contain registry entries\"\n    );\n    registry_from_sources(sources)\n}\n\nfn track_registry_archive_entry(\n    index: usize,\n    entry_size: u64,\n    archive_size: &mut u64,\n) -> Result<()> {\n    ensure!(\n        index < MAX_REGISTRY_ARCHIVE_ENTRIES,\n        \"registry archive contains too many entries\"\n    );\n    ensure!(\n        entry_size <= MAX_REGISTRY_ARCHIVE_ENTRY_SIZE,\n        \"registry archive entry is too large\"","sourceCodeStart":342,"sourceCodeEnd":378,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/registry.rs#L342-L378","documentation":"mise downloads and parses a registry archive, collecting TOML sources for every registry entry file it finds. If no registry entry files are found after iterating the archive, it refuses to build an empty registry and raises this error. An empty registry is treated as an error (rather than silently working with zero tools) so distribution or packaging problems surface immediately.","triggerScenarios":"Calling download_registry_archive/refresh (or the test helper load path) with an archive that contains only non-registry files, an empty tarball, or entries outside the expected registry directory.","commonSituations":"The registry publisher packaged the wrong directory, the archive was truncated/empty due to a failed upload or proxy caching an empty response, or the short-name mapping skipped all entries because files live in unexpected subdirectories.","solutions":["Re-download the registry archive (clear mise's cache, e.g. `mise cache clear`) in case of a truncated/empty download.","Verify the archive actually contains registry TOML files: `tar -tzf registry.tar.gz | head`.","If you publish the registry, fix the packaging step to include the registry entry files at the expected location.","Check the configured registry URL/short-name source points at the real registry archive, not an unrelated file."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"# shell: confirm the archive is non-empty and contains TOML entries before use\ntar -tzf registry.tar.gz | grep -q '\\.toml$' && echo OK || echo 'REJECTED: no registry entries'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Retry registry downloads and clear the mise cache on failure to avoid cached empty archives.","Verify registry packaging includes at least one entry TOML before uploading.","Pin or verify the registry source URL to avoid proxy-served empty responses."],"tags":["archive","registry","empty-result","validation"],"backgroundTag":"empty-result-set","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"}