Skip to content

chore(deps): sync the three upstream dependency commits - #524

Merged
IgorShevchik merged 1 commit into
mainfrom
sync/nuxt-9c99bf16
Sep 1, 2026
Merged

chore(deps): sync the three upstream dependency commits#524
IgorShevchik merged 1 commit into
mainfrom
sync/nuxt-9c99bf16

Conversation

@IgorShevchik

Copy link
Copy Markdown
Collaborator

Ports 9c99bf16, 9d46fc7e and 20c1954d — a contiguous run, taken in one PR per §6 4b, because separating them would rewrite the lockfile three times over the same packages. Cursor moves to 20c1954d; one upstream commit remains in the queue (e791d302, fix(Select/SelectMenu): add responsive text size), which is a component change and gets its own PR.

9c99bf16 — not only versions

Renovate's title says dependencies; the commit carries a runtime fix that exists because of one of its own bumps:

+import { toRaw } from 'vue'
-export function validateSchema<T extends object>(state: T, schema: FormSchema<T>) {
+export function validateSchema<T extends object>(state: T, _schema: FormSchema<T>) {
+  const schema = toRaw(_schema)

Zod 4.5 resolves ~standard through a lazy getter that captures this. A schema held in reactive state arrives as a Vue proxy, so the getter reads the non-configurable _zod internals through it — violating the proxy invariant and throwing. Ported verbatim against an identical pre-image at form.ts:80.

Worth stating plainly: this fork was on zod ^4.4.3, where the bug does not bite. It goes live with the ^4.5.4 bump in the same commit, which is also taken — so the fix arrives with its trigger rather than speculatively.

Versions follow the delta rule (bump only where our pre-image matched upstream's). Left alone with reasons: nuxt-schema-org (ours ^6.2.1, a recorded dep-parity exception — any bump drags nuxt-site-config 4.2.3, which calls two functions absent from @nuxt/kit@4.5.2); packageManager (ours pnpm@11.20.0, upstream's pre-image is not ours); and packages this fork does not carry.

pnpm-workspace.yaml: one removal taken, one refused

Upstream deletes both its mdc override and its whole minimumReleaseAgeExclude. Decided separately, by measurement:

minimumReleaseAgeExcluderemoved Verified, not assumed: with the block gone, pnpm install still reports "Lockfile passes supply-chain policies (1794 entries)". @nuxtjs/mdc@0.23.1 is simply old enough now. Dropping a spent exception tightens the policy.
@nuxt/content>@nuxtjs/mdckept, against upstream Upstream can drop it having moved to content 3.16.0 (cap ^0.23.1 vs 3.15's ^0.22.2). Tested here instead of inherited: remove it, reinstall, read the lockfile — two mdc versions appear, 0.22.2 alongside 0.23.1, exactly the failure the comment describes. The old copy comes from the root peer @nuxt/content: ^3.0.0, deliberately wide so consumers are not forced onto one minor, which resolves to 3.14.0.

Method note, because the first attempt got it wrong. Counting copies with find node_modules/.pnpm lies — the store keeps directories from earlier installs, and it showed a 0.22.2 the lockfile did not contain. The conclusion above was re-derived from pnpm-lock.yaml, which is the resolution.

9d46fc7e — tiptap, plus a companion upstream has no need for

25 declarations across five manifests move ^3.30.2 → ^3.30.5. Our pnpm-workspace.yaml also carries a '@tiptap/pm': ^3.30.2 override whose comment ends "Keep in step with the @tiptap/* family version in package.json" — this is the commit that triggers that instruction. Left behind it would still resolve, but the pin would no longer say what it means. Verified: the lockfile holds exactly one @tiptap/pm@3.30.5.

20c1954d — reka 2.10.4, and 1316 snapshot lines

What 2.10.4 changes was derived from upstream's own snapshot diff rather than its release notes, by matching each -/+ pair and extracting the differing substring. Three changes:

component change
RadioGroup aria-label="<value>" removed from the radio button
Stepper the indicator <div> inside the trigger becomes a <span>
Select aria-controls="reka-select-content-…" removed from the trigger

The RadioGroup one is a correction, not a loss, and that was worth establishing before accepting it. Each radio sits inside its <label data-slot="item">, which also holds the visible <span>Option 1</span> — an implicit association that already names it. While aria-label was present it won over that association, and what it carried was the item's value. A radio whose visible text read "Option 1" announced itself as "1". Removing it hands the name back to the visible text.

Our snapshots were regenerated and then checked rather than trusted, since -u rewrites a real regression as readily as an expected change. The same extraction against our own diff gives the same three deltas and nothing else — and one further check, because a per-line diff can miss a deletion that lands everywhere at once: the set of attribute names in each of the three files is identical before and after.

A correction to yesterday's guard

test/utils/sync-ledger.spec.ts, added in #515, asserted "no entry carries pending-merge". §6 step 4 requires them to: the entry is written in the same commit as the port, before its PR has a number or a squash SHA. It went red on the very next port — this one — and as written would have blocked the documented process rather than guarding it.

The real invariant is ordering. Reconciliation happens in sequence, so pending entries must form a suffix; one sitting behind a reconciled entry means a bookkeeping PR was skipped, and that is the failure that is otherwise invisible. Three mutations verified: a pending entry in the middle goes red, this PR's three-entry tail stays green, a fully reconciled ledger stays green.

Verification

dev:prepare · lint · typecheck · build (3.86 MB) · test340 files, 7694 passed, 6 skipped · test:module. pnpm install --frozen-lockfile passes against the committed lockfile.


Generated by Claude Code

Ports `9c99bf16`, `9d46fc7e` and `20c1954d` — a contiguous run, taken in one PR
per PORTING.md §6 4b, because separating them would rewrite the lockfile three
times over the same packages.

Not only versions. `9c99bf16` carries a runtime fix that exists because of one of
its own bumps: `validateSchema` now unwraps its argument with `toRaw`, because
Zod 4.5 resolves `~standard` through a lazy getter that captures `this`, so a
schema held in reactive state arrives as a Vue proxy and the getter reads
non-configurable `_zod` internals through it. Ported verbatim against an
identical pre-image. This fork was on zod ^4.4.3, where the bug does not bite —
it goes live with the ^4.5.4 bump in the same commit, so the fix arrives with its
trigger rather than speculatively.

Versions follow the delta rule: bump only where our pre-image matched upstream's.
`nuxt-schema-org` stays at ^6.2.1 (a recorded dep-parity exception), and
`packageManager` stays put because upstream's pre-image is not ours.

`pnpm-workspace.yaml` gets one of upstream's two removals, each decided by
measurement:

- `minimumReleaseAgeExclude` removed. Verified, not assumed: without the block,
  `pnpm install` still reports the lockfile passing supply-chain policies, so
  `@nuxtjs/mdc@0.23.1` is old enough on its own now. Dropping a spent exception
  tightens the policy.
- The `@nuxt/content>@nuxtjs/mdc` override kept, against upstream. Upstream can
  drop it having moved to content 3.16.0; here removing it demonstrably resolves
  two mdc copies, because the root peer `@nuxt/content: ^3.0.0` — deliberately
  wide — sits at 3.14.0. Its comment now records that.

`20c1954d` moves 1316 snapshot lines. What reka 2.10.4 changes was derived from
upstream's own diff rather than its notes, and our regenerated snapshots were
checked against it rather than trusted: the same three deltas and nothing else.
The RadioGroup one is a correction, not a loss — `aria-label` carried the item's
*value* and won over the wrapping label, so a radio reading "Option 1" announced
itself as "1".

Also corrects the ledger guard added yesterday in #515. It asserted that no entry
carries `pending-merge`, which §6 step 4 requires them to, so it went red on the
very next port and would have blocked the process rather than guarding it. The
real invariant is ordering: pending entries must form a suffix.

Gate: dev:prepare, lint, typecheck, build (3.86 MB), test (340 files, 7694
passed), test:module.
@IgorShevchik
IgorShevchik merged commit 1e33c0a into main Sep 1, 2026
2 checks passed
@IgorShevchik
IgorShevchik deleted the sync/nuxt-9c99bf16 branch September 1, 2026 11:14
IgorShevchik added a commit that referenced this pull request Sep 1, 2026
The four entries written during this run carried `pending-merge` in both `pr`
and `b24ui_sha`, because the entry goes in with the port before its PR has a
number or a squash SHA. Both PRs have now merged:

- `9c99bf16`, `9d46fc7e`, `20c1954d` → #524 / `1e33c0a2`
- `e791d302` → #525 / `0a8c87ca`

Bookkeeping only — no entry is added, the cursor does not move, and no decision
changes. This is also the first run through the corrected ordering guard from
#524: its previous form forbade `pending-merge` outright and would have blocked
this exact sequence, while the corrected form allowed the four-entry tail during
the port and now sees it emptied.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants