• christian released this 2026-09-24 12:50:24 -04:00 | 13 commits to main since this release

    The update installs itself. One button: Download and install.

    Downloading and then asking the operator to quit, mount a disk image and drag the app across was the friction the updater was meant to remove. Now it downloads, closes, swaps itself and reopens — about a minute and a half on a church LAN.

    How the swap is done safely

    An app cannot replace itself while it is running, so a small script outlives the process: it waits for the app to exit, moves the old bundle aside, copies the new one in, clears the quarantine flag and relaunches.

    Moved aside, not deleted. If the copy fails half way — a full disk, a truncated download, the volume going away — the old app goes straight back and is reopened. The failure this is written against is a campus Mac with no working app and a service in an hour, which is far worse than not updating.

    Tested in a sandbox across all three paths:

    result
    clean swap new app in place, no leftovers
    copy fails mid-way old app restored, no leftovers
    disk image has no app aborts before touching the installed one

    It refuses while translation is live. Quitting stops every listener's captions, and no update is worth that — press Stop translating first.

    No administrator password: /Applications is admin-writable and the bundle belongs to the operator. If that is ever untrue, the copy fails and the rollback runs.

    If the install cannot proceed for any reason, the downloaded disk image is still in Downloads and Finder opens on it, so the manual route is always available as a fallback.

    Downloads