{"record":{"id":"42b9952d5b436434","repo":"deepseek-ai/deepseek-harness","slug":"lsp-stdio-servers-providerid-name-must-be-a","errorCode":null,"errorMessage":"lsp-stdio: servers.${providerId}.${name} must be a positive integer no greater than ${MAX_TIMER_DELAY_MS}","messagePattern":"lsp-stdio: servers\\.(.+?)\\.(.+?) must be a positive integer no greater than (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/lsp/lsp-stdio/src/index.ts","lineNumber":205,"sourceCode":"\n/** Validate one resolved server entry before any provider in the table is registered. */\nfunction validateServerConfig(providerId: string, resolved: ResolvedServerConfig): void {\n  // Teardown budgets feed `deadline()`, whose `<= 0` is the internal no-timeout sentinel; a\n  // nonpositive value would let a server that ignores shutdown hang disposal forever. Fail at load.\n  assertTimer(providerId, 'shutdownTimeoutMs', resolved.shutdownTimeoutMs)\n  assertTimer(providerId, 'killGraceMs', resolved.killGraceMs)\n  // Byte caps must be positive: a nonpositive stderr cap defeats the retained-tail bound\n  // (`slice(-0)` keeps everything), `maxMessageBytes: 0` makes every response fatal, and a bad\n  // document cap fails later in the read path instead of at load.\n  assertPositiveInteger(providerId, 'maxStderrBytes', resolved.maxStderrBytes)\n  assertPositiveInteger(providerId, 'maxMessageBytes', resolved.maxMessageBytes)\n  assertPositiveInteger(providerId, 'maxDocumentBytes', resolved.maxDocumentBytes)\n}\n\n/** Reject a timer value Node would clamp instead of scheduling as configured. */\nfunction assertTimer(providerId: string, name: string, value: number): void {\n  if (!Number.isInteger(value) || value < 1 || value > MAX_TIMER_DELAY_MS) {\n    throw new Error(`lsp-stdio: servers.${providerId}.${name} must be a positive integer no greater than ${MAX_TIMER_DELAY_MS}`)\n  }\n}\n\n/** Reject a nonpositive or non-integer config value at load, so misconfiguration fails loud. */\nfunction assertPositiveInteger(providerId: string, name: string, value: number): void {\n  if (!Number.isInteger(value) || value < 1) {\n    throw new Error(`lsp-stdio: servers.${providerId}.${name} must be a positive integer`)\n  }\n}\n\n/** A pooled generic provider: one server process per canonical workspace, created on demand. */\nclass LocalLspProvider implements LspProvider {\n  readonly id: LspProviderId\n  readonly extensionToLanguage: Readonly<Record<string, string>>\n  /** One live instance per stable canonical workspace identity. */\n  private readonly instances = new Map<WorkspaceKey, LspInstance>()\n  /** One complete source-read→open→query→close serialization tail per canonical workspace. */\n  private readonly queues = new Map<WorkspaceKey, Promise<void>>()","sourceCodeStart":187,"sourceCodeEnd":223,"githubUrl":"https://github.com/deepseek-ai/deepseek-harness/blob/b150a551b8d465e31e418e1b2eaf5e79bbb7d28e/packages/lsp/lsp-stdio/src/index.ts#L187-L223","documentation":"Error \"lsp-stdio: servers.${providerId}.${name} must be a positive integer no greater than ${MAX_TIMER_DELAY_MS}\" thrown in deepseek-ai/deepseek-harness.","triggerScenarios":"Thrown at packages/lsp/lsp-stdio/src/index.ts:205 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set the value to a positive integer no greater than the stated timer cap."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"b150a551b8d465e31e418e1b2eaf5e79bbb7d28e","analyzedAt":"2026-08-24T18:12:29.105Z","schemaVersion":2},"datasetVersion":"2026-08-24T22:17:12.610Z"}