Skip to content

Release v1.0.2 — eight-locale localization, Open VSX links, CI - #9

Open
ElecTreeFrying wants to merge 11 commits into
mainfrom
release/v1.0.2
Open

Release v1.0.2 — eight-locale localization, Open VSX links, CI#9
ElecTreeFrying wants to merge 11 commits into
mainfrom
release/v1.0.2

Conversation

@ElecTreeFrying

Copy link
Copy Markdown
Owner

Release branch for v1.0.2. Merges into main, after which R3 cuts the version commit, tag, and the three publish targets.

User-facing

  • Eight-locale manifest localization — every command title, the Insert Random submenu label, displayName, description, and each setting's title / description / enumDescriptions become %key% placeholders resolved from package.nls.json plus zh-cn, es, fr, pt-br, ru, de, ja, tr.
  • Palette search survives translation — each locale translates the category prefix with the command (Insert Random: First NameZufällig einfügen: Vorname), and the context submenu carries the same phrase. Legacy extension.insert* ids share their twin's nls key, so the two namespaces can never show different titles.
  • Deliberately not localized — configuration enum values and defaults are runtime-matched and stay English; so do runtime Quick Picks, prompts, and notifications. insertRandomText.locale governs generated data and is untouched.
  • Open VSX / WinterNova5 / Sponsors README updates.

Maintainer-facing

  • CInpm ci, then npm run compile (both the node and browser bundles), then the vscode-free areas under headless mocha.
  • Dependabot — weekly.
  • Community health — code of conduct, contributing guide, security policy, funding config.
  • Dev deps@vscode/test-cli and @vscode/test-electron upgraded.

CI proved `npm run compile` passed, which is not what a release depends on. Two
gaps closed:

`.github/scripts/check-nls.js` — a dependency-free gate over the package.nls
bundles. VS Code substitutes a manifest string only when the whole value matches
%key%, so an unresolved key renders literally in the UI and a placeholder
embedded in a longer string never substitutes at all. Neither is visible to tsc,
eslint, or vsce. It also rejects keys localized in runtime-matched positions
(enum values, defaults, command ids), keys missing from any locale, duplicates
that JSON.parse would silently collapse, and a .vscodeignore glob that would
stop the bundles shipping. Verified to fire on each of those cases, not just to
pass on a clean tree.

A `package` job that builds the actual VSIX and inspects the archive: all nine
nls bundles present, and no maintainer-only tree (src/, .github/, CLAUDE.md,
SPEC.md, and each repo's own) leaked in. This is the gate the publish wave
depends on and the one CI never ran.

Also: job timeouts, and a node 20/22 build matrix so a toolchain break on a
newer runtime surfaces here rather than on a dev machine.
The template's checklist covers what CI cannot: that a manifest string change
reached all eight locale files, that no enum value or default was localized,
that README and CHANGELOG links are absolute (both ship inside the VSIX, where
relative paths do not resolve), and that the version was not hand-bumped.

CODEOWNERS makes every pull request, including Dependabot's, request a review
rather than sit unnoticed. It uses the ElecTreeFrying account handle, which is
unchanged — only the publisher's display name is WinterNova5.
The release localizes command titles, the submenu, and every setting into eight
display languages, and the SPEC documents it — but the README, which IS the
Marketplace and Open VSX listing, said nothing. Its only mentions of language
were `insertRandomText.locale`, which is a different thing entirely.

Added as a Compatibility bullet, matching how the section already states the
engine floor, registries, and hosts. It draws the distinction explicitly: the
display language is the UI, `insertRandomText.locale` is the language the
generated data is drawn from. Conflating the two is the obvious misreading, and
the two settings are one line apart in the listing.

The changelog entry's Compatibility sentence now carries the same distinction.
`vsce` and `@vscode/vsce` are two different npm packages. The unscoped one is
deprecated and frozen at 2.15.0, and that version rejects any manifest with
`main` but no `activationEvents` — which VS Code has auto-generated from
`contributes.commands` since 1.74. Nothing declared @vscode/vsce, so `npx vsce`
resolved to the 2023 binary from an npx cache and failed with an error that
reads like a manifest bug rather than a stale tool.

Declaring it makes the correct version the only reachable one. It was already
present in this repo's lockfile as an undeclared transitive dev dependency,
which meant any unrelated upgrade could have removed it silently.

CI's packaging step now invokes ./node_modules/.bin/vsce by explicit path
rather than `npx vsce` or `npm exec -- vsce`. Both of those fall back to the
registry when the binary is absent, which is exactly how the deprecated package
gets pulled in; the explicit path can only resolve to the locked version, so CI
and a local publish run are guaranteed to use the same tool.

Dev-only. Verified across all four repos: zero production dependencies changed,
esbuild and typescript unmoved, and every shipped bundle byte-identical before
and after — auto-import 23ac46b3…, drag-import eabd651b…, insert-random-text
bfa4e191…. The large lockfile diffs are npm restructuring the dev tree.
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.

1 participant