- drop() reports a lock released once it is renamed aside, so a failed
delete of the renamed copy never makes unlock or break_lock rm -rf a new
taker's lock at .lock.
- An ownerless lock is broken only once it is 2 s old, so a live taker whose
claim landed after a breaker read the claims keeps the lock it is about to
publish. An empty owner, an invalid pid or a stray file counts as ownerless.
- touch's prune stays out of the lock (top-level lease files only) and clears
leftover renamed-aside locks; a failed claim write leaves no claim.
- Docs and CHANGELOG state the mixed-version and dead-break-lock limits
instead of claiming exclusion that does not hold.
Tests pin each fix (each fails against the previous bin), make the exclusion
case wait on a release file, prove the parallel case is mutually exclusive,
and check the Git Bash holder keeps its lock.
Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>