{"record":{"id":"1d6a1da64dd43fb3","repo":"thedotmack/claude-mem","slug":"invalid-chroma-prewarm-timeout-setting-using-d","errorCode":null,"errorMessage":"Invalid ${CHROMA_PREWARM_TIMEOUT_SETTING}, using default","messagePattern":"Invalid (.+?), using default","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/services/sync/ChromaMcpManager.ts","lineNumber":617,"sourceCode":"      parsed <= CHROMA_PREWARM_TIMEOUT_BOUNDS.max\n    ) {\n      return parsed;\n    }\n    return null;\n  }\n\n  private static getChromaPrewarmTimeoutMs(): number {\n    const settings = SettingsDefaultsManager.loadFromFile(USER_SETTINGS_PATH);\n    const envValue = process.env[CHROMA_PREWARM_TIMEOUT_SETTING];\n    const settingsValue = settings[CHROMA_PREWARM_TIMEOUT_SETTING];\n\n    const parsed = ChromaMcpManager.parseBoundedTimeoutMs(envValue ?? settingsValue);\n    if (parsed !== null) {\n      return parsed;\n    }\n\n    if (envValue !== undefined || settingsValue) {\n      logger.warn('CHROMA_MCP', `Invalid ${CHROMA_PREWARM_TIMEOUT_SETTING}, using default`, {\n        value: envValue ?? settingsValue,\n        min: CHROMA_PREWARM_TIMEOUT_BOUNDS.min,\n        max: CHROMA_PREWARM_TIMEOUT_BOUNDS.max\n      });\n    }\n    return DEFAULT_CHROMA_PREWARM_TIMEOUT_MS;\n  }\n\n  private static captureOutputTail(\n    stream: { on(event: 'data', listener: (chunk: Buffer | string | Uint8Array) => void): unknown } | null | undefined,\n  ): () => string {\n    let tail = '';\n    stream?.on('data', (chunk: Buffer | string | Uint8Array) => {\n      const text = Buffer.isBuffer(chunk)\n        ? chunk.toString()\n        : chunk instanceof Uint8Array\n          ? Buffer.from(chunk).toString()\n          : String(chunk);","sourceCodeStart":599,"sourceCodeEnd":635,"githubUrl":"https://github.com/thedotmack/claude-mem/blob/8bc631a71a487424b866756e43a6efa4574cc66b/src/services/sync/ChromaMcpManager.ts#L599-L635","documentation":"Prewarm-timeout resolution reads env CLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS (falling back to the user-settings file value) and requires an integer within [1, 600000] via parseBoundedTimeoutMs. A set-but-invalid value logs this warning (including the bad value and bounds) and falls back to DEFAULT_CHROMA_PREWARM_TIMEOUT_MS.","triggerScenarios":"Setting CLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS or the matching settings key to a non-integer (\"30s\"), 0, a negative number, or anything above 600000.","commonSituations":"Copying a timeout with units into the env var, entering seconds instead of milliseconds, or a stray typo.","solutions":["Set the value to a plain integer of milliseconds between 1 and 600000, e.g. 30000.","Remove the setting entirely to use the default.","Check for duplicate definitions (settings file vs environment) so the intended one wins."],"exampleFix":"# before\nCLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS=30s\n# after\nCLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS=30000","handlingStrategy":"validation","validationCode":"function parseTimeoutMs(raw: string | undefined): number | null {\n  const n = raw !== undefined ? Number(raw) : NaN;\n  return Number.isInteger(n) && n >= 1 && n <= 600_000 ? n : null;\n}","typeGuard":"function isValidPrewarmTimeoutMs(value: unknown): value is number {\n  return typeof value === 'number' && Number.isInteger(value) && value >= 1 && value <= 600_000;\n}","tryCatchPattern":null,"preventionTips":["Use bare milliseconds — no units — in the env var.","Validate the setting right after changing it instead of waiting for the startup warn."],"tags":["chroma","configuration","timeout","env-var"],"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-14T00:17:10.932Z"}