{"record":{"id":"a5b7b5f06382fe96","repo":"deepseek-ai/deepseek-harness","slug":"credentials-local-record-key-in-filename-a5b7b5","errorCode":null,"errorMessage":"credentials-local: record \"${key}\" in ${filename} has a non-mapping env","messagePattern":"credentials-local: record \"(.+?)\" in (.+?) has a non-mapping env","errorType":"validation","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"packages/credentials/credentials-local/src/index.ts","lineNumber":373,"sourceCode":"  }\n  if (kind === undefined) throw new Error(`credentials-local: record \"${key}\" in ${filename} has no kind`)\n  throw new Error(`credentials-local: record \"${key}\" in ${filename} has unknown kind ${JSON.stringify(kind)}`)\n}\n\n/** Reject a field the tag does not define, so a typo is not silently dropped. */\nfunction assertFields(key: string, fields: Record<string, unknown>, allowed: string[], filename: string): void {\n  for (const field of Object.keys(fields)) {\n    if (!allowed.includes(field)) {\n      throw new Error(`credentials-local: record \"${key}\" in ${filename} has unknown field \"${field}\"`)\n    }\n  }\n}\n\n/** Admit an api-key record's provider environment: POSIX names over non-empty strings. */\nfunction parseRecordEnv(key: string, env: unknown, filename: string): Record<string, string> | undefined {\n  if (env === undefined) return undefined\n  if (typeof env !== 'object' || env === null || Array.isArray(env)) {\n    throw new TypeError(`credentials-local: record \"${key}\" in ${filename} has a non-mapping env`)\n  }\n  const parsed: Record<string, string> = {}\n  for (const [name, value] of Object.entries(env as Record<string, unknown>)) {\n    credentialRef(name)\n    if (typeof value !== 'string' || value.length === 0) {\n      throw new TypeError(\n        `credentials-local: record \"${key}\" env \"${name}\" in ${filename} must be a non-empty string`,\n      )\n    }\n    parsed[name] = value\n  }\n  return parsed\n}\n\n/**\n * Reject a payload that cannot survive a JSON round trip, on the way in and on\n * the way out. The seam promises owners their payload comes back exactly as\n * written, and both directions can break that: a document may spell `.inf` or","sourceCodeStart":355,"sourceCodeEnd":391,"githubUrl":"https://github.com/deepseek-ai/deepseek-harness/blob/b150a551b8d465e31e418e1b2eaf5e79bbb7d28e/packages/credentials/credentials-local/src/index.ts#L355-L391","documentation":"Error \"credentials-local: record \"${key}\" in ${filename} has a non-mapping env\" thrown in deepseek-ai/deepseek-harness.","triggerScenarios":"Thrown at packages/credentials/credentials-local/src/index.ts:373 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"}