affaan-m/ECC · error · Error

Install config not found: ${resolvedPath}

Error message

Install config not found: ${resolvedPath}

What it means

Thrown by loadInstallConfig in scripts/lib/install/config.js after resolveInstallConfigPath joins options.cwd for relative paths. fs.existsSync on the resolved path returns false, so the loader refuses with the absolute resolved path in the message.

Source

Thrown at scripts/lib/install/config.js:60

  }

  const cwd = options.cwd || process.cwd();
  return path.isAbsolute(configPath)
    ? configPath
    : path.normalize(path.join(cwd, configPath));
}

function findDefaultInstallConfigPath(options = {}) {
  const cwd = options.cwd || process.cwd();
  const candidatePath = path.join(cwd, DEFAULT_INSTALL_CONFIG);
  return fs.existsSync(candidatePath) ? candidatePath : null;
}

function loadInstallConfig(configPath, options = {}) {
  const resolvedPath = resolveInstallConfigPath(configPath, options);

  if (!fs.existsSync(resolvedPath)) {
    throw new Error(`Install config not found: ${resolvedPath}`);
  }

  const raw = readJson(resolvedPath, path.basename(resolvedPath));
  const validator = getValidator();

  if (!validator(raw)) {
    throw new Error(
      `Invalid install config ${resolvedPath}: ${formatValidationErrors(validator.errors)}`
    );
  }

  return {
    path: resolvedPath,
    version: raw.version,
    target: raw.target || null,
    profileId: raw.profile || null,
    moduleIds: dedupeStrings(raw.modules),
    includeComponentIds: dedupeStrings(raw.include),

View on GitHub (pinned to 01e15490f0)

Solutions

  1. Check the resolved path printed in the message — is it where you expected?
  2. Pass options.cwd explicitly: loadInstallConfig(p, { cwd: __dirname }).
  3. Use an absolute path to remove cwd ambiguity.
  4. On case-sensitive filesystems, verify the capitalization of every path segment.

Example fix

// before
loadInstallConfig('ecc-install.json'); // run from the wrong cwd

// after
loadInstallConfig('ecc-install.json', { cwd: path.resolve(__dirname) });
// or
loadInstallConfig('/abs/path/to/ecc-install.json');
Defensive patterns

Strategy: validation

Validate before calling

function resolveAndCheck(p, cwd) {
  const resolved = path.isAbsolute(p) ? p : path.resolve(cwd || process.cwd(), p);
  if (!fs.existsSync(resolved)) {
    throw new Error(`Missing install config: ${resolved}`);
  }
  return resolved;
}
resolveAndCheck(configPath, cwd);

Try / catch

try {
  loadInstallConfig(p, { cwd });
} catch (err) {
  if (/Install config not found/.test(err.message)) {
    console.error('Resolved from', cwd, '->', err.message);
  }
  throw err;
}

Prevention

When it happens

Trigger: User passes --config foo.json from a different cwd than expected; a typo in the filename; the file was deleted; case-sensitivity mismatch on Linux.

Common situations: Running the installer from a directory other than the one containing the config; CI that assumes cwd is the repo root but isn't; a path that worked on macOS/Windows (case-insensitive) but fails on Linux.

Related errors


AI-assisted analysis of affaan-m/ECC@01e15490f0 (2026-08-13). Data as JSON: /api/errors/88536448aedbb051. Report an issue: GitHub.