An update button is not an update system. If the discovery path never returns a version, every prompt, snooze rule, and installer can work perfectly while users remain stranded.
Agent Island had an updater framework in the macOS app, but its feed URL was empty. The check ran, found nothing, and failed quietly. Old installs had no in-app path to learn that a newer GitHub release existed.
This is a dangerous failure mode because it looks calm. There is no crash, broken button, or visible error. The people most affected are on the version that cannot receive the future fix.
Separate release discovery from installation
The repair in Agent Island 1.7.1 treats discovery as its own small system.
At launch, the app waits 20 seconds before checking. That delay lets session discovery and the weekly-report moment complete first. A repeating timer then checks every six hours with ten minutes of tolerance, which gives the operating system room to coalesce wakeups.
The lookup calls the repository's latest-release API with a 15-second timeout. A successful response needs an HTTP 200 and a tag_name. The leading v is removed before numeric dotted comparison, so 1.10.0 correctly sorts after 1.9.9 and unequal lengths are padded with zeros.
The API also returns the release page. The macOS update button opens that page rather than pretending the app has a verified silent-install path. Windows keeps its existing in-app download and relaunch flow, but uses the same release cadence and snooze policy.
Discovery and installation are different capabilities. Sharing the discovery rule does not require claiming that both platforms install updates the same way.
Background checks should be quiet, manual checks should answer
The automatic path has three early exits:
- automatic checks are disabled;
- the latest release cannot be fetched;
- the release is not newer or that version is snoozed.
All three produce no alert. A network failure during a background check should not interrupt the user every six hours.
The Settings action follows another contract. A person who clicks "Check now" gets an answer: a new-version prompt, an up-to-date message, or a clear failure message. The same network result can therefore be silent in the background and explicit after a user request.
That difference is small in code and important in use. Silent background failure protects attention. Silent manual failure makes the control feel broken.
Snooze the version, not the updater
The alert offers two actions on macOS: "Update" and "I know." Choosing the second stores both the release version and a date seven days in the future.
The version key matters. A user who snoozes 1.7.1 should not suppress a newly published 1.7.2 for the rest of the week. A date-only snooze would do exactly that.
It also avoids a second failure mode: repeatedly prompting for the same release at every six-hour check. The app can stay persistent without becoming noisy.
The legacy boundary cannot be patched away
The new checker ships inside 1.7.1. Versions at or below 1.6.1 do not contain it, and their old feed is still empty. Those installs cannot learn about 1.7.1 through the mechanism that only 1.7.1 introduced.
The honest migration guidance is manual download or brew upgrade for those users. Once 1.7.1 is installed, later releases can be discovered at launch and on the six-hour cadence.
Release notes often say "added update checks" without naming this bootstrap boundary. That omission creates the impression that the feature reaches every existing install. It does not.
What to test
Release polling needs more than a happy-path API mock.
Version comparison should cover unequal segment lengths and double-digit components. The checker should ignore the installed version, older releases, malformed JSON, non-200 responses, and timeouts. Snoozing should block only the stored version and expire after its deadline. The automatic setting must gate background checks without disabling the user's manual command.
The presentation layer also needs a single-alert guard. Two checks that complete together should not stack modal prompts.
Finally, test the claim you make about each platform. A shared API lookup does not prove a shared installer, signing path, or relaunch behavior.
A delivery system includes the stranded version
The technical work here is modest: one API request, a timer, version comparison, and two user-default keys. The operational lesson is larger.
Update systems have a bootstrap problem. The release that repairs discovery cannot use the repaired discovery path to reach users who do not have it. Product copy, support guidance, and channel updates must carry that gap until the old population has moved forward.
Agent Island 1.7.1 is available as a macOS DMG and Windows x64 ZIP. It is free and MIT licensed. Users on older macOS builds need one manual update before in-app release discovery begins working.