affaan-m/ECC · error
Install config not found
Error message
Install config not found: ${resolvedPath} What it means
loadInstallConfig() resolves the requested install config path and checks it with fs.existsSync() before reading. When no file exists at the resolved path it throws this error naming the fully resolved path. It is the installer's guard against running an install from a missing or misconfigured config file.
Solutions
- Check the resolved path printed in the error and verify the file exists there (ls <resolvedPath>); create or restore it if missing.
- Fix the config path you passed (--config / loadInstallConfig argument) — correct typos and use an absolute path when unsure of cwd.
- If the config should come from the repo, pull/checkout the latest changes so the default config file is present.
- Run the installer from the repository root so relative config paths resolve as documented.
Example fix
// before
loadInstallConfig('instal-config.json')
// after
loadInstallConfig(path.join(repoRoot, 'manifests', 'install-config.json')) Defensive patterns
Strategy: validation
Validate before calling
const fs = require('fs');
const resolved = require('path').resolve(configPath);
if (!fs.existsSync(resolved)) {
throw new Error(`Install config not found before call: ${resolved}`);
}
loadInstallConfig(resolved); Type guard
function configExists(p) { return typeof p === 'string' && fs.existsSync(p) && fs.statSync(p).isFile(); } Try / catch
try {
const config = loadInstallConfig(configPath);
} catch (err) {
if (err.message.startsWith('Install config not found')) {
console.error(`Config missing at ${configPath}; create it or pass --config <path>`);
process.exitCode = 1;
} else throw err;
} Prevention
- Use absolute paths for install configs so cwd changes cannot break resolution.
- Commit default install configs to the repository and reference them via repo-root-relative joins.
- Check fs.existsSync on the resolved path before invoking the installer in scripts.
- Keep one canonical config path constant instead of scattering relative paths in aliases.
When it happens
Trigger: Calling loadInstallConfig('path/to/config.json') where the file does not exist on disk; running the installer with a --config flag pointing to a typoed, deleted, or never-created config path; passing a path relative to the wrong working directory so resolveInstallConfigPath lands on a nonexistent absolute path.
Common situations: Fresh clone without the expected config checked in; developer deletes or renames a custom install config but old scripts/aliases still reference it; running the installer from a different cwd than intended so relative config paths resolve elsewhere; typos like instal-config.json.
Understand the failure class
Background: "Config file not found": what it means and how to fix it in docker-sync, Maven, Vagrant, Turborepo and other tools — this error's family across 60 libraries.
Related errors
- Legacy Codex sync state not found at
- no style pack ' ' under - run mint.py first
- repoRoot is required to plan Kimi MCP configuration
- agent profile inheritance cycle
- Agents directory not found
AI-assisted analysis of affaan-m/ECC@8321021c54 (2026-09-16).
Data as JSON: /api/errors/88536448aedbb051.
Report an issue: GitHub.
Appendix: source
Thrown at scripts/lib/install/config.js:62
}
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 8321021c54)