{"record":{"id":"5a53e44273ce1ae7","repo":"stablyai/orca","slug":"missing-orca-notification-status-helper-at-helpe","errorCode":null,"errorMessage":"Missing orca-notification-status helper at ${helperPath}","messagePattern":"Missing orca-notification-status helper at (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"config/electron-builder.config.cjs","lineNumber":577,"sourceCode":"    process.env.ORCA_COMPUTER_MACOS_SIGN_IDENTITY ??\n    process.env.CSC_NAME ??\n    findInstalledMacSigningIdentity(codeSigningInfo?.keychainFile) ??\n    (isMacRelease ? null : '-')\n  if (!identity) {\n    throw new Error('Missing signing identity for Orca Computer Use helper app')\n  }\n  // Why: TCC grants attach to this nested app's code identity. Sign it before\n  // the outer Orca.app is sealed so production builds preserve that identity.\n  execFileSync('codesign', codesignArgs(identity, helperAppPath), { stdio: 'inherit' })\n  execFileSync('codesign', ['--verify', '--deep', '--strict', helperAppPath], {\n    stdio: 'inherit'\n  })\n}\n\nasync function signMacNotificationStatusHelper(helperPath, packager) {\n  if (!existsSync(helperPath)) {\n    if (isMacRelease) {\n      throw new Error(`Missing orca-notification-status helper at ${helperPath}`)\n    }\n    return\n  }\n  const codeSigningInfo =\n    isMacRelease && process.env.CSC_LINK && packager?.codeSigningInfo?.value\n      ? await packager.codeSigningInfo.value\n      : null\n  const identity =\n    process.env.CSC_NAME ??\n    findInstalledMacSigningIdentity(codeSigningInfo?.keychainFile) ??\n    (isMacRelease ? null : '-')\n  if (!identity) {\n    throw new Error('Missing signing identity for orca-notification-status helper')\n  }\n  // Why: macOS keys notification records to the code-signing identifier; the\n  // binary embeds the app's CFBundleIdentifier in __TEXT,__info_plist so this\n  // (and any later) `codesign --force` derives the correct identifier. Sign\n  // before the outer Orca.app is sealed, like the computer-use helper.","sourceCodeStart":559,"sourceCodeEnd":595,"githubUrl":"https://github.com/stablyai/orca/blob/1136503c6a231a16dce8f921f6fadb63d181e8db/config/electron-builder.config.cjs#L559-L595","documentation":"In the macOS afterPack signing step, `signMacNotificationStatusHelper` checks for the 'orca-notification-status' binary at `Contents/MacOS/orca-notification-status` (relative to the .app). If it doesn't exist and this is a Mac release build, the build fails. This helper handles macOS notification state and must execute from Contents/MacOS (per issue #7929 — UNUserNotificationCenter aborts for executables in Contents/Resources on macOS 26).","triggerScenarios":"The native/notification-status-macos build step (a Rust project) did not produce the binary before electron-builder ran. The extraFiles mapping at electron-builder.config.cjs:398 has a wrong `from` path. Building on a machine without Rust toolchain. The `.build/release/orca-notification-status` output doesn't exist.","commonSituations":"Running electron-builder without building native/notification-status-macos first. CI step ordering where native builds haven't completed. Clean checkout without native build artifacts. Renaming the binary output in the native project.","solutions":["Build the notification-status helper: run `cargo build --release` in `native/notification-status-macos` to produce `.build/release/orca-notification-status`.","Verify the extraFiles mapping at electron-builder.config.cjs:400 — `from: 'native/notification-status-macos/.build/release/orca-notification-status'` must match the actual build output.","Ensure CI pipeline builds all native macOS helpers before the electron-builder packaging step.","For non-release local builds, ensure ORCA_MAC_RELEASE is not set to 1 so the guard skips."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Verify the notification-status helper exists before packaging\nimport { existsSync } from 'fs'\nfunction assertNotificationStatusHelperExists() {\n  const helperPath = 'native/notification-status-macos/.build/release/orca-notification-status'\n  if (!existsSync(helperPath)) {\n    throw new Error(`Build the helper first: cd native/notification-status-macos && cargo build --release`)\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Build native/notification-status-macos before electron-builder packaging.","Verify the extraFiles `from` path at electron-builder.config.cjs:400 matches the build output.","Add native build steps as prerequisites in the CI pipeline before packaging."],"tags":["electron-builder","macos","code-signing","native-build","notifications","packaging"],"backgroundTag":null,"analyzedSha":"1136503c6a231a16dce8f921f6fadb63d181e8db","analyzedAt":"2026-08-12T23:15:58.167Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}