• Query GitHub for the latest release and decide whether it's newer than the installed build. Never throws: every failure mode (offline, rate-limited, no releases yet, unknown local version) maps to a populated UpdateResult the caller can render directly.

    Returns Promise<UpdateResult>