{"record":{"id":"78ed63671e8c5c01","repo":"vitest-dev/vitest","slug":"the-blobs-in-blobsdirectory-were-generated-by","errorCode":null,"errorMessage":"the blobs in \"${blobsDirectory}\" were generated by a different version of Vitest. Expected v${currentVersion}, but received v${blobs[0].version}","messagePattern":"the blobs in \"(.+?)\" were generated by a different version of Vitest\\. Expected v(.+?), but received v(.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/vitest/src/node/reporters/blob.ts","lineNumber":156,"sourceCode":"    return { version, files, errors, coverage, file: filename, executionTime, environmentModules }\n  })\n  const blobs = await Promise.all(promises)\n\n  if (!blobs.length) {\n    throw new Error(\n      `vitest.mergeReports() requires at least one blob file in \"${blobsDirectory}\" directory, but none were found`,\n    )\n  }\n\n  const versions = new Set(blobs.map(blob => blob.version))\n  if (versions.size > 1) {\n    throw new Error(\n      `vitest.mergeReports() requires all blob files to be generated by the same Vitest version, received\\n\\n${blobs.map(b => `- \"${b.file}\" uses v${b.version}`).join('\\n')}`,\n    )\n  }\n\n  if (!versions.has(currentVersion)) {\n    throw new Error(\n      `the blobs in \"${blobsDirectory}\" were generated by a different version of Vitest. Expected v${currentVersion}, but received v${blobs[0].version}`,\n    )\n  }\n\n  // Restore module graph\n  const projects = Object.fromEntries(\n    projectsArray.map(p => [p.name, p]),\n  )\n\n  blobs.forEach((blob) => {\n    Object.entries(blob.environmentModules).forEach(([projectName, modulesByProject]) => {\n      const project = projects[projectName]\n      if (!project) {\n        return\n      }\n\n      modulesByProject.external.forEach(([id, externalized]) => {\n        project._resolver.externalizeCache.set(id, externalized)","sourceCodeStart":138,"sourceCodeEnd":174,"githubUrl":"https://github.com/vitest-dev/vitest/blob/1fa9837ec26533512fdcad8baebf249771bd340a/packages/vitest/src/node/reporters/blob.ts#L138-L174","documentation":"The blobs are mutually consistent (a single version among them) but that version differs from the Vitest instance now running `mergeReports`. The reader only understands its own version's blob format, so it refuses to deserialize a foreign-version blob.","triggerScenarios":"`versions.size === 1` but `!versions.has(currentVersion)` — e.g. blobs written by Vitest 2.x being merged by Vitest 3.x, or vice versa.","commonSituations":"Generate step and merge step run in different containers/images with different Vitest pins; blobs produced in CI, merged locally on another version.","solutions":["Run `mergeReports` with the exact Vitest version that produced the blobs.","Or regenerate the blobs using the current Vitest version so producer and consumer match.","Pin a single Vitest version across all environments that generate or merge blobs."],"exampleFix":"# before: blobs written by vitest 2.x, merged by vitest 3.x\nvitest --merge-reports=./blobs   # error: expected v3.x, got v2.x\n\n# after (option A): merge with the matching version)\nnpx vitest@2 --merge-reports=./blobs\n\n# after (option B): regenerate with current version)\nrm -rf ./blobs && vitest --run --reporter=blob && vitest --merge-reports=./blobs","handlingStrategy":"validation","validationCode":"import { readdir, readFile } from 'node:fs/promises'\nimport { parse } from 'flatted'\n\nasync function assertBlobsMatchRunnerVersion(dir: string, runnerVersion: string) {\n  for (const name of await readdir(dir)) {\n    const [v] = parse(await readFile(resolve(dir, name), 'utf-8')) as [string, ...unknown[]]\n    if (v !== runnerVersion) {\n      throw new Error(`Blob '${name}' is v${v} but runner is v${runnerVersion}. Merge with v${v} or regenerate blobs.`)\n    }\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Generate and merge blobs in the same image/environment with the same Vitest pin.","Re-run the generate step locally if you switch Vitest versions between runs."],"tags":["reporter","blob","merge","version"],"backgroundTag":null,"analyzedSha":"1fa9837ec26533512fdcad8baebf249771bd340a","analyzedAt":"2026-08-11T16:11:39.638Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}