Reviewer lease release must supersede prior claimed markers (newest-wins) #577

Closed
opened 2026-07-09 09:07:24 -05:00 by jcwalker3 · 1 comment
Owner

Problem

gitea_release_reviewer_pr_lease posts a terminal phase: released marker, but find_active_reviewer_lease still returns older non-terminal claimed markers on the same PR thread.

Observed effect: after a successful release, author conflict-fix push stays blocked with active reviewer lease on PR #N (phase=claimed) pointing at the pre-release claim comment.

Repro (unit-level)

  1. Post claim lease comment (phase: claimed).
  2. Post release lease comment (phase: released).
  3. find_active_reviewer_lease returns the claimed entry instead of None.

Expected

Append-only lease markers are a ledger: the newest marker for a PR is authoritative.

  • Newest released / done / blocked → no active lease.
  • Newest claimed / validating / etc. → that lease is active.

Scope

  • Fix find_active_reviewer_lease in reviewer_pr_lease.py.
  • Add regression tests for claim-then-release and re-claim after release.
  • Do not change lease TTL or acquisition policy beyond newest-wins semantics.

Acceptance

  • After claim + release comments, find_active_reviewer_lease returns None.
  • After claim + release + new claim, newest claim is active.
  • Existing two-reviewer-same-PR acquire fail-closed still holds when newest is claimed by another session.
  • Targeted lease tests pass.
## Problem `gitea_release_reviewer_pr_lease` posts a terminal `phase: released` marker, but `find_active_reviewer_lease` still returns older non-terminal `claimed` markers on the same PR thread. Observed effect: after a successful release, author conflict-fix push stays blocked with `active reviewer lease on PR #N (phase=claimed)` pointing at the pre-release claim comment. ## Repro (unit-level) 1. Post claim lease comment (`phase: claimed`). 2. Post release lease comment (`phase: released`). 3. `find_active_reviewer_lease` returns the claimed entry instead of `None`. ## Expected Append-only lease markers are a ledger: **the newest marker for a PR is authoritative**. - Newest `released` / `done` / `blocked` → no active lease. - Newest `claimed` / `validating` / etc. → that lease is active. ## Scope - Fix `find_active_reviewer_lease` in `reviewer_pr_lease.py`. - Add regression tests for claim-then-release and re-claim after release. - Do not change lease TTL or acquisition policy beyond newest-wins semantics. ## Acceptance - After claim + release comments, `find_active_reviewer_lease` returns `None`. - After claim + release + new claim, newest claim is active. - Existing two-reviewer-same-PR acquire fail-closed still holds when newest is claimed by another session. - Targeted lease tests pass.
jcwalker3 added the bugmcpworkflowstatus:in-progress labels 2026-07-09 09:08:00 -05:00
Author
Owner

Issue claim heartbeat

<!-- gitea-issue-claim-heartbeat:v1 --> **Issue claim heartbeat** - kind: claim - issue: #577 - branch: fix/issue-577-reviewer-lease-newest-wins - phase: claimed - profile: prgs-author - pr: none - blocker: none - next_action: create worktree and begin implementation
jcwalker3 added status:pr-open and removed status:in-progress labels 2026-07-09 09:15:59 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Scaled-Tech-Consulting/Gitea-Tools#577