The lock is per-repo, scoped to the common git dir. It covers every linked worktree, but it does not protect across separate clones of the same repo: if you run releases concurrently from two different runners against two different checkouts of the same remote, the lock won't see the other side. Use a single release runner, or serialize at the CI level (concurrency: in GitHub Actions, interruptible: false in GitLab).