thedotmack/claude-mem · critical · InstallAbortError

failed during

Error message

${ctx.component} failed during ${ctx.phase}: ${causeMessage(ctx.cause)}

What it means

installerError is the central error dispatcher of the installer: it computes a category, remediation, and severity for a failed component, and when severity is ABORT it writes a last-install-error record and throws InstallAbortError with '<component> failed during <phase>: <cause>'. This means a phase of installation failed hard enough that the install cannot continue.

Solutions

  1. Read the full error: the component, phase, and cause message identify exactly which step failed.
  2. Check the last-install-error record written to the data dir (~/.claude-mem) for remediation steps.
  3. Fix the underlying cause (network, permissions, config) and re-run the install.
  4. Follow the remediation hint included in the error/report, which is computed per category and platform.

Example fix

// before
npx claude-mem install   # fails: 'marketplace failed during npm-install: ENOSPC'
// after
df -h   # free disk space, then re-run the installer
Defensive patterns

Strategy: try-catch

Validate before calling

const lastError = readLastInstallError(dataDir);
if (lastError) console.log('Previous install failed:', lastError.category, lastError.remediation);

Type guard

const isInstallAbort = (e: unknown): e is InstallAbortError => e instanceof InstallAbortError && typeof e.remediation === 'string';

Try / catch

try {
  await runInstall();
} catch (e) {
  if (e instanceof InstallAbortError) {
    console.error(`${e.category.label}: ${e.message}\nFix: ${e.remediation}`);
    process.exitCode = 1;
  } else throw e;
}

Prevention

When it happens

Trigger: Any installer phase recording a failure via recordFailure or a step like setupIDEs, runNpmInstallInMarketplace, requireWorkerStopped, or validateNonInteractiveProvider escalating to ABORT severity through installerError.

Common situations: npm/marketplace install failures, IDE setup errors, a worker still running when it must be stopped, or missing non-interactive provider config — each surfaced as a single wrapped abort.

Understand the failure class

Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.

Related errors


AI-assisted analysis of thedotmack/claude-mem@d8bc9755e7 (2026-09-17). Data as JSON: /api/errors/7dd623bb5d9fffd5. Report an issue: GitHub.

Appendix: source

Thrown at src/npx-cli/install/error-reporter.ts:123

 * The single decision point. ABORT throws InstallAbortError (the top-level
 * handler prints + exits 1). Every other severity records to the summary and
 * returns.
 */
export function installerError(
  severity: ErrorSeverity,
  ctx: ErrorContext,
  summary: InstallSummary,
): void {
  const dataDir = resolveDataDir();
  const category = classifyError(ctx.cause, { component: ctx.component, phase: ctx.phase });
  const remediation =
    ctx.remediation ??
    category.remediation({ platform: process.platform, dataDir });

  switch (severity) {
    case ErrorSeverity.ABORT: {
      writeLastInstallError(category, ctx, remediation, dataDir);
      throw new InstallAbortError(
        `${ctx.component} failed during ${ctx.phase}: ${causeMessage(ctx.cause)}`,
        { category, remediation, cause: ctx.cause },
      );
    }
    case ErrorSeverity.FAIL_LOUD_PER_IDE: {
      const ide = ctx.ide ?? ctx.component;
      if (!summary.failedIDEs.includes(ide)) summary.failedIDEs.push(ide);
      summary.warnings.push({
        component: ide,
        message: ctx.details ? `${causeMessage(ctx.cause)}\n${ctx.details}` : causeMessage(ctx.cause),
        remediation,
      });
      return;
    }
    case ErrorSeverity.WARN_CONTINUE: {
      summary.warnings.push({
        component: ctx.component,
        message: causeMessage(ctx.cause),

View on GitHub (pinned to d8bc9755e7)