镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

fix(browser): preserve undefined command arguments - #11497

Merged
sheremet-va merged 2 commits into
mainfrom
fix/browser-undefined-command-args
Oct 5, 2026
Merged

sheremet-va merged 2 commits into
mainfrom
fix/browser-undefined-command-args

Conversation

@sheremet-va

@sheremet-va sheremet-va commented Oct 5, 2026 •

Copy link
Copy Markdown
Member

Custom commands dropped undefined arguments, which shifted the following arguments. A null first argument also threw a TypeError in the client.

The browser RPC now keeps undefined values at any depth, the same as the forks and threads pools.

Fixes #10864
Closes #10865

Co-authored-by: Ari Perkkiö <ari.perkkio@gmail.com>
@netlify

netlify Bot commented Oct 5, 2026

Copy link
Copy Markdown

✅ Deploy Preview for vitest-dev ready!

Name Link
🔨 Latest commit b299e82
🔍 Latest deploy log https://app.netlify.com/projects/vitest-dev/deploys/6ac3c9c162e0af00080d55fa
😎 Deploy Preview https://deploy-preview-11497--vitest-dev.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

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

@sheremet-va
sheremet-va merged commit 1576d3d into main Oct 5, 2026
28 of 29 checks passed
@sheremet-va
sheremet-va deleted the fix/browser-undefined-command-args branch October 5, 2026 16:36
the-ult added a commit to ngx-signal-forms/ngx-signal-forms that referenced this pull request Oct 8, 2026
Moves `vitest`, `@vitest/ui`, `@vitest/coverage-v8` and
`@vitest/browser-playwright` from ~4.1.11 to ~5.0.3. The unit tests passed
on 5.0.3 untouched. The toolkit browser target failed (19 files, 100 tests)
for three Vitest 5 changes. Fixes, with the evidence for each:

- Spec rename: in the five toolkit `*.browser.spec.ts` files, the 26
  `toHaveTextContent` calls become `toMatchTextContent`. `@vitest/browser`
  5.0.3 implements `toHaveTextContent` as an exact match (`pass: i===a`,
  typed `string | number`), and moved the partial/RegExp match to
  `toMatchTextContent(string | number | RegExp)`, which is what the specs
  relied on. jsdom specs keep jest-dom's `toHaveTextContent`. This accounts
  for the 21 text-content mismatches.
- `packages/toolkit/test-setup.browser.ts` and
  `packages/toolkit/vitest.browser.config.mts`: the emulation commands send
  a `'reset'` sentinel instead of `null`. `@vitest/browser` 5.0.3 evaluates
  `'selector' in args[0]` on every command call and throws on `null`, so
  `commands.emulateForcedColors(null)` in an `afterEach` threw, the
  emulation and TestBed were never reset, and the failure cascaded into the
  16 "Cannot configure the test module" errors, the colour assertions and
  the axe failures. Fixed upstream by vitest-dev/vitest#11497 (merged
  2026-10-05, not released as of 5.0.3); the workaround is marked for
  removal.
- `packages/toolkit/tsconfig.spec.jsdom.json` and
  `packages/toolkit/tsconfig.spec.browser.json` (new), referenced from
  `packages/toolkit/tsconfig.json`; the `typecheck` target runs both.
  `@testing-library/jest-dom/vitest` augments `Assertion<T>` with the
  Vitest 4 generic order, but Vitest 5 is `Assertion<R, T>`. In one program
  those signatures shadow `@vitest/browser`'s matcher types, so
  `expect.element(...).toX()` resolved to the element instead of a Promise
  and `@typescript-eslint/await-thenable` reported errors on required
  awaits. The two sets of types now live in separate programs.
  `tsconfig.spec.json` is unchanged and still lists every spec, because
  the Analog plugin compiles with it (excluding the browser specs from it
  broke signal inputs at runtime). No lint rule is disabled.
- `.gitignore`: ignore `**/.vitest/`, where Vitest 5 writes failure
  screenshots.

Tried and reverted, no effect: `clearMocks: false`, `sharedViteServer: false`
and `css: true`. `extends: false` does not apply to the standalone
`--config vitest.browser.config.mts` target. The
`'@vitest/mocker>msw': '3'` rule stays: `@vitest/mocker` 5.0.3 still peers
`msw` ^2.4.9.

Evidence: unit and timezone tests, `workspace:coverage`,
lint/typecheck/build and `format:check` exit 0; `toolkit:test-browser` runs
44 files / 308 tests, all passing (4.1.11: 44/308). Lint warning counts
match the baseline in all 13 projects.
the-ult added a commit to ngx-signal-forms/ngx-signal-forms that referenced this pull request Oct 9, 2026
* build(deps): bump nx to 23.3.0

* build(deps): add `@nx/oxlint`

Pin `@nx/oxlint` 23.3.0 in the nx catalog with the other `@nx` packages.

* build(workspace): infer lint targets with `@nx/oxlint`

