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
- Set the interval to ≤ 300000 ms (5 minutes).
- 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
- Max pacing interval is 300000 ms; slower endpoints need a different strategy (timeouts, retries), not a longer interval.
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
- must be a non-negative integer, got
- must be a positive integer <= , got
- : HuggingFace download circuit is open after repeated…
- embedding device must be one of auto, dml, cuda, cpu, wasm…
- Embedding endpoint circuit open
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)