Skip to content

strut desktop: refuse quarantined downloads, list every binary to sign - #1668

Merged
Evanfeenstra merged 1 commit into
mainfrom
strut-desktop-gatekeeper
Sep 9, 2026
Merged

strut desktop: refuse quarantined downloads, list every binary to sign#1668
Evanfeenstra merged 1 commit into
mainfrom
strut-desktop-gatekeeper

Conversation

@Evanfeenstra

Copy link
Copy Markdown
Collaborator

Found while testing the release tarball the way a mac dev would receive it.

  • Gatekeeper hang. A browser-downloaded tarball is quarantined and Archive Utility marks every extracted file. dlopen of the ad-hoc-signed sherpa-onnx.node then blocks the whole Node process on a "developer cannot be verified" prompt: the ready line prints, and every HTTP request hangs (reproduced: /health timed out, node process alive). The strut wrapper now detects com.apple.quarantine on the sherpa package and exits 1 with xattr -dr com.apple.quarantine <dir> instead. Verified: quarantined → refusal message; cleared → boots with available: true. A curl download has no quarantine; a signed, notarized app bundle has no prompt.
  • Four binaries to sign, not one. The report only walked .node; libonnxruntime.dylib, libsherpa-onnx-c-api.dylib, libsherpa-onnx-cxx-api.dylib sit beside it, all ad-hoc signed as shipped. Now lists .node/.dylib/.so/.dll.
  • Docs: §0 of native-dictation-client.md and §2.3/§5 of local-desktop-and-stt.md updated.

Unrelated to the above but relevant to the release: the strut-v0.1.0 tag still points at a57bf3e6 (before the yarn.lock fix in #1667), so both tag runs failed at install and the release has no assets. After this merges, re-point the tag to main:

git tag -d strut-v0.1.0 && git push origin :refs/tags/strut-v0.1.0 && git tag strut-v0.1.0 origin/main && git push origin strut-v0.1.0

Testing the release tarball as a browser download would arrive: macOS
quarantines every extracted file, and dlopen of the ad-hoc-signed sherpa
addon then blocks the whole Node process on a Gatekeeper prompt — strut
prints its ready line and every request hangs. The `strut` wrapper now
detects quarantine on the sherpa package and exits with the one-line fix
(`xattr -dr com.apple.quarantine <dir>`) instead.

The packaging report listed only the `.node`; the three dylibs beside it
(libonnxruntime, libsherpa-onnx-c-api, libsherpa-onnx-cxx-api) must be
signed and notarized in the app bundle too. It now lists .node/.dylib/.so/.dll.
Docs updated for both.
@Evanfeenstra
Evanfeenstra merged commit 8386601 into main Sep 9, 2026
6 checks 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.

1 participant