{"record":{"id":"e7a8a4a86238890c","repo":"thedotmack/claude-mem","slug":"invalid-settingname-using-default","errorCode":null,"errorMessage":"Invalid ${settingName}, using default","messagePattern":"Invalid (.+?), using default","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/shared/worker-utils.ts","lineNumber":109,"sourceCode":"  const parsed = parseInt(rawValue, 10);\n  if (Number.isFinite(parsed) && parsed >= bounds.min && parsed <= bounds.max) {\n    return parsed;\n  }\n  return null;\n}\n\nfunction readSettingsBackedTimeout(\n  settingName: keyof SettingsDefaults,\n  defaultValue: number,\n  bounds: { min: number; max: number }\n): number {\n  const envVal = process.env[settingName];\n  if (envVal !== undefined) {\n    const parsed = parseBoundedTimeout(envVal, bounds);\n    if (parsed !== null) {\n      return parsed;\n    }\n    logger.warn('SYSTEM', `Invalid ${settingName}, using default`, {\n      value: envVal, min: bounds.min, max: bounds.max\n    });\n    return defaultValue;\n  }\n\n  const settingsValue = getWorkerSettings()[settingName];\n  const parsed = parseBoundedTimeout(settingsValue, bounds);\n  if (parsed !== null) {\n    return parsed;\n  }\n\n  logger.warn('SYSTEM', `Invalid ${settingName} in settings.json, using default`, {\n    value: settingsValue, min: bounds.min, max: bounds.max\n  });\n  return defaultValue;\n}\n\nexport function getWorkerPort(): number {","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/thedotmack/claude-mem/blob/8bc631a71a487424b866756e43a6efa4574cc66b/src/shared/worker-utils.ts#L91-L127","documentation":"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.","triggerScenarios":"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.","commonSituations":"CI pipelines injecting stray env; leftover experimentation values in shell profile; operators overriding settings via env with wrong units.","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."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"const envVal = process.env[settingName];\nif (envVal !== undefined && parseBoundedTimeout(envVal, bounds) === null) {\n  // env override is invalid and SHADOWS settings.json — remove or fix it\n  delete process.env[settingName];\n}","typeGuard":"const isValidTimeoutOverride = (v: string | undefined, bounds: { min: number; max: number }): boolean =>\n  v === undefined || parseBoundedTimeout(v, bounds) !== null;","tryCatchPattern":null,"preventionTips":["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."],"tags":["env-var","timeout","settings","claude-mem"],"backgroundTag":"invalid-env-var-value","analyzedSha":"8bc631a71a487424b866756e43a6efa4574cc66b","analyzedAt":"2026-08-20T23:58:13.836Z","contentChangedAt":"2026-08-20T23:58:13.836Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}