Repository navigation
fix(vitest): remove root temp dir on close - #11248
Conversation
✅ Deploy Preview for vitest-dev ready!Built without sensitive environment variables
To edit notification comments on pull requests, go to your Netlify project configuration. |
15cd14d to
95e9672
Compare
|
hey im10furry sorry for the late reply recursive true is needed here because the root tmp dir holds nested per environment subdirs with the tmp module copies the cherry picked test fix is dropped now |
|
status update after the force push |
|
@im10furry Friendly ping — both of your points are addressed (recursive kept with reason, cherry-pick dropped, single clean commit) and checks are green. Could you take another look when convenient? Happy to adjust further. |
|
@im10furry Friendly ping - both points addressed (recursive kept with reason, cherry-pick dropped, single clean commit) and checks are green. Could you please take another look when convenient? Thanks! |
…ep (#3671) Owner decisions recorded on #3675: - The marker is widened: a folder qualifies when its direct children are a non-empty subset of {ssr, client}, every one a real directory whose first entries look like Vitest's files. Any other child, or a marker name that is a file or link, disqualifies it. - STALE_AFTER_MS is 24 hours (was 2). - No upstream report is filed; it exists as vitest-dev/vitest#11224, with a fix in vitest-dev/vitest#11248. The diagnosis is corrected: the root _tmpDir is never removed, so every run leaks one. Review fixes: - A qualifying folder is claimed by renaming it to <id>.vitest-sweep-trash before deletion. Trash left by an interrupted delete is swept first. Off Windows, every folder touched must be owned by the current user. - The per-run cap counts attempts, failures included. - The sweep runs in a detached, low-priority child process (this module, run by Node's type stripping). Teardown does not wait for it. The heartbeat stays in-process. - setup() never throws. keep is filtered to strings, a non-iterable projects list is tolerated, and FAKETIME skips the sweep. - ownTempDirs moved into the module, and is unit-tested along with setup, teardown, the heartbeat stop and the real child process. - Test clock is away from the frozen instant. The explanation lives in the module docstring only. The census runtime-exports test gets its own measured timeout. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jqi6rExDNVxi1mFdkRJ2S2
|
LGTM, but could you run a formatter please? |
e3dc4e3 to
e1bb0a6
Compare
|
@sheremet-va done |
|
one note on the remaining red check |
vitest 5.0.2 creates /tmp/<21-char id>/ssr for each run and never removes it (the core Vitest._tmpDir; only the project dir is cleared on close). Each run left about 11 MB of transformed modules. 7,131 such dirs filled 78 GB on the shared box between 09-30 and 10-02. 5.0.3 removes the dir on close (vitest-dev/vitest#11248). Checked: tests/run/pricing.test.ts under a private TMPDIR leaves one <id> dir on 5.0.2 and none on 5.0.3. format:check, typecheck, knip, tui vitest (90 passed) pass. observer vitest fails the same 5 artifact-smoke tests on main and here, because they need a built dist/. Not checked locally: the full root suite; CI runs it. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [vitest](https://vitest.dev) ([source](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`5.0.2` → `5.0.3`](https://renovatebot.com/diffs/npm/vitest/5.0.2/5.0.3) |  |  | --- ### Release Notes <details> <summary>vitest-dev/vitest (vitest)</summary> ### [`v5.0.3`](https://github.com/vitest-dev/vitest/releases/tag/v5.0.3) [Compare Source](vitest-dev/vitest@v5.0.2...v5.0.3) ##### 🐞 Bug Fixes - Isolate `result.status` between `repeats` runs - by [@​hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Codex (GPT-6)** in [#​11218](vitest-dev/vitest#11218) [<samp>(5dbeb)</samp>](vitest-dev/vitest@5dbebe9e3) - Don't print an interceptor warning in browser mode - by [@​sheremet-va](https://github.com/sheremet-va) in [#​11377](vitest-dev/vitest#11377) [<samp>(15cc0)</samp>](vitest-dev/vitest@15cc006aa) - Don't retry when `test.fails` expectedly failed - by [@​hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Codex (GPT-6)** in [#​11219](vitest-dev/vitest#11219) [<samp>(b2458)</samp>](vitest-dev/vitest@b24585f08) - Scope cache key generators to projects - by [@​ecoyoung](https://github.com/ecoyoung) in [#​11281](vitest-dev/vitest#11281) and [#​11301](vitest-dev/vitest#11301) [<samp>(92ba7)</samp>](vitest-dev/vitest@92ba7fc1d) - **browser**: - Delay server `listen` until tests start running - by [@​sheremet-va](https://github.com/sheremet-va) in [#​11366](vitest-dev/vitest#11366) [<samp>(7d8ed)</samp>](vitest-dev/vitest@7d8ed3e9b) - Check mock path boundaries - by [@​saryn17](https://github.com/saryn17), **Ryosei Sato** and [@​sheremet-va](https://github.com/sheremet-va) in [#​11361](vitest-dev/vitest#11361) and [#​11362](vitest-dev/vitest#11362) [<samp>(1c388)</samp>](vitest-dev/vitest@1c3888bce) - Keep config of browser-consumed environments - by [@​kasperpeulen](https://github.com/kasperpeulen) and **Claude** in [#​11378](vitest-dev/vitest#11378) [<samp>(aafc0)</samp>](vitest-dev/vitest@aafc0996f) - Ignore page crash while cancelling - by [@​sheremet-va](https://github.com/sheremet-va) in [#​11386](vitest-dev/vitest#11386) [<samp>(7c367)</samp>](vitest-dev/vitest@7c36748fa) - `toMatchScreenshot` uses wrong reference on retried tests - by [@​macarie](https://github.com/macarie) in [#​11393](vitest-dev/vitest#11393) [<samp>(c22ab)</samp>](vitest-dev/vitest@c22aba992) - **cache**: - Revalidate imports of cached modules - by [@​sheremet-va](https://github.com/sheremet-va) in [#​11381](vitest-dev/vitest#11381) [<samp>(38f98)</samp>](vitest-dev/vitest@38f98855f) - **deps**: - Pin `why-is-node-running` to `3.2.1` to avoid users running into `ERR_PNPM_TRUST_DOWNGRADE` - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​11403](vitest-dev/vitest#11403) [<samp>(f6c9a)</samp>](vitest-dev/vitest@f6c9a4977) - **expect**: - Pass current equality testers to `expect.extend` asymmetric matchers - by [@​hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude** in [#​11401](vitest-dev/vitest#11401) [<samp>(3e794)</samp>](vitest-dev/vitest@3e794a96b) - **jsdom**: - Support Blob on jsdom 30.1 - by [@​sheremet-va](https://github.com/sheremet-va) in [#​11379](vitest-dev/vitest#11379) [<samp>(6c49b)</samp>](vitest-dev/vitest@6c49b7197) - **pool**: - Preserve unique pool ids when `groupOrder` is set - by [@​mtorp](https://github.com/mtorp) in [#​11392](vitest-dev/vitest#11392) [<samp>(50312)</samp>](vitest-dev/vitest@50312ebb4) - **ui**: - Split-pane handle overlapping iframe - by [@​macarie](https://github.com/macarie) in [#​11221](vitest-dev/vitest#11221) [<samp>(f91db)</samp>](vitest-dev/vitest@f91db0dfd) - **vitest**: - Remove root temp dir on close - by [@​abhinav-phi](https://github.com/abhinav-phi) in [#​11248](vitest-dev/vitest#11248) [<samp>(7c711)</samp>](vitest-dev/vitest@7c7119cf7) - **vm**: - Do not optimize deps from index.html - by [@​ezefernandezyf](https://github.com/ezefernandezyf), **Hiroshi Ogawa** and **Codex (GPT-6)** in [#​11329](vitest-dev/vitest#11329) and [#​11360](vitest-dev/vitest#11360) [<samp>(caf28)</samp>](vitest-dev/vitest@caf2887de) - Don't reuse scripts across vite environments - by [@​MO2k4](https://github.com/MO2k4), **Martin Oehlert** and **Claude** in [#​11395](vitest-dev/vitest#11395) [<samp>(346d3)</samp>](vitest-dev/vitest@346d3896b) ##### [View changes on GitHub](vitest-dev/vitest@v5.0.2...v5.0.3) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMzIuMiIsInVwZGF0ZWRJblZlciI6IjQ0LjEzMi4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
efdd61f stopped a vitest run that CLOSED from leaving its module copies in TMPDIR, and that held: on 2026-10-02 the master's `~/.tmp` had 438 copies directories (3.2 GB), every one from 2026-09-29 between 09:00 and 21:59, none since — against about 6 GB a day before it. What it did not reach is a run that does not close: - SIGINT and SIGTERM end vitest from the logger's handler, which sets the exit code and calls `process.exit()` past `close()`. A gate that hits its timeout gets SIGTERM; an interrupted run gets SIGINT. - SIGKILL, a crash or a lost terminal run no code at all. vitest 5.0.3 (2026-09-30) fixes the closing half upstream (vitest-dev/vitest#11248, the same change as our patch) and not this one. On a one-test project, 5.0.3 left one directory after each of SIGINT, SIGTERM and SIGKILL, exactly as 5.0.0 with the patch did. vitest is now 5.0.3: the ranges are raised to ^5.0.3 in 28 package.json (peerDependencies keep ^5.0.0), the lockfile resolves 5.0.3 in all four variants, and why-is-node-running moves 2.3.0 → 3.2.1 with it. The 5.0.0 patch is gone. `patches/vitest@5.0.3.patch` carries the half upstream lacks: - the directory names the process that owns it, `vitest-<pid>-<nanoid>`, for the core and for every project; - the logger's SIGINT/SIGTERM/exit handler removes the process's own directories synchronously before it exits; - every start removes the directories whose owner is no longer alive, by vitest's own `isProcessAlive` (the test its coverage lock uses). Liveness, not age: a live run's copies are never touched however long it idles, and a name that carries no pid is never touched at all. pnpm refuses an install whose patch matches no installed version, so an upgrade has to carry this forward or drop it on purpose. Court: scripts/a-temp-dir-the-test-runner-never-removed.mjs now ends a run on the same fixture five ways, each in a fresh TMPDIR, and asks that TMPDIR be empty after: passed (and a copies directory existed during it), failed, SIGINT, SIGTERM, and SIGKILL — whose leftover must name the killed process, and which the next run in the same TMPDIR must remove. Same court: - 5.0.3 with this patch: exit 0; - 5.0.3 without it: exit 1, four findings (SIGINT, SIGTERM, an unnamed SIGKILL leftover, and the next run that kept it); - 5.0.0 with the old patch: exit 1, the same four; - the signal half planted out: exit 1, SIGINT and SIGTERM; - the start half planted out: exit 1, the run after the killed one. A real suite, packages/titan-pm (70 files, 1111 tests, 341 copies), with a TMPDIR of its own each time: ended by 5.0.0 + old patch 5.0.3 + this patch passing run 0 left 0 left SIGINT 1 0 SIGTERM 1 0 SIGKILL 1, next run keeps it 1, next run removes it apps/omnitron test/unit (340 files, 2871 tests) on 5.0.3 with this patch: 0 copies left. Its tests' own `mkdtemp` left 46 entries from 9 files in the same run — a leak of their own, not touched here. scripts/run-checks.mjs: all 14 gates pass.
##### [v5.0.3](https://github.com/vitest-dev/vitest/releases/tag/v5.0.3)
##### 🐞 Bug Fixes
- Isolate `result.status` between `repeats` runs - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Codex (GPT-6)** in [#11218](https://github.com/vitest-dev/vitest/issues/11218) [<samp>(5dbeb)</samp>](https://github.com/vitest-dev/vitest/commit/5dbebe9e3)
- Don't print an interceptor warning in browser mode - by [@sheremet-va](https://github.com/sheremet-va) in [#11377](https://github.com/vitest-dev/vitest/issues/11377) [<samp>(15cc0)</samp>](https://github.com/vitest-dev/vitest/commit/15cc006aa)
- Don't retry when `test.fails` expectedly failed - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Codex (GPT-6)** in [#11219](https://github.com/vitest-dev/vitest/issues/11219) [<samp>(b2458)</samp>](https://github.com/vitest-dev/vitest/commit/b24585f08)
- Scope cache key generators to projects - by [@ecoyoung](https://github.com/ecoyoung) in [#11281](https://github.com/vitest-dev/vitest/issues/11281) and [#11301](https://github.com/vitest-dev/vitest/issues/11301) [<samp>(92ba7)</samp>](https://github.com/vitest-dev/vitest/commit/92ba7fc1d)
- **browser**:
- Delay server `listen` until tests start running - by [@sheremet-va](https://github.com/sheremet-va) in [#11366](https://github.com/vitest-dev/vitest/issues/11366) [<samp>(7d8ed)</samp>](https://github.com/vitest-dev/vitest/commit/7d8ed3e9b)
- Check mock path boundaries - by [@saryn17](https://github.com/saryn17), **Ryosei Sato** and [@sheremet-va](https://github.com/sheremet-va) in [#11361](https://github.com/vitest-dev/vitest/issues/11361) and [#11362](https://github.com/vitest-dev/vitest/issues/11362) [<samp>(1c388)</samp>](https://github.com/vitest-dev/vitest/commit/1c3888bce)
- Keep config of browser-consumed environments - by [@kasperpeulen](https://github.com/kasperpeulen) and **Claude** in [#11378](https://github.com/vitest-dev/vitest/issues/11378) [<samp>(aafc0)</samp>](https://github.com/vitest-dev/vitest/commit/aafc0996f)
- Ignore page crash while cancelling - by [@sheremet-va](https://github.com/sheremet-va) in [#11386](https://github.com/vitest-dev/vitest/issues/11386) [<samp>(7c367)</samp>](https://github.com/vitest-dev/vitest/commit/7c36748fa)
- `toMatchScreenshot` uses wrong reference on retried tests - by [@macarie](https://github.com/macarie) in [#11393](https://github.com/vitest-dev/vitest/issues/11393) [<samp>(c22ab)</samp>](https://github.com/vitest-dev/vitest/commit/c22aba992)
- **cache**:
- Revalidate imports of cached modules - by [@sheremet-va](https://github.com/sheremet-va) in [#11381](https://github.com/vitest-dev/vitest/issues/11381) [<samp>(38f98)</samp>](https://github.com/vitest-dev/vitest/commit/38f98855f)
- **deps**:
- Pin `why-is-node-running` to `3.2.1` to avoid users running into `ERR_PNPM_TRUST_DOWNGRADE` - by [@AriPerkkio](https://github.com/AriPerkkio) in [#11403](https://github.com/vitest-dev/vitest/issues/11403) [<samp>(f6c9a)</samp>](https://github.com/vitest-dev/vitest/commit/f6c9a4977)
- **expect**:
- Pass current equality testers to `expect.extend` asymmetric matchers - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude** in [#11401](https://github.com/vitest-dev/vitest/issues/11401) [<samp>(3e794)</samp>](https://github.com/vitest-dev/vitest/commit/3e794a96b)
- **jsdom**:
- Support Blob on jsdom 30.1 - by [@sheremet-va](https://github.com/sheremet-va) in [#11379](https://github.com/vitest-dev/vitest/issues/11379) [<samp>(6c49b)</samp>](https://github.com/vitest-dev/vitest/commit/6c49b7197)
- **pool**:
- Preserve unique pool ids when `groupOrder` is set - by [@mtorp](https://github.com/mtorp) in [#11392](https://github.com/vitest-dev/vitest/issues/11392) [<samp>(50312)</samp>](https://github.com/vitest-dev/vitest/commit/50312ebb4)
- **ui**:
- Split-pane handle overlapping iframe - by [@macarie](https://github.com/macarie) in [#11221](https://github.com/vitest-dev/vitest/issues/11221) [<samp>(f91db)</samp>](https://github.com/vitest-dev/vitest/commit/f91db0dfd)
- **vitest**:
- Remove root temp dir on close - by [@abhinav-phi](https://github.com/abhinav-phi) in [#11248](https://github.com/vitest-dev/vitest/issues/11248) [<samp>(7c711)</samp>](https://github.com/vitest-dev/vitest/commit/7c7119cf7)
- **vm**:
- Do not optimize deps from index.html - by [@ezefernandezyf](https://github.com/ezefernandezyf), **Hiroshi Ogawa** and **Codex (GPT-6)** in [#11329](https://github.com/vitest-dev/vitest/issues/11329) and [#11360](https://github.com/vitest-dev/vitest/issues/11360) [<samp>(caf28)</samp>](https://github.com/vitest-dev/vitest/commit/caf2887de)
- Don't reuse scripts across vite environments - by [@MO2k4](https://github.com/MO2k4), **Martin Oehlert** and **Claude** in [#11395](https://github.com/vitest-dev/vitest/issues/11395) [<samp>(346d3)</samp>](https://github.com/vitest-dev/vitest/commit/346d3896b)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v5.0.2...v5.0.3)
##### [v5.0.2](https://github.com/vitest-dev/vitest/releases/tag/v5.0.2)
##### 🐞 Bug Fixes
- Bind `process` in case global is overwritten - by [@AriPerkkio](https://github.com/AriPerkkio) in [#11343](https://github.com/vitest-dev/vitest/issues/11343) [<samp>(0b792)</samp>](https://github.com/vitest-dev/vitest/commit/0b79231ad)
- **detect-async-leaks**:
- Ignore `process.stdio` handles - by [@AriPerkkio](https://github.com/AriPerkkio) in [#11333](https://github.com/vitest-dev/vitest/issues/11333) [<samp>(0fd6b)</samp>](https://github.com/vitest-dev/vitest/commit/0fd6b9790)
- **expect**:
- Fix `toMatchObject` with asymmetric matchers - by [@ShreeBohara](https://github.com/ShreeBohara), **Claude Opus 5**, [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Codex (GPT-5)** in [#11100](https://github.com/vitest-dev/vitest/issues/11100) [<samp>(42523)</samp>](https://github.com/vitest-dev/vitest/commit/42523289e)
- **jsdom**:
- Fix `Request` with `Blob` body on jsdom 28+ - by [@harshit-d3v](https://github.com/harshit-d3v) in [#11295](https://github.com/vitest-dev/vitest/issues/11295) [<samp>(d1c3e)</samp>](https://github.com/vitest-dev/vitest/commit/d1c3ecc93)
- **reporter**:
- `agent` to respect `--silent` - by [@Raj4478](https://github.com/Raj4478) and [@AriPerkkio](https://github.com/AriPerkkio) in [#11271](https://github.com/vitest-dev/vitest/issues/11271) [<samp>(5b95e)</samp>](https://github.com/vitest-dev/vitest/commit/5b95efb6d)
- **reporters**:
- Handle concurrent `createReport` calls - by [@7rulnik](https://github.com/7rulnik) in [#11278](https://github.com/vitest-dev/vitest/issues/11278) [<samp>(e8e55)</samp>](https://github.com/vitest-dev/vitest/commit/e8e556ff7)
- `hanging-process` to use ESM entrypoint - by [@AriPerkkio](https://github.com/AriPerkkio) in [#11316](https://github.com/vitest-dev/vitest/issues/11316) [<samp>(4e91e)</samp>](https://github.com/vitest-dev/vitest/commit/4e91e5668)
- **spy**:
- Fix stack overflow when spying `Set.prototype.add` - by [@fengmk2](https://github.com/fengmk2) in [#11299](https://github.com/vitest-dev/vitest/issues/11299) [<samp>(a0a93)</samp>](https://github.com/vitest-dev/vitest/commit/a0a939653)
- **ui**:
- Persist authentication cookie beyond current browser session - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#11066](https://github.com/vitest-dev/vitest/issues/11066) [<samp>(f8819)</samp>](https://github.com/vitest-dev/vitest/commit/f88195e16)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v5.0.1...v5.0.2)
##### [v5.0.1](https://github.com/vitest-dev/vitest/releases/tag/v5.0.1)
##### 🚀 Features
- **ui**:
- Move trace attempts selector to viewer header - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Codex** in [#11189](https://github.com/vitest-dev/vitest/issues/11189) [<samp>(5dc4b)</samp>](https://github.com/vitest-dev/vitest/commit/5dc4b5c92)
- Add focused trace view layout mode - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa**, **OpenCode (gpt-5.6-sol)** and **Codex** in [#11190](https://github.com/vitest-dev/vitest/issues/11190) [<samp>(376dc)</samp>](https://github.com/vitest-dev/vitest/commit/376dc3bc1)
##### 🐞 Bug Fixes
- Exit 1 when vitest list fails collection - by [@hamed-bavar](https://github.com/hamed-bavar) in [#11145](https://github.com/vitest-dev/vitest/issues/11145) and [#11146](https://github.com/vitest-dev/vitest/issues/11146) [<samp>(6108b)</samp>](https://github.com/vitest-dev/vitest/commit/6108b8197)
- Keep parse error details in static collection - by [@hamed-bavar](https://github.com/hamed-bavar) in [#11150](https://github.com/vitest-dev/vitest/issues/11150) and [#11151](https://github.com/vitest-dev/vitest/issues/11151) [<samp>(7c818)</samp>](https://github.com/vitest-dev/vitest/commit/7c818153a)
- Avoid recursive prototype in automocking - by [@sheremet-va](https://github.com/sheremet-va) in [#11195](https://github.com/vitest-dev/vitest/issues/11195) [<samp>(99fc5)</samp>](https://github.com/vitest-dev/vitest/commit/99fc52591)
- Prevent false Vitest import resolution - by [@sheremet-va](https://github.com/sheremet-va) in [#11196](https://github.com/vitest-dev/vitest/issues/11196) [<samp>(b426c)</samp>](https://github.com/vitest-dev/vitest/commit/b426c1976)
- Keep metadata file when clearing the cache - by [@sheremet-va](https://github.com/sheremet-va) in [#11199](https://github.com/vitest-dev/vitest/issues/11199) [<samp>(73614)</samp>](https://github.com/vitest-dev/vitest/commit/73614654a)
- Correct typos in error message and comments - by [@shinji00222](https://github.com/shinji00222) and **Shinji** in [#11187](https://github.com/vitest-dev/vitest/issues/11187) [<samp>(115c3)</samp>](https://github.com/vitest-dev/vitest/commit/115c3f6d2)
- Resolve ResolvedConfig exactOptionalPropertyTypes errors - by [@LukeAbby](https://github.com/LukeAbby) in [#11175](https://github.com/vitest-dev/vitest/issues/11175) [<samp>(498fb)</samp>](https://github.com/vitest-dev/vitest/commit/498fbe922)
- Share the server on self-referencing `extends` - by [@sheremet-va](https://github.com/sheremet-va) in [#11034](https://github.com/vitest-dev/vitest/issues/11034) [<samp>(23dda)</samp>](https://github.com/vitest-dev/vitest/commit/23dda738c)
- Warn when deprecated `deps.optimizer.web` is used - by [@im10furry](https://github.com/im10furry) in [#11214](https://github.com/vitest-dev/vitest/issues/11214) [<samp>(2ce29)</samp>](https://github.com/vitest-dev/vitest/commit/2ce29d5fa)
- **browser**:
- Avoid double quotes in `config.define` - by [@sheremet-va](https://github.com/sheremet-va) in [#11198](https://github.com/vitest-dev/vitest/issues/11198) [<samp>(972e2)</samp>](https://github.com/vitest-dev/vitest/commit/972e24bab)
- **doctor**:
- Measure vm pools for custom environments - by [@sheremet-va](https://github.com/sheremet-va) in [#11212](https://github.com/vitest-dev/vitest/issues/11212) [<samp>(91ab1)</samp>](https://github.com/vitest-dev/vitest/commit/91ab1588c)
- **expect**:
- Correct return value in `toMatchAriaSnapshot` - by [@sheremet-va](https://github.com/sheremet-va) in [#11208](https://github.com/vitest-dev/vitest/issues/11208) [<samp>(c119b)</samp>](https://github.com/vitest-dev/vitest/commit/c119be016)
- **fakeTimers**:
- Force `queueMicrotask` and `nextTick` in `toNotFake` - by [@kingmakeruix](https://github.com/kingmakeruix), **kingmakeruix**, **Hiroshi Ogawa**, **Codex** and [@hi-ogawa](https://github.com/hi-ogawa) in [#11261](https://github.com/vitest-dev/vitest/issues/11261) [<samp>(a47d7)</samp>](https://github.com/vitest-dev/vitest/commit/a47d7908f)
- **snapshot**:
- Report obsolete keys next to skipped tests - by [@hamed-bavar](https://github.com/hamed-bavar), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#11157](https://github.com/vitest-dev/vitest/issues/11157) and [#11158](https://github.com/vitest-dev/vitest/issues/11158) [<samp>(17e2b)</samp>](https://github.com/vitest-dev/vitest/commit/17e2b22dd)
- **types**:
- Make public declarations self-contained - by [@ZoeySigel](https://github.com/ZoeySigel) in [#11141](https://github.com/vitest-dev/vitest/issues/11141) [<samp>(45546)</samp>](https://github.com/vitest-dev/vitest/commit/455466c16)
- **ui**:
- Fix collapse/expand suite with file name search - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Codex** in [#11260](https://github.com/vitest-dev/vitest/issues/11260) [<samp>(0a712)</samp>](https://github.com/vitest-dev/vitest/commit/0a7122daa)
- Fix explorer file summary count - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa**, **OpenCode (gpt-5.6-sol)** and **Codex** in [#11125](https://github.com/vitest-dev/vitest/issues/11125) [<samp>(05982)</samp>](https://github.com/vitest-dev/vitest/commit/05982297d)
- **utils**:
- Fix `deepMerge` to handle prototype - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Codex** in [#11215](https://github.com/vitest-dev/vitest/issues/11215) [<samp>(4944c)</samp>](https://github.com/vitest-dev/vitest/commit/4944cf498)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v5.0.0...v5.0.1)
##### [v5.0.0](https://github.com/vitest-dev/vitest/releases/tag/v5.0.0)
Vitest 5 is officially out! This release focuses on performance and brings a lot of new features while fixing long-standing bugs. See our [blog post](https://vitest.dev/blog/vitest-5.html) for the official announcement.
##### 🚨 Breaking Changes
- Replace `loupe.inspect` with pretty-format - by [@hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 5 (1M context)** and **OpenAI Codex** in [#9609](https://github.com/vitest-dev/vitest/issues/9609) [<samp>(3f802)</samp>](https://github.com/vitest-dev/vitest/commit/3f802da4b)
- Remove quotes from string values in `test.for/each` title `$` variable (take 2) - by [@hi-ogawa](https://github.com/hi-ogawa) in [#10170](https://github.com/vitest-dev/vitest/issues/10170) [<samp>(04d37)</samp>](https://github.com/vitest-dev/vitest/commit/04d37e9d7)
- Default `attachmentsDir` from `.vitest-attachements/` to `.vitest/attachments/` - by [@MdSadiqMd](https://github.com/MdSadiqMd) in [#10186](https://github.com/vitest-dev/vitest/issues/10186) [<samp>(1ba73)</samp>](https://github.com/vitest-dev/vitest/commit/1ba7338c3)
- Remove `sequential` test/suite options in favor of `concurrent` - by [@hi-ogawa](https://github.com/hi-ogawa) and **OpenAI Codex** in [#10198](https://github.com/vitest-dev/vitest/issues/10198) [<samp>(9229f)</samp>](https://github.com/vitest-dev/vitest/commit/9229f2edc)
- Represent locator as an object instead of a string - by [@sheremet-va](https://github.com/sheremet-va) in [#10212](https://github.com/vitest-dev/vitest/issues/10212) [<samp>(80f07)</samp>](https://github.com/vitest-dev/vitest/commit/80f07edf6)
- Inline `expect` package - by [@sheremet-va](https://github.com/sheremet-va) in [#10221](https://github.com/vitest-dev/vitest/issues/10221) [<samp>(ad162)</samp>](https://github.com/vitest-dev/vitest/commit/ad16223e7)
- Remove deprecated entry points - by [@sheremet-va](https://github.com/sheremet-va) in [#10222](https://github.com/vitest-dev/vitest/issues/10222) [<samp>(994c6)</samp>](https://github.com/vitest-dev/vitest/commit/994c6ddb9)
- Require Node.js 22 and Vite 6.4 - by [@sheremet-va](https://github.com/sheremet-va) in [#10178](https://github.com/vitest-dev/vitest/issues/10178) [<samp>(38762)</samp>](https://github.com/vitest-dev/vitest/commit/3876283e8)
- Fail `expect.poll` when function didn't resolve in time - by [@hi-ogawa](https://github.com/hi-ogawa) and **OpenAI Codex** in [#10233](https://github.com/vitest-dev/vitest/issues/10233) [<samp>(4df04)</samp>](https://github.com/vitest-dev/vitest/commit/4df048c11)
- Throw an error if hoistable methods are outside the top level scope - by [@sheremet-va](https://github.com/sheremet-va) in [#10460](https://github.com/vitest-dev/vitest/issues/10460) [<samp>(d0b4f)</samp>](https://github.com/vitest-dev/vitest/commit/d0b4fddcb)
- `toHaveTextContent` is strict, add `toMatchTextContent` as alternative - by [@sheremet-va](https://github.com/sheremet-va) in [#10473](https://github.com/vitest-dev/vitest/issues/10473) [<samp>(18f30)</samp>](https://github.com/vitest-dev/vitest/commit/18f303079)
- Don't lookup config file from ancestor directories - by [@hi-ogawa](https://github.com/hi-ogawa), **OpenAI Codex** and **Hiroshi Ogawa** in [#10428](https://github.com/vitest-dev/vitest/issues/10428) [<samp>(945d9)</samp>](https://github.com/vitest-dev/vitest/commit/945d9090e)
- Inline `@vitest/runner` package, do not publish it anymore - by [@sheremet-va](https://github.com/sheremet-va) in [#10511](https://github.com/vitest-dev/vitest/issues/10511) [<samp>(6d6e4)</samp>](https://github.com/vitest-dev/vitest/commit/6d6e46b1e)
- Allow mutating happy-dom/jsdom window object - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenAI Codex** in [#10373](https://github.com/vitest-dev/vitest/issues/10373) [<samp>(206e8)</samp>](https://github.com/vitest-dev/vitest/commit/206e8cff8)
- Expose `concurrencyId`/`workerId` on TestModule's diagnostics, make id 1-based - by [@sheremet-va](https://github.com/sheremet-va) in [#10516](https://github.com/vitest-dev/vitest/issues/10516) [<samp>(bdd98)</samp>](https://github.com/vitest-dev/vitest/commit/bdd985433)
- Add `screenshotDirectory` config to `browser.expect.toMatchScreenshot` - by [@macarie](https://github.com/macarie) in [#10592](https://github.com/vitest-dev/vitest/issues/10592) [<samp>(a60de)</samp>](https://github.com/vitest-dev/vitest/commit/a60ded0fb)
- Update `@sinonjs/fake-timers` and support mocking `Temporal` - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#10654](https://github.com/vitest-dev/vitest/issues/10654) [<samp>(f8b15)</samp>](https://github.com/vitest-dev/vitest/commit/f8b1532fe)
- Remove webdriverio package - by [@sheremet-va](https://github.com/sheremet-va) in [#10675](https://github.com/vitest-dev/vitest/issues/10675) [<samp>(5fed6)</samp>](https://github.com/vitest-dev/vitest/commit/5fed68f72)
- Clear mocks by default before each test - by [@sheremet-va](https://github.com/sheremet-va) in [#10613](https://github.com/vitest-dev/vitest/issues/10613) [<samp>(0f646)</samp>](https://github.com/vitest-dev/vitest/commit/0f6463bf2)
- Don't emit localStorage warnings on Node 26, fail gracefully when worker fails to start - by [@sheremet-va](https://github.com/sheremet-va) in [#10293](https://github.com/vitest-dev/vitest/issues/10293) [<samp>(334ed)</samp>](https://github.com/vitest-dev/vitest/commit/334edef92)
- Separate config resolution from the server creation - by [@sheremet-va](https://github.com/sheremet-va) in [#10554](https://github.com/vitest-dev/vitest/issues/10554) [<samp>(1c0ec)</samp>](https://github.com/vitest-dev/vitest/commit/1c0ec3444)
- Inline projects extend the root config by default - by [@sheremet-va](https://github.com/sheremet-va) in [#10750](https://github.com/vitest-dev/vitest/issues/10750) [<samp>(fec00)</samp>](https://github.com/vitest-dev/vitest/commit/fec001ad3)
- Enable mocking Temporal without fake timers - by [@fabon-f](https://github.com/fabon-f), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#10757](https://github.com/vitest-dev/vitest/issues/10757) [<samp>(ac2d4)</samp>](https://github.com/vitest-dev/vitest/commit/ac2d46b42)
- Support nested projects - by [@sheremet-va](https://github.com/sheremet-va) in [#10846](https://github.com/vitest-dev/vitest/issues/10846) [<samp>(ec367)</samp>](https://github.com/vitest-dev/vitest/commit/ec367cf2a)
- Use `>` as separator in `-t`, calculate `only` once - by [@sheremet-va](https://github.com/sheremet-va) in [#10686](https://github.com/vitest-dev/vitest/issues/10686) [<samp>(a0b20)</samp>](https://github.com/vitest-dev/vitest/commit/a0b20bc86)
- Fail the test when an asynchronous assertion is not awaited - by [@sheremet-va](https://github.com/sheremet-va) in [#10868](https://github.com/vitest-dev/vitest/issues/10868) [<samp>(86d4a)</samp>](https://github.com/vitest-dev/vitest/commit/86d4a9da9)
- Share the Vite server between inline projects - by [@sheremet-va](https://github.com/sheremet-va) in [#10848](https://github.com/vitest-dev/vitest/issues/10848) [<samp>(d87c9)</samp>](https://github.com/vitest-dev/vitest/commit/d87c96ee4)
- Parse files statically in vitest list by default - by [@sheremet-va](https://github.com/sheremet-va) in [#11088](https://github.com/vitest-dev/vitest/issues/11088) [<samp>(51e94)</samp>](https://github.com/vitest-dev/vitest/commit/51e949416)
- **benchmark**:
- Rewrite the public API - by [@sheremet-va](https://github.com/sheremet-va) in [#10113](https://github.com/vitest-dev/vitest/issues/10113) [<samp>(19f6e)</samp>](https://github.com/vitest-dev/vitest/commit/19f6e8947)
- **browser**:
- Iframe scale - by [@macarie](https://github.com/macarie) in [#9745](https://github.com/vitest-dev/vitest/issues/9745) [<samp>(b6398)</samp>](https://github.com/vitest-dev/vitest/commit/b639852cc)
- Enable `locators.exact` by default - by [@sheremet-va](https://github.com/sheremet-va) in [#10430](https://github.com/vitest-dev/vitest/issues/10430) [<samp>(e2032)</samp>](https://github.com/vitest-dev/vitest/commit/e203202f9)
- Require `sessionId` for orchestrator html request - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenAI Codex** in [#10522](https://github.com/vitest-dev/vitest/issues/10522) [<samp>(79b7d)</samp>](https://github.com/vitest-dev/vitest/commit/79b7d8fcc)
- Save failure screenshots in `attachmentsDir` - by [@macarie](https://github.com/macarie) in [#10917](https://github.com/vitest-dev/vitest/issues/10917) [<samp>(3b5bb)</samp>](https://github.com/vitest-dev/vitest/commit/3b5bbd8b4)
- **coverage**:
- `include/exclude` globs too eager - by [@AriPerkkio](https://github.com/AriPerkkio) in [#9818](https://github.com/vitest-dev/vitest/issues/9818) [<samp>(edacb)</samp>](https://github.com/vitest-dev/vitest/commit/edacb0fd4)
- Allow `thresholds.perFile` to accept an object - by [@vladlenskiy](https://github.com/vladlenskiy) and [@AriPerkkio](https://github.com/AriPerkkio) in [#10190](https://github.com/vitest-dev/vitest/issues/10190) [<samp>(13b78)</samp>](https://github.com/vitest-dev/vitest/commit/13b78d98b)
- **expect**:
- Fix `toThrow("")` behavior by reverting [#6710](https://github.com/vitest-dev/vitest/issues/6710) - by [@hi-ogawa](https://github.com/hi-ogawa) in [#9643](https://github.com/vitest-dev/vitest/issues/9643) and [#6710](https://github.com/vitest-dev/vitest/issues/6710) [<samp>(6c3e4)</samp>](https://github.com/vitest-dev/vitest/commit/6c3e4bdbf)
- **mocker**:
- Deserialize automock as automock - by [@nami8824](https://github.com/nami8824) in [#10192](https://github.com/vitest-dev/vitest/issues/10192) [<samp>(2f892)</samp>](https://github.com/vitest-dev/vitest/commit/2f892712d)
- **reporters**:
- `blob` reporter and `--merge-reports` default to `.vitest/blob/` - by [@AriPerkkio](https://github.com/AriPerkkio) in [#10232](https://github.com/vitest-dev/vitest/issues/10232) [<samp>(d22b0)</samp>](https://github.com/vitest-dev/vitest/commit/d22b029ae)
- Write json and junit reporter output files to `.vitest` by default - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa**, **OpenCode (gpt-5.6-sol)** and [@AriPerkkio](https://github.com/AriPerkkio) in [#10621](https://github.com/vitest-dev/vitest/issues/10621) [<samp>(58577)</samp>](https://github.com/vitest-dev/vitest/commit/58577290a)
- **spy**:
- Preserve class mock prototype methods on instances - by [@sheremet-va](https://github.com/sheremet-va) in [#10910](https://github.com/vitest-dev/vitest/issues/10910) [<samp>(6093d)</samp>](https://github.com/vitest-dev/vitest/commit/6093d764a)
- **types**:
- Add better promise support in expects and matchers - by [@samchungy](https://github.com/samchungy) and [@sheremet-va](https://github.com/sheremet-va) in [#8266](https://github.com/vitest-dev/vitest/issues/8266) [<samp>(41f55)</samp>](https://github.com/vitest-dev/vitest/commit/41f551bce)
- **ui**:
- Harden UI API access - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenAI Codex** in [#10583](https://github.com/vitest-dev/vitest/issues/10583) [<samp>(4c26d)</samp>](https://github.com/vitest-dev/vitest/commit/4c26d7675)
- Change html reporter default output to `.vitest` - by [@hi-ogawa](https://github.com/hi-ogawa) and **Hiroshi Ogawa** in [#10620](https://github.com/vitest-dev/vitest/issues/10620) [<samp>(29c36)</samp>](https://github.com/vitest-dev/vitest/commit/29c364d50)
##### 🚀 Features
- Add `createReport` and `.vitest` report directory convention - by [@AriPerkkio](https://github.com/AriPerkkio) in [#9993](https://github.com/vitest-dev/vitest/issues/9993) [<samp>(72a6d)</samp>](https://github.com/vitest-dev/vitest/commit/72a6dc257)
- Expose default reporters through `configDefaults.reporters` - by [@hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 5 (1M context)** in [#10219](https://github.com/vitest-dev/vitest/issues/10219) [<samp>(083f6)</samp>](https://github.com/vitest-dev/vitest/commit/083f6bdd6)
- Support merge reports for non-sharded multi-environment runs (take 2) - by [@hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 5 (1M context)**, **OpenAI Codex** and [@AriPerkkio](https://github.com/AriPerkkio) in [#10031](https://github.com/vitest-dev/vitest/issues/10031) [<samp>(e60b2)</samp>](https://github.com/vitest-dev/vitest/commit/e60b2f49e)
- Add `logger.formatError` - by [@hi-ogawa](https://github.com/hi-ogawa) and **OpenAI Codex** in [#10268](https://github.com/vitest-dev/vitest/issues/10268) [<samp>(2c5f3)</samp>](https://github.com/vitest-dev/vitest/commit/2c5f3ee2f)
- Support typescript build mode - by [@lishaduck](https://github.com/lishaduck) in [#9870](https://github.com/vitest-dev/vitest/issues/9870) [<samp>(106da)</samp>](https://github.com/vitest-dev/vitest/commit/106da5896)
- Add toggable `injectCjsGlobals` option - by [@sheremet-va](https://github.com/sheremet-va) in [#10709](https://github.com/vitest-dev/vitest/issues/10709) [<samp>(82671)</samp>](https://github.com/vitest-dev/vitest/commit/826714ece)
- Promote fsModuleCache to a top-level option - by [@sheremet-va](https://github.com/sheremet-va) in [#10734](https://github.com/vitest-dev/vitest/issues/10734) [<samp>(78ed7)</samp>](https://github.com/vitest-dev/vitest/commit/78ed73afd)
- Support non-ascii characters in `for/each` title placeholders - by [@k-yle](https://github.com/k-yle) in [#10773](https://github.com/vitest-dev/vitest/issues/10773) [<samp>(15e0a)</samp>](https://github.com/vitest-dev/vitest/commit/15e0af953)
- Report the duration breakdown as percentages - by [@sheremet-va](https://github.com/sheremet-va) and [@AriPerkkio](https://github.com/AriPerkkio) in [#10820](https://github.com/vitest-dev/vitest/issues/10820) [<samp>(c67d2)</samp>](https://github.com/vitest-dev/vitest/commit/c67d296f4)
- Promote parseSpecifications out of experimental - by [@sheremet-va](https://github.com/sheremet-va) in [#11087](https://github.com/vitest-dev/vitest/issues/11087) [<samp>(b628c)</samp>](https://github.com/vitest-dev/vitest/commit/b628cb680)
- Promote clearCache out of experimental - by [@sheremet-va](https://github.com/sheremet-va) in [#11086](https://github.com/vitest-dev/vitest/issues/11086) [<samp>(d4fe1)</samp>](https://github.com/vitest-dev/vitest/commit/d4fe1986f)
- **api**:
- Expose logs recorded during the test - by [@sheremet-va](https://github.com/sheremet-va) in [#10277](https://github.com/vitest-dev/vitest/issues/10277) [<samp>(cba20)</samp>](https://github.com/vitest-dev/vitest/commit/cba2036a1)
- **benchmark**:
- Add pluggable benchmark provider API - by [@GuillaumeLagrange](https://github.com/GuillaumeLagrange) and [@sheremet-va](https://github.com/sheremet-va) in [#10799](https://github.com/vitest-dev/vitest/issues/10799) [<samp>(86c70)</samp>](https://github.com/vitest-dev/vitest/commit/86c700ed8)
- **browser**:
- Export aria tree utils - by [@hi-ogawa](https://github.com/hi-ogawa) in [#10171](https://github.com/vitest-dev/vitest/issues/10171) [<samp>(c3423)</samp>](https://github.com/vitest-dev/vitest/commit/c3423014c)
- Support dom snapshot trace view - by [@hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 5 (1M context)** and **OpenAI Codex** in [#10102](https://github.com/vitest-dev/vitest/issues/10102) [<samp>(7eddd)</samp>](https://github.com/vitest-dev/vitest/commit/7eddd273d)
- 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>(16654)</samp>](https://github.com/vitest-dev/vitest/commit/166544e39)
- Show aria tree on locator element error - by [@hi-ogawa](https://github.com/hi-ogawa) and **OpenAI Codex** in [#10257](https://github.com/vitest-dev/vitest/issues/10257) [<samp>(04f04)</samp>](https://github.com/vitest-dev/vitest/commit/04f04cdd1)
- Support custom `kind` in `page.mark` - by [@AriPerkkio](https://github.com/AriPerkkio) in [#10302](https://github.com/vitest-dev/vitest/issues/10302) [<samp>(053e8)</samp>](https://github.com/vitest-dev/vitest/commit/053e8b0d1)
- Live update trace view on watch UI - by [@hi-ogawa](https://github.com/hi-ogawa) and **OpenAI Codex** in [#10296](https://github.com/vitest-dev/vitest/issues/10296) [<samp>(78c11)</samp>](https://github.com/vitest-dev/vitest/commit/78c1169cf)
- Add `context.mark` for custom command tracing - by [@AriPerkkio](https://github.com/AriPerkkio) in [#10329](https://github.com/vitest-dev/vitest/issues/10329) [<samp>(aa514)</samp>](https://github.com/vitest-dev/vitest/commit/aa5140e76)
- Show trace view steps in editor panel - by [@hi-ogawa](https://github.com/hi-ogawa) and **OpenAI Codex** in [#10404](https://github.com/vitest-dev/vitest/issues/10404) [<samp>(8c4b6)</samp>](https://github.com/vitest-dev/vitest/commit/8c4b6da02)
- Display nested mark trace in UI - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenAI Codex** in [#10437](https://github.com/vitest-dev/vitest/issues/10437) [<samp>(86ffc)</samp>](https://github.com/vitest-dev/vitest/commit/86ffc8ac6)
- **cli**:
- Add `--repeats` CLI option - by [@todor-a](https://github.com/todor-a) in [#10504](https://github.com/vitest-dev/vitest/issues/10504) [<samp>(ee48b)</samp>](https://github.com/vitest-dev/vitest/commit/ee48b959e)
- Support -p shorthand for --project - by [@sheremet-va](https://github.com/sheremet-va) in [#10826](https://github.com/vitest-dev/vitest/issues/10826) [<samp>(1addd)</samp>](https://github.com/vitest-dev/vitest/commit/1adddde12)
- **coverage**:
- V8 to track `node:child_process` and `node:worker_threads` contexts - by [@AriPerkkio](https://github.com/AriPerkkio) in [#9976](https://github.com/vitest-dev/vitest/issues/9976) [<samp>(9baa5)</samp>](https://github.com/vitest-dev/vitest/commit/9baa5faba)
- `thresholds.autoUpdate` to receive previous threshold as argument - by [@wouterkroes](https://github.com/wouterkroes) in [#10495](https://github.com/vitest-dev/vitest/issues/10495) [<samp>(04f81)</samp>](https://github.com/vitest-dev/vitest/commit/04f81854f)
- Switch to `@vitest/istanbuljs` packages - by [@AriPerkkio](https://github.com/AriPerkkio) in [#11053](https://github.com/vitest-dev/vitest/issues/11053) [<samp>(5f6a5)</samp>](https://github.com/vitest-dev/vitest/commit/5f6a5e84a)
- **junit-reporter**:
- Add jest-junit-compatible naming options - by [@neumaennl](https://github.com/neumaennl), **neumaennl**, **Martin Neumann** and **Copilot** in [#10189](https://github.com/vitest-dev/vitest/issues/10189) [<samp>(27393)</samp>](https://github.com/vitest-dev/vitest/commit/273933440)
- **reporter**:
- Support html reporter single file output - by [@hi-ogawa](https://github.com/hi-ogawa), **OpenAI Codex** and **Claude Opus 5 (1M context)** in [#10235](https://github.com/vitest-dev/vitest/issues/10235) [<samp>(f757e)</samp>](https://github.com/vitest-dev/vitest/commit/f757ec5e6)
- Add custom GitHub Actions summary title - by [@heyJonBray](https://github.com/heyJonBray) and [@macarie](https://github.com/macarie) in [#10891](https://github.com/vitest-dev/vitest/issues/10891) [<samp>(4363c)</samp>](https://github.com/vitest-dev/vitest/commit/4363cdb49)
- **ui**:
- Highlight editor source locations - by [@sheremet-va](https://github.com/sheremet-va), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#11004](https://github.com/vitest-dev/vitest/issues/11004) [<samp>(bce2d)</samp>](https://github.com/vitest-dev/vitest/commit/bce2d3c2f)
- Navigate trace steps with keyboard and remove indirect editor focus - by [@sheremet-va](https://github.com/sheremet-va), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#11005](https://github.com/vitest-dev/vitest/issues/11005) [<samp>(6816f)</samp>](https://github.com/vitest-dev/vitest/commit/6816f3b17)
- Persist trace view selection in URL - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#10981](https://github.com/vitest-dev/vitest/issues/10981) [<samp>(3069e)</samp>](https://github.com/vitest-dev/vitest/commit/3069e5927)
- Toggle trace target highlight - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#11049](https://github.com/vitest-dev/vitest/issues/11049) [<samp>(cd63e)</samp>](https://github.com/vitest-dev/vitest/commit/cd63e9e43)
- Add link to open playwright trace - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#11059](https://github.com/vitest-dev/vitest/issues/11059) [<samp>(58f02)</samp>](https://github.com/vitest-dev/vitest/commit/58f02ae36)
- **vitest**:
- Create `vi.when()` - by [@macarie](https://github.com/macarie) in [#10174](https://github.com/vitest-dev/vitest/issues/10174) [<samp>(3900e)</samp>](https://github.com/vitest-dev/vitest/commit/3900e6349)
- **vm**:
- Support `require(esm)` in vm pools - by [@sheremet-va](https://github.com/sheremet-va) in [#10829](https://github.com/vitest-dev/vitest/issues/10829) [<samp>(01298)</samp>](https://github.com/vitest-dev/vitest/commit/01298e5b3)
##### 🐞 Bug Fixes
- Global `sequence.concurrent: true` with top-level `test(..., { concurrent: false })` + depreacte `sequential` test API and options - by [@hi-ogawa](https://github.com/hi-ogawa), **OpenAI Codex** and [@sheremet-va](https://github.com/sheremet-va) in [#10194](https://github.com/vitest-dev/vitest/issues/10194) [<samp>(9387f)</samp>](https://github.com/vitest-dev/vitest/commit/9387f57cf)
- Test `tags` options should overwrite inherited suite options + inherit suite options in `task` API - by [@hi-ogawa](https://github.com/hi-ogawa) and **OpenAI Codex** in [#10216](https://github.com/vitest-dev/vitest/issues/10216) [<samp>(457db)</samp>](https://github.com/vitest-dev/vitest/commit/457db297b)
- Udpate optimize deps config - by [@sheremet-va](https://github.com/sheremet-va) in [#10223](https://github.com/vitest-dev/vitest/issues/10223) [<samp>(95dc6)</samp>](https://github.com/vitest-dev/vitest/commit/95dc6e3f1)
- Shell injection safety via github.ref_name in publish workflow - by [@lloyd-c137](https://github.com/lloyd-c137) and **lloyd-c137** in [#10327](https://github.com/vitest-dev/vitest/issues/10327) [<samp>(dd020)</samp>](https://github.com/vitest-dev/vitest/commit/dd0207f4d)
- Make `attachmentsDir` root only config - by [@hi-ogawa](https://github.com/hi-ogawa) and **OpenAI Codex** in [#10334](https://github.com/vitest-dev/vitest/issues/10334) [<samp>(fab1b)</samp>](https://github.com/vitest-dev/vitest/commit/fab1b6020)
- Apply cjs interop for truthy `__esModule` - by [@hi-ogawa](https://github.com/hi-ogawa) in [#10363](https://github.com/vitest-dev/vitest/issues/10363) [<samp>(2b135)</samp>](https://github.com/vitest-dev/vitest/commit/2b13547a5)
- Preserve `vi.defineHelper` callsite for async error stack - by [@macayu17](https://github.com/macayu17) and [@hi-ogawa](https://github.com/hi-ogawa) in [#10415](https://github.com/vitest-dev/vitest/issues/10415) [<samp>(ac697)</samp>](https://github.com/vitest-dev/vitest/commit/ac6971ca2)
- Respect `disableConsoleIntercept` in browser mode - by [@Copilot](https://github.com/Copilot), **Hiroshi Ogawa**, [@hi-ogawa](https://github.com/hi-ogawa) and **OpenAI Codex** in [#10391](https://github.com/vitest-dev/vitest/issues/10391) [<samp>(66110)</samp>](https://github.com/vitest-dev/vitest/commit/66110d271)
- ForceRerunTriggers uses directory globs against files - by [@Patrick-Clausen](https://github.com/Patrick-Clausen) and **Patrick Clausen** in [#10421](https://github.com/vitest-dev/vitest/issues/10421) and [#10420](https://github.com/vitest-dev/vitest/issues/10420) [<samp>(4fee2)</samp>](https://github.com/vitest-dev/vitest/commit/4fee2e303)
- Unify typechecking and ast collection - by [@sheremet-va](https://github.com/sheremet-va) in [#10449](https://github.com/vitest-dev/vitest/issues/10449) [<samp>(af993)</samp>](https://github.com/vitest-dev/vitest/commit/af993b66b)
- Don't print typecheck warning more than once - by [@sheremet-va](https://github.com/sheremet-va) in [#10461](https://github.com/vitest-dev/vitest/issues/10461) [<samp>(15275)</samp>](https://github.com/vitest-dev/vitest/commit/152750ec0)
- Correct collumn when parsing tests - by [@sheremet-va](https://github.com/sheremet-va) in [#10467](https://github.com/vitest-dev/vitest/issues/10467) [<samp>(7c2fc)</samp>](https://github.com/vitest-dev/vitest/commit/7c2fc133e)
- Fix mixed stdout/stderr log timestamps in `onUserConsoleLog` - by [@Copilot](https://github.com/Copilot), **Hiroshi Ogawa**, [@hi-ogawa](https://github.com/hi-ogawa) and [@sheremet-va](https://github.com/sheremet-va) in [#10308](https://github.com/vitest-dev/vitest/issues/10308) [<samp>(62756)</samp>](https://github.com/vitest-dev/vitest/commit/627565475)
- Fix `importOriginal` with optimizer and query import - by [@davidxharris](https://github.com/davidxharris), **David Harris**, [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenAI Codex** in [#10469](https://github.com/vitest-dev/vitest/issues/10469) [<samp>(6a3bb)</samp>](https://github.com/vitest-dev/vitest/commit/6a3bb02e0)
- Correct transform time calculation in merged report - by [@potatomatoooo](https://github.com/potatomatoooo) and [@hi-ogawa](https://github.com/hi-ogawa) in [#10570](https://github.com/vitest-dev/vitest/issues/10570) and [#10578](https://github.com/vitest-dev/vitest/issues/10578) [<samp>(b7897)</samp>](https://github.com/vitest-dev/vitest/commit/b78972892)
- Fix `setImmediate` await in detect-async-leak - by [@hi-ogawa](https://github.com/hi-ogawa) and **Hiroshi Ogawa** in [#10608](https://github.com/vitest-dev/vitest/issues/10608) [<samp>(dd62b)</samp>](https://github.com/vitest-dev/vitest/commit/dd62b84e0)
- Fix per-project `sequence` config - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#10659](https://github.com/vitest-dev/vitest/issues/10659) [<samp>(40cdc)</samp>](https://github.com/vitest-dev/vitest/commit/40cdc7fd6)
- Add handshake timeout to iframe communication - by [@sheremet-va](https://github.com/sheremet-va) in [#10656](https://github.com/vitest-dev/vitest/issues/10656) [<samp>(3545f)</samp>](https://github.com/vitest-dev/vitest/commit/3545fe78f)
- Don't print column in test names when `includeTaskLocation` is enabled - by [@sheremet-va](https://github.com/sheremet-va) in [#10681](https://github.com/vitest-dev/vitest/issues/10681) [<samp>(bd9cc)</samp>](https://github.com/vitest-dev/vitest/commit/bd9cc9d8d)
- Disable server HMR before plugins read it in their config hook - by [@sheremet-va](https://github.com/sheremet-va) in [#10731](https://github.com/vitest-dev/vitest/issues/10731) [<samp>(e060b)</samp>](https://github.com/vitest-dev/vitest/commit/e060b8fa9)
- Close the pool before the Vite servers - by [@sheremet-va](https://github.com/sheremet-va) in [#10725](https://github.com/vitest-dev/vitest/issues/10725) [<samp>(96fa6)</samp>](https://github.com/vitest-dev/vitest/commit/96fa6d73d)
- Remove listeners in the typecheck worker's `off` - by [@sheremet-va](https://github.com/sheremet-va) in [#10741](https://github.com/vitest-dev/vitest/issues/10741) [<samp>(d758b)</samp>](https://github.com/vitest-dev/vitest/commit/d758b4755)
- Keep per-file isolation in vm pools when maxWorkers is 1 - by [@sheremet-va](https://github.com/sheremet-va) in [#10743](https://github.com/vitest-dev/vitest/issues/10743) [<samp>(83ab9)</samp>](https://github.com/vitest-dev/vitest/commit/83ab9a44f)
- Node.js 20 deprecation warning for `ci.yml` - by [@hirehamir](https://github.com/hirehamir) in [#10759](https://github.com/vitest-dev/vitest/issues/10759) [<samp>(2127f)</samp>](https://github.com/vitest-dev/vitest/commit/2127fa6ce)
- Prevent node builtins double prefix - by [@malobre](https://github.com/malobre) in [#10630](https://github.com/vitest-dev/vitest/issues/10630) and [#10767](https://github.com/vitest-dev/vitest/issues/10767) [<samp>(22d35)</samp>](https://github.com/vitest-dev/vitest/commit/22d353a80)
- Set non-zero exit code when teardown throws during close - by [@zakcutner](https://github.com/zakcutner) and [@AriPerkkio](https://github.com/AriPerkkio) in [#10794](https://github.com/vitest-dev/vitest/issues/10794) [<samp>(22116)</samp>](https://github.com/vitest-dev/vitest/commit/22116feb7)
- Don't race the typechecker spawn grace period on windows - by [@xevrion](https://github.com/xevrion) in [#10814](https://github.com/vitest-dev/vitest/issues/10814) [<samp>(b19e5)</samp>](https://github.com/vitest-dev/vitest/commit/b19e5ece9)
- Coalesce concurrent watch-mode restarts, deflake the pool stderr fixture - by [@sheremet-va](https://github.com/sheremet-va) in [#10822](https://github.com/vitest-dev/vitest/issues/10822) [<samp>(a31f8)</samp>](https://github.com/vitest-dev/vitest/commit/a31f86af7)
- Prevent `vitest --typecheck` from reporting a false success when the `tsc` process crashes - by [@hitenkalda](https://github.com/hitenkalda) and **Hiten Kalda** in [#10705](https://github.com/vitest-dev/vitest/issues/10705) [<samp>(a1b05)</samp>](https://github.com/vitest-dev/vitest/commit/a1b0565c9)
- Collect in-source tests when the module is cached - by [@koutaro-masaki](https://github.com/koutaro-masaki) in [#10577](https://github.com/vitest-dev/vitest/issues/10577) and [#10589](https://github.com/vitest-dev/vitest/issues/10589) [<samp>(a7bf2)</samp>](https://github.com/vitest-dev/vitest/commit/a7bf2b2c8)
- Swap replace() arguments so timeout error stack shows the real message - by [@lazerg](https://github.com/lazerg) in [#10875](https://github.com/vitest-dev/vitest/issues/10875) [<samp>(aba0f)</samp>](https://github.com/vitest-dev/vitest/commit/aba0f9b7b)
- Stale mock metadata breaks automocking with isolate:false - by [@kade-robertson](https://github.com/kade-robertson) in [#10145](https://github.com/vitest-dev/vitest/issues/10145) and [#10541](https://github.com/vitest-dev/vitest/issues/10541) [<samp>(8e210)</samp>](https://github.com/vitest-dev/vitest/commit/8e2108dda)
- Don't lose worker output on teardown, deflake timing-sensitive tests - by [@sheremet-va](https://github.com/sheremet-va) in [#10842](https://github.com/vitest-dev/vitest/issues/10842) [<samp>(1216b)</samp>](https://github.com/vitest-dev/vitest/commit/1216b5af9)
- Revive global concurrency limit for test lifecycle - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa**, **OpenCode (gpt-5.6-sol)** and [@sheremet-va](https://github.com/sheremet-va) in [#10928](https://github.com/vitest-dev/vitest/issues/10928) [<samp>(cf917)</samp>](https://github.com/vitest-dev/vitest/commit/cf9176bfc)
- Own the post-restart rerun, keep `process.exit` disabled in workers - by [@sheremet-va](https://github.com/sheremet-va) in [#10963](https://github.com/vitest-dev/vitest/issues/10963) [<samp>(5e69a)</samp>](https://github.com/vitest-dev/vitest/commit/5e69aba65)
- Preserve correct root during resolve config - by [@AriPerkkio](https://github.com/AriPerkkio) and [@sheremet-va](https://github.com/sheremet-va) in [#10909](https://github.com/vitest-dev/vitest/issues/10909) [<samp>(210ba)</samp>](https://github.com/vitest-dev/vitest/commit/210ba00cb)
- Combine multiple --project filters correctly - by [@sheremet-va](https://github.com/sheremet-va) in [#10988](https://github.com/vitest-dev/vitest/issues/10988) [<samp>(66c1c)</samp>](https://github.com/vitest-dev/vitest/commit/66c1cbb53)
- Fix `recordArtifact` location with `vi.defineHelper` - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#11047](https://github.com/vitest-dev/vitest/issues/11047) [<samp>(c2186)</samp>](https://github.com/vitest-dev/vitest/commit/c21865dfd)
- Invalidate resolved setup files - by [@sheremet-va](https://github.com/sheremet-va) in [#11073](https://github.com/vitest-dev/vitest/issues/11073) and [#11081](https://github.com/vitest-dev/vitest/issues/11081) [<samp>(488c0)</samp>](https://github.com/vitest-dev/vitest/commit/488c04680)
- Accept awaited value in vi.when thenResolve - by [@sheremet-va](https://github.com/sheremet-va) in [#11084](https://github.com/vitest-dev/vitest/issues/11084) [<samp>(c10a1)</samp>](https://github.com/vitest-dev/vitest/commit/c10a12900)
- Ignore computed member calls in static collection - by [@sheremet-va](https://github.com/sheremet-va) in [#11085](https://github.com/vitest-dev/vitest/issues/11085) [<samp>(130f7)</samp>](https://github.com/vitest-dev/vitest/commit/130f79b8b)
- Don't duplicte `oxc.target` if user provides a custom array - by [@sheremet-va](https://github.com/sheremet-va) in [#11095](https://github.com/vitest-dev/vitest/issues/11095) [<samp>(848d7)</samp>](https://github.com/vitest-dev/vitest/commit/848d7243e)
- Propagate --maxWorkers to projects - by [@Gaurav1112](https://github.com/Gaurav1112) in [#11102](https://github.com/vitest-dev/vitest/issues/11102) [<samp>(2122f)</samp>](https://github.com/vitest-dev/vitest/commit/2122ffdfb)
- Apply queued mocks from doMock() in queue order - by [@juliandescottes](https://github.com/juliandescottes) and **Claude Opus 5 (1M context)** in [#10706](https://github.com/vitest-dev/vitest/issues/10706) and [#11127](https://github.com/vitest-dev/vitest/issues/11127) [<samp>(f08ce)</samp>](https://github.com/vitest-dev/vitest/commit/f08ce4b71)
- Add a warning if inline project has duplicate plugins due to unexpected `extends: true` - by [@sheremet-va](https://github.com/sheremet-va) in [#11120](https://github.com/vitest-dev/vitest/issues/11120) [<samp>(584cf)</samp>](https://github.com/vitest-dev/vitest/commit/584cf3084)
- Treat test.describe as a suite during static collection - by [@sheremet-va](https://github.com/sheremet-va) in [#11128](https://github.com/vitest-dev/vitest/issues/11128) [<samp>(d46a7)</samp>](https://github.com/vitest-dev/vitest/commit/d46a74722)
- **browser**:
- Fix trace highlight of shadow dom on webdriverio - by [@hi-ogawa](https://github.com/hi-ogawa) in [#10227](https://github.com/vitest-dev/vitest/issues/10227) [<samp>(b01af)</samp>](https://github.com/vitest-dev/vitest/commit/b01afd26c)
- Simplify orchestrator otel carrier - by [@hi-ogawa](https://github.com/hi-ogawa) in [#10283](https://github.com/vitest-dev/vitest/issues/10283) [<samp>(3514f)</samp>](https://github.com/vitest-dev/vitest/commit/3514f9fa1)
- Remove orphaned Playwright route when same module is mocked via multiple ids - by [@Zelys-DFKH](https://github.com/Zelys-DFKH) in [#9957](https://github.com/vitest-dev/vitest/issues/9957) and [#10267](https://github.com/vitest-dev/vitest/issues/10267) [<samp>(41db6)</samp>](https://github.com/vitest-dev/vitest/commit/41db6ce28)
- Skip `wrapDynamicImport` transform on ssr environment - by [@hi-ogawa](https://github.com/hi-ogawa) in [#10355](https://github.com/vitest-dev/vitest/issues/10355) [<samp>(d3c96)</samp>](https://github.com/vitest-dev/vitest/commit/d3c964bfc)
- Fix stale source map on watch mode - by [@hi-ogawa](https://github.com/hi-ogawa) in [#10389](https://github.com/vitest-dev/vitest/issues/10389) [<samp>(6d772)</samp>](https://github.com/vitest-dev/vitest/commit/6d772c800)
- Escape inline orchestrator scripts - by [@hi-ogawa](https://github.com/hi-ogawa) and **OpenAI Codex** in [#10412](https://github.com/vitest-dev/vitest/issues/10412) [<samp>(c22cf)</samp>](https://github.com/vitest-dev/vitest/commit/c22cfb656)
- Disable client `cdp` API when `allowWrite/allowExec: false` - by [@hi-ogawa](https://github.com/hi-ogawa) and **OpenAI Codex** in [#10444](https://github.com/vitest-dev/vitest/issues/10444) [<samp>(63e3b)</samp>](https://github.com/vitest-dev/vitest/commit/63e3b2eee)
- Wait for orchestrator readiness before resolving browser sessions - by [@soconnor-seeq](https://github.com/soconnor-seeq) in [#10397](https://github.com/vitest-dev/vitest/issues/10397) [<samp>(fe5ed)</samp>](https://github.com/vitest-dev/vitest/commit/fe5ed6bc7)
- Wait for iframe tester readiness before preparing - by [@soconnor-seeq](https://github.com/soconnor-seeq) in [#10497](https://github.com/vitest-dev/vitest/issues/10497) [<samp>(f2655)</samp>](https://github.com/vitest-dev/vitest/commit/f26552c63)
- Encode iframeId in tester iframe URL - by [@Pduhard](https://github.com/Pduhard), **Pduhard** and **Claude Opus 5 (1M context)** in [#10520](https://github.com/vitest-dev/vitest/issues/10520) and [#10521](https://github.com/vitest-dev/vitest/issues/10521) [<samp>(c8bf1)</samp>](https://github.com/vitest-dev/vitest/commit/c8bf19f66)
- Always derive a positive locator action timeout - by [@sheremet-va](https://github.com/sheremet-va) in [#10626](https://github.com/vitest-dev/vitest/issues/10626) [<samp>(5b864)</samp>](https://github.com/vitest-dev/vitest/commit/5b8642120)
- Resize the browser ui only if it's not headless - by [@sheremet-va](https://github.com/sheremet-va) in [#10662](https://github.com/vitest-dev/vitest/issues/10662) [<samp>(b5c61)</samp>](https://github.com/vitest-dev/vitest/commit/b5c613051)
- Check fs access in builtin commands - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#10674](https://github.com/vitest-dev/vitest/issues/10674) [<samp>(33f96)</samp>](https://github.com/vitest-dev/vitest/commit/33f96a145)
- Preserve pre-transform request defaults - by [@sheremet-va](https://github.com/sheremet-va) in [#10748](https://github.com/vitest-dev/vitest/issues/10748) [<samp>(b6060)</samp>](https://github.com/vitest-dev/vitest/commit/b60605ca7)
- Fix error stacktrace location off-by-one - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#10724](https://github.com/vitest-dev/vitest/issues/10724) [<samp>(62b8d)</samp>](https://github.com/vitest-dev/vitest/commit/62b8d3b36)
- Inlined awaited import should not trigger syntax error after transform - by [@smeng9](https://github.com/smeng9), **Shaoyu Meng** and **Claude Opus 5 (1M context)** in [#10784](https://github.com/vitest-dev/vitest/issues/10784) [<samp>(51acd)</samp>](https://github.com/vitest-dev/vitest/commit/51acd5778)
- Mock window\.print to avoid hanging - by [@aaravjaichand](https://github.com/aaravjaichand) in [#7375](https://github.com/vitest-dev/vitest/issues/7375) and [#10798](https://github.com/vitest-dev/vitest/issues/10798) [<samp>(66d95)</samp>](https://github.com/vitest-dev/vitest/commit/66d95af84)
- Ignore channel events in a tester opened as a top-level window - by [@simshanith](https://github.com/simshanith) in [#9379](https://github.com/vitest-dev/vitest/issues/9379) and [#9381](https://github.com/vitest-dev/vitest/issues/9381) [<samp>(46a3c)</samp>](https://github.com/vitest-dev/vitest/commit/46a3cf750)
- Resolve `connectTimeout` from the project config - by [@lazerg](https://github.com/lazerg) in [#10879](https://github.com/vitest-dev/vitest/issues/10879) and [#10880](https://github.com/vitest-dev/vitest/issues/10880) [<samp>(62c79)</samp>](https://github.com/vitest-dev/vitest/commit/62c795d63)
- Prebundle vite module runner with vitest - by [@lebovvskii](https://github.com/lebovvskii) and [@sheremet-va](https://github.com/sheremet-va) in [#10836](https://github.com/vitest-dev/vitest/issues/10836) and [#10856](https://github.com/vitest-dev/vitest/issues/10856) [<samp>(37c24)</samp>](https://github.com/vitest-dev/vitest/commit/37c240158)
- Restore dependency reload warning - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#10913](https://github.com/vitest-dev/vitest/issues/10913) [<samp>(90d69)</samp>](https://github.com/vitest-dev/vitest/commit/90d696d44)
- Configure internal optimizer dependencies - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#10915](https://github.com/vitest-dev/vitest/issues/10915) [<samp>(a72f4)</samp>](https://github.com/vitest-dev/vitest/commit/a72f46eac)
- Trigger playwright/chromium gc on lower disk availability - by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#10912](https://github.com/vitest-dev/vitest/issues/10912) [<samp>(032d3)</samp>](https://github.com/vitest-dev/vitest/commit/032d31892)
- Disallow filter-only options in getBy\* locators - by **Arjun** in [#10295](https://github.com/vitest-dev/vitest/issues/10295) and [#10933](https://github.com/vitest-dev/vitest/issues/10933) [<samp>(9b4df)</samp>](https://github.com/vitest-dev/vitest/commit/9b4df4b05)
- Fail instead of hanging when the browser stops responding - by [@sheremet-va](https://github.com/sheremet-va) in [#10956](https://github.com/vitest-dev/vitest/issues/10956) [<samp>(c496c)</samp>](https://github.com/vitest-dev/vitest/commit/c496c2e33)
- Exit gracefully when the browser disconnects during cancellation - by [@sheremet-va](https://github.com/sheremet-va) in [#10962](https://github.com/vitest-dev/vitest/issues/10962) [<samp>(67e84)</samp>](https://github.com/vitest-dev/vitest/commit/67e848564)
- Don't redirect vitest in client environment - by [@sheremet-va](https://github.com/sheremet-va) in [#10975](https://github.com/vitest-dev/vitest/issues/10975) [<samp>(aeb67)</samp>](https://github.com/vitest-dev/vitest/commit/aeb672095)
- Don't hang when `ui: true` in projects - by [@AriPerkkio](https://github.com/AriPerkkio) in [#10994](https://github.com/vitest-dev/vitest/issues/10994) [<samp>(9f710)</samp>](https://github.com/vitest-dev/vitest/commit/9f710d304)
- Preserve trace popover state - by [@liuluochen6-af](https://github.com/liuluochen6-af), **Hiroshi Ogawa**, **OpenCode (gpt-5.6-sol)** and [@hi-ogawa](https://github.com/hi-ogawa) in [#10906](https://github.com/vitest-dev/vitest/issues/10906) and [#11021](https://github.com/vitest-dev/vitest/issues/11021) [<samp>(1bbc2)</samp>](https://github.com/vitest-dev/vitest/commit/1bbc278c2)
- Report the action error when a task times out - by [@sheremet-va](https://github.com/sheremet-va) in [#11101](https://github.com/vitest-dev/vitest/issues/11101) [<samp>(dc10f)</samp>](https://github.com/vitest-dev/vitest/commit/dc10f5f8f)
- **cache**:
- Improve `fsModuleCache` resiliency during external modifications - by [@jszumski](https://github.com/jszumski) in [#10869](https://github.com/vitest-dev/vitest/issues/10869) [<samp>(5eb35)</samp>](https://github.com/vitest-dev/vitest/commit/5eb3570e8)
- **cli**:
- Respect `FORCE_COLOR` over agent detection - by [@dokson](https://github.com/dokson) in [#10272](https://github.com/vitest-dev/vitest/issues/10272) [<samp>(7e66b)</samp>](https://github.com/vitest-dev/vitest/commit/7e66bc726)
- Exit on `CTRL+c` even when `globalSetup` runs blocked code - by [@AriPerkkio](https://github.com/AriPerkkio) in [#10863](https://github.com/vitest-dev/vitest/issues/10863) [<samp>(d568f)</samp>](https://github.com/vitest-dev/vitest/commit/d568f8ce3)
- **coverage**:
- `exclude` to not inherit negation globs from `test.include` - by [@AriPerkkio](https://github.com/AriPerkkio) in [#10299](https://github.com/vitest-dev/vitest/issues/10299) [<samp>(28685)</samp>](https://github.com/vitest-dev/vitest/commit/286851ea2)
- Avoid matching sibling project roots - by [@innoprej](https://github.com/innoprej), **Shin JaeHee** and [@AriPerkkio](https://github.com/AriPerkkio) in [#10311](https://github.com/vitest-dev/vitest/issues/10311) [<samp>(e30dd)</samp>](https://github.com/vitest-dev/vitest/commit/e30dd9cf6)
- Non-awaited module imports cause wrong offsets - by [@AriPerkkio](https://github.com/AriPerkkio) in [#10643](https://github.com/vitest-dev/vitest/issues/10643) [<samp>(c4090)</samp>](https://github.com/vitest-dev/vitest/commit/c40901479)
- Fail fast when `coverage.reportsDirectory` conflicts between concurrent runs - by [@jgamaraalv](https://github.com/jgamaraalv) and [@AriPerkkio](https://github.com/AriPerkkio) in [#10466](https://github.com/vitest-dev/vitest/issues/10466) [<samp>(833f0)</samp>](https://github.com/vitest-dev/vitest/commit/833f0936c)
- V8 to ignore Vite SSR's generated import bindings - by [@AriPerkkio](https://github.com/AriPerkkio) in [#11023](https://github.com/vitest-dev/vitest/issues/11023) [<samp>(c6174)</samp>](https://github.com/vitest-dev/vitest/commit/c6174a6cf)
- Prevent crash on `/@fs/` prepended virtual files - by [@AriPerkkio](https://github.com/AriPerkkio) in [#11119](https://github.com/vitest-dev/vitest/issues/11119) [<samp>(c4473)</samp>](https://github.com/vitest-dev/vitest/commit/c4473e48e)
- **deps**:
- Update ivya to fix empty aria tree snapshot - by [@hi-ogawa](https://github.com/hi-ogawa) in [#10218](https://github.com/vitest-dev/vitest/issues/10218) [<samp>(f7822)</samp>](https://github.com/vitest-dev/vitest/commit/f7822ebf6)
- Update fake-timers to 15.3.2. support `toNotFake` - by [@BPScott](https://github.com/BPScott), [@hi-ogawa](https://github.com/hi-ogawa) and **OpenAI Codex** in [#10043](https://github.com/vitest-dev/vitest/issues/10043) [<samp>(bbf2f)</samp>](https://github.com/vitest-dev/vitest/commit/bbf2f0df3)
- Update all non-major dependencies - by [@sheremet-va](https://github.com/sheremet-va) in [#9958](https://github.com/vitest-dev/vitest/issues/9958) [<samp>(7faa7)</samp>](https://github.com/vitest-dev/vitest/commit/7faa7b04a)
- Update all non-major dependencies - by [@sheremet-va](https://github.com/sheremet-va) in [#10861](https://github.com/vitest-dev/vitest/issues/10861) [<samp>(0188c)</samp>](https://github.com/vitest-dev/vitest/commit/0188c8135)
- Update all non-major dependencies - by [@sheremet-va](https://github.com/sheremet-va) in [#10898](https://github.com/vitest-dev/vitest/issues/10898) [<samp>(61c4b)</samp>](https://github.com/vitest-dev/vitest/commit/61c4b8024)
- Update all non-major dependencies - in [#10966](https://github.com/vitest-dev/vitest/issues/10966) [<samp>(65263)</samp>](https://github.com/vitest-dev/vitest/commit/65263d74e)
- Update all non-major dependencies - in [#11043](https://github.com/vitest-dev/vitest/issues/11043) [<samp>(732df)</samp>](https://github.com/vitest-dev/vitest/commit/732df2c2b)
- **expect**:
- Allow readonly arrays and sets in toBeOneOf - by [@YBJ0000](https://github.com/YBJ0000) in [#10264](https://github.com/vitest-dev/vitest/issues/10264) and [#10374](https://github.com/vitest-dev/vitest/issues/10374) [<samp>(fed11)</samp>](https://github.com/vitest-dev/vitest/commit/fed1125b0)
- Handle nullish toHaveProperty values - by [@liyimil](https://github.com/liyimil) in [#10735](https://github.com/vitest-dev/vitest/issues/10735) and [#10811](https://github.com/vitest-dev/vitest/issues/10811) [<samp>(99e59)</samp>](https://github.com/vitest-dev/vitest/commit/99e596d33)
- **junit**:
- Include unhandled errors in JUnit XML report - by [@gbleu](https://github.com/gbleu) and **Claude Opus 5 (1M context)** in [#10244](https://github.com/vitest-dev/vitest/issues/10244) [<samp>(6f74e)</samp>](https://github.com/vitest-dev/vitest/commit/6f74e5e9d)
- **mocker**:
- Skip hoist transform without ast mock calls - by [@hi-ogawa](https://github.com/hi-ogawa) and **OpenAI Codex** in [#10410](https://github.com/vitest-dev/vitest/issues/10410) [<samp>(0468e)</samp>](https://github.com/vitest-dev/vitest/commit/0468e1572)
- Hoist vi.mock() for vite-plus/test imports - by [@Brooooooklyn](https://github.com/Brooooooklyn) and **Claude Opus 5 (1M context)** in [#10489](https://github.com/vitest-dev/vitest/issues/10489) [<samp>(88376)</samp>](https://github.com/vitest-dev/vitest/commit/8837664a4)
- Restrict redirect mocks to the fs allowlist - by [@sheremet-va](https://github.com/sheremet-va) in [#10972](https://github.com/vitest-dev/vitest/issues/10972) [<samp>(8ff9b)</samp>](https://github.com/vitest-dev/vitest/commit/8ff9b9a9e)
- **pool**:
- Prevent test run hang on worker crash - by [@jaxalo](https://github.com/jaxalo) and [@AriPerkkio](https://github.com/AriPerkkio) in [#10543](https://github.com/vitest-dev/vitest/issues/10543) [<samp>(40878)</samp>](https://github.com/vitest-dev/vitest/commit/4087802b5)
- Improve error message when worker exits unexpectedly - by [@filmaj](https://github.com/filmaj) and [@AriPerkkio](https://github.com/AriPerkkio) in [#10587](https://github.com/vitest-dev/vitest/issues/10587) [<samp>(76139)</samp>](https://github.com/vitest-dev/vitest/commit/76139c5a0)
- Vm pools to respect cgroupsv2 memory limit - by [@milas](https://github.com/milas) in [#10721](https://github.com/vitest-dev/vitest/issues/10721) [<samp>(3923c)</samp>](https://github.com/vitest-dev/vitest/commit/3923cab3d)
- Worker init to handle queued synchronous messages - by [@lazerg](https://github.com/lazerg) and [@AriPerkkio](https://github.com/AriPerkkio) in [#10932](https://github.com/vitest-dev/vitest/issues/10932) [<samp>(76096)</samp>](https://github.com/vitest-dev/vitest/commit/76096c769)
- Report the worker exit instead of a pipe error that raced it - by [@sheremet-va](https://github.com/sheremet-va) in [#10964](https://github.com/vitest-dev/vitest/issues/10964) [<samp>(59a03)</samp>](https://github.com/vitest-dev/vitest/commit/59a037354)
- **reporter**:
- Guard against non-finite slowTestThreshold in summary reporter - by [@OfekDanny](https://github.com/OfekDanny), **Ofek Danny**, **Claude Opus 5 (1M context)** and [@AriPerkkio](https://github.com/AriPerkkio) in [#10202](https://github.com/vitest-dev/vitest/issues/10202) [<samp>(f362f)</samp>](https://github.com/vitest-dev/vitest/commit/f362f96db)
- Fix non-existing import subpath module blob serialization - by [@hi-ogawa](https://github.com/hi-ogawa) in [#10318](https://github.com/vitest-dev/vitest/issues/10318) [<samp>(29cb0)</samp>](https://github.com/vitest-dev/vitest/commit/29cb06b35)
- **reporters**:
- Fix blob file name with label - by [@hi-ogawa](https://github.com/hi-ogawa) in [#10346](https://github.com/vitest-dev/vitest/issues/10346) [<samp>(c5e2e)</samp>](https://github.com/vitest-dev/vitest/commit/c5e2e7530)
- `summary` to intercept logger's streams even when they are not `process.std*` streams - by [@AriPerkkio](https://github.com/AriPerkkio) in [#10340](https://github.com/vitest-dev/vitest/issues/10340) [<samp>(f79e7)</samp>](https://github.com/vitest-dev/vitest/commit/f79e7db90)
- Fix missing `testModules` in `onTestRunEnd` when merging blobs from different root directory test runs - by [@hi-ogawa](https://github.com/hi-ogawa) and **OpenAI Codex** in [#10348](https://github.com/vitest-dev/vitest/issues/10348) [<samp>(745b3)</samp>](https://github.com/vitest-dev/vitest/commit/745b30b64)
- Print parent describe suites when the passed-test list is hidden - by [@ChihebBENCHEIKH1](https://github.com/ChihebBENCHEIKH1), **Chiheb Bencheikh** and [@sheremet-va](https://github.com/sheremet-va) in [#10606](https://github.com/vitest-dev/vitest/issues/10606) and [#10768](https://github.com/vitest-dev/vitest/issues/10768) [<samp>(658af)</samp…
Description
A fully green run leaks the root
Vitest._tmpDirunderos.tmpdir(). The core workspace project shares the root fetcher (TestProject._createBasicProjectassignsvitest._fetcher), so the per-run tmp module copies land in the root temp directory, but only the per-projectTestProject.tmpDiris removed byTestProject.close().Vitest.close()removes nothing.This mirrors the per-project pattern:
Vitest.close()now removes the root temp directory after the projects and the pool are down (_clearTmpDir(), guarded against a missing path and repeatedclose()). Since_setRootConfig()re-creates the fetcher, a restart after a closed run allocates a fresh directory instead of pointing at a deleted path.Regression test (
test/node-runner/test/root-tmpdir.test.js): runs a tiny fixture with the forks pool whileos.tmpdir()is redirected into a private sandbox, and asserts the sandbox is empty again afterclose(). It fails on currentmain(the leaked nanoid directory is listed) and passes with this change.Fixes #11224 — intent noted in #11224 (comment)
Opened by @abhinav-phi; implementation was assisted by an AI coding agent (ZCode), per the disclosure in CONTRIBUTING.md.
Note on the
Test: unit, node-24, windows-latestcheckThis leg can fail on the
test/uisuite report navigationflake (coordinate-based explorer-row clicks racing the virtual scroller) — the same failure appears onmainand unrelated PRs, and the fix is in #11236. It is unrelated to this change; once #11236 merges, this PR's checks pick the fix up through the merge ref.Checklist
pnpm-lock.yamlunless you introduce a new test example.Tests
pnpm test:ci.Locally ran the affected
test/node-runnersuite (2/2 pass, incl. the existingcli.test.js), targetedtest/unitspecs that importvitest/node(94 pass), pluspnpm typecheckandCI=true pnpm linton the changed files. The fulltest:ciis left to CI.Documentation
pnpm run docscommand.No new user-facing functionality, so no docs changes needed.
Changesets
feat:,fix:,perf:,docs:, orchore:.Review
cc @sheremet-va @AriPerkkio — happy to address any review feedback.