{"record":{"id":"1cb266cc29cac887","repo":"headroomlabs-ai/headroom","slug":"pkg-name-has-non-portable-field-name-spec","errorCode":null,"errorMessage":"${pkg.name} has non-portable ${field}.${name} spec: ${spec}","messagePattern":"(.+?) has non-portable (.+?)\\.(.+?) spec: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"scripts/verify_npm_release_assets.mjs","lineNumber":62,"sourceCode":"    const result = spawnSync(\"tar\", [\"-xzf\", tarballPath, \"-C\", workdir], {\n      encoding: \"utf8\",\n    });\n    if (result.status !== 0) {\n      throw new Error(\n        `tar failed for ${tarballPath}: ${result.stderr || result.stdout || \"unknown error\"}`,\n      );\n    }\n    return JSON.parse(readFileSync(path.join(workdir, packageJsonPath), \"utf8\"));\n  } finally {\n    rmSync(workdir, { recursive: true, force: true });\n  }\n}\n\nfunction assertNoFileDependencies(pkg) {\n  for (const field of [\"dependencies\", \"peerDependencies\", \"optionalDependencies\"]) {\n    for (const [name, spec] of Object.entries(pkg[field] || {})) {\n      if (typeof spec === \"string\" && (spec.startsWith(\"file:\") || spec.includes(\"release-assets\"))) {\n        throw new Error(`${pkg.name} has non-portable ${field}.${name} spec: ${spec}`);\n      }\n    }\n  }\n}\n\nfunction runNpm(args, cwd) {\n  if (process.platform === \"win32\") {\n    return spawnSync(\"cmd.exe\", [\"/d\", \"/s\", \"/c\", \"npm.cmd\", ...args], {\n      cwd,\n      encoding: \"utf8\",\n    });\n  }\n\n  return spawnSync(\"npm\", args, {\n    cwd,\n    encoding: \"utf8\",\n  });\n}","sourceCodeStart":44,"sourceCodeEnd":80,"githubUrl":"https://github.com/headroomlabs-ai/headroom/blob/322425c43bffde1ed0b64fecf3cf5951565dd82b/scripts/verify_npm_release_assets.mjs#L44-L80","documentation":"Error \"${pkg.name} has non-portable ${field}.${name} spec: ${spec}\" thrown in headroomlabs-ai/headroom.","triggerScenarios":"Raised by the npm release asset verifier when a package.json dependency spec is not portable (file/link/workspace protocol), which would break published installs.","commonSituations":"See trigger scenarios.","solutions":["Replace the non-portable dependency spec (e.g. file:, link:, workspace:) with a published version range in ${field}.${name}","Pin the dependency to an exact released version for release builds"],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"322425c43bffde1ed0b64fecf3cf5951565dd82b","analyzedAt":"2026-08-15T01:03:05.481Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}