Skip to content

fix: hoist inline component definitions for proper React HMR#6919

Merged
schiller-manuel merged 2 commits intomainfrom
fix-6339
Mar 13, 2026
Merged

fix: hoist inline component definitions for proper React HMR#6919
schiller-manuel merged 2 commits intomainfrom
fix-6339

Conversation

@schiller-manuel
Copy link
Contributor

@schiller-manuel schiller-manuel commented Mar 13, 2026

this reverts #6197 and implements a proper fix

fixes #6339

Summary by CodeRabbit

  • Breaking Changes

    • Removed the invalid property from match payloads.
  • New Features

    • Improved React HMR for code-split routes, including hoisting of inline route components to preserve HMR behavior.
    • New hook-based plugin support to customize route compilation.
  • Refactor

    • Added safer identifier generation to avoid naming collisions during route compilation.
  • Tests

    • Updated and added tests and snapshots for HMR and compilation behaviors.

this reverts #6197 and implements a proper fix

fixes #6339
@changeset-bot
Copy link

changeset-bot bot commented Mar 13, 2026

🦋 Changeset detected

Latest commit: eb199dd

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 12 packages
Name Type
@tanstack/router-plugin Patch
@tanstack/react-router Patch
@tanstack/router-vite-plugin Patch
@tanstack/start-plugin-core Patch
@tanstack/react-router-devtools Patch
@tanstack/react-start-client Patch
@tanstack/react-start-server Patch
@tanstack/react-start Patch
@tanstack/router-devtools Patch
@tanstack/solid-start Patch
@tanstack/vue-start Patch
@tanstack/start-static-server-functions Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 13, 2026

📝 Walkthrough

Walkthrough

Adds a compiler-plugin extension point to the code-splitting pipeline with a React-specific HMR plugin that hoists inline route components; removes match.invalid from MatchInner's select payload and deletes related regression tests. Also adds utilities and test coverage for the new tooling.

Changes

