Skip to content

Refuse to build a macOS bundle with no engine - #244

Merged
iamfatness merged 1 commit into
mainfrom
fix/bundle-requires-engine
Sep 5, 2026
Merged

Refuse to build a macOS bundle with no engine#244
iamfatness merged 1 commit into
mainfrom
fix/bundle-requires-engine

Conversation

@iamfatness

Copy link
Copy Markdown
Owner

The defect

if [ -f "$BUILD_DIR/ZoomObsEngine" ] in scripts/make-macos-bundle.sh had no else. A build directory without the engine silently produced a plugin-only bundle.

That bundle looks correct in every way that is easy to check — it loads into OBS, the dock appears, the sources appear — and then cannot join a meeting, because the process that links the Zoom SDK isn't in it.

How it surfaced

Building a macOS test bundle on 2026-09-05 with BUILD_ZOOM_ENGINE accidentally omitted. The result came out at 2.3 MB instead of 613 MB and was installed before the size difference was noticed. Had it not been caught, it would have burned a live-meeting test session on a build that could never have worked.

The requirement was already written down — in this script's own comments, and in release-macos.yml ("a release bundle without the engine would…"). It had simply never been enforced anywhere. A requirement stated only in prose is not a requirement.

The change

  • Missing engine is now exit 3, naming both the cause and the fix.
  • --no-engine is the explicit opt-out for the genuine plugin-only case, so the escape hatch must be asked for rather than being the silent default.

Verification

Tested against a build dir containing no ZoomObsEngine: exit 3 without the flag, success with it. Help text lists the flag.

Worth recording that the first attempt at this test was invalid — it ran against a build dir that turned out to have an engine, so it could not have failed either way. The guard was only actually proven once a genuine no-engine directory was constructed.

🤖 Generated with Claude Code

The `if [ -f "$BUILD_DIR/ZoomObsEngine" ]` had no `else`, so a build dir
without the engine silently produced a plugin-only bundle. It looks correct --
it loads into OBS, the dock appears, the sources appear -- and then cannot join
a meeting, because the process that links the Zoom SDK is not in it.

Caught 2026-09-05 the obvious way: a bundle configured without
BUILD_ZOOM_ENGINE came out at 2.3 MB instead of 613 MB and was installed
before anyone noticed the difference. The requirement was already written down
in this script's own comments and in release-macos.yml ("a release bundle
without the engine would..."); it had simply never been enforced, which is the
entire failure. A requirement stated only in prose is not a requirement.

Missing engine is now exit 3 with the cause and the fix. --no-engine is the
explicit opt-out for the rare plugin-only case, so the escape hatch has to be
asked for rather than being the silent default.

Verified both paths against a build dir with no ZoomObsEngine: exit 3 without
the flag, success with it. (The first attempt at this test was invalid -- it
ran against a build dir that turned out to HAVE an engine, so it could not have
failed either way.)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@iamfatness
iamfatness merged commit 875335d into main Sep 5, 2026
13 checks passed
@iamfatness
iamfatness deleted the fix/bundle-requires-engine branch September 5, 2026 17:23
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