Skip to content

fix: save and restore module graph in blob reporter#9740

Merged
sheremet-va merged 15 commits into
vitest-dev:mainfrom
hi-ogawa:02-25-fix_save_and_restore_module_graph_in_blob_reporter
Mar 2, 2026
Merged

fix: save and restore module graph in blob reporter#9740
sheremet-va merged 15 commits into
vitest-dev:mainfrom
hi-ogawa:02-25-fix_save_and_restore_module_graph_in_blob_reporter

Conversation

@hi-ogawa

@hi-ogawa hi-ogawa commented Feb 25, 2026

Copy link
Copy Markdown
Collaborator

Description

Please don't delete this checklist! Before submitting the PR, please make sure you do the following:

  • It's really useful if your PR references an issue where it is discussed ahead of time. If the feature is substantial or introduces breaking changes without a discussion, PR might be closed.
  • Ideally, include a test that fails without this PR but passes with it.
  • Please, don't make changes to pnpm-lock.yaml unless you introduce a new test example.
  • Please check Allow edits by maintainers to make review process faster. Note that this option is not available for repositories that are owned by Github organizations.

Tests

  • Run the tests with pnpm test:ci.

Documentation

  • If you introduce new functionality, document it. You can run documentation with pnpm run docs command.

Changesets

  • Changes in changelog are generated from PR name. Please, make sure that it explains your changes in an understandable manner. Please, prefix changeset messages with feat:, fix:, perf:, docs:, or chore:.

@netlify

netlify Bot commented Feb 25, 2026

Copy link
Copy Markdown

Deploy Preview for vitest-dev ready!

Built without sensitive environment variables

Name Link
🔨 Latest commit eb541a7
🔍 Latest deploy log https://app.netlify.com/projects/vitest-dev/deploys/699eb274fd2f530008dda4ba
😎 Deploy Preview https://deploy-preview-9740--vitest-dev.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@hi-ogawa
hi-ogawa marked this pull request as ready for review February 25, 2026 11:00
@hi-ogawa hi-ogawa added this to the 4.1.0 milestone Feb 26, 2026
@sheremet-va
sheremet-va merged commit 843554b into vitest-dev:main Mar 2, 2026
14 of 16 checks passed
@hi-ogawa
hi-ogawa deleted the 02-25-fix_save_and_restore_module_graph_in_blob_reporter branch March 9, 2026 00:54
736-c41-2c1-e464fc974 added a commit to Swiss-Armed-Forces/Loom that referenced this pull request Mar 16, 2026
This MR contains the following updates:

