A static versionName only matches a release tag if someone remembers to bump it first — nothing enforces that, so they drift. versionName now comes from `git describe --tags` (the tag itself when built exactly on a tagged commit, otherwise the usual git-describe dev form), and versionCode from commit count. Cutting a release is now just tagging a commit; there's nothing left to hand-edit. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>