Skip to content

chore(deps): electron 44, verified where CI cannot see - #39

Merged
JOhnsonKC201 merged 1 commit into
mainfrom
chore/electron-44
Aug 28, 2026
Merged

chore(deps): electron 44, verified where CI cannot see#39
JOhnsonKC201 merged 1 commit into
mainfrom
chore/electron-44

Conversation

@JOhnsonKC201

Copy link
Copy Markdown
Owner

Supersedes #37. Same bump, plus the verification that bump actually needs.

Why not just merge #37

npm audit flags electron <= 40.10.2 high, and extract-zip underneath it, so staying on 33 was not free. But green CI proves less here than it looks:

function startInputHook() {
  try {
    const { uIOhook } = require('uiohook-napi');   // native module, ABI-sensitive

That try/catch is correct at runtime (a machine without Accessibility permission should still get a pet) and misleading during an upgrade. A native module that fails to load under a new Electron ABI leaves an app that boots, renders, passes every test, and has silently stopped reacting to typing and scrolling. npm run test:boot cannot catch it, because a pet that never kneads still draws a perfectly good frame.

So the check is now a script

npm run check:hook (new, scripts/hook-check.js) runs inside the main process, loads uiohook-napi, checks the API surface, calls start(), waits for the hook thread to fall over on its own, and stops.

{ "electron": "44.0.0", "node": "24.18.1", "abi": "149",
  "loaded": true, "api": true, "started": true, "stopped": true }
input hook OK

Deliberately not in CI: a headless Linux runner has no input to hook, and a macOS runner cannot grant itself Accessibility, so it would fail for reasons that say nothing about the upgrade. Run it when the Electron major changes.

Verified locally

  • npm run check:hook passes on 44 (this is the one that mattered)
  • npm test 214 pass / 4 skipped (POSIX-shell iPad tests, which run on the Linux CI job)
  • npm run lint clean
  • npm run test:boot renders under 44
  • npm run pack builds a Windows package against 44 + electron-builder 26.15.3
  • npm audit now reports 0 vulnerabilities
  • Every Electron API this app calls (app, BrowserWindow, Tray, Menu, ipcMain, screen, dialog, nativeImage, powerMonitor, safeStorage) is long-lived and unchanged across 33 to 44

What still needs eyes

No script can see window layering. Worth two minutes on the desktop after merge: overlay stays above a fullscreen window, clicks pass through to what is underneath, typing still kneads, scrolling still climbs, tray menu opens. Nothing ships from this either way, since releases are cut from a tag rather than from main, so a revert is free if anything looks off.

`npm audit` flags electron <= 40.10.2 as high, and extract-zip underneath it, so
staying on 33 was not the free option it looks like. This clears both: audit is
at zero.

Eleven majors of window behaviour for an overlay app is not a rubber stamp,
though, and green CI proves less here than it appears to. startInputHook() wraps
`require('uiohook-napi')` in a try/catch with a retry. That is right at runtime,
because a machine without Accessibility permission should still get a pet, and
misleading during an upgrade: a native module that fails to load under a new ABI
leaves an app that boots, renders, passes every test, and has quietly stopped
reacting to typing and scrolling. `npm run test:boot` cannot catch it, because a
pet that never kneads still draws a perfectly good frame.

So the check is now a thing you can run: `npm run check:hook` loads the module
inside the main process, checks the API surface, calls start(), waits for the
hook thread to fall over on its own, and stops. On 44 (ABI 149, Node 24.18.1) it
loads, starts and stops clean. It stays out of CI on purpose, since a headless
Linux runner has no input to hook and a macOS runner cannot grant itself the
Accessibility permission, so it would fail for reasons that say nothing about
the upgrade.

Also verified locally: 214 tests, lint, `npm run test:boot`, and `npm run pack`
producing a Windows build against 44 and electron-builder 26.15.3.

What is left is the part no script can see, and it needs eyes on a desktop:
always-on-top over a fullscreen window, clicks passing through to what is
underneath, the tray menu, and the same on macOS Spaces. Nothing ships from this
commit either way, since releases are cut from a tag, not from main.
@vercel

vercel Bot commented Aug 28, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
pixelcat Ready Ready Preview Aug 28, 2026 3:29am

@JOhnsonKC201
JOhnsonKC201 merged commit 23825f4 into main Aug 28, 2026
5 checks passed
@JOhnsonKC201
JOhnsonKC201 deleted the chore/electron-44 branch August 28, 2026 03:30
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