{"record":{"id":"bfeb6380386fcc0a","repo":"paperclipai/paperclip","slug":"acpx-claude-dependency-package-version-mismatch-fo","errorCode":null,"errorMessage":"ACPX claude dependency package version mismatch for ${expected.packageName}: expected ${expected.packageVersion}, received ${dependencyPackage.version ?? \"unknown\"}","messagePattern":"ACPX claude dependency package version mismatch for (.+?): expected (.+?), received (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/paperclip-runner/src/drivers/acpx/installation-integrity.ts","lineNumber":627,"sourceCode":"    for (const expected of QUALIFIED_CLAUDE_PROVIDER_DEPENDENCIES) {\n      if (\n        (declaredDependencies as Record<string, unknown>)[\n          expected.packageName\n        ] !== expected.dependencyDeclaration\n      ) {\n        throw new Error(\n          `ACPX claude package dependency mismatch for ${expected.packageName}`,\n        );\n      }\n      const dependencyPackageJsonPath = await realpath(\n        resolvePackageJson(expected.packageName, serverPackageJsonPath),\n      );\n      const dependencyPackage = await readPackageJson(\n        dependencyPackageJsonPath,\n        expected.packageName,\n      );\n      if (dependencyPackage.version !== expected.packageVersion) {\n        throw new Error(\n          `ACPX claude dependency package version mismatch for ${expected.packageName}: expected ${expected.packageVersion}, received ${dependencyPackage.version ?? \"unknown\"}`,\n        );\n      }\n      supplementalPackages.push({\n        directory: dirname(dependencyPackageJsonPath),\n        format: packageModuleFormat(dependencyPackage.type),\n      });\n    }\n  }\n\n  const serverDependencyAncestors = await inspectDependencyAncestors(\n    commandDirectory,\n    packageDirectory,\n    profile.agent,\n  );\n  const dependencyAncestors = [...serverDependencyAncestors];\n  const dependencyAncestorFormats = serverDependencyAncestors.map(\n    () => serverPackageFormat,","sourceCodeStart":609,"sourceCodeEnd":645,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/packages/paperclip-runner/src/drivers/acpx/installation-integrity.ts#L609-L645","documentation":"After matching the declaration string, the resolver reads the actually-installed dependency's package.json and compares its version to the qualified packageVersion. This error fires when the version on disk differs from what qualification recorded — the declaration matched but the installed copy is a different release (or its version field is missing, reported as \"unknown\").","triggerScenarios":"verifyQualifiedAcpxInstallation with profile.agent === \"claude\", where readPackageJson on the realpath of the resolved dependency returns version !== expected.packageVersion — e.g. hoisted duplicate at a different version, or semver-compatible newer release installed without updating the declaration.","commonSituations":"npm install with a caret range pulled a newer patch/minor than at qualification time; multiple copies of the dependency in a monorepo and resolution picked the wrong one; a partial upgrade left node_modules out of sync with package.json; corrupted install missing the version field.","solutions":["Reinstall dependencies from the lockfile (pnpm install --frozen-lockfile / npm ci) so the installed version equals the qualified packageVersion.","Deduplicate node_modules (pnpm dedupe / npm dedupe) so resolution finds the single qualified version.","Pin the dependency to the exact qualified version in the server package and reinstall.","If you must run a newer version, re-qualify the profile with the new packageVersion instead of forcing the old qualification."],"exampleFix":"// before\n$ npm update @anthropic-ai/claude-code  # installs 2.1.0, qualified was 2.0.14\n// after\n$ npm ci  # restores exact qualified 2.0.14 from lockfile","handlingStrategy":"validation","validationCode":"for (const expected of QUALIFIED_CLAUDE_PROVIDER_DEPENDENCIES) {\n  const depPkg = JSON.parse(fs.readFileSync(require.resolve(expected.packageName + \"/package.json\"), \"utf8\"));\n  if (depPkg.version !== expected.packageVersion) {\n    throw new Error(`pre-check: ${expected.packageName} installed ${depPkg.version}, qualified ${expected.packageVersion}`);\n  }\n}","typeGuard":"const versionMatches = (depPkg, expected) => depPkg?.version === expected.packageVersion;","tryCatchPattern":"try {\n  await verifyQualifiedAcpxInstallation(input);\n} catch (e) {\n  if (/dependency package version mismatch/.test(e.message)) {\n    execSync(\"npm ci\"); // restore exact lockfile versions\n    await verifyQualifiedAcpxInstallation(input);\n  } else throw e;\n}","preventionTips":["Never run bare `npm update`/`pnpm update` in the ACPX install tree; use frozen installs.","Dedupe node_modules regularly to avoid multiple copies resolving differently.","Re-qualify deliberately when intentionally upgrading a qualified dependency."],"tags":["installation-integrity","acpx","version-mismatch","dependency-pinning"],"backgroundTag":"version-mismatch","analyzedSha":"01ad8584922b5d85292b1723cae71fa0d9b07a19","analyzedAt":"2026-09-10T03:14:50.855Z","contentChangedAt":"2026-09-10T03:14:50.855Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}