abhigyanpatwari/GitNexus · error · Error
${name} must be a non-negative integer, got "${raw}"
Error message
${name} must be a non-negative integer, got "${raw}" What it means
Thrown by parseNonNegativeIntegerEnv() in http-client.ts when GITNEXUS_EMBEDDING_MIN_INTERVAL_MS is set to a value that fails the /^\d+$/u regex. Unlike the positive-integer parser, this one allows 0 (the default — no pacing), so the regex check is the only thing that catches non-digit input. The check fires before the range check (error 118).
Source
Thrown at gitnexus/src/core/embeddings/http-client.ts:69
const parsePositiveIntegerEnv = (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 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();View on GitHub (pinned to d540b00184)
Solutions
- Set GITNEXUS_EMBEDDING_MIN_INTERVAL_MS to a non-negative integer of milliseconds, e.g. 200.
- Set it to 0 (or unset) to disable request pacing.
- Keep the value ≤ 300000 (5 minutes), the ceiling.
Example fix
# before export GITNEXUS_EMBEDDING_MIN_INTERVAL_MS=100ms # after export GITNEXUS_EMBEDDING_MIN_INTERVAL_MS=100
Defensive patterns
Strategy: validation
Validate before calling
const v = process.env.GITNEXUS_EMBEDDING_MIN_INTERVAL_MS;
if (v !== undefined && v !== '' && !/^\d+$/u.test(v)) {
throw new Error('GITNEXUS_EMBEDDING_MIN_INTERVAL_MS must be a non-negative integer of milliseconds.');
} Type guard
const isNonNegativeDigits = (v: string | undefined): boolean => v === undefined || v === '' || /^\d+$/u.test(v);
Prevention
- Set GITNEXUS_EMBEDDING_MIN_INTERVAL_MS as a bare non-negative integer of milliseconds.
- Use 0 (or unset) to disable request pacing.
- Avoid unit suffixes like '100ms'.
When it happens
Trigger: readConfig() calls parseNonNegativeIntegerEnv('GITNEXUS_EMBEDDING_MIN_INTERVAL_MS', 0, 300000) at http-client.ts:199. Fires on e.g. GITNEXUS_EMBEDDING_MIN_INTERVAL_MS=-100 (leading -), =1.5, =100ms, =auto.
Common situations: Adding a unit suffix (100ms) when a bare integer is required; using a negative value to mean 'no limit' (use 0 instead); a YAML/computed value that became a float or string.
Related errors
- ${name} must be a positive integer, got "${raw}"
- ${name} must be a positive integer <= ${max}, got "${raw}"
- ${name} must be a non-negative integer <= ${max}, got "${raw
- GITNEXUS_EMBEDDING_DIMS must be a positive integer, got "${r
- ${name} must be a positive integer, got "${value}"
AI-assisted analysis of abhigyanpatwari/GitNexus@d540b00184 (2026-08-12).
Data as JSON: /api/errors/f92462cb7208c9c6.
Report an issue: GitHub.