From 31af5a2b8ad26c048b940f499ad9d50c4ebf4d1b Mon Sep 17 00:00:00 2001 From: Vivek Date: Sun, 26 Jul 2026 23:31:44 +0530 Subject: [PATCH] chore: release core 0.7.45, vscode 0.2.3, nvim 0.2.3 core 0.7.45 ships the #1114 fix (a stale hover prefetch no longer degrades a click to a full page load) plus the new webjs:navigation-fallback event. Both editor plugins were missed by my first audit pass. I had dismissed them with "intellisense is unchanged, so neither plugin owes a republish", which is the wrong test: the question is whether the PLUGIN's own shipped bundle changed since the PLUGIN's last release, not since intellisense's. The VS Code extension is the sharper case. Its shipped "open documentation" command still pointed at docs.webjs.dev, which moved onto the main domain in #1101, and its README (packaged into the vsix, rendered as the Marketplace listing) carried a brand-casing fix. Both are user-visible in a published artifact, and the stale-host one is the same class core 0.7.44 was released on its own to ship. webjs.nvim carries a committed copy of @webjsdev/intellisense. Its src was already current, but the copied package.json still declared 0.5.1 against a real 0.5.4, so the published plugin misreported the language-service version it ships. Re-vendored here. Worth noting the drift guard cannot catch this: vendor-sync.test.mjs byte-compares only src/, while the vendor script also copies package.json. Distribution note, stated correctly this time: both plugin changelogs carry npm: false, and BOTH publish-npm.js and publish-release.js skip on that flag. So merging cuts no npm publish, no GitHub Release and no tag for the two plugins; their only automated output is the /changelog entry. Actual distribution stays manual: the nvim subtree split, and a vsce publish by the owner. --- changelog/core/0.7.45.md | 19 +++++++++++++++++++ changelog/nvim/0.2.3.md | 14 ++++++++++++++ changelog/vscode/0.2.3.md | 18 ++++++++++++++++++ package-lock.json | 6 +++--- packages/core/package.json | 2 +- packages/editors/nvim/package.json | 2 +- .../@webjsdev/intellisense/package.json | 2 +- packages/editors/vscode/PUBLISHING.md | 7 +++++-- packages/editors/vscode/package.json | 2 +- 9 files changed, 63 insertions(+), 9 deletions(-) create mode 100644 changelog/core/0.7.45.md create mode 100644 changelog/nvim/0.2.3.md create mode 100644 changelog/vscode/0.2.3.md diff --git a/changelog/core/0.7.45.md b/changelog/core/0.7.45.md new file mode 100644 index 000000000..ab710ab3b --- /dev/null +++ b/changelog/core/0.7.45.md @@ -0,0 +1,19 @@ +--- +package: "@webjsdev/core" +version: 0.7.45 +date: 2026-07-26T17:42:19.247Z +commit_count: 1 +--- +## Fixes + +- **a stale hover prefetch no longer degrades a click to a full page load** ([#1115](https://github.com/webjsdev/webjs/pull/1115)) [`f34fa5c9`](https://github.com/webjsdev/webjs/commit/f34fa5c9) + + Clicking a link could intermittently reload the whole document instead of soft-navigating, showing a loading spinner in the browser tab and flashing the entire page including preserved layout chrome. + + A prefetched fragment is a reduced response, anchored at the deepest layout boundary the server short-circuited on, and it can only be applied to a DOM that still offers that boundary. Prefetching any page under a layout while the client already holds that layout therefore yields a fragment that applies from a sibling page but nowhere outside the section. Two ordinary interactions left one cached at the wrong moment: a hover's intent timer resolving after the click it belonged to had already swapped, and a hover on a link that was never clicked before navigating away. Consuming such an entry left the router nothing to swap into, so it correctly degraded to a full page load. + + The prefetch cache now validates a fragment's anchor against the live boundaries and discards it when the anchor is gone, costing one network round-trip instead of a document load. Validation runs against the boundaries captured before the optimistic loading skeleton clears them, so an app with a root-level `loading.{js,ts}` keeps a usable prefetch cache. The router also no longer prefetches the page it is already on, which never helped a later navigation and only occupied a capped cache slot. + +- **client-router degradations are now observable in production** ([#1115](https://github.com/webjsdev/webjs/pull/1115)) [`f34fa5c9`](https://github.com/webjsdev/webjs/commit/f34fa5c9) + + When a soft navigation is not safely possible the router degrades to a full page load, which is correct but was previously reported only by a development-mode console warning, leaving deployed apps with no signal at all. Every such path now dispatches a `webjs:navigation-fallback` event on `document` in all environments, with detail `{ cause, href, willReload }`. `willReload` is true only when a document load actually follows, so a listener can count real full loads without also counting the degradations that resolve in place (a dropped background revalidation, or a suppressed cross-deploy reload that proceeds on the stale importmap). The event is not cancelable, and a listener that throws cannot affect the navigation. diff --git a/changelog/nvim/0.2.3.md b/changelog/nvim/0.2.3.md new file mode 100644 index 000000000..f5800f308 --- /dev/null +++ b/changelog/nvim/0.2.3.md @@ -0,0 +1,14 @@ +--- +package: "webjs.nvim" +version: 0.2.3 +date: 2026-07-26T17:55:00.000Z +commit_count: 2 +npm: false +--- +## Fixes + +- **the vendored `@webjsdev/intellisense` bundle reported the wrong version** ([#1117](https://github.com/webjsdev/webjs/pull/1117)) + + The plugin ships a committed copy of `@webjsdev/intellisense` rather than resolving it at install time. That copy still declared 0.5.1 in its own `package.json`, so the published plugin misreported which language-service version it carried. Re-vendored, so the shipped bundle and its stated version agree. + + There is no change to the plugin's own Lua surface. The only other commit touching this package since 0.2.2 was a JSDoc brand-casing pass inside the vendored copy ([#855](https://github.com/webjsdev/webjs/pull/855)) [`f41d105b`](https://github.com/webjsdev/webjs/commit/f41d105b), with no behaviour change. diff --git a/changelog/vscode/0.2.3.md b/changelog/vscode/0.2.3.md new file mode 100644 index 000000000..927e12533 --- /dev/null +++ b/changelog/vscode/0.2.3.md @@ -0,0 +1,18 @@ +--- +package: "webjs (VS Code extension)" +version: 0.2.3 +date: 2026-07-26T17:55:00.000Z +commit_count: 3 +npm: false +--- +## Fixes + +- **the "open documentation" command points at the current docs host** ([#1101](https://github.com/webjsdev/webjs/pull/1101)) [`e07ea3a1`](https://github.com/webjsdev/webjs/commit/e07ea3a1) + + The documentation moved from `docs.webjs.dev` onto the main domain, and the command shipped in the extension still opened the old host. This is the extension-side counterpart of the same fix released in `@webjsdev/core` 0.7.44. + +- **brand casing corrected in the Marketplace listing** ([#851](https://github.com/webjsdev/webjs/pull/851)) [`28e5be9a`](https://github.com/webjsdev/webjs/commit/28e5be9a) + + The extension README is packaged into the vsix and rendered as the Marketplace listing page, so this is the visible description text. + +Also includes a JSDoc-only brand-casing pass over the extension source ([#855](https://github.com/webjsdev/webjs/pull/855)) [`f41d105b`](https://github.com/webjsdev/webjs/commit/f41d105b), with no behaviour change. diff --git a/package-lock.json b/package-lock.json index 89ae1a207..66d43ab82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6991,7 +6991,7 @@ }, "packages/core": { "name": "@webjsdev/core", - "version": "0.7.44", + "version": "0.7.45", "license": "MIT", "devDependencies": { "esbuild": "^0.25.0" @@ -7007,11 +7007,11 @@ }, "packages/editors/nvim": { "name": "webjs.nvim", - "version": "0.2.2" + "version": "0.2.3" }, "packages/editors/vscode": { "name": "webjs", - "version": "0.2.2", + "version": "0.2.3", "license": "MIT", "dependencies": { "@webjsdev/intellisense": "^0.5.0" diff --git a/packages/core/package.json b/packages/core/package.json index 7dba0e599..d648ec858 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@webjsdev/core", - "version": "0.7.44", + "version": "0.7.45", "type": "module", "description": "webjs core runtime - html/css tags, WebComponent base, isomorphic renderers", "types": "./index.d.ts", diff --git a/packages/editors/nvim/package.json b/packages/editors/nvim/package.json index 8a71d1e1e..a4bb25fbe 100644 --- a/packages/editors/nvim/package.json +++ b/packages/editors/nvim/package.json @@ -1,6 +1,6 @@ { "name": "webjs.nvim", - "version": "0.2.2", + "version": "0.2.3", "private": true, "description": "Neovim editor support for webjs apps (html/css/svg template highlighting + in-template intelligence via the bundled @webjsdev/intellisense). NOT an npm package: ships to the webjsdev/webjs.nvim git repo via subtree split, installed by lazy.nvim. This manifest exists only as the version source for the unified changelog (changelog/nvim/.md); see PUBLISHING.md." } diff --git a/packages/editors/nvim/vendor/node_modules/@webjsdev/intellisense/package.json b/packages/editors/nvim/vendor/node_modules/@webjsdev/intellisense/package.json index 5fbe010fa..7f21fcc8a 100644 --- a/packages/editors/nvim/vendor/node_modules/@webjsdev/intellisense/package.json +++ b/packages/editors/nvim/vendor/node_modules/@webjsdev/intellisense/package.json @@ -1,6 +1,6 @@ { "name": "@webjsdev/intellisense", - "version": "0.5.1", + "version": "0.5.4", "type": "commonjs", "description": "Standalone TypeScript language-service plugin for webjs (no Lit dependency). Adds in-template intelligence inside html`` templates: go-to-definition on tags / attributes / CSS classes, binding-aware completions, value/binding diagnostics, and hover, all driven by its own template parser and gated on import-graph reachability.", "main": "src/index.js", diff --git a/packages/editors/vscode/PUBLISHING.md b/packages/editors/vscode/PUBLISHING.md index 79948e229..3f0b47f17 100644 --- a/packages/editors/vscode/PUBLISHING.md +++ b/packages/editors/vscode/PUBLISHING.md @@ -43,8 +43,11 @@ dependencies. ## Releasing a version -1. Bump `version` in `packages/editors/vscode/package.json` (the pre-commit hook - skips this package's changelog, so no changelog file is generated). +1. Bump `version` in `packages/editors/vscode/package.json`. The pre-commit hook + TRACKS this package (#413), so the bump DOES require a `changelog/vscode/.md` + and `scripts/backfill-changelog.js` generates one. The entry carries + `npm: false`, which makes every publish script skip it, so nothing is + published automatically: the `vsce` / `ovsx` steps below are still manual. 2. Build + package + publish to both registries: ```sh cd packages/editors/vscode diff --git a/packages/editors/vscode/package.json b/packages/editors/vscode/package.json index 09c6845cf..26360f246 100644 --- a/packages/editors/vscode/package.json +++ b/packages/editors/vscode/package.json @@ -1,7 +1,7 @@ { "name": "webjs", "displayName": "webjs", - "version": "0.2.2", + "version": "0.2.3", "description": "All-in-one webjs support: html/css template highlighting, language-service intelligence, snippets, and commands. No Lit extension required.", "publisher": "webjsdev", "private": true,