pbakaus/impeccable · error
{msg}
Error message
{msg}
What it means
Top-level error reporter in the skill's `run`: any command returning Flow::Throw(msg) is printed to stderr as `{msg}` and mapped to exit code 1. This is the generic terminal sink for all command errors, so the message text comes from the inner command.
Source
Thrown at crates/skills/src/lib.rs:62
pub enum Flow {
Exit(i32),
Abort,
Throw(String),
}
pub type R<T> = Result<T, Flow>;
/// JS: skills.mjs#run, wrapped in cli.js's `main().catch(...)`.
pub fn run(args: &[String], io: &mut Io) -> i32 {
match commands::run(args, io) {
Ok(()) => 0,
Err(Flow::Exit(code)) => code,
Err(Flow::Abort) => {
io.out("\nAborted.\n");
130
}
Err(Flow::Throw(msg)) => {
io.err(&format!("{msg}\n"));
1
}
}
}
View on GitHub (pinned to 2bc2879276)
Solutions
- Read the {msg} line for the underlying cause; it is forwarded verbatim from the failing subcommand.
- Fix the root cause indicated by the message (permissions, network, arguments).
- In scripts, treat exit code 1 as command failure and 130 as user abort.
Example fix
// before: swallowing inner error
let _ = cmd(io)?;
// after: let run() print and exit 1
return Err(Flow::Throw(format!("install failed: {e}"))); Defensive patterns
Strategy: try-catch
Try / catch
const code = await run(io).catch(err => {
io.err(`fatal: ${err?.message ?? err}\n`);
return 1; // matches Flow::Throw mapping
});
process.exitCode = code === 130 ? 130 : (code ? 1 : 0); Prevention
- Map Flow::Throw only for user-actionable messages; use dedicated variants for exits/aborts
- In CI, assert on both stderr text and exit codes
- Keep inner messages self-contained since run() prints them verbatim
When it happens
Trigger: Any subcommand returns Err(Flow::Throw(msg)) from its run function; run() at crates/skills/src/lib.rs:62 formats it to stderr and returns exit code 1.
Common situations: Any underlying command failure (I/O, download, validation) bubbling up; wrapping `impeccable` in scripts that check exit codes; CI runs failing with exit status 1 and this stderr line.
Related errors
- 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
- overused-font is value-specific by default. Use ${IMPECCABLE
- --reason is not supported for ignore-file because detector.i
AI-assisted analysis of pbakaus/impeccable@2bc2879276 (2026-09-08).
Data as JSON: /api/errors/2a8b0ce1f6bbbfaa.
Report an issue: GitHub.