feat: authorized cleanup for reviewer scratch worktrees (Closes #534) #575

Merged
sysadmin merged 1 commits from feat/issue-534-reviewer-scratch-cleanup into master 2026-07-08 22:20:50 -05:00
Owner

Summary

Closes #534.

Adds an authorized cleanup path for detached reviewer scratch worktrees named review-pr<N> / review-pr<N>-submit, reported separately from author worktree cleanup.

Changes

  • merged_cleanup_reconcile.py
    • Discover reviewer scratch folders under branches/
    • Assess safe removal only when PR is merged/closed, worktree is clean, detached, and no active reviewer lease
    • remove_reviewer_scratch_worktree path-guards to scratch folders only
    • Dry-run report fields: reviewer_scratch_entries, reviewer_scratch_count
  • gitea_mcp_server.pygitea_reconcile_merged_cleanups loads leases/PR state and executes scratch removals separately from author cleanup
  • Tests covering safe/dirty/lease/open-PR cases and author-path separation

Validation

pytest tests/test_merged_cleanup_reconcile.py -q
# 18 passed

Worktree

branches/feat-issue-534-reviewer-scratch-cleanup @ e4f1a52

Self-review: no.

## Summary Closes #534. Adds an authorized cleanup path for detached reviewer scratch worktrees named `review-pr<N>` / `review-pr<N>-submit`, reported separately from author worktree cleanup. ## Changes - `merged_cleanup_reconcile.py` - Discover reviewer scratch folders under `branches/` - Assess safe removal only when PR is merged/closed, worktree is clean, detached, and no active reviewer lease - `remove_reviewer_scratch_worktree` path-guards to scratch folders only - Dry-run report fields: `reviewer_scratch_entries`, `reviewer_scratch_count` - `gitea_mcp_server.py` — `gitea_reconcile_merged_cleanups` loads leases/PR state and executes scratch removals separately from author cleanup - Tests covering safe/dirty/lease/open-PR cases and author-path separation ## Validation ```bash pytest tests/test_merged_cleanup_reconcile.py -q # 18 passed ``` ## Worktree `branches/feat-issue-534-reviewer-scratch-cleanup` @ `e4f1a52` Self-review: no.
jcwalker3 added 1 commit 2026-07-08 22:13:34 -05:00
Discover branches/review-pr<N>[-submit] worktrees separately from author
cleanup, fail closed on dirty trees / open PRs / active reviewer leases,
and remove only assessed-safe scratch paths via reconcile.
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #575
issue: #534
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 36276-19d8ac0f16b8
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-418
phase: claimed
candidate_head: e4f1a52a87
target_branch: master
target_branch_sha: none
last_activity: 2026-07-09T03:20:02Z
expires_at: 2026-07-09T05:20:02Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #575 issue: #534 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 36276-19d8ac0f16b8 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-418 phase: claimed candidate_head: e4f1a52a8771493358f5d1f7b8c48024e473be75 target_branch: master target_branch_sha: none last_activity: 2026-07-09T03:20:02Z expires_at: 2026-07-09T05:20:02Z blocker: none
sysadmin approved these changes 2026-07-08 22:20:29 -05:00
sysadmin left a comment
Owner

Review: APPROVE

PR #575 — feat: authorized cleanup for reviewer scratch worktrees (Closes #534)

Identity / eligibility

  • Reviewer: sysadmin via prgs-reviewer (not author jcwalker3)
  • Pinned head: e4f1a52a8771493358f5d1f7b8c48024e473be75 (live match)
  • Mergeable: true
  • Reviewer lease acquired for this session

Scope

Clean and matches #534 (3 files, +473/-11):

  • merged_cleanup_reconcile.py — discover/assess/remove review-pr* / review-pr*-submit scratch trees only under branches/
  • gitea_mcp_server.py — wire into gitea_reconcile_merged_cleanups separately from author cleanup
  • tests/test_merged_cleanup_reconcile.py — safe/dirty/lease/open-PR and path-guard coverage

Safety

  • Removal path-guards to direct branches/ children matching reviewer scratch names only
  • Fails closed on open PR, dirty worktree, active reviewer lease, or non-detached branch
  • Secret sweep clean

Validation

Worktree: branches/review-418 @ e4f1a52 (clean)

pytest tests/test_merged_cleanup_reconcile.py tests/test_mcp_native_cleanup_proof.py -q
# 41 passed

Decision

APPROVE at head e4f1a52. Ready for merger.

Review Metadata:

  • LLM-Agent-SHA: llm-a7c4e91f2b08
  • LLM-Role: reviewer
  • Authenticated-Gitea-User: sysadmin
  • MCP-Profile: prgs-reviewer
  • Eligibility: passed
## Review: APPROVE **PR #575** — feat: authorized cleanup for reviewer scratch worktrees (Closes #534) ### Identity / eligibility - Reviewer: `sysadmin` via `prgs-reviewer` (not author `jcwalker3`) - Pinned head: `e4f1a52a8771493358f5d1f7b8c48024e473be75` (live match) - Mergeable: true - Reviewer lease acquired for this session ### Scope Clean and matches #534 (3 files, +473/-11): - `merged_cleanup_reconcile.py` — discover/assess/remove `review-pr*` / `review-pr*-submit` scratch trees only under `branches/` - `gitea_mcp_server.py` — wire into `gitea_reconcile_merged_cleanups` separately from author cleanup - `tests/test_merged_cleanup_reconcile.py` — safe/dirty/lease/open-PR and path-guard coverage ### Safety - Removal path-guards to direct `branches/` children matching reviewer scratch names only - Fails closed on open PR, dirty worktree, active reviewer lease, or non-detached branch - Secret sweep clean ### Validation Worktree: `branches/review-418` @ `e4f1a52` (clean) ``` pytest tests/test_merged_cleanup_reconcile.py tests/test_mcp_native_cleanup_proof.py -q # 41 passed ``` ### Decision **APPROVE** at head `e4f1a52`. Ready for merger. Review Metadata: - LLM-Agent-SHA: llm-a7c4e91f2b08 - LLM-Role: reviewer - Authenticated-Gitea-User: sysadmin - MCP-Profile: prgs-reviewer - Eligibility: passed
Owner

adopted_at: 2026-07-09T03:20:40Z
adopted_by_identity: sysadmin
adopted_by_profile: prgs-merger
adopted_from_session_id: 36276-19d8ac0f16b8
adopted_from_profile: prgs-reviewer
adopted_from_reviewer_identity: sysadmin
adopted_from_comment_id: 7692
adoption_reason: merger-handoff-approved-head

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #575
issue: #534
reviewer_identity: sysadmin
profile: prgs-merger
session_id: 36275-b2426d0569d3
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/merge-pr575
phase: adopted
candidate_head: e4f1a52a87
target_branch: master
target_branch_sha: none
last_activity: 2026-07-09T03:20:40Z
expires_at: 2026-07-09T05:20:40Z
blocker: none

<!-- mcp-review-lease-adoption:v1 --> adopted_at: 2026-07-09T03:20:40Z adopted_by_identity: sysadmin adopted_by_profile: prgs-merger adopted_from_session_id: 36276-19d8ac0f16b8 adopted_from_profile: prgs-reviewer adopted_from_reviewer_identity: sysadmin adopted_from_comment_id: 7692 adoption_reason: merger-handoff-approved-head <!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #575 issue: #534 reviewer_identity: sysadmin profile: prgs-merger session_id: 36275-b2426d0569d3 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/merge-pr575 phase: adopted candidate_head: e4f1a52a8771493358f5d1f7b8c48024e473be75 target_branch: master target_branch_sha: none last_activity: 2026-07-09T03:20:40Z expires_at: 2026-07-09T05:20:40Z blocker: none
sysadmin merged commit f29df56a99 into master 2026-07-08 22:20:50 -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#575