Register the `@nx/oxlint` plugin and drop the 10 hand-written per-project lint targets. The plugin infers nothing for the root project, so the root `lint` target stays and now skips apps/** and packages/**. `pnpm lint` runs `nx run-many -t lint`.

* build(workspace): hash dependency sources into the `lint` cache key

The type-aware `lint` target depends on types imported from other
projects, but its cache key only hashed the project's own files, so a
toolkit type change left a stale green `demo:lint` cache hit. Add
`^production` to `targetDefaults.lint.inputs` so dependency sources are
hashed.

* build(workspace): drop unused `@angular/build:application` target default

No project resolves a target to that executor, so the `targetDefaults` key
was dead config. `toolkit:build` inputs are unchanged by the removal.

* ci: report task-based affected selection next to project selection

Add a non-blocking step to the `main` job that writes both selections and
the `--explain` reasons to the job summary. Nx 24 will make task-based
affected the default; this shows how its selection would differ on each PR
without changing what gates.

* build(deps): bump `vite`, `postcss` and `eslint-plugin-playwright`

Skip `verdaccio` 6.10.5: pnpm rejects it as a trust downgrade, because it
ships without the provenance attestation that 6.10.3 and 6.10.4 carry.

* build(deps): bump `oxlint`, `oxfmt` and `@oxc-project/runtime`

`oxfmt` 0.72 reflows two Markdown code samples and one CSS `calc` in the
character-count styles. Lint output is unchanged: the same warning count per
project, no new errors.

* build(deps): bump `axe-core` to 4.14

`@axe-core/playwright` 4.13.0 pins its own `axe-core` 4.13.0, so the demo
a11y scan still runs on 4.13. The toolkit `testing/a11y` helper and its
browser specs resolve the new 4.14 and pass.

* build(deps): bump `@spartan-ng/brain` and `@spartan-ng/cli` to 1.6.1

The 1.6.0 and 1.6.1 release notes list an accordion lazy-content feature and
three fixes, with no breaking changes.

* build(deps): keep `axe-core` at 4.13 to match `@axe-core/playwright`

`@axe-core/playwright` 4.13.0 depends on `axe-core` 4.13.0 exactly, so the
4.14 catalog bump left two `axe-core` versions in the lockfile and ran the
demo a11y gate on a different version than the toolkit testing helper.

Restore the `^4.13.0` catalog range. pnpm kept 4.14.0 because it still
satisfies the range, so the lockfile is pinned back to the 4.13.0 entry
that `@axe-core/playwright` already uses.

* ci: exempt the locked `nx` 23.3.0 packages from the release-age gate

The lockfile holds `nx` and `@nx/*` 23.3.0 packages younger than 48 hours, so
a frozen install fails the `minimumReleaseAge` check until 2026-10-09 15:30 UTC.
Exempt those 21 exact `name@version` pins; later Nx releases stay gated.
Remove the block once the window has passed.

* build(workspace): remove the `@nx/dependency-checks` override that Oxlint never runs

Oxlint does not lint JSON files, so the override on `package.json` files
could never report anything. A probe importing the undeclared `shiki` from
the toolkit produced no diagnostic, and per-project warning counts are
unchanged after the removal.

* build(deps): pin `verdaccio` to 6.10.4

6.10.5 has no npm provenance attestation and `trustPolicy: no-downgrade`
rejects it. 6.10.4 carries provenance and is newer than 6.10.3.

* build(deps): bump `vitest` and `@vitest/*` to 5.0.3

Moves `vitest`, `@vitest/ui`, `@vitest/coverage-v8` and
`@vitest/browser-playwright` from ~4.1.11 to ~5.0.3. The unit tests passed
on 5.0.3 untouched. The toolkit browser target failed (19 files, 100 tests)
for three Vitest 5 changes. Fixes, with the evidence for each:

- Spec rename: in the five toolkit `*.browser.spec.ts` files, the 26
  `toHaveTextContent` calls become `toMatchTextContent`. `@vitest/browser`
  5.0.3 implements `toHaveTextContent` as an exact match (`pass: i===a`,
  typed `string | number`), and moved the partial/RegExp match to
  `toMatchTextContent(string | number | RegExp)`, which is what the specs
  relied on. jsdom specs keep jest-dom's `toHaveTextContent`. This accounts
  for the 21 text-content mismatches.
- `packages/toolkit/test-setup.browser.ts` and
  `packages/toolkit/vitest.browser.config.mts`: the emulation commands send
  a `'reset'` sentinel instead of `null`. `@vitest/browser` 5.0.3 evaluates
  `'selector' in args[0]` on every command call and throws on `null`, so
  `commands.emulateForcedColors(null)` in an `afterEach` threw, the
  emulation and TestBed were never reset, and the failure cascaded into the
  16 "Cannot configure the test module" errors, the colour assertions and
  the axe failures. Fixed upstream by vitest-dev/vitest#11497 (merged
  2026-10-05, not released as of 5.0.3); the workaround is marked for
  removal.
- `packages/toolkit/tsconfig.spec.jsdom.json` and
  `packages/toolkit/tsconfig.spec.browser.json` (new), referenced from
  `packages/toolkit/tsconfig.json`; the `typecheck` target runs both.
  `@testing-library/jest-dom/vitest` augments `Assertion<T>` with the
  Vitest 4 generic order, but Vitest 5 is `Assertion<R, T>`. In one program
  those signatures shadow `@vitest/browser`'s matcher types, so
  `expect.element(...).toX()` resolved to the element instead of a Promise
  and `@typescript-eslint/await-thenable` reported errors on required
  awaits. The two sets of types now live in separate programs.
  `tsconfig.spec.json` is unchanged and still lists every spec, because
  the Analog plugin compiles with it (excluding the browser specs from it
  broke signal inputs at runtime). No lint rule is disabled.
- `.gitignore`: ignore `**/.vitest/`, where Vitest 5 writes failure
  screenshots.

Tried and reverted, no effect: `clearMocks: false`, `sharedViteServer: false`
and `css: true`. `extends: false` does not apply to the standalone
`--config vitest.browser.config.mts` target. The
`'@vitest/mocker>msw': '3'` rule stays: `@vitest/mocker` 5.0.3 still peers
`msw` ^2.4.9.

Evidence: unit and timezone tests, `workspace:coverage`,
lint/typecheck/build and `format:check` exit 0; `toolkit:test-browser` runs
44 files / 308 tests, all passing (4.1.11: 44/308). Lint warning counts
match the baseline in all 13 projects.

* ci: pass the affected-selection targets to `nx` as one CSV value

* build(deps): bump `vite` to 8.3.4 and `@spartan-ng/brain` and `cli` to 1.6.3

Bump the tooling catalog `vite` range to ^8.3.4 and the spartan catalog
`@spartan-ng/brain` and `@spartan-ng/cli` to 1.6.3. Add exact `vite@8.3.4`,
`@spartan-ng/brain@1.6.3` and `@spartan-ng/cli@1.6.3` pins to the temporary
`minimumReleaseAgeExclude` block, and move its removal date to 2026-10-10
13:40 UTC. The release-age and trust policy settings are unchanged.

* build(deps): bump `ng-packagr` to 22.2.4

Moves the `angular-build` catalog from `ng-packagr` 22.1.1 to 22.2.4 (published
2026-10-01, past the 48 h release-age gate). 22.2.4 is the newest stable 22.2.x.

The 22.2 line bundles type declarations with `rolldown-plugin-dts` instead of
`rollup-plugin-dts`, so the published-package baseline is regenerated with
`pnpm run check:toolkit-published-package -- --update`.

Evidence that the public surface is unchanged:
- The sorted names in every `export { ... }` block (and every top-level
  `export` declaration) match the old baseline in all 7 changed api-reports
  files: assistive, core.internal, form-field, headless, index, testing, vest.
  Nothing is added or removed.
- The `exports` map and the other package.json fields are identical.
- Declarations are now written with double quotes, and the root `index.d.ts`
  uses `import` plus `export { type ... }` instead of `export { ... } from`.
- `form-field`, `headless` and `vest` now carry extra non-exported internal
  declarations (helpers and internal interfaces) in their bundled `.d.ts`.
- `headless` loses its `@packageDocumentation` comment in the bundled `.d.ts`.
- The tarball no longer ships `fesm2022/ngx-signal-forms-toolkit.mjs.map`. The
  root entry is a pure re-export module and has no `sourceMappingURL`
  reference, so nothing dangles.

Gates: `check-published-package`, `check-package-shape` and `check-size`
(budgets hold), then lint, typecheck, test, test-timezones and build for all
13 projects, the toolkit browser tests (308 passed) and `format:check`. Lint
warning counts equal the baseline, with 0 errors.

* build(deps): bump `axe-core` to 4.14 for the demo scan and the toolkit helper

Moves the `axe` catalog entry for `axe-core` from ^4.13.0 to ^4.14.0 (4.14.0
published 2026-10-05, past the 48 h release-age gate). `@axe-core/playwright`
stays at ^4.13.0.

`@axe-core/playwright` 4.13.0 depends on `axe-core` ~4.13.0, so it would keep a
second copy of 4.13. A pnpm override, `@axe-core/playwright>axe-core: ^4.14.0`,
makes the wrapper use 4.14 too. The lockfile now has a single `axe-core`
version, 4.14.0.

The demo accessibility scan (`demo-e2e:a11y`) ran on 4.14: 56 passed, no new
violations, and the a11y baseline file is untouched. `check-a11y-report-violations`,
lint, typecheck, test, test-timezones, build, the toolkit browser tests (308
passed) and `format:check` also pass. Lint warning counts equal the baseline,
with 0 errors.

* build(deps): revert the `axe-core` 4.14 bump, it adds 28 `label-content-name-mismatch` violations in CI

axe-core 4.14 evaluates WCAG 2.5.3 Label in Name on 28 demo pages (chromium and firefox) that 4.13 does not flag. The a11y gate has an empty baseline, so the bump is reverted until the demo labels are fixed. `@axe-core/playwright` 4.13.0 depends on `axe-core` ~4.13.0 anyway.

* build(workspace): keep the plugin's lint inputs via the `...` spread token

The `lint` entry in `targetDefaults` listed `default` as its first input. A target-name default replaces the inputs the `@nx/oxlint` plugin infers, so the plugin's `externalDependencies: ['oxlint']` input, its ancestor ignore-file inputs and its tsconfig-chain inputs were dropped, and an `oxlint` upgrade would not invalidate the lint cache.

Start the list with `...` so Nx splices the inferred inputs in at that position. `^production` and the `oxlint.config.ts` input stay as before.

* build(workspace): drop stale `Vitest 4` leftovers

Remove the unused `screenshotDirectory` browser option and the
`.vitest-attachments` ignore entry, and point the `vite.config.mts` and
`vitest.coverage.config.mts` comments at the Vitest 5 migration guide.

* test(toolkit): print the `aria` tree on browser locator failures

Set `browser.locators.errorFormat` to `aria` in `vitest.browser.config.mts`
so a missing-element failure shows the accessibility tree instead of both
the raw HTML and the tree.

* test(toolkit): write a single-file `html` Vitest report in CI

Add the `html` reporter with `singleFile` when `CI` is set, one directory per
run under `.vitest/` so the jsdom and browser runs do not overwrite each
other. Upload the reports from the `ci.yml` job when it fails.

* test(toolkit): record `traceView` for browser specs in CI

Enable the experimental `browser.traceView` only when `CI` is set. The
traces ride in the `html` report written under `.vitest/report-browser/`.

* docs(testing): show how to repeat a test with `--repeats`
renovate Bot added a commit to cigaleapp/cigale that referenced this pull request Oct 19, 2026
##### [v5.0.4](https://github.com/vitest-dev/vitest/releases/tag/v5.0.4)

#####    🚀 Features

- **experimental**:
  - Tag cache directories with CACHEDIR.TAG  -  by [@lifeiscontent](https://github.com/lifeiscontent) in [#11461](vitest-dev/vitest#11461) [<samp>(a8ea3)</samp>](vitest-dev/vitest@a8ea3c8fd)
  - Support `test.ui.theme` option  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11499](vitest-dev/vitest#11499) [<samp>(1da66)</samp>](vitest-dev/vitest@1da66405d)
  - Highlight selector multiple matches in trace view  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude Opus 5.5** in [#11489](vitest-dev/vitest#11489) [<samp>(5abba)</samp>](vitest-dev/vitest@5abba1e1b)
  - Print how many tests were affected and a total when running `--changed`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11424](vitest-dev/vitest#11424) [<samp>(a2336)</samp>](vitest-dev/vitest@a23368585)
  - Add an option to cache dependencies instead of statically parsing them  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11515](vitest-dev/vitest#11515) [<samp>(c0601)</samp>](vitest-dev/vitest@c06012ac8)
  - Add fit and zoom controls to trace viewer  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude Opus 5.5** in [#11490](vitest-dev/vitest#11490) [<samp>(f5dd9)</samp>](vitest-dev/vitest@f5dd99ed0)

#####    🐞 Bug Fixes

- Fail the run on git and location filter errors  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11430](vitest-dev/vitest#11430) [<samp>(30d03)</samp>](vitest-dev/vitest@30d0304d2)
- Enable fsModuleCache by default  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11435](vitest-dev/vitest#11435) [<samp>(ad208)</samp>](vitest-dev/vitest@ad208cc29)
- Track project files and mocks with --changed  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11432](vitest-dev/vitest#11432) [<samp>(b0f2b)</samp>](vitest-dev/vitest@b0f2b3bb9)
- Refactor caching, fix `:` in project and change the shape of `results` cache  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11453](vitest-dev/vitest#11453) [<samp>(9673c)</samp>](vitest-dev/vitest@9673c49a4)
- Keep full `$` string values when `taskTitleValueFormatTruncate` is 0  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude Opus 5.5** in [#11485](vitest-dev/vitest#11485) [<samp>(4f7e1)</samp>](vitest-dev/vitest@4f7e1799b)
- Resolve node builtins in client environments  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11417](vitest-dev/vitest#11417) [<samp>(56b31)</samp>](vitest-dev/vitest@56b319ac6)
- Fix module graph builtin externals after [#11421](vitest-dev/vitest#11421)  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude Opus 5.5** in [#11491](vitest-dev/vitest#11491) and [#11421](vitest-dev/vitest#11421) [<samp>(008e1)</samp>](vitest-dev/vitest@008e184cb)
- Wrap module mocks during in-source testing  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11505](vitest-dev/vitest#11505) [<samp>(36d19)</samp>](vitest-dev/vitest@36d19cb00)
- Handle line endings in snapshot  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11522](vitest-dev/vitest#11522) [<samp>(4c468)</samp>](vitest-dev/vitest@4c468aa40)
- Respect root in projects  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11521](vitest-dev/vitest#11521) [<samp>(26642)</samp>](vitest-dev/vitest@26642f793)
- Resolve mocks in directories with spaces  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11539](vitest-dev/vitest#11539) [<samp>(caaef)</samp>](vitest-dev/vitest@caaef9416)
- **api**:
  - Publish the api token atomically  -  by [@umairnawaz333](https://github.com/umairnawaz333) in [#11323](vitest-dev/vitest#11323) [<samp>(6f990)</samp>](vitest-dev/vitest@6f990fef1)
- **browser**:
  - Close the mock route interception race  -  by [@cplieger](https://github.com/cplieger) and [@sheremet-va](https://github.com/sheremet-va) in [#8339](vitest-dev/vitest#8339) and [#11083](vitest-dev/vitest#11083) [<samp>(d6620)</samp>](vitest-dev/vitest@d6620fae6)
  - Allow toHaveTextContent without arguments  -  by [@nomadical](https://github.com/nomadical) in [#11425](vitest-dev/vitest#11425) [<samp>(8ebcf)</samp>](vitest-dev/vitest@8ebcf5f8a)
  - Apply API options without browser config  -  by [@sheremet-va](https://github.com/sheremet-va) in [#10852](vitest-dev/vitest#10852) [<samp>(ad055)</samp>](vitest-dev/vitest@ad055837b)
  - Preserve undefined command arguments  -  by [@sheremet-va](https://github.com/sheremet-va) and [@AriPerkkio](https://github.com/AriPerkkio) in [#11497](vitest-dev/vitest#11497) [<samp>(1576d)</samp>](vitest-dev/vitest@1576d3d89)
  - Wait for setup mocks before importing a test file  -  by [@kasperpeulen](https://github.com/kasperpeulen) in [#11520](vitest-dev/vitest#11520) [<samp>(b61d1)</samp>](vitest-dev/vitest@b61d1ced3)
  - Avoid extra scroll outside the iframe  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11523](vitest-dev/vitest#11523) [<samp>(662e8)</samp>](vitest-dev/vitest@662e8a363)
  - Run browser instances as workers  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11525](vitest-dev/vitest#11525) [<samp>(bf04b)</samp>](vitest-dev/vitest@bf04b9ccc)
    - ⚠️ This can degrade performance if you have a custom `maxWorkers` setting. Previously, it was applied incorrectly and could lead to Vitest using too many resources. For example, a lower number would still open too many browsers. Fixing it means Vitest opens less instances by default now.
  - Open one cdp session per tester  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11542](vitest-dev/vitest#11542) [<samp>(69e63)</samp>](vitest-dev/vitest@69e6369f6)
  - Clean up unmocked and pending mocks  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11537](vitest-dev/vitest#11537) [<samp>(5c955)</samp>](vitest-dev/vitest@5c9552173)
- **coverage**:
  - V8 browser memory leak between test files  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#11466](vitest-dev/vitest#11466) [<samp>(2297d)</samp>](vitest-dev/vitest@2297d93a8)
  - `allowExternal` fails to include uncovered files  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#11513](vitest-dev/vitest#11513) [<samp>(4ef00)</samp>](vitest-dev/vitest@4ef000a93)
  - Filenames containing brackets incorrectly showing as uncovered  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#11531](vitest-dev/vitest#11531) [<samp>(0fa80)</samp>](vitest-dev/vitest@0fa80f53c)
  - Istanbul coverage wrong when module transform warmups  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#11529](vitest-dev/vitest#11529) [<samp>(9f61d)</samp>](vitest-dev/vitest@9f61dcca2)
- **deps**:
  - Update all non-major dependencies  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11167](vitest-dev/vitest#11167) [<samp>(c74e0)</samp>](vitest-dev/vitest@c74e099a9)
- **expect**:
  - Fix `Map` and `Set` deep equality in some assertions  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude Opus 5.5** in [#11402](vitest-dev/vitest#11402) [<samp>(b4e79)</samp>](vitest-dev/vitest@b4e79fd7a)
  - Check value in chai-style returned  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11500](vitest-dev/vitest#11500) [<samp>(1aca0)</samp>](vitest-dev/vitest@1aca02a21)
- **mocker**:
  - Fix native loader mocking edge cases  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11540](vitest-dev/vitest#11540) [<samp>(cd423)</samp>](vitest-dev/vitest@cd423ba04)
- **pretty-format**:
  - Support boxed symbols  -  by [@lehni](https://github.com/lehni) in [#11445](vitest-dev/vitest#11445) and [#11446](vitest-dev/vitest#11446) [<samp>(eba44)</samp>](vitest-dev/vitest@eba44926e)
- **reporters**:
  - Junit to strip ANSI sequences from all XML attributes  -  by [@meganemura](https://github.com/meganemura) and **Claude Opus 5.5** in [#11407](vitest-dev/vitest#11407) [<samp>(e1a73)</samp>](vitest-dev/vitest@e1a731470)
- **runner**:
  - Don't cache failed fixture setups  -  by [@hamed-bavar](https://github.com/hamed-bavar) in [#11237](vitest-dev/vitest#11237) and [#11238](vitest-dev/vitest#11238) [<samp>(4ee66)</samp>](vitest-dev/vitest@4ee66c021)
- **typecheck**:
  - Use typescript pool in toTestSpecification  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11451](vitest-dev/vitest#11451) [<samp>(5f273)</samp>](vitest-dev/vitest@5f2739e74)
- **ui**:
  - Remove duplicate browser-open call opening two tabs  -  by [@feastyr69](https://github.com/feastyr69) in [#11356](vitest-dev/vitest#11356) and [#11358](vitest-dev/vitest#11358) [<samp>(d7e13)</samp>](vitest-dev/vitest@d7e1315c1)
  - Simplify explorer filtering + fix nested tests when search matches a suite  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa**, **Codex** and **Claude Opus 5.5** in [#11262](vitest-dev/vitest#11262) [<samp>(a627b)</samp>](vitest-dev/vitest@a627be498)
  - Store module graph once per environment  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude Opus 5.5** in [#11421](vitest-dev/vitest#11421) [<samp>(af903)</samp>](vitest-dev/vitest@af903c65e)
  - Mount index.html handler on the ui base path  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude Opus 5.5** in [#11517](vitest-dev/vitest#11517) [<samp>(1bc24)</samp>](vitest-dev/vitest@1bc2495c7)
  - Center split pane resize handle  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude Opus 5.5** in [#11506](vitest-dev/vitest#11506) [<samp>(e658b)</samp>](vitest-dev/vitest@e658b9b6a)
- **vm**:
  - Bind `this` to `module.exports`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11504](vitest-dev/vitest#11504) [<samp>(b618a)</samp>](vitest-dev/vitest@b618afd5c)

#####    🏎 Performance

- Reuse fsModuleCache when filtering by source  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11428](vitest-dev/vitest#11428) [<samp>(7ebd9)</samp>](vitest-dev/vitest@7ebd95fdd)
- **spy**: Reset only mocks that were called or reconfigured  -  by [@johan-gorter](https://github.com/johan-gorter) and **Claude Opus 5.5** in [#11197](vitest-dev/vitest#11197) [<samp>(28ef9)</samp>](vitest-dev/vitest@28ef93df2)

#####     [View changes on GitHub](vitest-dev/vitest@v5.0.3...v5.0.4)
renovate Bot added a commit to cigaleapp/cigale that referenced this pull request Oct 19, 2026
##### [v5.0.4](https://github.com/vitest-dev/vitest/releases/tag/v5.0.4)

#####    🚀 Features

- **experimental**:
  - Tag cache directories with CACHEDIR.TAG  -  by [@lifeiscontent](https://github.com/lifeiscontent) in [#11461](https://github.com/vitest-dev/vitest/issues/11461) [<samp>(a8ea3)</samp>](https://github.com/vitest-dev/vitest/commit/a8ea3c8fd)
  - Support `test.ui.theme` option  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11499](https://github.com/vitest-dev/vitest/issues/11499) [<samp>(1da66)</samp>](https://github.com/vitest-dev/vitest/commit/1da66405d)
  - Highlight selector multiple matches in trace view  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude Opus 5.5** in [#11489](https://github.com/vitest-dev/vitest/issues/11489) [<samp>(5abba)</samp>](https://github.com/vitest-dev/vitest/commit/5abba1e1b)
  - Print how many tests were affected and a total when running `--changed`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11424](https://github.com/vitest-dev/vitest/issues/11424) [<samp>(a2336)</samp>](https://github.com/vitest-dev/vitest/commit/a23368585)
  - Add an option to cache dependencies instead of statically parsing them  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11515](https://github.com/vitest-dev/vitest/issues/11515) [<samp>(c0601)</samp>](https://github.com/vitest-dev/vitest/commit/c06012ac8)
  - Add fit and zoom controls to trace viewer  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude Opus 5.5** in [#11490](https://github.com/vitest-dev/vitest/issues/11490) [<samp>(f5dd9)</samp>](https://github.com/vitest-dev/vitest/commit/f5dd99ed0)

#####    🐞 Bug Fixes

- Fail the run on git and location filter errors  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11430](https://github.com/vitest-dev/vitest/issues/11430) [<samp>(30d03)</samp>](https://github.com/vitest-dev/vitest/commit/30d0304d2)
- Enable fsModuleCache by default  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11435](https://github.com/vitest-dev/vitest/issues/11435) [<samp>(ad208)</samp>](https://github.com/vitest-dev/vitest/commit/ad208cc29)
- Track project files and mocks with --changed  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11432](https://github.com/vitest-dev/vitest/issues/11432) [<samp>(b0f2b)</samp>](https://github.com/vitest-dev/vitest/commit/b0f2b3bb9)
- Refactor caching, fix `:` in project and change the shape of `results` cache  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11453](https://github.com/vitest-dev/vitest/issues/11453) [<samp>(9673c)</samp>](https://github.com/vitest-dev/vitest/commit/9673c49a4)
- Keep full `$` string values when `taskTitleValueFormatTruncate` is 0  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude Opus 5.5** in [#11485](https://github.com/vitest-dev/vitest/issues/11485) [<samp>(4f7e1)</samp>](https://github.com/vitest-dev/vitest/commit/4f7e1799b)
- Resolve node builtins in client environments  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11417](https://github.com/vitest-dev/vitest/issues/11417) [<samp>(56b31)</samp>](https://github.com/vitest-dev/vitest/commit/56b319ac6)
- Fix module graph builtin externals after [#11421](https://github.com/vitest-dev/vitest/issues/11421)  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude Opus 5.5** in [#11491](https://github.com/vitest-dev/vitest/issues/11491) and [#11421](https://github.com/vitest-dev/vitest/issues/11421) [<samp>(008e1)</samp>](https://github.com/vitest-dev/vitest/commit/008e184cb)
- Wrap module mocks during in-source testing  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11505](https://github.com/vitest-dev/vitest/issues/11505) [<samp>(36d19)</samp>](https://github.com/vitest-dev/vitest/commit/36d19cb00)
- Handle line endings in snapshot  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11522](https://github.com/vitest-dev/vitest/issues/11522) [<samp>(4c468)</samp>](https://github.com/vitest-dev/vitest/commit/4c468aa40)
- Respect root in projects  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11521](https://github.com/vitest-dev/vitest/issues/11521) [<samp>(26642)</samp>](https://github.com/vitest-dev/vitest/commit/26642f793)
- Resolve mocks in directories with spaces  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11539](https://github.com/vitest-dev/vitest/issues/11539) [<samp>(caaef)</samp>](https://github.com/vitest-dev/vitest/commit/caaef9416)
- **api**:
  - Publish the api token atomically  -  by [@umairnawaz333](https://github.com/umairnawaz333) in [#11323](https://github.com/vitest-dev/vitest/issues/11323) [<samp>(6f990)</samp>](https://github.com/vitest-dev/vitest/commit/6f990fef1)
- **browser**:
  - Close the mock route interception race  -  by [@cplieger](https://github.com/cplieger) and [@sheremet-va](https://github.com/sheremet-va) in [#8339](https://github.com/vitest-dev/vitest/issues/8339) and [#11083](https://github.com/vitest-dev/vitest/issues/11083) [<samp>(d6620)</samp>](https://github.com/vitest-dev/vitest/commit/d6620fae6)
  - Allow toHaveTextContent without arguments  -  by [@nomadical](https://github.com/nomadical) in [#11425](https://github.com/vitest-dev/vitest/issues/11425) [<samp>(8ebcf)</samp>](https://github.com/vitest-dev/vitest/commit/8ebcf5f8a)
  - Apply API options without browser config  -  by [@sheremet-va](https://github.com/sheremet-va) in [#10852](https://github.com/vitest-dev/vitest/issues/10852) [<samp>(ad055)</samp>](https://github.com/vitest-dev/vitest/commit/ad055837b)
  - Preserve undefined command arguments  -  by [@sheremet-va](https://github.com/sheremet-va) and [@AriPerkkio](https://github.com/AriPerkkio) in [#11497](https://github.com/vitest-dev/vitest/issues/11497) [<samp>(1576d)</samp>](https://github.com/vitest-dev/vitest/commit/1576d3d89)
  - Wait for setup mocks before importing a test file  -  by [@kasperpeulen](https://github.com/kasperpeulen) in [#11520](https://github.com/vitest-dev/vitest/issues/11520) [<samp>(b61d1)</samp>](https://github.com/vitest-dev/vitest/commit/b61d1ced3)
  - Avoid extra scroll outside the iframe  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11523](https://github.com/vitest-dev/vitest/issues/11523) [<samp>(662e8)</samp>](https://github.com/vitest-dev/vitest/commit/662e8a363)
  - Run browser instances as workers  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11525](https://github.com/vitest-dev/vitest/issues/11525) [<samp>(bf04b)</samp>](https://github.com/vitest-dev/vitest/commit/bf04b9ccc)
    - ⚠️ This can degrade performance if you have a custom `maxWorkers` setting. Previously, it was applied incorrectly and could lead to Vitest using too many resources. For example, a lower number would still open too many browsers. Fixing it means Vitest opens less instances by default now.
  - Open one cdp session per tester  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11542](https://github.com/vitest-dev/vitest/issues/11542) [<samp>(69e63)</samp>](https://github.com/vitest-dev/vitest/commit/69e6369f6)
  - Clean up unmocked and pending mocks  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11537](https://github.com/vitest-dev/vitest/issues/11537) [<samp>(5c955)</samp>](https://github.com/vitest-dev/vitest/commit/5c9552173)
- **coverage**:
  - V8 browser memory leak between test files  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#11466](https://github.com/vitest-dev/vitest/issues/11466) [<samp>(2297d)</samp>](https://github.com/vitest-dev/vitest/commit/2297d93a8)
  - `allowExternal` fails to include uncovered files  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#11513](https://github.com/vitest-dev/vitest/issues/11513) [<samp>(4ef00)</samp>](https://github.com/vitest-dev/vitest/commit/4ef000a93)
  - Filenames containing brackets incorrectly showing as uncovered  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#11531](https://github.com/vitest-dev/vitest/issues/11531) [<samp>(0fa80)</samp>](https://github.com/vitest-dev/vitest/commit/0fa80f53c)
  - Istanbul coverage wrong when module transform warmups  -  by [@AriPerkkio](https://github.com/AriPerkkio) in [#11529](https://github.com/vitest-dev/vitest/issues/11529) [<samp>(9f61d)</samp>](https://github.com/vitest-dev/vitest/commit/9f61dcca2)
- **deps**:
  - Update all non-major dependencies  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11167](https://github.com/vitest-dev/vitest/issues/11167) [<samp>(c74e0)</samp>](https://github.com/vitest-dev/vitest/commit/c74e099a9)
- **expect**:
  - Fix `Map` and `Set` deep equality in some assertions  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude Opus 5.5** in [#11402](https://github.com/vitest-dev/vitest/issues/11402) [<samp>(b4e79)</samp>](https://github.com/vitest-dev/vitest/commit/b4e79fd7a)
  - Check value in chai-style returned  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11500](https://github.com/vitest-dev/vitest/issues/11500) [<samp>(1aca0)</samp>](https://github.com/vitest-dev/vitest/commit/1aca02a21)
- **mocker**:
  - Fix native loader mocking edge cases  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11540](https://github.com/vitest-dev/vitest/issues/11540) [<samp>(cd423)</samp>](https://github.com/vitest-dev/vitest/commit/cd423ba04)
- **pretty-format**:
  - Support boxed symbols  -  by [@lehni](https://github.com/lehni) in [#11445](https://github.com/vitest-dev/vitest/issues/11445) and [#11446](https://github.com/vitest-dev/vitest/issues/11446) [<samp>(eba44)</samp>](https://github.com/vitest-dev/vitest/commit/eba44926e)
- **reporters**:
  - Junit to strip ANSI sequences from all XML attributes  -  by [@meganemura](https://github.com/meganemura) and **Claude Opus 5.5** in [#11407](https://github.com/vitest-dev/vitest/issues/11407) [<samp>(e1a73)</samp>](https://github.com/vitest-dev/vitest/commit/e1a731470)
- **runner**:
  - Don't cache failed fixture setups  -  by [@hamed-bavar](https://github.com/hamed-bavar) in [#11237](https://github.com/vitest-dev/vitest/issues/11237) and [#11238](https://github.com/vitest-dev/vitest/issues/11238) [<samp>(4ee66)</samp>](https://github.com/vitest-dev/vitest/commit/4ee66c021)
- **typecheck**:
  - Use typescript pool in toTestSpecification  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11451](https://github.com/vitest-dev/vitest/issues/11451) [<samp>(5f273)</samp>](https://github.com/vitest-dev/vitest/commit/5f2739e74)
- **ui**:
  - Remove duplicate browser-open call opening two tabs  -  by [@feastyr69](https://github.com/feastyr69) in [#11356](https://github.com/vitest-dev/vitest/issues/11356) and [#11358](https://github.com/vitest-dev/vitest/issues/11358) [<samp>(d7e13)</samp>](https://github.com/vitest-dev/vitest/commit/d7e1315c1)
  - Simplify explorer filtering + fix nested tests when search matches a suite  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa**, **Codex** and **Claude Opus 5.5** in [#11262](https://github.com/vitest-dev/vitest/issues/11262) [<samp>(a627b)</samp>](https://github.com/vitest-dev/vitest/commit/a627be498)
  - Store module graph once per environment  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude Opus 5.5** in [#11421](https://github.com/vitest-dev/vitest/issues/11421) [<samp>(af903)</samp>](https://github.com/vitest-dev/vitest/commit/af903c65e)
  - Mount index.html handler on the ui base path  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude Opus 5.5** in [#11517](https://github.com/vitest-dev/vitest/issues/11517) [<samp>(1bc24)</samp>](https://github.com/vitest-dev/vitest/commit/1bc2495c7)
  - Center split pane resize handle  -  by [@hi-ogawa](https://github.com/hi-ogawa), **Hiroshi Ogawa** and **Claude Opus 5.5** in [#11506](https://github.com/vitest-dev/vitest/issues/11506) [<samp>(e658b)</samp>](https://github.com/vitest-dev/vitest/commit/e658b9b6a)
- **vm**:
  - Bind `this` to `module.exports`  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11504](https://github.com/vitest-dev/vitest/issues/11504) [<samp>(b618a)</samp>](https://github.com/vitest-dev/vitest/commit/b618afd5c)

#####    🏎 Performance

- Reuse fsModuleCache when filtering by source  -  by [@sheremet-va](https://github.com/sheremet-va) in [#11428](https://github.com/vitest-dev/vitest/issues/11428) [<samp>(7ebd9)</samp>](https://github.com/vitest-dev/vitest/commit/7ebd95fdd)
- **spy**: Reset only mocks that were called or reconfigured  -  by [@johan-gorter](https://github.com/johan-gorter) and **Claude Opus 5.5** in [#11197](https://github.com/vitest-dev/vitest/issues/11197) [<samp>(28ef9)</samp>](https://github.com/vitest-dev/vitest/commit/28ef93df2)

#####     [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v5.0.3...v5.0.4)
##### [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/vite…
@github-actions github-actions Bot locked and limited conversation to collaborators Oct 20, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Custom commands shifts arguments when any value is undefined

1 participant