{"record":{"id":"0369e473e569803d","repo":"abhigyanpatwari/GitNexus","slug":"name-must-be-a-non-negative-integer-max","errorCode":null,"errorMessage":"${name} must be a non-negative integer <= ${max}, got \"${raw}\"","messagePattern":"(.+?) must be a non-negative integer <= (.+?), got \"(.+?)\"","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"gitnexus/src/core/embeddings/http-client.ts","lineNumber":73,"sourceCode":"  if (!/^\\d+$/u.test(raw)) {\n    throw new Error(`${name} must be a positive integer, got \"${raw}\"`);\n  }\n  const parsed = Number(raw);\n  if (!Number.isSafeInteger(parsed) || parsed <= 0 || parsed > max) {\n    throw new Error(`${name} must be a positive integer <= ${max}, got \"${raw}\"`);\n  }\n  return parsed;\n};\n\nconst parseNonNegativeIntegerEnv = (name: string, fallback: number, max: number): number => {\n  const raw = process.env[name];\n  if (raw === undefined || raw === '') return fallback;\n  if (!/^\\d+$/u.test(raw)) {\n    throw new Error(`${name} must be a non-negative integer, got \"${raw}\"`);\n  }\n  const parsed = Number(raw);\n  if (!Number.isSafeInteger(parsed) || parsed < 0 || parsed > max) {\n    throw new Error(`${name} must be a non-negative integer <= ${max}, got \"${raw}\"`);\n  }\n  return parsed;\n};\n\nconst cancelledError = (): DOMException =>\n  new DOMException('Embedding request cancelled', 'AbortError');\n\nconst throwIfAborted = (signal?: AbortSignal): void => {\n  if (signal?.aborted) throw cancelledError();\n};\n\nconst abortableSleep = (ms: number, signal?: AbortSignal): Promise<void> => {\n  throwIfAborted(signal);\n  if (ms <= 0) return Promise.resolve();\n  return new Promise((resolve, reject) => {\n    const timer = setTimeout(() => {\n      signal?.removeEventListener('abort', onAbort);\n      resolve();","sourceCodeStart":55,"sourceCodeEnd":91,"githubUrl":"https://github.com/abhigyanpatwari/GitNexus/blob/d540b00184d71a896261ee02670da9a92d59d8f7/gitnexus/src/core/embeddings/http-client.ts#L55-L91","documentation":"Thrown by parseNonNegativeIntegerEnv() in http-client.ts when GITNEXUS_EMBEDDING_MIN_INTERVAL_MS passes the digits-only regex but Number(raw) is not a safe integer, is negative, or exceeds the max (300000ms = 5 minutes). The ceiling prevents an accidental multi-hour pacing interval that would stall every batch.","triggerScenarios":"readConfig() at http-client.ts:199. Fires on e.g. GITNEXUS_EMBEDDING_MIN_INTERVAL_MS=999999 (over 5 min ceiling) or a value beyond Number.MAX_SAFE_INTEGER.","commonSituations":"Setting a huge interval to rate-limit a strict endpoint without realizing the cap exists; copy-pasting a microseconds value where milliseconds were expected.","solutions":["Set GITNEXUS_EMBEDDING_MIN_INTERVAL_MS to a value between 0 and 300000 inclusive.","Unset it to accept the default of 0 (no pacing).","If the endpoint needs stricter rate limiting than 5 min between calls, raise the retry/backoff config instead."],"exampleFix":"# before\nexport GITNEXUS_EMBEDDING_MIN_INTERVAL_MS=600000\n# after\nexport GITNEXUS_EMBEDDING_MIN_INTERVAL_MS=300000  # the 5-minute ceiling","handlingStrategy":"validation","validationCode":"const v = process.env.GITNEXUS_EMBEDDING_MIN_INTERVAL_MS;\nif (v !== undefined && v !== '') {\n  const n = Number(v);\n  if (!Number.isSafeInteger(n) || n < 0 || n > 300_000) {\n    throw new Error('GITNEXUS_EMBEDDING_MIN_INTERVAL_MS must be 0..300000 ms.');\n  }\n}","typeGuard":"const isWithinNonNegativeCeiling = (v: string, max: number): boolean => {\n  const n = Number(v);\n  return Number.isSafeInteger(n) && n >= 0 && n <= max;\n};","tryCatchPattern":null,"preventionTips":["Keep GITNEXUS_EMBEDDING_MIN_INTERVAL_MS between 0 and 300000 (5 min) inclusive.","Unset it (or 0) to disable pacing.","For stricter rate limits, tune retry/backoff rather than the min interval."],"tags":["config","env-var","embeddings","http-mode","validation","bounds"],"backgroundTag":null,"analyzedSha":"d540b00184d71a896261ee02670da9a92d59d8f7","analyzedAt":"2026-08-12T19:50:25.132Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}