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

  1. Read the {msg} line for the underlying cause; it is forwarded verbatim from the failing subcommand.
  2. Fix the root cause indicated by the message (permissions, network, arguments).
  3. 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

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


AI-assisted analysis of pbakaus/impeccable@2bc2879276 (2026-09-08). Data as JSON: /api/errors/2a8b0ce1f6bbbfaa. Report an issue: GitHub.