pbakaus/impeccable · error
Could not write the impeccable engine v{version} ({os}-{arch
Error message
Could not write the impeccable engine v{version} ({os}-{arch}) into {}: {e}
What it means
After a successful download, `install_engine_binaries` failed to write the engine binary to the destination path or to mark it executable. The message includes the version, platform triple, destination path, and the underlying I/O error. Install/update continues but that platform's launcher binary is missing locally.
Source
Thrown at crates/skills/src/engine_binary.rs:147
if util::exists(&dest) {
continue;
}
let url = asset_url(&base, version, os, arch);
let fetched = cache
.entry(version.to_string())
.or_insert_with(|| fetch_binary(&url))
.clone();
match fetched {
Ok(bytes) => {
let written = util::mkdir_p(&jsp::dirname(&dest))
.and_then(|_| util::write_bytes(&dest, &bytes))
.and_then(|_| util::set_executable(&dest));
match written {
Ok(()) => io.out(&format!(
"Installed impeccable engine v{version} ({os}-{arch}) into: {}\n",
sys.format_path_for_display(&dest)
)),
Err(e) => io.err(&format!(
"Could not write the impeccable engine v{version} ({os}-{arch}) into {}: {e}\n",
sys.format_path_for_display(&dest)
)),
}
}
Err(e) => {
if !e.is_empty() {
io.err(&format!(
"Could not download the impeccable engine v{version} for {os}-{arch} ({url}): {e}. The launcher fetches it on first run.\n"
));
// Report once per version, then stay quiet for its siblings.
cache.insert(version.to_string(), Err(String::new()));
}
}
}
}
}
View on GitHub (pinned to 2bc2879276)
Solutions
- Read the trailing {e} to identify the OS error, then free disk space or fix permissions on the destination directory.
- Ensure no running impeccable process is locking the destination file; close it and re-run install/update.
- Install to a writable location (check install prefix / HOME) and re-run `impeccable install`.
- If the filesystem is mounted noexec, remount or choose a different install path.
Example fix
# before $ impeccable install Could not write the impeccable engine v1.2.3 (linux-x64) into ~/.local/share/impeccable/bin/impeccable: Permission denied (os error 13) # after $ chmod u+w ~/.local/share/impeccable/bin && impeccable install
Defensive patterns
Strategy: validation
Validate before calling
const fs = require('fs');
function canWrite(dir) {
try { fs.accessSync(dir, fs.constants.W_OK | fs.constants.X_OK); return true; } catch { return false; }
}
if (!canWrite(destDir)) console.error('destination not writable:', destDir); Type guard
function isWritableFilePath(p) {
return typeof p === 'string' && p.length > 0 && !require('fs').existsSync(p) === false
? require('fs').statSync(p).isFile() || !require('fs').existsSync(p)
: true;
} Try / catch
try {
await installEngineBinaries(io);
} catch (e) {
console.error('engine write failed; check disk space and permissions for the install dir:', e.message);
process.exit(1);
} Prevention
- Check free disk space before installing
- Verify the install directory is writable and not noexec-mounted
- Stop running impeccable processes before updating binaries
- Exclude the install directory from antivirus/backup file locks
When it happens
Trigger: `install` or `update` calls install_engine_binaries; the file write to `dest` fails (disk full, permission denied, path is a directory, antivirus lock) or util::set_executable fails, returning Err(e) from the write branch at crates/skills/src/engine_binary.rs:147.
Common situations: Read-only install directory; disk quota exceeded; dest path occupied by a directory or a locked running binary (Windows); user lacks execute-bit rights on the target filesystem (e.g. noexec mount).
Understand the failure class
Background: "failed to write file", "Could not save figure", "Error saving remote file" — file write failed: causes and fixes across languages and libraries — this error's family across 38 libraries.
Related errors
- Install failed: {e}
- Live browser script part missing: ${part.name} (${part.path}
- Warning: cannot access {target}
- {msg} (dynamic Flow::Throw message, e.g. 'Unknown provider(s
- Pass providers explicitly, e.g. --providers=claude,cursor
AI-assisted analysis of pbakaus/impeccable@2bc2879276 (2026-09-08).
Data as JSON: /api/errors/144c7c8c33b0fdfd.
Report an issue: GitHub.