Updates
The updater is disabled for the current ad-hoc-signed release. It rejects builds that are not Developer ID signed and notarized, including v0.3.0. Until a qualifying release ships, download new versions manually from GitHub Releases.
Once signed releases are available, Zeus will use the flow below. Checks are automatic; installing an update always waits for you.
What you see
Checks run about 20 seconds after launch, then every 6 hours (toggleable in Settings → General → Updates). Downloading and restarting are not automatic:
- A background check finds a release → the sidebar footer shows an Update to … pill. Nothing else happens.
- Click it → Downloading… with progress → the bundle is verified and staged.
- Click Restart to update… → Zeus hands off to a helper and quits.
Zeus holds live agent sessions, so it never relaunches itself uninvited. ⌘K → Check for Updates… and the version row in the account popover both run a manual check and report when you are already up to date.
Trust model
There is no separate updater signing key. A downloaded bundle is accepted only if all of the following hold:
codesign --verify --deep --strictpasses.- Its Team ID and bundle identifier match the running app.
spctl --assess --type executeaccepts it (notarization for a stapled bundle, without a network round trip).- Its short version string equals the version the feed promised.
At the feed layer, only strictly newer versions are offered (no downgrades), and downloads use HTTPS to the releases host. The feed URL is stable:
https://github.com/nnayz/zeus/releases/latest/download/appcast.json
Local cache
Staging lives under:
~/Library/Caches/zeus/updates/<version>/
If the app sits somewhere the user cannot write, the writability check fails before the download starts.
Release packaging steps live in zeus/UPDATING.md
in the repository.