Cohort / File(s) Summary
Plugin Types
packages/router-plugin/src/core/code-splitter/plugins.ts
Adds exported TS types for compiler plugins and compile options (ReferenceRouteCompilerPlugin, ReferenceRouteCompilerPluginContext, ReferenceRouteCompilerPluginResult, CompileCodeSplitReferenceRouteOptions).
Compiler Integration
packages/router-plugin/src/core/code-splitter/compilers.ts
Extend compileCodeSplitReferenceRoute options to accept compilerPlugins? and invoke onUnsplittableRoute hooks for unsplittable routes.
Framework Plugin Factory
packages/router-plugin/src/core/code-splitter/plugins/framework-plugins.ts
Adds getReferenceRouteCompilerPlugins({ targetFramework, addHmr }) returning framework-specific plugins (React HMR plugin when enabled).
React HMR Plugin
packages/router-plugin/src/core/code-splitter/plugins/react-refresh-route-components.ts
New plugin that hoists eligible inline route component function/arrow expressions to top-level const identifiers and rewrites route properties to reference them; returns modified: true when applied.
Router HMR Flow
packages/router-plugin/src/core/router-hmr-plugin.ts
Pre-HMR compilation path for React targets: attempts code-split compilation with addHmr and compiler plugins and returns compiled output when available; falls back to AST insertion otherwise.
Code-split Caller
packages/router-plugin/src/core/router-code-splitter-plugin.ts
Compute local addHmr and pass compilerPlugins (via getReferenceRouteCompilerPlugins) into compileCodeSplitReferenceRoute call.
Utils
packages/router-plugin/src/core/utils.ts
Adds getUniqueProgramIdentifier(programPath, baseName) to generate collision-avoidant identifiers in a Babel program scope.
Router Match
packages/react-router/src/Match.tsx
Removes the match.invalid property from the object returned by the select callback inside MatchInner.
Tests & Fixtures
packages/router-plugin/tests/*, packages/router-plugin/tests/add-hmr/snapshots/*, packages/router-plugin/tests/add-hmr/test-files/*
Adds tests for getUniqueProgramIdentifier, updates HMR tests to pass compilerPlugins, and adds React inline-route fixtures and snapshots showing hoisted component definitions and HMR acceptance logic.
Test Cleanup
packages/react-router/tests/router.test.tsx
Removes a block of regression tests from the "invalidate" suite that exercised HMR/invalidation behavior with inline components.
Changeset
.changeset/soft-pianos-lie.md
Adds changeset bump and note referencing the HMR hoisting fix.

Sequence Diagram(s)

sequenceDiagram
    participant RouterHMR as Router HMR Plugin
    participant CodeSplitter as Code Splitter / Compiler
    participant Plugin as ReferenceRouteCompilerPlugin
    participant AST as Babel AST

    alt target == "react" and addHmr == true
        RouterHMR->>CodeSplitter: compileCodeSplitReferenceRoute(opts + compilerPlugins)
        CodeSplitter->>CodeSplitter: analyze route (splittable?)
        alt route unsplittable
            CodeSplitter->>Plugin: onUnsplittableRoute(context)
            Plugin->>AST: identify inline component properties
            AST->>AST: hoist functions to top-level consts (unique ids)
            AST->>CodeSplitter: rewrite route props to use hoisted ids
            Plugin-->>CodeSplitter: result { modified: true }
        end
        CodeSplitter-->>RouterHMR: compiled code
        RouterHMR->>RouterHMR: return compiled output (short-circuit AST insertion)
    else non-React or compilation failed
        RouterHMR->>AST: parse/transform AST and push HMR statements
        AST-->>RouterHMR: generate code
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰
I nibble code and hop with cheer,
Hoisting functions so HMR stays near,
Inline routes now leap to light,
Soft refreshes through the night,
A rabbit's wink — no hard reloads here!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 12.50% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title 'fix: hoist inline component definitions for proper React HMR' directly and specifically describes the main change: hoisting inline component definitions to fix React HMR behavior.
Linked Issues check ✅ Passed The PR addresses issue #6339 by implementing React HMR hoisting through new compiler plugins and modifications to the reference route compilation flow, targeting proper soft refreshes without hard page reloads.
Out of Scope Changes check ✅ Passed All changes are in-scope: hoisting component definitions via new plugins, updating compiler infrastructure, adding HMR logic, test coverage, and removing invalidation tests that no longer apply. Changes focus on the React HMR fix objective.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix-6339
📝 Coding Plan
  • Generate coding plan for human review comments

Comment @coderabbitai help to get the list of available commands and usage tips.

@nx-cloud
Copy link

nx-cloud bot commented Mar 13, 2026

View your CI Pipeline Execution ↗ for commit eb199dd

Command Status Duration Result
nx affected --targets=test:eslint,test:unit,tes... ✅ Succeeded 1m 19s View ↗

☁️ Nx Cloud last updated this comment at 2026-03-13 20:08:40 UTC

@github-actions
Copy link
Contributor

github-actions bot commented Mar 13, 2026

Bundle Size Benchmarks

  • Commit: 80c319624695
  • Measured at: 2026-03-13T19:52:06.477Z
  • Baseline source: history:80c319624695
  • Dashboard: bundle-size history
Scenario Current (gzip) Delta vs baseline Raw Brotli Trend
react-router.minimal 87.08 KiB -5 B (-0.01%) 274.09 KiB 75.72 KiB ███████████▁
react-router.full 90.07 KiB -6 B (-0.01%) 284.34 KiB 78.34 KiB ███████████▁
solid-router.minimal 36.42 KiB 0 B (0.00%) 109.29 KiB 32.74 KiB ▅▅▅▅▅▅▅▅▅▅▅
solid-router.full 40.75 KiB 0 B (0.00%) 122.27 KiB 36.58 KiB ▅▅▅▅▅▅▅▅▅▅▅
vue-router.minimal 52.29 KiB 0 B (0.00%) 149.34 KiB 47.01 KiB ▅▅▅▅▅▅▅▅▅▅▅
vue-router.full 57.08 KiB 0 B (0.00%) 164.85 KiB 51.27 KiB ▅▅▅▅▅▅▅▅▅▅▅
react-start.minimal 99.65 KiB -8 B (-0.01%) 313.24 KiB 86.25 KiB ███████████▁
react-start.full 102.97 KiB -5 B (-0.00%) 322.97 KiB 89.06 KiB ███████████▁
solid-start.minimal 48.75 KiB 0 B (0.00%) 146.89 KiB 43.14 KiB ▅▅▅▅▅▅▅▅▅▅▅
solid-start.full 54.21 KiB 0 B (0.00%) 162.75 KiB 47.88 KiB ▅▅▅▅▅▅▅▅▅▅▅

Trend sparkline is historical gzip bytes ending with this PR measurement; lower is better.

@pkg-pr-new
Copy link

pkg-pr-new bot commented Mar 13, 2026

More templates

@tanstack/arktype-adapter

npm i https://pkg.pr.new/@tanstack/arktype-adapter@6919

@tanstack/eslint-plugin-router

npm i https://pkg.pr.new/@tanstack/eslint-plugin-router@6919

@tanstack/history

npm i https://pkg.pr.new/@tanstack/history@6919

@tanstack/nitro-v2-vite-plugin

npm i https://pkg.pr.new/@tanstack/nitro-v2-vite-plugin@6919

@tanstack/react-router

npm i https://pkg.pr.new/@tanstack/react-router@6919

@tanstack/react-router-devtools

npm i https://pkg.pr.new/@tanstack/react-router-devtools@6919

@tanstack/react-router-ssr-query

npm i https://pkg.pr.new/@tanstack/react-router-ssr-query@6919

@tanstack/react-start

npm i https://pkg.pr.new/@tanstack/react-start@6919

@tanstack/react-start-client

npm i https://pkg.pr.new/@tanstack/react-start-client@6919

@tanstack/react-start-server

npm i https://pkg.pr.new/@tanstack/react-start-server@6919

@tanstack/router-cli

npm i https://pkg.pr.new/@tanstack/router-cli@6919

@tanstack/router-core

npm i https://pkg.pr.new/@tanstack/router-core@6919

@tanstack/router-devtools

npm i https://pkg.pr.new/@tanstack/router-devtools@6919

@tanstack/router-devtools-core

npm i https://pkg.pr.new/@tanstack/router-devtools-core@6919

@tanstack/router-generator

npm i https://pkg.pr.new/@tanstack/router-generator@6919

@tanstack/router-plugin

npm i https://pkg.pr.new/@tanstack/router-plugin@6919

@tanstack/router-ssr-query-core

npm i https://pkg.pr.new/@tanstack/router-ssr-query-core@6919

@tanstack/router-utils

npm i https://pkg.pr.new/@tanstack/router-utils@6919

@tanstack/router-vite-plugin

npm i https://pkg.pr.new/@tanstack/router-vite-plugin@6919

@tanstack/solid-router

npm i https://pkg.pr.new/@tanstack/solid-router@6919

@tanstack/solid-router-devtools

npm i https://pkg.pr.new/@tanstack/solid-router-devtools@6919

@tanstack/solid-router-ssr-query

npm i https://pkg.pr.new/@tanstack/solid-router-ssr-query@6919

@tanstack/solid-start

npm i https://pkg.pr.new/@tanstack/solid-start@6919

@tanstack/solid-start-client

npm i https://pkg.pr.new/@tanstack/solid-start-client@6919

@tanstack/solid-start-server

npm i https://pkg.pr.new/@tanstack/solid-start-server@6919

@tanstack/start-client-core

npm i https://pkg.pr.new/@tanstack/start-client-core@6919

@tanstack/start-fn-stubs

npm i https://pkg.pr.new/@tanstack/start-fn-stubs@6919

@tanstack/start-plugin-core

npm i https://pkg.pr.new/@tanstack/start-plugin-core@6919

@tanstack/start-server-core

npm i https://pkg.pr.new/@tanstack/start-server-core@6919

@tanstack/start-static-server-functions

npm i https://pkg.pr.new/@tanstack/start-static-server-functions@6919

@tanstack/start-storage-context

npm i https://pkg.pr.new/@tanstack/start-storage-context@6919

@tanstack/valibot-adapter

npm i https://pkg.pr.new/@tanstack/valibot-adapter@6919

@tanstack/virtual-file-routes

npm i https://pkg.pr.new/@tanstack/virtual-file-routes@6919

@tanstack/vue-router

npm i https://pkg.pr.new/@tanstack/vue-router@6919

@tanstack/vue-router-devtools

npm i https://pkg.pr.new/@tanstack/vue-router-devtools@6919

@tanstack/vue-router-ssr-query

npm i https://pkg.pr.new/@tanstack/vue-router-ssr-query@6919

@tanstack/vue-start

npm i https://pkg.pr.new/@tanstack/vue-start@6919

@tanstack/vue-start-client

npm i https://pkg.pr.new/@tanstack/vue-start-client@6919

@tanstack/vue-start-server

npm i https://pkg.pr.new/@tanstack/vue-start-server@6919

@tanstack/zod-adapter

npm i https://pkg.pr.new/@tanstack/zod-adapter@6919

commit: 2d2d558

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (3)
packages/router-plugin/src/core/code-splitter/plugins.ts (1)

16-23: Tighten the new plugin context types before this API spreads.

insertionPath and createRouteFn are both very broad here, so plugin implementations lose useful narrowing right at the boundary and will end up casting. If the compiler only passes a small node union and a fixed set of route-factory names, model that explicitly in this context type now.

As per coding guidelines "Use TypeScript strict mode with extensive type safety".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/router-plugin/src/core/code-splitter/plugins.ts` around lines 16 -
23, The ReferenceRouteCompilerPluginContext type is too broad: narrow
insertionPath and createRouteFn so downstream plugins get precise types; change
insertionPath from babel.NodePath (any) to a NodePath union that matches only
the actual insertion targets (e.g., babel.NodePath<t.VariableDeclarator |
t.ExpressionStatement | t.Program> or whatever small set the compiler uses) and
change createRouteFn from string to a literal union of allowed factory names
(e.g., 'createRoute' | 'createReferenceRoute' or the exact names your compiler
emits); update the type definition for ReferenceRouteCompilerPluginContext
accordingly so plugins can rely on narrowed node kinds and known factory names
without casting.
packages/router-plugin/src/core/router-hmr-plugin.ts (1)

46-67: Add one transform-level test for this React fast path.

The new behavior is wired here, but the added coverage in packages/router-plugin/tests/add-hmr.test.ts exercises compileCodeSplitReferenceRoute directly rather than unpluginRouterHmrFactory.transform.handler. A small integration test around this branch would protect the actual regression point from future drift.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/router-plugin/src/core/router-hmr-plugin.ts` around lines 46 - 67,
Add a transform-level integration test that exercises the React fast path in
unpluginRouterHmrFactory.transform.handler (the branch that checks
userConfig.target === 'react' and returns the result of
compileCodeSplitReferenceRoute). The test should invoke
unpluginRouterHmrFactory.transform.handler with a mock/fixture module id and
source code that would trigger compileCodeSplitReferenceRoute, set
userConfig.target to 'react', and assert that the handler returns the compiled
result (or contains expected compiled.code/HMR markers) rather than calling
compileCodeSplitReferenceRoute directly; target the same behavior currently
guarded in router-hmr-plugin.ts so the actual transform pipeline is covered
end-to-end. Ensure the test filename/location mirrors other transform tests
(e.g., tests/add-hmr.test.ts style) and mocks any required plugin
context/environment used by transform.handler.
packages/router-plugin/src/core/code-splitter/compilers.ts (1)

640-650: Derive opts from the shared options type instead of asserting it.

compileCodeSplitReferenceRoute now keeps a second copy of the reference-route options shape, and Line 731 has to cast back to CompileCodeSplitReferenceRouteOptions to satisfy the plugin context. Reusing the shared type in this function signature would let strict mode catch drift instead of masking it.

♻️ Suggested change
+type CompileCodeSplitReferenceRouteWithPluginsOptions =
+  ParseAstOptions &
+  CompileCodeSplitReferenceRouteOptions & {
+    compilerPlugins?: Array<ReferenceRouteCompilerPlugin>
+  }
+
 export function compileCodeSplitReferenceRoute(
-  opts: ParseAstOptions & {
-    codeSplitGroupings: CodeSplitGroupings
-    deleteNodes?: Set<DeletableNodes>
-    targetFramework: Config['target']
-    filename: string
-    id: string
-    addHmr?: boolean
-    sharedBindings?: Set<string>
-    compilerPlugins?: Array<ReferenceRouteCompilerPlugin>
-  },
+  opts: CompileCodeSplitReferenceRouteWithPluginsOptions,
 ): GeneratorResult | null {
@@
-                      opts: opts as CompileCodeSplitReferenceRouteOptions,
+                      opts,

As per coding guidelines, **/*.{ts,tsx}: Use TypeScript strict mode with extensive type safety.

