affaan-m/ECC · error · Error
Unknown install modules: ${unknownModuleIds.join(', ')}
Error message
Unknown install modules: ${unknownModuleIds.join(', ')} What it means
Plural counterpart of 175: assertKnownModuleIds collects all unknown ids and throws this form when two or more are unknown. Same trigger but the request contained multiple bad ids at once.
Source
Thrown at scripts/lib/install-manifests.js:261
if (unsupportedTargets.length > 0) {
throw new Error(
`Install module ${moduleId} has unsupported targets: ${unsupportedTargets.join(', ')}`
);
}
return normalizedTargets;
}
function assertKnownModuleIds(moduleIds, manifests) {
const unknownModuleIds = dedupeStrings(moduleIds)
.filter(moduleId => !manifests.modulesById.has(moduleId));
if (unknownModuleIds.length === 1) {
throw new Error(`Unknown install module: ${unknownModuleIds[0]}`);
}
if (unknownModuleIds.length > 1) {
throw new Error(`Unknown install modules: ${unknownModuleIds.join(', ')}`);
}
}
function intersectTargets(modules) {
if (!Array.isArray(modules) || modules.length === 0) {
return [];
}
return SUPPORTED_INSTALL_TARGETS.filter(target => (
modules.every(module => Array.isArray(module.targets) && module.targets.includes(target))
));
}
function getManifestPaths(repoRoot = DEFAULT_REPO_ROOT) {
return {
modulesPath: path.join(repoRoot, 'manifests', 'install-modules.json'),
profilesPath: path.join(repoRoot, 'manifests', 'install-profiles.json'),
componentsPath: path.join(repoRoot, 'manifests', 'install-components.json'),View on GitHub (pinned to 01e15490f0)
Solutions
- Cross-check each id in the comma-separated list against `modules[].id` in install-modules.json.
- Fix typos / rename mappings for all listed ids.
- Drop any ids that no longer exist from the request.
- Add a preflight validation step in the caller that intersects requested ids with manifest ids.
Example fix
// before: ./install.sh --target claude --modules rules-coree,agents-coree // after: ./install.sh --target claude --modules rules-core,agents-core
Defensive patterns
Strategy: validation
Validate before calling
function filterUnknownModuleIds(ids, manifests) {
const known = new Set(manifests.modules.map(m => m.id));
return [...new Set(ids)].filter(id => !known.has(id));
}
// before resolveInstallModules: assert filterUnknownModuleIds(requested, manifests).length === 0 Type guard
function areAllKnownModuleIds(ids, manifests) {
return ids.every(id => manifests.modulesById.has(id));
} Try / catch
try {
resolveInstallModules(moduleIds, options);
} catch (err) {
if (err.message.startsWith('Unknown install modules: ')) {
// parse comma list, drop or rename each, retry
} else throw err;
} Prevention
- Bulk-validate module id lists against the manifest before forwarding to the installer.
- Maintain a rename map when modules are renamed and surface deprecation warnings.
- Add a preflight lint step in automation scripts.
- Snapshot the manifest id list in tests so renames break the test suite visibly.
When it happens
Trigger: Caller passes several unknown module ids in one request (e.g. --modules foo,bar,baz where none exist). Also triggered by profiles or component definitions that list multiple missing module ids.
Common situations: Bulk CLI request with multiple typos; profile authored against a different manifest set; renamed bulk of modules; downstream consumer passing programmatic module lists without validating against the manifest first.
Related errors
- Unknown install module: ${unknownModuleIds[0]}
- Install module ${moduleId} has invalid targets; expected an
- Install module ${moduleId} has unsupported targets: ${unsupp
- Unknown install component: ${normalizedComponentId}
- Unknown install component: ${componentId}
AI-assisted analysis of affaan-m/ECC@01e15490f0 (2026-08-13).
Data as JSON: /api/errors/588f7ec5e48b035a.
Report an issue: GitHub.