affaan-m/ECC · error · Error

Install manifests not found under ${repoRoot}

Error message

Install manifests not found under ${repoRoot}

What it means

loadInstallManifests checks for the existence of install-modules.json and install-profiles.json under <repoRoot>/manifests/ and throws if either is missing. install-components.json is optional, but modules and profiles are mandatory baseline inputs.

Source

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

  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'),
  };
}

function loadInstallManifests(options = {}) {
  const repoRoot = options.repoRoot || DEFAULT_REPO_ROOT;
  const { modulesPath, profilesPath, componentsPath } = getManifestPaths(repoRoot);

  if (!fs.existsSync(modulesPath) || !fs.existsSync(profilesPath)) {
    throw new Error(`Install manifests not found under ${repoRoot}`);
  }

  const modulesData = readJson(modulesPath, 'install-modules.json');
  const profilesData = readJson(profilesPath, 'install-profiles.json');
  const componentsData = fs.existsSync(componentsPath)
    ? readJson(componentsPath, 'install-components.json')
    : { version: null, components: [] };
  const modules = Array.isArray(modulesData.modules) ? modulesData.modules.slice() : [];
  const profiles = profilesData && typeof profilesData.profiles === 'object'
    ? profilesData.profiles
    : {};
  const components = Array.isArray(componentsData.components) ? componentsData.components.slice() : [];

  addSyntheticSkillComponents({ repoRoot, modules, components });

  for (const module of modules) {
    readModuleTargetsOrThrow(module);
  }

View on GitHub (pinned to 01e15490f0)

Solutions

  1. Confirm the repoRoot in the error and verify `ls <repoRoot>/manifests/` shows install-modules.json and install-profiles.json.
  2. If missing, restore from git: `git checkout HEAD -- manifests/` or re-clone with full history.
  3. Run the installer from the repository root, or pass --repoRoot explicitly pointing at the real repo.
  4. If packaging a tarball, ensure manifests/ is included.

Example fix

// before: invoked from /tmp, DEFAULT_REPO_ROOT resolves there
// after:
cd /path/to/ECC
./install.sh --target claude
# or: ./install.sh --target claude --repoRoot /path/to/ECC
Defensive patterns

Strategy: validation

Validate before calling

const fs = require('fs');
const path = require('path');
function manifestsExist(repoRoot) {
  return fs.existsSync(path.join(repoRoot, 'manifests', 'install-modules.json'))
      && fs.existsSync(path.join(repoRoot, 'manifests', 'install-profiles.json'));
}
// before invoking installer: assert manifestsExist(repoRoot)

Type guard

function hasRequiredManifests(repoRoot) {
  return manifestsExist(repoRoot);
}

Try / catch

try {
  loadInstallManifests({ repoRoot });
} catch (err) {
  if (err.message.startsWith('Install manifests not found under')) {
    // restore manifests/ from git or fix repoRoot, then retry
  } else throw err;
}

Prevention

When it happens

Trigger: Calling loadInstallManifests (or any API that calls it — listInstallComponents, resolveInstallModules, createManifestInstallPlan) with a repoRoot that lacks manifests/install-modules.json or manifests/install-profiles.json. Also triggered when DEFAULT_REPO_ROOT is wrong because the installer is invoked from outside the repo.

Common situations: Shallow/partial clone excluded manifests/; manifests/ deleted or not committed; installer invoked from /tmp or a non-repo directory so DEFAULT_REPO_ROOT (__dirname/../..) resolves to a path without manifests; wrong --repoRoot flag value; extracted tarball missing the manifests folder.

Related errors


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