Also applies to: 731-731

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/router-plugin/src/core/code-splitter/compilers.ts` around lines 640
- 650, The function compileCodeSplitReferenceRoute is duplicating the
reference-route options shape; change its opts parameter to use the existing
shared reference-route options type (the shared options type used elsewhere)
instead of redefining the shape inline, and remove the runtime/type cast to
CompileCodeSplitReferenceRouteOptions at the plugin context usage (the cast
around the plugin invocation at the current plugin context site). In practice:
import/reference the shared options type, replace the inline opts type in
compileCodeSplitReferenceRoute with that shared type, and update any code that
currently casts opts back to CompileCodeSplitReferenceRouteOptions so the
compiler no longer requires the cast.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@packages/router-plugin/src/core/code-splitter/compilers.ts`:
- Around line 640-650: The function compileCodeSplitReferenceRoute is
duplicating the reference-route options shape; change its opts parameter to use
the existing shared reference-route options type (the shared options type used
elsewhere) instead of redefining the shape inline, and remove the runtime/type
cast to CompileCodeSplitReferenceRouteOptions at the plugin context usage (the
cast around the plugin invocation at the current plugin context site). In
practice: import/reference the shared options type, replace the inline opts type
in compileCodeSplitReferenceRoute with that shared type, and update any code
that currently casts opts back to CompileCodeSplitReferenceRouteOptions so the
compiler no longer requires the cast.

