chore(deps): update dependency nuxt to v4.5.1 [security] #26
No reviewers
Labels
No labels
idea
points
1
points
13
points
2
points
3
points
5
points
8
priority
p0
priority
p1
priority
p2
priority
p3
state
blocked
state
done
state
in-progress
state
ready
state
review
state
triage
status
declined
status
in-progress
status
planned
status
proposed
status
shipped
status
under-review
type
bug
type
epic
type
feature
type
spike
type
story
type
task
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
tti/tti-ux!26
Loading…
Reference in a new issue
No description provided.
Delete branch "renovate/npm-nuxt-vulnerability"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This PR contains the following updates:
4.5.0→4.5.1Nuxt: Unauthorized Component Instantiation via Server Island Props
CVE-2026-71318 / GHSA-48hr-524c-v5w3
More information
Details
Impact
Nuxt server islands accept props via the
/__nuxt_island/endpoint. When an application has a server island component that forwards props directly into Vue's dynamic component resolution (<component :is>,resolveDynamicComponent, orh()), an attacker can pass a plain string value (rather than a component definition) to instantiate any globally-registered Vue component or any native HTML element.For example:
...resolves and renders
SomeGlobalComponentif it is globally registered, even though the attacker should only be able to drive props for the island's declared component. Similarly,{ "as": "iframe" }renders an<iframe>element.Unlike the primary RCE vector (GHSA-9473-5f9j-94wq), this does not require
vue.runtimeCompilerto be enabled. A plain string prop is sufficient to trigger component resolution. Thetemplate/renderkey guard that addresses the RCE vector does not block plain string values.Some component libraries expose a polymorphic
as/asChildprop that forwards its value into<component :is>;@nuxt/ui(viareka-ui) is a widely used example. An application is affected if such a component receives the attacker-controlled value inside a server island. Note this does not require explicit prop forwarding: island props the island component does not declare fall through as attributes onto its single root element, so an island whose root is areka-ui/@nuxt/uicomponent receives the attacker'sasvalue implicitly. Unlike the RCE vector, novue.runtimeCompileris required, which makes this vector reachable in more configurations. These libraries are not themselves vulnerable; they are noted only because they commonly provide the dynamic-component sink. Installing@nuxt/uidoes not by itself register any component as a server island: the application must define the island (a.server.vuefile).Mitigating factors
<component :is>,resolveDynamicComponent,h(), or a polymorphicas/asChildprop), either explicitly or via attribute fallthrough when the island's root is such a component.RouterViewandRouterLink(both registered globally by the pages router plugin, which runs even in component islands), plus anycomponents/global/component and any component a module registers globally.RouterLinkin particular renders an attacker-influenced<a>(and, because an island that declares no props forwards all props,toand otherRouterLinkprops ride the same fallthrough). Vue built-ins (Transition,KeepAlive,Teleport,Suspense) and Nuxt auto-imports (ClientOnly,NuxtLink,NuxtPage, etc.) are NOT in the island app's global registry and cannot be resolved this way; an unresolved name instead renders as a native HTML element (the element-injection half of this issue).inheritAttrs: falseon it, prevents an undeclaredasfrom falling through to a polymorphic root and neutralizes this vector.template/rendercompilation).Affected versions
Nuxt
>=3.1.0 <3.21.10and>=4.0.0 <4.5.1, with component islands active. The island prop-forwarding behavior has existed since server islands were introduced in v3.1.0, and this vector does not depend onvue.runtimeCompiler. Nuxt 2 is not affected.Note the patch (below) closes the implicit attribute-fallthrough path, which is the majority case. An island that explicitly forwards an untrusted prop into dynamic component resolution (or forwards it under a prop name other than
as) remains the application's responsibility in every version; see Workarounds.Patches
Fixed in
nuxt@4.5.1andnuxt@3.21.10. Patched releases reject a top-levelasisland prop (HTTP 400 at the/__nuxt_island/endpoint). This closes the implicit path: island props an island does not declare fall through as attributes onto its single root, so a top-levelaswould otherwise reach a polymorphic root component'sasprop (thereka-ui/@nuxt/uiconvention) and drive dynamic component resolution without the author binding it. Rejecting the top-levelasprop blocks that fallthrough while leaving nested data and other prop names untouched.The framework deliberately does not attempt to block every case: it cannot safely tell a string used as data from one used as a component selector, and it has no island-local hook into Vue's
h()orresolveDynamicComponent(). An island that explicitly forwards an untrusted value into<component :is>/h()/resolveDynamicComponent(), or that forwards it under a different polymorphic prop name, is therefore not covered by the patch and must follow the guidance below. The Nuxt documentation now warns against this.Workarounds
Upgrade to
nuxt@4.5.1ornuxt@3.21.10. That upgrade also removes the related object-prop RCE (GHSA-9473-5f9j-94wq). In addition, in any version:<component :is>,resolveDynamicComponent, orh(). Map an untrusted discriminator through a closed allowlist of imported component definitions instead of passing the raw prop value.inheritAttrs: falseon it, so request input cannot fall through to a polymorphic root component.Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Nuxt dev server discloses project root and workspace UUID via the Chrome DevTools workspace endpoint
GHSA-7c4v-fwgw-9rf7
More information
Details
Impact
When a Nuxt dev server is bound to a network-reachable interface (for example
nuxt dev --hostfor on-device testing), the default-enabled Chrome DevTools workspace endpointGET /.well-known/appspecific/com.chrome.devtools.jsonreturns the absolute project root (workspace.root, i.e.rootDir) and a persistent per-project workspace UUID.GHSA-rq7w-g337-39qqadded a gate (isLocalDevRequest) intended to restrict this endpoint to local requests, but that gate is header-based: it trusts request metadata rather than the connected peer address. A request with noSec-Fetch-Site,Origin, andRefererheaders (normal for a non-browser client such ascurl) is treated as local, and theHostallow-list is compared against the attacker-suppliedHostheader. As a result, any unauthenticated host that can reach the dev server on the LAN can retrieve the project's absolute filesystem path and workspace UUID, for example withcurl -H 'Host: localhost' http://<dev-host-lan-ip>:3000/.well-known/appspecific/com.chrome.devtools.json.This is information disclosure only: there is no file read, file write, or code execution reachable from the endpoint. It requires the dev server to be reachable beyond loopback and
experimental.chromeDevtoolsProjectSettingsto be enabled (it defaults totrue). Production builds are unaffected, because the endpoint is registered only as a development handler.Patches
Fixed in
nuxt@4.5.1andnuxt@3.21.10. The endpoint now additionally requires the connected TCP peer to be a loopback address, verified from the socket rather than from request headers, so a non-loopback LAN client is rejected regardless of theHost,Origin,Referer, orSec-Fetch-*headers it sends. The shared header-based check is left unchanged, so the CSRF / same-origin behaviour that other dev handlers rely on is preserved. After this fix, Chrome DevTools workspace auto-mapping only works when the browser reaches the dev server over loopback (localhost/127.0.0.1/::1), which matches the feature's intent (the browser and dev server sharing a filesystem).Workarounds
experimental.chromeDevtoolsProjectSettings: falseinnuxt.config.Severity
CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Nuxt: Server-Side Remote Code Execution via Runtime Template Injection in Nuxt Server Island Props
CVE-2026-71320 / GHSA-9473-5f9j-94wq
More information
Details
Impact
Nuxt server islands accept props via the
/__nuxt_island/endpoint. Whenvue.runtimeCompiler: trueis enabled (off by default) and the application has a server island component that forwards props into Vue's dynamic component resolution (<component :is>,resolveDynamicComponent, orh()), an attacker can inject atemplatekey into the island props to achieve server-side remote code execution in the Nitro process.Vue's runtime template compiler compiles and executes the attacker-controlled
templatein the server process. The same primitive also works on the client side when the runtime compiler is active there, though the server-side path is the primary concern.Some component libraries expose a polymorphic
as/asChildprop that forwards its value into<component :is>;@nuxt/ui(viareka-ui) is a widely used example. An application is affected if such a component receives the attacker-controlled value, providedvue.runtimeCompileris also enabled. Note this does not require the island author to explicitly forward a prop: island props that the island component does not declare fall through as attributes onto its single root element (standard Vue attribute inheritance), so an island whose root is a polymorphic component receives the attacker'sasvalue implicitly. These libraries are not themselves vulnerable; they are noted only because they commonly provide the dynamic-component sink.Common configurations that satisfy the preconditions
The flaw is in Nuxt core. The library below is not itself vulnerable; it is noted because it commonly provides the dynamic-component sink an application might inadvertently expose.
@nuxt/ui(via its underlyingreka-uiprimitives) exposes a polymorphicas/asChildprop that is forwarded into Vue's dynamic-component resolution. Installing@nuxt/uidoes not by itself register any component as a server island. Exploitation requires the application to define an island component (a.server.vuefile) whose rendered output puts the attacker-controlled value on such a component'sas/asChildprop; withvue.runtimeCompiler: true, the attacker-controlledtemplateis then compiled and executed. Because undeclared island props fall through as attributes to the single root, this can happen without any explicit binding: an island whose root is areka-ui/@nuxt/uicomponent is enough. An example vulnerable island (theasvalue falls through toUButton, no explicit forwarding needed):The island URL hash (
/__nuxt_island/<Name>_<hash>.json) is a deterministic (unsalted) content hash, not an authentication token. It provides integrity relative to the URL but is not a security boundary: an attacker who knows the component name and desired props can compute a valid hash.Mitigating factors
vue.runtimeCompileris off by default in Nuxt. The vast majority of Nuxt applications are not affected.<component :is>,resolveDynamicComponent,h(), or a polymorphicas/asChildprop). This can occur explicitly or via attribute fallthrough when the island's root is such a component.Affected versions
Nuxt
>=3.4.0 <3.21.10and>=4.0.0 <4.5.1, and only whenvue.runtimeCompiler: trueand component islands are active. Earlier versions did not allow the Vue compiler to be enabled in the server bundle (the compiler dependencies have been mock-aliased on the server since v3.0.0-rc.1), so the runtime-compilation path is not reachable. Nuxt 2 is not affected (no server islands).Patches
When
vue.runtimeCompileris enabled, island requests whose decoded props contain atemplatekey at any depth are rejected with an HTTP 400 and a diagnostic suggesting the author rename the prop or disable the runtime compiler. The guard is gated on the runtime compiler being enabled, so the default configuration (compiler off) is unaffected and legitimate props that merely contain atemplatefield (for example CMS content) continue to render. Arenderkey is not rejected: island props arrive as JSON, so arendervalue can only be an inert string, which Vue ignores.Fixed in
nuxt@4.5.1and backported tonuxt@3.21.10.Workarounds
Upgrade to
nuxt@4.5.1ornuxt@3.21.10. If you cannot immediately upgrade, you can mitigate by:vue.runtimeCompileris set tofalse(the default).<component :is>,resolveDynamicComponent, orh()without sanitization./__nuxt_island/that URL-decodes and JSON-parses thepropsvalue and blocks any object property namedtemplateorrenderin the decoded island props, inspecting both query and body for all methods. Note: this only covers direct and browser-originated island requests; initial-SSR internal island renders do not transit the edge and a WAF alone does not close the vector.Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:HReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Nuxt: Unauthenticated CPU exhaustion parsing and hashing the Nuxt island endpoint body before hash validation
CVE-2026-71321 / GHSA-9pgf-384g-p7mv
More information
Details
Impact
The internal island renderer endpoint (
/__nuxt_island/...) decodes and hashes attacker-controlled request input before it validates the URL-resident hash. An unauthenticatedPOST /__nuxt_island/<name>_<anything>.jsonwith a large JSON body (for example ~4.6 MB / 150k keys) is fully read,destr-parsed, and run throughohashbefore the request is rejected with a 400. Because Nitro runs on a single event loop, this both wastes CPU on the doomed request and delays every concurrent request. A low request rate is enough to degrade or stall the server. No valid hash and no authentication are required.Patches
Fixed in
nuxt@4.5.1andnuxt@3.21.10. The island handler now enforces a raw body-size cap (413) and a JSON nesting-depth cap (400) before parsing or hashing, so oversized or deeply nested input is rejected cheaply.Workarounds
Put a small request-body limit in front of
/__nuxt_island/at your reverse proxy / edge (islands legitimately send only a compact props payload), or disable server components if unused.Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Nuxt: Unauthenticated out-of-memory crash via unbounded v-for expansion in island rendering
CVE-2026-71314 / GHSA-hxcr-hm88-mpq6
More information
Details
Impact
An unauthenticated attacker can crash a Nuxt server that renders any island / server component containing a
v-forover a prop (for examplev-for="n in count"or a<slot v-for>). Because the island URL hash is a non-secret digest of the request, the attacker can compute a valid hash for arbitrary props and send the iterated prop as a large integer. The server then expands thev-forto that many nodes during SSR, allocating memory proportional to the attacker's number. Reporter figures:count=8000000produced a 142.9 MB response;count=40000000(anditems=4000000on a slot list) produced an out-of-memory crash of the worker from a single ~130-byte request. Both the plainv-forpath (Vue'sssrRenderList) and the slot path (vforToArray) are affected.Patches
Fixed in
nuxt@4.5.1andnuxt@3.21.10. Island/server-componentv-forsources are now clamped to a maximum iteration count (MAX_VFOR_LENGTH = 100000) at the render boundary, covering the plain path, the<slot v-for>element, and thevforToArrayslot-props helper. Combined with the body-size cap (GHSA-9pgf-384g-p7mv), a single island render can no longer allocate without bound regardless of whichv-forpath is used or whether the prop arrives as an integer or an array.Workarounds
Avoid
v-fordirectly over an unclamped prop in server components, or clamp the count in the component (v-for="n in Math.min(count, 1000)"). A body-size limit in front of/__nuxt_island/only mitigates array-shaped inputs, not the integer-amplification case.References
packages/nuxt/src/app/components/vfor.tspackages/nuxt/src/components/plugins/islands-transform.tspackages/nuxt/src/app/components/utils.ts(vforToArray)Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Nuxt route rules silently dropped for mixed-case paths, bypassing appMiddleware auth gates (incomplete fix for CVE-2026-53721)
CVE-2026-71315 / GHSA-hxvh-4h3w-prp9
More information
Details
Impact
Nuxt matches route rules case-insensitively by default (mirroring vue-router's default
sensitive: falserouting). The fix for GHSA-mm7m-92g8-7m47 / CVE-2026-53721 lowercased the lookup path before matching route rules, but the route-rule keys compiled into the matcher were left verbatim. As a result, any route rule whose key contains an uppercase character (for example/Admin,/Dashboard/**, or the rules Nuxt derives from PascalCase/camelCase page files such aspages/Admin.vue) never matches, because every lookup is folded to lowercase while the key stays mixed-case.vue-router still serves the page case-insensitively, so the page renders with none of its Nuxt route-rule protections applied. The most serious consequence is an authorization bypass: an
appMiddlewarerule used as an auth gate (routeRules: { '/Admin/dashboard': { appMiddleware: 'auth' } }) is dropped, and/Admin/dashboard,/admin/dashboard, and/ADMIN/dashboardall render the protected page (and its SSR-fetched data) to an unauthenticated visitor instead of redirecting to login. The same gap drops Nuxt's other app-side route-rule behaviours for mixed-case keys, including the client redirect middleware, the app-sidessr: falsedecision,prerender, and payload handling.Patches
Fixed in
nuxt@4.5.1(4.x) andnuxt@3.21.10(3.x). The route-rule matcher now case-folds the compiled keys the same way it folds the lookup path, so key and lookup normalisation are symmetric. Both sides are gated onrouter.options.sensitive: withsensitive: true(case-sensitive routing) configured casing is preserved on both sides.Scope note: server-emitted per-route
headers, serverredirect, andproxyare matched by Nitro's own case-sensitive route-rule matcher, not by Nuxt's app-level matcher. They are unchanged by this advisory. The fix covers the app-level protections Nuxt owns (appMiddleware,appLayout, the client redirect middleware, the appssrdecision,prerender, and payload).Workarounds
If you cannot upgrade immediately, any one of:
routeRules(and name your page files) in lowercase, so the keys already match the folded lookup path.router: { options: { sensitive: true } }so routing and route-rule matching are both case-sensitive and exact (requests must then use the exact casing).Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Nuxt runtime payload cache discloses another user's SSR data across users and to unauthenticated clients
CVE-2026-71316 / GHSA-wm8w-6qjm-cv43
More information
Details
Impact
When a page is covered by
routeRulescache/swr/isr, Nuxt enables runtime payload extraction and serves/<page>/_payload.json. On affected versions the renderer stored the SSR payload in the sharedcache:nuxt:payloadstorage under a path-only key (no cookie,authorization, orcache.variesdimension) and, on a later payload request, returned the cached entry before route middleware / page guards ran again.As a result, once any authenticated user warms a protected, cached page, a subsequent
GET /<page>/_payload.jsonfrom an unauthenticated client or a different authenticated user receives the first user's payload: the full SSR data for that route, including anything loaded viauseFetch/useAsyncData(for example/api/me: profile, tenant, billing, token-like values). The HTML response stays correctly varied and protected; only the extracted payload leaks. Both cross-user (A warms, B receives A) and unauthenticated disclosure are exploitable.cache.variesdoes not mitigate it, because the payload cache ignoresvaries.Introduced when runtime payload extraction landed for cached routes (#34410); the regression is specific to the 4.x line, where the runtime
cache:nuxt:payloadstorage was added and theimport.meta.prerendergate on the payload-cache read/writes was dropped. The 3.x line shipped the same feature with the gate intact and is not affected.Patches
Fixed in
nuxt@4.5.1. Runtime payload-cache reads and writes are again confined to prerendering (import.meta.prerender); at runtime,/<page>/_payload.jsonfollows the normal render path so route middleware,routeRules.appMiddleware, and page guards run for the current request.main/ v5 and the3.xline already had this property, so 3.x is not affected.Workarounds
experimental.payloadExtraction: false(reporter-validated): the standalone/_payload.jsonendpoint returns 404 and the page still serves a 200 with an inline payload.cache/swr/isrto authenticated pages that render user-specific SSR data./**/_payload.jsonat a proxy / CDN.Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Configuration
📅 Schedule: (UTC)
🚦 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.
This PR has been generated by Mend Renovate.
AI review · advisory
Verdict: 6 things worth fixing (1 high · 2 medium · 3 low).
Findings that didn't map to a diff line:
node_modules/@nuxt/kit/package.json:243· MEDIUM — Unnecessary addition of new dependency "verkit"The newly added "verkit" dependency increases the supply‑chain attack surface without a clear usage in the codebase.
node_modules/@nuxt/kit/package.json:197· LOW — Removal of semver from @nuxt/kit dependencies"semver" was removed from @nuxt/kit's dependencies, which may break internal code that expects it at runtime.
node_modules/@nuxt/kit/package.json:215· LOW — Potential version drift for @nuxt/devtools and related packagesThe @nuxt/devtools version was bumped from 3.2.4 to 3.4.1 without updating its peer dependency constraints, which could lead to mismatched expectations in downstream plugins.
node_modules/@nuxt/vite-builder/package.json:355· LOW — Addition of "generic-names" may be unnecessary"generic-names" is added as a dependency of @nuxt/vite-builder but does not appear to be used, adding bloat and potential vulnerabilities.
package-lock.json:2742· MEDIUM — Dependency version mismatchThe version of @nuxt/kit in @nuxt/devtools-kit does not match the version in @nuxt/kit.
⚑ panel: GPT-OSS 120B · Gemma 4 31B · Devstral 2 123B · Laguna S 2.1 — 13 distinct, 6 confirmed, 0 refuted · web: not used · context: 1 files · 90 codebase · 14 standards chunks (best-grounded: GPT-OSS 120B; smaller windows saw less)
Panel debate — how this review was reached
Grounding — context: 1 files · 90 codebase · 14 standards chunks (best-grounded: GPT-OSS 120B; smaller windows saw less)
Round 1 — independent reviews
Round 2 — cross-examination
GPT-OSS 120B#1Undici version bump introduces Node engine incompatibility · confirmed: Gemma 4 31B, Devstral 2 123B · refuted: —Devstral 2 123B#7Missing dependency · confirmed: — · refuted: GPT-OSS 120B, Gemma 4 31BDevstral 2 123B#2Dependency version mismatch · confirmed: — · refuted: GPT-OSS 120B, Gemma 4 31BDevstral 2 123B#4Missing dependency · confirmed: — · refuted: GPT-OSS 120B, Gemma 4 31BDevstral 2 123B#6Missing dependency · confirmed: — · refuted: GPT-OSS 120B, Gemma 4 31BDevstral 2 123B#3Missing dependency · confirmed: GPT-OSS 120B · refuted: Gemma 4 31BDevstral 2 123B#5Missing dependency · confirmed: — · refuted: GPT-OSS 120B, Gemma 4 31BDevstral 2 123B#8Missing dependency · confirmed: — · refuted: GPT-OSS 120B, Gemma 4 31BGPT-OSS 120B#2Unnecessary addition of new dependency "verkit" · confirmed: Gemma 4 31B · refuted: —Devstral 2 123B#1Version mismatch in package-lock.json · confirmed: — · refuted: GPT-OSS 120B, Gemma 4 31BGPT-OSS 120B#3Removal of semver from @nuxt/kit dependencies · confirmed: Gemma 4 31B · refuted: —GPT-OSS 120B#5Potential version drift for @nuxt/devtools and related packages · confirmed: Gemma 4 31B · refuted: —Synthesis — Devstral 2 123B wrote the final review from 6 confirmed findings (+7 unconfirmed).
Transcript
rv-20260807052654-fb14a0— full round outputs, web results, and model reasoning are viewable by anyone with access to this repository via the AI gateway.Advisory — never a merge gate. Disagree with a finding? Reply on it, or use the finding board under this review. Transcript
rv-20260807052654-fb14a0.@ -1,12 +1,12 @@{LOW — Version mismatch in package-lock.json
The version in the root of package-lock.json does not match the version in the packages section.
panel tally 1/4 · reply here or use the finding board to agree/disagree
@ -1865,4 +1862,1 @@"libc": ["glibc"],"license": "LGPL-3.0-or-later",package-lock.json:1862· HIGH — Undici version bump introduces Node engine incompatibilityThe new undici version (8.10.0) requires Node >=22.19.0, which likely exceeds the runtime Node version used in CI and production, causing install or runtime failures.
panel tally 3/4 · reply here or use the finding board to agree/disagree
@ -3083,7 +3035,7 @@"ufo": "^1.6.4","unctx": "^3.0.0",package-lock.json:3036· MEDIUM — Missing dependencyThe dependency 'semver' is missing from @nuxt/kit's dependencies, which may cause runtime errors if the package expects it.
panel tally 2/4 · reply here or use the finding board to agree/disagree
package-lock.json:3036· MEDIUM — Missing dependencyThe dependency 'semver' is missing from @nuxt/kit's dependencies, which may cause runtime errors if the package expects it.
panel tally 1/4 · reply here or use the finding board to agree/disagree
package-lock.json:3036· MEDIUM — Missing dependencyThe dependency 'semver' is missing from @nuxt/kit's dependencies, which may cause runtime errors if the package expects it.
panel tally 1/4 · reply here or use the finding board to agree/disagree
package-lock.json:3036· MEDIUM — Missing dependencyThe dependency 'semver' is missing from @nuxt/kit's dependencies, which may cause runtime errors if the package expects it.
panel tally 1/4 · reply here or use the finding board to agree/disagree
package-lock.json:3036· MEDIUM — Missing dependencyThe dependency 'semver' is missing from @nuxt/kit's dependencies, which may cause runtime errors if the package expects it.
panel tally 1/4 · reply here or use the finding board to agree/disagree
package-lock.json:3036· MEDIUM — Missing dependencyThe dependency 'semver' is missing from @nuxt/kit's dependencies, which may cause runtime errors if the package expects it.
panel tally 1/4 · reply here or use the finding board to agree/disagree
e90b4d6060c1a6e43940AI review · advisory
Verdict: 1 thing worth fixing (1 high).
Findings that didn't map to a diff line:
package-lock.json:2120· HIGH — Undici version requires unsupported Node versionThe updated undici dependency (v8.10.0) declares a minimum Node engine of >=22.19.0, which is higher than the project's supported Node versions (>=18), causing potential runtime failures and CI breakage.
package-lock.json:2742· MEDIUM — Dependency version mismatchThe version of @nuxt/devtools-kit in the dependencies does not match the version in the packages section.
package-lock.json:3094· MEDIUM — Dependency version mismatchThe version of @nuxt/nitro-server in the dependencies does not match the version in the packages section.
package-lock.json:3460· MEDIUM — Dependency version mismatchThe version of @nuxt/vite-builder in the dependencies does not match the version in the packages section.
package-lock.json:3231· MEDIUM — Dependency version mismatchThe version of @nuxt/schema in the dependencies does not match the version in the packages section.
⚑ panel: GPT-OSS 120B · Gemma 4 31B · Devstral 2 123B · Laguna S 2.1 — 9 distinct, 1 confirmed, 0 refuted · web: not used · context: 1 files · 90 codebase · 14 standards chunks (best-grounded: GPT-OSS 120B; smaller windows saw less)
Panel debate — how this review was reached
Grounding — context: 1 files · 90 codebase · 14 standards chunks (best-grounded: GPT-OSS 120B; smaller windows saw less)
Round 1 — independent reviews
Round 2 — cross-examination
GPT-OSS 120B#1Undici version requires unsupported Node version · confirmed: Gemma 4 31B, Devstral 2 123B · refuted: —Devstral 2 123B#3Dependency version mismatch · confirmed: — · refuted: GPT-OSS 120B, Gemma 4 31BDevstral 2 123B#5Dependency version mismatch · confirmed: — · refuted: GPT-OSS 120B, Gemma 4 31BDevstral 2 123B#7Dependency version mismatch · confirmed: — · refuted: GPT-OSS 120B, Gemma 4 31BDevstral 2 123B#6Dependency version mismatch · confirmed: — · refuted: GPT-OSS 120B, Gemma 4 31BDevstral 2 123B#4Dependency version mismatch · confirmed: — · refuted: GPT-OSS 120B, Gemma 4 31BDevstral 2 123B#8Dependency version mismatch · confirmed: — · refuted: GPT-OSS 120B, Gemma 4 31BDevstral 2 123B#1Version mismatch in package-lock.json · confirmed: — · refuted: GPT-OSS 120B, Gemma 4 31BDevstral 2 123B#2Removed libc entries · confirmed: — · refuted: Gemma 4 31BSynthesis — Devstral 2 123B wrote the final review from 1 confirmed finding (+8 unconfirmed).
Transcript
rv-20260810051754-1b070e— full round outputs, web results, and model reasoning are viewable by anyone with access to this repository via the AI gateway.Advisory — never a merge gate. Disagree with a finding? Reply on it, or use the finding board under this review. Transcript
rv-20260810051754-1b070e.@ -1,12 +1,12 @@{MEDIUM — Version mismatch in package-lock.json
The version in the root of package-lock.json does not match the version in the packages section.
panel tally 1/4 · reply here or use the finding board to agree/disagree
@ -1843,9 +1843,6 @@"cpu": [LOW — Removed libc entries
The libc entries have been removed from the package-lock.json file, which may affect the compatibility of the package on different systems.
panel tally 1/4 · reply here or use the finding board to agree/disagree
@ -3067,3 +3019,3 @@"destr": "^2.0.5","devalue": "^5.8.1","devalue": "^5.8.2","errx": "^0.1.0",MEDIUM — Dependency version mismatch
The version of @nuxt/kit in the dependencies does not match the version in the packages section.
panel tally 1/4 · reply here or use the finding board to agree/disagree
@ -16139,1 +15973,4 @@"version": "4.1.0","resolved": "https://registry.npmjs.org/birpc/-/birpc-4.1.0.tgz","integrity": "sha512-O8L9vALWGqdEe0cG4HJckauw3WeJETlJnDRPUYpgwB7wrU43b/5NGMdVjdVcRo+4ROgd3ih2wha1glDe4HRVgw==","license": "MIT",MEDIUM — Dependency version mismatch
The version of nuxt in the dependencies does not match the version in the packages section.
panel tally 1/4 · reply here or use the finding board to agree/disagree
Admin-merging: this security fix cannot go green because the required baseline gate fails on the pre-existing tree backlog it is part of fixing (deadlock documented in #28). Lockfile-only bump, reviewed.