eyaltoledano/claude-task-master · error

${pathType} override path does not exist: ${resolvedPath}

Error message

${pathType} override path does not exist: ${resolvedPath}

What it means

resolvePath() treats explicitly provided override paths as strict: for non-output path types, it checks fs.existsSync on the resolved path and throws this error if the override points at something that does not exist. Unlike defaults, overrides are never searched or defaulted — a bad override is treated as a user error and fails fast.

Source

Thrown at src/task-master.js:190

				? override
				: path.resolve(basePath || process.cwd(), override);

			if (createParentDirs) {
				// For output paths, create parent directory if it doesn't exist
				const parentDir = path.dirname(resolvedPath);
				if (!fs.existsSync(parentDir)) {
					try {
						fs.mkdirSync(parentDir, { recursive: true });
					} catch (error) {
						throw new Error(
							`Could not create directory for ${pathType}: ${parentDir}. Error: ${error.message}`
						);
					}
				}
			} else {
				// Original validation logic
				if (!fs.existsSync(resolvedPath)) {
					throw new Error(
						`${pathType} override path does not exist: ${resolvedPath}`
					);
				}
			}
			return resolvedPath;
		}

		if (override === true) {
			// Required path - search defaults and fail if not found
			for (const defaultPath of defaultPaths) {
				const fullPath = path.isAbsolute(defaultPath)
					? defaultPath
					: path.join(basePath || process.cwd(), defaultPath);
				if (fs.existsSync(fullPath)) {
					return fullPath;
				}
			}
			throw new Error(

View on GitHub (pinned to c0c98d367c)

Solutions

  1. Create the missing file/directory at the override path, or correct the path in your config/CLI flag.
  2. Remove the override to let taskmaster fall back to its default search paths.
  3. Use an absolute path to avoid cwd-dependent resolution issues.
  4. Check exact spelling/case of the path, especially on case-sensitive filesystems.

Example fix

// before
// config.json
{ "prdPath": "./docs/PRD.md" }   // file was moved
// after
{ "prdPath": "./docs/prd/main-prd.md" }  // or delete the override to use defaults
Defensive patterns

Strategy: validation

Validate before calling

function assertOverrideExists(resolvedPath, pathType) {
  if (!fs.existsSync(resolvedPath)) {
    // remove the override from config or create the file before proceeding
    throw new Error(`${pathType} override will fail — path missing: ${resolvedPath}`);
  }
}
const p = path.resolve(cfg.prdPath);
assertOverrideExists(p, 'PRD');

Try / catch

try {
  paths.prd = tm.resolvePath({ prdPath: cfg.prdPath });
} catch (err) {
  if (err.message.includes('override path does not exist')) {
    console.warn(err.message, '— falling back to default paths');
    delete overrides.prdPath;
    paths.prd = tm.resolvePath(overrides);
  } else {
    throw err;
  }
}

Prevention

When it happens

Trigger: Passing --prds-path ./prd/custom.md when that file is absent; a config override pointing to a file renamed or deleted after config was written; relative paths resolved against a different cwd than expected (e.g. running from a subdirectory).

Common situations: Renamed/refactored files while an old path remains in .taskmaster/config.json; CI running from a different working directory so a relative override no longer resolves; typos or case-sensitivity mismatches (macOS case-insensitive vs Linux case-sensitive).

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 eyaltoledano/claude-task-master@c0c98d367c (2026-08-29). Data as JSON: /api/errors/6f8db3d033504273. Report an issue: GitHub.