In `@packages/router-plugin/src/core/code-splitter/plugins.ts`:
- Around line 16-23: The ReferenceRouteCompilerPluginContext type is too broad:
narrow insertionPath and createRouteFn so downstream plugins get precise types;
change insertionPath from babel.NodePath (any) to a NodePath union that matches
only the actual insertion targets (e.g., babel.NodePath<t.VariableDeclarator |
t.ExpressionStatement | t.Program> or whatever small set the compiler uses) and
change createRouteFn from string to a literal union of allowed factory names
(e.g., 'createRoute' | 'createReferenceRoute' or the exact names your compiler
emits); update the type definition for ReferenceRouteCompilerPluginContext
accordingly so plugins can rely on narrowed node kinds and known factory names
without casting.

In `@packages/router-plugin/src/core/router-hmr-plugin.ts`:
- Around line 46-67: Add a transform-level integration test that exercises the
React fast path in unpluginRouterHmrFactory.transform.handler (the branch that
checks userConfig.target === 'react' and returns the result of
compileCodeSplitReferenceRoute). The test should invoke
unpluginRouterHmrFactory.transform.handler with a mock/fixture module id and
source code that would trigger compileCodeSplitReferenceRoute, set
userConfig.target to 'react', and assert that the handler returns the compiled
result (or contains expected compiled.code/HMR markers) rather than calling
compileCodeSplitReferenceRoute directly; target the same behavior currently
guarded in router-hmr-plugin.ts so the actual transform pipeline is covered
end-to-end. Ensure the test filename/location mirrors other transform tests
(e.g., tests/add-hmr.test.ts style) and mocks any required plugin
context/environment used by transform.handler.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 792b6a3d-38b0-4907-843c-2e235b3d354c

