affaan-m/ECC · error

Selection excludes every requested install module

Error message

Selection excludes every requested install module

What it means

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'.

Solutions

  1. Remove or narrow the exclusion list so at least one requested module survives
  2. Exclude a different component than the ones included
  3. Add more modules/components to the include side
  4. Validate overlap of include/exclude sets in your CLI before calling

Example fix

// before
resolveInstallPlan({ profileId: 'standard', excludeComponentIds: ['skills/tdd-workflow','skills/security-review','skills/api-design'] }) // excludes all standard modules
// after
resolveInstallPlan({ profileId: 'standard', excludeComponentIds: ['skills/api-design'] })
Defensive patterns

Strategy: validation

Validate before calling

const manifests = loadInstallManifests();
const requested = new Set([
  ...(manifests.profiles[options.profileId]?.modules ?? []),
  ...(options.includeModuleIds ?? []),
]);
const excluded = new Set((options.excludeComponentIds ?? []).flatMap(id => manifests.componentsById.get(id)?.modules ?? []));
if ([...requested].every(m => excluded.has(m))) {
  throw new Error('exclusions remove every requested module');
}

Type guard

function leavesAnyRequestedModule(requestedIds, excludedModuleIds) {
  const ex = new Set(excludedModuleIds);
  return requestedIds.some(id => !ex.has(id));
}

Try / catch

try {
  const plan = resolveInstallPlan(options);
} catch (err) {
  if (err.message === 'Selection excludes every requested install module') {
    console.error('Your include/exclude selections conflict; remove some exclusions.'); process.exitCode = 2;
  } else throw err;
}

Prevention

When it happens

Trigger: resolveInstallPlan({ profileId: 'standard', includeComponentIds: ['agents/x'], excludeComponentIds: ['agents/x'] }) or excluding components whose module set covers all requested modules.

Common situations: 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.

Understand the failure class

Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.

Related errors


AI-assisted analysis of affaan-m/ECC@8321021c54 (2026-09-16). Data as JSON: /api/errors/c6d070412654270c. Report an issue: GitHub.

Appendix: source

Thrown at scripts/lib/install-manifests.js:622

    ? {
      repoRoot: manifests.repoRoot,
      projectRoot: validatedProjectRoot || manifests.repoRoot,
      homeDir: validatedHomeDir || os.homedir(),
      env: resolveInvocationEnvironment(options),
    }
    : null;
  const targetAdapter = target ? getInstallTargetAdapter(target) : null;

  const effectiveRequestedIds = dedupeStrings(
    requestedModuleIds.filter(moduleId => !excludedModuleOwners.has(moduleId))
  );

  if (requestedModuleIds.length === 0) {
    throw new Error('No install profile, module IDs, or included component IDs were provided');
  }

  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)) {

View on GitHub (pinned to 8321021c54)