Skip to content

chore(sync): record three upstream commits that do not apply - #361

Merged
IgorShevchik merged 1 commit into
mainfrom
sync/nuxt-094fb57
Aug 11, 2026
Merged

chore(sync): record three upstream commits that do not apply#361
IgorShevchik merged 1 commit into
mainfrom
sync/nuxt-094fb57

Conversation

@IgorShevchik

Copy link
Copy Markdown
Collaborator

Bookkeeping only — no source, manifest or lockfile change. Advances the ledger cursor past three nuxt/ui commits with nothing to port, and records why, so the next reader does not re-derive it. Batched into one PR rather than three near-empty ones, as with #201, #209, #210 and #216.

Each one was checked against the actual upstream diff, not the commit title.


094fb57chore(deps): release-it to v21 and @release-it/conventional-changelog to v12

Two lines in upstream's root devDependencies plus the lockfile. No config, no workflow, no source.

We do not release with release-it — we use release-please (release-please-config.json, .release-please-manifest.json, .github/workflows/release-please.yml), with publishing in npm-publish.yml. Confirmed rather than assumed: neither package appears in any manifest here, neither is referenced by any workflow, and there is no .release-it.json or release-it key in package.json.


10ec237fix(locale): correct slide placeholder casing in lb (nuxt/ui#6822)

One character in src/runtime/locale/lb.ts: 'Gitt op d\'Slide {Slide}'{slide}. The interpolation key is case-sensitive, so {Slide} never matched and Luxembourgish users saw the literal {Slide} instead of a number.

b24ui ships its own locale set (ar, br, de, en, fr, id, in, it, ja, kz, la, ms, pl, ru, sc, tc, th, tr, ua, vn) — there is no lb.ts.

Audited rather than shrugged off, because the interesting part is the bug class: a placeholder whose casing does not match the interpolated key fails silently — no error, no test failure — and we maintain 20 locales of our own where the same mistake could exist independently.

$ grep -ohE "\{[A-Za-z_][A-Za-z0-9_]*\}" src/runtime/locale/*.ts | sort | uniq -c
     40 {label}
     20 {slide}
     20 {name}
     20 {filename}
     20 {duration}

$ grep -nE "\{[A-Z]" src/runtime/locale/*.ts
(none)

Every placeholder is lower-case, and the counts line up exactly with 20 locale files ({label} twice per file, the rest once) — so no locale is missing or mis-spelling one either.


795c353fix(AuthForm): type submit payload with the schema output (nuxt/ui#6816)

-defineEmits<AuthFormEmits<typeof state>>()
+defineEmits<AuthFormEmits<FormData<T>>>()

state is assembled from the fields prop, so it describes what the form renders, not what the schema produces — anything the schema adds (a .default(), a transform, a coerced type) was missing or wrong in the emitted payload's type.

We have no AuthForm component. Audited rather than shrugged off, because the building blocks do exist here — FormData<S, T> in src/runtime/types/form.ts and the expectEmitPayloadType helper in test/utils/types.ts (already used by the Listbox, Select, SelectMenu and InputMenu specs) — so the same mistake could have been made independently. The only component that emits a form submit is Form.vue, and it is already correct:

export interface FormEmits<S extends FormSchema, T extends boolean = true> {
  submit: [event: FormSubmitEvent<FormData<S, T>>]
}

Schema-derived, not typeof state.


Verify

lint green. Nothing else runs differently — the diff is three journal files under .sync/log/ and three ledger entries.

Ledger: cursor → 795c353; the 18c231a entry is reconciled to PR #360 / 27b4db3. This brings the fork level with nuxt/ui@v4 HEAD.


Generated by Claude Code

Bookkeeping only — no source, manifest or lockfile change. Advances the ledger
cursor past three nuxt/ui commits with nothing to port, and records why, so the
next reader does not re-derive it.

- 094fb57 `chore(deps): release-it to v21 and @release-it/conventional-changelog
  to v12` — we release with release-please. Neither package appears in any
  manifest or workflow here, and there is no `.release-it.json`.
- 10ec237 `fix(locale): correct slide placeholder casing in lb` — no `lb.ts` in
  this fork's locale set. Audited the bug class instead of shrugging: a
  placeholder whose casing does not match the interpolated key fails silently,
  so all 20 b24ui locales were grepped. Every placeholder is lower-case and the
  counts line up exactly with 20 files, so none is missing or mis-spelled.
- 795c353 `fix(AuthForm): type submit payload with the schema output` — no
  `AuthForm` component here. The building blocks do exist (`FormData<S, T>`,
  `expectEmitPayloadType`), so the only component that emits a form submit was
  checked: `Form.vue` already declares
  `submit: [event: FormSubmitEvent<FormData<S, T>>]` — schema-derived, not
  `typeof state`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JS8ypVfQSFzYVZzkTHhURb
@IgorShevchik
IgorShevchik merged commit c31d250 into main Aug 11, 2026
1 check passed
@IgorShevchik
IgorShevchik deleted the sync/nuxt-094fb57 branch August 11, 2026 12:53
IgorShevchik pushed a commit that referenced this pull request Aug 23, 2026
Review found six defects in the two checks this branch adds, three of them
undermining the point of it. Every one was confirmed by running rather than
reading.

**The type check could be walked past.** `/^([a-z]+)/i` takes a letters-only
prefix; the parser's type token runs to the first `(`, `!`, `:` or space. So
`fix2(x):` read as `fix` and was accepted, `fix-perf(x):` as `fix`, and
`2fix(x):` captured nothing at all — skipping the check and printing "type
`undefined` has a section", next to a comment of mine calling that a case that
could not happen. All three are types release-please would not match, which is
the exact bypass this guard exists to close: a typo in letters was caught, a
typo with a digit was not. The type now comes from the AST the parse already
produced. The grammar has one implementation and it is not this file.

Mutation then showed the fix had no test behind it — the original regex still
passed all 75 cases, because every unconfigured type in the spec was letters.
Four cases added.

**The port check flagged commits that port nothing.** It keyed on any new entry
in `processed`, but 70 of the ledger's entries are `no-op`, `noop`, `skip` or
`n/a`. #442, #439 and #361 were all flagged — correct messages, on `main`,
where they can no longer be fixed. The trigger is now a new entry whose
`decision` is `port`.

**The new tests would have failed every CI run.** They worktree'd onto real
SHAs while this same branch sets `fetch-depth: 2`, so the objects are absent on
CI; locally they passed only because a dev clone has the history. Rewritten
against a synthetic two-commit repository, which also removes a race that bit
this branch for real — a concurrent process restoring the same file twice
discarded edits mid-review.

Three smaller ones. A batch port was required to name every SHA it added, while
§6 4b and this file's own docstring say naming one is enough. The ledger key
was interpolated into `new RegExp`, so an entry keyed `(a+)+$` hangs the check
— it is a substring test against a key checked to be a SHA now. And an
unreadable ledger warned at HEAD^ but was silent at HEAD.

Two coverage holes closed on review's evidence: disabling `isMergeCommit()`
killed no test, and the "reads the type list from the config" test was a
string-containment check that a hardcoded copy passes with the comment intact.
It now stands the script beside a config naming a type this repository does not
configure and requires it to be accepted.

Docs corrected where they promised more than the code does. §7 said CI checks
the upstream reference; it does, but only on `push` to `main` — the title job
works from a title, which cannot say what a commit touched — so the reviewer
owns both halves. `pr-title.yml` now says green there does not mean every rule
is satisfied. `AGENTS.md` states both requirements, which until now were
discoverable only by reddening CI.

Nine mutations that previously killed nothing now each kill at least one case.
Follow-up #472 covers the install cost of the title job.

Refs #437

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012MsMuj8Fic9tjWVjyEyrxc
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