{"record":{"id":"3a9fcd9a62cb4e75","repo":"deepseek-ai/deepseek-harness","slug":"harness-definetool-path-additionalproperties-mu","errorCode":null,"errorMessage":"harness.defineTool ${path}.additionalProperties must be true or omitted because the implicit parameter root is open","messagePattern":"harness\\.defineTool (.+?)\\.additionalProperties must be true or omitted because the implicit parameter root is open","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/extensions/cordis-host-runner/src/guard.ts","lineNumber":226,"sourceCode":"/**\n * Normalize a sandbox-provided `parameters` value into a fresh host-realm\n * ParameterSchemaSpec. A raw JSON-Schema object wrapper retains its open root\n * default, while the direct DSL is already an implicit open property map.\n */\nfunction normalizeParameterSchemaSpec(value: unknown, path = 'parameters'): {\n  spec: Record<string, unknown>\n  rootAnnotations?: Record<string, unknown>\n} {\n  if (!isPlainRecord(value)) {\n    throw new Error(`harness.defineTool ${path} must be a ParameterSchemaSpec object`)\n  }\n  if (value.type === 'object') {\n    assertSchemaKeys(value, path, ['type', 'properties', 'required', 'additionalProperties', ...ANNOTATION_KEYS])\n    if (!isPlainRecord(value.properties)) {\n      throw new Error(`harness.defineTool ${path}.properties must be an object of schemas`)\n    }\n    if (Object.hasOwn(value, 'additionalProperties') && value.additionalProperties !== true) {\n      throw new Error(`harness.defineTool ${path}.additionalProperties must be true or omitted because the implicit parameter root is open`)\n    }\n    if (Object.hasOwn(value, 'required') && value.required === undefined) {\n      throw new Error(`harness.defineTool ${path}.required must be an array of declared property names`)\n    }\n    const required = normalizeRequiredNames(value.required, value.properties, `${path}.required`)\n    const rootAnnotations: Record<string, unknown> = {}\n    copyAnnotations(value, rootAnnotations, path)\n    return {\n      spec: normalizePropertyMap(value.properties, path, required, true),\n      ...(Object.keys(rootAnnotations).length === 0 ? {} : { rootAnnotations }),\n    }\n  }\n  return { spec: normalizePropertyMap(value, path, new Set(), false) }\n}\n\n/** Validate raw required names and return their lookup set. */\nfunction normalizeRequiredNames(value: unknown, properties: Record<string, unknown>, path: string): Set<string> {\n  if (value === undefined) return new Set()","sourceCodeStart":208,"sourceCodeEnd":244,"githubUrl":"https://github.com/deepseek-ai/deepseek-harness/blob/b150a551b8d465e31e418e1b2eaf5e79bbb7d28e/packages/extensions/cordis-host-runner/src/guard.ts#L208-L244","documentation":"Error \"harness.defineTool ${path}.additionalProperties must be true or omitted because the implicit parameter root is open\" thrown in deepseek-ai/deepseek-harness.","triggerScenarios":"Thrown at packages/extensions/cordis-host-runner/src/guard.ts:226 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"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"}