Clear the npm advisories, move Actions to Node 24, and fix the CLI version check - #160
Merged
Merged
Conversation
Every run since the deprecation landed carried an annotation that actions/checkout@v4 and actions/setup-node@v4 target Node 20 and were being forced onto Node 24. The v1.0.7 publish ran that way. - actions/checkout and actions/setup-node to v7, the current major on a node24 runtime. Neither uses an option that changed across v5-v7; the majors here are runtime bumps - release-drafter to v7.7.0, also node24, still pinned by commit SHA The node-version the jobs install was already 24; this is the runtime the actions themselves execute on. Part of the estate-wide upgrade tracked in NV-4884: twelve repos still run actions on Node 20, and five on runtimes older still.
blackoutjack
force-pushed
the
chore/ci-and-dependency-maintenance
branch
2 times, most recently
from
August 19, 2026 20:45
6985047 to
84346fc
Compare
Both were held back from the v1.0.7 dependency pass because the only
fix was a semver major. Neither turns out to need a code change.
- uuid 9 -> 14 closes the v3/v5/v6 buffer bounds check advisory. Every
call site imports { v4 }, which is unchanged; @types/uuid goes, as
uuid has shipped its own types since v10
- webpack-dev-server 5 -> 6 drops sockjs, which carried the other
advisory. v6 also ships as "type": "module", so its client is fully
specified ESM, and fully specified resolution ignores
resolve.extensions: the bare 'process/browser' specifier the
ProvidePlugin used could not resolve from it at all. The client logger
calls process.hrtime(), so it pulls process in, and the dev server
compiled with two errors until the plugin was given a resolved path.
v5 was CommonJS, which is why this only surfaced on the upgrade
Clears the open redirect via backslash in Link and useNavigate, and the arbitrary constructor injection in deserializeErrors(). The repo now reports no npm advisories at any severity. The webview uses only the element-based router: createMemoryRouter with path, element, errorElement and children, plus Link, Outlet, useNavigate and useParams. It has no loaders, actions, fetchers or Form, so none of the v7 future flags that became default behaviour apply, and none of the removed helpers (json, defer, fallbackElement) are referenced. v7 ships .mjs, so it hits the same fully specified ESM resolution that the previous commit worked around for webpack-dev-server 6: a bare 'process/browser' specifier cannot resolve from it. That widens the consequence rather than adding a second cause. Before this commit only the dev server failed without the resolved path; now a plain production build does too, so the config comment names both dependencies and says that dropping either is not licence to revert it.
blackoutjack
force-pushed
the
chore/ci-and-dependency-maintenance
branch
from
August 19, 2026 22:37
84346fc to
d5c3388
Compare
isCliOutdated walked every version segment and only ever tested for "older", so it never stopped at the segment that settles the comparison. Any segment smaller than the floor's raised the update prompt, however much newer an earlier segment made the version. - Port the three-way comparison the IntelliJ plugin already uses, so the first differing segment decides and later ones are ignored - Read each segment up to its pre-release suffix, and end the version at that segment, so 0.15.3-beta reads as 0.15.3 and 0.15.1-rc.2 as 0.15.1 rather than sorting above the release it precedes - Stop at the first segment with no leading number, rather than dropping it and sliding every later segment out of position - Leave a version carrying no numeric segment at all alone rather than prompting it, since read as 0.0.0 it sits below every floor While the floor sat at 0.9.5 this prompted every CLI release from 0.10.0 whose patch was below 5, telling a user on 0.16.1 to move to 0.9.5. Raising the floor to 0.15.0 for NV-4872 masked it, because a floor whose patch is zero cannot trip the test on the 0.x line, but a 1.x release or any later floor with a non-zero patch brings it back.
blackoutjack
force-pushed
the
chore/ci-and-dependency-maintenance
branch
from
August 19, 2026 23:04
d5c3388 to
5e60fab
Compare
CHANGELOG.md ships in the .vsix and is what the Marketplace renders on its Changelog tab, and it had fallen two releases behind: the last entry was 1.0.6, while v1.0.7 shipped and package.json is already on 1.0.8. No workflow reads the file, so nothing caught the drift. - 1.0.7 backfilled from the commits between v1.0.6 and v1.0.7: the scan reliability work, the CLI version floor, the resolved binary path, and the target names that were split on spaces - 1.0.8 covers this branch: the version comparison, the dependency upgrades that clear the last advisories, and the Actions runtime
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Clears every remaining npm advisory, including the three whose only fix was a semver major and were held back from the v1.0.7 dependency pass, moves the GitHub Actions off the deprecated Node 20 runtime, and fixes a version check that told users their CLI was out of date when it was newer than the floor the plugin builds against.
npm auditnow reports nothing at any severity, and this supersedes all seven open Dependabot PRs (#134, #138, #139, #148, #150, #159, and #149, whose packagewebsocket-driveris no longer in the tree at all).Implementation
actions/checkoutandactions/setup-nodeto v7,release-drafterto v7.7.0, all on node24 (NV-4884).uuid9 to 14 andwebpack-dev-server5 to 6;@types/uuidremoved, since uuid has shipped its own types since v10.LinkanduseNavigate, and constructor injection indeserializeErrors().isCliOutdatednever stopped at the segment that settles the comparison, so any segment below the floor's raised the update prompt; ports the three-waycompareCliVersionsthe IntelliJ plugin already uses (NV-4897)..vsixand is what the Marketplace Changelog tab renders.Out-of-scope
0.15.0. Raising it is what masked the comparison bug (NV-4872), and the next raise to a version with a non-zero patch would have exposed it again.Verification
make testpasses, but it covers only the extension host: nothing in the suite renders the webview, so neither the react-router nor the uuid upgrade is exercised by it. Both were checked by loading the builtdist/webview.jsin a browser against a stub of the extension-host message channel, and then re-running the identical harness against a bundle built frommain. The two behave the same: the app boots,createMemoryRouterand theMainLayoutOutletrender,Linknavigation between routes works,uuidproduces valid v4 request ids, and the only console errors are the same pair the stub provokes on both bundles.The react-router 7 upgrade was also checked against the webview's actual API surface rather than assumed safe. It uses only the element-based router (
createMemoryRouterwithpath,element,errorElement,children, plusLink,Outlet,useNavigate,useParams), with no loaders, actions, fetchers orForm, so none of the v7 future flags that became default behaviour apply and none of the removed helpers are referenced.The
webpack-dev-server6 upgrade is not covered bymake testeither, which never starts the dev server, and it is what forced theProvidePluginchange. v6 ships as"type": "module", so its client is fully specified ESM; fully specified resolution ignoresresolve.extensionsentirely, so the bareprocess/browserspecifier could not resolve from it and the dev server compiled with two errors until the plugin was given a resolved path. v5 was CommonJS, which is why this surfaced only on the upgrade. Checked by hand afterwards: the dev server compiles clean, serveswebview.jsover HTTP 200, and returns the expected CORS header.react-router 7 hits the same resolution rule from
.mjsrather than a second one, which widens the consequence: reverting to the bare specifier was tried in both configurations, and with react-router 6 only the dev server fails while a production build still passes, whereas at HEAD a plain production build fails on its own. The config comment names both dependencies so that dropping either does not read as licence to revert it.The version-check fix is dated against the CLI's own release tags rather than argued from examples. Replaying all 182 released versions through the old comparison puts 20 of them on the wrong side while the floor was
0.9.5: every release from0.10.0onward whose patch was below 5, up to and including0.16.1. Under the current0.15.0floor none of the 182 are misjudged, so the bug is masked rather than absent onmain, and either a1.xrelease or a floor carrying a non-zero patch restores it. Each of the eightisCliOutdatedassertions added here fails against the previous implementation, and the fivecompareCliVersionscases could not run against it at all.