{"record":{"id":"3888085fcfa2c4df","repo":"thedotmack/claude-mem","slug":"invalid-settingname-in-settings-json-using-def","errorCode":null,"errorMessage":"Invalid ${settingName} in settings.json, using default","messagePattern":"Invalid (.+?) in settings\\.json, using default","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/shared/worker-utils.ts","lineNumber":121,"sourceCode":"  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 {\n  if (cachedPort !== null) {\n    return cachedPort;\n  }\n\n  const settings = getWorkerSettings();\n  cachedPort = parseInt(settings.CLAUDE_MEM_WORKER_PORT, 10);\n  return cachedPort;\n}\n\nexport function getWorkerHost(): string {\n  if (cachedHost !== null) {\n    return cachedHost;","sourceCodeStart":103,"sourceCodeEnd":139,"githubUrl":"https://github.com/thedotmack/claude-mem/blob/8bc631a71a487424b866756e43a6efa4574cc66b/src/shared/worker-utils.ts#L103-L139","documentation":"With no env override present, the timeout setting is read from worker settings (settings.json) and run through parseBoundedTimeout. A null result (non-numeric, or numeric but outside min/max) triggers this warning echoing the stored value, and the default is used instead.","triggerScenarios":"settings.json contains a string like \"30s\", a number outside the allowed window, or a malformed value for a timeout key such as the health/readiness timeouts.","commonSituations":"Hand-editing settings.json with units or strings; values carried over from an older version whose bounds differed; JSON type mistakes (string vs number).","solutions":["Edit settings.json so the key is a bare integer (milliseconds) within the min/max shown in the log.","Or delete the key to fall back to the built-in default.","Validate the file's JSON syntax after editing."],"exampleFix":"// settings.json — before\n{ \"HEALTH_CHECK_TIMEOUT_MS\": \"10s\" }\n\n// after\n{ \"HEALTH_CHECK_TIMEOUT_MS\": 10000 }","handlingStrategy":"validation","validationCode":"const settingsValue = getWorkerSettings()[settingName];\nif (parseBoundedTimeout(settingsValue, bounds) === null) {\n  // invalid entry in settings.json — fix or drop the key before it silently becomes a default\n}","typeGuard":"const isNumericSettingsValue = (v: unknown): v is number =>\n  typeof v === 'number' && Number.isFinite(v);","tryCatchPattern":null,"preventionTips":["Keep timeout keys in settings.json as numbers (milliseconds), never strings with units.","Validate settings.json after hand edits (JSON.parse check) and again against min/max bounds from logs.","When upgrading claude-mem, re-check bounds — older values may fall outside the new window."],"tags":["settings-json","timeout","configuration","claude-mem"],"backgroundTag":"invalid-config-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"}