{"record":{"id":"b150206658b195fc","repo":"affaan-m/ECC","slug":"unknown-install-module-unknownmoduleids-0","errorCode":null,"errorMessage":"Unknown install module: ${unknownModuleIds[0]}","messagePattern":"Unknown install module: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"scripts/lib/install-manifests.js","lineNumber":277,"sourceCode":"    throw new Error(`Install module ${moduleId} has invalid targets; expected an array of supported target ids`);\n  }\n\n  const unsupportedTargets = normalizedTargets.filter(target => !SUPPORTED_INSTALL_TARGETS.includes(target));\n  if (unsupportedTargets.length > 0) {\n    throw new Error(\n      `Install module ${moduleId} has unsupported targets: ${unsupportedTargets.join(', ')}`\n    );\n  }\n\n  return normalizedTargets;\n}\n\nfunction assertKnownModuleIds(moduleIds, manifests) {\n  const unknownModuleIds = dedupeStrings(moduleIds)\n    .filter(moduleId => !manifests.modulesById.has(moduleId));\n\n  if (unknownModuleIds.length === 1) {\n    throw new Error(`Unknown install module: ${unknownModuleIds[0]}`);\n  }\n\n  if (unknownModuleIds.length > 1) {\n    throw new Error(`Unknown install modules: ${unknownModuleIds.join(', ')}`);\n  }\n}\n\nfunction intersectTargets(modules) {\n  if (!Array.isArray(modules) || modules.length === 0) {\n    return [];\n  }\n\n  return SUPPORTED_INSTALL_TARGETS.filter(target => (\n    modules.every(module => Array.isArray(module.targets) && module.targets.includes(target))\n  ));\n}\n\nfunction getManifestPaths(repoRoot = DEFAULT_REPO_ROOT) {","sourceCodeStart":259,"sourceCodeEnd":295,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/scripts/lib/install-manifests.js#L259-L295","documentation":"Thrown by assertKnownModuleIds when exactly one requested module id does not exist in the loaded manifests' modulesById map. Callers validate user-supplied or profile-supplied module selections against manifests loaded from install-modules.json. The singular variant fires when exactly one id is unknown.","triggerScenarios":"validateInstallModuleIds() or resolveLegacyCompatibilitySelection() invoked with a module id list containing exactly one id absent from install-modules.json, e.g. validateInstallModuleIds(['my-module']) where 'my-module' is not defined in the manifest.","commonSituations":"Typo in a module id on the CLI or in a profile config; referencing a module that was renamed or removed in a newer ECC version; copying a module id from stale docs; legacy selection strings pointing at retired modules.","solutions":["Check the module id in the error and correct the typo in your selection/profile.","List valid module ids from manifests/install-modules.json and pick the current name.","If the module was renamed in a recent update, update your config/commands to the new id.","If the id is legacy, rely on resolveLegacyCompatibilitySelection mapping or remove the legacy reference.","Run npm run catalog:sync if the module exists in skills/ but was never added to the manifest."],"exampleFix":"// before\nvalidateInstallModuleIds(['tdd-workflo'])\n\n// after\nvalidateInstallModuleIds(['tdd-workflow'])","handlingStrategy":"validation","validationCode":"const manifests = loadInstallManifests();\nconst unknown = ids.filter(id => !manifests.modulesById.has(id));\nif (unknown.length) throw new Error(`Fix these ids before calling: ${unknown.join(', ')}`);","typeGuard":"function areKnownModuleIds(ids, manifests) {\n  return Array.isArray(ids) && ids.every(id => manifests.modulesById.has(id));\n}","tryCatchPattern":"try {\n  validateInstallModuleIds(userIds);\n} catch (err) {\n  if (/^Unknown install module: /.test(err.message)) {\n    console.error(`Invalid module id in config: ${err.message}`);\n    process.exitCode = 1;\n  } else throw err;\n}","preventionTips":["Derive module ids from manifests/install-modules.json instead of hardcoding strings.","After upgrading ECC, diff your profile ids against the new manifest.","Enable editor autocompletion via JSON schema for module ids.","Document module renames so users update configs."],"tags":["config","not-found","install-manifests","validation"],"backgroundTag":"entity-not-found","analyzedSha":"8321021c54d670126ce3b2969d5deb880b4b0c2a","analyzedAt":"2026-09-16T10:08:13.343Z","contentChangedAt":"2026-09-16T10:08:13.343Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}