{"record":{"id":"c6d070412654270c","repo":"affaan-m/ECC","slug":"selection-excludes-every-requested-install-module","errorCode":null,"errorMessage":"Selection excludes every requested install module","messagePattern":"Selection excludes every requested install module","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"scripts/lib/install-manifests.js","lineNumber":622,"sourceCode":"    ? {\n      repoRoot: manifests.repoRoot,\n      projectRoot: validatedProjectRoot || manifests.repoRoot,\n      homeDir: validatedHomeDir || os.homedir(),\n      env: resolveInvocationEnvironment(options),\n    }\n    : null;\n  const targetAdapter = target ? getInstallTargetAdapter(target) : null;\n\n  const effectiveRequestedIds = dedupeStrings(\n    requestedModuleIds.filter(moduleId => !excludedModuleOwners.has(moduleId))\n  );\n\n  if (requestedModuleIds.length === 0) {\n    throw new Error('No install profile, module IDs, or included component IDs were provided');\n  }\n\n  if (effectiveRequestedIds.length === 0) {\n    throw new Error('Selection excludes every requested install module');\n  }\n\n  const selectedIds = new Set();\n  const skippedTargetIds = new Set();\n  const excludedIds = new Set([\n    ...excludedModuleIds,\n    ...targetDefaultExclusions.map(exclusion => exclusion.moduleId),\n  ]);\n  const visitingIds = new Set();\n  const resolvedIds = new Set();\n\n  function resolveModule(moduleId, dependencyOf, rootRequesterId) {\n    const module = manifests.modulesById.get(moduleId);\n    if (!module) {\n      throw new Error(`Unknown install module: ${moduleId}`);\n    }\n\n    if (excludedModuleOwners.has(moduleId)) {","sourceCodeStart":604,"sourceCodeEnd":640,"githubUrl":"https://github.com/affaan-m/ECC/blob/8321021c54d670126ce3b2969d5deb880b4b0c2a/scripts/lib/install-manifests.js#L604-L640","documentation":"After exclusions are applied, if every requested module was removed by excludedComponentIds/exclusions, the plan would be empty and resolveInstallPlan throws. This distinguishes 'you asked for nothing' (error 277) from 'you asked for something but excluded all of it'.","triggerScenarios":"resolveInstallPlan({ profileId: 'standard', includeComponentIds: ['agents/x'], excludeComponentIds: ['agents/x'] }) or excluding components whose module set covers all requested modules.","commonSituations":"Include and exclude flags that overlap completely, a profile consisting of one component that is also excluded, or scripted exclusion lists that grew to cover everything.","solutions":["Remove or narrow the exclusion list so at least one requested module survives","Exclude a different component than the ones included","Add more modules/components to the include side","Validate overlap of include/exclude sets in your CLI before calling"],"exampleFix":"// before\nresolveInstallPlan({ profileId: 'standard', excludeComponentIds: ['skills/tdd-workflow','skills/security-review','skills/api-design'] }) // excludes all standard modules\n// after\nresolveInstallPlan({ profileId: 'standard', excludeComponentIds: ['skills/api-design'] })","handlingStrategy":"validation","validationCode":"const manifests = loadInstallManifests();\nconst requested = new Set([\n  ...(manifests.profiles[options.profileId]?.modules ?? []),\n  ...(options.includeModuleIds ?? []),\n]);\nconst excluded = new Set((options.excludeComponentIds ?? []).flatMap(id => manifests.componentsById.get(id)?.modules ?? []));\nif ([...requested].every(m => excluded.has(m))) {\n  throw new Error('exclusions remove every requested module');\n}","typeGuard":"function leavesAnyRequestedModule(requestedIds, excludedModuleIds) {\n  const ex = new Set(excludedModuleIds);\n  return requestedIds.some(id => !ex.has(id));\n}","tryCatchPattern":"try {\n  const plan = resolveInstallPlan(options);\n} catch (err) {\n  if (err.message === 'Selection excludes every requested install module') {\n    console.error('Your include/exclude selections conflict; remove some exclusions.'); process.exitCode = 2;\n  } else throw err;\n}","preventionTips":["Check overlap between include and exclude lists before building the plan","Warn users when an exclusion removes most of a profile","Keep exclusion lists minimal and explicit"],"tags":["validation","install","conflict"],"backgroundTag":"empty-result-set","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"}