affaan-m/ECC · error · Error

Seed path does not exist in repoRoot

Error message

Seed path does not exist in repoRoot: ${seedPath}

What it means

overlaySeedPaths copies each normalized seed path from the repo root into the target worktree. It throws when the source file/directory does not exist in repoRoot (checked with fs.existsSync), preventing silent no-op seeding. This is a hard existence check on the repo-side source before copy.

Solutions

  1. Verify the path exists in repoRoot (ls repoRoot/<seedPath>) and fix the seedPath spelling.
  2. Create the missing file/directory or run the build step that generates it before orchestrating.
  3. Remove the stale entry from seedPaths if it is no longer needed.
  4. Commit the file if it was expected to be tracked but is missing from a fresh clone.

Example fix

// before
seedPaths: ['skills/my-skill'] // directory renamed
// after
seedPaths: ['skills/my-skill-v2']
Defensive patterns

Strategy: validation

Validate before calling

const fs = require('fs');
const path = require('path');
for (const sp of seedPaths) {
  if (!fs.existsSync(path.join(repoRoot, sp))) throw new Error(`Seed path missing before overlay: ${sp}`);
}

Type guard

const seedExists = (root, sp) => fs.existsSync(path.join(root, sp));

Try / catch

try {
  overlaySeedPaths(repoRoot, worktreePath, seedPaths);
} catch (e) {
  if (String(e.message).startsWith('Seed path does not exist in repoRoot')) {
    console.error('Missing seed source; run build or fix config:', e.message);
  }
  throw e;
}

Prevention

When it happens

Trigger: Passing a seedPath that names a file/directory absent from the current repo (typo, renamed dir, file deleted); seeding a path that only exists after a build step; running the orchestrator in a fresh clone where an untracked generated asset is missing.

Common situations: Config referencing 'dist/output.js' before building; a renamed skill directory (e.g. 'skills/my-skill' moved); stale orchestration config after a repo restructure.

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


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

Appendix: source

Thrown at scripts/lib/tmux-worktree-orchestrator.js:94

      continue;
    }

    seen.add(normalizedPath);
    normalized.push(normalizedPath);
  }

  return normalized;
}

function overlaySeedPaths({ repoRoot, seedPaths, worktreePath }) {
  const normalizedSeedPaths = normalizeSeedPaths(seedPaths, repoRoot);

  for (const seedPath of normalizedSeedPaths) {
    const sourcePath = path.join(repoRoot, seedPath);
    const destinationPath = path.join(worktreePath, seedPath);

    if (!fs.existsSync(sourcePath)) {
      throw new Error(`Seed path does not exist in repoRoot: ${seedPath}`);
    }

    fs.mkdirSync(path.dirname(destinationPath), { recursive: true });
    fs.rmSync(destinationPath, { force: true, recursive: true });
    fs.cpSync(sourcePath, destinationPath, {
      dereference: false,
      force: true,
      preserveTimestamps: true,
      recursive: true
    });
  }
}

function buildWorkerArtifacts(workerPlan) {
  const seededPathsSection = workerPlan.seedPaths.length > 0
    ? [
        '',
        '## Seeded Local Overlays',

View on GitHub (pinned to 8321021c54)