📥 Commits

Reviewing files that changed from the base of the PR and between 80c3196 and 6c6f49f.

📒 Files selected for processing (14)
  • packages/react-router/src/Match.tsx
  • packages/react-router/tests/router.test.tsx
  • packages/router-plugin/src/core/code-splitter/compilers.ts
  • packages/router-plugin/src/core/code-splitter/plugins.ts
  • packages/router-plugin/src/core/code-splitter/plugins/framework-plugins.ts
  • packages/router-plugin/src/core/code-splitter/plugins/react-refresh-route-components.ts
  • packages/router-plugin/src/core/router-code-splitter-plugin.ts
  • packages/router-plugin/src/core/router-hmr-plugin.ts
  • packages/router-plugin/src/core/utils.ts
  • packages/router-plugin/tests/add-hmr.test.ts
  • packages/router-plugin/tests/add-hmr/snapshots/react/createRootRoute-inline-component@false.tsx
  • packages/router-plugin/tests/add-hmr/snapshots/react/createRootRoute-inline-component@true.tsx
  • packages/router-plugin/tests/add-hmr/test-files/react/createRootRoute-inline-component.tsx
  • packages/router-plugin/tests/utils.test.ts
💤 Files with no reviewable changes (2)
  • packages/react-router/src/Match.tsx
  • packages/react-router/tests/router.test.tsx