| Package | Type | Update | Change | OpenSSF |
|---|---|---|---|---|
| [@openapitools/openapi-generator-cli](https://github.com/OpenAPITools/openapi-generator-cli) | devDependencies | minor | [`2.29.0` → `2.30.2`](https://renovatebot.com/diffs/npm/@openapitools%2fopenapi-generator-cli/2.29.0/2.30.2) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/OpenAPITools/openapi-generator-cli/badge)](https://securityscorecards.dev/viewer/?uri=github.com/OpenAPITools/openapi-generator-cli) |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | devDependencies | minor | [`24.10.13` → `24.12.0`](https://renovatebot.com/diffs/npm/@types%2fnode/24.10.13/24.12.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/DefinitelyTyped/DefinitelyTyped/badge)](https://securityscorecards.dev/viewer/?uri=github.com/DefinitelyTyped/DefinitelyTyped) |
| [@typescript-eslint/eslint-plugin](https://typescript-eslint.io/packages/eslint-plugin) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)) | devDependencies | minor | [`8.56.1` → `8.57.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/8.56.1/8.57.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/typescript-eslint/typescript-eslint/badge)](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) |
| [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | devDependencies | minor | [`8.56.1` → `8.57.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.56.1/8.57.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/typescript-eslint/typescript-eslint/badge)](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) |
| [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#readme) ([source](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react)) | devDependencies | minor | [`5.1.4` → `5.2.0`](https://renovatebot.com/diffs/npm/@vitejs%2fplugin-react/5.1.4/5.2.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/vitejs/vite-plugin-react/badge)](https://securityscorecards.dev/viewer/?uri=github.com/vitejs/vite-plugin-react) |
| [typescript-eslint](https://typescript-eslint.io/packages/typescript-eslint) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)) | devDependencies | minor | [`8.56.1` → `8.57.0`](https://renovatebot.com/diffs/npm/typescript-eslint/8.56.1/8.57.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/typescript-eslint/typescript-eslint/badge)](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) |
| [vite-plugin-static-copy](https://github.com/sapphi-red/vite-plugin-static-copy) | devDependencies | minor | [`3.2.0` → `3.3.0`](https://renovatebot.com/diffs/npm/vite-plugin-static-copy/3.2.0/3.3.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/sapphi-red/vite-plugin-static-copy/badge)](https://securityscorecards.dev/viewer/?uri=github.com/sapphi-red/vite-plugin-static-copy) |
| [vitest](https://vitest.dev) ([source](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | devDependencies | minor | [`4.0.18` → `4.1.0`](https://renovatebot.com/diffs/npm/vitest/4.0.18/4.1.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/vitest-dev/vitest/badge)](https://securityscorecards.dev/viewer/?uri=github.com/vitest-dev/vitest) |

---

### Release Notes

<details>
<summary>OpenAPITools/openapi-generator-cli (@&#8203;openapitools/openapi-generator-cli)</summary>

### [`v2.30.2`](https://github.com/OpenAPITools/openapi-generator-cli/releases/tag/v2.30.2)

[Compare Source](OpenAPITools/openapi-generator-cli@v2.30.1...v2.30.2)

##### Bug Fixes

- **deps:** update dependency jsonpath to v1.3.0 ([#&#8203;1164](OpenAPITools/openapi-generator-cli#1164)) ([2c4802d](OpenAPITools/openapi-generator-cli@2c4802d))

### [`v2.30.1`](https://github.com/OpenAPITools/openapi-generator-cli/releases/tag/v2.30.1)

[Compare Source](OpenAPITools/openapi-generator-cli@v2.30.0...v2.30.1)

##### Bug Fixes

- **deps:** update dependency fs-extra to v11.3.4 ([#&#8203;1157](OpenAPITools/openapi-generator-cli#1157)) ([74d5871](OpenAPITools/openapi-generator-cli@74d5871))

### [`v2.30.0`](https://github.com/OpenAPITools/openapi-generator-cli/releases/tag/v2.30.0)

[Compare Source](OpenAPITools/openapi-generator-cli@v2.29.0...v2.30.0)

##### Features

- **release:** trigger a release ([#&#8203;1148](OpenAPITools/openapi-generator-cli#1148)) ([a1e9c93](OpenAPITools/openapi-generator-cli@a1e9c93))

</details>

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/eslint-plugin)</summary>

### [`v8.57.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8570-2026-03-09)

[Compare Source](typescript-eslint/typescript-eslint@v8.56.1...v8.57.0)

##### 🚀 Features

- **eslint-plugin:** \[no-unnecessary-condition] allow literal loop conditions in for/do loops ([#&#8203;12080](typescript-eslint/typescript-eslint#12080))

##### 🩹 Fixes

- **eslint-plugin:** \[no-base-to-string] fix false positive for toString with overloads ([#&#8203;12089](typescript-eslint/typescript-eslint#12089))
- **eslint-plugin:** \[prefer-promise-reject-errors] add allow `TypeOrValueSpecifier` to prefer-promise-reject-errors ([#&#8203;12094](typescript-eslint/typescript-eslint#12094))
- **typescript-estree:** if the template literal is tagged and the text has an invalid escape, `cooked` will be `null` ([#&#8203;11355](typescript-eslint/typescript-eslint#11355))
- **eslint-plugin:** guard against negative paramIndex in no-useless-default-assignment ([#&#8203;12077](typescript-eslint/typescript-eslint#12077))
- **eslint-plugin:** handle statically analyzable computed keys in prefer-readonly ([#&#8203;12079](typescript-eslint/typescript-eslint#12079))
- **eslint-plugin:** \[strict-void-return] false positives with overloads ([#&#8203;12055](typescript-eslint/typescript-eslint#12055))

##### ❤️ Thank You

- Brad Zacher [@&#8203;bradzacher](https://github.com/bradzacher)
- Brian Schlenker [@&#8203;bschlenk](https://github.com/bschlenk)
- Evyatar Daud [@&#8203;StyleShit](https://github.com/StyleShit)
- James Henry [@&#8203;JamesHenry](https://github.com/JamesHenry)
- Josh Goldberg
- Kirk Waiblinger [@&#8203;kirkwaiblinger](https://github.com/kirkwaiblinger)
- Moses Odutusin [@&#8203;thebolarin](https://github.com/thebolarin)
- Newton Yuan [@&#8203;NewtonYuan](https://github.com/NewtonYuan)
- SungHyun627 [@&#8203;SungHyun627](https://github.com/SungHyun627)
- Younsang Na [@&#8203;nayounsang](https://github.com/nayounsang)

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/parser)</summary>

### [`v8.57.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8570-2026-03-09)

[Compare Source](typescript-eslint/typescript-eslint@v8.56.1...v8.57.0)

This was a version bump only for parser to align it with other projects, there were no code changes.

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>vitejs/vite-plugin-react (@&#8203;vitejs/plugin-react)</summary>

### [`v5.2.0`](vitejs/vite-plugin-react@f066114...fda3a86)

[Compare Source](vitejs/vite-plugin-react@f066114...fda3a86)

</details>

<details>
<summary>typescript-eslint/typescript-eslint (typescript-eslint)</summary>

### [`v8.57.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-eslint/CHANGELOG.md#8570-2026-03-09)

[Compare Source](typescript-eslint/typescript-eslint@v8.56.1...v8.57.0)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.57.0) for more information.

You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.

</details>

<details>
<summary>sapphi-red/vite-plugin-static-copy (vite-plugin-static-copy)</summary>

### [`v3.3.0`](https://github.com/sapphi-red/vite-plugin-static-copy/blob/HEAD/CHANGELOG.md#330)

[Compare Source](https://github.com/sapphi-red/vite-plugin-static-copy/compare/vite-plugin-static-copy@3.2.0...vite-plugin-static-copy@3.3.0)

##### Minor Changes

- [#&#8203;230](sapphi-red/vite-plugin-static-copy#230) [`3074e1a`](sapphi-red/vite-plugin-static-copy@3074e1a) Thanks [@&#8203;sapphi-red](https://github.com/sapphi-red)! - Add Vite 8 to peer dependency range.

</details>

<details>
<summary>vitest-dev/vitest (vitest)</summary>

### [`v4.1.0`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.0)

[Compare Source](vitest-dev/vitest@v4.0.18...v4.1.0)

Vitest 4.1 is out!

This release page lists all changes made to the project during the 4.1 beta. To get a review of all the new features, read our [blog post](https://vitest.dev/blog/vitest-4-1).

#####    🚀 Features

- Return a disposable from doMock()  -  by [@&#8203;kirkwaiblinger](https://github.com/kirkwaiblinger) in [#&#8203;9332](vitest-dev/vitest#9332) [<samp>(e3e65)</samp>](vitest-dev/vitest@e3e659a96)
- Added chai style assertions  -  by [@&#8203;ronnakamoto](https://github.com/ronnakamoto) and [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;8842](vitest-dev/vitest#8842) [<samp>(841df)</samp>](vitest-dev/vitest@841df9ac5)
- Update to sinon/fake-timers v15 and add `setTickMode` to timer controls  -  by [@&#8203;atscott](https://github.com/atscott) and [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;8726](vitest-dev/vitest#8726) [<samp>(4b480)</samp>](vitest-dev/vitest@4b480aaed)
- Expose matcher types  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9448](vitest-dev/vitest#9448) [<samp>(3e4b9)</samp>](vitest-dev/vitest@3e4b913b1)
- Add `toTestSpecification` to reported tasks  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9464](vitest-dev/vitest#9464) [<samp>(1a470)</samp>](vitest-dev/vitest@1a4705da9)
- Show a warning if `vi.mock` or `vi.hoisted` are declared outside of top level of the module  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9387](vitest-dev/vitest#9387) [<samp>(5db54)</samp>](vitest-dev/vitest@5db54a468)
- Track and display expectedly failed tests (.fails) in UI and CLI  -  by [@&#8203;Copilot](https://github.com/Copilot), **sheremet-va** and [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9476](vitest-dev/vitest#9476) [<samp>(77d75)</samp>](vitest-dev/vitest@77d75fd34)
- Support tags  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9478](vitest-dev/vitest#9478) [<samp>(de7c8)</samp>](vitest-dev/vitest@de7c8a521)
- Implement `aroundEach` and `aroundAll` hooks  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9450](vitest-dev/vitest#9450) [<samp>(2a8cb)</samp>](vitest-dev/vitest@2a8cb9dc2)
- Stabilize experimental features  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9529](vitest-dev/vitest#9529) [<samp>(b5fd2)</samp>](vitest-dev/vitest@b5fd2a16a)
- Accept `new` or `all` in `--update` flag  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9543](vitest-dev/vitest#9543) [<samp>(a5acf)</samp>](vitest-dev/vitest@a5acf28a5)
- Support `meta` in test options  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9535](vitest-dev/vitest#9535) [<samp>(7d622)</samp>](vitest-dev/vitest@7d622e3d1)
- Support type inference with a new `test.extend` syntax  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9550](vitest-dev/vitest#9550) [<samp>(e5385)</samp>](vitest-dev/vitest@e53854fcc)
- Support vite 8 beta, fix type issues in the config with different vite versions  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9587](vitest-dev/vitest#9587) [<samp>(99028)</samp>](vitest-dev/vitest@990281dfd)
- Add assertion helper to hide internal stack traces  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#&#8203;9594](vitest-dev/vitest#9594) [<samp>(eeb0a)</samp>](vitest-dev/vitest@eeb0ae2f8)
- Store failure screenshots using artifacts API  -  by [@&#8203;macarie](https://github.com/macarie) in [#&#8203;9588](vitest-dev/vitest#9588) [<samp>(24603)</samp>](vitest-dev/vitest@24603e3c4)
- Allow `vitest list` to statically collect tests instead of running files to collect them  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9630](vitest-dev/vitest#9630) [<samp>(7a8e7)</samp>](vitest-dev/vitest@7a8e7fc20)
- Add `--detect-async-leaks`  -  by [@&#8203;AriPerkkio](https://github.com/AriPerkkio) in [#&#8203;9528](vitest-dev/vitest#9528) [<samp>(c594d)</samp>](vitest-dev/vitest@c594d4af3)
- Implement `mockThrow` and `mockThrowOnce`  -  by [@&#8203;thor-juhasz](https://github.com/thor-juhasz) and [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9512](vitest-dev/vitest#9512) [<samp>(61917)</samp>](vitest-dev/vitest@619179fb7)
- Support `update: "none"` and add docs about snapshots behavior on CI  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9700](vitest-dev/vitest#9700) [<samp>(05f18)</samp>](vitest-dev/vitest@05f1854e2)
- Support playwright `launchOptions` with `connectOptions`  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9702](vitest-dev/vitest#9702) [<samp>(f0ff1)</samp>](vitest-dev/vitest@f0ff1b2a0)
- Add `page/locator.mark` API to enhance playwright trace  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9652](vitest-dev/vitest#9652) [<samp>(d0ee5)</samp>](vitest-dev/vitest@d0ee546fe)
- **api**:
  - Support tests starting or ending with `test` in `experimental_parseSpecification`  -  by [@&#8203;jgillick](https://github.com/jgillick) and **Jeremy Gillick** in [#&#8203;9235](vitest-dev/vitest#9235) [<samp>(2f367)</samp>](vitest-dev/vitest@2f367fad3)
  - Add filters to `createSpecification`  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9336](vitest-dev/vitest#9336) [<samp>(c8e6c)</samp>](vitest-dev/vitest@c8e6c7fbf)
  - Expose `runTestFiles` as alternative to `runTestSpecifications`  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9443](vitest-dev/vitest#9443) [<samp>(43d76)</samp>](vitest-dev/vitest@43d761821)
  - Add `allowWrite` and `allowExec` options to `api`  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9350](vitest-dev/vitest#9350) [<samp>(20e00)</samp>](vitest-dev/vitest@20e00ef78)
  - Allow passing down test cases to `toTestSpecification`  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9627](vitest-dev/vitest#9627) [<samp>(6f17d)</samp>](vitest-dev/vitest@6f17d5ddf)
- **browser**:
  - Add `userEvent.wheel` API  -  by [@&#8203;macarie](https://github.com/macarie) in [#&#8203;9188](vitest-dev/vitest#9188) [<samp>(66080)</samp>](vitest-dev/vitest@660801979)
  - Add `filterNode` option to prettyDOM for filtering browser assertion error output  -  by [@&#8203;Copilot](https://github.com/Copilot), **sheremet-va** and [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9475](vitest-dev/vitest#9475) [<samp>(d3220)</samp>](vitest-dev/vitest@d3220fcd8)
  - Support playwright persistent context  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 4.6** and [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9229](vitest-dev/vitest#9229) [<samp>(f865d)</samp>](vitest-dev/vitest@f865d2ba4)
  - Added `detailsPanelPosition` option and button  -  by [@&#8203;shairez](https://github.com/shairez) in [#&#8203;9525](vitest-dev/vitest#9525) [<samp>(c8a31)</samp>](vitest-dev/vitest@c8a31147c)
  - Use BlazeDiff instead of pixelmatch  -  by [@&#8203;macarie](https://github.com/macarie) in [#&#8203;9514](vitest-dev/vitest#9514) [<samp>(30936)</samp>](vitest-dev/vitest@309362089)
  - Add `findElement` and enable strict mode in webdriverio and preview  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9677](vitest-dev/vitest#9677) [<samp>(c3f37)</samp>](vitest-dev/vitest@c3f37721c)
- **cli**:
  - Add [@&#8203;bomb](https://github.com/bomb).sh/tab completions  -  by [@&#8203;AmirSa12](https://github.com/AmirSa12) and [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;8639](vitest-dev/vitest#8639) [<samp>(200f3)</samp>](vitest-dev/vitest@200f31704)
- **coverage**:
  - Support `ignore start/stop` ignore hints  -  by [@&#8203;AriPerkkio](https://github.com/AriPerkkio) in [#&#8203;9204](vitest-dev/vitest#9204) [<samp>(e59c9)</samp>](vitest-dev/vitest@e59c94ba6)
  - Add `coverage.changed` option to report only changed files  -  by [@&#8203;kykim00](https://github.com/kykim00) and [@&#8203;AriPerkkio](https://github.com/AriPerkkio) in [#&#8203;9521](vitest-dev/vitest#9521) [<samp>(1d939)</samp>](vitest-dev/vitest@1d9392c67)
- **experimental**:
  - Add `onModuleRunner` hook to `worker.init`  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9286](vitest-dev/vitest#9286) [<samp>(e977f)</samp>](vitest-dev/vitest@e977f3deb)
  - Option to disable the module runner  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) and [@&#8203;AriPerkkio](https://github.com/AriPerkkio) in [#&#8203;9210](vitest-dev/vitest#9210) [<samp>(9be61)</samp>](vitest-dev/vitest@9be6121ee)
  - Add `importDurations: { limit, print }` options  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 4.6** and [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9401](vitest-dev/vitest#9401) [<samp>(7e10f)</samp>](vitest-dev/vitest@7e10fb356)
  - Add print and fail thresholds for `importDurations`  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#&#8203;9533](vitest-dev/vitest#9533) [<samp>(3f7a5)</samp>](vitest-dev/vitest@3f7a5f8f8)
- **fixtures**:
  - Pass down file context to `beforeAll`/`afterAll`  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9572](vitest-dev/vitest#9572) [<samp>(c8339)</samp>](vitest-dev/vitest@c83395f2c)
- **reporters**:
  - Add `agent` reporter to reduce ai agent token usage  -  by [@&#8203;cpojer](https://github.com/cpojer) in [#&#8203;9779](vitest-dev/vitest#9779) [<samp>(3e9e0)</samp>](vitest-dev/vitest@3e9e096a2)
- **runner**:
  - Enhance `retry` options  -  by [@&#8203;MazenSamehR](https://github.com/MazenSamehR), **Matan Shavit**, [@&#8203;AriPerkkio](https://github.com/AriPerkkio) and [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9370](vitest-dev/vitest#9370) [<samp>(9e4cf)</samp>](vitest-dev/vitest@9e4cfd295)
- **ui**:
  - Allow run individual test/suites  -  by [@&#8203;userquin](https://github.com/userquin) in [#&#8203;9465](vitest-dev/vitest#9465) [<samp>(73b10)</samp>](vitest-dev/vitest@73b10f1b9)
  - Add project filter/sort support  -  by [@&#8203;userquin](https://github.com/userquin) in [#&#8203;8689](vitest-dev/vitest#8689) [<samp>(0c7ea)</samp>](vitest-dev/vitest@0c7eaac16)
  - Add duration sorting to explorer  -  by [@&#8203;julianhahn](https://github.com/julianhahn) and [@&#8203;cursoragent](https://github.com/cursoragent) in [#&#8203;9603](vitest-dev/vitest#9603) [<samp>(209b1)</samp>](vitest-dev/vitest@209b1b0e1)
  - Implement filter for slow tests  -  by [@&#8203;DerYeger](https://github.com/DerYeger) and [@&#8203;userquin](https://github.com/userquin) in [#&#8203;9705](vitest-dev/vitest#9705) [<samp>(8880c)</samp>](vitest-dev/vitest@8880c907a)
- **vitest**:
  - Add run summary in GitHub Actions Reporter  -  by [@&#8203;macarie](https://github.com/macarie) and **jhnance** in [#&#8203;9579](vitest-dev/vitest#9579) [<samp>(96bfc)</samp>](vitest-dev/vitest@96bfc8345)

#####    🐞 Bug Fixes

- Deprecate several vitest/\* entry points  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9347](vitest-dev/vitest#9347) [<samp>(fd459)</samp>](vitest-dev/vitest@fd45928be)
- Use `meta.url` in `createRequire`  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9441](vitest-dev/vitest#9441) [<samp>(e3422)</samp>](vitest-dev/vitest@e34225563)
- Preact browser mode init example of render function not async  -  by [@&#8203;WuMingDao](https://github.com/WuMingDao) in [#&#8203;9375](vitest-dev/vitest#9375) [<samp>(2bea5)</samp>](vitest-dev/vitest@2bea549c7)
- Deprecate unused types in matcher context  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9449](vitest-dev/vitest#9449) [<samp>(20f87)</samp>](vitest-dev/vitest@20f8753a2)
- Handle `external/noExternal` during `configEnvironment` hook  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#&#8203;9508](vitest-dev/vitest#9508) [<samp>(59ea2)</samp>](vitest-dev/vitest@59ea27c1c)
- Replace default ssr environment runner with Vitest server module runner  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#&#8203;9506](vitest-dev/vitest#9506) [<samp>(cd5db)</samp>](vitest-dev/vitest@cd5db660c)
- Propagate experimental CLI options to child projects  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#&#8203;9531](vitest-dev/vitest#9531) [<samp>(b624f)</samp>](vitest-dev/vitest@b624fae53)
- Show a warning when `browser.isolate` is used  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9410](vitest-dev/vitest#9410) [<samp>(3d48e)</samp>](vitest-dev/vitest@3d48ebcb9)
- Fix `vi.mock({ spy: true })` node v8 coverage  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa), **hi-ogawa** and **Claude Opus 4.6** in [#&#8203;9541](vitest-dev/vitest#9541) [<samp>(687b6)</samp>](vitest-dev/vitest@687b633c1)
- Don't show internal ssr handler in errors  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9547](vitest-dev/vitest#9547) [<samp>(76c43)</samp>](vitest-dev/vitest@76c4397b5)
- Close vitest if it failed to start  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9573](vitest-dev/vitest#9573) [<samp>(728ba)</samp>](vitest-dev/vitest@728ba617f)
- Fix ssr environment runner in project  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9584](vitest-dev/vitest#9584) [<samp>(09006)</samp>](vitest-dev/vitest@090064f97)
- Trim trailing white spaces in code block  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9591](vitest-dev/vitest#9591) [<samp>(f78be)</samp>](vitest-dev/vitest@f78bea992)
- Support inline snapshot inside test.for/each  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9590](vitest-dev/vitest#9590) [<samp>(615fd)</samp>](vitest-dev/vitest@615fd521e)
- Apply source maps for external module stack trace  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9152](vitest-dev/vitest#9152) [<samp>(79e20)</samp>](vitest-dev/vitest@79e20d5a3)
- Remove the `.name` from statically collected test  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9596](vitest-dev/vitest#9596) [<samp>(b66ff)</samp>](vitest-dev/vitest@b66ff691a)
- Don't suppress warnings on pnp  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9602](vitest-dev/vitest#9602) [<samp>(89cbd)</samp>](vitest-dev/vitest@89cbdaea3)
- Support snapshot with `expect.soft`  -  by [@&#8203;iumehara](https://github.com/iumehara), [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#&#8203;9231](vitest-dev/vitest#9231) [<samp>(3eb2c)</samp>](vitest-dev/vitest@3eb2cd541)
- Log seed when only `sequence.shuffle.tests` is enabled  -  by [@&#8203;kaigritun](https://github.com/kaigritun), **Kai Gritun** and [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9576](vitest-dev/vitest#9576) [<samp>(8182b)</samp>](vitest-dev/vitest@8182b77ad)
- Externalize `expect/src/utils` from `vitest`  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9616](vitest-dev/vitest#9616) [<samp>(48739)</samp>](vitest-dev/vitest@487398422)
- Ignore test.override during static collection  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9620](vitest-dev/vitest#9620) [<samp>(09174)</samp>](vitest-dev/vitest@0917470ce)
- Increase stacktrace limit for `--detect-async-leaks`  -  by [@&#8203;AriPerkkio](https://github.com/AriPerkkio) in [#&#8203;9638](vitest-dev/vitest#9638) [<samp>(9fd4c)</samp>](vitest-dev/vitest@9fd4ce533)
- Hanging-reporter link in cli  -  by [@&#8203;flx-sta](https://github.com/flx-sta) in [#&#8203;9649](vitest-dev/vitest#9649) [<samp>(7c103)</samp>](vitest-dev/vitest@7c103055c)
- Fix teardown timeout of `aroundEach/All` when inner `aroundEach/All` throws  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9657](vitest-dev/vitest#9657) [<samp>(4ec6c)</samp>](vitest-dev/vitest@4ec6cb305)
- Fix ui mode / html reporter and coverage integration  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#&#8203;9626](vitest-dev/vitest#9626) [<samp>(86fad)</samp>](vitest-dev/vitest@86fad4b42)
- Don't continue when `aroundEach/All` setup timed out  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9670](vitest-dev/vitest#9670) [<samp>(bb013)</samp>](vitest-dev/vitest@bb013d54b)
- Align `VitestRunnerConfig` optional fields with `SerializedConfig`  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9661](vitest-dev/vitest#9661) [<samp>(79520)</samp>](vitest-dev/vitest@79520d82d)
- Handle Symbol values in format utility  -  by [@&#8203;nami8824](https://github.com/nami8824) in [#&#8203;9658](vitest-dev/vitest#9658) [<samp>(0583f)</samp>](vitest-dev/vitest@0583f067e)
- Deprecate `toBe*` spy assertions in favor of `toHaveBeen*` (and `toThrowError`)  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9665](vitest-dev/vitest#9665) [<samp>(4d390)</samp>](vitest-dev/vitest@4d390dfe9)
- Don't propagate nested `aroundEach/All` errors but aggregate them on runner  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9673](vitest-dev/vitest#9673) [<samp>(b6365)</samp>](vitest-dev/vitest@b63653f5a)
- Show a better error if there is a pending dynamic import  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9676](vitest-dev/vitest#9676) [<samp>(7ef5c)</samp>](vitest-dev/vitest@7ef5cf4b7)
- Preserve stack trace of `resolves/rejects` chained assertion error  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9679](vitest-dev/vitest#9679) [<samp>(c6151)</samp>](vitest-dev/vitest@c61511d4a)
- Handle module-sync condition in vmThreads/vmForks require  -  by [@&#8203;lesleh](https://github.com/lesleh) in [#&#8203;9650](vitest-dev/vitest#9650) and [#&#8203;9651](vitest-dev/vitest#9651) [<samp>(bb203)</samp>](vitest-dev/vitest@bb20389f4)
- Hooks should respect `maxConcurrency`  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9653](vitest-dev/vitest#9653) [<samp>(16d13)</samp>](vitest-dev/vitest@16d13d981)
- Recursively autospy module object  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9687](vitest-dev/vitest#9687) [<samp>(695a8)</samp>](vitest-dev/vitest@695a86b41)
- Remove trailing spaces from diff error log  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9680](vitest-dev/vitest#9680) [<samp>(395d1)</samp>](vitest-dev/vitest@395d1a29e)
- Respect project `resolve.conditions` for externals  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9717](vitest-dev/vitest#9717) [<samp>(1d498)</samp>](vitest-dev/vitest@1d4987498)
- Use object for WeakMap instead of a symbol to support webcontainers  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9731](vitest-dev/vitest#9731) [<samp>(c5225)</samp>](vitest-dev/vitest@c52259330)
- Fix re-mocking virtual module  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9748](vitest-dev/vitest#9748) [<samp>(3cbbb)</samp>](vitest-dev/vitest@3cbbb17f1)
- Cancelling should stop current test immediately  -  by [@&#8203;AriPerkkio](https://github.com/AriPerkkio) in [#&#8203;9729](vitest-dev/vitest#9729) [<samp>(0cb2f)</samp>](vitest-dev/vitest@0cb2f7239)
- Make `mockObject` change backwards compatible  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9744](vitest-dev/vitest#9744) [<samp>(84c69)</samp>](vitest-dev/vitest@84c69497f)
- Fix `URL.name` on jsdom  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9767](vitest-dev/vitest#9767) [<samp>(031f3)</samp>](vitest-dev/vitest@031f3a374)
- Save and restore module graph in blob reporter  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9740](vitest-dev/vitest#9740) [<samp>(84355)</samp>](vitest-dev/vitest@843554bf0)
- Don't silence reporter errors from test runtime events handler in normal run and --merge-reports  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9727](vitest-dev/vitest#9727) [<samp>(4072d)</samp>](vitest-dev/vitest@4072d0132)
- Fix `vi.importActual()` for virtual modules  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#&#8203;9772](vitest-dev/vitest#9772) [<samp>(1e89e)</samp>](vitest-dev/vitest@1e89ec020)
- Throw `FixtureAccessError` if suite hook accesses undefined fixture  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9786](vitest-dev/vitest#9786) [<samp>(fc2ce)</samp>](vitest-dev/vitest@fc2cea2b7)
- Allow hyphens in project config file name pattern  -  by [@&#8203;Koutaro-Hanabusa](https://github.com/Koutaro-Hanabusa) and [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9760](vitest-dev/vitest#9760) [<samp>(33e96)</samp>](vitest-dev/vitest@33e96311a)
- Manual and redirect mock shouldn't `load` or `transform` original module  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#&#8203;9774](vitest-dev/vitest#9774) [<samp>(a8216)</samp>](vitest-dev/vitest@a8216b001)
- `hideSkippedTests` should not hide `test.todo`  -  by [@&#8203;oilater](https://github.com/oilater) in [#&#8203;9562](vitest-dev/vitest#9562) and [#&#8203;9781](vitest-dev/vitest#9781) [<samp>(8181e)</samp>](vitest-dev/vitest@8181e06e7)
- Allow catch/finally for async assertion  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9827](vitest-dev/vitest#9827) [<samp>(031f0)</samp>](vitest-dev/vitest@031f02a89)
- Resolve fixture overrides from test's suite in `beforeEach` hooks  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#&#8203;9826](vitest-dev/vitest#9826) [<samp>(99e52)</samp>](vitest-dev/vitest@99e52fe58)
- Use isAgent check, not just TTY, for watch mode  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9841](vitest-dev/vitest#9841) [<samp>(c3cac)</samp>](vitest-dev/vitest@c3cac1c1b)
- Use `performance.now` to measure test timeout duration  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#&#8203;9795](vitest-dev/vitest#9795) [<samp>(f48a6)</samp>](vitest-dev/vitest@f48a60114)
- Correctly identify concurrent test during static analysis  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9846](vitest-dev/vitest#9846) [<samp>(1de0a)</samp>](vitest-dev/vitest@1de0aa22d)
- **browser**:
  - Avoid updating screenshots when `toMatchScreenshot` passes  -  by [@&#8203;macarie](https://github.com/macarie) in [#&#8203;9289](vitest-dev/vitest#9289) [<samp>(46aab)</samp>](vitest-dev/vitest@46aabaa44)
  - Hide injected data-testid attributes  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9503](vitest-dev/vitest#9503) [<samp>(c8d2c)</samp>](vitest-dev/vitest@c8d2c411c)
  - Throw an error if iframe was reloaded  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9516](vitest-dev/vitest#9516) [<samp>(73a81)</samp>](vitest-dev/vitest@73a81f880)
  - Encode projectName in browser client URL  -  by [@&#8203;dkkim0122](https://github.com/dkkim0122) in [#&#8203;9523](vitest-dev/vitest#9523) [<samp>(5b164)</samp>](vitest-dev/vitest@5b16483c3)
  - Don't take failure screenshot if tests have artifacts created by `toMatchScreenshot`  -  by [@&#8203;macarie](https://github.com/macarie) in [#&#8203;9552](vitest-dev/vitest#9552) [<samp>(83ca0)</samp>](vitest-dev/vitest@83ca02547)
  - Remove `--remote-debugging-address` from chrome args  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and [@&#8203;AriPerkkio](https://github.com/AriPerkkio) in [#&#8203;9712](vitest-dev/vitest#9712) [<samp>(f09bb)</samp>](vitest-dev/vitest@f09bb5c32)
  - Make sure userEvent actions support `ensureAwaited`  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9732](vitest-dev/vitest#9732) [<samp>(97685)</samp>](vitest-dev/vitest@9768517b8)
  - Types of `getCDPSession` and `cdp()`  -  by [@&#8203;AriPerkkio](https://github.com/AriPerkkio) in [#&#8203;9716](vitest-dev/vitest#9716) [<samp>(689a2)</samp>](vitest-dev/vitest@689a22a1b)
  - Skip esbuild.legalComments when using rolldown-vite  -  by [@&#8203;Copilot](https://github.com/Copilot), **hi-ogawa** and [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9803](vitest-dev/vitest#9803) [<samp>(3505f)</samp>](vitest-dev/vitest@3505fa5a3)
- **chai**:
  - Don't allow `deepEqual` in the config because it's not serializable  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9666](vitest-dev/vitest#9666) [<samp>(9ee99)</samp>](vitest-dev/vitest@9ee999d73)
- **coverage**:
  - Infer transform mode for uncovered files  -  by [@&#8203;AriPerkkio](https://github.com/AriPerkkio) in [#&#8203;9435](vitest-dev/vitest#9435) [<samp>(f3967)</samp>](vitest-dev/vitest@f396792d6)
  - `thresholds.autoUpdate` to preserve ending whitespace  -  by [@&#8203;AriPerkkio](https://github.com/AriPerkkio) in [#&#8203;9436](vitest-dev/vitest#9436) [<samp>(7e534)</samp>](vitest-dev/vitest@7e534a0b6)
- **deps**:
  - Update all non-major dependencies  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) in [#&#8203;9192](vitest-dev/vitest#9192) [<samp>(90c30)</samp>](vitest-dev/vitest@90c302f3b)
  - Update all non-major dependencies  -  in [#&#8203;9485](vitest-dev/vitest#9485) [<samp>(c0118)</samp>](vitest-dev/vitest@c01186022)
  - Update all non-major dependencies  -  in [#&#8203;9567](vitest-dev/vitest#9567) [<samp>(13c9e)</samp>](vitest-dev/vitest@13c9e022b)
- **docs**:
  - Fix old `/config/#option` hash links causing hydration errors  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 4.6** and [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9610](vitest-dev/vitest#9610) [<samp>(a603c)</samp>](vitest-dev/vitest@a603c3a30)
- **expect**:
  - `toMatchObject(Map/Set)` should expect `Map/Set` on left hand side  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#&#8203;9532](vitest-dev/vitest#9532) [<samp>(381da)</samp>](vitest-dev/vitest@381da4a9d)
  - Fix objectContaining with proxy  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#&#8203;9554](vitest-dev/vitest#9554) [<samp>(7ce34)</samp>](vitest-dev/vitest@7ce3417b1)
  - Support arbitrary value equality for `toThrow` and make Error detection robust  -  by [@&#8203;hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#&#8203;9570](vitest-dev/vitest#9570) [<samp>(de215)</samp>](vitest-dev/vitest@de215c19c)
- **mock**:
  - Inject helpers after hashbang if present  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9545](vitest-dev/vitest#9545) [<samp>(65432)</samp>](vitest-dev/vitest@65432a74b)
- **mocker**:
  - Update vite's peer dependency range  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9808](vitest-dev/vitest#9808) [<samp>(36f9a)</samp>](vitest-dev/vitest@36f9a81a2)
- **reporter**:
  - `dot` reporter leaves pending tests  -  by [@&#8203;AriPerkkio](https://github.com/AriPerkkio) in [#&#8203;9684](vitest-dev/vitest#9684) [<samp>(4d793)</samp>](vitest-dev/vitest@4d7938a56)
- **runner**:
  - Mark repeated tests as finished on last run  -  by [@&#8203;AriPerkkio](https://github.com/AriPerkkio) in [#&#8203;9707](vitest-dev/vitest#9707) [<samp>(cc735)</samp>](vitest-dev/vitest@cc735970a)
- **spy**:
  - Support deep partial in vi.mocked  -  by [@&#8203;j2h30728](https://github.com/j2h30728) in [#&#8203;8152](vitest-dev/vitest#8152) and [#&#8203;9493](vitest-dev/vitest#9493) [<samp>(71cb5)</samp>](vitest-dev/vitest@71cb51ffc)
  - Fallback to object accessor if descriptor's value is `undefined`  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9511](vitest-dev/vitest#9511) [<samp>(6f181)</samp>](vitest-dev/vitest@6f18103fa)
  - Throw correct errors when shorthand methods are used on a class  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9513](vitest-dev/vitest#9513) [<samp>(5d0fd)</samp>](vitest-dev/vitest@5d0fd3b62)
- **types**:
  - `bench.reporters` no longer gives type errors when passing file name string paths  -  by [@&#8203;Bertie690](https://github.com/Bertie690) in [#&#8203;9695](vitest-dev/vitest#9695) [<samp>(093c8)</samp>](vitest-dev/vitest@093c8f6b5)
- **ui**:
  - Process artifact attachments when generating HTML reporter  -  by [@&#8203;macarie](https://github.com/macarie) in [#&#8203;9472](vitest-dev/vitest#9472) [<samp>(96eb9)</samp>](vitest-dev/vitest@96eb92826)
  - Don't fail if --ui and --root are specified together  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9536](vitest-dev/vitest#9536) [<samp>(d9305)</samp>](vitest-dev/vitest@d93055fc7)

#####    🏎 Performance

- **pretty-format**: Combine DOMElement plugins  -  by [@&#8203;sheremet-va](https://github.com/sheremet-va) in [#&#8203;9581](vitest-dev/vitest#9581) [<samp>(da85a)</samp>](vitest-dev/vitest@da85a3267)

#####     [View changes on GitHub](vitest-dev/vitest@v4.0.17...v4.1.0)

</details>

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My41OS4zIiwidXBkYXRlZEluVmVyIjoiNDMuNjYuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicmVub3ZhdGUiXX0=-->

See merge request swiss-armed-forces/cyber-command/cea/loom!361

Co-authored-by: Loom MR Pipeline Trigger <group_103951964_bot_9504bb8dead6d4e406ad817a607f24be@noreply.gitlab.com>
Co-authored-by: shrewd-laidback palace <shrewd-laidback-palace-736-c41-2c1-e464fc974@swiss-armed-forces-open-source.ch>
renovate Bot added a commit to gwennlbh/svelte-mathml that referenced this pull request Jul 25, 2026
##### [v4.1.10](https://github.com/vitest-dev/vitest/releases/tag/v4.1.10)

#####    🐞 Bug Fixes

- **browser**: Check fs access in builtin commands \[backport to v4]  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (claude-opus-4-8)** in [#10680](https://github.com/vitest-dev/vitest/issues/10680) [<samp>(5c18d)</samp>](https://github.com/vitest-dev/vitest/commit/5c18dd267)
- **vm**: Fix external module resolve error with deps optimizer query for encoded URI \[backport to v4]  -  by [@SveLil](https://github.com/SveLil) and [@hi-ogawa](https://github.com/hi-ogawa) in [#10661](https://github.com/vitest-dev/vitest/issues/10661) [<samp>(bae52)</samp>](https://github.com/vitest-dev/vitest/commit/bae52b511)

#####     [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.9...v4.1.10)
##### [v4.1.9](https://github.com/vitest-dev/vitest/releases/tag/v4.1.9)

##### 🐞 Bug Fixes

- Fix `importOriginal` with optimizer and query import \[backport to v4] - by **Hiroshi Ogawa**, **David Harris**, **Codex**and **Vladimir** in [#10546](https://github.com/vitest-dev/vitest/issues/10546) [<samp>(a5180)</samp>](https://github.com/vitest-dev/vitest/commit/a5180190c)
- **browser**:
  - Wait for orchestrator readiness before resolving browser sessions \[backport to v4] - by **Vladimir** and **Séamus O'Connor** in [#10555](https://github.com/vitest-dev/vitest/issues/10555) [<samp>(7fb29)</samp>](https://github.com/vitest-dev/vitest/commit/7fb29651a)
  - Wait for iframe tester readiness before preparing  \[backport to v4] - by **Vladimir** and **Séamus O'Connor** in [#10497](https://github.com/vitest-dev/vitest/issues/10497) and [#10556](https://github.com/vitest-dev/vitest/issues/10556) [<samp>(fbc62)</samp>](https://github.com/vitest-dev/vitest/commit/fbc626c40)
- **mocker**:
  - Hoist vi.mock() for vite-plus/test imports \[backport to v4] - by **Hiroshi Ogawa**, **LongYinan**, **Claude Opus 4.8** and **Vladimir** in [#10548](https://github.com/vitest-dev/vitest/issues/10548) [<samp>(2c955)</samp>](https://github.com/vitest-dev/vitest/commit/2c9559c02)
- **pool**:
  - Prevent test run hang on worker crash  \[backport to v4] - by **Ari Perkkiö** and **Jattioui Ismail** in [#10543](https://github.com/vitest-dev/vitest/issues/10543) and [#10564](https://github.com/vitest-dev/vitest/issues/10564) [<samp>(934b0)</samp>](https://github.com/vitest-dev/vitest/commit/934b0f587)

##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.8...v4.1.9)
##### [v4.1.8](https://github.com/vitest-dev/vitest/releases/tag/v4.1.8)

#####    🐞 Bug Fixes

- **browser**:
  - Disable client `cdp` API when `allowWrite/allowExec: false` \[backport to v4]  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Codex** in [#10450](https://github.com/vitest-dev/vitest/issues/10450) [<samp>(e4067)</samp>](https://github.com/vitest-dev/vitest/commit/e4067b3b1)
  - Remove orphaned Playwright route when same module is mocked via multiple ids \[backport to v4]  -  by [@toxik](https://github.com/toxik) and [@Zelys-DFKH](https://github.com/Zelys-DFKH) in [#10474](https://github.com/vitest-dev/vitest/issues/10474) [<samp>(675b4)</samp>](https://github.com/vitest-dev/vitest/commit/675b4343f)

#####     [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.7...v4.1.8)
##### [v4.1.7](https://github.com/vitest-dev/vitest/releases/tag/v4.1.7)

#####    🐞 Bug Fixes

- **runner**: Limit concurrency per task branch in addition to per leaf callbacks (backport)  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#10384](https://github.com/vitest-dev/vitest/issues/10384) [<samp>(4f0f2)</samp>](https://github.com/vitest-dev/vitest/commit/4f0f2a1ee)

#####     [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.6...v4.1.7)
##### [v4.1.6](https://github.com/vitest-dev/vitest/releases/tag/v4.1.6)

#####    🐞 Bug Fixes

- **browser**: Provide project reference in `ToMatchScreenshotResolvePath`  -  by [@macarie](https://github.com/macarie) and [@sheremet-va](https://github.com/sheremet-va) in [#10138](https://github.com/vitest-dev/vitest/issues/10138) [<samp>(31882)</samp>](https://github.com/vitest-dev/vitest/commit/31882607c)
- Global `sequence.concurrent: true` with top-level `test(..., { concurrent: false })` + depreacte `sequential` test API and options  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Codex** and [@sheremet-va](https://github.com/sheremet-va) in [#10196](https://github.com/vitest-dev/vitest/issues/10196) [<samp>(2847d)</samp>](https://github.com/vitest-dev/vitest/commit/2847dfa2a)
- **browser**: Simplify orchestrator otel carrier  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#10285](https://github.com/vitest-dev/vitest/issues/10285) [<samp>(18af9)</samp>](https://github.com/vitest-dev/vitest/commit/18af98cee)

#####    🏎 Performance

- Stringify diff objects only once  -  by [@sheremet-va](https://github.com/sheremet-va) in [#10276](https://github.com/vitest-dev/vitest/issues/10276) [<samp>(9f7b1)</samp>](https://github.com/vitest-dev/vitest/commit/9f7b1528c)

#####     [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.5...v4.1.6)
##### [v4.1.5](https://github.com/vitest-dev/vitest/releases/tag/v4.1.5)

#####    🚀 Experimental Features

- **coverage**: Istanbul to support `instrumenter` option  -  by [@BartWaardenburg](https://github.com/BartWaardenburg) and [@AriPerkkio](https://github.com/AriPerkkio) in [#10119](https://github.com/vitest-dev/vitest/issues/10119) [<samp>(0e0ff)</samp>](https://github.com/vitest-dev/vitest/commit/0e0ff41c7)

#####    🐞 Bug Fixes

- \--project negation excludes browser instances  -  by [@felamaslen](https://github.com/felamaslen) in [#10131](https://github.com/vitest-dev/vitest/issues/10131) [<samp>(9423d)</samp>](https://github.com/vitest-dev/vitest/commit/9423dc084)
- Project color label on html reporter  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#10142](https://github.com/vitest-dev/vitest/issues/10142) [<samp>(596f7)</samp>](https://github.com/vitest-dev/vitest/commit/596f73986)
- Fix `vi.defineHelper` called as object method  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#10163](https://github.com/vitest-dev/vitest/issues/10163) [<samp>(122c2)</samp>](https://github.com/vitest-dev/vitest/commit/122c25b5b)
- Alias `agent` reporter to `minimal`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#10157](https://github.com/vitest-dev/vitest/issues/10157) [<samp>(663b9)</samp>](https://github.com/vitest-dev/vitest/commit/663b99fe3)
- Respect diff config options in soft assertions  -  by [@Copilot](https://github.com/Copilot), **sheremet-va** and [@sheremet-va](https://github.com/sheremet-va) in [#8696](https://github.com/vitest-dev/vitest/issues/8696) [<samp>(9787d)</samp>](https://github.com/vitest-dev/vitest/commit/9787dedad)
- Respect diff config options in soft assertions "  -  by [@sheremet-va](https://github.com/sheremet-va) in [#8696](https://github.com/vitest-dev/vitest/issues/8696) [<samp>(7dc6d)</samp>](https://github.com/vitest-dev/vitest/commit/7dc6d54fd)
- **ast-collect**: Recognize \_*vi\_import* prefix in static test discovery  -  by [@Yejneshwar](https://github.com/Yejneshwar) in [#10129](https://github.com/vitest-dev/vitest/issues/10129) [<samp>(32546)</samp>](https://github.com/vitest-dev/vitest/commit/325463ab2)
- **coverage**: Descriptive error message when reports directory is removed during test run  -  by [@DaveT1991](https://github.com/DaveT1991) and [@AriPerkkio](https://github.com/AriPerkkio) in [#10117](https://github.com/vitest-dev/vitest/issues/10117) [<samp>(14133)</samp>](https://github.com/vitest-dev/vitest/commit/1413382e1)
- **snapshot**: Increase default snapshot max output length  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Codex** in [#10150](https://github.com/vitest-dev/vitest/issues/10150) [<samp>(21e66)</samp>](https://github.com/vitest-dev/vitest/commit/21e66ff63)
- **ui**: Fix jsx/tsx syntax highlight  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#10152](https://github.com/vitest-dev/vitest/issues/10152) [<samp>(f1b1f)</samp>](https://github.com/vitest-dev/vitest/commit/f1b1f6c7b)
- **web-worker**: Support MessagePort objects referenced inside postMessage data  -  by [@whitphx](https://github.com/whitphx) and **Claude Opus 4.6 (1M context)** in [#9927](https://github.com/vitest-dev/vitest/issues/9927) and [#10124](https://github.com/vitest-dev/vitest/issues/10124) [<samp>(7ad7d)</samp>](https://github.com/vitest-dev/vitest/commit/7ad7d39af)
- **api**: Make test-specification options writable  -  by [@sheremet-va](https://github.com/sheremet-va) in [#10154](https://github.com/vitest-dev/vitest/issues/10154) [<samp>(6abd5)</samp>](https://github.com/vitest-dev/vitest/commit/6abd557b7)

#####     [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.4...v4.1.5)
##### [v4.1.4](https://github.com/vitest-dev/vitest/releases/tag/v4.1.4)

#####    🚀 Experimental Features

- **coverage**:
  - Default to text reporter `skipFull` if agent detected  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#10018](https://github.com/vitest-dev/vitest/issues/10018) [<samp>(53757)</samp>](https://github.com/vitest-dev/vitest/commit/53757804c)
- **experimental**:
  - Expose `assertion` as a public field  -  by [@sheremet-va](https://github.com/sheremet-va) in [#10095](https://github.com/vitest-dev/vitest/issues/10095) [<samp>(a120e)</samp>](https://github.com/vitest-dev/vitest/commit/a120e3ab8)
  - Support aria snapshot  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 4.6 (1M context)**, [@AriPerkkio](https://github.com/AriPerkkio), **Codex** and [@sheremet-va](https://github.com/sheremet-va) in [#9668](https://github.com/vitest-dev/vitest/issues/9668) [<samp>(d4fbb)</samp>](https://github.com/vitest-dev/vitest/commit/d4fbb5cc9)
- **reporter**:
  - Add filterMeta option to json reporter  -  by [@nami8824](https://github.com/nami8824) and [@sheremet-va](https://github.com/sheremet-va) in [#10078](https://github.com/vitest-dev/vitest/issues/10078) [<samp>(b77de)</samp>](https://github.com/vitest-dev/vitest/commit/b77de968e)

#####    🐞 Bug Fixes

- Use "black" foreground for labeled terminal message to ensure contrast  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#10076](https://github.com/vitest-dev/vitest/issues/10076) [<samp>(203f0)</samp>](https://github.com/vitest-dev/vitest/commit/203f07af7)
- Make `expect(..., message)` consistent as error message prefix  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Codex** in [#10068](https://github.com/vitest-dev/vitest/issues/10068) [<samp>(a1b5f)</samp>](https://github.com/vitest-dev/vitest/commit/a1b5f0f4f)
- Do not hoist imports whose names match class properties .  -  by [@SunsetFi](https://github.com/SunsetFi) in [#10093](https://github.com/vitest-dev/vitest/issues/10093) and [#10094](https://github.com/vitest-dev/vitest/issues/10094) [<samp>(0fc4b)</samp>](https://github.com/vitest-dev/vitest/commit/0fc4b47e0)
- **browser**: Spread user server options into browser Vite server in project  -  by [@GoldStrikeArch](https://github.com/GoldStrikeArch) in [#10049](https://github.com/vitest-dev/vitest/issues/10049) [<samp>(65c9d)</samp>](https://github.com/vitest-dev/vitest/commit/65c9d55eb)

#####     [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.3...v4.1.4)
##### [v4.1.3](https://github.com/vitest-dev/vitest/releases/tag/v4.1.3)

#####    🚀 Experimental Features

- Add `experimental.preParse` flag  -  by [@sheremet-va](https://github.com/sheremet-va) in [#10070](https://github.com/vitest-dev/vitest/issues/10070) [<samp>(78273)</samp>](https://github.com/vitest-dev/vitest/commit/7827363bd)
- Support `browser.locators.exact` option  -  by [@sheremet-va](https://github.com/sheremet-va) in [#10013](https://github.com/vitest-dev/vitest/issues/10013) [<samp>(48799)</samp>](https://github.com/vitest-dev/vitest/commit/487990a19)
- Add `TestAttachment.bodyEncoding`  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9969](https://github.com/vitest-dev/vitest/issues/9969) [<samp>(89ca0)</samp>](https://github.com/vitest-dev/vitest/commit/89ca0e254)
- Support custom snapshot matcher  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Claude Sonnet 4.6** and **Codex** in [#9973](https://github.com/vitest-dev/vitest/issues/9973) [<samp>(59b0e)</samp>](https://github.com/vitest-dev/vitest/commit/59b0e6411)

#####    🐞 Bug Fixes

- Advance fake timers with `expect.poll` interval  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Sonnet 4.6** in [#10022](https://github.com/vitest-dev/vitest/issues/10022) [<samp>(3f5bf)</samp>](https://github.com/vitest-dev/vitest/commit/3f5bfa365)
- Add `@vitest/coverage-v8` and `@vitest/coverage-istanbul` as optional dependency  -  by [@alan-agius4](https://github.com/alan-agius4) in [#10025](https://github.com/vitest-dev/vitest/issues/10025) [<samp>(146d4)</samp>](https://github.com/vitest-dev/vitest/commit/146d4f0a0)
- Fix `defineHelper` for webkit async stack trace + update playwright 1.59.0  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#10036](https://github.com/vitest-dev/vitest/issues/10036) [<samp>(5a5fa)</samp>](https://github.com/vitest-dev/vitest/commit/5a5fa49fe)
- Fix suite hook throwing errors for unused auto test-scoped fixture  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Sonnet 4.6** in [#10035](https://github.com/vitest-dev/vitest/issues/10035) [<samp>(39865)</samp>](https://github.com/vitest-dev/vitest/commit/398657e8d)
- **expect**:
  - Remove `JestExtendError.context` from verbose error reporting  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9983](https://github.com/vitest-dev/vitest/issues/9983) [<samp>(66751)</samp>](https://github.com/vitest-dev/vitest/commit/66751c9e8)
  - Don't leak "runner" types  -  by [@sheremet-va](https://github.com/sheremet-va) in [#10004](https://github.com/vitest-dev/vitest/issues/10004) [<samp>(ec204)</samp>](https://github.com/vitest-dev/vitest/commit/ec2045543)
- **snapshot**:
  - Fix flagging obsolete snapshots for snapshot properties mismatch  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Sonnet 4.6** in [#9986](https://github.com/vitest-dev/vitest/issues/9986) [<samp>(6b869)</samp>](https://github.com/vitest-dev/vitest/commit/6b869156b)
  - Export custom snapshot matcher helper from `vitest`  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Codex** in [#10042](https://github.com/vitest-dev/vitest/issues/10042) [<samp>(691d3)</samp>](https://github.com/vitest-dev/vitest/commit/691d341fd)
- **ui**:
  - Don't leak vite types  -  by [@sheremet-va](https://github.com/sheremet-va) in [#10005](https://github.com/vitest-dev/vitest/issues/10005) [<samp>(fdff1)</samp>](https://github.com/vitest-dev/vitest/commit/fdff1bf9a)
- **vm**:
  - Fix external module resolve error with deps optimizer query  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Sonnet 4.6** in [#10024](https://github.com/vitest-dev/vitest/issues/10024) [<samp>(9dbf4)</samp>](https://github.com/vitest-dev/vitest/commit/9dbf47786)

#####     [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.2...v4.1.3)
##### [v4.1.2](https://github.com/vitest-dev/vitest/releases/tag/v4.1.2)

This release bumps Vitest's `flatted` version and removes version pinning to resolve `flatted`'s CVE related issues ([#9975](https://github.com/vitest-dev/vitest/issues/9975)).

#####    🐞 Bug Fixes

- Don't resolve `setupFiles` from parent directory  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9960](https://github.com/vitest-dev/vitest/issues/9960) [<samp>(7aa93)</samp>](https://github.com/vitest-dev/vitest/commit/7aa937776)
- Ensure sequential mock/unmock resolution  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#9830](https://github.com/vitest-dev/vitest/issues/9830) [<samp>(7c065)</samp>](https://github.com/vitest-dev/vitest/commit/7c06598db)
- **browser**: Take failure screenshot if `toMatchScreenshot` can't capture a stable screenshot  -  by [@macarie](https://github.com/macarie) in [#9847](https://github.com/vitest-dev/vitest/issues/9847) [<samp>(faace)</samp>](https://github.com/vitest-dev/vitest/commit/faace1fbe)
- **coverage**: Correct `coverageConfigDefaults` values and types  -  by [@Arthie](https://github.com/Arthie) in [#9940](https://github.com/vitest-dev/vitest/issues/9940) [<samp>(b3c99)</samp>](https://github.com/vitest-dev/vitest/commit/b3c992cb2)
- **pretty-format**: Fix output limit over counting  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9965](https://github.com/vitest-dev/vitest/issues/9965) [<samp>(d3b7a)</samp>](https://github.com/vitest-dev/vitest/commit/d3b7a40fa)
- Disable colors if agent is detected  -  by [@sheremet-va](https://github.com/sheremet-va) and [@AriPerkkio](https://github.com/AriPerkkio) in [#9851](https://github.com/vitest-dev/vitest/issues/9851) [<samp>(6f97b)</samp>](https://github.com/vitest-dev/vitest/commit/6f97b55dd)

#####     [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.1...v4.1.2)
##### [v4.1.1](https://github.com/vitest-dev/vitest/releases/tag/v4.1.1)

#####    🚀 Features

- **experimental**:
  - Expose `matchesTags` to test if the current filter matches tags  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9913](https://github.com/vitest-dev/vitest/issues/9913) [<samp>(eec53)</samp>](https://github.com/vitest-dev/vitest/commit/eec53d9f5)
  - Introduce `experimental.vcsProvider`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9928](https://github.com/vitest-dev/vitest/issues/9928) [<samp>(56115)</samp>](https://github.com/vitest-dev/vitest/commit/561150036)

#####    🐞 Bug Fixes

- Mark `TestProject.testFilesList` internal properly  -  by [@sapphi-red](https://github.com/sapphi-red) in [#9867](https://github.com/vitest-dev/vitest/issues/9867) [<samp>(54f26)</samp>](https://github.com/vitest-dev/vitest/commit/54f2660f5)
- Detect fixture that returns without calling `use`  -  by [@oilater](https://github.com/oilater) in [#9831](https://github.com/vitest-dev/vitest/issues/9831) and [#9861](https://github.com/vitest-dev/vitest/issues/9861) [<samp>(633ae)</samp>](https://github.com/vitest-dev/vitest/commit/633ae2303)
- Drop vite 8.beta support  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#9862](https://github.com/vitest-dev/vitest/issues/9862) [<samp>(b78f5)</samp>](https://github.com/vitest-dev/vitest/commit/b78f5389d)
- Type regression in vi.mocked() static class methods  -  by [@purepear](https://github.com/purepear) and [@hi-ogawa](https://github.com/hi-ogawa) in [#9857](https://github.com/vitest-dev/vitest/issues/9857) [<samp>(90926)</samp>](https://github.com/vitest-dev/vitest/commit/90926641b)
- Properly re-evaluate actual modules of mocked external  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9898](https://github.com/vitest-dev/vitest/issues/9898) [<samp>(ae5ec)</samp>](https://github.com/vitest-dev/vitest/commit/ae5ec03ef)
- Preserve coverage report when html reporter overlaps  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9889](https://github.com/vitest-dev/vitest/issues/9889) [<samp>(2d81a)</samp>](https://github.com/vitest-dev/vitest/commit/2d81ad897)
- Provide `vi.advanceTimers` to the preview provider  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9891](https://github.com/vitest-dev/vitest/issues/9891) [<samp>(1bc3e)</samp>](https://github.com/vitest-dev/vitest/commit/1bc3e63be)
- Don't leak event listener in playwright provider  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9910](https://github.com/vitest-dev/vitest/issues/9910) [<samp>(d9355)</samp>](https://github.com/vitest-dev/vitest/commit/d93550ff7)
- Open browser in `--standalone` mode without running tests  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9911](https://github.com/vitest-dev/vitest/issues/9911) [<samp>(e78ad)</samp>](https://github.com/vitest-dev/vitest/commit/e78adcf97)
- Guard disposable and optional `body`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9912](https://github.com/vitest-dev/vitest/issues/9912) [<samp>(6fdb2)</samp>](https://github.com/vitest-dev/vitest/commit/6fdb2ba61)
- Resolve `retry.condition` RegExp serialization issue  -  by [@nstepien](https://github.com/nstepien) and [@hi-ogawa](https://github.com/hi-ogawa) in [#9942](https://github.com/vitest-dev/vitest/issues/9942) [<samp>(7b605)</samp>](https://github.com/vitest-dev/vitest/commit/7b6054328)
- **collect**:
  - Don't treat extra props on `test` return as tests  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9871](https://github.com/vitest-dev/vitest/issues/9871) [<samp>(141e7)</samp>](https://github.com/vitest-dev/vitest/commit/141e72aa1)
- **coverage**:
  - Simplify provider types  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#9931](https://github.com/vitest-dev/vitest/issues/9931) [<samp>(aaf9f)</samp>](https://github.com/vitest-dev/vitest/commit/aaf9f18ae)
  - Load built-in provider without module runner  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#9939](https://github.com/vitest-dev/vitest/issues/9939) [<samp>(bf892)</samp>](https://github.com/vitest-dev/vitest/commit/bf8920817)
- **expect**:
  - Soft assertions continue after .resolves/.rejects promise errors  -  by [@mixelburg](https://github.com/mixelburg), **Maks Pikov**, **Claude Opus 4.6 (1M context)** and [@hi-ogawa](https://github.com/hi-ogawa) in [#9843](https://github.com/vitest-dev/vitest/issues/9843) [<samp>(6d74b)</samp>](https://github.com/vitest-dev/vitest/commit/6d74b4948)
  - Fix sinon-chai style API  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9943](https://github.com/vitest-dev/vitest/issues/9943) [<samp>(0f08d)</samp>](https://github.com/vitest-dev/vitest/commit/0f08dda2c)
- **pretty-format**:
  - Limit output for large object  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6 (1M context)** in [#9949](https://github.com/vitest-dev/vitest/issues/9949) [<samp>(0d5f9)</samp>](https://github.com/vitest-dev/vitest/commit/0d5f9d6ef)

#####     [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.0...v4.1.1)
##### [v4.1.0](https://github.com/vitest-dev/vitest/releases/tag/v4.1.0)

Vitest 4.1 is out!

This release page lists all changes made to the project during the 4.1 beta. To get a review of all the new features, read our [blog post](https://vitest.dev/blog/vitest-4-1).

#####    🚀 Features

- Return a disposable from doMock()  -  by [@kirkwaiblinger](https://github.com/kirkwaiblinger) in [#9332](https://github.com/vitest-dev/vitest/issues/9332) [<samp>(e3e65)</samp>](https://github.com/vitest-dev/vitest/commit/e3e659a96)
- Added chai style assertions  -  by [@ronnakamoto](https://github.com/ronnakamoto) and [@sheremet-va](https://github.com/sheremet-va) in [#8842](https://github.com/vitest-dev/vitest/issues/8842) [<samp>(841df)</samp>](https://github.com/vitest-dev/vitest/commit/841df9ac5)
- Update to sinon/fake-timers v15 and add `setTickMode` to timer controls  -  by [@atscott](https://github.com/atscott) and [@sheremet-va](https://github.com/sheremet-va) in [#8726](https://github.com/vitest-dev/vitest/issues/8726) [<samp>(4b480)</samp>](https://github.com/vitest-dev/vitest/commit/4b480aaed)
- Expose matcher types  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9448](https://github.com/vitest-dev/vitest/issues/9448) [<samp>(3e4b9)</samp>](https://github.com/vitest-dev/vitest/commit/3e4b913b1)
- Add `toTestSpecification` to reported tasks  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9464](https://github.com/vitest-dev/vitest/issues/9464) [<samp>(1a470)</samp>](https://github.com/vitest-dev/vitest/commit/1a4705da9)
- Show a warning if `vi.mock` or `vi.hoisted` are declared outside of top level of the module  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9387](https://github.com/vitest-dev/vitest/issues/9387) [<samp>(5db54)</samp>](https://github.com/vitest-dev/vitest/commit/5db54a468)
- Track and display expectedly failed tests (.fails) in UI and CLI  -  by [@Copilot](https://github.com/Copilot), **sheremet-va** and [@sheremet-va](https://github.com/sheremet-va) in [#9476](https://github.com/vitest-dev/vitest/issues/9476) [<samp>(77d75)</samp>](https://github.com/vitest-dev/vitest/commit/77d75fd34)
- Support tags  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9478](https://github.com/vitest-dev/vitest/issues/9478) [<samp>(de7c8)</samp>](https://github.com/vitest-dev/vitest/commit/de7c8a521)
- Implement `aroundEach` and `aroundAll` hooks  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9450](https://github.com/vitest-dev/vitest/issues/9450) [<samp>(2a8cb)</samp>](https://github.com/vitest-dev/vitest/commit/2a8cb9dc2)
- Stabilize experimental features  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9529](https://github.com/vitest-dev/vitest/issues/9529) [<samp>(b5fd2)</samp>](https://github.com/vitest-dev/vitest/commit/b5fd2a16a)
- Accept `new` or `all` in `--update` flag  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9543](https://github.com/vitest-dev/vitest/issues/9543) [<samp>(a5acf)</samp>](https://github.com/vitest-dev/vitest/commit/a5acf28a5)
- Support `meta` in test options  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9535](https://github.com/vitest-dev/vitest/issues/9535) [<samp>(7d622)</samp>](https://github.com/vitest-dev/vitest/commit/7d622e3d1)
- Support type inference with a new `test.extend` syntax  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9550](https://github.com/vitest-dev/vitest/issues/9550) [<samp>(e5385)</samp>](https://github.com/vitest-dev/vitest/commit/e53854fcc)
- Support vite 8 beta, fix type issues in the config with different vite versions  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9587](https://github.com/vitest-dev/vitest/issues/9587) [<samp>(99028)</samp>](https://github.com/vitest-dev/vitest/commit/990281dfd)
- Add assertion helper to hide internal stack traces  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#9594](https://github.com/vitest-dev/vitest/issues/9594) [<samp>(eeb0a)</samp>](https://github.com/vitest-dev/vitest/commit/eeb0ae2f8)
- Store failure screenshots using artifacts API  -  by [@macarie](https://github.com/macarie) in [#9588](https://github.com/vitest-dev/vitest/issues/9588) [<samp>(24603)</samp>](https://github.com/vitest-dev/vitest/commit/24603e3c4)
- Allow `vitest list` to statically collect tests instead of running files to collect them  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9630](https://github.com/vitest-dev/vitest/issues/9630) [<samp>(7a8e7)</samp>](https://github.com/vitest-dev/vitest/commit/7a8e7fc20)
- Add `--detect-async-leaks`  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#9528](https://github.com/vitest-dev/vitest/issues/9528) [<samp>(c594d)</samp>](https://github.com/vitest-dev/vitest/commit/c594d4af3)
- Implement `mockThrow` and `mockThrowOnce`  -  by [@thor-juhasz](https://github.com/thor-juhasz) and [@sheremet-va](https://github.com/sheremet-va) in [#9512](https://github.com/vitest-dev/vitest/issues/9512) [<samp>(61917)</samp>](https://github.com/vitest-dev/vitest/commit/619179fb7)
- Support `update: "none"` and add docs about snapshots behavior on CI  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9700](https://github.com/vitest-dev/vitest/issues/9700) [<samp>(05f18)</samp>](https://github.com/vitest-dev/vitest/commit/05f1854e2)
- Support playwright `launchOptions` with `connectOptions`  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9702](https://github.com/vitest-dev/vitest/issues/9702) [<samp>(f0ff1)</samp>](https://github.com/vitest-dev/vitest/commit/f0ff1b2a0)
- Add `page/locator.mark` API to enhance playwright trace  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9652](https://github.com/vitest-dev/vitest/issues/9652) [<samp>(d0ee5)</samp>](https://github.com/vitest-dev/vitest/commit/d0ee546fe)
- **api**:
  - Support tests starting or ending with `test` in `experimental_parseSpecification`  -  by [@jgillick](https://github.com/jgillick) and **Jeremy Gillick** in [#9235](https://github.com/vitest-dev/vitest/issues/9235) [<samp>(2f367)</samp>](https://github.com/vitest-dev/vitest/commit/2f367fad3)
  - Add filters to `createSpecification`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9336](https://github.com/vitest-dev/vitest/issues/9336) [<samp>(c8e6c)</samp>](https://github.com/vitest-dev/vitest/commit/c8e6c7fbf)
  - Expose `runTestFiles` as alternative to `runTestSpecifications`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9443](https://github.com/vitest-dev/vitest/issues/9443) [<samp>(43d76)</samp>](https://github.com/vitest-dev/vitest/commit/43d761821)
  - Add `allowWrite` and `allowExec` options to `api`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9350](https://github.com/vitest-dev/vitest/issues/9350) [<samp>(20e00)</samp>](https://github.com/vitest-dev/vitest/commit/20e00ef78)
  - Allow passing down test cases to `toTestSpecification`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9627](https://github.com/vitest-dev/vitest/issues/9627) [<samp>(6f17d)</samp>](https://github.com/vitest-dev/vitest/commit/6f17d5ddf)
- **browser**:
  - Add `userEvent.wheel` API  -  by [@macarie](https://github.com/macarie) in [#9188](https://github.com/vitest-dev/vitest/issues/9188) [<samp>(66080)</samp>](https://github.com/vitest-dev/vitest/commit/660801979)
  - Add `filterNode` option to prettyDOM for filtering browser assertion error output  -  by [@Copilot](https://github.com/Copilot), **sheremet-va** and [@sheremet-va](https://github.com/sheremet-va) in [#9475](https://github.com/vitest-dev/vitest/issues/9475) [<samp>(d3220)</samp>](https://github.com/vitest-dev/vitest/commit/d3220fcd8)
  - Support playwright persistent context  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 4.6** and [@sheremet-va](https://github.com/sheremet-va) in [#9229](https://github.com/vitest-dev/vitest/issues/9229) [<samp>(f865d)</samp>](https://github.com/vitest-dev/vitest/commit/f865d2ba4)
  - Added `detailsPanelPosition` option and button  -  by [@shairez](https://github.com/shairez) in [#9525](https://github.com/vitest-dev/vitest/issues/9525) [<samp>(c8a31)</samp>](https://github.com/vitest-dev/vitest/commit/c8a31147c)
  - Use BlazeDiff instead of pixelmatch  -  by [@macarie](https://github.com/macarie) in [#9514](https://github.com/vitest-dev/vitest/issues/9514) [<samp>(30936)</samp>](https://github.com/vitest-dev/vitest/commit/309362089)
  - Add `findElement` and enable strict mode in webdriverio and preview  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9677](https://github.com/vitest-dev/vitest/issues/9677) [<samp>(c3f37)</samp>](https://github.com/vitest-dev/vitest/commit/c3f37721c)
- **cli**:
  - Add [@bomb](https://github.com/bomb).sh/tab completions  -  by [@AmirSa12](https://github.com/AmirSa12) and [@sheremet-va](https://github.com/sheremet-va) in [#8639](https://github.com/vitest-dev/vitest/issues/8639) [<samp>(200f3)</samp>](https://github.com/vitest-dev/vitest/commit/200f31704)
- **coverage**:
  - Support `ignore start/stop` ignore hints  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#9204](https://github.com/vitest-dev/vitest/issues/9204) [<samp>(e59c9)</samp>](https://github.com/vitest-dev/vitest/commit/e59c94ba6)
  - Add `coverage.changed` option to report only changed files  -  by [@kykim00](https://github.com/kykim00) and [@AriPerkkio](https://github.com/AriPerkkio) in [#9521](https://github.com/vitest-dev/vitest/issues/9521) [<samp>(1d939)</samp>](https://github.com/vitest-dev/vitest/commit/1d9392c67)
- **experimental**:
  - Add `onModuleRunner` hook to `worker.init`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9286](https://github.com/vitest-dev/vitest/issues/9286) [<samp>(e977f)</samp>](https://github.com/vitest-dev/vitest/commit/e977f3deb)
  - Option to disable the module runner  -  by [@sheremet-va](https://github.com/sheremet-va) and [@AriPerkkio](https://github.com/AriPerkkio) in [#9210](https://github.com/vitest-dev/vitest/issues/9210) [<samp>(9be61)</samp>](https://github.com/vitest-dev/vitest/commit/9be6121ee)
  - Add `importDurations: { limit, print }` options  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 4.6** and [@sheremet-va](https://github.com/sheremet-va) in [#9401](https://github.com/vitest-dev/vitest/issues/9401) [<samp>(7e10f)</samp>](https://github.com/vitest-dev/vitest/commit/7e10fb356)
  - Add print and fail thresholds for `importDurations`  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#9533](https://github.com/vitest-dev/vitest/issues/9533) [<samp>(3f7a5)</samp>](https://github.com/vitest-dev/vitest/commit/3f7a5f8f8)
- **fixtures**:
  - Pass down file context to `beforeAll`/`afterAll`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9572](https://github.com/vitest-dev/vitest/issues/9572) [<samp>(c8339)</samp>](https://github.com/vitest-dev/vitest/commit/c83395f2c)
- **reporters**:
  - Add `agent` reporter to reduce ai agent token usage  -  by [@cpojer](https://github.com/cpojer) in [#9779](https://github.com/vitest-dev/vitest/issues/9779) [<samp>(3e9e0)</samp>](https://github.com/vitest-dev/vitest/commit/3e9e096a2)
- **runner**:
  - Enhance `retry` options  -  by [@MazenSamehR](https://github.com/MazenSamehR), **Matan Shavit**, [@AriPerkkio](https://github.com/AriPerkkio) and [@sheremet-va](https://github.com/sheremet-va) in [#9370](https://github.com/vitest-dev/vitest/issues/9370) [<samp>(9e4cf)</samp>](https://github.com/vitest-dev/vitest/commit/9e4cfd295)
- **ui**:
  - Allow run individual test/suites  -  by [@userquin](https://github.com/userquin) in [#9465](https://github.com/vitest-dev/vitest/issues/9465) [<samp>(73b10)</samp>](https://github.com/vitest-dev/vitest/commit/73b10f1b9)
  - Add project filter/sort support  -  by [@userquin](https://github.com/userquin) in [#8689](https://github.com/vitest-dev/vitest/issues/8689) [<samp>(0c7ea)</samp>](https://github.com/vitest-dev/vitest/commit/0c7eaac16)
  - Add duration sorting to explorer  -  by [@julianhahn](https://github.com/julianhahn) and [@cursoragent](https://github.com/cursoragent) in [#9603](https://github.com/vitest-dev/vitest/issues/9603) [<samp>(209b1)</samp>](https://github.com/vitest-dev/vitest/commit/209b1b0e1)
  - Implement filter for slow tests  -  by [@DerYeger](https://github.com/DerYeger) and [@userquin](https://github.com/userquin) in [#9705](https://github.com/vitest-dev/vitest/issues/9705) [<samp>(8880c)</samp>](https://github.com/vitest-dev/vitest/commit/8880c907a)
- **vitest**:
  - Add run summary in GitHub Actions Reporter  -  by [@macarie](https://github.com/macarie) and **jhnance** in [#9579](https://github.com/vitest-dev/vitest/issues/9579) [<samp>(96bfc)</samp>](https://github.com/vitest-dev/vitest/commit/96bfc8345)

#####    🐞 Bug Fixes

- Deprecate several vitest/\* entry points  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9347](https://github.com/vitest-dev/vitest/issues/9347) [<samp>(fd459)</samp>](https://github.com/vitest-dev/vitest/commit/fd45928be)
- Use `meta.url` in `createRequire`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9441](https://github.com/vitest-dev/vitest/issues/9441) [<samp>(e3422)</samp>](https://github.com/vitest-dev/vitest/commit/e34225563)
- Preact browser mode init example of render function not async  -  by [@WuMingDao](https://github.com/WuMingDao) in [#9375](https://github.com/vitest-dev/vitest/issues/9375) [<samp>(2bea5)</samp>](https://github.com/vitest-dev/vitest/commit/2bea549c7)
- Deprecate unused types in matcher context  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9449](https://github.com/vitest-dev/vitest/issues/9449) [<samp>(20f87)</samp>](https://github.com/vitest-dev/vitest/commit/20f8753a2)
- Handle `external/noExternal` during `configEnvironment` hook  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#9508](https://github.com/vitest-dev/vitest/issues/9508) [<samp>(59ea2)</samp>](https://github.com/vitest-dev/vitest/commit/59ea27c1c)
- Replace default ssr environment runner with Vitest server module runner  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#9506](https://github.com/vitest-dev/vitest/issues/9506) [<samp>(cd5db)</samp>](https://github.com/vitest-dev/vitest/commit/cd5db660c)
- Propagate experimental CLI options to child projects  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#9531](https://github.com/vitest-dev/vitest/issues/9531) [<samp>(b624f)</samp>](https://github.com/vitest-dev/vitest/commit/b624fae53)
- Show a warning when `browser.isolate` is used  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9410](https://github.com/vitest-dev/vitest/issues/9410) [<samp>(3d48e)</samp>](https://github.com/vitest-dev/vitest/commit/3d48ebcb9)
- Fix `vi.mock({ spy: true })` node v8 coverage  -  by [@hi-ogawa](https://github.com/hi-ogawa), **hi-ogawa** and **Claude Opus 4.6** in [#9541](https://github.com/vitest-dev/vitest/issues/9541) [<samp>(687b6)</samp>](https://github.com/vitest-dev/vitest/commit/687b633c1)
- Don't show internal ssr handler in errors  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9547](https://github.com/vitest-dev/vitest/issues/9547) [<samp>(76c43)</samp>](https://github.com/vitest-dev/vitest/commit/76c4397b5)
- Close vitest if it failed to start  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9573](https://github.com/vitest-dev/vitest/issues/9573) [<samp>(728ba)</samp>](https://github.com/vitest-dev/vitest/commit/728ba617f)
- Fix ssr environment runner in project  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9584](https://github.com/vitest-dev/vitest/issues/9584) [<samp>(09006)</samp>](https://github.com/vitest-dev/vitest/commit/090064f97)
- Trim trailing white spaces in code block  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9591](https://github.com/vitest-dev/vitest/issues/9591) [<samp>(f78be)</samp>](https://github.com/vitest-dev/vitest/commit/f78bea992)
- Support inline snapshot inside test.for/each  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9590](https://github.com/vitest-dev/vitest/issues/9590) [<samp>(615fd)</samp>](https://github.com/vitest-dev/vitest/commit/615fd521e)
- Apply source maps for external module stack trace  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9152](https://github.com/vitest-dev/vitest/issues/9152) [<samp>(79e20)</samp>](https://github.com/vitest-dev/vitest/commit/79e20d5a3)
- Remove the `.name` from statically collected test  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9596](https://github.com/vitest-dev/vitest/issues/9596) [<samp>(b66ff)</samp>](https://github.com/vitest-dev/vitest/commit/b66ff691a)
- Don't suppress warnings on pnp  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9602](https://github.com/vitest-dev/vitest/issues/9602) [<samp>(89cbd)</samp>](https://github.com/vitest-dev/vitest/commit/89cbdaea3)
- Support snapshot with `expect.soft`  -  by [@iumehara](https://github.com/iumehara), [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#9231](https://github.com/vitest-dev/vitest/issues/9231) [<samp>(3eb2c)</samp>](https://github.com/vitest-dev/vitest/commit/3eb2cd541)
- Log seed when only `sequence.shuffle.tests` is enabled  -  by [@kaigritun](https://github.com/kaigritun), **Kai Gritun** and [@sheremet-va](https://github.com/sheremet-va) in [#9576](https://github.com/vitest-dev/vitest/issues/9576) [<samp>(8182b)</samp>](https://github.com/vitest-dev/vitest/commit/8182b77ad)
- Externalize `expect/src/utils` from `vitest`  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9616](https://github.com/vitest-dev/vitest/issues/9616) [<samp>(48739)</samp>](https://github.com/vitest-dev/vitest/commit/487398422)
- Ignore test.override during static collection  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9620](https://github.com/vitest-dev/vitest/issues/9620) [<samp>(09174)</samp>](https://github.com/vitest-dev/vitest/commit/0917470ce)
- Increase stacktrace limit for `--detect-async-leaks`  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#9638](https://github.com/vitest-dev/vitest/issues/9638) [<samp>(9fd4c)</samp>](https://github.com/vitest-dev/vitest/commit/9fd4ce533)
- Hanging-reporter link in cli  -  by [@flx-sta](https://github.com/flx-sta) in [#9649](https://github.com/vitest-dev/vitest/issues/9649) [<samp>(7c103)</samp>](https://github.com/vitest-dev/vitest/commit/7c103055c)
- Fix teardown timeout of `aroundEach/All` when inner `aroundEach/All` throws  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9657](https://github.com/vitest-dev/vitest/issues/9657) [<samp>(4ec6c)</samp>](https://github.com/vitest-dev/vitest/commit/4ec6cb305)
- Fix ui mode / html reporter and coverage integration  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#9626](https://github.com/vitest-dev/vitest/issues/9626) [<samp>(86fad)</samp>](https://github.com/vitest-dev/vitest/commit/86fad4b42)
- Don't continue when `aroundEach/All` setup timed out  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9670](https://github.com/vitest-dev/vitest/issues/9670) [<samp>(bb013)</samp>](https://github.com/vitest-dev/vitest/commit/bb013d54b)
- Align `VitestRunnerConfig` optional fields with `SerializedConfig`  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9661](https://github.com/vitest-dev/vitest/issues/9661) [<samp>(79520)</samp>](https://github.com/vitest-dev/vitest/commit/79520d82d)
- Handle Symbol values in format utility  -  by [@nami8824](https://github.com/nami8824) in [#9658](https://github.com/vitest-dev/vitest/issues/9658) [<samp>(0583f)</samp>](https://github.com/vitest-dev/vitest/commit/0583f067e)
- Deprecate `toBe*` spy assertions in favor of `toHaveBeen*` (and `toThrowError`)  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9665](https://github.com/vitest-dev/vitest/issues/9665) [<samp>(4d390)</samp>](https://github.com/vitest-dev/vitest/commit/4d390dfe9)
- Don't propagate nested `aroundEach/All` errors but aggregate them on runner  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9673](https://github.com/vitest-dev/vitest/issues/9673) [<samp>(b6365)</samp>](https://github.com/vitest-dev/vitest/commit/b63653f5a)
- Show a better error if there is a pending dynamic import  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9676](https://github.com/vitest-dev/vitest/issues/9676) [<samp>(7ef5c)</samp>](https://github.com/vitest-dev/vitest/commit/7ef5cf4b7)
- Preserve stack trace of `resolves/rejects` chained assertion error  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9679](https://github.com/vitest-dev/vitest/issues/9679) [<samp>(c6151)</samp>](https://github.com/vitest-dev/vitest/commit/c61511d4a)
- Handle module-sync condition in vmThreads/vmForks require  -  by [@lesleh](https://github.com/lesleh) in [#9650](https://github.com/vitest-dev/vitest/issues/9650) and [#9651](https://github.com/vitest-dev/vitest/issues/9651) [<samp>(bb203)</samp>](https://github.com/vitest-dev/vitest/commit/bb20389f4)
- Hooks should respect `maxConcurrency`  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9653](https://github.com/vitest-dev/vitest/issues/9653) [<samp>(16d13)</samp>](https://github.com/vitest-dev/vitest/commit/16d13d981)
- Recursively autospy module object  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9687](https://github.com/vitest-dev/vitest/issues/9687) [<samp>(695a8)</samp>](https://github.com/vitest-dev/vitest/commit/695a86b41)
- Remove trailing spaces from diff error log  -  by [@hi-ogawa](https://github.com/hi-ogawa) and [@sheremet-va](https://github.com/sheremet-va) in [#9680](https://github.com/vitest-dev/vitest/issues/9680) [<samp>(395d1)</samp>](https://github.com/vitest-dev/vitest/commit/395d1a29e)
- Respect project `resolve.conditions` for externals  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9717](https://github.com/vitest-dev/vitest/issues/9717) [<samp>(1d498)</samp>](https://github.com/vitest-dev/vitest/commit/1d4987498)
- Use object for WeakMap instead of a symbol to support webcontainers  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9731](https://github.com/vitest-dev/vitest/issues/9731) [<samp>(c5225)</samp>](https://github.com/vitest-dev/vitest/commit/c52259330)
- Fix re-mocking virtual module  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9748](https://github.com/vitest-dev/vitest/issues/9748) [<samp>(3cbbb)</samp>](https://github.com/vitest-dev/vitest/commit/3cbbb17f1)
- Cancelling should stop current test immediately  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#9729](https://github.com/vitest-dev/vitest/issues/9729) [<samp>(0cb2f)</samp>](https://github.com/vitest-dev/vitest/commit/0cb2f7239)
- Make `mockObject` change backwards compatible  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9744](https://github.com/vitest-dev/vitest/issues/9744) [<samp>(84c69)</samp>](https://github.com/vitest-dev/vitest/commit/84c69497f)
- Fix `URL.name` on jsdom  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9767](https://github.com/vitest-dev/vitest/issues/9767) [<samp>(031f3)</samp>](https://github.com/vitest-dev/vitest/commit/031f3a374)
- Save and restore module graph in blob reporter  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9740](https://github.com/vitest-dev/vitest/issues/9740) [<samp>(84355)</samp>](https://github.com/vitest-dev/vitest/commit/843554bf0)
- Don't silence reporter errors from test runtime events handler in normal run and --merge-reports  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9727](https://github.com/vitest-dev/vitest/issues/9727) [<samp>(4072d)</samp>](https://github.com/vitest-dev/vitest/commit/4072d0132)
- Fix `vi.importActual()` for virtual modules  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#9772](https://github.com/vitest-dev/vitest/issues/9772) [<samp>(1e89e)</samp>](https://github.com/vitest-dev/vitest/commit/1e89ec020)
- Throw `FixtureAccessError` if suite hook accesses undefined fixture  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9786](https://github.com/vitest-dev/vitest/issues/9786) [<samp>(fc2ce)</samp>](https://github.com/vitest-dev/vitest/commit/fc2cea2b7)
- Allow hyphens in project config file name pattern  -  by [@Koutaro-Hanabusa](https://github.com/Koutaro-Hanabusa) and [@hi-ogawa](https://github.com/hi-ogawa) in [#9760](https://github.com/vitest-dev/vitest/issues/9760) [<samp>(33e96)</samp>](https://github.com/vitest-dev/vitest/commit/33e96311a)
- Manual and redirect mock shouldn't `load` or `transform` original module  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#9774](https://github.com/vitest-dev/vitest/issues/9774) [<samp>(a8216)</samp>](https://github.com/vitest-dev/vitest/commit/a8216b001)
- `hideSkippedTests` should not hide `test.todo`  -  by [@oilater](https://github.com/oilater) in [#9562](https://github.com/vitest-dev/vitest/issues/9562) and [#9781](https://github.com/vitest-dev/vitest/issues/9781) [<samp>(8181e)</samp>](https://github.com/vitest-dev/vitest/commit/8181e06e7)
- Allow catch/finally for async assertion  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9827](https://github.com/vitest-dev/vitest/issues/9827) [<samp>(031f0)</samp>](https://github.com/vitest-dev/vitest/commit/031f02a89)
- Resolve fixture overrides from test's suite in `beforeEach` hooks  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#9826](https://github.com/vitest-dev/vitest/issues/9826) [<samp>(99e52)</samp>](https://github.com/vitest-dev/vitest/commit/99e52fe58)
- Use isAgent check, not just TTY, for watch mode  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9841](https://github.com/vitest-dev/vitest/issues/9841) [<samp>(c3cac)</samp>](https://github.com/vitest-dev/vitest/commit/c3cac1c1b)
- Use `performance.now` to measure test timeout duration  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#9795](https://github.com/vitest-dev/vitest/issues/9795) [<samp>(f48a6)</samp>](https://github.com/vitest-dev/vitest/commit/f48a60114)
- Correctly identify concurrent test during static analysis  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9846](https://github.com/vitest-dev/vitest/issues/9846) [<samp>(1de0a)</samp>](https://github.com/vitest-dev/vitest/commit/1de0aa22d)
- **browser**:
  - Avoid updating screenshots when `toMatchScreenshot` passes  -  by [@macarie](https://github.com/macarie) in [#9289](https://github.com/vitest-dev/vitest/issues/9289) [<samp>(46aab)</samp>](https://github.com/vitest-dev/vitest/commit/46aabaa44)
  - Hide injected data-testid attributes  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9503](https://github.com/vitest-dev/vitest/issues/9503) [<samp>(c8d2c)</samp>](https://github.com/vitest-dev/vitest/commit/c8d2c411c)
  - Throw an error if iframe was reloaded  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9516](https://github.com/vitest-dev/vitest/issues/9516) [<samp>(73a81)</samp>](https://github.com/vitest-dev/vitest/commit/73a81f880)
  - Encode projectName in browser client URL  -  by [@dkkim0122](https://github.com/dkkim0122) in [#9523](https://github.com/vitest-dev/vitest/issues/9523) [<samp>(5b164)</samp>](https://github.com/vitest-dev/vitest/commit/5b16483c3)
  - Don't take failure screenshot if tests have artifacts created by `toMatchScreenshot`  -  by [@macarie](https://github.com/macarie) in [#9552](https://github.com/vitest-dev/vitest/issues/9552) [<samp>(83ca0)</samp>](https://github.com/vitest-dev/vitest/commit/83ca02547)
  - Remove `--remote-debugging-address` from chrome args  -  by [@hi-ogawa](https://github.com/hi-ogawa) and [@AriPerkkio](https://github.com/AriPerkkio) in [#9712](https://github.com/vitest-dev/vitest/issues/9712) [<samp>(f09bb)</samp>](https://github.com/vitest-dev/vitest/commit/f09bb5c32)
  - Make sure userEvent actions support `ensureAwaited`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9732](https://github.com/vitest-dev/vitest/issues/9732) [<samp>(97685)</samp>](https://github.com/vitest-dev/vitest/commit/9768517b8)
  - Types of `getCDPSession` and `cdp()`  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#9716](https://github.com/vitest-dev/vitest/issues/9716) [<samp>(689a2)</samp>](https://github.com/vitest-dev/vitest/commit/689a22a1b)
  - Skip esbuild.legalComments when using rolldown-vite  -  by [@Copilot](https://github.com/Copilot), **hi-ogawa** and [@hi-ogawa](https://github.com/hi-ogawa) in [#9803](https://github.com/vitest-dev/vitest/issues/9803) [<samp>(3505f)</samp>](https://github.com/vitest-dev/vitest/commit/3505fa5a3)
- **chai**:
  - Don't allow `deepEqual` in the config because it's not serializable  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9666](https://github.com/vitest-dev/vitest/issues/9666) [<samp>(9ee99)</samp>](https://github.com/vitest-dev/vitest/commit/9ee999d73)
- **coverage**:
  - Infer transform mode for uncovered files  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#9435](https://github.com/vitest-dev/vitest/issues/9435) [<samp>(f3967)</samp>](https://github.com/vitest-dev/vitest/commit/f396792d6)
  - `thresholds.autoUpdate` to preserve ending whitespace  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#9436](https://github.com/vitest-dev/vitest/issues/9436) [<samp>(7e534)</samp>](https://github.com/vitest-dev/vitest/commit/7e534a0b6)
- **deps**:
  - Update all non-major dependencies  -  by [@hi-ogawa](https://github.com/hi-ogawa) in [#9192](https://github.com/vitest-dev/vitest/issues/9192) [<samp>(90c30)</samp>](https://github.com/vitest-dev/vitest/commit/90c302f3b)
  - Update all non-major dependencies  -  in [#9485](https://github.com/vitest-dev/vitest/issues/9485) [<samp>(c0118)</samp>](https://github.com/vitest-dev/vitest/commit/c01186022)
  - Update all non-major dependencies  -  in [#9567](https://github.com/vitest-dev/vitest/issues/9567) [<samp>(13c9e)</samp>](https://github.com/vitest-dev/vitest/commit/13c9e022b)
- **docs**:
  - Fix old `/config/#option` hash links causing hydration errors  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 4.6** and [@sheremet-va](https://github.com/sheremet-va) in [#9610](https://github.com/vitest-dev/vitest/issues/9610) [<samp>(a603c)</samp>](https://github.com/vitest-dev/vitest/commit/a603c3a30)
- **expect**:
  - `toMatchObject(Map/Set)` should expect `Map/Set` on left hand side  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#9532](https://github.com/vitest-dev/vitest/issues/9532) [<samp>(381da)</samp>](https://github.com/vitest-dev/vitest/commit/381da4a9d)
  - Fix objectContaining with proxy  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#9554](https://github.com/vitest-dev/vitest/issues/9554) [<samp>(7ce34)</samp>](https://github.com/vitest-dev/vitest/commit/7ce3417b1)
  - Support arbitrary value equality for `toThrow` and make Error detection robust  -  by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#9570](https://github.com/vitest-dev/vitest/issues/9570) [<samp>(de215)</samp>](https://github.com/vitest-dev/vitest/commit/de215c19c)
- **mock**:
  - Inject helpers after hashbang if present  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9545](https://github.com/vitest-dev/vitest/issues/9545) [<samp>(65432)</samp>](https://github.com/vitest-dev/vitest/commit/65432a74b)
- **mocker**:
  - Update vite's peer dependency range  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9808](https://github.com/vitest-dev/vitest/issues/9808) [<samp>(36f9a)</samp>](https://github.com/vitest-dev/vitest/commit/36f9a81a2)
- **reporter**:
  - `dot` reporter leaves pending tests  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#9684](https://github.com/vitest-dev/vitest/issues/9684) [<samp>(4d793)</samp>](https://github.com/vitest-dev/vitest/commit/4d7938a56)
- **runner**:
  - Mark repeated tests as finished on last run  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#9707](https://github.com/vitest-dev/vitest/issues/9707) [<samp>(cc735)</samp>](https://github.com/vitest-dev/vitest/commit/cc735970a)
- **spy**:
  - Support deep partial in vi.mocked  -  by [@j2h30728](https://github.com/j2h30728) in [#8152](https://github.com/vitest-dev/vitest/issues/8152) and [#9493](https://github.com/vitest-dev/vitest/issues/9493) [<samp>(71cb5)</samp>](https://github.com/vitest-dev/vitest/commit/71cb51ffc)
  - Fallback to object accessor if descriptor's value is `undefined`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9511](https://github.com/vitest-dev/vitest/issues/9511) [<samp>(6f181)</samp>](https://github.com/vitest-dev/vitest/commit/6f18103fa)
  - Throw correct errors when shorthand methods are used on a class  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9513](https://github.com/vitest-dev/vitest/issues/9513) [<samp>(5d0fd)</samp>](https://github.com/vitest-dev/vitest/commit/5d0fd3b62)
- **types**:
  - `bench.reporters` no longer gives type errors when passing file name string paths  -  by [@Bertie690](https://github.com/Bertie690) in [#9695](https://github.com/vitest-dev/vitest/issues/9695) [<samp>(093c8)</samp>](https://github.com/vitest-dev/vitest/commit/093c8f6b5)
- **ui**:
  - Process artifact attachments when generating HTML reporter  -  by [@macarie](https://github.com/macarie) in [#9472](https://github.com/vitest-dev/vitest/issues/9472) [<samp>(96eb9)</samp>](https://github.com/vitest-dev/vitest/commit/96eb92826)
  - Don't fail if --ui and --root are specified together  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9536](https://github.com/vitest-dev/vitest/issues/9536) [<samp>(d9305)</samp>](https://github.com/vitest-dev/vitest/commit/d93055fc7)

#####    🏎 Performance

- **pretty-format**: Combine DOMElement plugins  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9581](https://github.com/vitest-dev/vitest/issues/9581) [<samp>(da85a)</samp>](https://github.com/vitest-dev/vitest/commit/da85a3267)

#####     [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.17...v4.1.0)
##### [v4.0.18](https://github.com/vitest-dev/vitest/releases/tag/v4.0.18)

#####    🚀 Experimental Features

- **experimental**: Add `onModuleRunner` hook to `worker.init`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9286](https://github.com/vitest-dev/vitest/issues/9286) [<samp>(ea837)</samp>](https://github.com/vitest-dev/vitest/commit/ea837de7d)

#####    🐞 Bug Fixes

- Use `meta.url` in `createRequire`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9441](https://github.com/vitest-dev/vitest/issues/9441) [<samp>(e0572)</samp>](https://github.com/vitest-dev/vitest/commit/e057281ca)
- **browser**: Hide injected data-testid attributes  -  by [@sheremet-va](https://github.com/sheremet-va) in [#9503](https://github.com/vitest-dev/vitest/issues/9503) [<samp>(f8989)</samp>](https://github.com/vitest-dev/vitest/commit/f89899cd8)
- **ui**: Process artifact attachments when generating HTML reporter  -  by [@macarie](https://github.com/macarie) in [#9472](https://github.com/vitest-dev/vitest/issues/9472) [<samp>(22543)</samp>](https://github.com/vitest-dev/vitest/commit/225435647)

#####     [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.17...v4.0.18)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants