stablyai/orca · critical

Missing orca-notification-status helper at ${helperPath}

Error message

Missing orca-notification-status helper at ${helperPath}

What it means

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).

Source

Thrown at config/electron-builder.config.cjs:577

    process.env.ORCA_COMPUTER_MACOS_SIGN_IDENTITY ??
    process.env.CSC_NAME ??
    findInstalledMacSigningIdentity(codeSigningInfo?.keychainFile) ??
    (isMacRelease ? null : '-')
  if (!identity) {
    throw new Error('Missing signing identity for Orca Computer Use helper app')
  }
  // Why: TCC grants attach to this nested app's code identity. Sign it before
  // the outer Orca.app is sealed so production builds preserve that identity.
  execFileSync('codesign', codesignArgs(identity, helperAppPath), { stdio: 'inherit' })
  execFileSync('codesign', ['--verify', '--deep', '--strict', helperAppPath], {
    stdio: 'inherit'
  })
}

async function signMacNotificationStatusHelper(helperPath, packager) {
  if (!existsSync(helperPath)) {
    if (isMacRelease) {
      throw new Error(`Missing orca-notification-status helper at ${helperPath}`)
    }
    return
  }
  const codeSigningInfo =
    isMacRelease && process.env.CSC_LINK && packager?.codeSigningInfo?.value
      ? await packager.codeSigningInfo.value
      : null
  const identity =
    process.env.CSC_NAME ??
    findInstalledMacSigningIdentity(codeSigningInfo?.keychainFile) ??
    (isMacRelease ? null : '-')
  if (!identity) {
    throw new Error('Missing signing identity for orca-notification-status helper')
  }
  // Why: macOS keys notification records to the code-signing identifier; the
  // binary embeds the app's CFBundleIdentifier in __TEXT,__info_plist so this
  // (and any later) `codesign --force` derives the correct identifier. Sign
  // before the outer Orca.app is sealed, like the computer-use helper.

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Build the notification-status helper: run `cargo build --release` in `native/notification-status-macos` to produce `.build/release/orca-notification-status`.
  2. 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.
  3. Ensure CI pipeline builds all native macOS helpers before the electron-builder packaging step.
  4. For non-release local builds, ensure ORCA_MAC_RELEASE is not set to 1 so the guard skips.
Defensive patterns

Strategy: validation

Validate before calling

// Verify the notification-status helper exists before packaging
import { existsSync } from 'fs'
function assertNotificationStatusHelperExists() {
  const helperPath = 'native/notification-status-macos/.build/release/orca-notification-status'
  if (!existsSync(helperPath)) {
    throw new Error(`Build the helper first: cd native/notification-status-macos && cargo build --release`)
  }
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/5a53e44273ce1ae7. Report an issue: GitHub.