Skip to content

Upgrade every dependency: Electron 44 (macOS 13+), TypeScript 7, oxlint in place of ESLint - #86

Merged
popen2 merged 7 commits into
mainfrom
claude/upgrade-dependencies-vulnerabilities-o3l7mq
Aug 30, 2026
Merged

popen2 merged 7 commits into
mainfrom
claude/upgrade-dependencies-vulnerabilities-o3l7mq

Conversation

@popen2

@popen2 popen2 commented Aug 21, 2026

Copy link
Copy Markdown
Owner

Brings every dependency to its current release, including the majors that needed
breaking changes taken, and closes the one open advisory in the tree.

⚠️ This raises the macOS floor to 13 (Ventura)

Electron 44 drops macOS 12, and Frost updates itself in place without checking
the OS version
— a Monterey machine would update into a build that will not
launch. README.md and docs/docs/platforms.html now say so, but this is the
part worth a decision rather than a skim.

Nothing in src/ used the APIs Electron 44 removed (renderer clipboard,
app.isUnityRunning, setProgressBar/setBadgeCount, net.request, the
select-client-certificate signature), and the build matrix was already 64-bit
only, so the 32-bit Windows and armv7l removals are no-ops here. The OS floor is
the whole of the breaking change.

Why the linter changed

TypeScript 7's package exports version and versionMajorMinor from its main
entry and nothing else — the TS 6 compiler API moved behind
typescript/unstable/* in a different shape. typescript-eslint reads
versionMajorMinor, sees 7, and throws rather than crashing on a missing
createSourceFile. That is not something it can patch around until the new API
stabilises, which is why its tracking issue targets TS 7.1.

So any tool doing import ts from "typescript" pins the repo to TypeScript 6.
Exactly one did — typescript-eslint (plus its own ts-api-utils) was the only
consumer of the compiler API in the whole tree. oxlint parses TypeScript itself,
so swapping the linter removed the last reason to carry two TypeScripts, and
typescript is a plain ^7.0.2 again.

The config was a faithful port, not a fresh start. .oxlintrc.json pins the
rule set — categories.correctness off, plugins just ["typescript"] — so
the 68 active rules are exactly what js.configs.recommended plus
tseslint.configs.recommended enforced, and a future oxlint release cannot
quietly widen what CI gates on. The one rule without an oxlint equivalent is
no-octal, which is unreachable here: octal literals are a syntax error in an
ES module, so tsc rejects them with TS1121 first.

Lint drops from 3.1s to 17ms and the dev tree loses 26 packages.

Security

aws-iam-authenticator 0.7.16 → 0.7.18, which exists to pull golang.org/x/net
and golang.org/x/sys past their CVEs. This binary ships inside the signed app
and runs as every user's kubeconfig exec plugin, so it is worth having. All
five checksums were recomputed from the release assets and match upstream's
authenticator_0.7.18_checksums.txt; the same method reproduces the 0.7.16 pins
being replaced.

Everything else

  • AWS SDK clients → 3.1121.0, Electron → 44.0.0, uuid → 14.0.2, js-yaml → 5.4.1.
  • GitHub Actions: checkout and setup-node → v7, and the Pages trio to
    configure-pages v6 / upload-pages-artifact v5 / deploy-pages v5.
    checkout v7 only blocks fork checkouts under pull_request_target and
    workflow_run, neither of which these workflows use; setup-node v7 drops a
    dummy NODE_AUTH_TOKEN export nothing here reads.
  • Electron Forge stays on 8.0.0-alpha.10 — the newest 8.x. npm outdated
    flags it only because stable latest is 7.11.2, which would be a downgrade.

Verified

From a clean npm ci: build ok, lint ok, npm audit 0 vulnerabilities. The
TypeScript 7 emit was diffed against TypeScript 6's and is byte-identical for
both .js and .d.ts; only sourcemap mappings differ. oxlint was checked to
actually gate — an injected violation exits 1 with the expected rules, a clean
tree exits 0.

Not verified locally, and what this CI run is for: the full electron-forge make matrix, including macOS signing and notarization and the Windows
installer. Electron 44 is also days old, so its Chromium 152 behaviour in the
WebAuthn login window is worth a manual pass before cutting a release.

Deliberately left out

Type-aware lint rules are available (oxlint --type-aware with
oxlint-tsgolint, which runs on TS 7) but stay off here to keep this diff
reviewable. They currently report a dozen findings — mostly
no-floating-promises, plus two ${err} template expressions in
src/aws-sso.ts and src/aws-eks.ts that look like real bugs, since
describeError exists for exactly that and a non-Error throw stringifies to
[object Object] in a user-facing message. Worth its own PR.

Also left alone: NODEJS_VERSION stays at 22, and the glob@7/inflight
deprecation warnings persist because they come from copyfiles and
electron-winstaller, both already at their latest published versions and
carrying no advisories.


Labelling: this branch is claude/…, so autolabeler.yaml will not label
it from the branch name and version-resolver defaults to patch. Given the
macOS 13 floor, this likely wants minor set by hand, plus dependencies for
the changelog category.

🤖 Generated with Claude Code

claude added 7 commits August 29, 2026 20:02
Moves the AWS SDK clients to 3.1115.0, Electron to 43.4.1, and uuid to
14.0.2, refreshing the lockfile along the way.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PqTrsu3jNY6xWecquJX1u5
typescript-eslint 8 throws outright on TS >= 7 rather than degrading, so
it still needs the TS 6 compiler API. Install both through npm aliases —
the arrangement the TypeScript team documents — so `tsc` is the TS 7
native compiler while `import "typescript"` resolves to TS 6.

The emitted JavaScript and declarations are byte-identical to what
TypeScript 6 produced; only the sourcemap mappings differ.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PqTrsu3jNY6xWecquJX1u5
checkout and setup-node to v7, and the Pages trio to configure-pages v6,
upload-pages-artifact v5 and deploy-pages v5.

checkout v7 only stops fork checkouts under pull_request_target and
workflow_run, neither of which these workflows use, and setup-node v7
drops a dummy NODE_AUTH_TOKEN export that nothing here reads. The Pages
bumps are runtime moves to Node 24 with the same inputs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PqTrsu3jNY6xWecquJX1u5
0.7.18 exists to pull golang.org/x/net and golang.org/x/sys forward past
their CVEs, and this binary ships inside the signed app and runs as the
kubeconfig exec plugin, so it is worth having.

Every checksum here was recomputed from the release assets and matches
upstream's authenticator_0.7.18_checksums.txt; the same method reproduces
the 0.7.16 pins it replaces. windows/arm64 keeps sharing the amd64 asset,
which is still the only Windows build published.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PqTrsu3jNY6xWecquJX1u5
TypeScript 7's package exports version and versionMajorMinor from its main
entry and nothing else - the TS 6 compiler API moved behind
typescript/unstable/* in a different shape. So typescript-eslint's refusal
to run on TS 7 is not something it can patch around, and every tool that
does `import ts from "typescript"` needs a TypeScript 6 to keep working.

typescript-eslint was the only such tool in the whole dependency tree, and
oxlint parses TypeScript itself. Swapping the linter removes the reason
the two-TypeScript alias existed, so typescript is a plain ^7 again.

.oxlintrc.json pins the rule set rather than inheriting oxlint's
categories: the 68 rules listed are exactly what js.configs.recommended
plus tseslint.configs.recommended enforced, so CI gates on the same set as
before and a new oxlint release cannot widen it. The only rule without an
oxlint equivalent is no-octal, which is unreachable here because octal
literals are a syntax error in an ES module and tsc rejects them first.

Lint drops from 3.1s to 17ms, and the dev tree loses 26 packages.

Type-aware rules are deliberately left off. They are available via
oxlint --type-aware and would be a separate change: they currently report
a dozen findings worth fixing on their own terms.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PqTrsu3jNY6xWecquJX1u5
AWS SDK clients to 3.1121.0 and js-yaml to 5.4.1, both in range.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PqTrsu3jNY6xWecquJX1u5
Chromium 152 and Node 24.18.1. None of 44's removals touch this app: it
does not use the renderer clipboard module, app.isUnityRunning,
setProgressBar/setBadgeCount, net.request or select-client-certificate,
and the build matrix was already x64 and arm64 only, so dropping 32-bit
Windows and armv7l changes nothing here.

What does change is the floor: macOS 12 is gone. The in-place updater does
not check the OS version before installing, so a Monterey machine would
update itself into a build that will not launch. README.md and
docs/docs/platforms.html now say so.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PqTrsu3jNY6xWecquJX1u5
@popen2
popen2 force-pushed the claude/upgrade-dependencies-vulnerabilities-o3l7mq branch from 77e76cb to 13db29f Compare August 29, 2026 20:04
@popen2 popen2 changed the title Pull the in-range dependency updates Upgrade every dependency: Electron 44 (macOS 13+), TypeScript 7, oxlint in place of ESLint Aug 30, 2026
@popen2
popen2 merged commit 041557a into main Aug 30, 2026
9 checks passed
@popen2
popen2 deleted the claude/upgrade-dependencies-vulnerabilities-o3l7mq branch August 30, 2026 06:11
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.

2 participants