String comparison caused local 1.0.3 to show "update available" when GitHub had 1.0.2, since "1.0.3" != "1.0.2". Added _is_newer() with proper semver tuple comparison so update_available is only set when the remote version is strictly greater than local. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>