Repository navigation
fix(deps): unblock Dependabot and take the patched electron-updater and vitest - #1195
Merged
Merged
Conversation
…t run 523f305 hand-merged electron-updater into the cross-platform lock and left two artefacts npm itself ignores, so CI stayed green: - a lockfile-v1 top-level "dependencies": {"electron-updater": ...} block at the end of the v3 file. Dependabot's parser rejects it ("lockfile.dependencies.electron-updater must be an object"), and every npm update job since 2026-09-22 01:45 UTC has aborted on it, security updates included; - the root entry listing electron-updater under dependencies while package.json (and the package entry's dev:true) say devDependencies. Edited by hand rather than regenerated: npm 10 and npm 11 disagree on where an optional esbuild peer lives (#1042), so a regenerated lock passes one CI gate and fails the other. Refs #987 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Clears the open Dependabot alerts that the broken lockfile had been blocking: - electron-updater 6.6.2 -> 6.8.9. The old one pinned its own builder-util-runtime 9.3.1, which leaks PRIVATE-TOKEN and mixed-case Authorization headers on a cross-origin redirect (high). This is the self-updater we ship; 6.8.9 pins 9.7.0, which is already the hoisted copy, so the nested one goes away. The API UpdateService relies on is unchanged: allowPrerelease is still derived from the running version in the constructor (AppUpdater.js), so forcing it off afterwards still works, and setFeedURL/autoInstallOnAppQuit/allowDowngrade keep their shapes. - vitest and @vitest/coverage-v8 4.1.7 -> 4.1.11 (@vitest/mocker path traversal, medium, dev only). 4.1.11 accepts vite ^6||^7||^8, so npm now uses the app's own vite 7.3.6 and drops the nested vite 8 + rolldown + esbuild 0.28 tree. That nested esbuild is the one npm 10 and npm 11 used to place differently (#1042), so this removes that trap rather than working around it. Generated with npm 11 (--package-lock-only) and checked entry by entry: exactly these packages changed, nothing else moved. npm ci accepts the result unchanged under npm 10.9 (the Node 22.12 gate) and npm 11.11. The vitest copies nested under packages/agent-transcript-parser, agent-voice-dictation and workflow-mcp come from those submodules' own ranges and move when the submodules do. Refs #987 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Sep 25, 2026
…roup #987 was red because a handful of its 30 packages need real migration work (#1201-#1204), and a group PR is all-or-nothing. Once #1195 makes Dependabot parse the lockfile again, the same group would come back red. These packages are ignored for routine minor/patch updates only, the same mechanism the file already uses for majors; security updates still arrive. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Why
Dependabot has been failing every npm run since 2026-09-22 01:45 UTC, security updates included. The Actions logs (runs 35677018418, 35799604717, 35833987779) all abort with:
The hand merge in
523f3050left a lockfile-v1 top-level"dependencies": { "electron-updater": "^6.6.2" }block at the end of the v3 file, and putelectron-updaterunder the root entry'sdependencies, whilepackage.jsonhas it underdevDependencies. npm ignores both, so CI stayed green. Meanwhile three alerts went unpatched:builder-util-runtime< 9.7.0 viaelectron-updater: cross-origin redirect leaksPRIVATE-TOKEN/ mixed-caseAuthorizationvitest< 4.1.11: path traversal via@vitest/mockerredirect mock@vitest/mocker(same advisory)Change
1c47e8ec: lockfile repair, by hand. Deletes the stray block and moveselectron-updaterback to the root entry'sdevDependencies. No regeneration: npm 10 and npm 11 place an optional esbuild peer differently (chore(deps): security updates from #991 with a lockfile both CI gates accept #1042), so a regenerated lock passes one CI gate and fails the other.3939df83: the patched versions.electron-updater6.6.2 → 6.8.9. It pinsbuilder-util-runtime9.7.0, which is already the hoisted copy, so the vulnerable nested 9.3.1 goes away.vitestand@vitest/coverage-v84.1.7 → 4.1.11.^6 || ^7 || ^8; the old nested copy was an artefact of how the lock was built). That drops the nested vite 8.0.14 + rolldown + esbuild 0.28 tree, which was the exact package chore(deps): security updates from #991 with a lockfile both CI gates accept #1042 had to work around. It also clears the two vite alerts (Persist status mode and tighten command flows #10 high, Fix mac release workflow #11 medium), which only matched that nested 8.0.14.The lock was produced with npm 11
--package-lock-onlyand checked entry by entry against main. Only these packages changed: 1 entry added (@vitest/mockerhoisted), 48 removed (the nested vite/rolldown/esbuild tree and nestedbuilder-util-runtime), 9 version changes (the vitest family and electron-updater). No same-version entry changed.UpdateServicerelies on electron-updater behaviour that still holds in 6.8.9.AppUpdater's constructor still derivesallowPrereleasefrom the running version (AppUpdater.js:218), so forcing it off afterwards still works.setFeedURL,autoInstallOnAppQuitandallowDowngradekeep their shapes.Verification
npm ci --include=dev --ignore-scriptsunder npm 10.9.0 (Node 22.12) and npm 11.11.0 (Node 24): both succeed, and both leave the lockfile byte-identical.npx tsc -b: clean.vitest run --project uniton vitest 4.1.11: 487 files, 4,278 tests pass.vitest run src/main/updates: pass.Not verifiable here: a real self-update on a packaged, signed build. The next preview nightly exercises the updater feed.
30137cc2:dependabot.yml. Monaco, the four packages shared with workflow-mcp, vscode-languageserver-protocol and esbuild are ignored for routine minor/patch updates only (the same mechanism the file already uses for majors). Each one needs a migration, tracked in chore(deps): migrate monaco-editor 0.52 → 0.57 (namespaces and worker paths moved) #1201–chore(deps): bump esbuild 0.25 → current, on its own #1204. Without this, the fixed Dependabot would reopen the same red group as chore(deps): Bump the minor-and-patch group across 1 directory with 30 updates #987.Review (round 1, one Codex reviewer): MERGE-READY
It independently checked:
JsonLock::Recordparser;npm ciunder npm 10.9 and 11.11, with a byte-identical lock;HttpExecutorprobe confirmingPRIVATE-TOKEN/AuThOrIzAtIoNare stripped on a cross-origin redirect;Left for follow-ups
packages/agent-transcript-parser,agent-voice-dictationandworkflow-mcp(4.1.10) come from those submodules' own ranges and move when the submodules are bumped.Refs #987
🤖 Generated with Claude Code