fix: head-scope durable #332 review-decision locks (Closes #620) #621

Merged
sysadmin merged 1 commits from fix/issue-620-head-scoped-review-locks into master 2026-07-10 01:12:57 -05:00
Owner

Summary

Implements #620: durable #332 review-decision locks are head-scoped so a prior formal REQUEST_CHANGES on head A does not block a fresh formal review on head B of the same open PR.

Evidence: PR #619 formal APPROVE at 2429d9d… was blocked after REQUEST_CHANGES at 036b78e… with terminal review mutation already consumed in this run while the PR stayed open and cleanup was forbidden.

Behavior

Concern Behavior
New head, same open PR gitea_mark_final_review_decision / submit allowed when expected_head_sha ≠ last terminal head
Same head Still fail-closed (#332 duplicate protection)
Cross-PR Still fail-closed
Open-PR cleanup Still forbidden (#594) unless merged/closed
Assessment Reports locked_head_sha, current_pr_head_sha, stale_by_head, fresh_review_on_current_head_allowed, cleanup_allowed
History Prior terminal mutations retained with head_sha (legacy rows backfilled from ready binding)

Files

  • stale_review_decision_lock.py — head helpers + assessment fields
  • gitea_mcp_server.py — hard-stop / mark_ready / record mutation / cleanup report
  • tests/test_head_scoped_review_decision_lock.py#620 scenarios including PR #619-style legacy ledger

Validation

pytest tests/test_head_scoped_review_decision_lock.py tests/test_terminal_review_hard_stop.py tests/test_stale_review_decision_lock_cleanup.py -q  → 46 passed
pytest tests/test_mcp_server.py tests/test_review_workflow_load.py tests/test_review_workflow_boundary.py tests/test_session_state_isolation.py -q → 228 passed
git diff --check → clean

After merge

Rerun the full reviewer workflow for PR #619 from the beginning and post formal APPROVE only after fresh validation at 2429d9d….

Closes #620

## Summary Implements **#620**: durable #332 review-decision locks are **head-scoped** so a prior formal REQUEST_CHANGES on head A does not block a fresh formal review on head B of the same open PR. Evidence: PR #619 formal APPROVE at `2429d9d…` was blocked after REQUEST_CHANGES at `036b78e…` with `terminal review mutation already consumed in this run` while the PR stayed open and cleanup was forbidden. ## Behavior | Concern | Behavior | |---------|----------| | New head, same open PR | `gitea_mark_final_review_decision` / submit allowed when `expected_head_sha` ≠ last terminal head | | Same head | Still fail-closed (#332 duplicate protection) | | Cross-PR | Still fail-closed | | Open-PR cleanup | Still forbidden (#594) unless merged/closed | | Assessment | Reports `locked_head_sha`, `current_pr_head_sha`, `stale_by_head`, `fresh_review_on_current_head_allowed`, `cleanup_allowed` | | History | Prior terminal mutations retained with `head_sha` (legacy rows backfilled from ready binding) | ## Files - `stale_review_decision_lock.py` — head helpers + assessment fields - `gitea_mcp_server.py` — hard-stop / mark_ready / record mutation / cleanup report - `tests/test_head_scoped_review_decision_lock.py` — #620 scenarios including PR #619-style legacy ledger ## Validation ```text pytest tests/test_head_scoped_review_decision_lock.py tests/test_terminal_review_hard_stop.py tests/test_stale_review_decision_lock_cleanup.py -q → 46 passed pytest tests/test_mcp_server.py tests/test_review_workflow_load.py tests/test_review_workflow_boundary.py tests/test_session_state_isolation.py -q → 228 passed git diff --check → clean ``` ## After merge Rerun the full reviewer workflow for PR #619 from the beginning and post formal APPROVE only after fresh validation at `2429d9d…`. Closes #620
jcwalker3 added 1 commit 2026-07-10 00:04:53 -05:00
Prior REQUEST_CHANGES on head A no longer blocks formal re-review on
head B of the same open PR. Locks store reviewed head SHA, hard-stop and
mark_ready/submit gates allow a fresh decision boundary when the live
head differs, and same-head duplicates remain fail-closed. Open-PR lock
cleanup stays forbidden (#594); assessment reports locked vs current
head and stale_by_head / fresh_review_on_current_head_allowed.

Closes #620
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #621
issue: #620
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 43087-38e2900786d9
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr621-9e1d5c5
phase: claimed
candidate_head: 9e1d5c5649
target_branch: master
target_branch_sha: 08c3488d7c
last_activity: 2026-07-10T05:26:33Z
expires_at: 2026-07-10T07:26:33Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #621 issue: #620 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 43087-38e2900786d9 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr621-9e1d5c5 phase: claimed candidate_head: 9e1d5c56498bce0388075459a66f2248c0991ab5 target_branch: master target_branch_sha: 08c3488d7c35ba27efcd5119514aeeac37b657f7 last_activity: 2026-07-10T05:26:33Z expires_at: 2026-07-10T07:26:33Z blocker: none
sysadmin merged commit d8b2b8f1a7 into master 2026-07-10 01:12:57 -05:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

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