{"record":{"id":"d850312452908100","repo":"unicity-aos/aos-ce","slug":"bundled-product-release-runtime-executable-set-is-not","errorCode":null,"errorMessage":"bundled product release runtime executable set is not installed","messagePattern":"bundled product release runtime executable set is not installed","errorType":"validation","errorClass":"io::Error","httpStatus":null,"severity":"error","filePath":"crates/unicity-aos-bootstrap/src/migration.rs","lineNumber":694,"sourceCode":"                    .iter()\n                    .any(|runtime| name == OsStr::new(runtime))\n                {\n                    return invalid(\n                        \"completed product runtime contains a shipped executable in mutable state\",\n                    );\n                }\n            }\n        }\n        Err(error) if error.kind() == io::ErrorKind::NotFound => {}\n        Err(error) => return Err(error),\n    }\n    Ok(())\n}\n\nfn validate_release_runtime_bin(release_runtime_bin: &Path) -> io::Result<()> {\n    let metadata = fs::symlink_metadata(release_runtime_bin).map_err(|error| {\n        if error.kind() == io::ErrorKind::NotFound {\n            io::Error::new(\n                io::ErrorKind::InvalidInput,\n                \"bundled product release runtime executable set is not installed\",\n            )\n        } else {\n            error\n        }\n    })?;\n    if metadata.file_type().is_symlink() || !metadata.is_dir() {\n        return invalid(\"bundled product release runtime bin must be a real directory\");\n    }\n    let expected: HashSet<_> = RUNTIME_EXECUTABLE_NAMES.iter().copied().collect();\n    let mut actual = HashSet::new();\n    for entry in fs::read_dir(release_runtime_bin)? {\n        let entry = entry?;\n        let name = entry.file_name().into_string().map_err(|_| {\n            io::Error::new(\n                io::ErrorKind::InvalidInput,\n                \"product release runtime bin contains a non-UTF-8 entry\",","sourceCodeStart":676,"sourceCodeEnd":712,"githubUrl":"https://github.com/unicity-aos/aos-ce/blob/f6f22024fb1e8d122f28a1b4a9f75aee448ae839/crates/unicity-aos-bootstrap/src/migration.rs#L676-L712","documentation":"validate_release_runtime_bin reads symlink metadata of the release runtime bin directory; when that fails with NotFound, it converts the error into this InvalidInput error. It means the required executable-set directory of the product release runtime is missing entirely, so migration cannot proceed.","triggerScenarios":"Calling migrate_runtime (via validate_target or validate_completed_target) when the release runtime bin path does not exist on disk, or exists as a broken path after a partial install.","commonSituations":"A partial/failed product install that never created the bin directory; a version change relocating the bin path; cleaning scripts removing the executable set.","solutions":["Reinstall or repair the product release so the runtime bin directory exists at the expected path","Verify the release_runtime_bin path exists before calling migrate_runtime","Check that the configured release version matches the actually installed runtime layout"],"exampleFix":"// before\nmigrate_runtime(&target, &missing_bin)?;\n\n// after\nif !release_runtime_bin.try_exists()? {\n    repair_release_install(&release_runtime_bin)?;\n}\nmigrate_runtime(&target, &release_runtime_bin)?;","handlingStrategy":"validation","validationCode":"fn release_bin_installed(release_runtime_bin: &std::path::Path) -> bool {\n    std::fs::symlink_metadata(release_runtime_bin)\n        .map(|m| m.is_dir())\n        .unwrap_or(false)\n}","typeGuard":null,"tryCatchPattern":"match migrate_runtime(&target, &release_bin) {\n    Ok(()) => {},\n    Err(e) if e.to_string().contains(\"executable set is not installed\") =>\n        eprintln!(\"release runtime bin missing at {}; reinstall the release\", release_bin.display()),\n    Err(e) => return Err(e),\n}","preventionTips":["Verify release integrity (bin directory present) after every install/upgrade","Match the configured release version to the installed runtime layout","Exclude the runtime bin directory from cleanup glob patterns","Re-run the installer's repair step if a partial install is detected"],"tags":["rust","filesystem","migration"],"backgroundTag":"file-not-found","analyzedSha":"f6f22024fb1e8d122f28a1b4a9f75aee448ae839","analyzedAt":"2026-09-13T03:04:44.565Z","contentChangedAt":"2026-09-13T03:04:44.565Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}