SaneBar Scripts

July 2, 2026 · View on GitHub

Canonical checked-in path is Scripts/ with a capital S. Use ./Scripts/... in repo docs and commands; lowercase may work on default macOS volumes but is not portable.

Everyday Commands

These work for everyone on a fresh clone (no private infrastructure needed):

./Scripts/SaneMaster.rb verify     # Build + unit tests
./Scripts/SaneMaster.rb test_mode  # Kill -> Build -> Launch -> Logs
./Scripts/SaneMaster.rb launch    # Build and run
./Scripts/SaneMaster.rb build     # Build only
./Scripts/SaneMaster.rb test      # Tests only

SaneMaster.rb delegates to private SaneApps infrastructure when it exists (maintainers only) and otherwise falls back to SaneMaster_standalone.rb, which wraps plain xcodebuild. Only the verbs above exist in standalone mode.

Note: SaneBar launches in ProdDebug mode by default because some machines fail to render the menu bar item reliably from unsigned Debug launches out of DerivedData.

Project-Specific Scripts

ScriptPurpose
SaneMaster.rbBuild/test/launch dispatcher: uses private SaneApps infra when available, falls back to standalone mode
SaneMaster_standalone.rbMinimal standalone build/test helper (plain xcodebuild) for contributors
button_map.rbMap all UI controls and their handlers — great for finding where a setting is wired
sanebar_logwatch.shStream live app logs with the right predicate
uninstall_sanebar.shClean uninstall (remove prefs, login items)
qa.rbMaintainer-only. Pre-release QA gates (guardrails, doc checks, runtime smokes)
customer_ui_action_sweep.rbMaintainer-only. Customer-facing action receipt sweep used as release proof
live_zone_smoke.rbMaintainer-only. Live browse + move smoke against a running build
startup_layout_probe.rbMaintainer-only. Relaunch probe for startup/layout recovery (live-anchor checks)
wake_layout_probe.rbMaintainer-only. Wake/display recovery probe for hidden-state drift and the live-anchor structural recovery contract
marketing_screenshots.rbMaintainer-only. Regenerates website/onboarding screenshots — writes into the live website root docs/images/; do not run casually

About the Maintainer-Only Release Tooling

The scripts marked maintainer-only were the pre-sunset release pipeline for the ZIP-first direct-download/Sparkle channel. They are kept for reference and for anyone reviving a full release process, but they hard-depend on private SaneApps infrastructure and the original maintainer's build machines — they will refuse to run (or fail loudly) on a fresh clone. Nothing about building, testing, or contributing to SaneBar requires them; verify plus the Swift test suite plus the manual checklist in docs/E2E_TESTING_CHECKLIST.md is the contributor path.

Run the live browse smoke directly:

SANEBAR_SMOKE_REQUIRE_ALWAYS_HIDDEN=1 ./Scripts/live_zone_smoke.rb