# biome nursery/useVueBaseImport: fix changes program behavior

Internal evidence sheet generated by fixhunt. Not an issue text. A human re-verifies, checks the duplicates
below, and writes the upstream report in their own words following the project's AI policy.

- Tool: biome 2.5.15
- Rule: nursery/useVueBaseImport (tool labels the fix: safe, this fix reported as safe)
- Oracle: fix-changes-behavior
- Judge (Nemotron 3 Ultra, advisory): program-bug, severity low. Both the original and fixed programs fail with ERR_MODULE_NOT_FOUND because neither '@vue/reactivity' nor 'vue' is installed in the execution environment. The behavioral difference (different missing-package name) stems entirely from the missing dependencies, not from the rewrite itself.
- Program: minimized from 6 to 3 lines

## Reproducer

```js
import { watch } from "@vue/reactivity";
async function test() {
}
```

## Commands

```sh
node prog.js
bunx @biomejs/biome lint --only=nursery/useVueBaseImport --write prog.js
node prog.js
```

## Observed

```
stderr before: Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@vue/reactivity' imported from /w/prog.js
stderr after: Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'vue' imported from /w/prog.js
```

## Diff applied by the fix

```diff
--- orig.js	2026-10-22 13:33:40.667243582 -0400
+++ fixed.js	2026-10-22 13:33:42.922281548 -0400
@@ -1,3 +1,3 @@
-import { watch } from "@vue/reactivity";
+import { watch } from "vue";
 async function test() {
 }
```

## Why the rewrite is not equivalent (model draft, verify before use)

The original import references `@vue/reactivity`, which provides only the reactivity utilities like `watch`. After rewriting to `vue`, it attempts to import everything exported by the main Vue module; if that entry point does not re‑export `watch` or lacks the submodule’s exports, the binding may be missing or different, causing runtime errors when `watch` is used. Even if both resolve successfully, they refer to distinct modules with potentially different implementations, so the program’s behavior changes. This violates semantic preservation because the fix alters which module supplies the imported identifier.

## Upstream search

Queries: "useVueBaseImport fix", "nursery useVueBaseImport import specifier", "Biome Vue reactivity base import rewrite", "watch import path normalization"

- related: https://github.com/biomejs/biome/pull/7597
  PR #7597 fixes aliased paths in useImportExtensions, a different rule that also rewrites import specifiers but not the Vue-specific nursery/useVueBaseImport rule
- related: https://github.com/biomejs/biome/pull/3274
  PR #3274 adds importMapping options to useImportExtensions, a different rule that also rewrites import specifiers via configuration

<details><summary>All hits</summary>

- [tavily] fix(linter): fix aliased paths in `useImportExtensions` by arendjr · Pull Request #7597 · biomejs/biome · GitHub — https://github.com/biomejs/biome/pull/7597
- [tavily] fix(parse/html): fix disabled vue error message by dyc3 · Pull Request #9879 · biomejs/biome · GitHub — https://github.com/biomejs/biome/pull/9879
- [tavily] fix(js_analyze): mention which dependency the useExhaustiveDependencies fix adds to the list by Netail · Pull Request #9243 · biomejs/biome · GitHub — https://github.com/biomejs/biome/pull/9243
- [tavily] fix(css_parser): fix is at unicode range check by xin2017338 · Pull Request #3745 · biomejs/biome · GitHub — https://github.com/biomejs/biome/pull/3745
- [tavily] fix(useConsistentTestIt): fix panic when applying code fix by dyc3 · Pull Request #9942 · biomejs/biome · GitHub — https://github.com/biomejs/biome/pull/9942
- [tavily] feat(lint): add nursery rule `useImportsFirst` by terror · Pull Request #9272 · biomejs/biome · GitHub — https://github.com/biomejs/biome/pull/9272
- [tavily] feat(biome_js_analyze): `useImportExtensions` - add `importMapping` options by drdaemos · Pull Request #3274 · biomejs/biome · GitHub — https://github.com/biomejs/biome/pull/3274
- [tavily] noUnresolvedImports: False positives for installed packages (zod, clsx types) in standard Next.js setup · Issue #6464 · biomejs/biome · GitHub — https://github.com/biomejs/biome/issues/6464
- [tavily] feat(biome_css_analyzer): implement noInvalidPositionAtImportRule by t-shiratori · Pull Request #2717 · biomejs/biome · GitHub — https://github.com/biomejs/biome/issues/2717
- [tavily] 🐛 fix of `lint/nursery/noUnusedImports` does not work correctly · Issue #688 · biomejs/biome · GitHub — https://github.com/biomejs/biome/issues/688
- [tavily] feat(js_analyze): implement useQwikLoaderLocation by Netail · Pull Request #9809 · biomejs/biome · GitHub — https://github.com/biomejs/biome/pull/9809
- [tavily] 🐛 biome lint panics with "assertion failed: start.raw <= end.raw" on Vue SFC with multi-line named imports (useImportType rule) · Issue #9848 · biomejs/biome · GitHub — https://github.com/biomejs/biome/issues/9848
- [tavily] 💅 Shows "All these imports are only used as types" in Vue+typescript · Issue #4539 · biomejs/biome · GitHub — https://github.com/biomejs/biome/issues/4539
- [tavily] 🐛 --apply / --write broken for vue files on stdin · Issue #2225 · biomejs/biome · GitHub — https://github.com/biomejs/biome/issues/2225
- [tavily] 🐛 Does not support `resolution-mode` for `typeof import` · Issue #2115 · biomejs/biome · GitHub — https://github.com/biomejs/biome/issues/2115
- [tavily] experimentalFullSupportEnabled causes biome format to silently skip Vue files · Issue #10166 · biomejs/biome · GitHub — https://github.com/biomejs/biome/issues/10166
- [tavily] 📎 Port `vue/no-setup-props-reactivity-loss` from `eslint-plugin-vue` · Issue #6305 · biomejs/biome · GitHub — https://github.com/biomejs/biome/issues/6305
- [tavily] 💅 `noUndeclaredDependencies`: not resolving tsconfig paths nor package subpaths · Issue #2012 · biomejs/biome · GitHub — https://github.com/biomejs/biome/issues/2012
- [tavily] React hooks aren't linted if not matching very strict import pattern · Issue #1791 · biomejs/biome · GitHub — https://github.com/biomejs/biome/issues/1791
- [tavily] 🐛 noImportCycles ignores subpath imports · Issue #7242 · biomejs/biome · GitHub — https://github.com/biomejs/biome/issues/7242
- [tavily] Support separating type imports into different custom groups (e.g. external vs internal) · Issue #6674 · biomejs/biome · GitHub — https://github.com/biomejs/biome/issues/6674
- [tavily] 🐛 GritQL pattern doesn't match different kinds of `import` statements · Issue #5801 · biomejs/biome · GitHub — https://github.com/biomejs/biome/issues/5801
- [tavily] 💅 noUndeclaredDependencies doesn't pick up on tsconfig path aliases, falsely flags · Issue #3554 · biomejs/biome · GitHub — https://github.com/biomejs/biome/issues/3554

</details>
