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

  1. Run validateInstallModuleIds() on the suspect list to surface unknown ids.
  2. Re-clone or git checkout HEAD -- manifests/ to restore a consistent set.
  3. Inspect install-modules.json for the expected module id and update references accordingly.
  4. 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

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


AI-assisted analysis of affaan-m/ECC@01e15490f0 (2026-08-13). Data as JSON: /api/errors/a97cf172d2f53eef. Report an issue: GitHub.