Skip to content

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

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#2
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. displayName and description become %key% placeholders resolved from package.nls.json (English base + per-key fallback) plus zh-cn, es, fr, pt-br, ru, de, ja, tr. All nine files ship in the VSIX.
  • Open VSX surfaced in the README — version badge, a direct listing link under Installation, and a namespace link. Compatibility notes the verified publisher.
  • Publisher display name reads WinterNova5 in README prose. Every URL and the extension id are unchanged.
  • GitHub Sponsors added to the README Support section and SUPPORT.md.

Maintainer-facing

  • CI — validates that every snippet file the manifest points at exists and parses, checked from a fresh clone. It deliberately does not re-implement tools/validate.js; tools/ is gitignored and absent from a clone, so content fidelity stays a local gate.
  • Dependabot — weekly.
  • Community health — code of conduct, contributing guide, security policy, funding config.
  • Dropped the stale .remember/ ignore rules.

Not in this branch

No snippet changes. snippets/** is byte-identical to v1.0.2's predecessor, and the generator was not run.

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 the extension's name and description into eight display
languages, and the SPEC documents it — but the README, which IS the Marketplace
and Open VSX listing, said nothing. Anyone browsing the listing had no way to
know the extension speaks their language.

Added as a Compatibility bullet, matching how the section already states the
engine floor, registries, and hosts. It notes that snippet prefixes and bodies
stay English on purpose: they are typed identifiers, not display text.

The changelog entry's Compatibility sentence now mentions it too.
`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