fix: use separate hook object for each environment#21472
Merged
sapphi-red merged 2 commits intoJan 23, 2026
Merged
Conversation
Member
Author
|
/ecosystem-ci run |
commit: |
|
📝 Ran ecosystem CI on
✅ ladle, quasar, vite-plugin-vue, vite-environment-examples, vitepress, vite-plugin-svelte, vite-setup-catalogue, unocss, vuepress, marko, vite-plugin-rsc |
|
has this been released?! :) |
|
@wiesson it was released in beta 10 already ( 1 hour ago ) |
|
I have already deployed to prod and the issue has been resolved! |
Thiladev
pushed a commit
to Thiladev/effect-fc
that referenced
this pull request
Mar 16, 2026
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [vite](https://vite.dev) ([source](https://github.com/vitejs/vite/tree/HEAD/packages/vite)) | [`^7.3.1` → `^8.0.0`](https://renovatebot.com/diffs/npm/vite/7.3.1/8.0.0) |  |  | --- ### Release Notes <details> <summary>vitejs/vite (vite)</summary> ### [`v8.0.0`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#800-2026-03-12) [Compare Source](vitejs/vite@v7.3.1...v8.0.0)  Today, we're thrilled to announce the release of the next Vite major: - **[Vite 8.0 announcement blog post](https://vite.dev/blog/announcing-vite8.html)** - [Docs](https://vite.dev/) (translations: [简体中文](https://cn.vite.dev/), [日本語](https://ja.vite.dev/), [Español](https://es.vite.dev/), [Português](https://pt.vite.dev/), [한국어](https://ko.vite.dev/), [Deutsch](https://de.vite.dev/), [فارسی](https://fa.vite.dev/)) - [Migration Guide](https://vite.dev/guide/migration.html) ##### ⚠ BREAKING CHANGES - remove `import.meta.hot.accept` resolution fallback ([#​21382](vitejs/vite#21382)) - update default browser target ([#​21193](vitejs/vite#21193)) - the epic `rolldown-vite` merge ([#​21189](vitejs/vite#21189)) ##### Features - update rolldown to 1.0.0-rc.9 ([#​21813](vitejs/vite#21813)) ([f05be0e](vitejs/vite@f05be0e)) - warn when `vite-tsconfig-paths` plugin is detected ([#​21781](vitejs/vite#21781)) ([ada493e](vitejs/vite@ada493e)) - **css:** support es2025 build target for lightningcss ([#​21769](vitejs/vite#21769)) ([08906e7](vitejs/vite@08906e7)) - forward browser console logs and errors to dev server terminal ([#​20916](vitejs/vite#20916)) ([2540ed0](vitejs/vite@2540ed0)) - update rolldown to 1.0.0-rc.8 ([#​21790](vitejs/vite#21790)) ([a0c950e](vitejs/vite@a0c950e)) - export `Visitor` and `ESTree` from `rolldown/utils` ([#​21664](vitejs/vite#21664)) ([45de31e](vitejs/vite@45de31e)) - update rolldown to 1.0.0-rc.6 ([#​21714](vitejs/vite#21714)) ([37a65f8](vitejs/vite@37a65f8)) - use util.inspect for CLI error display ([#​21668](vitejs/vite#21668)) ([5f425a9](vitejs/vite@5f425a9)) - update rolldown to 1.0.0-rc.5 ([#​21660](vitejs/vite#21660)) ([b3ddbc5](vitejs/vite@b3ddbc5)) - update rolldown to 1.0.0-rc.4 ([#​21617](vitejs/vite#21617)) ([1ee5c7f](vitejs/vite@1ee5c7f)) - **wasm:** add SSR support for `.wasm?init` ([#​21102](vitejs/vite#21102)) ([216a3b5](vitejs/vite@216a3b5)) - integrate devtools ([#​21331](vitejs/vite#21331)) ([acbf507](vitejs/vite@acbf507)) - update rolldown to 1.0.0-rc.3 ([#​21554](vitejs/vite#21554)) ([43358e9](vitejs/vite@43358e9)) - **manifest:** add `assets` field for standalone CSS entry points ([#​21015](vitejs/vite#21015)) ([f289b9b](vitejs/vite@f289b9b)) - update rolldown to 1.0.0-rc.2 ([#​21512](vitejs/vite#21512)) ([fa136a9](vitejs/vite@fa136a9)) - **bundled-dev:** support worker in initial bundle ([#​21415](vitejs/vite#21415)) ([f3d3149](vitejs/vite@f3d3149)) - **dev:** detect port conflicts on wildcard hosts ([#​21381](vitejs/vite#21381)) ([b0dd5a9](vitejs/vite@b0dd5a9)) - shortcuts case insensitive ([#​21224](vitejs/vite#21224)) ([7796ade](vitejs/vite@7796ade)) - update rolldown to 1.0.0-rc.1 ([#​21463](vitejs/vite#21463)) ([ff9dd7f](vitejs/vite@ff9dd7f)) - warn if `envPrefix` contains spaces ([#​21292](vitejs/vite#21292)) ([9fcde3c](vitejs/vite@9fcde3c)) - update rolldown to 1.0.0-beta.60 ([#​21408](vitejs/vite#21408)) ([c33aa7c](vitejs/vite@c33aa7c)) - update rolldown to 1.0.0-beta.59 ([#​21374](vitejs/vite#21374)) ([0037943](vitejs/vite@0037943)) - add `ignoreOutdatedRequests` option to `optimizeDeps` ([#​21364](vitejs/vite#21364)) ([b2e75aa](vitejs/vite@b2e75aa)) - add ios to default esbuild targets ([#​21342](vitejs/vite#21342)) ([daae6e9](vitejs/vite@daae6e9)) - update rolldown to 1.0.0-beta.58 ([#​21354](vitejs/vite#21354)) ([ba40cef](vitejs/vite@ba40cef)) - update rolldown to 1.0.0-beta.57 ([#​21335](vitejs/vite#21335)) ([d5412ef](vitejs/vite@d5412ef)) - **css:** support es2024 build target for lightningcss ([#​21294](vitejs/vite#21294)) ([bd33b8e](vitejs/vite@bd33b8e)) - update rolldown to 1.0.0-beta.56 ([#​21323](vitejs/vite#21323)) ([9847a63](vitejs/vite@9847a63)) - introduce v2 native plugins and enable it by default ([#​21268](vitejs/vite#21268)) ([42f2ab3](vitejs/vite@42f2ab3)) - **ssr:** avoid errors when rewriting already rewritten stacktrace ([#​21269](vitejs/vite#21269)) ([98d9a33](vitejs/vite@98d9a33)) - update rolldown to 1.0.0-beta.55 ([#​21300](vitejs/vite#21300)) ([2c8db85](vitejs/vite@2c8db85)) - update rolldown to 1.0.0-beta.54 ([#​21267](vitejs/vite#21267)) ([c751172](vitejs/vite@c751172)) - add a warning that is output when a plugin sets esbuild related options ([#​21218](vitejs/vite#21218)) ([200646b](vitejs/vite@200646b)) - highly experimental full bundle mode ([#​21235](vitejs/vite#21235)) ([83d8c99](vitejs/vite@83d8c99)) - print esbuild options when both esbuild and oxc options are set ([#​21216](vitejs/vite#21216)) ([08ae87b](vitejs/vite@08ae87b)) - update default browser target ([#​21193](vitejs/vite#21193)) ([8c3dd06](vitejs/vite@8c3dd06)) - the epic `rolldown-vite` merge ([#​21189](vitejs/vite#21189)) ([4a7f8d4](vitejs/vite@4a7f8d4)) ##### Bug Fixes - **deps:** update all non-major dependencies ([#​21786](vitejs/vite#21786)) ([eaa4352](vitejs/vite@eaa4352)) - use `watch.watcher` instead of `watch.notify` ([#​21793](vitejs/vite#21793)) ([88953b3](vitejs/vite@88953b3)) - **css:** apply `server.origin` to public file URLs in CSS (fix [#​18457](vitejs/vite#18457)) ([#​21697](vitejs/vite#21697)) ([c967f48](vitejs/vite@c967f48)) - **deps:** update all non-major dependencies ([#​21732](vitejs/vite#21732)) ([5c921ca](vitejs/vite@5c921ca)) - **dev:** disable extglobs for consistency ([#​21745](vitejs/vite#21745)) ([1958eeb](vitejs/vite@1958eeb)) - **lib:** keep annotation comments for es output ([#​21740](vitejs/vite#21740)) ([dd3c4f4](vitejs/vite@dd3c4f4)) - **optimizer:** avoid error happening with a package with asset entrypoint ([#​21766](vitejs/vite#21766)) ([f7e1d07](vitejs/vite@f7e1d07)) - **ssr:** throw friendly error when calling `ssrLoadModule` with non-runnable ssr env ([#​21739](vitejs/vite#21739)) ([1fa736e](vitejs/vite@1fa736e)) - **types:** remove extends ImportMeta from ModuleRunnerImportMeta ([#​21710](vitejs/vite#21710)) ([0176d45](vitejs/vite@0176d45)) - **wasm:** reset assetUrlRE.lastIndex before .test() in SSR builds ([#​21780](vitejs/vite#21780)) ([3a0d8d9](vitejs/vite@3a0d8d9)) - **deps:** update all non-major dependencies ([#​21691](vitejs/vite#21691)) ([521fdc0](vitejs/vite@521fdc0)) - **optimizer:** avoid duplicate modules when `preserveSymlinks` is enabled ([#​21720](vitejs/vite#21720)) ([72165e0](vitejs/vite@72165e0)) - **dev:** only treat EADDRINUSE as port conflict in wildcard pre-check ([#​21642](vitejs/vite#21642)) ([e54e25f](vitejs/vite@e54e25f)) - **dev:** prevent concurrent server restarts ([#​21636](vitejs/vite#21636)) ([8ce23a3](vitejs/vite@8ce23a3)) - **dev:** return "502 Bad Gateway" on proxy failures instead of 500 ([#​21652](vitejs/vite#21652)) ([e240df2](vitejs/vite@e240df2)) - clear tsconfig cache only when tsconfig.json is cached ([#​21622](vitejs/vite#21622)) ([50c9675](vitejs/vite@50c9675)) - **deps:** update all non-major dependencies ([#​21594](vitejs/vite#21594)) ([becdc5d](vitejs/vite@becdc5d)) - **lib:** CSS injection point error with nested name IIFE output ([#​21606](vitejs/vite#21606)) ([5003de6](vitejs/vite@5003de6)) - **module-runner:** incorrect column with `sourcemapInterceptor: "prepareStackTrace"` ([#​21562](vitejs/vite#21562)) ([416c095](vitejs/vite@416c095)) - **module-runner:** prevent crash on negative column in stacktrace ([#​21585](vitejs/vite#21585)) ([a075590](vitejs/vite@a075590)) - rolldownOptions/rollupOptions merging at environment level ([#​21612](vitejs/vite#21612)) ([db2ecc7](vitejs/vite@db2ecc7)) - **scanner:** respect tsconfig.json ([#​21547](vitejs/vite#21547)) ([c6c04db](vitejs/vite@c6c04db)) - avoid registering customization hook for import meta resolver multiple times ([#​21518](vitejs/vite#21518)) ([8bb3203](vitejs/vite@8bb3203)) - **config:** avoid watching rolldown runtime virtual module ([#​21545](vitejs/vite#21545)) ([d18b139](vitejs/vite@d18b139)) - **deps:** update all non-major dependencies ([#​21540](vitejs/vite#21540)) ([9ebaeaa](vitejs/vite@9ebaeaa)) - populate originalFileNames when resolving CSS asset paths ([#​21542](vitejs/vite#21542)) ([8b47ff7](vitejs/vite@8b47ff7)) - **deps:** update all non-major dependencies ([#​21488](vitejs/vite#21488)) ([2b32ca2](vitejs/vite@2b32ca2)) - disable `tsconfig` option when loading config ([#​21517](vitejs/vite#21517)) ([5025c35](vitejs/vite@5025c35)) - **optimizer:** map relative `new URL` paths to correct relative file location ([#​21434](vitejs/vite#21434)) ([ca96cbc](vitejs/vite@ca96cbc)) - avoid using deprecated `output.inlineDynamicImport` option ([#​21464](vitejs/vite#21464)) ([471ce62](vitejs/vite@471ce62)) - use separate hook object for each environment ([#​21472](vitejs/vite#21472)) ([66347f6](vitejs/vite@66347f6)) - **deps:** update all non-major dependencies ([#​21440](vitejs/vite#21440)) ([1835995](vitejs/vite@1835995)) - **dev:** avoid event emitter leak caused by `server.listen` callback ([#​21451](vitejs/vite#21451)) ([602d786](vitejs/vite@602d786)) - lazy hook filter should work ([#​21443](vitejs/vite#21443)) ([bc0c207](vitejs/vite@bc0c207)) - **optimizer:** skip `rolldownCjsExternalPlugin` for `platform: neutral` ([#​21452](vitejs/vite#21452)) ([d2fc4be](vitejs/vite@d2fc4be)) - **deps:** update all non-major dependencies ([#​21389](vitejs/vite#21389)) ([30f48df](vitejs/vite@30f48df)) - **deps:** update esbuild peerDependency version ([#​21398](vitejs/vite#21398)) ([4266c97](vitejs/vite@4266c97)) - **hmr:** trigger prune event when last import is removed ([#​20781](vitejs/vite#20781)) ([#​21093](vitejs/vite#21093)) ([7576735](vitejs/vite@7576735)) - **module-runner:** use `process.getBuiltinModule` instead of `import('node:module')` ([#​21402](vitejs/vite#21402)) ([6633bcb](vitejs/vite@6633bcb)) - support .env file mounts (FIFOs) ([#​21365](vitejs/vite#21365)) ([6e6f82a](vitejs/vite@6e6f82a)) - **css:** stylus Evaluator support ([#​21376](vitejs/vite#21376)) ([cf9ace1](vitejs/vite@cf9ace1)) - **deps:** update all non-major dependencies ([#​21321](vitejs/vite#21321)) ([9bc7c2e](vitejs/vite@9bc7c2e)) - **import-analysis:** avoid cjs interop for built browser external module ([#​21333](vitejs/vite#21333)) ([dc5a2fb](vitejs/vite@dc5a2fb)) - **worker:** handle `new Worker(..., new URL(import.meta.url))` with trailing comma ([#​21325](vitejs/vite#21325)) ([4a47241](vitejs/vite@4a47241)) - detect `import.meta.resolve` when formatted across multiple lines ([#​21312](vitejs/vite#21312)) ([130e718](vitejs/vite@130e718)) - allow no-cors requests for non-script tag requests ([#​21299](vitejs/vite#21299)) ([ef3d596](vitejs/vite@ef3d596)) - **deps:** update all non-major dependencies ([#​21285](vitejs/vite#21285)) ([4635b2e](vitejs/vite@4635b2e)) - unreachable error when building with `experimental.bundledDev` is enabled ([#​21296](vitejs/vite#21296)) ([e81c183](vitejs/vite@e81c183)) - **deps:** update all non-major dependencies ([#​21231](vitejs/vite#21231)) ([859789c](vitejs/vite@859789c)) - don't strip base from imports ([#​21221](vitejs/vite#21221)) ([7da742b](vitejs/vite@7da742b)) - allow exiting process before optimizer cleanup is done ([#​21170](vitejs/vite#21170)) ([55ceffc](vitejs/vite@55ceffc)) - plugin shortcut support ([#​21211](vitejs/vite#21211)) ([6a3aca0](vitejs/vite@6a3aca0)) ##### Performance Improvements - **ssr:** skip circular import check for already-evaluated modules ([#​21632](vitejs/vite#21632)) ([235140b](vitejs/vite@235140b)) - use tsconfig cache for oxc transform in dev ([#​21643](vitejs/vite#21643)) ([57ff177](vitejs/vite@57ff177)) ##### Documentation - bulk of typo fixes ([#​21507](vitejs/vite#21507)) ([80755da](vitejs/vite@80755da)) - update `build.dynamicImportVarsOptions` ([#​21477](vitejs/vite#21477)) ([54ce2ed](vitejs/vite@54ce2ed)) - clarify the pronunciation of `vite` in IPA symbols ([#​21238](vitejs/vite#21238)) ([9b1d4d6](vitejs/vite@9b1d4d6)) - ensure https links ([#​21266](vitejs/vite#21266)) ([2eb259a](vitejs/vite@2eb259a)) ##### Miscellaneous Chores - **deps-dev:** bump rollup from 4.57.1 to 4.59.0 ([#​21717](vitejs/vite#21717)) ([25227bb](vitejs/vite@25227bb)) - **deps:** update dependency cac to v7 ([#​21788](vitejs/vite#21788)) ([44e33ae](vitejs/vite@44e33ae)) - **deps:** update dependency rolldown-plugin-dts to ^0.22.2 ([#​21731](vitejs/vite#21731)) ([d8ea652](vitejs/vite@d8ea652)) - **deps:** remove `fdir` and `@rollup/plugin-commonjs` ([#​21639](vitejs/vite#21639)) ([5abffd5](vitejs/vite@5abffd5)) - **deps:** update dependency [@​rollup/plugin-alias](https://github.com/rollup/plugin-alias) to v6 ([#​21097](vitejs/vite#21097)) ([44b5bdf](vitejs/vite@44b5bdf)) - fix broken link for future deprecations ([#​21603](vitejs/vite#21603)) ([25f4501](vitejs/vite@25f4501)) - update `customResolver` deprecation message to mention `enforce: 'pre'` ([#​21576](vitejs/vite#21576)) ([2ce34d5](vitejs/vite@2ce34d5)) - update rolldown-plugin-dts to 0.22.1 ([#​21559](vitejs/vite#21559)) ([77aab4b](vitejs/vite@77aab4b)) - **deps:** update dependency rolldown-plugin-dts to ^0.21.8 ([#​21539](vitejs/vite#21539)) ([33881cb](vitejs/vite@33881cb)) - add missing versions to changelog ([#​21515](vitejs/vite#21515)) ([4bfb239](vitejs/vite@4bfb239)) - **deps:** update rolldown-related dependencies ([#​21487](vitejs/vite#21487)) ([5863e51](vitejs/vite@5863e51)) - **deps:** update rolldown-related dependencies ([#​21390](vitejs/vite#21390)) ([be9dd4e](vitejs/vite@be9dd4e)) - fix typo in plugin.ts comment ([#​21435](vitejs/vite#21435)) ([d31fc66](vitejs/vite@d31fc66)) - replace caniuse link for ES2024 ([#​21355](vitejs/vite#21355)) ([2ba4e99](vitejs/vite@2ba4e99)) - cleanup changelog ([#​21202](vitejs/vite#21202)) ([8c8c56e](vitejs/vite@8c8c56e)) - **deps:** update rolldown-related dependencies ([#​21230](vitejs/vite#21230)) ([9349446](vitejs/vite@9349446)) - fix spelling error ([#​21223](vitejs/vite#21223)) ([cc10e20](vitejs/vite@cc10e20)) ##### Code Refactoring - don't add `optimization.inlineConst: { mode: 'smart' }` as it's enabled by default ([#​21794](vitejs/vite#21794)) ([22b3d11](vitejs/vite@22b3d11)) - enable some native plugins even with enable native plugin false ([#​21744](vitejs/vite#21744)) ([fc46c79](vitejs/vite@fc46c79)) - avoid deprecated `legalComments` option ([#​21721](vitejs/vite#21721)) ([e06496e](vitejs/vite@e06496e)) - use `ESTree` types from `rolldown/utils` ([#​21719](vitejs/vite#21719)) ([9239750](vitejs/vite@9239750)) - deprecate `customResolver` in `resolve.alias` ([#​21476](vitejs/vite#21476)) ([81275c9](vitejs/vite@81275c9)) - remove unnecessary `@rolldown/pluginutils` ([#​21560](vitejs/vite#21560)) ([c367b62](vitejs/vite@c367b62)) - enable some native plugins even with enable native plugin false ([#​21608](vitejs/vite#21608)) ([5a4f692](vitejs/vite@5a4f692)) - use `rolldown/utils` ([#​21577](vitejs/vite#21577)) ([e56103f](vitejs/vite@e56103f)) - use internal devtools config ([#​21609](vitejs/vite#21609)) ([9aea20f](vitejs/vite@9aea20f)) - use parseEnv ([#​21586](vitejs/vite#21586)) ([f859d2c](vitejs/vite@f859d2c)) - **wasm:** remove native wasm helper plugin usage ([#​21566](vitejs/vite#21566)) ([71a86be](vitejs/vite@71a86be)) - enable some native plugins even with enable native plugin false ([#​21511](vitejs/vite#21511)) ([b40292c](vitejs/vite@b40292c)) - remove `experimental.enableNativePlugin: 'resolver'` ([#​21510](vitejs/vite#21510)) ([f9d9213](vitejs/vite@f9d9213)) - use `import.meta.dirname` everywhere ([#​21509](vitejs/vite#21509)) ([7becf5f](vitejs/vite@7becf5f)) - **optimizer:** simplify `rolldownCjsExternalPlugin` ([#​21450](vitejs/vite#21450)) ([ebda8fd](vitejs/vite@ebda8fd)) - remove `import.meta.hot.accept` resolution fallback ([#​21382](vitejs/vite#21382)) ([71d0797](vitejs/vite@71d0797)) - **optimizer:** remove dead code ([#​21334](vitejs/vite#21334)) ([e9a2cdb](vitejs/vite@e9a2cdb)) ##### Tests - **ssr:** incorrect `handleInvoke` was called in server-worker-runner.invoke test ([#​21751](vitejs/vite#21751)) ([b95ca22](vitejs/vite@b95ca22)) - add more type tests for `defineConfig` ([#​21698](vitejs/vite#21698)) ([4fedbbd](vitejs/vite@4fedbbd)) - test case for catching invalid package resolution error ([#​21601](vitejs/vite#21601)) ([c9b9359](vitejs/vite@c9b9359)) - **bundled-dev:** add worker test cases ([#​21557](vitejs/vite#21557)) ([569bc98](vitejs/vite@569bc98)) ##### Beta Changelogs ##### [8.0.0-beta.18](vitejs/vite@v8.0.0-beta.17...v8.0.0-beta.18) (2026-03-09) See [8.0.0-beta.18 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.18/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.17](vitejs/vite@v8.0.0-beta.16...v8.0.0-beta.17) (2026-03-09) See [8.0.0-beta.17 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.17/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.16](vitejs/vite@v8.0.0-beta.15...v8.0.0-beta.16) (2026-02-27) See [8.0.0-beta.16 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.16/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.15](vitejs/vite@v8.0.0-beta.14...v8.0.0-beta.15) (2026-02-19) See [8.0.0-beta.15 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.15/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.14](vitejs/vite@v8.0.0-beta.13...v8.0.0-beta.14) (2026-02-12) See [8.0.0-beta.14 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.14/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.13](vitejs/vite@v8.0.0-beta.12...v8.0.0-beta.13) (2026-02-05) See [8.0.0-beta.13 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.13/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.12](vitejs/vite@v8.0.0-beta.11...v8.0.0-beta.12) (2026-02-03) See [8.0.0-beta.12 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.12/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.11](vitejs/vite@v8.0.0-beta.10...v8.0.0-beta.11) (2026-01-29) See [8.0.0-beta.11 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.11/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.10](vitejs/vite@v8.0.0-beta.9...v8.0.0-beta.10) (2026-01-24) See [8.0.0-beta.10 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.10/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.9](vitejs/vite@v8.0.0-beta.8...v8.0.0-beta.9) (2026-01-22) See [8.0.0-beta.9 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.9/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.8](vitejs/vite@v8.0.0-beta.7...v8.0.0-beta.8) (2026-01-15) See [8.0.0-beta.8 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.8/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.7](vitejs/vite@v8.0.0-beta.6...v8.0.0-beta.7) (2026-01-08) See [8.0.0-beta.7 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.7/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.6](vitejs/vite@v8.0.0-beta.5...v8.0.0-beta.6) (2026-01-07) See [8.0.0-beta.6 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.6/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.5](vitejs/vite@v8.0.0-beta.4...v8.0.0-beta.5) (2025-12-25) See [8.0.0-beta.5 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.5/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.4](vitejs/vite@v8.0.0-beta.3...v8.0.0-beta.4) (2025-12-22) See [8.0.0-beta.4 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.4/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.3](vitejs/vite@v8.0.0-beta.2...v8.0.0-beta.3) (2025-12-18) See [8.0.0-beta.3 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.3/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.2](vitejs/vite@v8.0.0-beta.1...v8.0.0-beta.2) (2025-12-12) See [8.0.0-beta.2 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.2/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.1](vitejs/vite@v8.0.0-beta.0...v8.0.0-beta.1) (2025-12-08) See [8.0.0-beta.1 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.1/packages/vite/CHANGELOG.md) ##### [8.0.0-beta.0](vitejs/vite@v7.2.4...v8.0.0-beta.0) (2025-12-03) See [8.0.0-beta.0 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.0/packages/vite/CHANGELOG.md) ##### Rolldown-Vite changelogs See [rolldown-vite changelog](https://github.com/vitejs/rolldown-vite/blob/v7.2.10/packages/vite/CHANGELOG.md) </details> --- ### Configuration 📅 **Schedule**: 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 [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My42Ni41IiwidXBkYXRlZEluVmVyIjoiNDMuNzYuMiIsInRhcmdldEJyYW5jaCI6Im5leHQiLCJsYWJlbHMiOltdfQ==--> Reviewed-on: https://git.valverde.cloud/Thilawyn/effect-fc/pulls/37 Co-authored-by: Renovate Bot <renovate-bot@valverde.cloud> Co-committed-by: Renovate Bot <renovate-bot@valverde.cloud>
rubentalstra
added a commit
to rubentalstra/ehrbase-ui
that referenced
this pull request
Jun 10, 2026
…p run (#53) * build: adopt Vite 8 + Vite+ toolchain, switch formatter to Oxfmt Phase 0+1 of the Vite+ unified-toolchain migration. - Vite 7.3.3 -> 8.0.16 (now GA; @tanstack/react-start peers vite >=7 and the Vite8+Nitro build break was fixed in Vite core, PR vitejs/vite#21472). @vitejs/plugin-react 5->6.0.2 (requires vite ^8), react-start 1.168.18->1.168.25, react-router ->1.170.15, vitest 4.1.7->4.1.8. - Add vite-plus 0.1.24 (exact pin) as the monorepo toolchain entry point; new root vite.config.ts holds the shared Oxfmt `fmt` block (singleQuote, no semi -- mirrors the former prettier.config.js). - Exclude the pinned openEHR spec mirror (CLAUDE.md rule 17) and all packages/*/src/generated/** from formatting; fix the stale paraglide ignore path. Verified green: vite build, tsc typecheck (20/20), regen:check (4/4), full test suite (20/20), dev server boot. * style: format entire repo with Oxfmt One-time cosmetic reformat (quotes / semicolons / wrapping only -- no logic changes) bringing the whole tree to Oxfmt style via `vp fmt --write`. The repo was not formatter-clean even against its own prettier.config.js: packages/* were committed with double-quotes + semicolons, so `prettier --check .` already flagged ~613 files and Oxfmt ~593 -- the two formatters agree on ~590, confirming this is a pre-existing cleanup, not an Oxfmt incompatibility. Generated output and the openEHR spec mirror are excluded. * build(lint): re-encode the ESLint ruleset onto Oxlint (vp lint) Phase 2 of the Vite+ migration. Adds the `lint` block to the root vite.config.ts, reproducing packages/config-eslint/index.js on Oxlint: - Rule-namespace map: react-hooks/* -> react/*, jsx-a11y-x/* -> jsx-a11y/*, @typescript-eslint/* -> typescript/*, the SDK-ban -> core no-restricted-imports. - Inviolable rules verified to FIRE via an injected probe: no `as` casts (typescript/consistent-type-assertions), the openEHR-SDK import ban with its ADR-0003 message, only-throw-error (BFF `Response`/`Redirect` allowlist honoured), and the jsx-a11y anchor gate. - Legal a11y gate (EAA / EN 301 549, architecture §12) reproduced 1:1: all 34 jsx-a11y-x `strict` error rules at error + the 2 `off` rules; verified against the strict severity map and signed off by the a11y-auditor. - TanStack `<Link to=>` handled via settings['jsx-a11y'].attributes (href: ['to','href']) since Oxlint does not honour the old `specialLink` option. - Type-aware path enabled via the bundled tsgolint (options.typeAware/typeCheck). `vp lint` is clean across the repo, matching the (clean) ESLint baseline. ESLint stays installed until the Phase-5 hooks/scripts/CI cutover. * build(test): run the test suites via `vp test` Phase 3 of the Vite+ migration. `vp test` is a Vitest passthrough that discovers the existing vitest.config.ts files unchanged, so the intricate dual-project setup (jsdom `unit` + Storybook browser `storybook`), v8 coverage, setup files, and the workspace-spanning package include globs are all preserved — no risky rewrite into the build vite.config.ts (which would have pulled the Start/Nitro SSR plugins into the test runtime). - All package + app `test` scripts: `vitest run` -> `vp test run` (watch variants -> `vp test watch`, since vp test is non-watch by default). - Verified: web unit suite 832 passed | 13 skipped (identical to the Vitest baseline), openehr-query 99 passed, v8 coverage works, and the full `turbo run test` is green (20/20 tasks). vp fmt clean. vitest + the vitest.config.ts files stay (the configs `import 'vitest/config'` and vp reuses them); standalone-dep cleanup is deferred to Phase 6. * build: route dev/build/preview through `vp` Phase 4 of the Vite+ migration. The app's vite.config.ts (TanStack Start + Nitro + Paraglide + Tailwind + React plugin chain) runs unchanged under vp. - apps/web scripts: `vite dev` -> `vp dev`, `vite build` -> `vp build` (kept the build-migrate poststep), `vite preview` -> `vp preview`. - playwright.config.ts smoke webServer: `vite dev` -> `vp dev`. Verified: `vp build` produces a full client+ssr+nitro production build on vite 8.0.16 (5.34s); `vp dev` boots DB-less and serves /en/login (200); the Playwright smoke suite (incl. the WCAG 2.2 AA axe checks) is green booting vp dev. * build(toolchain): cut over orchestration, hooks, and CI to Vite+ Phase 5 of the Vite+ migration. Removes the parallel ESLint/Prettier/Husky stack now that vp lint/fmt/test/build are proven, and wires the workspace plumbing to vp. - Remove ESLint (eslint.config.js, packages/config-eslint, 8 devDeps), Prettier (prettier.config.js, dep), and Husky + lint-staged (.husky, deps, config). .prettierignore stays as Oxfmt's ignore source (vp fmt reads it). - Scripts -> vp: root lint/format/check = vp lint/fmt/check; apps/web the same; root `prepare` = `vp config` (installs .vite-hooks on every install). - Commit hooks via .vite-hooks (core.hooksPath): pre-commit runs `vp staged` (staged block in vite.config.ts: lint --fix + fmt --write on staged files); commit-msg keeps commitlint (Conventional Commits) since vp does not lint commit messages. `vp config` is idempotent and preserves the commit-msg hook. - Turbo: drop the per-package `lint` task (vp lint is monorepo-global, run once at root); build/typecheck/test/regen/paraglide/e2e tasks + their DAG stay. - CI: voidzero-dev/setup-vp@v1 replaces pnpm/action-setup + setup-node across ci/release/security workflows; the CI lint step is now `vp lint`; VITE_GIT_HOOKS=0 skips hook install in CI; dependency-review allow-list drops the deleted config-eslint package. Verified locally: vp lint clean, vp fmt clean, vp staged file-scoped fix works. * build(orchestration): replace Turborepo with vp run Completes full Vite+ adoption — the build is no longer Turbo. `vp run` derives topological package order from the workspace package.json dependencies and runs the per-package scripts; the codegen → typecheck/test/build ordering is sequenced via a `codegen` script (regen + paraglide:compile). - Root scripts: `turbo run X` -> `vp run -r X` / `vp run --filter @ehrbase-ui/web X`; new `codegen` = `vp run -r regen && vp run --filter @ehrbase-ui/i18n paraglide:compile`; build/typecheck/test depend on it. - vite.config.ts gains a `run` block. Script result-caching is left OFF on purpose: regen/paraglide/build are file generators and vp only archives outputs for tasks with explicit `output` globs, so caching the scripts could skip regeneration when outputs are absent. Opt in with `vp run --cache`. - Remove turbo.json, the turbo devDep, and the dead .turbo cache dir; .gitignore now points at node_modules/.vite (Vite Task cache). - Stale "turbo" mentions in CI + test comments updated to vp run. Verified locally green via vp run: pnpm typecheck (20 tasks), pnpm build (vite 8 client+ssr+nitro), pnpm test (832 web + all package suites). * docs(adr): ADR-0029 adopt Vite+ toolchain; update CLAUDE.md + REFERENCES Phase 6 governance for the Vite+ migration. - New ADR-0029 — adopt the Vite+ unified toolchain (vp build/dev/test/lint/fmt/ run/staged/config; Vite 8). Records what it supersedes in ADR-0002 (the Vite-7 pin + ESLint/Prettier/Turbo choices) and ADR-0022 (lint/CI), the inviolable-rule preservation (no-as / SDK-ban / the EAA a11y gate 1:1 + a11y-auditor sign-off), pinning (vite-plus exact, setup-vp @v1), the alpha risk acceptance + vp implode rollback, and the vitest.config.ts retention. - ADR index: add 0029; mark ADR-0002 toolchain/build as superseded. - CLAUDE.md Versions: Vite 7.3.3 -> 8.0.16, TanStack Start -> 1.168.25, Vitest -> 4.1.8, add the Vite+/Oxlint/Oxfmt line, drop the ESLint plugin line; monorepo layout + task line now reference vp run; rule 3 cites Oxlint; config-eslint removed from the package list. - REFERENCES.md: vite 8.0.16 + vite-plus/plugin-react rows, Vite+ lint/format section (ESLint/Prettier/Turbo removed), vitest 4.1.8, the drift note for Vite reversed to "adopted via ADR-0029". * fix(scripts): run TS dev/ops entrypoints via tsx; Docker prepare hook guard Surfaced by the live full-stack verification on Node 26. Node 26 only strip-types TS (it removed --experimental-transform-types), so bare `node src/.../cli.ts` fails on parameter properties / enums in the import graph (e.g. openehr-am adl2/parse.ts) with ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX. This is pre-existing, independent of the Vite+ migration. - Run the TS entrypoints (seed:dev, db:bootstrap/migrate/setup, env:*, build-migrate) via `tsx` (4.22.4, already present as a Vite+ peer; pinned). Production still runs the built `.output` bundle, not tsx. - Dockerfile: ENV VITE_GIT_HOOKS=0 so the root `prepare` script's `vp config` (ADR-0029) skips git-hook install in the git-less alpine build image. Verified end-to-end on the live stack (Node 26): docker build, db:setup, seed:dev (6 patients / 9 templates / 54 compositions), and the full-stack auth e2e (10/10, real Keycloak login against the built server). * fix(lint): disable tsgolint full typeCheck (preview panic); keep type-aware rules `vp lint` intermittently crashed with a tsgolint (typescript-go) panic `File ../.. has unknown extension` during full-program checking on this monorepo's cross-package `exports` resolution — a flaky lint gate. Set `lint.options.typeCheck: false` (the full tsc-style check inside the linter, which `tsc --noEmit` already covers and which is the path that panics) while keeping `typeAware: true`. Verified: 10/10 `vp lint` runs clean (zero panics) and the type-aware rules still fire (only-throw-error, no-misused-promises), alongside the AST inviolable rules (no-`as`, SDK-ban, the a11y gate). Re-enable typeCheck when tsgolint stabilises. ADR-0029 updated. * fix(ci): drop setup-vp (no pnpm on PATH); allowlist test-fixture secret First CI run surfaced two failures: - `pnpm: command not found` in every job — `voidzero-dev/setup-vp` installs Node + the `vp` CLI but does NOT put `pnpm` on PATH, and this CI is pnpm-script orchestrated (pnpm audit, `--filter exec`, restore-prepared, pnpm regen). `vp` is a workspace devDep (on node_modules/.bin after install), so setup-vp adds nothing here. Reverted ci/release/security + the restore-prepared composite to pnpm/action-setup@v6 + actions/setup-node@v6; the pnpm scripts still drive vp (build/lint/test/run). Kept `pnpm lint` (was eslint) + VITE_GIT_HOOKS=0. - gitleaks flagged a pre-existing test fixture (apps/web/src/server/crypto/__tests__/keystore.test.ts: `test-root-secret-…`, a dummy SIGNING_KEY_SECRET) via generic-api-key. Added a narrow allowlist regex in .gitleaks.toml (the literal `test-root-secret-…` shape only, so real secrets in tests still trip). Verified: gitleaks reports no leaks. * fix(security): resolve the CodeQL findings surfaced by the reformat The Oxfmt reformat's large diff made CodeQL attribute 5 pre-existing findings (2 high, 3 medium) to this PR ("code changes were too large"). Addressed each on its merits — none are runtime/app code: - js/insecure-temporary-file (admission-opt.e2e.test.ts): the OPT output defaulted to a predictable `/tmp/admission.opt`. Now defaults to a file in a freshly-created `mkdtempSync` dir (no symlink/pre-create race). - js/file-system-race (check-adr-refs.mjs): removed the stat-then-read TOCTOU; read directly, then skip oversized text by length. - js/file-access-to-http + js/http-to-file-access (openehr-fetch-schema.mjs): false positives — this dev-only tool's whole purpose is to read repo-pinned config (spec.json) and download the pinned openEHR schemas to disk, with every path segment validated by `safeSegment`. Added a narrow CodeQL `paths-ignore` for that one build script (out of the deployed app's attack surface). Verified: check:adr OK, openehr-am typechecks, lint clean. * fix(test): run the Storybook browser project on standalone vitest The CI "Storybook tests (browser)" job hung to the 15-min timeout under `vp test --project=storybook`. Root cause: vp bundles its own vitest, but the browser project loads the standalone `@vitest/browser` / `@vitest/browser-playwright` (4.1.8) — "Loaded vitest@0.1.24 and @vitest/browser@4.1.8 … Running mixed versions is not supported", which hangs browser mode at dep-bundling. Run the `storybook` browser project via the version-matched standalone `vitest` (the `test-storybook` / `:watch` scripts) instead of `vp test`. The `unit` + package suites stay on `vp test` (jsdom — no browser-mode version coupling). Verified locally: 10 files / 28 tests pass in ~8s, clean exit. ADR-0029 noted.
rubentalstra
added a commit
to rubentalstra/ehrbase-ui
that referenced
this pull request
Jun 11, 2026
…or EHR composition (#52) * docs: consolidate to greenfield openEHR-native EPD architecture Replace the contradictory 56-ADR set + drifted architecture doc with one coherent source of truth for the greenfield clean-slate rewrite. - ADRs: remove old 56; add fresh coherent set 0001-0023 (services + EHRbase boundary, demographic+org service, access/audit/signing, storage+FOLDER, config-driven engine, terminology, operational+ISO13940, content governance, workflow/BPM, imaging/PACS, inbox, medication, clinical UI, roadmap, dev-stack, billing) - openEHR: local spec mirror docs/openehr/specs (RM/BASE/AM/QUERY/TERM/LANG/CDS/PROC) + INDEX.md; CLAUDE.md rule 17 (validate against mirror) - architecture.md -> concise overview pointing to the ADRs - rewrite CLAUDE.md, README.md, IMPLEMENTATION_CHECKLIST.md to match - billing: jurisdiction-agnostic FHIR-financial framework in v1 (M14, ADR-0023), national claim wires deferred - delete stale docs (CLINICAL-UI, FOUNDATION-SCOPE, aql-catalogue, v1.x-roadmap, demo-accounts, CDS/PROC impl trackers) * docs(M1): add canonical openEHR spec map; mark M1 complete Distilled digest over the local spec mirror (the 5 services, RM building blocks, AQL, AM/templates, TERM, LANG, CDS/PROC, EHRbase boundary). Closes the last M1 checklist item. * fix(M2): pin BASE to 1.1.0 (wire-coupled to EHRbase 2.31), not 1.2.0 Validation against the packages showed openehr-base/rm are pinned to BASE 1.1.0 (RM 1.1.0 is built on BASE 1.1.0; EHRbase 2.31 implements RM 1.1.0). The earlier 1.2.0 pin came from a pasted 'latest BASE' link, not from wire-coupling. Re-mirror BASE pages at Release-1.1.0; correct ADR-0003, CLAUDE.md, INDEX.md (plan too). Packages unchanged (already 1.1.0). * feat(M2): add Orthanc PACS to the dev stack (DICOMweb) Reuse the validated Orthanc infra from feat/orthanc-pacs-dicom-docs-infra, retargeted to the new ADR set (ADR-0017, M11). Adds: compose orthanc service (orthancteam/orthanc:26.6.0), orthanc/config/orthanc.json, platform-db-init/orthanc.sql + migrator bootstrap, and the ORTHANC_* env contract. docker compose config validates; .env.example regenerated. Old ADR-0057/0058 + DICOM-INTEGRATION docs not brought (superseded by ADR-0017). * fix(openehr-proc): pass line number to DlmParseError (unblocks workspace typecheck) parse.ts:99 constructed DlmParseError with only the message; the constructor requires (message, line). The message already computes i+1, so pass it. Restores green pnpm typecheck across all 20 packages. * fix(M2): orthanc healthcheck uses python3; turbo typecheck outputs [] orthancteam/orthanc:26.6.0 ships no curl/wget, so the healthcheck now uses python3 for an authenticated GET /system. Verified by running the stack: Orthanc + DICOMweb serve and the container reports healthy. turbo.json: typecheck outputs [] (validation task) clears the 'no output files' warnings; pnpm typecheck is 20/20 clean. * docs(M2): mark M2 complete — platform foundation verified Dev-stack incl. Orthanc verified running; regen + typecheck green. * fix(M2): register a 'self' DICOMweb server in Orthanc; tidy config comments Orthanc Explorer's DICOMweb-*client* page showed 'No DICOMweb server is configured'. Add a 'self' peer (Orthanc -> its own /dicom-web) per the official docs so the client page + STOW push work for dev. The EPD viewer uses Orthanc's DICOMweb *server* via the BFF and does not depend on this. Verified: /dicom-web/servers -> ['self']; container healthy. * docs(M3): capture the M3 implementation breakdown (demographic + org service) From the implementation-level inventory: foundation (patient CRUD + seed-only directory) vs the ADR-0005 delta (versioned directory + runtime org/role/group CRUD + admin UI). * feat(M3): organisation runtime CRUD in the demographic directory service Replace seed-only org/group management with runtime CRUD (ADR-0005): create / get / list / update / deactivate ORGANISATION + GROUP on DemographicDirectoryService + the builtin adapter. Ergonomic DTOs map to the RM PARTY snapshot; soft-deactivation (no hard delete); name/kind/active filters; org-hierarchy parentId. demographic-core typecheck + 47 tests green (PGlite). Server fns + admin UI are next. * feat(M3): organisation admin server functions (createServerFn + RBAC) organisation.functions.ts (client-importable createServerFn contracts) + organisation.server.ts impl over the directory service. RBAC: reads ['clinician','admin'], writes ['admin']; org/group are workforce reference data (non-PHI), so RBAC-gated, not on the PHI ATNA path. Named org* to avoid colliding with the EHR FOLDER directory.functions.ts. Caller-facing DTOs use z.input so defaulted fields are optional. typecheck 20/20 + 47 demographic-core tests green. * feat(admin): organisation directory admin UI (M3.1) Add the org/group management route-group under /admin/organisations: list + name/active search, create, edit, and logical deactivate, mirroring the patient admin patterns. Backed by the demographic DIRECTORY service CRUD (ADR-0005); admin-gated (route gate + server requireRole). ORGANISATION (hospital / dept / clinic / lab / pharmacy) and GROUP (ward / team) subtypes; actorType is immutable post-create so the edit form hides the type picker. Wires the route into the shared nav model so it surfaces in the sidebar + command palette. * feat(admin): staff + role assignment admin UI (M3.4/M3.5) Add runtime CRUD for staff PERSONs and their openEHR ROLE assignments to the demographic directory service (ADR-0005/0007) plus the /admin/staff route-group: - staff list / create / edit / logical deactivate; the structured HumanName round-trips via the stored party snapshot so the admin edits prefix/given/family - per-staff ROLE management: assign / re-time / end (performer -> org, capabilities, validity window). Ending a role is logical (active:false), never a hard delete, preserving write lineage. - auth-subject <-> PERSON link admin (sign-in identity resolves to a clinical actor; provenance only, never an access decision -- ADR-0065). Admin-gated (route gate + server requireRole). Wired into the shared nav model so it surfaces in the sidebar + command palette. 5 new directory tests (52 total). * feat(admin): organisation hierarchy tree view (M3.2/M3.3) Add a List / Hierarchy tab toggle to /admin/organisations. The hierarchy view nests organisations by parentId (hospital -> department -> ward/team) as a navigable tree; an org whose parent is absent from the result (e.g. filtered out by search) renders as a root, so the view is never empty when matches exist. Read/navigate only -- each node links to the detail page where the parent is re-assigned (ADR-0005/0007). The tree is an openEHR-specific hierarchy view, not a DataTable (rule 6a exemption). * feat(admin): role catalogue picker + organisation roster (M3 polish) Two M3 admin quality additions: - Controlled clinical-role catalogue (CLINICAL_ROLE_CATALOGUE in demographic-core, ADR-0007/0040): the RoleForm now offers a template picker that prefills the role name + default capabilities for the standard personas, with a "Custom role" escape hatch (a custom roleKey is still allowed). Display names localized via Paraglide (rule 4); machine keys + capabilities live in the package. - Organisation roster: listOrganisationRoster service method (reverse of listStaffRoles) + a roster panel on the org-detail page showing who acts at the organisation, each linking to the staff record. Closes the bidirectional staff<->org view. Admin-gated. 1 new directory test (53 total). * chore(turbo): drop spurious test-task cache outputs; add test:coverage The `test` task declared outputs ["coverage/**"] but `pnpm test` runs vitest without coverage, so turbo logged "no output files" for all 16 test tasks on every run. Set test outputs to [] (matching typecheck/lint) and move the coverage-output declaration to a dedicated test:coverage task. Also removed the stale untracked packages/openehr-conformance phantom dir (only .turbo + node_modules; conformance lives in per-package __tests__/conformance.test.ts). * chore(adr): remap stale ADR references repo-wide + add integrity guard The greenfield reset deleted the old 56 ADRs and wrote the fresh 0001-0023 set, but ~197 code/doc comments still cited the deleted numbers (e.g. ADR-0040). This remaps every stale cite to its successor, derived from each new ADR's own "Supersedes (archived)" line: 0040->0007, 0041->0008/0009, 0052/0045/0049->0008, 0034->0013, 0032/0057-0061->0003, 0028/0029/0044->0006, 0037->0010, 0047/0050/0051/0053/0036/0055->0022, 0043->0004, 0064/0065/0031->0005, and the context-split 0033 (demographic->0005, terminology->0013, FHIR-facade->0021). Also fixes the broken adr/NNNN-slug.md link paths and rewrites a directory.ts comment that still described the old open-access model. docs/adr/** (its "Supersedes" lines cite archived numbers on purpose) and drizzle migrations (content-hashed; frozen history) are intentionally left untouched. Adds scripts/check-adr-refs.mjs + `pnpm check:adr`, wired into the CI lint job: it fails if any tracked file outside docs/adr + migrations cites an ADR number or an adr/ link that does not resolve to an existing docs/adr/NNNN-*.md, so a dangling reference can never be committed again. * feat(access): policy decision point core (M4a) Add the BFF PDP (ADR-0008) as a pure, side-effect-free decision function (apps/web/src/server/access/policy.ts): given actor + action + resource sensitivity + the derived treatment relationship + what the session has already established (declared reason / break-glass grant), it returns the access effect — allow / reason-required / break-glass / deny. Care-first: a clinician is never hard-denied (worst case is a one-tap reason or a break-the-glass confirm); deny is reserved for a principal with no clinical/admin standing. Exhaustive decision-table test (10 cases). The relationship engine + PEP wiring into callEhrbase follow next. * docs: dev demo accounts reference + fix ABAC capability-row ADR link Add DEV-ACCOUNTS.md: the 9 dev Keycloak logins (username + password + realm role + linked staff PERSON / seeded ROLE) so the seeded surfaces are easy to test. Dev-only fixtures (keycloak/config + the demo-directory seed); excluded from prod. Also point the EHRBASE-CAPABILITIES ABAC row at ADR-0008 (access control) instead of ADR-0009 (audit) — the old combined ADR-0041 split into both, and the repo-wide remap had sent this access-control row to the audit successor. * feat(access): relationship engine + PEP on the EHRbase choke point (M4a) Wire the PDP into callEhrbase as the BFF PEP (ADR-0008). A patient-scoped call now derives the treatment relationship (access/relationship.server.ts) and runs the policy: no clinical/admin standing -> hard deny (conflated 404, §10); a clinician with a relationship or an admin -> allow; a clinician without one -> access still PROCEEDS (care-first, never blocked) tagged as a heightened-audit tier; a RESTRICTED record -> break-the-glass (428; the sensitivity source lands in M4b). The PEP fails OPEN on a relationship-derivation infra error. The relationship engine OWNS the established-access declaration store (the Valkey marker + the access_reason row within the rolling day); the reason-for-access flow (access-reason.server) now reads/writes through it instead of a duplicate inline check (rule 16). 4 new relationship tests (18 access-module tests total). * feat(access): break-the-glass + openEHR-native sensitivity tier (M4b) Complete the PDP's RESTRICTED tier (ADR-0008): - Sensitivity is stored openEHR-NATIVELY in EHR_STATUS.other_details (in EHRbase), NOT in EHR_ACCESS (an abstract, never-finished placeholder the openEHR SEC group explicitly says not to use) and NOT in an app table. EHRbase has no ABAC, so the BFF PDP enforces (SMART-on-openEHR style) while the LABEL lives in the EHR for portability + AQL-queryability. The other_details ITEM_TREE round-trip is live-confirmed against EHRbase 2.31. The PEP reads it via a DIRECT, non-recursive fetch (cached in Valkey); the admin write is a read-modify-write with If-Match (sensitivity-admin.server.ts, split out to avoid an import cycle with the PEP). - Break-the-glass: a clinician opening a RESTRICTED record with no relationship must grant break-glass — durable evidence in access_reason (kind='break-glass', new audit migration) + a strong BTG-coded ATNA event + a 1h marker. The PEP returns 428 BREAK_GLASS_REQUIRED until granted. - The PEP resolves relationship + sensitivity + break-glass concurrently, each failing open (care is never blocked). 10 new access tests (24 total). The deep EHR_ACCESS / SMART-on-openEHR research is recorded in the module headers. * feat(access): break-glass + confidentiality UI + access-review sampling (M4b.2) The UI + server-fn layer over the M4b access tiers (ADR-0008): - access.functions/server: evaluateAccessGate (the PDP mirrored for the UI gate — allow / reason / break-glass), grantBreakGlass (clinician), get/setEhrSensitivity (admin), listAccessReview (audit-reviewer sampling). - PatientAccessGate now mirrors the PDP: it shows the reason modal, the new BreakGlassModal for a RESTRICTED record, or renders the chart; fails open (care is never blocked). - Admin: a confidentiality (RESTRICTED) toggle on the patient detail that writes the label into EHR_STATUS.other_details (openEHR-native). - /access-review: the retrospective-sampling surface (audit-reviewer / admin) listing reason + break-glass declarations; wired into the shared nav. 28 access + gate tests pass; typecheck + lint clean. * feat(access): consent flags (EHR_STATUS) + record write-lock + review modal (M4c) openEHR-native consent/lifecycle enforcement (ADR-0008; RM 1.1.0 EHR_STATUS): - The PDP now denies CONTENT writes to a write-locked record (EHR_STATUS.is_modifiable=false) -> 423 RECORD_LOCKED. Reads still pass; the EHR_STATUS itself stays modifiable so an admin can unlock. is_queryable (population-query opt-out) is enforced by EHRbase's AQL natively, so it is a set-only control, not re-checked in the PEP. - The PEP reads sensitivity + modifiable from EHR_STATUS in ONE direct, cached fetch (readEhrStatusFlags). A shared EHR_STATUS read-modify-write (ehr-status-write.server.ts, If-Match) backs both the sensitivity label and the consent flags (rule 16 — no duplicated boilerplate). - Admin: a "Consent & lifecycle" card on the patient detail toggles is_queryable (opt-out) + is_modifiable (lock), written natively to EHR_STATUS. - Access-review rows now open a detail dialog with the full declaration. The consent DOCUMENT (an openEHR consent COMPOSITION, IHE BPPC/APPC) is authored via the composition/form engine (M6); this commit lands the enforceable flag layer. 30 access tests pass; typecheck + lint clean. * feat(crypto): OpenPGP ATTESTATION signing + software keystore (M4d) The openEHR signing layer (ADR-0010; RM common.html — ATTESTATION.proof is "a digital signature ... generated using the openPGP"): - canonical-json.ts: a deterministic, key-sorted JSON serialization — the exact bytes a signature is computed over, closing openEHR's "serialization TBD". - signing.server.ts: RFC-4880 detached sign/verify over the Canonical JSON via openpgp.js (6.3.1, the sanctioned scoped exception to @noble), Ed25519 keys, armored. Live round-trip validated (generate/sign/verify/tamper) — rule 16. - attestation.ts: builds an RM ATTESTATION wrapping the proof; change_type 'attestation' = openEHR audit_change_type 666, spec-verified in the TERM mirror. - keystore.server.ts + signing_key table: the v1 software keystore — one keypair per signer (sub <-> PERSON), private key armored + passphrase-protected with the passphrase derived (HKDF, @noble) from SIGNING_KEY_SECRET, never stored. signAs / verifyAs wrap the primitives. eIDAS/HSM is the M15 upgrade. The migration also drops the dead recent_patient_view table (pre-existing schema drift from the removed feature — no code references it). 12 crypto tests pass; typecheck + lint + env-contract + ADR guard green. * test(crypto): ATTESTATION tests + signing self-test tool; mark M3+M4 done - attestation.test + keystore.test: cover the ATTESTATION builder shape (change_type 666, committer external_ref, DV_EHR_URI items, is_pending) + the full keystore sign/verify round-trip with REAL openpgp (sign -> verify -> tampered-fail -> idempotent key). 19 crypto tests total. - Workbench /workbench/signing self-test: sign a payload with your OpenPGP key, verify the proof, and show the openEHR ATTESTATION — the dev diagnostic for the signing layer (production signs content transparently on commit, M6+). Live-verified via Playwright: "Signature verified" + a spec-conformant ATTESTATION (change_type 666, committer, proof). signing.server now logs the cause if signAs fails (e.g. SIGNING_KEY_SECRET unset) instead of swallowing it. - docs/IMPLEMENTATION_CHECKLIST.md: M3 + M4 marked complete (both live-verified), with the documented deferrals — consent COMPOSITION + wiring signing to content -> M6+. * fix(dev): quiet dev-stack startup noise — token, hydration, route warnings Four root-cause fixes for the noisy `pnpm dev` output: - Keycloak token refresh failing every idle session: the dev realm's lifespans were far too short (accessTokenLifespan 5m, ssoSessionIdleTimeout 30m) so a dev session idled out and the refresh token died. Bumped to 30m / 8h idle / 24h max in ehrbase-realm.json (+ applied to the running realm). The handled stored-token fallback now logs concisely at warn (it is an expected branch, not an ERROR). - Hydration mismatch on <html>: next-themes sets the theme class/color-scheme before hydration, so add suppressHydrationWarning on <html> (next-themes guidance). - "does not export a Route" warnings: role-picker.stories.tsx + encounters.stories.tsx were colocated under routes/. Moved both stories (and their components) to src/components/, matching the app-sidebar/patient-banner convention. - Code-split warnings: RolePicker + EncountersList were named exports of their route files. Relocated the components to src/components/; the route modules now export only `Route`. Also added `stories` to routeFileIgnorePattern as defence-in-depth. * feat(operational): M5a.1 — ISO 13940 episode/encounter store + server fns The app-owned operational layer openEHR does not model (PROC Task Planning §2.2.2: the spec "does not try to directly address … bookings for appointments … assumes that the existing systems … will manage to get patients to intended appointments"). It is the organizing layer over the EHR and LINKS to openEHR rather than duplicating it: an encounter ↔ COMPOSITION.context (EVENT_CONTEXT) once a composition exists (compositionUid, M6); an episode ↔ an EHR FOLDER (folderUid, M6). - app schema: `episode` + `encounter` tables (status enums, indexes incl. the performer/ehr/status index the M5a.2 relationship lookup keys on). Rule 2: only operational fields — opaque ehrId/dept-org/staff ids, an openEHR `setting` code, an operational location string. No patient identifiers, no clinical free-text. - operational/store.server.ts: pure data layer (createEpisode/listEpisodes/ closeEpisode, createEncounter/listEncountersByEhr/updateEncounterStatus with end-time stamping, and hasActiveEncounter — the M4 treatment-relationship signal). - operational.functions.ts + .server.ts: server fns with requireRole RBAC, the partyId→ehrId resolution (rule 15), and an IHE ATNA event keyed on the patient EHR before every return on success AND failure (rule 1, ADR-0009). settingCode is validated against the openEHR TERM `setting` code-set from the local mirror (rule 17). - tests: 10 store tests against real SQL (PGlite + drizzle-kit pushSchema, zero DDL drift) + 8 schema-contract tests (setting-code/status validation). 18 total. * feat(access): M5a.2 — wire the encounter source into the relationship engine Closes the M5 seam left in M4a: an active encounter (planned / in-progress) performed by the actor's staff PERSON is now a treatment relationship → zero-friction access (no reason prompt), per the care-first model (ADR-0008). - deriveRelationship gains an `actorStaffId` param + an ENCOUNTER source (checked before the established-access source; strongest first). An encounter-lookup error degrades to the declaration source — care is never blocked. - actor-staff.server.ts: resolve the authenticated actor → demographic staff PERSON id via resolveSessionActorContext, Valkey-cached (positive + negative) on the PEP hot path. - PEP (call-ehrbase) resolves the staff id (fail-open null) and passes it through; the UI gate (evaluateAccessGate) now routes through the SAME deriveRelationship instead of a private hasDeclaredAccess check — one source of truth for UI + PEP. - relationship tests: encounter source matches, is skipped when unlinked, and degrades to declaration on a lookup error. 39 access/operational tests pass. * feat(operational): M5a.2 — encounter UI + zero-friction demo seed Completes M5a: the operational encounter surface + the demo seed that makes the care-first relationship observable. - OperationalEncounters component (patient Encounters tab): lists active/planned encounters (setting rubric from the openEHR TERM `setting` code-set, location, status, started) + a "Start encounter" dialog that self-assigns the acting clinician (the realistic "I'm seeing this patient" flow — assigning ANOTHER clinician is the M5b ADT path) + complete/cancel transitions. Recorded (composition) encounters render below it. Rule 4/6a/10/15; empty + loading states. - createEncounterImpl defaults the performer to the actor's staff PERSON when none is given — that is what establishes the zero-friction relationship. - Demo seed (rule 14): the first demo patient gets an open episode + an active encounter performed by dev-physician's staff, so signed in as dev-physician that patient opens with NO reason prompt while others still ask. Idempotent; seed-state hash bumped (v3) so it runs on existing stacks. DEV-DEMO-DATA.md updated. - 95 operational/access/functions tests pass; typecheck + lint + i18n check clean. * docs(checklist): M5a shipped (episode/encounter + care-first relationship) * feat(operational): M5b — ADT (admit/transfer/discharge) + ward/bed board The inpatient operational layer on top of the M5a encounter model. App-owned (openEHR defers ADT — PROC §2.2.2); links to openEHR: a ward is a demographic GROUP (kind 'ward', ADR-0005), a bed is an operational resource, an admission is an inpatient encounter, and bed occupancy is DERIVED (an active encounter referencing the bed). - schema: `bed` table (belongs to a ward GROUP) + `encounter.bed_id` + occupancy index; `encounter.patient_party_id` (opaque, rule 15) so the board resolves the occupant name + links to the patient without an ehrId→subject reverse lookup. - store: bed CRUD, occupancy (isBedOccupied / listActiveEncountersByBedIds), transfer (setEncounterBed). Admission reuses createEncounter (bedId + attending + inpatient setting); discharge reuses updateEncounterStatus → 'completed' (bed frees). - server fns: listWards (GROUP kind 'ward'), listWardBeds (occupancy + resolved patient/attending names), admitPatient (admit-and-assign — attending defaults to the acting clinician), transferPatient, dischargePatient. RBAC + ATNA on every access. - UI: /wards board (rule 6a DataTable) — occupancy + admit (reuses PatientSearch + listStaff), transfer, discharge, patient links. Nav entry (clinician/admin). - seed (rule 14): Ward A + 4 beds + the 2nd demo patient admitted to Bed 1; idempotent (hash v4). 13 store tests (incl. ADT occupancy/transfer/discharge). * feat(operational): M5c — scheduling (appointments) + complete M5 An appointment IS a PLANNED encounter with a (future) startTime, so M5c adds almost no write path: booking reuses createEncounter (status='planned'), check-in/cancel reuse updateEncounterStatus. App-owned (openEHR defers appointment booking — PROC §2.2.2). Completes the M5 operational backbone (episode/encounter + ADT + scheduling), all on one encounter model. - store: listScheduledEncounters({performerStaffId?}) — planned encounters, soonest first, NULL startTime (waitlisted) last; optionally scoped to one clinician. - server fn: listSchedule (mine|all; resolves patient + clinician names + ATNA). - UI: /schedule board (rule 6a DataTable) — mine/all switch, book dialog (PatientSearch + clinician + datetime + setting → createEncounter planned), check-in (→ in-progress) + cancel (→ cancelled). Waitlist = a planned encounter with no time. Nav entry. - seed (rule 14): a +24h appointment for the third demo patient (hash v5). - checklist: M5 complete. 22 operational tests (+ schedule listing). * fix(operational): use relative imports in store.server for the dev-seed CLI The dev-seed CLI runs under raw node, where the @/ tsconfig path alias does not resolve; the store is in the seed's import graph (operational seed), so it must use relative imports like the rest of the seed graph (demographics/ehrbase/state). * docs(m6): openEHR spec-conformance audit of the form engine (ENG-001..047) Validate the existing template->Zod->FieldRenderer->FLAT pipeline against the local spec mirror (RM 1.1.0 / AM, rule 17). Three-area audit (data types, data structures + entries, cardinality + FLAT) → ~50 triaged findings with spec citations + status (CONFIRMED / VERIFY / ADR). 'EHRbase requires X' claims cross-checked against real accepted FLAT fixtures (rule 16) — e.g. DV_ORDINAL FLAT is |code+|ordinal+|value, verified vs ncd.flat.json. Includes a 5-wave remediation order. * fix(m6): conformance wave 1 — container types, cardinality, duration, boolean i18n First batch of confirmed, low-risk spec-conformance fixes from the M6 engine audit (docs/M6-ENGINE-CONFORMANCE.md), each validated against the local spec mirror: - ENG-004/005: add ACTIVITY + ISM_TRANSITION to CONTAINER_RM_TYPES (RM ehr.html Entry package) — they recurse into children; before, every INSTRUCTION/ACTION form rendered the mandatory sub-node as a disabled placeholder. - ENG-007: enforce the finite array upper bound in withCardinality (AM Multiplicity_ interval) — .max(max) for bounded max>1; -1 stays unbounded. - ENG-022: validate DV_DURATION against ISO 8601 in the Zod schema (RM data_types §7.2.5; allows leading '-' and weeks; empty = untouched optional). - ENG-040: DV_BOOLEAN read-only renders via m.common_yes()/m.common_no() (rule 4). Tests: ENG-007 (bounded/unbounded arrays) + ENG-022 (valid/invalid durations) in web-template.test.ts. 21 pass; typecheck + lint clean. * fix(m6): conformance wave 2 — DV_ORDINAL + DV_CODED_TEXT FLAT completeness ENG-001/002 from the engine audit. The FLAT converter emitted only |code for an ordinal and put the code in the |value slot for a static coded text — incomplete vs RM data_types §6.2.4/§5.2.4 and vs the real EHRbase-accepted FLAT (ncd.flat.json: `…/protein|code` + `|ordinal` + `|value`; op-consult.flat.json: `setting|code` + `setting|value`). - DV_ORDINAL: emit |code (symbol code) + |ordinal (Integer rank) + |value (rubric), looked up from the template input list ({value,label,ordinal}). - DV_CODED_TEXT (static closed list): emit |code + |value (rubric); a value not in the list (open/free text) emits |value only. - Bidirectional: flatToFormState maps only |code back to the scalar code string (|ordinal/|value are template-derived on write), preserving the round-trip. Verified vs spec + the real seed FLAT fixtures + round-trip tests (new-types.test.ts, 71 pass). typecheck + lint clean. * fix(m6): live FLAT round-trip harness + the round-trip bugs it caught Add a gated (FORM_E2E=1) live harness that round-trips every seeded composition through the engine (flatToFormState → formStateToFlat) and POSTs to the real EHRbase. First run caught the engine's edit path broken on 7/8 real templates. Fixed the two highest-impact: - ENG-050: CODE_PHRASE (the inContext language/territory COMPOSITION fields) was dropped on write — EHRbase emits it with inputs:null, so the converter treated it as an empty container. isLeaf now treats CODE_PHRASE as a leaf; its {code,terminology} round-trips via the composite path. Fixes COMPOSITION.territory existence 1..1 on 5/7 templates. - ENG-002b: a coded value is always a code → DV_CODED_TEXT/DV_ORDINAL always emit |code (+ |value rubric / |ordinal from the template list, |terminology from the input). The earlier "not in list → |value" branch put a code in the rubric slot. Result: live round-trips go 1/8 → 5/8. Remaining (tracked ENG-051/052/053): IPS medication, op-consult multimedia (→ M6a storage), deterioration total_score. 72 flat unit tests pass; typecheck + lint clean. * fix(m6): FLAT round-trip — scalar DV_COUNT bare + DV_MULTIMEDIA data/uri preserved Two more live-harness findings, each verified against real EHRbase-accepted FLAT: - ENG-053: a scalar DV_COUNT is a BARE key, not |magnitude (real ereact-deterioration `…/news2_score/total_score`). FLAT_SCALAR_SUFFIX['DV_COUNT']=null; the round-trip is now symmetric (read consumed bare → write emits bare). Composite DV_COUNT (a magnitude-suffix input) still goes through the record path. - ENG-052: DV_MULTIMEDIA dropped |data/|uri on round-trip (only name/size/mediatype), failing the Not_empty invariant (op-consult `…/content|data`). MULTIMEDIA_FLAT_KEYS + dvMultimediaSchema now preserve data + uri (descriptor fields made optional). Live round-trips: 5/8 → 7/8. Unit tests updated to the real-data-confirmed shapes (72 flat + 21 web-template pass). Only IPS remains (ENG-051: ELEMENT-choice + INSTRUCTION medication — the choice-element ADR). typecheck + lint clean. * refactor(m6): streamline app-sidebar and enhance TypeScript support in package.json * fix(m6): FLAT round-trip 8/8 — bare scalars + DV_IDENTIFIER/DV_PARSABLE bare-primary The live harness drove the engine's edit/round-trip to pass for ALL 7 seeded templates incl. the kitchen-sink International Patient Summary. Three more findings, each verified against the real EHRbase-accepted FLAT (rule 16): - ENG-054: a scalar leaf is a BARE key — scalarSuffix is now input-driven (the |suffix comes from the input's `suffix`; a suffix-less input → bare). The old per-rmType value/magnitude table emitted |value/|magnitude that EHRbase rejected ("Could not consume Parts": IPS booleans/uri, deterioration counts). - ENG-055: DV_IDENTIFIER.id and DV_PARSABLE.value are the BARE key (others |suffix) — `order_id:0` + `|type`, `timing` + `|formalism`. The composite path emitted |id/|value and the read dropped the bare seed key → existence 1..1 failed. BARE_PRIMARY_ATTR handles both bidirectionally. - ENG-052b: DV_MULTIMEDIA external bare-URI + |alternatetext (IPS `multimedia_value`) now preserved (op-consult's |data already covered). The 474 dropped `_`-prefixed keys are PARTICIPATION/health_care_facility — workflow/ context-managed (optional; EHRbase tolerates absence). 72 flat + 21 web-template unit tests pass; typecheck + lint clean; live harness 8/8. * fix(m6): conformance wave 1-rest — structured DV_DURATION read + leaf-helper DRY - ENG-023: structuredToFormState returned { value: "P1Y…" } for a DV_DURATION instead of the scalar ISO string, because structured.ts had its OWN isScalarLeafNode that ignored the SCALAR_OVERRIDE (and had also diverged on CODE_PHRASE-as-leaf, ENG-050). - Eliminated the duplicated leaf detection (rule 16): structured.ts now imports the single canonical isLeaf / isScalarLeaf from convert.ts, so the STRUCTURED read stays in lock-step with the FLAT path. Added a structuredToFormState DV_DURATION test. 73 flat tests pass; typecheck + lint clean. * docs(m6): resolve Wave 4 — DV_SCALE unsupported by EHRbase 2.31 (live-verified) Verified the unmapped rmTypes against the real pinned EHRbase 2.31 instead of guessing their wire format (rule 16): DV_SCALE is rejected at template upload ('Unsupported type DV_SCALE') so the engine's z.never sentinel is correct (no dead code); DV_INTERVAL is supported + already container-handled (tested); DV_STATE isn't in EHRbase's UNSUPPORTED_RM_TYPES but has no real template to verify (tracked); ITEM_TABLE is EHRbase-unsupported. No implementation needed for the 2.31 pin. * fix(m6): conformance wave 1-rest — DV_DATE/DV_DATE_TIME timezone correctness ENG-020/021: the date inputs lost timezone data on edit (RM data_types §7.2). - ENG-021: DV_DATE used Date.toISOString() (UTC) → off-by-one across the UTC boundary. Now localDateString() formats the local Y/M/D the clinician picked. - ENG-020: DV_DATE_TIME re-emitted `${wall}:00`, discarding the original value's seconds + timezone offset on every edit. Now applyDateTimeTail() preserves the original tail (seconds/fraction/offset, incl. Z) across a datetime-local edit. Logic extracted to a pure, unit-tested module (datetime-flat.ts); 7 tests cover the offset/Z/seconds/fresh/empty cases. typecheck + lint clean. * docs(m6): pin the ITS-REST simSDT/FLAT spec into the local mirror (ENG-047) Rule 17 could not be applied to FLAT-grammar changes — the ITS-REST spec (incl. the Simplified Data Template / simSDT FLAT format the form engine reads+writes) was referenced (1.0.3) but not mirrored. Added docs/openehr/specs/ITS-REST/simplified_data_template.html + INDEX.md entry. The spec confirms the territory|code + language|terminology CODE_PHRASE pattern (ENG-050); it is high-level, so per-rmType FLAT key conventions remain EHRbase-implementation-defined and verified against real accepted FLAT (the live harness + fixtures). * docs(m6): final conformance disposition — Waves 1-5 addressed, harness 8/8 Record the LOW-item dispositions: ENG-024 resolved by the bare-id fix (schema stays lenient by design), ENG-046 covered by the IPS live round-trip, and ENG-028/041-045 deferred-LOW with rationale (UX/edge/interop-era). Every HIGH/MED finding is fixed + tested; the engine is validated against the local spec mirror AND live EHRbase 2.31. * docs(openehr): mirror the full ITS-REST 1.0.3 spec set (not just SDT) Add the remaining STABLE ITS-REST 1.0.3 pages to the local mirror so rule 17 covers the whole REST surface EHRbase exposes, not only the FLAT/SDT format: - ITS-REST/overview.html (APIs overview) - ITS-REST/ehr.html (EHR API — /ehr, /composition, /directory, /contribution, …) - ITS-REST/query.html (Query API — /query/aql + /definition/query) - ITS-REST/definition.html (Definition API — archetypes, templates, OPTs, stored queries) (simplified_data_template.html / SDT was added previously.) INDEX.md now lists all five with their STABLE/DEVELOPMENT status. The OAS 3.0 YAML (TRIAL) stays in packages/openehr-its-rest/openapi/ (orval codegen, ADR-0003) — referenced, not duplicated. * fix(openehr): update DV_TEXT handling in tests to reflect suffix-less input format * docs(openehr): mirror CNF + SM specs; ADR-0024 — CNF/SM are reference-only, not packages Mirror the openEHR Conformance (CNF, development) + Service Model (SM, development) spec pages and the All-Components catalogue into the local mirror (rule 17), and record ADR-0024: CNF/SM get no openehr-* package — ITS-JSON publishes schemas only for AM/BASE/RM and ITS-BMM only for AM/BASE/LANG/RM/TERM, so there is no codegen source. CNF is conformance methodology (realised in the test harness); SM is the abstract service model already bound concretely by openehr-its-rest (ADR-0004/0005). Bump the ADR range in CLAUDE.md to 0001–0024. * docs(conformance): CNF + SM platform audit — already conformant, no rewrite; 3 milestone-scoped gaps Audit the platform against the openEHR Conformance (CNF) + Service Model (SM) specs (now mirrored, ADR-0024). Conformance target is the ITS-REST surface (CNF guide §3.3/§4.1), which we already build on, so the service decomposition, versioning, identifier, logical-delete and audit conventions already match the stable, citable SM + CNF requirements (CORE fully, STANDARD mostly). SIM-B/SDF/sJDT are DEVELOPMENT-stage and not EHRbase-wire-coupled — explicitly not a target (ADR-0012 web-template + FLAT stands). Real gaps are additive and milestone-scoped: CSM-001 atomic multi-version CONTRIBUTION commit (M10), CSM-002 composition version-history/at-time reads (M6/M8), CSM-003 one-EHR-per-subject guard (verify live then small fix). No major rewrite warranted. * docs(conformance): fix wrapped '+ FLAT' mangled to a list item by prettier * feat(storage): SeaweedFS document store (ADR-0025) + Mermaid architecture model M6 document-store tier (ADR-0011 tier (c)) now uses SeaweedFS, not a Postgres bytea blob — a real object store, off the clinical DB. Keeps the swappable StorageBackend seam: seaweedfs-backend.server.ts speaks the filer HTTP API (POST/GET/DELETE, live-verified), upload.server.ts decides inline (<=256 KiB -> DV_MULTIMEDIA.data) vs offload (-> uri = document:<id>). New seaweedfs service in docker-compose (pinned chrislusf/seaweedfs:4.32, health-gated) + SEAWEEDFS_FILER_URL env. ADR-0025 supersedes ADR-0011 tier (c) (accepts +1 container as the cost of not bloating Postgres); references updated (ADR README, CLAUDE.md, REFERENCES.md, .env.example). architecture.md's ASCII "Layered model" -> a maintainable Mermaid flowchart (renders in GitHub/IDE, diffs in PRs) with ADR tags + the EHR<->Demographic, EHR<->SeaweedFS and Operational<->EHR links. * feat(m6): wire DV_MULTIMEDIA upload end-to-end + audited blob-read route (B1) DvMultimediaField now actually uploads: on file-select it POSTs to uploadAttachment (server-side sniff + EXIF-strip + SHA-256 + inline-vs-SeaweedFS decision) and stores the resulting DV_MULTIMEDIA descriptor in form-state — small media inline (DV_MULTIMEDIA.data), large offloaded to the document store (uri = document:<id>). uploadAttachment takes FormData via an inputValidator passthrough (TanStack Start sends FormData as multipart natively). New GET /api/document/$id: BFF-audited (IHE ATNA, rule 1) blob read, auth-gated, nosniff/no-store, opaque-id resource (rule 2). Paraglide keys for the upload states (rule 4). Verified: 7 storage unit tests (mocked filer) + the live harness now 9/9 — incl. a new case proving EHRbase 2.31 accepts a document:<id> DV_MULTIMEDIA URI. web suite 842 pass. Closes ENG-052. * feat(m6): one-EHR-per-subject guard on provisionEhr (CSM-003) provisionEhrImpl now checks the linked EHR first and returns it idempotently instead of POSTing a duplicate — EHRbase 2.31 rejects a second EHR for the same subject (live-verified; CNF §6.4.2.3 / SM I_EHR_INDEX §7.1), which previously surfaced as an opaque 502 on retry. createPatientImpl needs no guard (its partyRef.id is freshly minted, so no EHR can pre-exist). Tests: new gated live conformance test (ehr-subject-uniqueness-e2e-live, FORM_E2E=1) proving EHRbase rejects the duplicate + resolves the subject; 2 BFF-guard unit tests (existing-EHR → no create; none → create). web suite green. * docs(conformance): close ENG-052 (B1 DV_MULTIMEDIA) + CSM-003 (one-EHR-per-subject) * feat(adr): extend demographic and operational services with RM-faithful implementations * feat(adt): openEHR-native admission via episode_institution + reusable OPT pipeline Replace the custom episode/encounter/bed Postgres tables with openEHR compositions (ADR-0026). Admit/transfer/discharge author an openEHR-EHR-ADMIN_ENTRY.episode_institution.v0 (inside COMPOSITION.encounter.v1) through the existing dynamic compose engine — no hand-written FLAT. The ward board, occupancy and per-patient admissions are AQL-derived, keyed on archetype at-codes (language-independent). Drops the episode/encounter/bed tables (app migration) and operational/store.server.ts; the access relationship engine no longer reads those tables (declaration-based interim — an ungated open-admission AQL source is a documented follow-up). Scheduling is parked (PROC/TP is M10). Add a reusable OPT-build pipeline in @ehrbase-ui/openehr-am: parse an ADL 1.4 archetype, flatten it, fill named slots, add archetypes into unconstrained RM attributes (e.g. an ENTRY into COMPOSITION.content), and serialize to the EHRbase OPT XML (OPERATIONAL_TEMPLATE). The C_ARCHETYPE_ROOT operational terms use the template's primary language while the <ontology> retains every languages_available, so the template is multi-language (all 15 langs preserved; English-primary by default). Fixes an ADL 1.4 parser gap (matches {*}) found against the real CKM archetypes. Seed the admission template + a demo admission composition. Verified live against EHRbase 2.31: template load, web-template projection, composition write/read-back via AQL, and the /wards UI rendering admissions sourced from compositions (patient names from the demographic service, attending from the EVENT_CONTEXT participation). Full workspace gate green (834 tests). * feat(demographic): AOM 1.4 archetype-constraint validator + CKM demographic archetypes First increment of the openEHR-native demographic rewrite (ADR-0027): the built-in adapter will validate RM PARTY structures against the CKM DEMOGRAPHIC archetypes before commit. Adds validateInstance14(archetype, instance, resolve?) in @ehrbase-ui/openehr-am — a conservative AOM 1.4 constraint validator (rm_type / existence / cardinality / occurrences / primitive constraints / C_DV_QUANTITY|ORDINAL|CODE_PHRASE / archetype-slot recursion; ERROR vs INFO-unchecked so it never raises a false positive). Vendors the 12 core CKM DEMOGRAPHIC archetypes (ADL 1.4) into packages/demographic-core. Fixes 3 ADL 1.4 parser gaps found against the real archetypes: generic types (DV_INTERVAL<DV_DATE>), integer-interval isReal misdetection, and multi-line ARCHETYPE_SLOT includes. 68 tests pass. * feat(demographic): fully-canonical openEHR PARTY rewrite (ADR-0028) Replace the FHIR-shaped Party projection + hand-mappings with canonical RM PERSON/ORGANISATION/ROLE, stored and validated against the vendored CKM DEMOGRAPHIC archetypes, with forms generated from the archetype AOM. - Unified VERSIONED_PARTY store + one DemographicProvider keyed by party_type + extracted archetype_id (patient person-patient.v0, staff person.v0, org organisation.v0); directory service folded in. - MRN = service-local handle (Option B), not archetype content. - Archetype-driven form engine (packages/demographic-core/src/form): registry -> WebTemplate generator -> existing FieldRenderer + generateFormSchema; form-state <-> canonical RM converters; injected AOM 1.4 validator. - Stripped the identifier/ dir (validators, registry, pseudonymize) and the FHIR Party types; audit subject = internal party UUID. - Rebuilt all consumers + admin UI fresh against canonical accessors; deleted the hand-coded admin forms. - Regenerated the unified Drizzle migration; canonical seed. Shared form-engine fixes (web-template + field-renderer): - demographic RM types recognised as containers - direct-attribute DV leaves (PARTY_IDENTITY.name, ADDRESS.name) collapse DV_TEXT|DV_CODED_TEXT alternatives into one labeled leaf - RM List attributes forced multiple; RM-mandatory details forced min=1 - structural-container materialisation + optional-empty-subtree collapse - closed DV_CODED_TEXT renders a label-showing Select at any size (never the raw at-code) openehr-am: parseAdl14 allows hyphenated concept ids; validateInstance14 handles C_SINGLE attributes whose instance is a List. Verified: patient/organisation/staff create + edit driven live (Playwright) -> canonical RM stored, auto-MRN, EHR provisioned. turbo typecheck/lint/test green (37/37 tasks). Specs: docs/openehr/specs/RM/demographic.html, RM/common.html, AM/AOM1.4.html. Supersedes ADR-0027. * feat(problem-list): implement patient problem list view and server-side AQL query * feat(composition): update formState handling and context management for EHR composition * build: migrate the toolchain to Vite+ (vp) — Vite 8, Oxlint, Oxfmt, vp run (#53) * build: adopt Vite 8 + Vite+ toolchain, switch formatter to Oxfmt Phase 0+1 of the Vite+ unified-toolchain migration. - Vite 7.3.3 -> 8.0.16 (now GA; @tanstack/react-start peers vite >=7 and the Vite8+Nitro build break was fixed in Vite core, PR vitejs/vite#21472). @vitejs/plugin-react 5->6.0.2 (requires vite ^8), react-start 1.168.18->1.168.25, react-router ->1.170.15, vitest 4.1.7->4.1.8. - Add vite-plus 0.1.24 (exact pin) as the monorepo toolchain entry point; new root vite.config.ts holds the shared Oxfmt `fmt` block (singleQuote, no semi -- mirrors the former prettier.config.js). - Exclude the pinned openEHR spec mirror (CLAUDE.md rule 17) and all packages/*/src/generated/** from formatting; fix the stale paraglide ignore path. Verified green: vite build, tsc typecheck (20/20), regen:check (4/4), full test suite (20/20), dev server boot. * style: format entire repo with Oxfmt One-time cosmetic reformat (quotes / semicolons / wrapping only -- no logic changes) bringing the whole tree to Oxfmt style via `vp fmt --write`. The repo was not formatter-clean even against its own prettier.config.js: packages/* were committed with double-quotes + semicolons, so `prettier --check .` already flagged ~613 files and Oxfmt ~593 -- the two formatters agree on ~590, confirming this is a pre-existing cleanup, not an Oxfmt incompatibility. Generated output and the openEHR spec mirror are excluded. * build(lint): re-encode the ESLint ruleset onto Oxlint (vp lint) Phase 2 of the Vite+ migration. Adds the `lint` block to the root vite.config.ts, reproducing packages/config-eslint/index.js on Oxlint: - Rule-namespace map: react-hooks/* -> react/*, jsx-a11y-x/* -> jsx-a11y/*, @typescript-eslint/* -> typescript/*, the SDK-ban -> core no-restricted-imports. - Inviolable rules verified to FIRE via an injected probe: no `as` casts (typescript/consistent-type-assertions), the openEHR-SDK import ban with its ADR-0003 message, only-throw-error (BFF `Response`/`Redirect` allowlist honoured), and the jsx-a11y anchor gate. - Legal a11y gate (EAA / EN 301 549, architecture §12) reproduced 1:1: all 34 jsx-a11y-x `strict` error rules at error + the 2 `off` rules; verified against the strict severity map and signed off by the a11y-auditor. - TanStack `<Link to=>` handled via settings['jsx-a11y'].attributes (href: ['to','href']) since Oxlint does not honour the old `specialLink` option. - Type-aware path enabled via the bundled tsgolint (options.typeAware/typeCheck). `vp lint` is clean across the repo, matching the (clean) ESLint baseline. ESLint stays installed until the Phase-5 hooks/scripts/CI cutover. * build(test): run the test suites via `vp test` Phase 3 of the Vite+ migration. `vp test` is a Vitest passthrough that discovers the existing vitest.config.ts files unchanged, so the intricate dual-project setup (jsdom `unit` + Storybook browser `storybook`), v8 coverage, setup files, and the workspace-spanning package include globs are all preserved — no risky rewrite into the build vite.config.ts (which would have pulled the Start/Nitro SSR plugins into the test runtime). - All package + app `test` scripts: `vitest run` -> `vp test run` (watch variants -> `vp test watch`, since vp test is non-watch by default). - Verified: web unit suite 832 passed | 13 skipped (identical to the Vitest baseline), openehr-query 99 passed, v8 coverage works, and the full `turbo run test` is green (20/20 tasks). vp fmt clean. vitest + the vitest.config.ts files stay (the configs `import 'vitest/config'` and vp reuses them); standalone-dep cleanup is deferred to Phase 6. * build: route dev/build/preview through `vp` Phase 4 of the Vite+ migration. The app's vite.config.ts (TanStack Start + Nitro + Paraglide + Tailwind + React plugin chain) runs unchanged under vp. - apps/web scripts: `vite dev` -> `vp dev`, `vite build` -> `vp build` (kept the build-migrate poststep), `vite preview` -> `vp preview`. - playwright.config.ts smoke webServer: `vite dev` -> `vp dev`. Verified: `vp build` produces a full client+ssr+nitro production build on vite 8.0.16 (5.34s); `vp dev` boots DB-less and serves /en/login (200); the Playwright smoke suite (incl. the WCAG 2.2 AA axe checks) is green booting vp dev. * build(toolchain): cut over orchestration, hooks, and CI to Vite+ Phase 5 of the Vite+ migration. Removes the parallel ESLint/Prettier/Husky stack now that vp lint/fmt/test/build are proven, and wires the workspace plumbing to vp. - Remove ESLint (eslint.config.js, packages/config-eslint, 8 devDeps), Prettier (prettier.config.js, dep), and Husky + lint-staged (.husky, deps, config). .prettierignore stays as Oxfmt's ignore source (vp fmt reads it). - Scripts -> vp: root lint/format/check = vp lint/fmt/check; apps/web the same; root `prepare` = `vp config` (installs .vite-hooks on every install). - Commit hooks via .vite-hooks (core.hooksPath): pre-commit runs `vp staged` (staged block in vite.config.ts: lint --fix + fmt --write on staged files); commit-msg keeps commitlint (Conventional Commits) since vp does not lint commit messages. `vp config` is idempotent and preserves the commit-msg hook. - Turbo: drop the per-package `lint` task (vp lint is monorepo-global, run once at root); build/typecheck/test/regen/paraglide/e2e tasks + their DAG stay. - CI: voidzero-dev/setup-vp@v1 replaces pnpm/action-setup + setup-node across ci/release/security workflows; the CI lint step is now `vp lint`; VITE_GIT_HOOKS=0 skips hook install in CI; dependency-review allow-list drops the deleted config-eslint package. Verified locally: vp lint clean, vp fmt clean, vp staged file-scoped fix works. * build(orchestration): replace Turborepo with vp run Completes full Vite+ adoption — the build is no longer Turbo. `vp run` derives topological package order from the workspace package.json dependencies and runs the per-package scripts; the codegen → typecheck/test/build ordering is sequenced via a `codegen` script (regen + paraglide:compile). - Root scripts: `turbo run X` -> `vp run -r X` / `vp run --filter @ehrbase-ui/web X`; new `codegen` = `vp run -r regen && vp run --filter @ehrbase-ui/i18n paraglide:compile`; build/typecheck/test depend on it. - vite.config.ts gains a `run` block. Script result-caching is left OFF on purpose: regen/paraglide/build are file generators and vp only archives outputs for tasks with explicit `output` globs, so caching the scripts could skip regeneration when outputs are absent. Opt in with `vp run --cache`. - Remove turbo.json, the turbo devDep, and the dead .turbo cache dir; .gitignore now points at node_modules/.vite (Vite Task cache). - Stale "turbo" mentions in CI + test comments updated to vp run. Verified locally green via vp run: pnpm typecheck (20 tasks), pnpm build (vite 8 client+ssr+nitro), pnpm test (832 web + all package suites). * docs(adr): ADR-0029 adopt Vite+ toolchain; update CLAUDE.md + REFERENCES Phase 6 governance for the Vite+ migration. - New ADR-0029 — adopt the Vite+ unified toolchain (vp build/dev/test/lint/fmt/ run/staged/config; Vite 8). Records what it supersedes in ADR-0002 (the Vite-7 pin + ESLint/Prettier/Turbo choices) and ADR-0022 (lint/CI), the inviolable-rule preservation (no-as / SDK-ban / the EAA a11y gate 1:1 + a11y-auditor sign-off), pinning (vite-plus exact, setup-vp @v1), the alpha risk acceptance + vp implode rollback, and the vitest.config.ts retention. - ADR index: add 0029; mark ADR-0002 toolchain/build as superseded. - CLAUDE.md Versions: Vite 7.3.3 -> 8.0.16, TanStack Start -> 1.168.25, Vitest -> 4.1.8, add the Vite+/Oxlint/Oxfmt line, drop the ESLint plugin line; monorepo layout + task line now reference vp run; rule 3 cites Oxlint; config-eslint removed from the package list. - REFERENCES.md: vite 8.0.16 + vite-plus/plugin-react rows, Vite+ lint/format section (ESLint/Prettier/Turbo removed), vitest 4.1.8, the drift note for Vite reversed to "adopted via ADR-0029". * fix(scripts): run TS dev/ops entrypoints via tsx; Docker prepare hook guard Surfaced by the live full-stack verification on Node 26. Node 26 only strip-types TS (it removed --experimental-transform-types), so bare `node src/.../cli.ts` fails on parameter properties / enums in the import graph (e.g. openehr-am adl2/parse.ts) with ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX. This is pre-existing, independent of the Vite+ migration. - Run the TS entrypoints (seed:dev, db:bootstrap/migrate/setup, env:*, build-migrate) via `tsx` (4.22.4, already present as a Vite+ peer; pinned). Production still runs the built `.output` bundle, not tsx. - Dockerfile: ENV VITE_GIT_HOOKS=0 so the root `prepare` script's `vp config` (ADR-0029) skips git-hook install in the git-less alpine build image. Verified end-to-end on the live stack (Node 26): docker build, db:setup, seed:dev (6 patients / 9 templates / 54 compositions), and the full-stack auth e2e (10/10, real Keycloak login against the built server). * fix(lint): disable tsgolint full typeCheck (preview panic); keep type-aware rules `vp lint` intermittently crashed with a tsgolint (typescript-go) panic `File ../.. has unknown extension` during full-program checking on this monorepo's cross-package `exports` resolution — a flaky lint gate. Set `lint.options.typeCheck: false` (the full tsc-style check inside the linter, which `tsc --noEmit` already covers and which is the path that panics) while keeping `typeAware: true`. Verified: 10/10 `vp lint` runs clean (zero panics) and the type-aware rules still fire (only-throw-error, no-misused-promises), alongside the AST inviolable rules (no-`as`, SDK-ban, the a11y gate). Re-enable typeCheck when tsgolint stabilises. ADR-0029 updated. * fix(ci): drop setup-vp (no pnpm on PATH); allowlist test-fixture secret First CI run surfaced two failures: - `pnpm: command not found` in every job — `voidzero-dev/setup-vp` installs Node + the `vp` CLI but does NOT put `pnpm` on PATH, and this CI is pnpm-script orchestrated (pnpm audit, `--filter exec`, restore-prepared, pnpm regen). `vp` is a workspace devDep (on node_modules/.bin after install), so setup-vp adds nothing here. Reverted ci/release/security + the restore-prepared composite to pnpm/action-setup@v6 + actions/setup-node@v6; the pnpm scripts still drive vp (build/lint/test/run). Kept `pnpm lint` (was eslint) + VITE_GIT_HOOKS=0. - gitleaks flagged a pre-existing test fixture (apps/web/src/server/crypto/__tests__/keystore.test.ts: `test-root-secret-…`, a dummy SIGNING_KEY_SECRET) via generic-api-key. Added a narrow allowlist regex in .gitleaks.toml (the literal `test-root-secret-…` shape only, so real secrets in tests still trip). Verified: gitleaks reports no leaks. * fix(security): resolve the CodeQL findings surfaced by the reformat The Oxfmt reformat's large diff made CodeQL attribute 5 pre-existing findings (2 high, 3 medium) to this PR ("code changes were too large"). Addressed each on its merits — none are runtime/app code: - js/insecure-temporary-file (admission-opt.e2e.test.ts): the OPT output defaulted to a predictable `/tmp/admission.opt`. Now defaults to a file in a freshly-created `mkdtempSync` dir (no symlink/pre-create race). - js/file-system-race (check-adr-refs.mjs): removed the stat-then-read TOCTOU; read directly, then skip oversized text by length. - js/file-access-to-http + js/http-to-file-access (openehr-fetch-schema.mjs): false positives — this dev-only tool's whole purpose is to read repo-pinned config (spec.json) and download the pinned openEHR schemas to disk, with every path segment validated by `safeSegment`. Added a narrow CodeQL `paths-ignore` for that one build script (out of the deployed app's attack surface). Verified: check:adr OK, openehr-am typechecks, lint clean. * fix(test): run the Storybook browser project on standalone vitest The CI "Storybook tests (browser)" job hung to the 15-min timeout under `vp test --project=storybook`. Root cause: vp bundles its own vitest, but the browser project loads the standalone `@vitest/browser` / `@vitest/browser-playwright` (4.1.8) — "Loaded vitest@0.1.24 and @vitest/browser@4.1.8 … Running mixed versions is not supported", which hangs browser mode at dep-bundling. Run the `storybook` browser project via the version-matched standalone `vitest` (the `test-storybook` / `:watch` scripts) instead of `vp test`. The `unit` + package suites stay on `vp test` (jsdom — no browser-mode version coupling). Verified locally: 10 files / 28 tests pass in ~8s, clean exit. ADR-0029 noted. * ci(licenses): expand allow-list to permissive + weak-copyleft; tsx exception The license gate false-positived on two legitimate deps: - openpgp 6.3.1 (LGPL-3.0+) — a weak-copyleft library used for signing (ADR-0010). The old allow-list "blocked copyleft by omission", flagging it. - tsx 4.22.4 — MIT (esbuild-kit/tsx) but the scanner reads a null license. Expanded `allow-licenses` from 15 to the full OSI PERMISSIVE + WEAK-COPYLEFT set (67 ids: BSD/MIT/Apache/ISC/Zlib/Unicode/… + LGPL-2/3, MPL-1/2, EPL-1/2, CDDL, CPL, MS-PL/MS-RL — all safe to consume as libraries from an Apache-2.0 app). Deliberately NOT added: STRONG / NETWORK copyleft (GPL-*, AGPL-*, OSL-*, RPL-*, RPSL, CPAL, EUPL, SISSL/SSPL) — such a *dependency* would impose its copyleft on this Apache-2.0 EPD, so it must stay a blocking review finding, not a silent pass. Added `pkg:npm/tsx` to `allow-dependencies-licenses` for the null-license false positive. Verified: covers the whole current dep graph (only LGPL-3.0+ was missing); YAML parses; GPL/AGPL stay excluded.
eleboucher
pushed a commit
to eleboucher/memini
that referenced
this pull request
Jun 15, 2026
This PR contains the following updates:
| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [vite](https://vite.dev) ([source](https://github.com/vitejs/vite/tree/HEAD/packages/vite)) | [`^7.0.0` → `^8.0.0`](https://renovatebot.com/diffs/npm/vite/7.3.5/8.0.16) |  |  |
---
> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/3) for more information.
---
### Release Notes
<details>
<summary>vitejs/vite (vite)</summary>
### [`v8.0.16`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-8016-2026-06-01-small)
[Compare Source](https://github.com/vitejs/vite/compare/v8.0.15...v8.0.16)
##### Bug Fixes
- **deps:** reject UNC paths for launch-editor-middleware ([#​22571](https://github.com/vitejs/vite/issues/22571)) ([50b9512](https://github.com/vitejs/vite/commit/50b951225bbf6151eb84a3ad5a454908ab4a76c9))
- reject windows alternate paths ([#​22572](https://github.com/vitejs/vite/issues/22572)) ([dc245c7](https://github.com/vitejs/vite/commit/dc245c71e5007ea4d891a025e2d69ac96c736546))
### [`v8.0.15`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-8015-2026-06-01-small)
[Compare Source](https://github.com/vitejs/vite/compare/v8.0.14...v8.0.15)
##### Features
- send 408 on request timeout ([#​22476](https://github.com/vitejs/vite/issues/22476)) ([c85c9ee](https://github.com/vitejs/vite/commit/c85c9eeb9aaf41f477b48b057146887bd5620797))
- update rolldown to 1.0.3 ([#​22538](https://github.com/vitejs/vite/issues/22538)) ([646dbed](https://github.com/vitejs/vite/commit/646dbedd2870f8ec48df0321177d8aa64bbd1575))
##### Bug Fixes
- capitalize error messages and remove spurious space in parse error ([#​22488](https://github.com/vitejs/vite/issues/22488)) ([85a0eff](https://github.com/vitejs/vite/commit/85a0eff1c82bbb7c99a0fe8e63704316578a40d3))
- **deps:** update all non-major dependencies ([#​22511](https://github.com/vitejs/vite/issues/22511)) ([2686d7d](https://github.com/vitejs/vite/commit/2686d7d0b722402204d3bcc687a87adea1bcf9fa))
- **dev:** fix html-proxy cache key mismatch for /@​fs/ HTML paths ([#​21762](https://github.com/vitejs/vite/issues/21762)) ([47c4213](https://github.com/vitejs/vite/commit/47c4213f134f562c41ed7c031e4788510cf7e31e))
- **glob:** error on relative glob in virtual module when no files match ([#​22497](https://github.com/vitejs/vite/issues/22497)) ([5c8e98f](https://github.com/vitejs/vite/commit/5c8e98f8b584ac5d42f0f9b8580c49792213b13c))
- **optimizer:** close the rolldown bundle when write() rejects ([#​22528](https://github.com/vitejs/vite/issues/22528)) ([e3cfb9d](https://github.com/vitejs/vite/commit/e3cfb9deecff563550fa1b8abd27656b8b292815))
- **resolve:** provide onWarn for viteResolvePlugin in JS plugin containers ([#​22509](https://github.com/vitejs/vite/issues/22509)) ([40985f1](https://github.com/vitejs/vite/commit/40985f1c09b7696e594e6c5695fbc315d2da2c83))
##### Miscellaneous Chores
- **deps:** update rolldown-related dependencies ([#​22566](https://github.com/vitejs/vite/issues/22566)) ([3052a67](https://github.com/vitejs/vite/commit/3052a67d9350f4c5076ab1c222c4a21a589cbcdd))
##### Code Refactoring
- correct logic in `collectAllModules` function ([#​22562](https://github.com/vitejs/vite/issues/22562)) ([6978a9c](https://github.com/vitejs/vite/commit/6978a9ceb942c4f5e211d52b8a1e569f8a65c80c))
### [`v8.0.14`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-8014-2026-05-21-small)
[Compare Source](https://github.com/vitejs/vite/compare/v8.0.13...v8.0.14)
##### Features
- update rolldown to 1.0.2 ([#​22484](https://github.com/vitejs/vite/issues/22484)) ([96efc88](https://github.com/vitejs/vite/commit/96efc88570b6a6ddf1a910f106920cbac07b3cf0))
##### Bug Fixes
- **deps:** update all non-major dependencies ([#​22471](https://github.com/vitejs/vite/issues/22471)) ([98b8163](https://github.com/vitejs/vite/commit/98b81632139d51820f82036e58d6fbbf122b77b3))
- **dev:** handle errors when sending messages to vite server ([#​22450](https://github.com/vitejs/vite/issues/22450)) ([e8e9a34](https://github.com/vitejs/vite/commit/e8e9a34dcf2540139de558a10187630884d10217))
- **html:** handle trailing slash paths in transformIndexHtml ([#​22480](https://github.com/vitejs/vite/issues/22480)) ([5d94d1b](https://github.com/vitejs/vite/commit/5d94d1bffdb2a15de9341194d89baec86ce1f693))
- **optimizer:** pass oxc jsx options to transformSync in dependency scan ([#​22342](https://github.com/vitejs/vite/issues/22342)) ([b3132da](https://github.com/vitejs/vite/commit/b3132dacea9c6e0cf526cd9f0f09d850f577c262))
##### Miscellaneous Chores
- **deps:** update rolldown-related dependencies ([#​22470](https://github.com/vitejs/vite/issues/22470)) ([7cb728e](https://github.com/vitejs/vite/commit/7cb728eb629cc677661f1bc52a044ffc0b87fc7f))
- remove irrelevant commits from changelog ([2c69495](https://github.com/vitejs/vite/commit/2c69495f250edf01132d4a20128de19dbe836086))
##### Code Refactoring
- **glob:** do not rewrite import path for absolute base ([#​22310](https://github.com/vitejs/vite/issues/22310)) ([0ae2844](https://github.com/vitejs/vite/commit/0ae2844ab6d6d1ccf78a2975b8132769fc35b302))
##### Tests
- **css:** sass does not use main field ([#​22449](https://github.com/vitejs/vite/issues/22449)) ([ebf39a0](https://github.com/vitejs/vite/commit/ebf39a04329ddc6ba765e006a5d463680a952270))
### [`v8.0.13`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-8013-2026-05-14-small)
[Compare Source](https://github.com/vitejs/vite/compare/v8.0.12...v8.0.13)
##### Features
- **bundled-dev:** add lazy bundling support ([#​21406](https://github.com/vitejs/vite/issues/21406)) ([4f0949f](https://github.com/vitejs/vite/commit/4f0949f3f13e4b2b34d32bf7b2b4de5f26bea192))
- **optimizer:** improve the esbuild plugin converter to pass some properties of build result to `onEnd` ([#​22357](https://github.com/vitejs/vite/issues/22357)) ([47071ce](https://github.com/vitejs/vite/commit/47071ce53f21726cf39e999c4407c4828ecbe957))
- update rolldown to 1.0.1 ([#​22444](https://github.com/vitejs/vite/issues/22444)) ([8c766a6](https://github.com/vitejs/vite/commit/8c766a6c5ee014969c4e32f29cc265e8e2c96e18))
##### Bug Fixes
- **build:** copy public directory after building same environment with `write=false` ([#​22328](https://github.com/vitejs/vite/issues/22328)) ([158e8ae](https://github.com/vitejs/vite/commit/158e8ae8efdf7075ab295727e36b5ff68da3243e))
- **css:** await sass/less/styl worker disposal on teardown (fix [#​22274](https://github.com/vitejs/vite/issues/22274)) ([#​22275](https://github.com/vitejs/vite/issues/22275)) ([b7edcb7](https://github.com/vitejs/vite/commit/b7edcb7d0dd17ddfeef4ace78d610c099216dade))
- **css:** keep deprecated `name`/`originalFileName` in synthetic `assetFileNames` call ([#​22439](https://github.com/vitejs/vite/issues/22439)) ([8e59c97](https://github.com/vitejs/vite/commit/8e59c97a44d923c4c06f67287a793c9aa5a4ebaa))
- make `isBundled` per environment ([#​22257](https://github.com/vitejs/vite/issues/22257)) ([a576326](https://github.com/vitejs/vite/commit/a5763266170f8606836da5c6f987b4b2fd6ddc55))
- **ssr:** avoid rewriting labels that collide with imports ([#​22451](https://github.com/vitejs/vite/issues/22451)) ([d9b18e0](https://github.com/vitejs/vite/commit/d9b18e0387a253628d3d834288e79c5f7e85d566))
##### Miscellaneous Chores
- remove irrelevant commits from changelog ([#​22430](https://github.com/vitejs/vite/issues/22430)) ([6ea3838](https://github.com/vitejs/vite/commit/6ea383859aaf0ef8e673b458f164e84aeb6ff51d))
- update changelog ([#​22413](https://github.com/vitejs/vite/issues/22413)) ([fcdc87c](https://github.com/vitejs/vite/commit/fcdc87cc6799857e2bab0f44f333a681694fff74))
### [`v8.0.12`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-8012-2026-05-11-small)
[Compare Source](https://github.com/vitejs/vite/compare/v8.0.11...v8.0.12)
##### Features
- update rolldown to 1.0.0 ([#​22401](https://github.com/vitejs/vite/issues/22401)) ([cf0ff41](https://github.com/vitejs/vite/commit/cf0ff4154b26cffbf18541ade1a50818842731d3))
##### Bug Fixes
- **deps:** update all non-major dependencies ([#​22420](https://github.com/vitejs/vite/issues/22420)) ([2be6000](https://github.com/vitejs/vite/commit/2be6000130e3ae2160acc301baa4f7913fbc1f6e))
- **module-runner:** prevent partial-exports race on concurrent imports of in-flight invalidated re-export chains ([#​22369](https://github.com/vitejs/vite/issues/22369)) ([f5a22e6](https://github.com/vitejs/vite/commit/f5a22e62ada75286138b7ceb3825e43958ef00e1))
- refer to `rolldownOptions` instead of deprecated `rollupOptions` in messages ([#​22400](https://github.com/vitejs/vite/issues/22400)) ([b675c7b](https://github.com/vitejs/vite/commit/b675c7b6697423275ad9dd521d3ce7c8679761a0))
- **worker:** apply `build.target` to worker bundle ([#​22404](https://github.com/vitejs/vite/issues/22404)) ([3c93fde](https://github.com/vitejs/vite/commit/3c93fde21f07d44db7669ca7484f4e7a8767afe5))
- **worker:** forward define to worker bundle transform ([#​22408](https://github.com/vitejs/vite/issues/22408)) ([d4838a0](https://github.com/vitejs/vite/commit/d4838a0358d9f04a980d4d2ac7263f21a6b28ee2))
##### Miscellaneous Chores
- **deps:** update dependency eslint-plugin-n to v18 ([#​22423](https://github.com/vitejs/vite/issues/22423)) ([2fe7bd2](https://github.com/vitejs/vite/commit/2fe7bd2d73beb697a3d149e943ac74b768c9d27f))
- **deps:** update rolldown-related dependencies ([#​22421](https://github.com/vitejs/vite/issues/22421)) ([66b9eb3](https://github.com/vitejs/vite/commit/66b9eb35188007e0e9a1bd03b4be820016cad60b))
### [`v8.0.11`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-8011-2026-05-07-small)
[Compare Source](https://github.com/vitejs/vite/compare/v8.0.10...v8.0.11)
##### Features
- update rolldown to 1.0.0-rc.18 ([#​22360](https://github.com/vitejs/vite/issues/22360)) ([3f80524](https://github.com/vitejs/vite/commit/3f80524aa1fa40bfa831f1a1bf2641c3979ba396))
##### Bug Fixes
- **deps:** update all non-major dependencies ([#​22334](https://github.com/vitejs/vite/issues/22334)) ([672c962](https://github.com/vitejs/vite/commit/672c96288fd5440bbecddc65551e713edeb8d403))
- **deps:** update all non-major dependencies ([#​22382](https://github.com/vitejs/vite/issues/22382)) ([5c0cfcb](https://github.com/vitejs/vite/commit/5c0cfcb83dde2c6e25b6c3215dd622956bf29631))
- **glob:** align hmr matcher options with glob enumeration ([#​22306](https://github.com/vitejs/vite/issues/22306)) ([30028f9](https://github.com/vitejs/vite/commit/30028f94516fa06dd0212567373169b3b3f6e393))
- make separate object instance for each environment ([#​22276](https://github.com/vitejs/vite/issues/22276)) ([7c2aa3b](https://github.com/vitejs/vite/commit/7c2aa3b40ba00ce1299e4f31932c7929f179a80a))
##### Documentation
- **create-vite:** list react-compiler templates in README ([#​22347](https://github.com/vitejs/vite/issues/22347)) ([7c3a61f](https://github.com/vitejs/vite/commit/7c3a61f42da6445904e93f0e29e9a2a838fa684a))
- explain mergeConfig skips null/undefined ([#​22325](https://github.com/vitejs/vite/issues/22325)) ([2151f70](https://github.com/vitejs/vite/commit/2151f701dc98270c905c540b209fb6d23d53d3ad))
- mention native config loader in CLI options ([#​22348](https://github.com/vitejs/vite/issues/22348)) ([0420c5d](https://github.com/vitejs/vite/commit/0420c5d37b6049476b6e6c16662be372575dd683))
- update evan's x handle ([640202a](https://github.com/vitejs/vite/commit/640202a2167b0c19b94e4d3b8ff87309ae1f44d0))
##### Miscellaneous Chores
- **deps:** update dependency tsdown to ^0.21.10 ([#​22333](https://github.com/vitejs/vite/issues/22333)) ([3b51e05](https://github.com/vitejs/vite/commit/3b51e050214c5a817c163838ab8643fe34c7d0c3))
- **deps:** update rolldown-related dependencies ([#​22383](https://github.com/vitejs/vite/issues/22383)) ([555ff36](https://github.com/vitejs/vite/commit/555ff36de70a43b3b3dc22f958bf78fe75e11d67))
- **deps:** update transitive packages to fix npm audit alerts ([#​22316](https://github.com/vitejs/vite/issues/22316)) ([86aee62](https://github.com/vitejs/vite/commit/86aee6268aa879d74f68a890392c1dee973ebf05))
##### Code Refactoring
- devtools integration ([#​22312](https://github.com/vitejs/vite/issues/22312)) ([3c8bf06](https://github.com/vitejs/vite/commit/3c8bf064ec76e311f2d8be3a37dcfdcdd4e4253c))
- remove unnecessary async ([#​22296](https://github.com/vitejs/vite/issues/22296)) ([b31fd35](https://github.com/vitejs/vite/commit/b31fd355d93eb166573362bd09c07745b9f76755))
- show direct path type in bad character warning ([#​22339](https://github.com/vitejs/vite/issues/22339)) ([0c162e9](https://github.com/vitejs/vite/commit/0c162e96a6545c93808e7338b9adeca2636596fa))
##### Tests
- **create-vite:** use short help alias ([#​22389](https://github.com/vitejs/vite/issues/22389)) ([994ab66](https://github.com/vitejs/vite/commit/994ab66bc4dc872278d8353d710ffc4bbd881f8d))
### [`v8.0.10`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-8010-2026-04-23-small)
[Compare Source](https://github.com/vitejs/vite/compare/v8.0.9...v8.0.10)
##### Features
- update rolldown to 1.0.0-rc.17 ([#​22299](https://github.com/vitejs/vite/issues/22299)) ([a4d06d9](https://github.com/vitejs/vite/commit/a4d06d9015167d30fe8ac63d1ce2edc146cdca31))
##### Bug Fixes
- `hmrClient.logger.debug` and `hmrClient.logger.error` looked different from other HMR logs ([#​22147](https://github.com/vitejs/vite/issues/22147)) ([a4d828f](https://github.com/vitejs/vite/commit/a4d828f2d5ed85440bc0774eab342e6f9a5e5f62))
- **css:** show filename in CSS minification warnings for `.css?inline` ([#​22292](https://github.com/vitejs/vite/issues/22292)) ([83f0a78](https://github.com/vitejs/vite/commit/83f0a785a2ae48d6761fb69f4b0523a24ae9342c))
- **optimizer:** allow user transform.target to override default in optimizeDeps ([#​22273](https://github.com/vitejs/vite/issues/22273)) ([5c7cec6](https://github.com/vitejs/vite/commit/5c7cec69b637544ab16009d8758df7dbbf7f2674))
- remove format sniffing module resolution from JS resolver ([#​22297](https://github.com/vitejs/vite/issues/22297)) ([b8a21cc](https://github.com/vitejs/vite/commit/b8a21cc821c1434ac9d2b85ec53005df9edc306b))
##### Code Refactoring
- enable some typecheck rules ([#​22278](https://github.com/vitejs/vite/issues/22278)) ([9437518](https://github.com/vitejs/vite/commit/943751801f70057ae94f9092e349c8f3fd9ccdf2))
- typecheck client directory ([#​22284](https://github.com/vitejs/vite/issues/22284)) ([40a0847](https://github.com/vitejs/vite/commit/40a0847276502b33a3942b3cfab04b20218f3543))
### [`v8.0.9`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-809-2026-04-20-small)
[Compare Source](https://github.com/vitejs/vite/compare/v8.0.8...v8.0.9)
##### Features
- update rolldown to 1.0.0-rc.16 ([#​22248](https://github.com/vitejs/vite/issues/22248)) ([2947edd](https://github.com/vitejs/vite/commit/2947edd57ceb64a0b4dc43269743e8e44e68c09b))
##### Bug Fixes
- allow binding when strictPort is set but wildcard port is in use ([#​22150](https://github.com/vitejs/vite/issues/22150)) ([dfc8aa5](https://github.com/vitejs/vite/commit/dfc8aa5057dd8ec2b1223980d1e2eeb946ac3384))
- **build:** emptyOutDir should happen for watch rebuilds ([#​22207](https://github.com/vitejs/vite/issues/22207)) ([ee52267](https://github.com/vitejs/vite/commit/ee522672bb374c7ff95a347f14732491121b1cd6))
- **bundled-dev:** reject requests to HMR patch files in non potentially trustworthy origins ([#​22269](https://github.com/vitejs/vite/issues/22269)) ([868f141](https://github.com/vitejs/vite/commit/868f1411a6f474baa4417f2d6524692dd452f760))
- **css:** use unique key for cssEntriesMap to prevent same-basename collision ([#​22039](https://github.com/vitejs/vite/issues/22039)) ([374bb5d](https://github.com/vitejs/vite/commit/374bb5d597fcd0485e929565c698d8ed219136f8))
- **deps:** update all non-major dependencies ([#​22219](https://github.com/vitejs/vite/issues/22219)) ([4cd0d67](https://github.com/vitejs/vite/commit/4cd0d6760edd5fb0841abe86538de3c225e880a1))
- **deps:** update all non-major dependencies ([#​22268](https://github.com/vitejs/vite/issues/22268)) ([c28e9c1](https://github.com/vitejs/vite/commit/c28e9c12a849f80e6fdc93f42283ad2863ab9dbc))
- detect Deno workspace root (fix [#​22237](https://github.com/vitejs/vite/issues/22237)) ([#​22238](https://github.com/vitejs/vite/issues/22238)) ([1b793c0](https://github.com/vitejs/vite/commit/1b793c0e1726467fffd06ffad9bc81c61a840188))
- **dev:** handle errors in `watchChange` hook ([#​22188](https://github.com/vitejs/vite/issues/22188)) ([fc08bda](https://github.com/vitejs/vite/commit/fc08bdab9bba871b03689f2f6997c3a4ba4351da))
- **optimizer:** handle more chars that will be sanitized ([#​22208](https://github.com/vitejs/vite/issues/22208)) ([3f24533](https://github.com/vitejs/vite/commit/3f24533ac4845ed22547279d1721bd82a35345e3))
- skip fallback sourcemap generation for `?raw` imports ([#​22148](https://github.com/vitejs/vite/issues/22148)) ([3ec9cda](https://github.com/vitejs/vite/commit/3ec9cdaac7936ca32d0956c4cb1eb6e172945996))
##### Documentation
- align the descriptions in READMEs ([#​22231](https://github.com/vitejs/vite/issues/22231)) ([44c42b9](https://github.com/vitejs/vite/commit/44c42b97639bb6ad777e66d752b2829cccb9a27a))
- fix reuses wording in dev environment comment ([#​22173](https://github.com/vitejs/vite/issues/22173)) ([9163412](https://github.com/vitejs/vite/commit/9163412fdfec7fb1656529713326a5b5c5e986ea))
- fix wording in sass error comment ([#​22214](https://github.com/vitejs/vite/issues/22214)) ([bc5c6a7](https://github.com/vitejs/vite/commit/bc5c6a7a498845dff20dc410c395355b79a4b753))
- update build CLI defaults ([#​22261](https://github.com/vitejs/vite/issues/22261)) ([605bb97](https://github.com/vitejs/vite/commit/605bb97994678a1bb70a8de9a85c29d5f5d48c5a))
##### Miscellaneous Chores
- **deps:** update dependency dotenv-expand to v13 ([#​22271](https://github.com/vitejs/vite/issues/22271)) ([0a3887d](https://github.com/vitejs/vite/commit/0a3887da18812cacb254c616e4dd35631e776fda))
### [`v8.0.8`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-808-2026-04-09-small)
[Compare Source](https://github.com/vitejs/vite/compare/v8.0.7...v8.0.8)
##### Features
- update rolldown to 1.0.0-rc.15 ([#​22201](https://github.com/vitejs/vite/issues/22201)) ([6baf587](https://github.com/vitejs/vite/commit/6baf587255936e91348cbe624caefd10e8c607ab))
##### Bug Fixes
- avoid `dns.getDefaultResultOrder` temporary ([#​22202](https://github.com/vitejs/vite/issues/22202)) ([15f1c15](https://github.com/vitejs/vite/commit/15f1c15ac9be343ee4f317fd025c3d67f0c7bd53))
- **ssr:** class property keys hoisting matching imports ([#​22199](https://github.com/vitejs/vite/issues/22199)) ([e137601](https://github.com/vitejs/vite/commit/e1376018cd516d6970534fce495e24f9ee683ce3))
### [`v8.0.7`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-807-2026-04-07-small)
[Compare Source](https://github.com/vitejs/vite/compare/v8.0.6...v8.0.7)
##### Bug Fixes
- use sync dns.getDefaultResultOrder instead of dns.promises ([#​22185](https://github.com/vitejs/vite/issues/22185)) ([5c05b04](https://github.com/vitejs/vite/commit/5c05b04db6f3f64af60ff6525eb5f04bc330fbb5))
### [`v8.0.6`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-806-2026-04-07-small)
[Compare Source](https://github.com/vitejs/vite/compare/v8.0.5...v8.0.6)
##### Features
- update rolldown to 1.0.0-rc.13 ([#​22097](https://github.com/vitejs/vite/issues/22097)) ([51d3e48](https://github.com/vitejs/vite/commit/51d3e48980bf3e352d31ecde49d1aa56859918e0))
##### Bug Fixes
- **css:** avoid mutating sass error multiple times ([#​22115](https://github.com/vitejs/vite/issues/22115)) ([d5081c2](https://github.com/vitejs/vite/commit/d5081c2f3e73f3fc06956d8cf5f2cf06463c2325))
- **optimize-deps:** hoist CJS interop assignment ([#​22156](https://github.com/vitejs/vite/issues/22156)) ([17a8f9e](https://github.com/vitejs/vite/commit/17a8f9edfcd3b9344668120a84e3328aeada3c97))
##### Performance Improvements
- early return in `getLocalhostAddressIfDiffersFromDNS` when DNS order is `verbatim` ([#​22151](https://github.com/vitejs/vite/issues/22151)) ([56ec256](https://github.com/vitejs/vite/commit/56ec25613dba6cc71911f7af6e545ebcb77ec012))
##### Miscellaneous Chores
- **create-vite:** remove unnecessary DOM.Iterable ([#​22168](https://github.com/vitejs/vite/issues/22168)) ([bdc53ab](https://github.com/vitejs/vite/commit/bdc53ab1e67f7e2e000112eeed9c85413ddb0e9e))
- replace remaining prettier script ([#​22179](https://github.com/vitejs/vite/issues/22179)) ([af71fb2](https://github.com/vitejs/vite/commit/af71fb26dd15098b9523efc3d8ed04f27553174b))
### [`v8.0.5`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-805-2026-04-06-small)
[Compare Source](https://github.com/vitejs/vite/compare/v8.0.4...v8.0.5)
##### Bug Fixes
- apply server.fs check to env transport ([#​22159](https://github.com/vitejs/vite/issues/22159)) ([f02d9fd](https://github.com/vitejs/vite/commit/f02d9fde0b195afe3ea2944414186962fbbe41e0))
- avoid path traversal with optimize deps sourcemap handler ([#​22161](https://github.com/vitejs/vite/issues/22161)) ([79f002f](https://github.com/vitejs/vite/commit/79f002f2286c03c88c7b74c511c7f9fc6dc46694))
- check `server.fs` after stripping query as well ([#​22160](https://github.com/vitejs/vite/issues/22160)) ([a9a3df2](https://github.com/vitejs/vite/commit/a9a3df299378d9cbc5f069e3536a369f8188c8ff))
- disallow referencing files outside the package from sourcemap ([#​22158](https://github.com/vitejs/vite/issues/22158)) ([f05f501](https://github.com/vitejs/vite/commit/f05f50173461789e0f1323fe06b51f18ca41c132))
### [`v8.0.4`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-804-2026-04-06-small)
[Compare Source](https://github.com/vitejs/vite/compare/v8.0.3...v8.0.4)
##### Features
- allow esbuild 0.28 as peer deps ([#​22155](https://github.com/vitejs/vite/issues/22155)) ([b0da973](https://github.com/vitejs/vite/commit/b0da97372f5dba73e78035d1cc7680466ff6cf7f))
- **hmr:** truncate list of files on hmr update ([#​21535](https://github.com/vitejs/vite/issues/21535)) ([d00e806](https://github.com/vitejs/vite/commit/d00e806d7be15ebbfe7875e9244963d80ee8b142))
- **optimizer:** log when dependency scanning or bundling takes over 1s ([#​21797](https://github.com/vitejs/vite/issues/21797)) ([f61a1ab](https://github.com/vitejs/vite/commit/f61a1ab33b05dc6f6a7eda6e8bc9c4c5b9aab133))
##### Bug Fixes
- `hasBothRollupOptionsAndRolldownOptions` should return `false` for proxy case ([#​22043](https://github.com/vitejs/vite/issues/22043)) ([99897d2](https://github.com/vitejs/vite/commit/99897d27b44dd73307fa03e2f11f0baa1a1dc939))
- add types for `vite/modulepreload-polyfill` ([#​22126](https://github.com/vitejs/vite/issues/22126)) ([17330d2](https://github.com/vitejs/vite/commit/17330d2b9e132460f194d6d4b547cfee7e25c788))
- **deps:** update all non-major dependencies ([#​22073](https://github.com/vitejs/vite/issues/22073)) ([6daa10f](https://github.com/vitejs/vite/commit/6daa10ff1e8d15a90f49d8dd909ff208da85d6d8))
- **deps:** update all non-major dependencies ([#​22143](https://github.com/vitejs/vite/issues/22143)) ([22b0166](https://github.com/vitejs/vite/commit/22b016612703320db45c64a2fe44472051ef5ec5))
- **resolve:** resolve tsconfig paths starting with `#` ([#​22038](https://github.com/vitejs/vite/issues/22038)) ([3460fc5](https://github.com/vitejs/vite/commit/3460fc55aa89aef4103d2c05ac2e446032511a6d))
- **ssr:** use browser platform for webworker SSR builds (fix [#​21969](https://github.com/vitejs/vite/issues/21969)) ([#​21963](https://github.com/vitejs/vite/issues/21963)) ([364c227](https://github.com/vitejs/vite/commit/364c2273a121dad4d93ec3b9ec87ffbe0d6e860b))
##### Documentation
- add `environment.fetchModule` documentation ([#​22035](https://github.com/vitejs/vite/issues/22035)) ([54229e7](https://github.com/vitejs/vite/commit/54229e78631ebf10d1db767b51ea85f3cf06718a))
##### Miscellaneous Chores
- **deps:** update rolldown-related dependencies ([#​21989](https://github.com/vitejs/vite/issues/21989)) ([0ded627](https://github.com/vitejs/vite/commit/0ded6274579e8bda6b22a7ba93b15d15b4c28b78))
##### Code Refactoring
- upgrade to typescript 6 ([#​22110](https://github.com/vitejs/vite/issues/22110)) ([cc41398](https://github.com/vitejs/vite/commit/cc41398c2cf0bb5061cf0ca5dc3b408ae7e41191))
### [`v8.0.3`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-803-2026-03-26-small)
[Compare Source](https://github.com/vitejs/vite/compare/v8.0.2...v8.0.3)
##### Features
- update rolldown to 1.0.0-rc.12 ([#​22024](https://github.com/vitejs/vite/issues/22024)) ([84164ef](https://github.com/vitejs/vite/commit/84164ef47b24b1de114f1c29446a9e650825d4ea))
##### Bug Fixes
- **html:** cache unfiltered CSS list to prevent missing styles across entries ([#​22017](https://github.com/vitejs/vite/issues/22017)) ([5464190](https://github.com/vitejs/vite/commit/5464190a3ee8f23db20004e7818186fbcc32b0e5))
- **module-runner:** handle non-ascii characters in base64 sourcemaps ([#​21985](https://github.com/vitejs/vite/issues/21985)) ([77c95bf](https://github.com/vitejs/vite/commit/77c95bff834c43f8be9fe513c10b5393805a7487))
- **module-runner:** skip re-import if the runner is closed ([#​22020](https://github.com/vitejs/vite/issues/22020)) ([ee2c2cd](https://github.com/vitejs/vite/commit/ee2c2cd2c2ce3f53088bd2313fa23e9d52a49b4f))
- **optimizer:** scan is not resolving sub path import if used in a glob import ([#​22018](https://github.com/vitejs/vite/issues/22018)) ([ddfe20d](https://github.com/vitejs/vite/commit/ddfe20d19e95a323fa3c8d2c19a02c4e02f93824))
- **ssr:** ssrTransform incorrectly rewrites `meta` identifier inside `import.meta` when a binding named `meta` exists ([#​22019](https://github.com/vitejs/vite/issues/22019)) ([cff5f0c](https://github.com/vitejs/vite/commit/cff5f0cca5f08c2ce50f233441485e10b6e115e9))
##### Miscellaneous Chores
- **deps:** bump picomatch from 4.0.3 to 4.0.4 ([#​22027](https://github.com/vitejs/vite/issues/22027)) ([7e56003](https://github.com/vitejs/vite/commit/7e56003fec3e1b94a20516a901580198a51da614))
##### Tests
- **html:** add tests for `getCssFilesForChunk` ([#​22016](https://github.com/vitejs/vite/issues/22016)) ([43fbbf9](https://github.com/vitejs/vite/commit/43fbbf9a09dfd17456ae0611d034c366fcb38998))
### [`v8.0.2`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-802-2026-03-23-small)
[Compare Source](https://github.com/vitejs/vite/compare/v8.0.1...v8.0.2)
##### Features
- update rolldown to 1.0.0-rc.11 ([#​21998](https://github.com/vitejs/vite/issues/21998)) ([ff91c31](https://github.com/vitejs/vite/commit/ff91c319facd602dc5eea81ed7e7d79ae7dadb95))
##### Bug Fixes
- **deps:** update all non-major dependencies ([#​21988](https://github.com/vitejs/vite/issues/21988)) ([9b7d150](https://github.com/vitejs/vite/commit/9b7d15002a75474421bc5636238336d88c7fe2f3))
##### Miscellaneous Chores
- **deps:** update dependency [@​vitejs/devtools](https://github.com/vitejs/devtools) to ^0.1.5 ([#​21992](https://github.com/vitejs/vite/issues/21992)) ([b2dd65b](https://github.com/vitejs/vite/commit/b2dd65bf2f113719b72450f2e19696213fd9e255))
### [`v8.0.1`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-8016-2026-06-01-small)
[Compare Source](https://github.com/vitejs/vite/compare/v8.0.0...v8.0.1)
##### Bug Fixes
- **deps:** reject UNC paths for launch-editor-middleware ([#​22571](https://github.com/vitejs/vite/issues/22571)) ([50b9512](https://github.com/vitejs/vite/commit/50b951225bbf6151eb84a3ad5a454908ab4a76c9))
- reject windows alternate paths ([#​22572](https://github.com/vitejs/vite/issues/22572)) ([dc245c7](https://github.com/vitejs/vite/commit/dc245c71e5007ea4d891a025e2d69ac96c736546))
### [`v8.0.0`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#800-2026-03-12)
[Compare Source](https://github.com/vitejs/vite/compare/v7.3.5...v8.0.0)

Today, we're thrilled to announce the release of the next Vite major:
- **[Vite 8.0 announcement blog post](https://vite.dev/blog/announcing-vite8.html)**
- [Docs](https://vite.dev/) (translations: [简体中文](https://cn.vite.dev/), [日本語](https://ja.vite.dev/), [Español](https://es.vite.dev/), [Português](https://pt.vite.dev/), [한국어](https://ko.vite.dev/), [Deutsch](https://de.vite.dev/), [فارسی](https://fa.vite.dev/))
- [Migration Guide](https://vite.dev/guide/migration.html)
##### ⚠ BREAKING CHANGES
- remove `import.meta.hot.accept` resolution fallback ([#​21382](https://github.com/vitejs/vite/issues/21382)) ([71d0797](https://github.com/vitejs/vite/commit/71d0797a719440f2a09b3364bfcf18576c2b67fb))
- update default browser target ([#​21193](https://github.com/vitejs/vite/issues/21193)) ([8c3dd06](https://github.com/vitejs/vite/commit/8c3dd06bd9903bf0e6bc51f3554eea8cb6b26903))
- the epic `rolldown-vite` merge ([#​21189](https://github.com/vitejs/vite/issues/21189)) ([4a7f8d4](https://github.com/vitejs/vite/commit/4a7f8d43e6b14b89fef278c3ea86f9e3f64b7fc2))
##### Features
- update rolldown to 1.0.0-rc.9 ([#​21813](https://github.com/vitejs/vite/issues/21813)) ([f05be0e](https://github.com/vitejs/vite/commit/f05be0eabf5c045b8892d463081da3c8fbf5a5ae))
- warn when `vite-tsconfig-paths` plugin is detected ([#​21781](https://github.com/vitejs/vite/issues/21781)) ([ada493e](https://github.com/vitejs/vite/commit/ada493e4214ef2028b96583550443a386be2e2ae))
- **css:** support es2025 build target for lightningcss ([#​21769](https://github.com/vitejs/vite/issues/21769)) ([08906e7](https://github.com/vitejs/vite/commit/08906e76f2fc0e55c8aea6243f6203ce0c78f106))
- forward browser console logs and errors to dev server terminal ([#​20916](https://github.com/vitejs/vite/issues/20916)) ([2540ed0](https://github.com/vitejs/vite/commit/2540ed06d0b6f93829d2d764b6a02f7dbfd14923))
- update rolldown to 1.0.0-rc.8 ([#​21790](https://github.com/vitejs/vite/issues/21790)) ([a0c950e](https://github.com/vitejs/vite/commit/a0c950e30945cc97fb2381a2affac086730fa31e))
- export `Visitor` and `ESTree` from `rolldown/utils` ([#​21664](https://github.com/vitejs/vite/issues/21664)) ([45de31e](https://github.com/vitejs/vite/commit/45de31e5ffcc514832aec96fa6e09a189c26d684))
- update rolldown to 1.0.0-rc.6 ([#​21714](https://github.com/vitejs/vite/issues/21714)) ([37a65f8](https://github.com/vitejs/vite/commit/37a65f8c31b5baeb4dadecfd4da98f81bae4202e))
- use util.inspect for CLI error display ([#​21668](https://github.com/vitejs/vite/issues/21668)) ([5f425a9](https://github.com/vitejs/vite/commit/5f425a9126ad1a483f482970bef8c29a0e721a3c))
- update rolldown to 1.0.0-rc.5 ([#​21660](https://github.com/vitejs/vite/issues/21660)) ([b3ddbc5](https://github.com/vitejs/vite/commit/b3ddbc54ee5b836852b09811c8e920b2b2cde7cb))
- update rolldown to 1.0.0-rc.4 ([#​21617](https://github.com/vitejs/vite/issues/21617)) ([1ee5c7f](https://github.com/vitejs/vite/commit/1ee5c7f796c24d7319fbd5258bbdce4968859efe))
- **wasm:** add SSR support for `.wasm?init` ([#​21102](https://github.com/vitejs/vite/issues/21102)) ([216a3b5](https://github.com/vitejs/vite/commit/216a3b53c610918027a7713a0d5495628f77d306))
- integrate devtools ([#​21331](https://github.com/vitejs/vite/issues/21331)) ([acbf507](https://github.com/vitejs/vite/commit/acbf507bcb05f9cd9525c765431b3e0ed97328e4))
- update rolldown to 1.0.0-rc.3 ([#​21554](https://github.com/vitejs/vite/issues/21554)) ([43358e9](https://github.com/vitejs/vite/commit/43358e97cd6485513f25ee11133333cba05841e3))
- **manifest:** add `assets` field for standalone CSS entry points ([#​21015](https://github.com/vitejs/vite/issues/21015)) ([f289b9b](https://github.com/vitejs/vite/commit/f289b9b0ce7821b1554b878d083c426e7a695b59))
- update rolldown to 1.0.0-rc.2 ([#​21512](https://github.com/vitejs/vite/issues/21512)) ([fa136a9](https://github.com/vitejs/vite/commit/fa136a9e68921f3ca396e0870193fe805fbfb7b4))
- **bundled-dev:** support worker in initial bundle ([#​21415](https://github.com/vitejs/vite/issues/21415)) ([f3d3149](https://github.com/vitejs/vite/commit/f3d31499c714fe5c5acf8355520624c662f9d79f))
- **dev:** detect port conflicts on wildcard hosts ([#​21381](https://github.com/vitejs/vite/issues/21381)) ([b0dd5a9](https://github.com/vitejs/vite/commit/b0dd5a993fd2f95c8cb2190a3ca4296bc9e06359))
- shortcuts case insensitive ([#​21224](https://github.com/vitejs/vite/issues/21224)) ([7796ade](https://github.com/vitejs/vite/commit/7796aded764bca987abfec8ab0ad0438c5a5e7eb))
- update rolldown to 1.0.0-rc.1 ([#​21463](https://github.com/vitejs/vite/issues/21463)) ([ff9dd7f](https://github.com/vitejs/vite/commit/ff9dd7fef0d3c898e317fca84a629828f3e28936))
- warn if `envPrefix` contains spaces ([#​21292](https://github.com/vitejs/vite/issues/21292)) ([9fcde3c](https://github.com/vitejs/vite/commit/9fcde3c870896a62fbca19be8ee14efab9393f4a))
- update rolldown to 1.0.0-beta.60 ([#​21408](https://github.com/vitejs/vite/issues/21408)) ([c33aa7c](https://github.com/vitejs/vite/commit/c33aa7cfd142a0dd38ed89589fc7b04cf8866791))
- update rolldown to 1.0.0-beta.59 ([#​21374](https://github.com/vitejs/vite/issues/21374)) ([0037943](https://github.com/vitejs/vite/commit/00379439fa62383460b056d587d0366597c19ab4))
- add `ignoreOutdatedRequests` option to `optimizeDeps` ([#​21364](https://github.com/vitejs/vite/issues/21364)) ([b2e75aa](https://github.com/vitejs/vite/commit/b2e75aabe93e3219f40fa5ad8755d53cdd2439b5))
- add ios to default esbuild targets ([#​21342](https://github.com/vitejs/vite/issues/21342)) ([daae6e9](https://github.com/vitejs/vite/commit/daae6e9f5dd223258a9e7a9a7fa22c8a4564902f))
- update rolldown to 1.0.0-beta.58 ([#​21354](https://github.com/vitejs/vite/issues/21354)) ([ba40cef](https://github.com/vitejs/vite/commit/ba40cef16d20590f7115d4d628d9b79fa0783473))
- update rolldown to 1.0.0-beta.57 ([#​21335](https://github.com/vitejs/vite/issues/21335)) ([d5412ef](https://github.com/vitejs/vite/commit/d5412ef4c472bc5fef4ed69cfee4ef4a929c6be9))
- **css:** support es2024 build target for lightningcss ([#​21294](https://github.com/vitejs/vite/issues/21294)) ([bd33b8e](https://github.com/vitejs/vite/commit/bd33b8e08768fdcef0b09e3eefa649fdcafdd397))
- update rolldown to 1.0.0-beta.56 ([#​21323](https://github.com/vitejs/vite/issues/21323)) ([9847a63](https://github.com/vitejs/vite/commit/9847a634cf36de2e6ac0043ffd22cefb1b5951bd))
- introduce v2 native plugins and enable it by default ([#​21268](https://github.com/vitejs/vite/issues/21268)) ([42f2ab3](https://github.com/vitejs/vite/commit/42f2ab3aec7cd0e03e195611b1e1ddabbedc9d61))
- **ssr:** avoid errors when rewriting already rewritten stacktrace ([#​21269](https://github.com/vitejs/vite/issues/21269)) ([98d9a33](https://github.com/vitejs/vite/commit/98d9a33274d9ac90780786afa612d916feddf2e3))
- update rolldown to 1.0.0-beta.55 ([#​21300](https://github.com/vitejs/vite/issues/21300)) ([2c8db85](https://github.com/vitejs/vite/commit/2c8db858d7081e898f63ce9569c3f19a91a10956))
- update rolldown to 1.0.0-beta.54 ([#​21267](https://github.com/vitejs/vite/issues/21267)) ([c751172](https://github.com/vitejs/vite/commit/c75117213cb1d2d13554fbc26a75e8df191c27eb))
- add a warning that is output when a plugin sets esbuild related options ([#​21218](https://github.com/vitejs/vite/issues/21218)) ([200646b](https://github.com/vitejs/vite/commit/200646b14397bfb80e9b29d2e4b33fcfc72d6b2c))
- highly experimental full bundle mode ([#​21235](https://github.com/vitejs/vite/issues/21235)) ([83d8c99](https://github.com/vitejs/vite/commit/83d8c99753d8bd5c1ea9b7a00e6998c865dad4e2))
- print esbuild options when both esbuild and oxc options are set ([#​21216](https://github.com/vitejs/vite/issues/21216)) ([08ae87b](https://github.com/vitejs/vite/commit/08ae87b14a3ce5f7cb3f1a382f497d36d0c2e01b))
- update default browser target ([#​21193](https://github.com/vitejs/vite/issues/21193)) ([8c3dd06](https://github.com/vitejs/vite/commit/8c3dd06bd9903bf0e6bc51f3554eea8cb6b26903))
- the epic `rolldown-vite` merge ([#​21189](https://github.com/vitejs/vite/issues/21189)) ([4a7f8d4](https://github.com/vitejs/vite/commit/4a7f8d43e6b14b89fef278c3ea86f9e3f64b7fc2))
##### Bug Fixes
- **deps:** update all non-major dependencies ([#​21786](https://github.com/vitejs/vite/issues/21786)) ([eaa4352](https://github.com/vitejs/vite/commit/eaa4352af8f8658e3a10a9945ad9c227fcb2f28a))
- use `watch.watcher` instead of `watch.notify` ([#​21793](https://github.com/vitejs/vite/issues/21793)) ([88953b3](https://github.com/vitejs/vite/commit/88953b331d6b6acf20dc1731745f27712b091fd9))
- **css:** apply `server.origin` to public file URLs in CSS (fix [#​18457](https://github.com/vitejs/vite/issues/18457)) ([#​21697](https://github.com/vitejs/vite/issues/21697)) ([c967f48](https://github.com/vitejs/vite/commit/c967f48b2e888585e977c3a8d829f7370eb40922))
- **deps:** update all non-major dependencies ([#​21732](https://github.com/vitejs/vite/issues/21732)) ([5c921ca](https://github.com/vitejs/vite/commit/5c921ca9bfe64327df82b04ae34ccfe0a7cfa297))
- **dev:** disable extglobs for consistency ([#​21745](https://github.com/vitejs/vite/issues/21745)) ([1958eeb](https://github.com/vitejs/vite/commit/1958eeb34f9eab93f106b785c1c2ddf97b5c3b3a))
- **lib:** keep annotation comments for es output ([#​21740](https://github.com/vitejs/vite/issues/21740)) ([dd3c4f4](https://github.com/vitejs/vite/commit/dd3c4f4cf0f9e665e56e6d9a9cb7007fc3ac0dc3))
- **optimizer:** avoid error happening with a package with asset entrypoint ([#​21766](https://github.com/vitejs/vite/issues/21766)) ([f7e1d07](https://github.com/vitejs/vite/commit/f7e1d0720e6b9f2ce5d358b6a23ebdb72c51be70))
- **ssr:** throw friendly error when calling `ssrLoadModule` with non-runnable ssr env ([#​21739](https://github.com/vitejs/vite/issues/21739)) ([1fa736e](https://github.com/vitejs/vite/commit/1fa736e802c3f0fa0eacdda1d5d1c976794459bd))
- **types:** remove extends ImportMeta from ModuleRunnerImportMeta ([#​21710](https://github.com/vitejs/vite/issues/21710)) ([0176d45](https://github.com/vitejs/vite/commit/0176d45deb29f5db1f551d20d828598c2130be36))
- **wasm:** reset assetUrlRE.lastIndex before .test() in SSR builds ([#​21780](https://github.com/vitejs/vite/issues/21780)) ([3a0d8d9](https://github.com/vitejs/vite/commit/3a0d8d94a8868f5e118c81bc35a657ef19ff7d82))
- **deps:** update all non-major dependencies ([#​21691](https://github.com/vitejs/vite/issues/21691)) ([521fdc0](https://github.com/vitejs/vite/commit/521fdc0ced51ddee7f728e6f891f36ebc6c0e1ce))
- **optimizer:** avoid duplicate modules when `preserveSymlinks` is enabled ([#​21720](https://github.com/vitejs/vite/issues/21720)) ([72165e0](https://github.com/vitejs/vite/commit/72165e0f58d49b894a366af25993cbffbd0ee986))
- **dev:** only treat EADDRINUSE as port conflict in wildcard pre-check ([#​21642](https://github.com/vitejs/vite/issues/21642)) ([e54e25f](https://github.com/vitejs/vite/commit/e54e25fbb9b721b2c655d17e35706e070c92ff70))
- **dev:** prevent concurrent server restarts ([#​21636](https://github.com/vitejs/vite/issues/21636)) ([8ce23a3](https://github.com/vitejs/vite/commit/8ce23a3b6e1eb86eef2b50c1bfbad072bbf9a03a))
- **dev:** return "502 Bad Gateway" on proxy failures instead of 500 ([#​21652](https://github.com/vitejs/vite/issues/21652)) ([e240df2](https://github.com/vitejs/vite/commit/e240df2ea4accd11631aac0f361e846a2e3140b0))
- clear tsconfig cache only when tsconfig.json is cached ([#​21622](https://github.com/vitejs/vite/issues/21622)) ([50c9675](https://github.com/vitejs/vite/commit/50c9675aa6c488b9887b7849a3397b7b29d1bd74))
- **deps:** update all non-major dependencies ([#​21594](https://github.com/vitejs/vite/issues/21594)) ([becdc5d](https://github.com/vitejs/vite/commit/becdc5dcc49efa3769c92e9929fb2280fd776206))
- **lib:** CSS injection point error with nested name IIFE output ([#​21606](https://github.com/vitejs/vite/issues/21606)) ([5003de6](https://github.com/vitejs/vite/commit/5003de6253ffdb23d1a52b1b5e06281d34f3a6ec))
- **module-runner:** incorrect column with `sourcemapInterceptor: "prepareStackTrace"` ([#​21562](https://github.com/vitejs/vite/issues/21562)) ([416c095](https://github.com/vitejs/vite/commit/416c0959ebd63db622c6579b53065e95f09c63f8))
- **module-runner:** prevent crash on negative column in stacktrace ([#​21585](https://github.com/vitejs/vite/issues/21585)) ([a075590](https://github.com/vitejs/vite/commit/a075590c4091240a6f0caca6b052500fd122f041))
- rolldownOptions/rollupOptions merging at environment level ([#​21612](https://github.com/vitejs/vite/issues/21612)) ([db2ecc7](https://github.com/vitejs/vite/commit/db2ecc7675c3932fc9e127b726ab8b0cab25f75c))
- **scanner:** respect tsconfig.json ([#​21547](https://github.com/vitejs/vite/issues/21547)) ([c6c04db](https://github.com/vitejs/vite/commit/c6c04db9c67d1b390d40fd1fd026d49204957f8d))
- avoid registering customization hook for import meta resolver multiple times ([#​21518](https://github.com/vitejs/vite/issues/21518)) ([8bb3203](https://github.com/vitejs/vite/commit/8bb32036792a6f522f5c947112f3d688add755a0))
- **config:** avoid watching rolldown runtime virtual module ([#​21545](https://github.com/vitejs/vite/issues/21545)) ([d18b139](https://github.com/vitejs/vite/commit/d18b13957b3bec08eae5a9ff80340488c8150d46))
- **deps:** update all non-major dependencies ([#​21540](https://github.com/vitejs/vite/issues/21540)) ([9ebaeaa](https://github.com/vitejs/vite/commit/9ebaeaac094db996b1d12665052633c20ac8a9cf))
- populate originalFileNames when resolving CSS asset paths ([#​21542](https://github.com/vitejs/vite/issues/21542)) ([8b47ff7](https://github.com/vitejs/vite/commit/8b47ff76d28630b4dc39c77fbd2762b4c36ad23d))
- **deps:** update all non-major dependencies ([#​21488](https://github.com/vitejs/vite/issues/21488)) ([2b32ca2](https://github.com/vitejs/vite/commit/2b32ca24fe9d742901c2cb5c88e6b1fd734f8c73))
- disable `tsconfig` option when loading config ([#​21517](https://github.com/vitejs/vite/issues/21517)) ([5025c35](https://github.com/vitejs/vite/commit/5025c358d119aa0b60d0505f9dd705950ad897f6))
- **optimizer:** map relative `new URL` paths to correct relative file location ([#​21434](https://github.com/vitejs/vite/issues/21434)) ([ca96cbc](https://github.com/vitejs/vite/commit/ca96cbc8eff23091c288f9eaf1944af2de3c564f))
- avoid using deprecated `output.inlineDynamicImport` option ([#​21464](https://github.com/vitejs/vite/issues/21464)) ([471ce62](https://github.com/vitejs/vite/commit/471ce6275663f068afa241a55711fd646d482385))
- use separate hook object for each environment ([#​21472](https://github.com/vitejs/vite/issues/21472)) ([66347f6](https://github.com/vitejs/vite/commit/66347f6df0e723d9d03ea31ab41ab5b767ad15ba))
- **deps:** update all non-major dependencies ([#​21440](https://github.com/vitejs/vite/issues/21440)) ([1835995](https://github.com/vitejs/vite/commit/18359959cb2960a2fb2b9a340e5ae27d122a1501))
- **dev:** avoid event emitter leak caused by `server.listen` callback ([#​21451](https://github.com/vitejs/vite/issues/21451)) ([602d786](https://github.com/vitejs/vite/commit/602d7865db2b12835c8225f3e87076bef4e247b9))
- lazy hook filter should work ([#​21443](https://github.com/vitejs/vite/issues/21443)) ([bc0c207](https://github.com/vitejs/vite/commit/bc0c207f537789d10d55caa4ee3697aa923b8426))
- **optimizer:** skip `rolldownCjsExternalPlugin` for `platform: neutral` ([#​21452](https://github.com/vitejs/vite/issues/21452)) ([d2fc4be](https://github.com/vitejs/vite/commit/d2fc4be0447e384e18e557b70f7c345d5bcea941))
- **deps:** update all non-major dependencies ([#​21389](https://github.com/vitejs/vite/issues/21389)) ([30f48df](https://github.com/vitejs/vite/commit/30f48df33ec9e9bd0b8164461eede5574398370b))
- **deps:** update esbuild peerDependency version ([#​21398](https://github.com/vitejs/vite/issues/21398)) ([4266c97](https://github.com/vitejs/vite/commit/4266c978083b3afa8d09ac3d3a110ee79f8efde2))
- **hmr:** trigger prune event when last import is removed ([#​20781](https://github.com/vitejs/vite/issues/20781)) ([#​21093](https://github.com/vitejs/vite/issues/21093)) ([7576735](https://github.com/vitejs/vite/commit/757673528c64945b77aee4a8e01669ccd0644973))
- **module-runner:** use `process.getBuiltinModule` instead of `import('node:module')` ([#​21402](https://github.com/vitejs/vite/issues/21402)) ([6633bcb](https://github.com/vitejs/vite/commit/6633bcb94149a2923cb6419aa481c5384bcf9310))
- support .env file mounts (FIFOs) ([#​21365](https://github.com/vitejs/vite/issues/21365)) ([6e6f82a](https://github.com/vitejs/vite/commit/6e6f82a067acc6e158be3b82edb3d7d2888f9af2))
- **css:** stylus Evaluator support ([#​21376](https://github.com/vitejs/vite/issues/21376)) ([cf9ace1](https://github.com/vitejs/vite/commit/cf9ace1b40b2767b9b9cbbabb084fe2e32afc535))
- **deps:** update all non-major dependencies ([#​21321](https://github.com/vitejs/vite/issues/21321)) ([9bc7c2e](https://github.com/vitejs/vite/commit/9bc7c2ed4f387fb982b84d1988a26af8990096f7))
- **import-analysis:** avoid cjs interop for built browser external module ([#​21333](https://github.com/vitejs/vite/issues/21333)) ([dc5a2fb](https://github.com/vitejs/vite/commit/dc5a2fb86f10c69b0ba6bc1831d9a29c79754ba2))
- **worker:** handle `new Worker(..., new URL(import.meta.url))` with trailing comma ([#​21325](https://github.com/vitejs/vite/issues/21325)) ([4a47241](https://github.com/vitejs/vite/commit/4a472418c02a0821900678778752c2d361bae3bd))
- detect `import.meta.resolve` when formatted across multiple lines ([#​21312](https://github.com/vitejs/vite/issues/21312)) ([130e718](https://github.com/vitejs/vite/commit/130e7181a55c524383c63bbfb1749d0ff7185cad))
- allow no-cors requests for non-script tag requests ([#​21299](https://github.com/vitejs/vite/issues/21299)) ([ef3d596](https://github.com/vitejs/vite/commit/ef3d59648fd9dd3f9b3118d09d216dc0afcb8c33))
- **deps:** update all non-major dependencies ([#​21285](https://github.com/vitejs/vite/issues/21285)) ([4635b2e](https://github.com/vitejs/vite/commit/4635b2e90f833d1048d76381e20208c0e0841e97))
- unreachable error when building with `experimental.bundledDev` is enabled ([#​21296](https://github.com/vitejs/vite/issues/21296)) ([e81c183](https://github.com/vitejs/vite/commit/e81c183f8c8ccaf7774ef0d0ee125bf63dbf30b4))
- **deps:** update all non-major dependencies ([#​21231](https://github.com/vitejs/vite/issues/21231)) ([859789c](https://github.com/vitejs/vite/commit/859789c856412dfa67969232ddda1df754febf40))
- don't strip base from imports ([#​21221](https://github.com/vitejs/vite/issues/21221)) ([7da742b](https://github.com/vitejs/vite/commit/7da742b478d2309c7d8de4cb55614a6476f350b4))
- allow exiting process before optimizer cleanup is done ([#​21170](https://github.com/vitejs/vite/issues/21170)) ([55ceffc](https://github.com/vitejs/vite/commit/55ceffc8976b8bb8c819f5b47419f8499ba3f843))
- plugin shortcut support ([#​21211](https://github.com/vitejs/vite/issues/21211)) ([6a3aca0](https://github.com/vitejs/vite/commit/6a3aca084356316811ff62cbedb5a410a249e789))
##### Performance Improvements
- **ssr:** skip circular import check for already-evaluated modules ([#​21632](https://github.com/vitejs/vite/issues/21632)) ([235140b](https://github.com/vitejs/vite/commit/235140b2d519e866fc28f88fe8155a5091630daf))
- use tsconfig cache for oxc transform in dev ([#​21643](https://github.com/vitejs/vite/issues/21643)) ([57ff177](https://github.com/vitejs/vite/commit/57ff177575bef6bee81a250e853d2c99affa0015))
##### Documentation
- bulk of typo fixes ([#​21507](https://github.com/vitejs/vite/issues/21507)) ([80755da](https://github.com/vitejs/vite/commit/80755dacab296cd2083fef29e09280ceb810a943))
- update `build.dynamicImportVarsOptions` ([#​21477](https://github.com/vitejs/vite/issues/21477)) ([54ce2ed](https://github.com/vitejs/vite/commit/54ce2ed15a95619bd18ac6609b7d7b5f42b4965d))
- clarify the pronunciation of `vite` in IPA symbols ([#​21238](https://github.com/vitejs/vite/issues/21238)) ([9b1d4d6](https://github.com/vitejs/vite/commit/9b1d4d6f348c8899bd7651bd802f583e99b901ee))
- ensure https links ([#​21266](https://github.com/vitejs/vite/issues/21266)) ([2eb259a](https://github.com/vitejs/vite/commit/2eb259a84859c7656718258afed08eb80670f530))
##### Miscellaneous Chores
- **deps-dev:** bump rollup from 4.57.1 to 4.59.0 ([#​21717](https://github.com/vitejs/vite/issues/21717)) ([25227bb](https://github.com/vitejs/vite/commit/25227bbdc7de0ed07cf7bdc9a1a733e3a9a132bc))
- **deps:** update dependency cac to v7 ([#​21788](https://github.com/vitejs/vite/issues/21788)) ([44e33ae](https://github.com/vitejs/vite/commit/44e33ae6a7b64130831f08b2a20d04cbd106898d))
- **deps:** update dependency rolldown-plugin-dts to ^0.22.2 ([#​21731](https://github.com/vitejs/vite/issues/21731)) ([d8ea652](https://github.com/vitejs/vite/commit/d8ea652a8b295d9e012ac7ea607d813c69f77791))
- **deps:** remove `fdir` and `@rollup/plugin-commonjs` ([#​21639](https://github.com/vitejs/vite/issues/21639)) ([5abffd5](https://github.com/vitejs/vite/commit/5abffd5d04bf586a60970588a14d7e3b79445093))
- **deps:** update dependency [@​rollup/plugin-alias](https://github.com/rollup/plugin-alias) to v6 ([#​21097](https://github.com/vitejs/vite/issues/21097)) ([44b5bdf](https://github.com/vitejs/vite/commit/44b5bdfcf2b2c1b73563ed0526c48584b756360f))
- fix broken link for future deprecations ([#​21603](https://github.com/vitejs/vite/issues/21603)) ([25f4501](https://github.com/vitejs/vite/commit/25f45013b94e50acc5c3e476691aa2210b33cae4))
- update `customResolver` deprecation message to mention `enforce: 'pre'` ([#​21576](https://github.com/vitejs/vite/issues/21576)) ([2ce34d5](https://github.com/vitejs/vite/commit/2ce34d5580ed118db6361696e6283c1fea74e685))
- update rolldown-plugin-dts to 0.22.1 ([#​21559](https://github.com/vitejs/vite/issues/21559)) ([77aab4b](https://github.com/vitejs/vite/commit/77aab4b7f1e3a2131477659c909a3fbe02faa0a0))
- **deps:** update dependency rolldown-plugin-dts to ^0.21.8 ([#​21539](https://github.com/vitejs/vite/issues/21539)) ([33881cb](https://github.com/vitejs/vite/commit/33881cb34f4587919713975d13ce255ef744472d))
- add missing versions to changelog ([#​21515](https://github.com/vitejs/vite/issues/21515)) ([4bfb239](https://github.com/vitejs/vite/commit/4bfb239686a17343bc46c0d7c968e28b0d64041f))
- **deps:** update rolldown-related dependencies ([#​21487](https://github.com/vitejs/vite/issues/21487)) ([5863e51](https://github.com/vitejs/vite/commit/5863e513fab6b481cfb42da86202f9db728c077d))
- **deps:** update rolldown-related dependencies ([#​21390](https://github.com/vitejs/vite/issues/21390)) ([be9dd4e](https://github.com/vitejs/vite/commit/be9dd4e08d899f9ed27f2bdcb81bf27d018377a6))
- fix typo in plugin.ts comment ([#​21435](https://github.com/vitejs/vite/issues/21435)) ([d31fc66](https://github.com/vitejs/vite/commit/d31fc6685b4dde33062bf4dfe46e0502de4e1449))
- replace caniuse link for ES2024 ([#​21355](https://github.com/vitejs/vite/issues/21355)) ([2ba4e99](https://github.com/vitejs/vite/commit/2ba4e990192845e01c733aa186c9599cdb5bb8fe))
- cleanup changelog ([#​21202](https://github.com/vitejs/vite/issues/21202)) ([8c8c56e](https://github.com/vitejs/vite/commit/8c8c56e1eb465e6dcd0c1b40f187228edc0e2be4))
- **deps:** update rolldown-related dependencies ([#​21230](https://github.com/vitejs/vite/issues/21230)) ([9349446](https://github.com/vitejs/vite/commit/9349446e9344bd81ccfb37af482f479cd1b59bbc))
- fix spelling error ([#​21223](https://github.com/vitejs/vite/issues/21223)) ([cc10e20](https://github.com/vitejs/vite/commit/cc10e207ae87ac122fc1efbb5ab01b516eb9cce8))
##### Code Refactoring
- don't add `optimization.inlineConst: { mode: 'smart' }` as it's enabled by default ([#​21794](https://github.com/vitejs/vite/issues/21794)) ([22b3d11](https://github.com/vitejs/vite/commit/22b3d111c38deb76d3c07010bf9903e3ee1befc1))
- enable some native plugins even with enable native plugin false ([#​21744](https://github.com/vitejs/vite/issues/21744)) ([fc46c79](https://github.com/vitejs/vite/commit/fc46c79797e9ec22a5a4fb1999f6268f72d586f8))
- avoid deprecated `legalComments` option ([#​21721](https://github.com/vitejs/vite/issues/21721)) ([e06496e](https://github.com/vitejs/vite/commit/e06496ef259015b5a89f33a9965be25f8bea0624))
- use `ESTree` types from `rolldown/utils` ([#​21719](https://github.com/vitejs/vite/issues/21719)) ([9239750](https://github.com/vitejs/vite/commit/9239750e619afba03243d6d583eaca55b510ddfe))
- deprecate `customResolver` in `resolve.alias` ([#​21476](https://github.com/vitejs/vite/issues/21476)) ([81275c9](https://github.com/vitejs/vite/commit/81275c907211ac766013e6232c2cdf559534bed1))
- remove unnecessary `@rolldown/pluginutils` ([#​21560](https://github.com/vitejs/vite/issues/21560)) ([c367b62](https://github.com/vitejs/vite/commit/c367b62693f19040e64d14915877f0b05b8ac7ae))
- enable some native plugins even with enable native plugin false ([#​21608](https://github.com/vitejs/vite/issues/21608)) ([5a4f692](https://github.com/vitejs/vite/commit/5a4f6924260ef0f2683177a99935160badea3f3b))
- use `rolldown/utils` ([#​21577](https://github.com/vitejs/vite/issues/21577)) ([e56103f](https://github.com/vitejs/vite/commit/e56103f180216306de738769303f31ad4c078b26))
- use internal devtools config ([#​21609](https://github.com/vitejs/vite/issues/21609)) ([9aea20f](https://github.com/vitejs/vite/commit/9aea20f4a190e0e1c7edc656361d636cd6ce642f))
- use parseEnv ([#​21586](https://github.com/vitejs/vite/issues/21586)) ([f859d2c](https://github.com/vitejs/vite/commit/f859d2cdfcc18f139775c208be068461a91602e5))
- **wasm:** remove native wasm helper plugin usage ([#​21566](https://github.com/vitejs/vite/issues/21566)) ([71a86be](https://github.com/vitejs/vite/commit/71a86be6d9b9ea0329e92f20671f4db1f020874d))
- enable some native plugins even with enable native plugin false ([#​21511](https://github.com/vitejs/vite/issues/21511)) ([b40292c](https://github.com/vitejs/vite/commit/b40292ce6a7dbbbbac9c6dae5f126b7f44c3e1b7))
- remove `experimental.enableNativePlugin: 'resolver'` ([#​21510](https://github.com/vitejs/vite/issues/21510)) ([f9d9213](https://github.com/vitejs/vite/commit/f9d92130fa79c638f77a3a8e6e55506f185d5a49))
- use `import.meta.dirname` everywhere ([#​21509](https://github.com/vitejs/vite/issues/21509)) ([7becf5f](https://github.com/vitejs/vite/commit/7becf5f8fe9041cff60f495ef975faaba68f9eb2))
- **optimizer:** simplify `rolldownCjsExternalPlugin` ([#​21450](https://github.com/vitejs/vite/issues/21450)) ([ebda8fd](https://github.com/vitejs/vite/commit/ebda8fd3c14f60e63d13d22102cb3d79a12f47a9))
- remove `import.meta.hot.accept` resolution fallback ([#​21382](https://github.com/vitejs/vite/issues/21382)) ([71d0797](https://github.com/vitejs/vite/commit/71d0797a719440f2a09b3364bfcf18576c2b67fb))
- **optimizer:** remove dead code ([#​21334](https://github.com/vitejs/vite/issues/21334)) ([e9a2cdb](https://github.com/vitejs/vite/commit/e9a2cdbb7d96a3f8e15d25774708d4f4ab626bb9))
##### Tests
- **ssr:** incorrect `handleInvoke` was called in server-worker-runner.invoke test ([#​21751](https://github.com/vitejs/vite/issues/21751)) ([b95ca22](https://github.com/vitejs/vite/commit/b95ca22460fe39fc862444f8c642fd6a0794c87c))
- add more type tests for `defineConfig` ([#​21698](https://github.com/vitejs/vite/issues/21698)) ([4fedbbd](https://github.com/vitejs/vite/commit/4fedbbdd9178a3f92e491233f44d49b3ac095c69))
- test case for catching invalid package resolution error ([#​21601](https://github.com/vitejs/vite/issues/21601)) ([c9b9359](https://github.com/vitejs/vite/commit/c9b9359fe88fc4b8a69a0d5c5a7eed8961fb6e57))
- **bundled-dev:** add worker test cases ([#​21557](https://github.com/vitejs/vite/issues/21557)) ([569bc98](https://github.com/vitejs/vite/commit/569bc98d6bc42fbd1835c1c24a493776030b6cb4))
##### Beta Changelogs
##### [8.0.0-beta.18](https://github.com/vitejs/vite/compare/v8.0.0-beta.17...v8.0.0-beta.18) (2026-03-09)
See [8.0.0-beta.18 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.18/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.17](https://github.com/vitejs/vite/compare/v8.0.0-beta.16...v8.0.0-beta.17) (2026-03-09)
See [8.0.0-beta.17 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.17/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.16](https://github.com/vitejs/vite/compare/v8.0.0-beta.15...v8.0.0-beta.16) (2026-02-27)
See [8.0.0-beta.16 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.16/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.15](https://github.com/vitejs/vite/compare/v8.0.0-beta.14...v8.0.0-beta.15) (2026-02-19)
See [8.0.0-beta.15 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.15/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.14](https://github.com/vitejs/vite/compare/v8.0.0-beta.13...v8.0.0-beta.14) (2026-02-12)
See [8.0.0-beta.14 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.14/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.13](https://github.com/vitejs/vite/compare/v8.0.0-beta.12...v8.0.0-beta.13) (2026-02-05)
See [8.0.0-beta.13 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.13/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.12](https://github.com/vitejs/vite/compare/v8.0.0-beta.11...v8.0.0-beta.12) (2026-02-03)
See [8.0.0-beta.12 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.12/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.11](https://github.com/vitejs/vite/compare/v8.0.0-beta.10...v8.0.0-beta.11) (2026-01-29)
See [8.0.0-beta.11 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.11/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.10](https://github.com/vitejs/vite/compare/v8.0.0-beta.9...v8.0.0-beta.10) (2026-01-24)
See [8.0.0-beta.10 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.10/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.9](https://github.com/vitejs/vite/compare/v8.0.0-beta.8...v8.0.0-beta.9) (2026-01-22)
See [8.0.0-beta.9 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.9/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.8](https://github.com/vitejs/vite/compare/v8.0.0-beta.7...v8.0.0-beta.8) (2026-01-15)
See [8.0.0-beta.8 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.8/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.7](https://github.com/vitejs/vite/compare/v8.0.0-beta.6...v8.0.0-beta.7) (2026-01-08)
See [8.0.0-beta.7 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.7/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.6](https://github.com/vitejs/vite/compare/v8.0.0-beta.5...v8.0.0-beta.6) (2026-01-07)
See [8.0.0-beta.6 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.6/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.5](https://github.com/vitejs/vite/compare/v8.0.0-beta.4...v8.0.0-beta.5) (2025-12-25)
See [8.0.0-beta.5 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.5/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.4](https://github.com/vitejs/vite/compare/v8.0.0-beta.3...v8.0.0-beta.4) (2025-12-22)
See [8.0.0-beta.4 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.4/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.3](https://github.com/vitejs/vite/compare/v8.0.0-beta.2...v8.0.0-beta.3) (2025-12-18)
See [8.0.0-beta.3 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.3/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.2](https://github.com/vitejs/vite/compare/v8.0.0-beta.1...v8.0.0-beta.2) (2025-12-12)
See [8.0.0-beta.2 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.2/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.1](https://github.com/vitejs/vite/compare/v8.0.0-beta.0...v8.0.0-beta.1) (2025-12-08)
See [8.0.0-beta.1 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.1/packages/vite/CHANGELOG.md)
##### [8.0.0-beta.0](https://github.com/vitejs/vite/compare/v7.2.4...v8.0.0-beta.0) (2025-12-03)
See [8.0.0-beta.0 changelog](https://github.com/vitejs/vite/blob/v8.0.0-beta.0/packages/vite/CHANGELOG.md)
##### Rolldown-Vite changelogs
See [rolldown-vite changelog](https://github.com/vitejs/rolldown-vite/blob/v7.2.10/packages/vite/CHANGELOG.md)
</details>
---
### Configuration
📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM, only on Monday ( * 0-3 * * 1 ) (UTC), 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 [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=-->
Reviewed-on: https://git.erwanleboucher.dev/eleboucher/memini/pulls/34
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
fixes #21466
refs #21443
close #21470