Kuberwastaken/claurst · error
Archive did not contain expected binary
Error message
Archive did not contain expected binary '{}'.
Extracted to: {} What it means
After extracting the downloaded release archive, neither the expected binary name at the archive root nor a shallow (depth-3) search of the extract directory found the claurst executable. The release asset has an unexpected layout — the formatted values name the missing binary and the extraction directory that was searched.
Solutions
- Inspect the extraction directory shown in the message to see the archive's actual layout
- Download the archive manually from the GitHub releases page and install the binary by hand
- Report the packaging change — the release asset layout diverged from what the upgrader expects
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at src-rust/crates/cli/src/upgrade.rs:102 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of Kuberwastaken/claurst@b0637c97ec (2026-09-10).
Data as JSON: /api/errors/6574124cba3f0135.
Report an issue: GitHub.
Appendix: source
Thrown at src-rust/crates/cli/src/upgrade.rs:102
extract_archive(&archive_path, &extract_dir, is_zip)?;
// -------- locate the new binary --------
let bin_name = if cfg!(target_os = "windows") {
"claurst.exe"
} else {
"claurst"
};
let new_binary = extract_dir.join(bin_name);
if !new_binary.exists() {
// Some archives may extract into a subdirectory — search shallowly.
let mut candidates: Vec<PathBuf> = Vec::new();
for entry in walkdir_shallow(&extract_dir, 3) {
if entry.file_name().and_then(|n| n.to_str()) == Some(bin_name) {
candidates.push(entry);
}
}
if candidates.is_empty() {
bail!(
"Archive did not contain expected binary '{}'.\nExtracted to: {}",
bin_name,
extract_dir.display()
);
}
std::fs::copy(&candidates[0], &new_binary)?;
}
// -------- swap --------
println!("Replacing running binary…");
swap_binary(&exe_path, &new_binary)?;
// -------- macOS quarantine strip --------
#[cfg(target_os = "macos")]
{
let _ = std::process::Command::new("xattr")
.args(["-dr", "com.apple.quarantine"])
.arg(&exe_path)View on GitHub (pinned to b0637c97ec)