fix: remove safe worktrees before reassessing remote delete ownership (#851) #852

Merged
sysadmin merged 1 commits from fix/issue-851-cleanup-worktree-before-remote-delete into master 2026-07-23 17:06:26 -05:00
Owner

Closes #851

Summary

Fixes the post-merge cleanup control-flow defect demonstrated by PR #848 / issue #844.

gitea_reconcile_merged_cleanups previously used continue when remote branch deletion was blocked by active ownership (including worktree_binding). That skipped remove_local_worktree even when the worktree was independently clean and safe to remove, leaving both the worktree and the remote branch stranded.

Lifecycle fix

When a target worktree is independently safe to remove:

  1. Remove the clean owned worktree first
  2. Reassess branch ownership afterward
  3. Delete the remote branch only if it is then independently safe

Fail-closed ownership protection for remote deletion is preserved. Dirty or foreign worktrees and other ownership categories still block unsafe cleanup.

Tests

  • Plan order: worktree then reassess then remote (and remote-only / worktree-only variants)
  • Execute: safe worktree removed; remote deleted after reassessment; foreign author lease still blocked
  • Dirty worktree not removed; remote remains protected by worktree_binding
  • Idempotent resume when worktree already absent
  • Existing O4 ownership/readback coverage still passes

Evidence (local)

PYTHONPATH=. PYTEST_CURRENT_TEST=1 venv/bin/python -m unittest \
  tests.test_merged_cleanup_reconcile.TestMergedCleanupAssessment.test_issue_851_* \
  tests.test_branch_cleanup_guard.TestSecondRemediationIntegration.test_issue_851_* \
  tests.test_branch_cleanup_guard.TestSecondRemediationIntegration.test_o4_reconcile_merged_cleanups_runs_ownership_and_readback -v
# 8 passed

Non-goals

Closes #851 ## Summary Fixes the post-merge cleanup control-flow defect demonstrated by PR #848 / issue #844. `gitea_reconcile_merged_cleanups` previously used `continue` when remote branch deletion was blocked by active ownership (including `worktree_binding`). That skipped `remove_local_worktree` even when the worktree was independently clean and safe to remove, leaving both the worktree and the remote branch stranded. ## Lifecycle fix When a target worktree is independently safe to remove: 1. Remove the clean owned worktree first 2. Reassess branch ownership afterward 3. Delete the remote branch only if it is then independently safe Fail-closed ownership protection for remote deletion is preserved. Dirty or foreign worktrees and other ownership categories still block unsafe cleanup. ## Tests - Plan order: worktree then reassess then remote (and remote-only / worktree-only variants) - Execute: safe worktree removed; remote deleted after reassessment; foreign author lease still blocked - Dirty worktree not removed; remote remains protected by `worktree_binding` - Idempotent resume when worktree already absent - Existing O4 ownership/readback coverage still passes ## Evidence (local) ``` PYTHONPATH=. PYTEST_CURRENT_TEST=1 venv/bin/python -m unittest \ tests.test_merged_cleanup_reconcile.TestMergedCleanupAssessment.test_issue_851_* \ tests.test_branch_cleanup_guard.TestSecondRemediationIntegration.test_issue_851_* \ tests.test_branch_cleanup_guard.TestSecondRemediationIntegration.test_o4_reconcile_merged_cleanups_runs_ownership_and_readback -v # 8 passed ``` ## Non-goals - Does not manually clean PR #848 - Does not touch PRs #845, #846, or #849 - Does not weaken remote-delete ownership gates
jcwalker3 added 1 commit 2026-07-23 15:42:54 -05:00
Post-merge cleanup previously continued past ownership-blocked remote
deletes, which skipped independently safe local worktree removal when the
only block was worktree_binding. Remove the clean owned worktree first,
reassess ownership, then delete the remote branch only if still safe.
Preserve fail-closed protection for dirty/foreign ownership categories.

Closes #851

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #852
issue: #851
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 2731-aaa35b21c1e3
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-852
phase: claimed
candidate_head: df58b5fb90
target_branch: master
target_branch_sha: none
last_activity: 2026-07-23T21:21:22Z
expires_at: 2026-07-23T21:31:22Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #852 issue: #851 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 2731-aaa35b21c1e3 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-852 phase: claimed candidate_head: df58b5fb909c75bffc60b3b5237fce7176799da4 target_branch: master target_branch_sha: none last_activity: 2026-07-23T21:21:22Z expires_at: 2026-07-23T21:31:22Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #852
issue: #851
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 2731-aaa35b21c1e3
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-852
phase: released
candidate_head: df58b5fb90
target_branch: master
target_branch_sha: none
last_activity: 2026-07-23T21:58:21Z
expires_at: 2026-07-23T22:08:21Z
blocker: obsolete-superseded-or-expired-lease

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #852 issue: #851 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 2731-aaa35b21c1e3 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-852 phase: released candidate_head: df58b5fb909c75bffc60b3b5237fce7176799da4 target_branch: master target_branch_sha: none last_activity: 2026-07-23T21:58:21Z expires_at: 2026-07-23T22:08:21Z blocker: obsolete-superseded-or-expired-lease
Owner

Canonical obsolete reviewer lease cleanup (#691)

## Canonical obsolete reviewer lease cleanup (#691) - pr: #852 - lease_comment_id: 15001 - session_id: 2731-aaa35b21c1e3 - leased_head: df58b5fb909c75bffc60b3b5237fce7176799da4 - current_head: df58b5fb909c75bffc60b3b5237fce7176799da4 - expires_at: 2026-07-23T21:31:22Z - classification: orphaned_owner_missing - terminal_review_verdict: None - tool: gitea_cleanup_obsolete_reviewer_comment_lease - action: posted terminal phase=released lease marker; did not transfer validation, decision, or workflow proof; did not repoint lease to the new head; did not delete history
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #852
issue: #851
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 96242-dbe7e0155f0c
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-852
phase: claimed
candidate_head: df58b5fb90
target_branch: master
target_branch_sha: b70d5f3efa
last_activity: 2026-07-23T21:59:12Z
expires_at: 2026-07-23T22:09:12Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #852 issue: #851 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 96242-dbe7e0155f0c worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-852 phase: claimed candidate_head: df58b5fb909c75bffc60b3b5237fce7176799da4 target_branch: master target_branch_sha: b70d5f3efa410a7a8acdd3ddaa1778f4dd4e64e9 last_activity: 2026-07-23T21:59:12Z expires_at: 2026-07-23T22:09:12Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #852
issue: #851
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 96242-dbe7e0155f0c
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-852
phase: ready_to_submit
candidate_head: df58b5fb90
target_branch: master
target_branch_sha: b70d5f3efa
last_activity: 2026-07-23T22:00:03Z
expires_at: 2026-07-23T22:10:03Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #852 issue: #851 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 96242-dbe7e0155f0c worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-852 phase: ready_to_submit candidate_head: df58b5fb909c75bffc60b3b5237fce7176799da4 target_branch: master target_branch_sha: b70d5f3efa410a7a8acdd3ddaa1778f4dd4e64e9 last_activity: 2026-07-23T22:00:03Z expires_at: 2026-07-23T22:10:03Z blocker: none
sysadmin approved these changes 2026-07-23 17:01:50 -05:00
sysadmin left a comment
Owner

Canonical PR State

STATE: ready-to-merge
WHO_IS_NEXT: merger
NEXT_ACTION: Merger session must re-verify approval_at_current_head, acquire/adopt merger lease, and merge only with separate explicit authorization (MERGE PR 852).
NEXT_PROMPT:

Act as gitea-merger only for PR #852 (prgs / Scaled-Tech-Consulting/Gitea-Tools).
Expected head: df58b5fb909c75bffc60b3b5237fce7176799da4
Issue: #851
Reviewer approved at this head. Merge only with explicit operator authorization.
Do not review as author. Do not clean PR #848. Do not touch #845/#846/#849.

WHAT_HAPPENED: Independent reviewer completed validation (8/8 focused tests) and code review with no findings at head df58b5fb90. Prior reviewer lease 2731-aaa35b21c1e3/comment 15001 was expired/orphaned and neutralized via sanctioned obsolete-lease cleanup. Fresh reviewer lease acquired; APPROVE submitted via native MCP resume path.
WHY: Scope matches #851; lifecycle fix is correct; fail-closed ownership gates preserved; validation green at pinned head.
ISSUE: #851
HEAD_SHA: df58b5fb90
REVIEW_STATUS: approved / approval_at_current_head
MERGE_READY: true
BLOCKERS: none for review; merge requires separate explicit operator authorization
VALIDATION: 8 focused unit tests passed (prior session); no code findings; head revalidated live this session at df58b5fb90
NATIVE_REVIEW_PROOF: transport=native_mcp; entrypoint=mcp_server; token_fingerprint=c648424847b7c2e4
LAST_UPDATED_BY: sysadmin (prgs-reviewer)

Review summary

APPROVE at df58b5fb90.

## Canonical PR State STATE: ready-to-merge WHO_IS_NEXT: merger NEXT_ACTION: Merger session must re-verify approval_at_current_head, acquire/adopt merger lease, and merge only with separate explicit authorization (MERGE PR 852). NEXT_PROMPT: ```text Act as gitea-merger only for PR #852 (prgs / Scaled-Tech-Consulting/Gitea-Tools). Expected head: df58b5fb909c75bffc60b3b5237fce7176799da4 Issue: #851 Reviewer approved at this head. Merge only with explicit operator authorization. Do not review as author. Do not clean PR #848. Do not touch #845/#846/#849. ``` WHAT_HAPPENED: Independent reviewer completed validation (8/8 focused tests) and code review with no findings at head df58b5fb909c75bffc60b3b5237fce7176799da4. Prior reviewer lease 2731-aaa35b21c1e3/comment 15001 was expired/orphaned and neutralized via sanctioned obsolete-lease cleanup. Fresh reviewer lease acquired; APPROVE submitted via native MCP resume path. WHY: Scope matches #851; lifecycle fix is correct; fail-closed ownership gates preserved; validation green at pinned head. ISSUE: #851 HEAD_SHA: df58b5fb909c75bffc60b3b5237fce7176799da4 REVIEW_STATUS: approved / approval_at_current_head MERGE_READY: true BLOCKERS: none for review; merge requires separate explicit operator authorization VALIDATION: 8 focused unit tests passed (prior session); no code findings; head revalidated live this session at df58b5fb909c75bffc60b3b5237fce7176799da4 NATIVE_REVIEW_PROOF: transport=native_mcp; entrypoint=mcp_server; token_fingerprint=c648424847b7c2e4 LAST_UPDATED_BY: sysadmin (prgs-reviewer) ## Review summary APPROVE at df58b5fb909c75bffc60b3b5237fce7176799da4. - Closes #851 - Base: master - Author: jcwalker3 (distinct from reviewer sysadmin) - Prior validation: 8/8 focused tests; no code findings - WHO_IS_NEXT: merger
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #852
issue: #851
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 96242-dbe7e0155f0c
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-852
phase: released
candidate_head: df58b5fb90
target_branch: master
target_branch_sha: b70d5f3efa
last_activity: 2026-07-23T22:02:16Z
expires_at: 2026-07-23T22:12:16Z
blocker: manual-release

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #852 issue: #851 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 96242-dbe7e0155f0c worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-852 phase: released candidate_head: df58b5fb909c75bffc60b3b5237fce7176799da4 target_branch: master target_branch_sha: b70d5f3efa410a7a8acdd3ddaa1778f4dd4e64e9 last_activity: 2026-07-23T22:02:16Z expires_at: 2026-07-23T22:12:16Z blocker: manual-release
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #852
issue: #851
reviewer_identity: sysadmin
profile: prgs-merger
session_id: 18588-3a3eae534fec
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/merge-pr-852
phase: claimed
candidate_head: df58b5fb90
target_branch: master
target_branch_sha: db5ed6042b
last_activity: 2026-07-23T22:06:07Z
expires_at: 2026-07-23T22:16:07Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #852 issue: #851 reviewer_identity: sysadmin profile: prgs-merger session_id: 18588-3a3eae534fec worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/merge-pr-852 phase: claimed candidate_head: df58b5fb909c75bffc60b3b5237fce7176799da4 target_branch: master target_branch_sha: db5ed6042bfc86be17cb3f44bc3d6e3404c7590a last_activity: 2026-07-23T22:06:07Z expires_at: 2026-07-23T22:16:07Z blocker: none
sysadmin merged commit 188e83c4d6 into master 2026-07-23 17:06:26 -05:00
Owner

Stale #332 review-decision lock cleanup (#594)

Status: APPLIED

Manual deletion of session-state files is not the workflow.
This path only clears a lock when the referenced PR is merged/closed.

## Stale #332 review-decision lock cleanup (#594) Status: **APPLIED** - actor: `sysadmin` - profile: `prgs-merger` - timestamp: `2026-07-23T22:06:27.842372+00:00` - last terminal: `approve` on PR #852 - PR state: `closed` (merged=True) - merge_commit_sha: `188e83c4d69bfb959c91b1f8e766ab8a0656d92d` - prior live_mutations_count: `3` - prior profile_identity: `prgs-reviewer` Manual deletion of session-state files is **not** the workflow. This path only clears a lock when the referenced PR is merged/closed.
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#852