## vuejs/core — v3.6.0-beta.17…v3.6.0-rc.1

_67 commits._

### Fixes
- **Fix slot branch key leaking** — Fixed an issue where branch keys in conditional slots were being incorrectly added to slot props objects, causing unwanted key attributes to leak into rendered slots. The compiler now properly passes branch keys as a separate parameter to the slot renderer instead of mixing them into the props object. (20c9d26)
- **Revert "fix(runtime-vapor): pause tracking when invoking function refs" (#15095)** (f77f079)
- **Restore dependency tracking in function refs** — Reverted a previous change that prevented Vue from tracking reactive dependencies when function template refs are called. Function refs may execute on each render, and their dependencies should be tracked so reactive state can determine which ref receives the value. This restores intentional behavior and fixes compatibility issues. (7da6334)
- **Skip lazy hydration for detached roots** — Fixed an issue where async components with lazy hydration would attempt to hydrate even after their DOM elements were removed from the page. Now the hydration process checks if the element is still connected to the document and safely skips hydration if it has been detached. (97f3525)
- **fix(deps): update dependency postcss to ^8.5.19 (#15047)** (b06b3bb)
- **fix(reactivity): handle effect removal during scope stop (#15084)** (378f978)
- **fix(hydration): pass namespace when patching dynamic props (#15082)** (e0d2723)
- **fix(server-renderer): handle errors in optimized component renders (#12601)** (474907c)
- **fix(runtime-core): unwind dangling blocks when slot content throws (#15071)** (ddc132d)
- **fix(server-renderer): remove package dependency cycle (#15063)** (4d35eca)
- **fix(shared): prevent SSR comment escaping from creating closing delimiters (#15045)** (bd962bb)
- **fix(types): don't constrain component $el type to Element (#15040)** (164460a)
- **fix(runtime-dom): respect current select model type (#15010)** (eb89e93)
- **fix(runtime-vapor): remove unsafe slot dry runs from vdom interop (#15089)** (3d42cdf)
- **fix(runtime-vapor): preserve v-show transition on vdom child (#15074)** (fe882c9)
- **fix(vapor): handle v-if and v-show on transition roots (#15069)** (8f62f2e)
- **fix(runtime-vapor): avoid patching invalid VNode slot content** (25f5a8a)
- **fix(runtime-vapor): clean up detached slot branches** (b41009d)
- **fix(hydration): remove adopted SSR DOM for unresolved async setup** (3859af4)
- **fix(runtime-vapor): preserve VNode anchors in dynamic component hydration** (898e2ca)
- **fix(runtime-vapor): preserve outer pending slot anchors** (4af4bf9)
- **fix(hydration): avoid resolving inherited fallback in forwarded slots** (4c215b5)
- **fix(runtime-vapor): reuse hydration anchor candidates** (06778e7)
- **fix(runtime-vapor): preserve slot content anchors during mismatch recovery** (26f90b5)
- **fix(runtime-vapor): defer slot content anchors during hydration** (9b9e4bd)
- **fix(runtime-vapor): preserve vapor slot owner during interop slot dry run (#15031)** (340630e)
- **Fix event modifier name handling** — Fixed a bug where event names ending with modifier keywords like 'Once', 'Passive', or 'Capture' were being incorrectly processed. The framework now properly preserves these names when they are the actual event name (e.g., a custom 'once' event) rather than treating them as modifiers to strip away. (4b659e6)
- **Support named tuple emit types** — Fixed TypeScript support for named tuple syntax in component emit definitions, allowing developers to use syntax like `update: [value: string]` for better type checking of emitted events and their payloads. (232f402)
- **Fix teleport unmount edge case** — Fixed a bug where teleport components would incorrectly try to unmount children when the target element was missing or became invalid. The fix ensures children are only unmounted when the teleport is actually mounted and either disabled or has a valid target. (671997a)
- **Fix hydration mismatches on conditional branches** — Improved hydration to properly respect the data-allow-mismatch attribute when server and client render different conditional branches (like v-if/v-else). This prevents false mismatch warnings when the attribute is set on elements that differ between server and client rendering. (164af63)
- **Fix function children normalization** — Function children passed to HTML elements and Teleport components are now properly normalized by calling the function to get the actual content, rather than treating them as slot definitions. This ensures elements render the function's return value directly while Teleport and components still treat functions as slots. (2f374cd)
- **Fix event listener name handling** — Fixed a bug where the `.once` event modifier suffix was incorrectly stripped from event names, causing an event named `once` to be misidentified. The fix now preserves the exact event name `once` while still properly handling the `.once` modifier on other events. (87b73b6)
- **Fix duplicate scope IDs in server rendering** — Fixed an issue where CSS scope IDs were being duplicated in the HTML output when components were recursively rendered on the server. The fix deduplicates inherited scope IDs so each one appears only once in the rendered element, preventing redundant attributes in the final HTML. (027da6b)
- **Fix dynamic props hydration mismatch** — Fixed an issue where dynamic properties marked during server-side rendering weren't properly updated during client hydration. The fix ensures that when a component declares certain properties as dynamic (like `innerHTML`), those properties are forcefully patched to match the client-side values rather than keeping server-rendered content. (024cf06)
- **Fix filter rewrite recursion bug** — Corrected a compiler bug where filter rewriting was incorrectly passing the parent node instead of the child node to the recursive function, causing improper filter transformation in Vue templates. (be7ce31)
- **Fix block element prop updates** — Fixed a bug where properties weren't correctly updated when transitioning from a non-isomorphic block element. The renderer now performs a full diff of props instead of using optimized updates when block metadata is unstable, ensuring all attributes are properly synchronized. (932ddd0)
- **Fix nested async teleport rendering** — Resolved an issue where asynchronous content nested inside Teleport components wasn't being properly resolved during server-side rendering. The fix ensures that async components within Teleports are correctly tracked and resolved, allowing their content to appear in the correct target location. (31d0f23)
- **Fix function ref tracking issue** — Fixed a bug where function refs were tracking reactive dependencies during their callback execution, which could cause unwanted re-renders. The fix pauses dependency tracking when invoking function refs and resumes it afterward. (3ac052b)
- **fix(reactivity): avoid triggering effects when set fails (#14964)** (e450973)
- **fix(types): validate defineModel defaults (#14968)** (747f57e)

### Backend
- **release: v3.6.0-rc.1** (6fa3447)
- **Release Vue 3.5.40** — Vue 3.5.40 is now available with bug fixes across the compiler, reactivity system, runtime, and server rendering. This patch release addresses issues with slot branch keys, hydration, effect cleanup, select model handling, and error handling in server-side rendering. (fa2885d)
- **Vue 3.5.39 released** — Release of Vue 3.5.39 with 14 bug fixes across compiler, reactivity, runtime, server-side rendering, and type definitions. Improvements include fixes for hydration edge cases, event listener handling, teleport unmounting, SSR scope deduplication, and TypeScript type validation. (c0606e9)

### Tests
- **test: add expect warn** (8801e51)
- **test(runtime-vapor): cover teleport null-target hydration with compiled output** (d4f600e)
- **test(runtime-vapor): cover slot fallback cases with compiled output** (f14a07f)

### Docs
- **docs(sfc-playground): update downloaded template Node.js requirement (#15007)** (643aa27)

### Chore
- **chore: Merge branch 'main' into minor** (6f57f83)
- **Updated dependencies to latest versions** — Updated Node.js setup action to v6.5.0 across all CI/CD workflows, pnpm package manager to v11.13.0, and @types/node to v24.13.3. These are routine non-major dependency updates to keep development tools current. (90aecb1)
- **Updated test dependencies** — Upgraded vitest, its plugins, and puppeteer to newer versions to improve testing capabilities and browser automation reliability. (fe1c0f8)
- **Update conventional-changelog dependency** — Upgraded the conventional-changelog package from version 7 to version 8, which is a development dependency used for generating changelog entries from git commits. (e41c45a)
- **Updated cache action to v6** — Updated the GitHub Actions cache action from version 5.0.5 to 6.1.0 in the test workflow, improving caching performance for Chromium and Playwright browser binaries during CI runs. (3eb66a9)
- **chore(deps): update lint (#15075)** (40178dd)
- **chore(deps): update dependency conventional-changelog-angular to v9 (#15079)** (7f122b9)
- **chore(deps): update build (#15046)** (a2e2bf0)
- **chore(ci): improve workflows (#15037)** (7262e63)
- **chore(playground): improve version copy message (#15008)** (9e03beb)
- **refactor(compiler-vapor): omit default prepend logical index (#15065)** (b38b050)
- **refactor(runtime-vapor): simplify slot content invalidation cleanup (#15044)** (1edd21e)
- **refactor(runtime-vapor): resolve KeepAlive context from owner instance (#15023)** (91ce0f9)
- **chore(deps): update test (#14994)** (727ff71)
- **chore(deps-dev): bump esbuild from 0.28.0 to 0.28.1 (#14957)** (cb24950)
- **chore(deps): update lint (#14997)** (2766e45)
- **chore(deps): update compiler (#14962)** (e6990eb)
- **chore(deps): update build (#14995)** (139b4f8)
- **chore(deps): update actions/checkout action to v7 (#14998)** (ed50c5e)
- **chore(deps): update all non-major dependencies (#14961)** (ed55b62)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/vuejs/core?utm_source=github-action)._