feat: guarded merger lease adoption flow (#536) #538

Merged
sysadmin merged 1 commits from feat/issue-536-merger-lease-adoption into master 2026-07-08 10:47:52 -05:00
Owner

Closes #536

Summary

Replaces the noncanonical manual reviewer_pr_lease._SESSION_LEASE seeding pattern (incident path used for PR #493 and PR #421) with a guarded, auditable merger lease adoption flow.

  • Adds merger_lease_adoption.py with adoption assessment, durable proof comment formatting, and sanctioned provenance helpers.
  • Adds gitea_adopt_merger_pr_lease MCP tool for cross-session merger handoff after formal APPROVED review at the current head.
  • Records provenance on acquire/heartbeat/adopt paths; assess_mutation_lease_gate rejects bare manual session seeding.
  • Adds adopted as an active lease phase for thread-visible merger adoption proof.

Validation

  • Targeted: pytest tests/test_merger_lease_adoption.py tests/test_reviewer_pr_lease.py tests/test_post_merge_moot_lease.py — 27 passed
  • Full unit suite (pytest tests/ --ignore=tests/integration) — 1865 passed, 1 failed
    • Pre-existing failure on master: TestMergePR::test_merge_blocked_on_stale_approval_head (mock side_effect ordering; not introduced by #536)
  • git diff --check — clean
  • Root checkout on master — clean; implementation committed from isolated worktree branches/issue-536-merger-lease-adoption

Canonical handoff

Merger sessions (review and merge in separate sessions):

  1. Confirm approval_at_current_head via gitea_get_pr_review_feedback.
  2. Call gitea_adopt_merger_pr_lease from a clean merger worktree under branches/, with pinned expected_head_sha.
  3. Quote adoption comment id and adopted_from_session_id in the handoff.
  4. Call gitea_merge_pr with the same pinned head SHA.

Forbidden: manual in-process record_session_lease() / _SESSION_LEASE seeding without sanctioned provenance.

Same-session review+merge: continue using gitea_acquire_reviewer_pr_lease directly.

Closes #536 ## Summary Replaces the noncanonical manual `reviewer_pr_lease._SESSION_LEASE` seeding pattern (incident path used for PR #493 and PR #421) with a guarded, auditable merger lease adoption flow. - Adds `merger_lease_adoption.py` with adoption assessment, durable proof comment formatting, and sanctioned provenance helpers. - Adds `gitea_adopt_merger_pr_lease` MCP tool for cross-session merger handoff after formal APPROVED review at the current head. - Records provenance on acquire/heartbeat/adopt paths; `assess_mutation_lease_gate` rejects bare manual session seeding. - Adds `adopted` as an active lease phase for thread-visible merger adoption proof. ## Validation - Targeted: `pytest tests/test_merger_lease_adoption.py tests/test_reviewer_pr_lease.py tests/test_post_merge_moot_lease.py` — 27 passed - Full unit suite (`pytest tests/ --ignore=tests/integration`) — 1865 passed, 1 failed - Pre-existing failure on `master`: `TestMergePR::test_merge_blocked_on_stale_approval_head` (mock side_effect ordering; not introduced by #536) - `git diff --check` — clean - Root checkout on `master` — clean; implementation committed from isolated worktree `branches/issue-536-merger-lease-adoption` ## Canonical handoff **Merger sessions (review and merge in separate sessions):** 1. Confirm `approval_at_current_head` via `gitea_get_pr_review_feedback`. 2. Call `gitea_adopt_merger_pr_lease` from a clean merger worktree under `branches/`, with pinned `expected_head_sha`. 3. Quote adoption comment id and `adopted_from_session_id` in the handoff. 4. Call `gitea_merge_pr` with the same pinned head SHA. **Forbidden:** manual in-process `record_session_lease()` / `_SESSION_LEASE` seeding without sanctioned provenance. **Same-session review+merge:** continue using `gitea_acquire_reviewer_pr_lease` directly.
jcwalker3 added 1 commit 2026-07-08 10:05:30 -05:00
Replace manual in-process _SESSION_LEASE seeding with an auditable
gitea_adopt_merger_pr_lease tool that posts durable adoption proof and
records sanctioned session provenance. Mutation gates now reject bare
record_session_lease calls without provenance from acquire/adopt/heartbeat.

Closes #536
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #538
issue: #536
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 42115-1a6a3980f193
worktree: branches/review-pr-538
phase: claimed
candidate_head: 08ea214526
target_branch: master
target_branch_sha: none
last_activity: 2026-07-08T15:12:29Z
expires_at: 2026-07-08T17:12:29Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #538 issue: #536 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 42115-1a6a3980f193 worktree: branches/review-pr-538 phase: claimed candidate_head: 08ea214526bf1f9d9ec3e3ee7e1323b997b72670 target_branch: master target_branch_sha: none last_activity: 2026-07-08T15:12:29Z expires_at: 2026-07-08T17:12:29Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #538
issue: #536
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 42115-1a6a3980f193
worktree: branches/review-pr-538
phase: claimed
candidate_head: 08ea214526
target_branch: master
target_branch_sha: none
last_activity: 2026-07-08T15:22:12Z
expires_at: 2026-07-08T17:22:12Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #538 issue: #536 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 42115-1a6a3980f193 worktree: branches/review-pr-538 phase: claimed candidate_head: 08ea214526bf1f9d9ec3e3ee7e1323b997b72670 target_branch: master target_branch_sha: none last_activity: 2026-07-08T15:22:12Z expires_at: 2026-07-08T17:22:12Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #538
issue: #536
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 42115-1a6a3980f193
worktree: branches/review-pr-538
phase: claimed
candidate_head: 08ea214526
target_branch: master
target_branch_sha: none
last_activity: 2026-07-08T15:22:34Z
expires_at: 2026-07-08T17:22:34Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #538 issue: #536 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 42115-1a6a3980f193 worktree: branches/review-pr-538 phase: claimed candidate_head: 08ea214526bf1f9d9ec3e3ee7e1323b997b72670 target_branch: master target_branch_sha: none last_activity: 2026-07-08T15:22:34Z expires_at: 2026-07-08T17:22:34Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #538
issue: #536
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 42115-1a6a3980f193
worktree: branches/review-pr-538
phase: claimed
candidate_head: 08ea214526
target_branch: master
target_branch_sha: none
last_activity: 2026-07-08T15:23:46Z
expires_at: 2026-07-08T17:23:46Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #538 issue: #536 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 42115-1a6a3980f193 worktree: branches/review-pr-538 phase: claimed candidate_head: 08ea214526bf1f9d9ec3e3ee7e1323b997b72670 target_branch: master target_branch_sha: none last_activity: 2026-07-08T15:23:46Z expires_at: 2026-07-08T17:23:46Z blocker: none
sysadmin approved these changes 2026-07-08 10:23:50 -05:00
sysadmin left a comment
Owner

Review verdict: APPROVE

Reviewer: sysadmin (prgs-reviewer)
PR author: jcwalker3 (not self-review)
Pinned head SHA: 08ea214526bf1f9d9ec3e3ee7e1323b997b72670
Review worktree: branches/review-pr-538
Lease session: 42115-1a6a3980f193

Closes #536.

Validation

  • py_compile: PASS | Targeted: 27 passed | Full: 1865 passed, 1 failed (pre-existing)
  • Security/provenance: PASS

Next actor

Merger (prgs-merger): adopt → merge @ pinned SHA → close #536

## Review verdict: **APPROVE** **Reviewer:** `sysadmin` (`prgs-reviewer`) **PR author:** `jcwalker3` (not self-review) **Pinned head SHA:** `08ea214526bf1f9d9ec3e3ee7e1323b997b72670` **Review worktree:** `branches/review-pr-538` **Lease session:** `42115-1a6a3980f193` Closes #536. ### Validation - py_compile: PASS | Targeted: 27 passed | Full: 1865 passed, 1 failed (pre-existing) - Security/provenance: PASS ### Next actor Merger (`prgs-merger`): adopt → merge @ pinned SHA → close #536
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #538
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 42115-1a6a3980f193
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-538
phase: claimed
candidate_head: 08ea214526
target_branch: master
target_branch_sha: 7231f27c1c
last_activity: 2026-07-08T15:47:22Z
expires_at: 2026-07-08T17:47:22Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #538 issue: none reviewer_identity: sysadmin profile: prgs-reviewer session_id: 42115-1a6a3980f193 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-538 phase: claimed candidate_head: 08ea214526bf1f9d9ec3e3ee7e1323b997b72670 target_branch: master target_branch_sha: 7231f27c1c9bb47226f7efe8ca0ad4be48b77365 last_activity: 2026-07-08T15:47:22Z expires_at: 2026-07-08T17:47:22Z blocker: none
sysadmin merged commit cfce823dd7 into master 2026-07-08 10:47:52 -05:00
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #538
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 42115-1a6a3980f193
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-538
phase: released
candidate_head: 08ea214526
target_branch: master
target_branch_sha: 7231f27c1c
last_activity: 2026-07-08T15:48:14Z
expires_at: 2026-07-08T17:48:14Z
blocker: post-merge-moot

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #538 issue: none reviewer_identity: sysadmin profile: prgs-reviewer session_id: 42115-1a6a3980f193 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-538 phase: released candidate_head: 08ea214526bf1f9d9ec3e3ee7e1323b997b72670 target_branch: master target_branch_sha: 7231f27c1c9bb47226f7efe8ca0ad4be48b77365 last_activity: 2026-07-08T15:48:14Z expires_at: 2026-07-08T17:48:14Z blocker: post-merge-moot
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#538