{"record":{"id":"d17b741d8f6c2c85","repo":"vitest-dev/vitest","slug":"vitest-mergereports-requires-all-blob-files-to-b","errorCode":null,"errorMessage":"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')}","messagePattern":"vitest\\.mergeReports\\(\\) requires all blob files to be generated by the same Vitest version, received\n\n(.+?)\" uses v(.+?)`\\)\\.join\\('\\\\n'\\)\\}","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/vitest/src/node/reporters/blob.ts","lineNumber":150,"sourceCode":"    ) as MergeReport\n    if (!version) {\n      throw new TypeError(\n        `vitest.mergeReports() expects all paths in \"${blobsDirectory}\" to be files generated by the blob reporter, but \"${filename}\" is not a valid blob file`,\n      )\n    }\n    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]","sourceCodeStart":132,"sourceCodeEnd":168,"githubUrl":"https://github.com/vitest-dev/vitest/blob/1fa9837ec26533512fdcad8baebf249771bd340a/packages/vitest/src/node/reporters/blob.ts#L132-L168","documentation":"All individual blob files are valid, but they were produced by different Vitest versions (the version is stored as the first element of each blob). Because the serialized module-graph and report shape are version-sensitive, merging across versions is rejected. The error lists each blob with its version.","triggerScenarios":"Two or more shards wrote blobs into the same directory while running different Vitest versions, so `new Set(blobs.map(b => b.version)).size > 1`.","commonSituations":"Upgrading Vitest between CI runs and stale blobs remaining; mixed local/CI versions; some shards pinned to an old `@vitest/*` while others updated.","solutions":["Regenerate every blob with the same Vitest version (align all `@vitest/*` packages and re-run all shards).","Clear the blobs directory before re-running so no stale-version blobs remain.","Verify version alignment with `pnpm why vitest` / `pnpm list vitest` across the workspace."],"exampleFix":"# before: stale v2 blob mixed with v3 blob in ./blobs\nvitest --merge-reports=./blobs   # error: multiple versions\n\n# after\nclear-dir ./blobs\n# re-run every shard on the same vitest version\nvitest --run --reporter=blob   # v3.x across all shards\nvitest --merge-reports=./blobs","handlingStrategy":"validation","validationCode":"import { readdir, readFile } from 'node:fs/promises'\nimport { parse } from 'flatted'\n\nasync function assertAllBlobsSameVersion(dir: string) {\n  const versions = new Set<string>()\n  for (const name of await readdir(dir)) {\n    const [v] = parse(await readFile(resolve(dir, name), 'utf-8')) as [string, ...unknown[]]\n    versions.add(v)\n  }\n  if (versions.size > 1) {\n    throw new Error(`Blobs in '${dir}' were produced by multiple Vitest versions: ${[...versions].join(', ')}. Regenerate all on the same version.`)\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pin a single Vitest version across every shard that writes blobs.","Clear the blobs directory after upgrading Vitest before producing new blobs."],"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"}