{"id":"2163f8646399c949","repo":"vitest-dev/vitest","slug":"cannot-merge-reports-with-watch-enabled","errorCode":null,"errorMessage":"Cannot merge reports with --watch enabled","messagePattern":"Cannot merge reports with --watch enabled","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/vitest/src/node/config/resolveConfig.ts","lineNumber":349,"sourceCode":"    if (Number.isNaN(count) || count <= 0) {\n      throw new Error('--shard <count> must be a positive number')\n    }\n\n    if (Number.isNaN(index) || index <= 0 || index > count) {\n      throw new Error(\n        '--shard <index> must be a positive number less then <count>',\n      )\n    }\n\n    resolved.shard = { index, count }\n  }\n\n  if (resolved.standalone && !resolved.watch) {\n    throw new Error(`Vitest standalone mode requires --watch`)\n  }\n\n  if (resolved.mergeReports && resolved.watch) {\n    throw new Error(`Cannot merge reports with --watch enabled`)\n  }\n\n  if (resolved.maxWorkers) {\n    resolved.maxWorkers = resolveInlineWorkerOption(resolved.maxWorkers)\n  }\n\n  // `browser.fileParallelism` was replaced by the top-level `fileParallelism`. Map\n  // it (only when browser is enabled, since it was a browser-only option) so\n  // existing configs keep working instead of being silently ignored.\n  const browserOptions = options.browser as { enabled?: boolean; fileParallelism?: boolean } | undefined\n  const browserFileParallelism = browserOptions?.enabled ? browserOptions.fileParallelism : undefined\n  if (browserFileParallelism !== undefined) {\n    logger.deprecate('`browser.fileParallelism` is deprecated. Use the top-level `fileParallelism` option instead.')\n  }\n\n  const fileParallelism = options.fileParallelism ?? browserFileParallelism ?? true\n\n  if (!fileParallelism) {","sourceCodeStart":331,"sourceCodeEnd":367,"githubUrl":"https://github.com/vitest-dev/vitest/blob/d568f8ce3739b532d5bf2c1ee1e45e8a8a473d09/packages/vitest/src/node/config/resolveConfig.ts#L331-L367","documentation":"`--merge-reports` combines coverage/result blobs written by previous sharded runs into a single report. Watch mode keeps re-running tests, so merging mid-watch would race against ongoing writes. The guard at resolveConfig.ts:348 forbids combining them.","triggerScenarios":"Run `vitest --merge-reports --watch` or have `watch: true` in config while invoking the merge step.","commonSituations":"Reusing a dev config (watch on) for the post-CI report-merge step; leaving --watch in a script that wraps merge-reports.","solutions":["Drop --watch for the merge step: `vitest --merge-reports --no-watch`.","Use a dedicated CI config without watch for both the sharded runs and the merge.","Confirm watch is off (CI auto-disables it, but explicit config can re-enable it)."],"exampleFix":"# before\nvitest --merge-reports --watch\n# after\nvitest --merge-reports","handlingStrategy":"validation","validationCode":"function assertMergeReportsNotWatch(opts: { mergeReports?: boolean; watch?: boolean }) {\n  if (opts.mergeReports && opts.watch) throw new Error('Cannot merge reports while watch is enabled')\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use a dedicated merge step with --no-watch.","Keep watch out of CI configs.","Separate the merge-reports script from dev scripts."],"tags":["cli","merge-reports","watch","ci"],"analyzedSha":"d568f8ce3739b532d5bf2c1ee1e45e8a8a473d09","analyzedAt":"2026-08-03T20:23:56.861Z","schemaVersion":2}