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
- Create the missing file/directory at the override path, or correct the path in your config/CLI flag.
- Remove the override to let taskmaster fall back to its default search paths.
- Use an absolute path to avoid cwd-dependent resolution issues.
- 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
- Use absolute paths for overrides to be cwd-independent.
- Keep overrides in sync when renaming/moving files (grep config for old paths).
- Prefer omitting overrides and relying on default search when the default location works.
- Watch for case-sensitivity differences between macOS and Linux in CI.
- Validate override paths at config-load time with fs.existsSync and fail with a clear message.
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
- Project root override path does not exist: ${resolvedOverrid
- Required ${pathType} not found. Searched: ${defaultPaths.joi
- MISSING_CONFIGURATION
- INVALID_INPUT
- Unknown provider '${providerName}' for API key resolution.
AI-assisted analysis of eyaltoledano/claude-task-master@c0c98d367c (2026-08-29).
Data as JSON: /api/errors/6f8db3d033504273.
Report an issue: GitHub.