abhigyanpatwari/GitNexus · error · Error

must be a non-negative integer <= , got

Error message

${name} must be a non-negative integer <= ${max}, got "${raw}"

What it means

parseNonNegativeIntegerEnv() range guard: GITNEXUS_EMBEDDING_MIN_INTERVAL_MS parsed as digits but is not a safe integer, or falls outside 0..300000 ms. Only this one variable uses the non-negative parser.

Solutions

  1. Set the interval to ≤ 300000 ms (5 minutes).
  2. Unset the variable if the default pacing is acceptable.

Example fix

# before
export GITNEXUS_EMBEDDING_MIN_INTERVAL_MS=600000
# after
export GITNEXUS_EMBEDDING_MIN_INTERVAL_MS=300000
Defensive patterns

Strategy: validation

Validate before calling

const v = Number(process.env.GITNEXUS_EMBEDDING_MIN_INTERVAL_MS);
if (process.env.GITNEXUS_EMBEDDING_MIN_INTERVAL_MS &&
    (!Number.isSafeInteger(v) || v < 0 || v > 300_000)) {
  throw new Error('GITNEXUS_EMBEDDING_MIN_INTERVAL_MS must be 0..300000');
}

Type guard

const isEnvRangeError = (e: unknown): boolean =>
  e instanceof Error && /must be a non-negative integer <=/.test(e.message);

Try / catch

try {
  await httpEmbed(texts);
} catch (e) {
  if (isEnvRangeError(e)) { /* clamp to 300000 or unset; non-retryable */ }
  else throw e;
}

Prevention

When it happens

Trigger: GITNEXUS_EMBEDDING_MIN_INTERVAL_MS above 300000 (e.g. 600000 for one request per 10 minutes) or an unsafe huge digit string.

Common situations: Over-aggressive throttling for a slow provider (interval > 5 minutes exceeds the clamp), or pasting a value meant for a different tool.

Related errors


AI-assisted analysis of abhigyanpatwari/GitNexus@ac9a4e9abd (2026-08-20). Data as JSON: /api/errors/0369e473e569803d. Report an issue: GitHub.

Appendix: source

Thrown at gitnexus/src/core/embeddings/http-client.ts:75

  if (!/^\d+$/u.test(raw)) {
    throw new Error(`${name} must be a positive integer, got "${raw}"`);
  }
  const parsed = Number(raw);
  if (!Number.isSafeInteger(parsed) || parsed <= 0 || parsed > max) {
    throw new Error(`${name} must be a positive integer <= ${max}, got "${raw}"`);
  }
  return parsed;
};

const parseNonNegativeIntegerEnv = (name: string, fallback: number, max: number): number => {
  const raw = process.env[name];
  if (raw === undefined || raw === '') return fallback;
  if (!/^\d+$/u.test(raw)) {
    throw new Error(`${name} must be a non-negative integer, got "${raw}"`);
  }
  const parsed = Number(raw);
  if (!Number.isSafeInteger(parsed) || parsed < 0 || parsed > max) {
    throw new Error(`${name} must be a non-negative integer <= ${max}, got "${raw}"`);
  }
  return parsed;
};

const cancelledError = (): DOMException =>
  new DOMException('Embedding request cancelled', 'AbortError');

const throwIfAborted = (signal?: AbortSignal): void => {
  if (signal?.aborted) throw cancelledError();
};

const abortableSleep = (ms: number, signal?: AbortSignal): Promise<void> => {
  throwIfAborted(signal);
  if (ms <= 0) return Promise.resolve();
  return new Promise((resolve, reject) => {
    const timer = setTimeout(() => {
      signal?.removeEventListener('abort', onAbort);
      resolve();

View on GitHub (pinned to ac9a4e9abd)