{"record":{"id":"e55a472a7191e786","repo":"deepseek-ai/deepseek-harness","slug":"name-string-value-must-be-a-positive-inte","errorCode":null,"errorMessage":"${name} (${String(value)}) must be a positive integer","messagePattern":"(.+?) \\((.+?)\\) must be a positive integer","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/compaction/compaction-basic/src/config.ts","lineNumber":296,"sourceCode":"function validateKeys(config: object, keys: ReadonlySet<string>, name: string): void {\n  for (const key of Object.keys(config)) {\n    if (!keys.has(key)) throw new Error(`${name}: unknown key \"${key}\"`)\n  }\n}\n\nfunction isUnknownRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction assertNonEmptyString(name: string, value: unknown): asserts value is string {\n  if (typeof value !== 'string' || value.length === 0) {\n    throw new Error(`${name} must be a non-empty string`)\n  }\n}\n\nfunction assertPositiveInteger(name: string, value: unknown): asserts value is number {\n  if (typeof value !== 'number' || !Number.isInteger(value) || value <= 0) {\n    throw new Error(`${name} (${String(value)}) must be a positive integer`)\n  }\n}\n\nfunction assertNonNegativeInteger(name: string, value: unknown): asserts value is number {\n  if (typeof value !== 'number' || !Number.isInteger(value) || value < 0) {\n    throw new Error(`${name} (${String(value)}) must be a non-negative integer`)\n  }\n}\n\nfunction assertRatio(name: string, value: unknown): asserts value is number {\n  if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0 || value > 1) {\n    throw new Error(`${name} (${String(value)}) must be a number in (0, 1]`)\n  }\n}\n","sourceCodeStart":278,"sourceCodeEnd":311,"githubUrl":"https://github.com/deepseek-ai/deepseek-harness/blob/b150a551b8d465e31e418e1b2eaf5e79bbb7d28e/packages/compaction/compaction-basic/src/config.ts#L278-L311","documentation":"maxTokens — the ceiling on the post-compaction summary plus retained tail — is validated by assertPositiveInteger: it must be a finite integer greater than 0, and the message echoes the offending value. Zero, negatives, fractional numbers, numeric strings, NaN, and Infinity all fail. Omitting the key uses the default 8192.","triggerScenarios":"maxTokens: 0 (attempting to disable), a negative or fractional value, a quoted number ('16384') from YAML/JSON templating, or a computed value that yields NaN or Infinity.","commonSituations":"Quoting numbers when generating configs; arithmetic on environment variables producing floats; carrying over a '0 means unlimited' convention from another system — here there is no unlimited value.","solutions":["Set a positive integer such as 16384, or remove the key to use the 8192 default","Unquote numeric values in YAML/JSON pipelines","When computing the value, verify Number.isInteger(v) && v > 0 before assigning it to the config"],"exampleFix":"# before\nmaxTokens: '16384'   # string, not number\n\n# after\nmaxTokens: 16384","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"function isPositiveInteger(v: unknown): v is number {\n  return typeof v === 'number' && Number.isInteger(v) && v > 0\n}\n// usage: config.maxTokens === undefined || isPositiveInteger(config.maxTokens)","tryCatchPattern":"try {\n  resolveConfig(config)\n} catch (err) {\n  const hit = (err as Error).message.match(/(.+) \\(\\(.*\\)\\) must be a positive integer/)\n  if (hit !== undefined) {\n    throw new Error(\n      `${hit[1]}: pass an unquoted integer > 0 (0, negatives, floats, and strings are rejected)`,\n      { cause: err },\n    )\n  }\n  throw err\n}","preventionTips":["Leave numeric YAML values unquoted; a quoted 16384 is a string and fails","Validate computed maxTokens with Number.isInteger(v) && v > 0 before assigning","There is no unlimited value — omit the key for the 8192 default instead of using 0"],"tags":["config","validation","numbers","compaction"],"backgroundTag":"positive-integer-validation","analyzedSha":"b150a551b8d465e31e418e1b2eaf5e79bbb7d28e","analyzedAt":"2026-08-24T18:12:29.105Z","schemaVersion":2},"datasetVersion":"2026-08-24T22:17:12.610Z"}