thedotmack/claude-mem · warning
Invalid ${settingName}, using default
Error message
Invalid ${settingName}, using default What it means
readSettingsBackedTimeout first honors an env override for a settings-backed timeout. If the env var is present but parseBoundedTimeout returns null (non-numeric or out of bounds), it warns with the value and bounds and returns the default immediately — settings.json is not consulted for that case.
Source
Thrown at src/shared/worker-utils.ts:109
const parsed = parseInt(rawValue, 10);
if (Number.isFinite(parsed) && parsed >= bounds.min && parsed <= bounds.max) {
return parsed;
}
return null;
}
function readSettingsBackedTimeout(
settingName: keyof SettingsDefaults,
defaultValue: number,
bounds: { min: number; max: number }
): number {
const envVal = process.env[settingName];
if (envVal !== undefined) {
const parsed = parseBoundedTimeout(envVal, bounds);
if (parsed !== null) {
return parsed;
}
logger.warn('SYSTEM', `Invalid ${settingName}, using default`, {
value: envVal, min: bounds.min, max: bounds.max
});
return defaultValue;
}
const settingsValue = getWorkerSettings()[settingName];
const parsed = parseBoundedTimeout(settingsValue, bounds);
if (parsed !== null) {
return parsed;
}
logger.warn('SYSTEM', `Invalid ${settingName} in settings.json, using default`, {
value: settingsValue, min: bounds.min, max: bounds.max
});
return defaultValue;
}
export function getWorkerPort(): number {View on GitHub (pinned to 8bc631a71a)
Solutions
- Fix or clear the env override — it must be an integer within the logged min/max.
- If you meant to configure via settings.json instead, remove the env var so the settings branch is reached.
Defensive patterns
Strategy: validation
Validate before calling
const envVal = process.env[settingName];
if (envVal !== undefined && parseBoundedTimeout(envVal, bounds) === null) {
// env override is invalid and SHADOWS settings.json — remove or fix it
delete process.env[settingName];
} Type guard
const isValidTimeoutOverride = (v: string | undefined, bounds: { min: number; max: number }): boolean =>
v === undefined || parseBoundedTimeout(v, bounds) !== null; Prevention
- Remember an env var (even an invalid one) wins over settings.json — unset it when switching to file config.
- Use bare integers in ms for env overrides.
- Audit CI and dotfiles for stray claude-mem env keys after experimentation.
When it happens
Trigger: An env var named after a settings timeout key is set to a non-integer or out-of-range value, shadowing a perfectly valid settings.json entry.
Common situations: CI pipelines injecting stray env; leftover experimentation values in shell profile; operators overriding settings via env with wrong units.
Understand the failure class
Background: "is not a valid" / "Invalid ... value" environment variable errors: how libraries validate env vars and what to do when they reject yours — this error's family across 48 libraries.
Related errors
- Invalid ${envName}, using default
- Cannot bootstrap server API key: CLAUDE_MEM_SERVER_DATABASE_
- missing_api_key
- Invalid ${CHROMA_PREWARM_TIMEOUT_SETTING}, using default
- Invalid ${settingName} in settings.json, using default
AI-assisted analysis of thedotmack/claude-mem@8bc631a71a (2026-08-20).
Data as JSON: /api/errors/e7a8a4a86238890c.
Report an issue: GitHub.