{"record":{"id":"88b382fc1aa22cf9","repo":"abhigyanpatwari/GitNexus","slug":"name-must-be-a-positive-integer-max-got","errorCode":null,"errorMessage":"${name} must be a positive integer <= ${max}, got \"${raw}\"","messagePattern":"(.+?) must be a positive integer <= (.+?), got \"(.+?)\"","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"gitnexus/src/core/embeddings/http-client.ts","lineNumber":62,"sourceCode":"  requestDimensions?: number;\n}\n\nexport interface EmbeddingRequestOptions {\n  signal?: AbortSignal;\n}\n\nlet lastHttpRequestStartedAt: number | undefined;\nlet httpPaceQueue: Promise<void> = Promise.resolve();\n\nconst parsePositiveIntegerEnv = (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 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 =>","sourceCodeStart":44,"sourceCodeEnd":80,"githubUrl":"https://github.com/abhigyanpatwari/GitNexus/blob/ac9a4e9abd8fd3058c070b72c23402a4f887929a/gitnexus/src/core/embeddings/http-client.ts#L44-L80","documentation":"parsePositiveIntegerEnv() second guard: the value is all digits but Number(raw) is not a safe positive integer within the variable's cap (GITNEXUS_EMBEDDING_MAX_ATTEMPTS ≤ 20; GITNEXUS_EMBEDDING_RETRY_CAP_MS ≤ 300000; GITNEXUS_EMBEDDING_HTTP_TIMEOUT_MS ≤ 300000). '0' hits this too — zero is not positive.","triggerScenarios":"GITNEXUS_EMBEDDING_MAX_ATTEMPTS=0 or 21+, GITNEXUS_EMBEDDING_RETRY_CAP_MS=999999, GITNEXUS_EMBEDDING_HTTP_TIMEOUT_MS=600000, or absurd values like '99999999999999999999' that exceed Number.MAX_SAFE_INTEGER.","commonSituations":"Users pasting millisecond values in seconds ('180000' vs intended '180'), setting MAX_ATTEMPTS=0 to 'disable retries' (not supported — unset it instead), or copying a cap-busting timeout from another tool's config.","solutions":["Lower the value to the maximum stated in the message (e.g. timeout ≤ 300000 ms).","Use a value ≥ 1; to get default behavior unset the variable entirely.","Double-check units — these knobs are milliseconds, not seconds, and attempts, not retries."],"exampleFix":"# before\nexport GITNEXUS_EMBEDDING_HTTP_TIMEOUT_MS=600000   # 10min > 300000 cap\n# after\nexport GITNEXUS_EMBEDDING_HTTP_TIMEOUT_MS=300000","handlingStrategy":"validation","validationCode":"const LIMITS: Record<string, number> = {\n  GITNEXUS_EMBEDDING_MAX_ATTEMPTS: 20,\n  GITNEXUS_EMBEDDING_RETRY_CAP_MS: 300_000,\n  GITNEXUS_EMBEDDING_HTTP_TIMEOUT_MS: 300_000,\n};\nfor (const [name, max] of Object.entries(LIMITS)) {\n  const v = Number(process.env[name]);\n  if (process.env[name] && (!Number.isSafeInteger(v) || v <= 0 || v > max)) {\n    throw new Error(`${name} must be 1..${max}`);\n  }\n}","typeGuard":"const isEnvRangeError = (e: unknown): boolean =>\n  e instanceof Error && /must be a positive integer <=/.test(e.message);","tryCatchPattern":"try {\n  await httpEmbed(texts);\n} catch (e) {\n  if (isEnvRangeError(e)) { /* fix the value cited in the message; non-retryable */ }\n  else throw e;\n}","preventionTips":["Remember the caps: attempts ≤ 20, retry-cap ≤ 300000 ms, HTTP timeout ≤ 300000 ms.","All durations are milliseconds; 0 is invalid for these three knobs.","Codify the caps in your config management so bad values never reach runtime."],"tags":["embeddings","environment-variable","configuration","range-validation","http"],"backgroundTag":"invalid-env-var","analyzedSha":"ac9a4e9abd8fd3058c070b72c23402a4f887929a","analyzedAt":"2026-08-20T23:29:22.980Z","contentChangedAt":"2026-08-20T23:29:22.980Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}