Skip to content

Show "Ness" instead of "harness" in the macOS app menu - #300

Merged
frenchie4111 merged 1 commit into
ness-dev:mainfrom
blindpirate:fix/app-menu-says-harness
Aug 27, 2026
Merged

Show "Ness" instead of "harness" in the macOS app menu#300
frenchie4111 merged 1 commit into
ness-dev:mainfrom
blindpirate:fix/app-menu-says-harness

Conversation

@blindpirate

Copy link
Copy Markdown
Contributor

Problem

The macOS app menu's items read "About harness", "Hide harness", and "Quit harness".

The menu bar title is already correct ("Ness") because macOS takes that from CFBundleName, which electron-builder sets from build.productName. But the submenu items come from app.name, which Electron derives from package.json's top-level "name" — still "harness".

Why not just rename the package

package.json's "name": "harness" is load-bearing, and CLAUDE.md documents it. app.getName() keys both:

  • the userData directory (~/Library/Application Support/harness), and
  • the macOS Safe Storage keychain item (service harness Safe Storage, account harness Key).

The filesystem is case-insensitive but the keychain is not, so renaming the package — or calling app.setName('Ness') at boot — would break safeStorage decryption of secrets.enc (GitHub PAT, backend tokens) with "A keychain can not be found to store …". Same reasoning that keeps build.appId at org.mikelyons.harness.

So the fix is explicit labels, not a rename.

The change

All in src/main/desktop-shell.ts:

  • New module-level APP_DISPLAY_NAME = 'Ness' constant, with a "why" comment noting it is deliberately not app.name.
  • buildMenu(): explicit labels on about, hide, and Quit (and the app-menu label, which macOS ignores in favor of CFBundleName but is kept consistent). hideOthers / unhide need no change — they render "Hide Others" / "Show All" with no app name.
  • app.setAboutPanelOptions({ applicationName, applicationVersion }) on darwin at ready, so the About dialog behind the menu item stops showing "harness" too.

No behavior outside the menu changes; app.name is untouched everywhere it matters (paths, keychain).

Verification

  • npm run typecheck — clean
  • npx electron-vite build — clean
  • npx vitest run — 2987 tests / 227 files pass
  • Menu confirmed visually by @blindpirate in a dev build

One note for reviewers: this machine's C++ toolchain can't build node-pty (a bare #include <functional> fails system-wide), so the dev app runs but PTY spawns fail with posix_spawnp failed. That's a pre-existing local environment issue, unrelated to this change, and it doesn't affect the menu.

PR opened on behalf of @blindpirate by Claude via Ness.

The app menu's About / Hide / Quit items read "harness" because they
derive from app.name, which Electron takes from package.json's top-level
"name" — still "harness". The menu bar title is already correct since
macOS reads that from CFBundleName (build.productName).

Renaming the package or calling app.setName() is not an option: app.name
keys both the userData directory and the macOS Safe Storage keychain
item, and the keychain is case-sensitive, so either would break
secrets.enc decryption. Instead, set explicit labels from a new
APP_DISPLAY_NAME constant, and set the About panel's applicationName so
the dialog behind the About item matches too.
@frenchie4111
frenchie4111 self-requested a review August 27, 2026 13:10
@frenchie4111
frenchie4111 merged commit e2fa95d into ness-dev:main Aug 27, 2026
1 check passed
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