@codspeed-hq
Copy link

codspeed-hq bot commented Mar 13, 2026

Merging this PR will not alter performance

✅ 6 untouched benchmarks


Comparing fix-6339 (eb199dd) with main (80c3196)

Open in CodSpeed

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.changeset/soft-pianos-lie.md:
- Line 6: Update the changeset title string "fix: hoist inline component
definitions for proper React HMR#6919" to add a space before the PR reference so
it reads "...React HMR `#6919`", and append a short issue reference such as "
(fixes `#6339`)" or " — fixes `#6339`" to indicate this patch resolves the hard page
reloads issue; locate and edit the same line in the .changeset entry that
contains the current title text.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e2782d24-2459-48f4-9605-592bf67b3853

📥 Commits

Reviewing files that changed from the base of the PR and between 6c6f49f and eb199dd.

📒 Files selected for processing (1)
  • .changeset/soft-pianos-lie.md

'@tanstack/react-router': patch
---

fix: hoist inline component definitions for proper React HMR#6919
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add space before PR reference and consider mentioning the fixed issue.

The description is missing a space between "HMR" and "#6919", which reduces readability. Additionally, consider referencing issue #6339 to help users understand this fix resolves hard page reloads during development.

📝 Suggested improvement
-fix: hoist inline component definitions for proper React HMR#6919
+fix: hoist inline component definitions for proper React HMR (`#6919`, fixes `#6339`)

Or alternatively, make it more user-focused:

-fix: hoist inline component definitions for proper React HMR#6919
+fix: prevent hard page reloads on save by hoisting inline component definitions (`#6919`, fixes `#6339`)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.changeset/soft-pianos-lie.md at line 6, Update the changeset title string
"fix: hoist inline component definitions for proper React HMR#6919" to add a
space before the PR reference so it reads "...React HMR `#6919`", and append a
short issue reference such as " (fixes `#6339`)" or " — fixes `#6339`" to indicate
this patch resolves the hard page reloads issue; locate and edit the same line
in the .changeset entry that contains the current title text.

@schiller-manuel schiller-manuel merged commit 6069eba into main Mar 13, 2026
16 of 17 checks passed
@schiller-manuel schiller-manuel deleted the fix-6339 branch March 13, 2026 20:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Page hard reloads on save

1 participant