{"record":{"id":"88536448aedbb051","repo":"affaan-m/ECC","slug":"install-config-not-found-resolvedpath","errorCode":null,"errorMessage":"Install config not found: ${resolvedPath}","messagePattern":"Install config not found: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"scripts/lib/install/config.js","lineNumber":60,"sourceCode":"  }\n\n  const cwd = options.cwd || process.cwd();\n  return path.isAbsolute(configPath)\n    ? configPath\n    : path.normalize(path.join(cwd, configPath));\n}\n\nfunction findDefaultInstallConfigPath(options = {}) {\n  const cwd = options.cwd || process.cwd();\n  const candidatePath = path.join(cwd, DEFAULT_INSTALL_CONFIG);\n  return fs.existsSync(candidatePath) ? candidatePath : null;\n}\n\nfunction loadInstallConfig(configPath, options = {}) {\n  const resolvedPath = resolveInstallConfigPath(configPath, options);\n\n  if (!fs.existsSync(resolvedPath)) {\n    throw new Error(`Install config not found: ${resolvedPath}`);\n  }\n\n  const raw = readJson(resolvedPath, path.basename(resolvedPath));\n  const validator = getValidator();\n\n  if (!validator(raw)) {\n    throw new Error(\n      `Invalid install config ${resolvedPath}: ${formatValidationErrors(validator.errors)}`\n    );\n  }\n\n  return {\n    path: resolvedPath,\n    version: raw.version,\n    target: raw.target || null,\n    profileId: raw.profile || null,\n    moduleIds: dedupeStrings(raw.modules),\n    includeComponentIds: dedupeStrings(raw.include),","sourceCodeStart":42,"sourceCodeEnd":78,"githubUrl":"https://github.com/affaan-m/ECC/blob/01e15490f04e29cfefe3896951f43db46994d8ee/scripts/lib/install/config.js#L42-L78","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Check the resolved path printed in the message — is it where you expected?","Pass options.cwd explicitly: loadInstallConfig(p, { cwd: __dirname }).","Use an absolute path to remove cwd ambiguity.","On case-sensitive filesystems, verify the capitalization of every path segment."],"exampleFix":"// before\nloadInstallConfig('ecc-install.json'); // run from the wrong cwd\n\n// after\nloadInstallConfig('ecc-install.json', { cwd: path.resolve(__dirname) });\n// or\nloadInstallConfig('/abs/path/to/ecc-install.json');","handlingStrategy":"validation","validationCode":"function resolveAndCheck(p, cwd) {\n  const resolved = path.isAbsolute(p) ? p : path.resolve(cwd || process.cwd(), p);\n  if (!fs.existsSync(resolved)) {\n    throw new Error(`Missing install config: ${resolved}`);\n  }\n  return resolved;\n}\nresolveAndCheck(configPath, cwd);","typeGuard":null,"tryCatchPattern":"try {\n  loadInstallConfig(p, { cwd });\n} catch (err) {\n  if (/Install config not found/.test(err.message)) {\n    console.error('Resolved from', cwd, '->', err.message);\n  }\n  throw err;\n}","preventionTips":["Resolve config paths to absolute form before invoking the loader.","Print the cwd in your CLI's error output so users can see where the lookup happened.","On case-sensitive filesystems, double-check capitalization."],"tags":["install-config","file-not-found"],"backgroundTag":null,"analyzedSha":"01e15490f04e29cfefe3896951f43db46994d8ee","analyzedAt":"2026-08-13T00:31:08.655Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}