Skip to content

chore(deps): update dependency react-router@>=6.7.0 <6.30.6 to v7 [security] - #9554

Open
renovate[bot] wants to merge 1 commit into
masterfrom
renovate/npm-react-router-=6.7.0-6.30.6-vulnerability
Open

chore(deps): update dependency react-router@>=6.7.0 <6.30.6 to v7 [security]#9554
renovate[bot] wants to merge 1 commit into
masterfrom
renovate/npm-react-router-=6.7.0-6.30.6-vulnerability

Conversation

@renovate

@renovate renovate Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
react-router@>=6.7.0 <6.30.6 (source) [^6.30.6^7.18.0](https://renovatebot.com/diffs/npm/react-router@>=6.7.0 <6.30.6/6.30.6/7.18.0) age confidence

React Router: Arbitrary Constructor Injection via deserializeErrors() in React Router SSR Hydration

CVE-2026-53666 / GHSA-337j-9hxr-rhxg

More information

Details

If application code allows attacker supplied input to overwrite certain aspects of errors caught by the SSR process, then it was possible for attacker to trigger unexpected constructor execution on the client which would trigger outbound network traffic. This is only possible with very specific (and unlikely) application layer code.

[!NOTE]
This does not impact your application if you are using Declarative Mode. This only impacts Framework Mode and Data Mode applications doing manual SSR/hydration

Severity

  • CVSS Score: 6.1 / 10 (Medium)
  • Vector String: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N

References

This data is provided by the GitHub Advisory Database (CC-BY 4.0).


React Router: Open redirect via backslash in and useNavigate (CVE-2025-68470 bypass)

CVE-2026-53669 / GHSA-wrjc-x8rr-h8h6

More information

Details

This is a follow up to CVE-2025-68470. React Router was alerted to certain scenarios in which the fix there was incomplete so there still existed some scenarios where attacker supplied paths passed to navigation mechanisms could result in unexpected external navigations.

Severity

  • CVSS Score: 5.1 / 10 (Medium)
  • Vector String: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N

References

This data is provided by the GitHub Advisory Database (CC-BY 4.0).


Release Notes

remix-run/react-router (react-router@>=6.7.0 <6.30.6)

v7.18.0

Compare Source

Patch Changes
  • Fix server handler prerender responses when using ssr: false and future.v8_trailingSlashAwareDataRequests: true. Avoids false positive "SPA Mode" detection when serving prerendered paths (#​15173)
  • Use the ServerRouter nonce for nonce-aware SSR components when they don't provide their own value so strict CSP pages can load them. (#​15170)
  • Use turbo-stream to serialize and deserialize Framework Mode hydration errors (#​15175)
  • Precompute route branch matchers to avoid recompiling route path regexes during matching (#​15186)
  • Use the constructed request URL host when validating action request origins. (#​15185)
  • Remove the un-documented custom error serialization logic from Data Mode SSR built-in hydration flows (#​15175)
  • Validate protocols in RSC render redirects (#​15177)
  • Consolidate url normalization logic and better handle mixed slashes (#​15176)

v7.17.0

Compare Source

Minor Changes
  • Ship a subset of the official documentation inside the react-router package (#​15121)

    • Markdown docs are now available in node_modules/react-router/docs, letting AI coding agents and the React Router agent skills read official docs locally
    • Excludes auto-generated API docs (api/), community/ content, and tutorials (tutorials/)

v7.16.0

Compare Source

Minor Changes
  • Stabilize future.unstable_trailingSlashAwareDataRequests as future.v8_trailingSlashAwareDataRequests (#​15098)
Patch Changes
  • Disable manifest path when lazy route dicovery is disabled (#​15068)

  • Fix browser URL creation to use the configured history window instead of the global window. (#​15066)

    • Pass the history/router window through to createBrowserURLImpl so custom window contexts keep the correct URL origin.
  • Fix useNavigation() return type to preserve discriminated union across navigation states (#​15095)

  • Widen MetaDescriptor script:ld+json type from LdJsonObject to LdJsonObject | LdJsonObject[] to permit multiple JSON-LD schemas in a single <script type="application/ld+json"> tag emitted by <Meta /> (#​15082)

v7.15.1

Compare Source

Patch Changes
  • Update router to operate on fetcher Maps in an immutable manner to avoid delayed React renders from potentially reading an updated but not yet committed Map. This could result in brief flickers in some fetcher-driven optimistic UI scenarios. (#​15028)
  • Fix serverLoader() returning stale SSR data when a client navigation aborts pending hydration before the hydration clientLoader resolves (#​15022)
  • Fix RouterProvider onError callback not being called for synchronous initial loader errors in SPA mode (#​15039) (#​14942)
  • Memoize useFetchers to return a stable identity and only change if fetchers changed (#​15028)
  • Internal refactor to consolidate mutation request detection through shared utility (#​15033)
Unstable Changes

⚠️ Unstable features are not recommended for production use

  • Add a new unstable_useRouterState() hook that consolidates access to active and pending router states (RFC: #​12358) (#​15017)
    • Data/Framework/RSC only — throws when used without a data router

    • This should allow you to consolidate usages of the following hooks which will likely be deprecated and removed in a future major version

      • useLocation
      • useSearchParams
      • useParams
      • useMatches
      • useNavigationType
      • useNavigation
      let { active, pending } = unstable_useRouterState();
      
      // Active is always populated with the current location
      active.location; // replaces `useLocation()`
      active.searchParams; // replaces `useSearchParams()[0]`
      active.params; // replaces `useParams()`
      active.matches; // replaces `useMatches()`
      active.type; // replaces `useNavigationType()`
      
      // Pending is only populated during a navigation
      pending.location; // replaces `useNavigation().location`
      pending.searchParams; // equivalent to `new URLSearchParams(useNavigation().search)`
      pending.params; // Not directly accessible today
      pending.matches; // Not directly accessible today
      pending.type; // Not directly accessible today
      pending.state; // replaces `useNavigation().state`
      pending.formMethod; // replaces useNavigation().formMethod
      pending.formAction; // replaces useNavigation().formAction
      pending.formEncType; // replaces useNavigation().formEncType
      pending.formData; // replaces useNavigation().formData
      pending.json; // replaces useNavigation().json
      pending.text; // replaces useNavigation().text

v7.15.0

Compare Source

Minor Changes
  • Stabilize unstable_defaultShouldRevalidate as defaultShouldRevalidate on <Link>, <Form>, useLinkClickHandler, useSubmit, fetcher.submit, and setSearchParams (a993f09)

    • ⚠️ This is a breaking change if you have already opted into the unstable version - you will need to update your code accordingly
  • Stabilize the instrumentation APIs. unstable_instrumentations is now instrumentations and unstable_pattern is now pattern (a993f09)

    • The unstable_ServerInstrumentation, unstable_ClientInstrumentation, unstable_InstrumentRequestHandlerFunction, unstable_InstrumentRouterFunction, unstable_InstrumentRouteFunction, and unstable_InstrumentationHandlerResult types have had their unstable_ prefixes removed
    • ⚠️ This is a breaking change if you have already opted into the unstable version - you will need to update your code accordingly
  • Stabilize unstable_mask as mask on <Link>, useLinkClickHandler, and useNavigate, and rename the corresponding Location.unstable_mask field to Location.mask (a993f09)

    • ⚠️ This is a breaking change if you have already opted into the unstable version - you will need to update your code accordingly
  • Stabilize the unstable_normalizePath option on staticHandler.query and staticHandler.queryRoute as normalizePath (a993f09)

    • ⚠️ This is a breaking change if you have already opted into the unstable version - you will need to update your code accordingly
  • Stabilize future.unstable_passThroughRequests as future.v8_passThroughRequests (a993f09)

    • ⚠️ This is a breaking change if you have already opted into the unstable version - you will need to update your code accordingly
  • Remove unstable_subResourceIntegrity from the runtime FutureConfig type; the flag is now controlled by the top-level subResourceIntegrity option in react-router.config.ts (a993f09)

    • ⚠️ This is a breaking change if you have already opted into the unstable version - you will need to update your code accordingly
  • Stabilize unstable_url as url on loader, action, and middleware function args (a993f09)

    • ⚠️ This is a breaking change if you have already opted into the unstable version - you will need to update your code accordingly
  • Stabilize unstable_useTransitions as useTransitions on <BrowserRouter>, <HashRouter>, <HistoryRouter>, <MemoryRouter>, <Router>, <RouterProvider>, <HydratedRouter>, and useLinkClickHandler (a993f09)

    • ⚠️ This is a breaking change if you have already opted into the unstable version - you will need to update your code accordingly
Patch Changes
  • Add nonce to <Scripts> <link rel="modulepreload"> elements (if provided) (af5d49b)

  • Fix a bug with unstable_defaultShouldRevalidate={false} where parent routes that did not export a shouldRevalidate function could be incorrectly included in the single fetch call for new child route data (#​15012)

  • Improve server-side route matching performance by pre-computing flattened/cached route branches (#​14967) (af5d49b)

    • Performance benchmarks showed roughly a 10-15% improvement in server-side request handling performance
  • Mark mask as an optional field in Location for easier mocking in unit tests (#​14999)

  • Cache flattened/ranked route branches to optimize server-side route matching (#​14967)

  • Improve route matching performance in Framework/Data Mode (#​14971) (af5d49b)

    • Avoiding unnecessary calls to matchRoutes in data router scenarios
      • This includes adding back the optimization that was removed in 7.6.0 (#​13562)
      • The issues that prompted the revert have been addressed by using the available router matches but always updating match.route to the latest route in the manifest
    • Leverage pre-computed pre-computing flattened/cached route branches during client side route matching
    • Performance benchmarks showed roughly a 15-30% improvement in server-side request handling performance

v7.14.2

Compare Source

Patch Changes
  • Remove the un-documented custom error serialization logic from the internal turbo-stream implementation. React Router only automatically handles serialization of Error and it's standard subtypes (SyntaxError, TypeError, etc.). ([aabf4a1)

  • Properly handle parent middleware redirects during fetcher.load ([aabf4a1)

  • Remove redundant Omit<RouterProviderProps, "flushSync"> from react-router/dom RouterProvider ([aabf4a1)

  • Improved types for generatePath's param arg ([aabf4a1)

    Type errors when required params are omitted:

    // Before
    // Passes type checks, but throws at runtime 💥
    generatePath(":required", { required: null });
    
    // After
    generatePath(":required", { required: null });
    //                          ^^^^^^^^ Type 'null' is not assignable to type 'string'.ts(2322)

    Allow omission of optional params:

    // Before
    generatePath(":optional?", {});
    //                         ^^ Property 'optional' is missing in type '{}' but required in type '{ optional: string | null | undefined; }'.ts(2741)
    
    // After
    generatePath(":optional?", {});

    Allows extra keys:

    // Before
    generatePath(":a", { a: "1", b: "2" });
    //                           ^ Object literal may only specify known properties, and 'b' does not exist in type '{ a: string; }'.ts(2353)
    
    // After
    generatePath(":a", { a: "1", b: "2" });

v7.14.1

Compare Source

Patch Changes
  • Fix a potential race condition that can occur when rendering a HydrateFallback and initial loaders land before the router.subscribe call happens in the RouterProvider layout effect
  • Normalize double-slashes in redirect paths

v7.14.0

Compare Source

Patch Changes
  • UNSTABLE RSC FRAMEWORK MODE BREAKING CHANGE - Existing route module exports remain unchanged from stable v7 non-RSC mode, but new exports are added for RSC mode. If you want to use RSC features, you will need to update your route modules to export the new annotations. (#​14901)

    If you are using RSC framework mode currently, you will need to update your route modules to the new conventions. The following route module components have their own mutually exclusive server component counterparts:

    Server Component Export Client Component
    ServerComponent default
    ServerErrorBoundary ErrorBoundary
    ServerLayout Layout
    ServerHydrateFallback HydrateFallback

    If you were previously exporting a ServerComponent, your ErrorBoundary, Layout, and HydrateFallback were also server components. If you want to keep those as server components, you can rename them and prefix them with Server. If you were previously importing the implementations of those components from a client module, you can simply inline them.

    Example:

    Before

    import { ErrorBoundary as ClientErrorBoundary } from "./client";
    
    export function ServerComponent() {
      // ...
    }
    
    export function ErrorBoundary() {
      return <ClientErrorBoundary />;
    }
    
    export function Layout() {
      // ...
    }
    
    export function HydrateFallback() {
      // ...
    }

    After

    export function ServerComponent() {
      // ...
    }
    
    export function ErrorBoundary() {
      // previous implementation of ClientErrorBoundary, this is now a client component
    }
    
    export function ServerLayout() {
      // rename previous Layout export to ServerLayout to make it a server component
    }
    
    export function ServerHydrateFallback() {
      // rename previous HydrateFallback export to ServerHydrateFallback to make it a server component
    }
  • rsc Link prefetch (#​14902)

  • Remove recursion from turbo-stream v2 allowing for encoding / decoding of massive payloads. (#​14838)

  • encodeViaTurboStream leaked memory via unremoved AbortSignal listener (#​14900)

v7.13.2

Compare Source

Patch Changes
  • Fix clientLoader.hydrate when an ancestor route is also hydrating a clientLoader (#​14835)

  • Fix type error when passing Framework Mode route components using Route.ComponentProps to createRoutesStub (#​14892)

  • Fix percent encoding in relative path navigation (#​14786)

  • Add future.unstable_passThroughRequests flag (#​14775)

    By default, React Router normalizes the request.url passed to your loader, action, and middleware functions by removing React Router's internal implementation details (.data suffixes, index + _routes query params).

    Enabling this flag removes that normalization and passes the raw HTTP request instance to your handlers. This provides a few benefits:

    • Reduces server-side overhead by eliminating multiple new Request() calls on the critical path
    • Allows you to distinguish document from data requests in your handlers base don the presence of a .data suffix (useful for observability purposes)

    If you were previously relying on the normalization of request.url, you can switch to use the new sibling unstable_url parameter which contains a URL instance representing the normalized location:

    // ❌ Before: you could assume there was no `.data` suffix in `request.url`
    export async function loader({ request }: Route.LoaderArgs) {
      let url = new URL(request.url);
      if (url.pathname === "/path") {
        // This check will fail with the flag enabled because the `.data` suffix will
        // exist on data requests
      }
    }
    
    // ✅ After: use `unstable_url` for normalized routing logic and `request.url`
    // for raw routing logic
    export async function loader({ request, unstable_url }: Route.LoaderArgs) {
      if (unstable_url.pathname === "/path") {
        // This will always have the `.data` suffix stripped
      }
    
      // And now you can distinguish between document versus data requests
      let isDataRequest = new URL(request.url).pathname.endsWith(".data");
    }
  • Internal refactor to consolidate framework-agnostic/React-specific route type layers - no public API changes (#​14765)

  • Sync protocol validation to rsc flows (#​14882)

  • Add a new unstable_url: URL parameter to route handler methods (loader, action, middleware, etc.) representing the normalized URL the application is navigating to or fetching, with React Router implementation details removed (.datasuffix, index/_routes query params) (#​14775)

    This is being added alongside the new future.unstable_passthroughRequests future flag so that users still have a way to access the normalized URL when that flag is enabled and non-normalized request's are being passed to your handlers. When adopting this flag, you will only need to start leveraging this new parameter if you are relying on the normalization of request.url in your application code.

    If you don't have the flag enabled, then unstable_url will match request.url.

v7.13.1

Compare Source

Patch Changes
  • fix null reference exception in bad codepath leading to invalid route tree comparisons (#​14780)

  • fix: clear timeout when turbo-stream encoding completes (#​14810)

  • Improve error message when Origin header is invalid (#​14743)

  • Fix matchPath optional params matching without a "/" separator. (#​14689)

    • matchPath("/users/:id?", "/usersblah") now returns null.
    • matchPath("/test_route/:part?", "/test_route_more") now returns null.
  • add RSC unstable_getRequest (#​14758)

  • Fix HydrateFallback rendering during initial lazy route discovery with matching splat route (#​14740)

  • [UNSTABLE] Add support for <Link unstable_mask> in Data Mode which allows users to navigate to a URL in the router but "mask" the URL displayed in the browser. This is useful for contextual routing usages such as displaying an image in a model on top of a gallery, but displaying a browser URL directly to the image that can be shared and loaded without the contextual gallery in the background. (#​14716)

    // routes/gallery.tsx
    export function clientLoader({ request }: Route.LoaderArgs) {
      let sp = new URL(request.url).searchParams;
      return {
        images: getImages(),
        // When the router location has the image param, load the modal data
        modalImage: sp.has("image") ? getImage(sp.get("image")!) : null,
      };
    }
    
    export default function Gallery({ loaderData }: Route.ComponentProps) {
      return (
        <>
          <GalleryGrid>
            {loaderData.images.map((image) => (
              <Link
                key={image.id}
                {/* Navigate the router to /galley?image=N */}}
                to={`/gallery?image=${image.id}`}
                {/* But display /images/N in the URL bar */}}
                unstable_mask={`/images/${image.id}`}
              >
                <img src={image.url} alt={image.alt} />
              </Link>
            ))}
          </GalleryGrid>
    
          {/* When the modal data exists, display the modal */}
          {data.modalImage ? (
            <dialog open>
              <img src={data.modalImage.url} alt={data.modalImage.alt} />
            </dialog>
          ) : null}
        </>
      );
    }

    Notes:

    • The masked location, if present, will be available on useLocation().unstable_mask so you can detect whether you are currently masked or not.
    • Masked URLs only work for SPA use cases, and will be removed from history.state during SSR.
    • This provides a first-class API to mask URLs in Data Mode to achieve the same behavior you could do in Declarative Mode via manual backgroundLocation management.
  • RSC: Update failed origin checks to return a 400 status and appropriate UI instead of a generic 500 (#​14755)

  • Preserve query parameters and hash on manifest version mismatch reload (#​14813)

v7.13.0

Compare Source

Minor Changes
  • Add crossOrigin prop to Links component (#​14687)
Patch Changes
  • Fix double slash normalization for useNavigate colon urls (#​14718)
  • Update failed origin checks to return a 400 status instead of a 500 (#​14737)
  • Bugfix #​14666: Inline criticalCss is missing nonce (#​14691)
  • Loosen allowedActionOrigins glob check so ** matches all domains (#​14722)

v7.12.0

Compare Source

Minor Changes
  • Add additional layer of CSRF protection by rejecting submissions to UI routes from external origins. If you need to permit access to specific external origins, you can specify them in the react-router.config.ts config allowedActionOrigins field. (#​14708)
Patch Changes
  • Fix generatePath when used with suffixed params (i.e., "/books/:id.json") (#​14269)

  • Export UNSAFE_createMemoryHistory and UNSAFE_createHashHistory alongside UNSAFE_createBrowserHistory for consistency. These are not intended to be used for new apps but intended to help apps usiong unstable_HistoryRouter migrate from v6->v7 so they can adopt the newer APIs. (#​14663)

  • Escape HTML in scroll restoration keys (#​14705)

  • Validate redirect locations (#​14706)

  • [UNSTABLE] Pass <Scripts nonce> value through to the underlying importmap script tag when using future.unstable_subResourceIntegrity (#​14675)

  • [UNSTABLE] Add a new future.unstable_trailingSlashAwareDataRequests flag to provide consistent behavior of request.pathname inside middleware, loader, and action functions on document and data requests when a trailing slash is present in the browser URL. (#​14644)

    Currently, your HTTP and request pathnames would be as follows for /a/b/c and /a/b/c/

    URL /a/b/c HTTP pathname request pathname`
    Document /a/b/c /a/b/c
    Data /a/b/c.data /a/b/c
    URL /a/b/c/ HTTP pathname request pathname`
    Document /a/b/c/ /a/b/c/
    Data /a/b/c.data /a/b/c ⚠️

    With this flag enabled, these pathnames will be made consistent though a new _.data format for client-side .data requests:

    URL /a/b/c HTTP pathname request pathname`
    Document /a/b/c /a/b/c
    Data /a/b/c.data /a/b/c
    URL /a/b/c/ HTTP pathname request pathname`
    Document /a/b/c/ /a/b/c/
    Data /a/b/c/_.data ⬅️ /a/b/c/

    This a bug fix but we are putting it behind an opt-in flag because it has the potential to be a "breaking bug fix" if you are relying on the URL format for any other application or caching logic.

    Enabling this flag also changes the format of client side .data requests from /_root.data to /_.data when navigating to / to align with the new format. This does not impact the request pathname which is still / in all cases.

  • Preserve clientLoader.hydrate=true when using <HydratedRouter unstable_instrumentations> (#​14674)

v7.11.0

Compare Source

Minor Changes
  • Stabilize <HydratedRouter onError>/<RouterProvider onError> (#​14546)
Patch Changes
  • add support for throwing redirect Response's at RSC render time (#​14596)

  • Support for throwing data() and Response from server component render phase. Response body is not serialized as async work is not allowed as error encoding phase. If you wish to transmit data to the boundary, throw data() instead. (#​14632)

  • Fix unstable_useTransitions prop on <Router> component to permit omission for backewards compatibility (#​14646)

  • routeRSCServerRequest replace fetchServer with serverResponse (#​14597)

  • [UNSTABLE] Add a new unstable_defaultShouldRevalidate flag to various APIs to allow opt-ing out of standard revalidation behaviors. (#​14542)

    If active routes include a shouldRevalidate function, then your value will be passed as defaultShouldRevalidate in those function so that the route always has the final revalidation determination.

    • <Form method="post" unstable_defaultShouldRevalidate={false}>
    • submit(data, { method: "post", unstable_defaultShouldRevalidate: false })
    • <fetcher.Form method="post" unstable_defaultShouldRevalidate={false}>
    • fetcher.submit(data, { method: "post", unstable_defaultShouldRevalidate: false })

    This is also available on non-submission APIs that may trigger revalidations due to changing search params:

    • <Link to="/" unstable_defaultShouldRevalidate={false}>
    • navigate("/?foo=bar", { unstable_defaultShouldRevalidate: false })
    • setSearchParams(params, { unstable_defaultShouldRevalidate: false })
  • Allow redirects to be returned from client side middleware (#​14598)

  • Handle dataStrategy implementations that return insufficient result sets by adding errors for routes without any available result (#​14627)

v7.10.1

Compare Source

Patch Changes
  • Update the useOptimistic stub we provide for React 18 users to use a stable setter function to avoid potential useEffect loops - specifically when using <Link viewTransition> (#​14628)

v7.10.0

Compare Source

Minor Changes
  • Stabilize fetcher.reset() (#​14545)

    • ⚠️ This is a breaking change if you have begun using fetcher.unstable_reset()
  • Stabilize the dataStrategy match.shouldRevalidateArgs/match.shouldCallHandler() APIs. (#​14592)

    • The match.shouldLoad API is now marked deprecated in favor of these more powerful alternatives

    • If you're using this API in a custom dataStrategy today, you can swap to the new API at your convenience:

      // Before
      const matchesToLoad = matches.filter((m) => m.shouldLoad);
      
      // After
      const matchesToLoad = matches.filter((m) => m.shouldCallHandler());
    • match.shouldRevalidateArgs is the argument that will be passed to the route shouldRevaliate function

    • Combined with the parameter accepted by match.shouldCallHandler, you can define a custom revalidation behavior for your dataStrategy:

    const matchesToLoad = matches.filter((m) => {
      const defaultShouldRevalidate = customRevalidationBehavior(
        match.shouldRevalidateArgs,
      );
      return m.shouldCallHandler(defaultShouldRevalidate);
      // The argument here will override the internal `defaultShouldRevalidate` value
    });
Patch Changes
  • Fix a Framework Mode bug where the defaultShouldRevalidate parameter to shouldRevalidate would not be correct after action returned a 4xx/5xx response (true when it should have been false) (#​14592)

    • If your shouldRevalidate function relied on that parameter, you may have seen unintended revalidations
  • Fix fetcher.submit failing with plain objects containing a tagName property (#​14534)

  • [UNSTABLE] Add unstable_pattern to the parameters for client side unstable_onError, refactor how it's called by RouterProvider to avoid potential strict mode issues (#​14573)

  • Add new unstable_useTransitions flag to routers to give users control over the usage of React.startTransition and React.useOptimistic. (#​14524)

    • Framework Mode + Data Mode:
      • <HydratedRouter unstable_transition>/<RouterProvider unstable_transition>
      • When left unset (current default behavior)
        • Router state updates are wrapped in React.startTransition
        • ⚠️ This can lead to buggy behaviors if you are wrapping your own navigations/fetchers in React.startTransition
        • You should set the flag to true if you run into this scenario to get the enhanced useOptimistic behavior (requires React 19)
      • When set to true
        • Router state updates remain wrapped in React.startTransition (as they are without the flag)
        • Link/Form navigations will be wrapped in React.startTransition
        • A subset of router state info will be surfaced to the UI during navigations via React.useOptimistic (i.e., useNavigation(), useFetchers(), etc.)
          • ⚠️ This is a React 19 API so you must also be React 19 to opt into this flag for Framework/Data Mode
      • When set to false
        • The router will not leverage React.startTransition or React.useOptimistic on any navigations or state changes
    • Declarative Mode
      • <BrowserRouter unstable_useTransitions>
      • When left unset
        • Router state updates are wrapped in React.startTransition
      • When set to true
        • Router state updates remain wrapped in React.startTransition (as they are without the flag)
        • Link/Form navigations will be wrapped in React.startTransition
      • When set to false
        • the router will not leverage React.startTransition on any navigations or state changes
  • Fix the promise returned from useNavigate in Framework/Data Mode so that it properly tracks the duration of popstate navigations (i.e., navigate(-1)) (#​14524)

  • Fix internal type error in useRoute types that surfaces when skipLibCheck is disabled (#​14577)

  • Preserve statusText on the ErrorResponse instance when throwing data() from a route handler (#​14555)

  • Optimize href() to avoid backtracking regex on splat (#​14329)

v7.9.6

Compare Source

Patch Changes
  • [UNSTABLE] Add location/params as arguments to client-side unstable_onError to permit enhanced error reporting. (#​14509)

    ⚠️ This is a breaking change if you've already adopted unstable_onError. The second errorInfo parameter is now an object with location and params:

    // Before
    function errorHandler(error: unknown, errorInfo?: React.errorInfo) {
      /*...*/
    }
    
    // After
    function errorHandler(
      error: unknown,
      info: {
        location: Location;
        params: Params;
        errorInfo?: React.ErrorInfo;
      },
    ) {
      /*...*/
    }
  • Properly handle ancestor thrown middleware errors before next() on fetcher submissions (#​14517)

  • Fix issue with splat routes interfering with multiple calls to patchRoutesOnNavigation (#​14487)

  • Normalize double-slashes in resolvePath (#​14529)

v7.9.5

Compare Source

Patch Changes
  • Move RSCHydratedRouter and utils to /dom export. (#​14457)

  • useRoute: return type-safe handle (#​14462)

    For example:

    // app/routes/admin.tsx
    const handle = { hello: "world" };
    // app/routes/some-other-route.tsx
    export default function Component() {
      const admin = useRoute("routes/admin");
      if (!admin) throw new Error("Not nested within 'routes/admin'");
      console.log(admin.handle);
      //                ^? { hello: string }
    }
  • Ensure action handlers run for routes with middleware even if no loader is present (#​14443)

  • Add unstable_instrumentations API to allow users to add observablity to their apps by instrumenting route loaders, actions, middlewares, lazy, as well as server-side request handlers and client side navigations/fetches (#​14412)

    • Framework Mode:
      • entry.server.tsx: export const unstable_instrumentations = [...]
      • entry.client.tsx: <HydratedRouter unstable_instrumentations={[...]} />
    • Data Mode
      • createBrowserRouter(routes, { unstable_instrumentations: [...] })

    This also adds a new unstable_pattern parameter to loaders/actions/middleware which contains the un-interpolated route pattern (i.e., /blog/:slug) which is useful for aggregating performance metrics by route

v7.9.4

Compare Source

Patch Changes
  • handle external redirects in from server actions (#​14400)

  • New (unstable) useRoute hook for accessing data from specific routes (#​14407)

    For example, let's say you have an admin route somewhere in your app and you want any child routes of admin to all have access to the loaderData and actionData from admin.

    // app/routes/admin.tsx
    import { Outlet } from "react-router";
    
    export const loader = () => ({ message: "Hello, loader!" });
    
    export const action = () => ({ count: 1 });
    
    export default function Component() {
      return (
        <div>
          {/* ... */}
          <Outlet />
          {/* ... */}
        </div>
      );
    }

    You might even want to create a reusable widget that all of the routes nested under admin could use:

    import { unstable_useRoute as useRoute } from "react-router";
    
    export function AdminWidget() {
      // How to get `message` and `count` from `admin` route?
    }

    In framework mode, useRoute knows all your app's routes and gives you TS errors when invalid route IDs are passed in:

    export function AdminWidget() {
      const admin = useRoute("routes/dmin");
      //                      ^^^^^^^^^^^
    }

    useRoute returns undefined if the route is not part of the current page:

    export function AdminWidget() {
      const admin = useRoute("routes/admin");
      if (!admin) {
        throw new Error(`AdminWidget used outside of "routes/admin"`);
      }
    }

    Note: the root route is the exception since it is guaranteed to be part of the current page.
    As a result, useRoute never returns undefined for root.

    loaderData and actionData are marked as optional since they could be accessed before the action is triggered or after the loader threw an error:

    export function AdminWidget() {
      const admin = useRoute("routes/admin");
      if (!admin) {
        throw new Error(`AdminWidget used outside of "routes/admin"`);
      }
      const { loaderData, actionData } = admin;
      console.log(loaderData);
      //          ^? { message: string } | undefined
      console.log(actionData);
      //          ^? { count: number } | undefined
    }

    If instead of a specific route, you wanted access to the current route's loaderData and actionData, you can call useRoute without arguments:

    export function AdminWidget() {
      const currentRoute = useRoute();
      currentRoute.loaderData;
      currentRoute.actionData;
    }

    This usage is equivalent to calling useLoaderData and useActionData, but consolidates all route data access into one hook: useRoute.

    Note: when calling useRoute() (without a route ID), TS has no way to know which route is the current route.
    As a result, loaderData and actionData are typed as unknown.
    If you want more type-safety, you can either narrow the type yourself with something like zod or you can refactor your app to pass down typed props to your AdminWidget:

    export function AdminWidget({
      message,
      count,
    }: {
      message: string;
      count: number;
    }) {
      /* ... */
    }

v7.9.3

Compare Source

Patch Changes
  • Do not try to use turbo-stream to decode CDN errors that never reached the server (#​14385)

    • We used to do this but lost this check with the adoption of single fetch
  • Fix Data Mode regression causing a 404 during initial load in when middleware exists without any loader functions (#​14393)

v7.9.2

Compare Source

Patch Changes
    • Update client-side router to run client middleware on initial load even if no loaders exist (#​14348)
    • Update createRoutesStub to run route middleware
      • You will need to set the <RoutesStub future={{ v8_middleware: true }} /> flag to enable the proper context type
  • Update Lazy Route Discovery manifest requests to use a singular comma-separated paths query param instead of repeated p query params (#​14321)

    • This is because Cloudflare has a hard limit of 100 URL search param key/value pairs when used as a key for caching purposes
    • If more that 100 paths were included, the cache key would be incomplete and could produce false-positive cache hits
  • [UNSTABLE] Add fetcher.unstable_reset() API (#​14206)

  • Made useOutlet element reference have stable identity in-between route chages (#​13382)

  • feat: enable full transition support for the rsc router (#​14362)

  • In RSC Data Mode, handle SSR'd client errors and re-try in the browser (#​14342)

  • Support middleware prop on <Route> for usage with a data router via createRoutesFromElements (#​14357)

  • Handle encoded question mark and hash characters in ancestor splat routes (#​14249)

  • Fail gracefully on manifest version mismatch logic if sessionStorage access is blocked (#​14335)

v7.9.1

Compare Source

Patch Changes
  • Fix internal Future interface naming from middleware -> v8_middleware (#​14327)

v7.9.0

Compare Source

Minor Changes
Patch Changes
  • Escape HTML in meta() JSON-LD content (#​14316)
  • Add react-server Await component implementation (#​14261)
  • In RSC Data Mode when using a custom basename, fix hydration errors for routes that only have client loaders (#​14264)
  • Make href function available in a react-server context (#​14262)
  • decode each time getPayload() is called to allow for "in-context" decoding and hoisting of contextual assets (#​14248)
  • href() now correctly processes routes that have an extension after the parameter or are a single optional parameter. (#​13797)

v7.8.2

Compare Source

Patch Changes
  • [UNSTABLE] Remove Data Mode future.unstable_middleware flag from createBrowserRouter (#​14213)

    • This is only needed as a Framework Mode flag because of the route modules and the getLoadContext type behavior change
    • In Data Mode, it's an opt-in feature because it's just a new property on a route object, so there's no behavior changes that necessitate a flag
  • [UNSTABLE] Add <RouterProvider unstable_onError>/<HydratedRouter unstable_onError> prop for client side error reporting (#​14162)

  • server action revalidation opt out via $SKIP_REVALIDATION field (#​14154)

  • Properly escape interpolated param values in generatePath() (#​13530)

  • Maintain ReadonlyMap and ReadonlySet types in server response data. (#​13092)

  • [UNSTABLE] Delay serialization of .data redirects to 202 responses until after middleware chain (#​14205)

  • Fix TypeError if you throw from `patchRoutesOnNavigat

Important

✂ PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • 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.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

Copilot AI lite review requested due to automatic review settings September 4, 2026 04:47
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown

COMPARE TO master

Total Size Diff 📉 -465 Bytes

Diff by File
Name Diff
package.json 0 Bytes
pnpm-lock.yaml 📉 -465 Bytes

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

The new react-router override targets v8 while the resolved dependency graph remains on React Router v6/React 18, creating a likely incompatibility and undermining the intended security upgrade.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR (Renovate-generated) attempts to address React Router security advisories by updating the root-level pnpm override for react-router and refreshing the lockfile accordingly.

Changes:

  • Updates the root pnpm.overrides entry for react-router@>=6.7.0 <6.30.6 from ^6.30.6 to ^8.0.0
  • Updates pnpm-lock.yaml overrides to reflect the new react-router override and includes some incidental lockfile normalization changes
File summaries
File Description
package.json Changes root pnpm.overrides to force react-router to v8 for affected dependency ranges
pnpm-lock.yaml Updates lockfile override metadata and related snapshot entries
Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file
  • Files reviewed: 1/2 changed files
  • Comments generated: 2
  • Review effort level: Lite

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

Comment thread package.json Outdated
"prismjs@<1.30.0": "^1.30.0",
"qs@>=6.11.1 <6.15.2": "^6.15.2",
"react-router@>=6.7.0 <6.30.6": "^6.30.6",
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
Comment thread pnpm-lock.yaml
Comment on lines 52 to 56
postcss@<8.5.18: ^8.5.18
prismjs@<1.30.0: ^1.30.0
qs@>=6.11.1 <6.15.2: ^6.15.2
react-router@>=6.7.0 <6.30.6: ^6.30.6
react-router@>=6.7.0 <6.30.6: ^8.0.0
react-router-dom@>=6.7.0 <6.30.6: ^6.30.6
Copilot AI review requested due to automatic review settings September 4, 2026 04:55
@renovate
renovate Bot force-pushed the renovate/npm-react-router-=6.7.0-6.30.6-vulnerability branch from 0c21e87 to 0898174 Compare September 4, 2026 04:55
@renovate renovate Bot changed the title chore(deps): update dependency react-router@>=6.7.0 <6.30.6 to v8 [security] chore(deps): update dependency react-router@>=6.7.0 <6.30.6 to v7 [security] Sep 4, 2026
@github-actions github-actions Bot added size/xs and removed size/xs labels Sep 4, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

The override update does not result in react-router@7.18.0 being resolved in the lockfile (it remains 6.30.6), so the intended security upgrade is not actually applied and may cause inconsistent installs.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (1)

pnpm-lock.yaml:56

  • This override forces react-router "^7.18.0" only for dependency specs in the ">=6.7.0 <6.30.6" range, but the lockfile still contains react-router@6.30.6 and react-router-dom@6.30.6, so the PR doesn’t actually update the installed React Router version. Consider updating the override selector (and react-router-dom) so the resolved versions become v7.18.0, then re-run pnpm to regenerate pnpm-lock.yaml.
  • Files reviewed: 1/2 changed files
  • Comments generated: 1
  • Review effort level: Lite

Comment thread package.json
Comment on lines 93 to 96
"qs@>=6.11.1 <6.15.2": "^6.15.2",
"react-router@>=6.7.0 <6.30.6": "^6.30.6",
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
"react-router-dom@>=6.7.0 <6.30.6": "^6.30.6",
"rollup@>=4.0.0 <4.59.0": "^4.59.0",
Copilot AI review requested due to automatic review settings September 4, 2026 06:41
@renovate
renovate Bot force-pushed the renovate/npm-react-router-=6.7.0-6.30.6-vulnerability branch from 0898174 to 84e9f9a Compare September 4, 2026 06:41
@renovate renovate Bot changed the title chore(deps): update dependency react-router@>=6.7.0 <6.30.6 to v7 [security] chore(deps): update dependency react-router@>=6.7.0 <6.30.6 to v8 [security] Sep 4, 2026
@github-actions github-actions Bot added size/xs and removed size/xs labels Sep 4, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The override bumps react-router to a breaking major (v8) that is likely incompatible with the repo’s current React 18 setup and also appears inconsistent with the current lockfile resolution.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

package.json:94

  • The override bumps react-router from the v6 line to v8, which is a breaking major upgrade and is likely incompatible with this repo’s current React 18 setup (see pnpm.peerDependencyRules.allowedVersions.react: ^18.0.0 in this same file). Also, the lockfile currently resolves react-router@6.30.6 (no react-router@8.x present), so this override doesn’t appear to be taking effect. Prefer keeping the security override within v6 (e.g. ^6.30.6) to address the vulnerable range without introducing a major-version upgrade.
      "react-router@>=6.7.0 <6.30.6": "^8.0.0",

pnpm-lock.yaml:55

  • This lockfile override forces react-router to ^8.0.0 for the vulnerable selector range, but the lockfile itself currently contains react-router@6.30.6 and no react-router@8.x entries, so the override is either unused or the lockfile wasn’t regenerated after changing it. To avoid an accidental future major bump (and keep react-router aligned with react-router-dom@6.30.6), pin this override to ^6.30.6 instead.
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI review requested due to automatic review settings September 4, 2026 06:48
@renovate
renovate Bot force-pushed the renovate/npm-react-router-=6.7.0-6.30.6-vulnerability branch from 84e9f9a to e7a8c78 Compare September 4, 2026 06:48
@renovate renovate Bot changed the title chore(deps): update dependency react-router@>=6.7.0 <6.30.6 to v8 [security] chore(deps): update dependency react-router@>=6.7.0 <6.30.6 to v7 [security] Sep 4, 2026
@github-actions github-actions Bot added size/xs and removed size/xs labels Sep 4, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The lockfile still resolves react-router@6.30.6 and contains no react-router@7.18.0, so the intended security upgrade is not actually applied.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

package.json:96

  • The overrides entry bumps react-router to ^7.18.0, but react-router-dom is still held at ^6.30.6 and workspace packages appear to depend on react-router-dom@^6.30.2 (so a real v7 upgrade would likely require aligning react-router-dom to v7 and adjusting any breaking API usage). As-is, the lockfile still resolves react-router@6.30.6, so this change does not actually apply the intended security upgrade.
      "react-router@>=6.7.0 <6.30.6": "^7.18.0",
      "react-router-dom@>=6.7.0 <6.30.6": "^6.30.6",
      "rollup@>=4.0.0 <4.59.0": "^4.59.0",

pnpm-lock.yaml:56

  • pnpm-lock.yaml does not contain any react-router@7.18.0 entries and still resolves react-router@6.30.6 (including via react-router-dom@6.30.6). This means the override change is currently ineffective and the lockfile is inconsistent with the intended dependency update; please regenerate the lockfile after updating the actual dependency constraints so the resolved versions match.
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI review requested due to automatic review settings September 4, 2026 07:07
@renovate
renovate Bot force-pushed the renovate/npm-react-router-=6.7.0-6.30.6-vulnerability branch from e7a8c78 to 64599a0 Compare September 4, 2026 07:07
@renovate renovate Bot changed the title chore(deps): update dependency react-router@>=6.7.0 <6.30.6 to v7 [security] chore(deps): update dependency react-router@>=6.7.0 <6.30.6 to v8 [security] Sep 4, 2026
@renovate renovate Bot changed the title chore(deps): update dependency react-router@>=6.7.0 <6.30.6 to v8 [security] chore(deps): update dependency react-router@>=6.7.0 <6.30.6 to v7 [security] Sep 7, 2026
@github-actions github-actions Bot added size/xs and removed size/xs labels Sep 7, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The override forces a v7 major for a v6 selector and the lockfile contains no resolved react-router@7.18.0, making the change potentially unsafe and possibly ineffective for remediation.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

package.json:94

  • The override selector targets React Router v6 (>=6.7.0 <6.30.6) but forces a v7 major (^7.18.0). This can violate downstream semver expectations and introduce multiple major versions in the graph; also, the lockfile currently contains no resolved react-router@7.18.0 entries (only v6.30.6), so this change likely doesn’t actually apply to anything and may not address the security advisory in practice. Consider keeping this override within the v6 line (or upgrading both react-router-dom and react-router together as part of a deliberate v7 migration).
      "react-router@>=6.7.0 <6.30.6": "^7.18.0",

pnpm-lock.yaml:55

  • This override now points react-router@>=6.7.0 <6.30.6 to ^7.18.0, but the lockfile doesn’t contain any react-router@7.18.0 resolution entries (only react-router@6.30.6). That suggests the override isn’t currently affecting the install graph and may not deliver the intended security remediation; additionally, forcing a major version for a v6 selector can break dependents if it ever does apply.
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The new react-router override forces an incompatible major version (v8) relative to the repo’s React 18 baseline and react-router-dom 6.x usage, risking broken dependency resolution.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

pnpm-lock.yaml:55

  • This override forces react-router to ^8.0.0 for packages requesting <6.30.6, which can introduce an incompatible major-version mix with the still-pinned react-router-dom 6.x and the repo’s React 18 baseline. Align this override with the patched 6.x version to avoid unexpected breakage in transitive dependencies.
    package.json:94
  • The override forces react-router to ^8.0.0 for dependencies that request <6.30.6, but this repo is on React 18 (see peerDependencyRules.allowedVersions.react) and still depends on react-router-dom 6.x; React Router v8 also removed react-router-dom and requires React 19+, so this override is very likely to create incompatible dependency resolutions. Use the patched 6.x version here (consistent with the react-router-dom override) unless you’re doing a coordinated major upgrade.
      "react-router@>=6.7.0 <6.30.6": "^8.0.0",
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The updated override forces a v7 major for a v6 selector range and is inconsistent with the current lockfile resolution (still react-router@6.30.6), creating unnecessary compatibility risk.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

package.json:94

  • The override selector targets vulnerable v6 ranges (<6.30.6) but the override value forces a v7 major (^7.18.0). That can unexpectedly break any dependency that declares a v6-compatible range and also doesn’t match the currently-resolved lockfile (which still pins react-router@6.30.6). If the goal is just to patch vulnerable v6 versions, keep this override on ^6.30.6 (or upgrade both react-router and react-router-dom to v7 in a dedicated migration PR).
      "react-router@>=6.7.0 <6.30.6": "^7.18.0",

pnpm-lock.yaml:55

  • This override currently forces react-router to ^7.18.0 for consumers requesting >=6.7.0 <6.30.6, but the lockfile still resolves react-router@6.30.6 (and react-router-dom@6.30.6). If the intent is to patch vulnerable v6 ranges, this should remain ^6.30.6; otherwise, a full v7 upgrade (including react-router-dom) should be reflected in the lockfile.
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The override forces react-router v8 while the repo still uses react-router-dom v6, which can produce an incompatible dependency graph and the lockfile does not actually resolve react-router@8 as-is.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

package.json:95

  • The override forces react-router to ^8.0.0 while the repo still depends on react-router-dom v6 (e.g. packages/* use react-router-dom@^6.30.2, and this lockfile resolves react-router-dom@6.30.6 -> react-router@6.30.6). If this override ever applies, it can create an incompatible v6/v8 pairing; and as-is it also doesn't actually result in react-router@8 being installed.

Either complete a full React Router v8 migration (including removing/upgrading react-router-dom usage) or keep the override within the v6 line to match react-router-dom@6.30.6.

      "react-router@>=6.7.0 <6.30.6": "^8.0.0",
      "react-router-dom@>=6.7.0 <6.30.6": "^6.30.6",

pnpm-lock.yaml:56

  • pnpm-lock.yaml now records an override to force react-router@>=6.7.0 <6.30.6 to ^8.0.0, but the resolved packages in this lockfile are still react-router@6.30.6 / react-router-dom@6.30.6. This makes the lock inconsistent with the intent of the override, and if it ever takes effect it risks a broken dependency graph because react-router-dom@6.x depends on react-router@6.x.

Prefer keeping react-router aligned to the same major as react-router-dom (or migrate both together).

  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The override moves react-router to v7 while the repo still uses react-router-dom v6 and the lockfile still resolves react-router@6.30.6, so the intended security upgrade is currently ineffective and risks incompatible major-version mixing.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

pnpm-lock.yaml:56

  • pnpm-lock.yaml still resolves react-router@6.30.6 (and react-router-dom@6.30.6 depends on it), so this override to ^7.18.0 is not taking effect. Also, the selector react-router@>=6.7.0 <6.30.6 won’t match 6.30.6, so even a reinstall will keep 6.30.6 if that’s what dependents request.
    package.json:96
  • The override bumps react-router to a v7 range while the repo still depends on react-router-dom v6 (e.g. packages/account/console/experience use react-router-dom: ^6.30.2). React Router DOM v6 is built against React Router v6, so forcing a v7 react-router can lead to an incompatible major-version mix (or a no-op if the lockfile stays on v6).
      "qs@>=6.11.1 <6.15.2": "^6.15.2",
      "react-router@>=6.7.0 <6.30.6": "^7.18.0",
      "react-router-dom@>=6.7.0 <6.30.6": "^6.30.6",
      "rollup@>=4.0.0 <4.59.0": "^4.59.0",
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The override forces a major-version jump to react-router v8 for a vulnerability range and is likely to introduce compatibility risk given the repo’s React 18 constraints and react-router-dom v6 usage.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

package.json:94

  • This override forces any dependency requesting react-router <6.30.6 onto v8, which is a major-version jump and is likely incompatible with this repo’s React 18 setup (see peerDependencyRules.allowedVersions.react: "^18.0.0") and with react-router-dom v6.x used in packages (e.g. packages/console depends on react-router-dom ^6.30.2). For a security override, it’s safer to pin to the smallest fixed version in the same major (6.30.6) rather than jumping to v8.
      "react-router@>=6.7.0 <6.30.6": "^8.0.0",

pnpm-lock.yaml:55

  • This pnpm override bumps react-router for the <6.30.6 vulnerability range to ^8.0.0. Since the lock currently resolves react-router-dom/react-router to 6.30.6, switching this override to v8 is unnecessary for the current install and could introduce future breakage if any dependency reintroduces a <6.30.6 range (react-router v8 is a breaking major). Consider keeping this override at ^6.30.6 to address the CVE with minimal compatibility risk.
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

It forces react-router to v7 while the repo still uses react-router-dom v6, and the lockfile does not consistently resolve to v7 (no react-router@7.18.0 entry).

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

package.json:96

  • The pnpm override forces react-router to major v7 while react-router-dom (and workspace packages) are still on v6. react-router-dom@6.30.6 depends on react-router@6.30.6 (see pnpm-lock.yaml snapshots), so forcing v7 here is very likely to break at runtime/type-level and also doesn’t match the current v6 dependency set. Either upgrade react-router-dom + all app code to v7 in the same PR, or keep this override on the patched v6 line.
      "postcss@<8.5.18": "^8.5.18",
      "prismjs@<1.30.0": "^1.30.0",
      "qs@>=6.11.1 <6.15.2": "^6.15.2",
      "react-router@>=6.7.0 <6.30.6": "^7.18.0",
      "react-router-dom@>=6.7.0 <6.30.6": "^6.30.6",
      "rollup@>=4.0.0 <4.59.0": "^4.59.0",

pnpm-lock.yaml:56

  • The lockfile override now points to react-router v7.18.0, but the lock still resolves react-router-dom@6.30.6 -> react-router@6.30.6 and there is no react-router@7.18.0 entry. This suggests pnpm-lock.yaml wasn’t regenerated consistently for this change (or the override shouldn’t be v7).
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The override pins a v6-only range of react-router to a v8 major version, which is inconsistent with the repo’s current react-router-dom@6.x/React 18 usage and risks unintended major upgrades.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

package.json:94

  • The override targets react-router v6.x (>=6.7.0 <6.30.6), but pins it to ^8.0.0. React Router v8 is a major with different requirements/compatibility (and the repo currently uses react-router-dom@6.x + React 18), so this override is inconsistent and could cause unexpected major upgrades if any dependency resolves to a vulnerable v6 version. Pin this override to the patched v6 release instead (matching react-router-dom).
      "react-router@>=6.7.0 <6.30.6": "^8.0.0",

pnpm-lock.yaml:55

  • pnpm overrides entry for react-router v6 range (>=6.7.0 <6.30.6) is set to ^8.0.0. This is a major-version jump and is incompatible with the repo's current react-router-dom@6.x usage; it also risks pulling v8 if any dependency requests an older v6 version. Pin this override to the patched v6 version instead.
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The override change is currently a no-op (lockfile still resolves only react-router@6.30.6), so it likely won’t remediate the intended security issue without a coordinated dependency upgrade strategy.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

pnpm-lock.yaml:56

  • Lockfile still contains only react-router@6.30.6 entries, so updating this override to ^7.18.0 under a <6.30.6 selector is currently a no-op and won’t address the intended security update. Consider aligning the override with the actually-installed major (v6) or performing a coordinated v7 upgrade (react-router-dom + app code) so the lockfile contains react-router@7.x.
    package.json:96
  • The override targets react-router@>=6.7.0 <6.30.6, but the lockfile resolves react-router@6.30.6, so this change does not actually upgrade any installed react-router version. Additionally, forcing react-router to v7 while workspace packages remain on react-router-dom v6 would likely be incompatible if the selector is later widened, so the override strategy needs to be revisited (e.g., upgrade the react-router-dom dependents to v7 together, or keep the override within the v6 major line).
      "prismjs@<1.30.0": "^1.30.0",
      "qs@>=6.11.1 <6.15.2": "^6.15.2",
      "react-router@>=6.7.0 <6.30.6": "^7.18.0",
      "react-router-dom@>=6.7.0 <6.30.6": "^6.30.6",
      "rollup@>=4.0.0 <4.59.0": "^4.59.0",
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The v8 migration is incomplete; the workspace and lockfile still use React Router 6.30.6.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

package.json:94

  • This override does not upgrade the router used by the workspace: account, experience, and console all depend on react-router-dom@^6.30.2, and the lockfile still resolves react-router-dom@6.30.6 to react-router@6.30.6. React Router v8 also removes react-router-dom and requires React 19.2.7, while these packages use React 18.3.1. Keep the compatible security-fixed v6 override, or perform the full v8/React migration (including import changes) before targeting v8.
      "react-router@>=6.7.0 <6.30.6": "^8.0.0",

pnpm-lock.yaml:55

  • The lockfile still resolves only react-router@6.30.6 (and react-router-dom@6.30.6 points to that version), with no 8.x package entry. Therefore the changed override is not represented in the installed dependency graph and this PR does not actually install v8; regenerate the lockfile after completing the compatible migration, or leave the override at the fixed 6.30.6 version.
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The intended React Router 7.18.0 security update is not installed.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

package.json:94

  • The selector still matches only react-router versions below 6.30.6, while every workspace consumer uses react-router-dom@^6.30.2, whose resolved package pins react-router to 6.30.6. The lockfile consequently still contains only react-router@6.30.6 and no 7.18.0, so this override does not install the security update. Update the router/dom dependency strategy together (if moving to v7, use matching v7 packages) and regenerate the lockfile.
      "react-router@>=6.7.0 <6.30.6": "^7.18.0",

pnpm-lock.yaml:55

  • This lockfile change records the new override value but does not update the resolved dependency: react-router@6.30.6 remains the only router package entry, and react-router-dom@6.30.6 still depends on it. As a result, the PR leaves the vulnerable/current version installed instead of adding 7.18.0. Correct the dependency/override selector and regenerate this lockfile.
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The v8 override is incompatible with existing consumers and is not applied in the lockfile.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

package.json:94

  • React Router 8 is not a drop-in override for this workspace: account, console, and experience still depend on react-router-dom 6 and import from that package, while v8 removes react-router-dom; those packages also pin React 18.3.1, but v8 requires React 19.2.7. The root engine is Node ^22.14.0, below v8's minimum 22.22.0. Migrate all consumers and runtime together, or keep the patched v6.30.6 override instead of forcing an incompatible major into the existing graph.
      "react-router@>=6.7.0 <6.30.6": "^8.0.0",

package.json:94

  • This selector only applies to dependency requests matching >=6.7.0 <6.30.6. The workspace consumers declare react-router-dom@^6.30.2, and the locked react-router-dom@6.30.6 depends on the exact react-router@6.30.6 (pnpm-lock.yaml:27312-27319), so the lockfile still contains no 8.x package. As a result, this change does not apply the intended security upgrade; update the actual router dependency/selector and regenerate the lockfile as part of a compatible migration.
      "react-router@>=6.7.0 <6.30.6": "^8.0.0",
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The stated v7/security update is currently a no-op for the workspace dependency graph.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (1)

package.json:94

  • This override does not upgrade the dependency used by this workspace: the lockfile still resolves only react-router-dom@6.30.6 and its react-router@6.30.6 dependency, with no react-router@7.18.0, while account, console, and experience all consume react-router-dom 6.x. The stated v7/security update is therefore a no-op for the current graph. Please either migrate those consumers and the react-router-dom override to the v7 pair and regenerate the lockfile, or keep the v6.30.6 override if the intention is only to pin the fixed v6 line.
      "react-router@>=6.7.0 <6.30.6": "^7.18.0",
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

The v8 upgrade is not applied to the installed graph and required platform and consumer migrations are missing.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

package.json:94

  • This override does not upgrade the dependency used by the repository: the lockfile still resolves react-router-dom@6.30.6 with react-router@6.30.6, and all application packages depend on react-router-dom 6.x. If a matching pre-6.30.6 react-router dependency were introduced, forcing it to v8 would also be incompatible with the v6 DOM package (and this repo's React 18 setup). Keep the patched v6 override, or perform the required v8 migration across the consumers instead of changing only this override.
      "react-router@>=6.7.0 <6.30.6": "^8.0.0",

pnpm-lock.yaml:55

  • This override does not actually resolve React Router v8: the lockfile still contains only react-router@6.30.6, pulled by react-router-dom@6.30.6, whose exact dependency is outside the >=6.7.0 <6.30.6 selector. Consequently this PR leaves the installed graph unchanged; and forcing v8 would require migrating the many react-router-dom imports plus React 19.2.7 (the workspace currently standardizes on React 18). Please either target a compatible fixed v6 dependency or make the complete v8 migration rather than changing only this override.
  • Files reviewed: 1/2 changed files
  • Comments generated: 1
  • Review effort level: Lite

Comment thread package.json Outdated

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The override does not upgrade the installed React Router 6 dependency pair to v7.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (1)

package.json:94

  • This changes only an override selector whose current installed dependency does not match it: the lockfile still resolves react-router-dom@6.30.6 with its exact react-router@6.30.6 dependency (pnpm-lock.yaml:27312-27321), and there is no react-router@7.18.0 entry. Consequently, the application remains on React Router 6 and this PR does not deliver the stated v7 security upgrade. Please either upgrade the react-router-dom/react-router pair and adapt its consumers together, or keep the v6 override if 6.30.6 is the intended security-fixed version.
      "react-router@>=6.7.0 <6.30.6": "^7.18.0",
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

The isolated override does not apply the advertised v8 upgrade; a coordinated migration is required.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file
  • Files reviewed: 1/2 changed files
  • Comments generated: 1
  • Review effort level: Lite

Comment thread package.json Outdated
"prismjs@<1.30.0": "^1.30.0",
"qs@>=6.11.1 <6.15.2": "^6.15.2",
"react-router@>=6.7.0 <6.30.6": "^6.30.6",
"react-router@>=6.7.0 <6.30.6": "^8.0.0",

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The security update has no runtime effect until the compatible react-router-dom dependency and lockfile are updated.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

package.json:94

  • This override does not upgrade the dependency that the workspace actually installs: all consumers declare react-router-dom 6.x, whose resolved package still depends on react-router 6.30.6, and the selector here explicitly excludes 6.30.6. The lockfile contains no react-router 7.18.0 entry, so this security update has no runtime effect; update the react-router-dom dependency/override and its callers together for a v7 migration, or keep the existing v6.30.6 override if v6 is intended.
      "react-router@>=6.7.0 <6.30.6": "^7.18.0",

pnpm-lock.yaml:55

  • This lockfile records the override as ^7.18.0, but its package and snapshot sections still resolve react-router-dom@6.30.6 -> react-router@6.30.6 (pnpm-lock.yaml:14285-14296 and 27312-27321). Thus a frozen install from this PR continues to use the v6 router and does not receive the advertised security update; regenerate the lockfile after updating the compatible react-router-dom dependency as well.
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The override forces a major-version jump (react-router v6→v8) for a selector intended to patch older v6 ranges, which can introduce unexpected breaking/peer-dependency issues if it ever takes effect.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

pnpm-lock.yaml:56

  • This lockfile override forces react-router@>=6.7.0 <6.30.6 to ^8.0.0, which is a major-version jump for a selector that is meant to patch older v6 ranges and may break consumers expecting the v6 API if this override is ever applied. Align this with the minimal patched version used elsewhere in the lockfile (currently 6.30.6) unless you are intentionally migrating the codebase to React Router v8.
    package.json:95
  • The pnpm.overrides selector targets React Router versions <6.30.6 (a patch-level security pin), but it is currently being forced to ^8.0.0, which is a major-version jump and can introduce breaking API/peer-dependency mismatches if any transitive dependency actually resolves through this selector. Since the lockfile currently resolves react-router to 6.30.6, this override likely isn’t doing anything today, but it could cause unexpected breakage in the future when a dependency brings in an older v6 range again.
      "react-router@>=6.7.0 <6.30.6": "^8.0.0",
      "react-router-dom@>=6.7.0 <6.30.6": "^6.30.6",
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The override forces a major-version jump (react-router v6 selector → v7 target) while the lockfile still resolves react-router@6.30.6, creating a high risk of incompatibility and likely not changing the installed dependency set as intended.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

package.json:94

  • The override selector targets React Router v6 consumers (<6.30.6) but forces a v7.x version. This is a major-version jump that can break packages expecting the v6 API, and the current lockfile resolves react-router to 6.30.6 anyway (no react-router@7.x entries), so this change likely doesn’t actually change what gets installed.

Consider keeping this override within the v6 line (e.g. 6.30.6) unless you’re intentionally migrating the codebase (and react-router-dom) to v7 in the same PR.

      "react-router@>=6.7.0 <6.30.6": "^7.18.0",

pnpm-lock.yaml:55

  • This lockfile override forces react-router v7.x for dependencies requesting v6 (<6.30.6). Since the lockfile currently resolves react-router@6.30.6 (and contains no react-router@7.x), the override appears unused and/or risks introducing an incompatible major version if a v6 consumer matches this selector.

Recommend keeping the override within the v6 major unless you’re upgrading react-router-dom and any app usage to v7 together.

  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The React Router v8 migration is incomplete and the advertised upgrade is not delivered.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

package.json:94

  • This does not actually upgrade the router: all consumers still declare react-router-dom 6.x, whose 6.30.6 package depends on react-router 6.30.6 (as shown by pnpm-lock.yaml:27312-27317), and the lockfile still contains no react-router v8 entry. Either keep the compatible 6.30.6 override for this security fix, or perform the full v8 migration (including replacing react-router-dom/imports and meeting v8's React and Node requirements); changing this override alone leaves the installed dependency unchanged.
      "react-router@>=6.7.0 <6.30.6": "^8.0.0",

pnpm-lock.yaml:55

  • This selector does not upgrade anything in the current workspace: all consumers declare react-router-dom (for example, packages/account/package.json:99), and the lockfile still resolves react-router-dom@6.30.6 to react-router@6.30.6 (lines 27312-27321); there is no react-router@8 entry. Since v8 also removes react-router-dom, this standalone core override cannot deliver the advertised upgrade. Update the DOM-router consumers as a coordinated migration, or keep the patched v6 pair instead.
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

Update the consumer stack and regenerate the lockfile, or retain a compatible patched v6 override.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (1)

package.json:94

  • This change does not upgrade the dependency actually installed by this workspace: the lockfile still contains only react-router@6.30.6, and react-router-dom@6.30.6 resolves to that version (pnpm-lock.yaml:27312-27319). Because this override selector only matches versions <6.30.6, no current dependency matches it, so the PR's v7 security update is absent from the resolved graph. If v7 is required, update the react-router-dom/consumer stack and regenerate the lockfile together; otherwise keep the compatible patched v6 override.
      "react-router@>=6.7.0 <6.30.6": "^7.18.0",
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

The dependency graph still resolves React Router 6.30.6 instead of the advertised v8 upgrade.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file
  • Files reviewed: 1/2 changed files
  • Comments generated: 1
  • Review effort level: Lite

Comment thread package.json Outdated
"prismjs@<1.30.0": "^1.30.0",
"qs@>=6.11.1 <6.15.2": "^6.15.2",
"react-router@>=6.7.0 <6.30.6": "^6.30.6",
"react-router@>=6.7.0 <6.30.6": "^8.0.0",

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

Update the React Router consumers and lockfile together, or explicitly retain a patched v6 resolution.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (1)

package.json:94

  • This override does not affect the versions actually installed: its selector only matches react-router versions <6.30.6, while all three workspace consumers resolve react-router-dom@6.30.6, which depends on react-router@6.30.6; the lockfile contains no react-router@7.18.0. As a result, this security update neither installs v7 nor changes the runtime dependency. If v7 is intended, update the react-router-dom consumers and lockfile together (forcing v7 under v6 react-router-dom would be incompatible); otherwise keep/use the patched v6 resolution explicitly.
      "react-router@>=6.7.0 <6.30.6": "^7.18.0",
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The override and lockfile are inconsistent, and the v8 migration is incomplete.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (2)

package.json:94

  • This override does not upgrade any dependency in this workspace: all three consumers declare react-router-dom 6.x, and the lockfile still contains only react-router-dom@6.30.6 with its react-router@6.30.6 dependency—there is no react-router@8.x snapshot. If a package later matches this selector, forcing v8 would also be incompatible with the existing react-router-dom v6 imports and React 18.3.1 (v8 removes react-router-dom and requires React 19.2.7). Please either keep the patched v6 override or perform the coordinated v8 migration instead of changing this selector alone.
      "react-router@>=6.7.0 <6.30.6": "^8.0.0",

pnpm-lock.yaml:55

  • The lockfile does not contain the dependency this override requests: it still resolves react-router-dom@6.30.6 to react-router@6.30.6 (see the package and snapshot entries around lines 14292 and 27317), with no react-router@8 entry. This means the committed lockfile does not represent the changed override; frozen installs can reject it as stale or continue using v6. Regenerate the lockfile with the intended dependency graph before merging.
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Needs a closer look

The advertised React Router v7 upgrade is not installed, and the override could create an incompatible dependency graph.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file

Suppressed comments (1)

package.json:94

  • This changes only the replacement for vulnerable react-router versions <6.30.6, but the repository's actual graph still resolves react-router-dom@6.30.6 with react-router@6.30.6 (the lockfile has no 7.18.0 entry). Thus the advertised v7 upgrade is not installed, while any future dependency matching this selector would be forced from v6 to an incompatible major without upgrading react-router-dom and the consuming code. Keep the patched v6 override here, or make the v7 migration a coordinated update of both router packages and their usages.
      "react-router@>=6.7.0 <6.30.6": "^7.18.0",
  • Files reviewed: 1/2 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Development

Successfully merging this pull request may close these issues.

1 participant