affaan-m/ECC · critical · Error
Unknown install module: ${moduleId}
Error message
Unknown install module: ${moduleId} What it means
Thrown by the internal resolveModule() recursion during plan resolution when a module id (either a requested id or a dependency id encountered while walking module.dependencies) is not present in manifests.modulesById. This indicates a manifest integrity problem: a component or profile references a module id that install-modules.json does not define.
Source
Thrown at scripts/lib/install-manifests.js:612
}
if (effectiveRequestedIds.length === 0) {
throw new Error('Selection excludes every requested install module');
}
const selectedIds = new Set();
const skippedTargetIds = new Set();
const excludedIds = new Set([
...excludedModuleIds,
...targetDefaultExclusions.map(exclusion => exclusion.moduleId),
]);
const visitingIds = new Set();
const resolvedIds = new Set();
function resolveModule(moduleId, dependencyOf, rootRequesterId) {
const module = manifests.modulesById.get(moduleId);
if (!module) {
throw new Error(`Unknown install module: ${moduleId}`);
}
if (excludedModuleOwners.has(moduleId)) {
if (dependencyOf) {
const owners = excludedModuleOwners.get(moduleId) || [];
throw new Error(
`Module ${dependencyOf} depends on excluded module ${moduleId}${owners.length > 0 ? ` (excluded by ${owners.join(', ')})` : ''}`
);
}
return;
}
const supportsTarget = !target
|| (
readModuleTargetsOrThrow(module).includes(target)
&& (!targetAdapter || targetAdapter.supportsModule(module, targetPlanningInput))
);
View on GitHub (pinned to 01e15490f0)
Solutions
- Run validateInstallModuleIds() on the suspect list to surface unknown ids.
- Re-clone or git checkout HEAD -- manifests/ to restore a consistent set.
- Inspect install-modules.json for the expected module id and update references accordingly.
- If you maintain a fork, run the manifest consistency tests (npm test) before invoking the installer.
Example fix
// before — manifests reference a missing module
resolveInstallPlan({ target: 'claude', moduleIds: ['rules-core', 'old-name'] });
// after — validate first, then call
const { validateInstallModuleIds } = require('./scripts/lib/install-manifests');
const moduleIds = validateInstallModuleIds(['rules-core', 'old-name']); // throws 'Unknown install module: old-name'
resolveInstallPlan({ target: 'claude', moduleIds }); Defensive patterns
Strategy: validation
Validate before calling
const { validateInstallModuleIds } = require('./scripts/lib/install-manifests');
const moduleIds = validateInstallModuleIds(options.moduleIds || []); // throws 'Unknown install module: <id>' with a cleaner message
resolveInstallPlan({ ...options, moduleIds }); Try / catch
try {
return resolveInstallPlan(options);
} catch (err) {
if (/^Unknown install module:/.test(err.message)) {
// manifest integrity issue — surface to operator, do not retry
throw new Error(`Manifest integrity error: ${err.message}. Run 'git checkout HEAD -- manifests/'.`);
}
throw err;
} Prevention
- Run validateInstallModuleIds() on any externally-supplied module list before planning.
- Run npm test (manifest consistency tests) before invoking the installer in CI.
When it happens
Trigger: A profile in install-profiles.json lists 'foo-bar' but install-modules.json has no such module; a component lists a module that was renamed; a module's dependencies array references a removed id; install-modules.json is partially cloned.
Common situations: Repo is on a branch that edited one manifest file but not the others; a custom module was deleted without updating its dependents; a fork renamed modules without updating components; partial git checkout.
Related errors
- Circular install dependency detected at ${moduleId}
- Unknown install component: ${componentId}
- Module ${dependencyOf} depends on excluded module ${moduleId
- Failed to parse ${label} at ${filePath}: ${error.message}
- Invalid ${label} at ${filePath}: expected a JSON object
AI-assisted analysis of affaan-m/ECC@01e15490f0 (2026-08-13).
Data as JSON: /api/errors/a97cf172d2f53eef.
Report an issue: GitHub.