{"record":{"id":"f506479e219d17df","repo":"deepseek-ai/deepseek-harness","slug":"typert-invocation-descriptor-id-json-paramet","errorCode":null,"errorMessage":"typert: invocation \"${descriptor.id}\" JSON parameter \"${parameter.name}\" declares a lookup key","messagePattern":"typert: invocation \"(.+?)\" JSON parameter \"(.+?)\" declares a lookup key","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/typert/registry/src/service.ts","lineNumber":664,"sourceCode":"  validateCodec(descriptor.result, `${descriptor.id} result`)\n  const wires = new Set<string>()\n  for (const parameter of descriptor.parameters) {\n    validateWireName('parameter name', parameter.name)\n    validateWireName('parameter wire field', parameter.wire)\n    if (wires.has(parameter.wire)) {\n      throw new Error(`typert: invocation \"${descriptor.id}\" repeats wire field \"${parameter.wire}\"`)\n    }\n    wires.add(parameter.wire)\n    if (parameter.source === 'lookup') {\n      if (parameter.acceptsUndefined !== undefined) {\n        throw new Error(`typert: invocation \"${descriptor.id}\" lookup parameter \"${parameter.name}\" cannot accept undefined`)\n      }\n      if (parameter.lookup === undefined) {\n        throw new Error(`typert: invocation \"${descriptor.id}\" lookup parameter \"${parameter.name}\" has no lookup key`)\n      }\n      validateSegment('lookup key', parameter.lookup)\n    } else if (parameter.lookup !== undefined) {\n      throw new Error(`typert: invocation \"${descriptor.id}\" JSON parameter \"${parameter.name}\" declares a lookup key`)\n    }\n    validateCodec(parameter.codec, `${descriptor.id} parameter ${parameter.name}`)\n  }\n  const cancellation = descriptor.cancellation as { readonly parameter: string } | undefined\n  if (cancellation !== undefined && cancellation.parameter !== 'signal') {\n    throw new Error(`typert: invocation \"${descriptor.id}\" cancellation parameter must be \"signal\"`)\n  }\n  if (descriptor.scope !== undefined) {\n    if (descriptor.invocation.kind !== 'direct') {\n      throw new Error(`typert: invocation \"${descriptor.id}\" Context receiver cannot declare a direct scope projection`)\n    }\n    validateSegment('scope Context key', descriptor.scope.context)\n    validateWireName('scope wire field', descriptor.scope.wire)\n    const lookups = descriptor.parameters.filter(candidate => candidate.source === 'lookup')\n    const parameter = lookups.length === 1 ? lookups[0] : undefined\n    if (parameter === undefined || parameter.wire !== descriptor.scope.wire\n      || parameter.lookup !== descriptor.scope.context) {\n      throw new Error(","sourceCodeStart":646,"sourceCodeEnd":682,"githubUrl":"https://github.com/deepseek-ai/deepseek-harness/blob/b150a551b8d465e31e418e1b2eaf5e79bbb7d28e/packages/typert/registry/src/service.ts#L646-L682","documentation":"Error \"typert: invocation \"${descriptor.id}\" JSON parameter \"${parameter.name}\" declares a lookup key\" thrown in deepseek-ai/deepseek-harness.","triggerScenarios":"Thrown at packages/typert/registry/src/service.ts:664 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Remove the lookup key from the JSON parameter; lookup keys belong to lookup parameters."],"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"}