pbakaus/impeccable · warning
Update failed: Aborted.
Error message
Update failed: Aborted.
What it means
If the user aborts the hook-installation prompt during `update` (e.g. answering 'no'/cancelling at decide_hook_install), the abort is surfaced as 'Update failed: Aborted.' with exit code 1. A comment notes the JS version's try/catch swallowed the prompt abort and printed its own message instead.
Source
Thrown at crates/skills/src/commands.rs:848
util::rm_rf(&tmp_dir);
return match outcome {
Ok(hook_targets) => {
let v = sys.get_skills_version(&root, scope);
out(io, &format!("Skills are up to date{}.", version_suffix(&v)));
if !hook_targets.is_empty() {
out(io, &format!("Installed hooks into: {}", hook_targets.join(", ")));
}
out(io, "Nothing else to do.");
Err(Flow::Exit(0))
}
Err(Flow::Throw(e)) => {
err(io, &format!("Update failed: {e}"));
Err(Flow::Exit(1))
}
// JS: the try/catch around decideHookInstall swallows the prompt
// abort too, printing its message.
Err(Flow::Abort) => {
err(io, "Update failed: Aborted.");
Err(Flow::Exit(1))
}
Err(other) => Err(other),
};
}
out(io, &format!("Found skills in: {}", copy_providers.join(", ")));
if !yes {
let ans = prompt.ask(io, &format!("Update skills in {} provider folder(s)? (Y/n) ", copy_providers.len()))?;
if ans == "n" || ans == "no" {
util::rm_rf(&tmp_dir);
out(io, "Aborted.");
return Err(Flow::Exit(0));
}
}
let outcome: R<()> = (|| {View on GitHub (pinned to 2bc2879276)
Solutions
- Pass --no-hooks to skip hook installation and its prompt entirely.
- Pass --yes to auto-accept prompts in scripts/CI.
- Provide a TTY/stdin when running update non-interactively.
Example fix
// before (CI, no TTY) impeccable update # Update failed: Aborted. // after impeccable update --no-hooks --yes
Defensive patterns
Strategy: fallback
Validate before calling
[ -t 0 ] || { echo "non-interactive shell: use --yes/--no-hooks"; } Try / catch
impeccable update --no-hooks || impeccable update --no-hooks --yes
Prevention
- Always pass --yes (and/or --no-hooks) in scripts and CI.
- Only run interactive updates in a TTY session.
- Decide your hooks policy once and encode it in your update script.
When it happens
Trigger: `update` when the interactive hook-install prompt is declined or cancelled by the user, producing Flow::Abort; happens only when hooks are being considered (no --no-hooks) and the prompt runs without --yes.
Common situations: Users cancelling the prompt in CI (no TTY) or accidentally; scripted runs where stdin is closed so the prompt aborts; users who do not want hooks but ran update without --no-hooks.
Related errors
- embed-prompt: prompt too long for a JPEG segment
- Update failed: {e}
- concept-seed: --candidate-count must be an integer from 5 to
- Unknown ignore-rule flag: ${arg}
- Pass a rule id, e.g. ${IMPECCABLE_COMMAND} hooks ignore-rule
AI-assisted analysis of pbakaus/impeccable@2bc2879276 (2026-09-08).
Data as JSON: /api/errors/33dce350cef26cde.
Report an issue: GitHub.