feat: preserve and resume prepared review verdict drafts (#609) #611

Merged
sysadmin merged 5 commits from feat/issue-609-prepared-review-verdict-resume into master 2026-07-17 12:19:51 -05:00
Owner

Summary

Implements #609: sanctioned non-terminal draft storage for prepared reviewer verdicts so fully validated reviews can survive MCP disconnect / stale-runtime restart without counting as formal reviews.

Changes

  • gitea_save_review_draft — persist PR number, head SHA, target branch SHA, worktree path, validation commands/results, intended verdict, and blocker reason via durable session state (KIND_REVIEW_DRAFT)
  • gitea_resume_review_draft — live revalidation of open state, head SHA, target SHA, #332 terminal lock, active lease ownership, reviewer identity, and worktree binding before mark-ready / optional submit
  • Drafts never substitute for formal approval without revalidation
  • Tests cover save, clean resume+submit, head/target/worktree drift, foreign lease, and #332 hard-stop

Validation

  • pytest tests/test_review_drafts.py → 5 passed

Closes #609

## Summary Implements #609: sanctioned non-terminal draft storage for prepared reviewer verdicts so fully validated reviews can survive MCP disconnect / stale-runtime restart without counting as formal reviews. ## Changes - `gitea_save_review_draft` — persist PR number, head SHA, target branch SHA, worktree path, validation commands/results, intended verdict, and blocker reason via durable session state (`KIND_REVIEW_DRAFT`) - `gitea_resume_review_draft` — live revalidation of open state, head SHA, target SHA, #332 terminal lock, active lease ownership, reviewer identity, and worktree binding before mark-ready / optional submit - Drafts never substitute for formal approval without revalidation - Tests cover save, clean resume+submit, head/target/worktree drift, foreign lease, and #332 hard-stop ## Validation - `pytest tests/test_review_drafts.py` → 5 passed Closes #609
jcwalker3 added 1 commit 2026-07-09 18:03:12 -05:00
Add non-terminal review draft save/resume tools so a fully validated
reviewer verdict can survive MCP disconnect or stale-runtime restart
without counting as a formal review.

- gitea_save_review_draft: durable draft with PR, head SHA, target SHA,
  worktree, validation evidence, intended verdict, and blocker reason
- gitea_resume_review_draft: live revalidation of head/target/#332/lease/
  identity/worktree before mark-ready or optional submit
- Drafts never substitute for formal approval without revalidation

Closes #609
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #611
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 3157-7b07b2c43c37
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-611
phase: claimed
candidate_head: none
target_branch: master
target_branch_sha: none
last_activity: 2026-07-13T23:23:43Z
expires_at: 2026-07-14T01:23:43Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #611 issue: none reviewer_identity: sysadmin profile: prgs-reviewer session_id: 3157-7b07b2c43c37 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-611 phase: claimed candidate_head: none target_branch: master target_branch_sha: none last_activity: 2026-07-13T23:23:43Z expires_at: 2026-07-14T01:23:43Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #611
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 3157-7b07b2c43c37
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-611
phase: released
candidate_head: none
target_branch: master
target_branch_sha: none
last_activity: 2026-07-13T23:45:32Z
expires_at: 2026-07-14T01:45:32Z
blocker: manual-release

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #611 issue: none reviewer_identity: sysadmin profile: prgs-reviewer session_id: 3157-7b07b2c43c37 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-611 phase: released candidate_head: none target_branch: master target_branch_sha: none last_activity: 2026-07-13T23:45:32Z expires_at: 2026-07-14T01:45:32Z blocker: manual-release
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #611
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 57708-117bddbca592
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-611
phase: claimed
candidate_head: none
target_branch: master
target_branch_sha: none
last_activity: 2026-07-13T23:45:33Z
expires_at: 2026-07-14T01:45:33Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #611 issue: none reviewer_identity: sysadmin profile: prgs-reviewer session_id: 57708-117bddbca592 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-611 phase: claimed candidate_head: none target_branch: master target_branch_sha: none last_activity: 2026-07-13T23:45:33Z expires_at: 2026-07-14T01:45:33Z blocker: none
sysadmin approved these changes 2026-07-13 18:45:36 -05:00
Dismissed
Owner

CTH: Containment — merge attempt from contaminated session did NOT succeed

Canonical Issue State

STATE:
open; not-merged; foreign-lease-active; contamination-adjacent

WHO_IS_NEXT:
controller

NEXT_ACTION:
Do not merge PR #611 from containment. Wait for foreign lease 11388 expiry (2026-07-14T01:45:33Z) or post-expiry sanctioned diagnosis only. Do not steal leases. See Issue #695 recurrence evidence.

NEXT_PROMPT:

Role: CONTROLLER (native MCP only)
Repo: prgs / Scaled-Tech-Consulting / Gitea-Tools
PR: #611 | Related incident: #695 / contaminated #701 run

1. Confirm live state still open and not on master before any merge path.
2. Diagnose lease 11388; wait until expiry; never steal/seed.
3. Do not treat approvals produced during contaminated sessions as merge authorization without independent native re-validation.
4. Do not merge #611 from reconciler containment workstreams tied to the #701 direct-import incident.

WHAT_HAPPENED:
Live API readback: PR #611 open at head 23e366d9d65ffe6e0405c620c82c8a97682717e1; merged_at null; mergeable false; head not on master (cc3ad0870a); sysadmin APPROVED undismissed; lease 11388 foreign_active; CP lease-d0f66c9233fb4112 stale_dead_process. Contaminated run attempted #611 merge paths; no merge succeeded.

WHY:
Containment must record failed merge attempts from contaminated sessions so later actors do not assume landing succeeded.

RELATED_PRS:
#611 this PR; #701 contaminated approve; #695 defect class

BLOCKERS:
Foreign active lease 11388; mergeable false; do not merge under contaminated provenance

VALIDATION:
view_pr; get_pr_review_feedback; diagnose_reviewer_pr_lease_handoff; list_workflow_leases; git ancestor check vs prgs/master

LAST_UPDATED_BY:
prgs-reconciler / sysadmin

## CTH: Containment — merge attempt from contaminated session did NOT succeed ## Canonical Issue State STATE: open; not-merged; foreign-lease-active; contamination-adjacent WHO_IS_NEXT: controller NEXT_ACTION: Do not merge PR #611 from containment. Wait for foreign lease 11388 expiry (2026-07-14T01:45:33Z) or post-expiry sanctioned diagnosis only. Do not steal leases. See Issue #695 recurrence evidence. NEXT_PROMPT: ```text Role: CONTROLLER (native MCP only) Repo: prgs / Scaled-Tech-Consulting / Gitea-Tools PR: #611 | Related incident: #695 / contaminated #701 run 1. Confirm live state still open and not on master before any merge path. 2. Diagnose lease 11388; wait until expiry; never steal/seed. 3. Do not treat approvals produced during contaminated sessions as merge authorization without independent native re-validation. 4. Do not merge #611 from reconciler containment workstreams tied to the #701 direct-import incident. ``` WHAT_HAPPENED: Live API readback: PR #611 open at head 23e366d9d65ffe6e0405c620c82c8a97682717e1; merged_at null; mergeable false; head not on master (cc3ad0870aab); sysadmin APPROVED undismissed; lease 11388 foreign_active; CP lease-d0f66c9233fb4112 stale_dead_process. Contaminated run attempted #611 merge paths; no merge succeeded. WHY: Containment must record failed merge attempts from contaminated sessions so later actors do not assume landing succeeded. RELATED_PRS: #611 this PR; #701 contaminated approve; #695 defect class BLOCKERS: Foreign active lease 11388; mergeable false; do not merge under contaminated provenance VALIDATION: view_pr; get_pr_review_feedback; diagnose_reviewer_pr_lease_handoff; list_workflow_leases; git ancestor check vs prgs/master LAST_UPDATED_BY: prgs-reconciler / sysadmin
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #611
issue: #609
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: prgs-reviewer-83418-fc368ecf
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-609-prepared-review-verdict-resume
phase: claimed
candidate_head: 23e366d9d6
target_branch: master
target_branch_sha: 67e4a2b5e9
last_activity: 2026-07-17T08:05:23Z
expires_at: 2026-07-17T10:05:23Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #611 issue: #609 reviewer_identity: sysadmin profile: prgs-reviewer session_id: prgs-reviewer-83418-fc368ecf worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-609-prepared-review-verdict-resume phase: claimed candidate_head: 23e366d9d65ffe6e0405c620c82c8a97682717e1 target_branch: master target_branch_sha: 67e4a2b5e96b680a1dcb90a20c2ebf87357a3b1f last_activity: 2026-07-17T08:05:23Z expires_at: 2026-07-17T10:05:23Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #611
issue: #609
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: prgs-reviewer-83418-fc368ecf
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-609-prepared-review-verdict-resume
phase: released
candidate_head: 23e366d9d6
target_branch: master
target_branch_sha: 67e4a2b5e9
last_activity: 2026-07-17T08:06:05Z
expires_at: 2026-07-17T10:06:05Z
blocker: manual-release

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #611 issue: #609 reviewer_identity: sysadmin profile: prgs-reviewer session_id: prgs-reviewer-83418-fc368ecf worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-609-prepared-review-verdict-resume phase: released candidate_head: 23e366d9d65ffe6e0405c620c82c8a97682717e1 target_branch: master target_branch_sha: 67e4a2b5e96b680a1dcb90a20c2ebf87357a3b1f last_activity: 2026-07-17T08:06:05Z expires_at: 2026-07-17T10:06:05Z blocker: manual-release
Author
Owner

pr: #611
branch: feat/issue-609-prepared-review-verdict-resume
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/conflict-fix-pr-611-23e366d
profile: prgs-author
session_id: unknown
phase: claimed
head_before: 23e366d9d6
expires_at: 2026-07-17T12:44:48Z
reviewer_active: no

<!-- mcp-conflict-fix-lease:v1 --> pr: #611 branch: feat/issue-609-prepared-review-verdict-resume worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/conflict-fix-pr-611-23e366d profile: prgs-author session_id: unknown phase: claimed head_before: 23e366d9d65ffe6e0405c620c82c8a97682717e1 expires_at: 2026-07-17T12:44:48Z reviewer_active: no
jcwalker3 added 1 commit 2026-07-17 05:45:06 -05:00
Preserve KIND_REVIEW_DRAFT and draft-resume tests while integrating
master recovery-critical session kinds and RECOVERY_CRITICAL_KINDS.
jcwalker3 added 1 commit 2026-07-17 09:32:43 -05:00
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #611
issue: #609
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 54575-b4fa974f3feb
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-611-8814c04
phase: claimed
candidate_head: 8814c04e3a
target_branch: master
target_branch_sha: f65069d22d
last_activity: 2026-07-17T14:45:29Z
expires_at: 2026-07-17T16:45:29Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #611 issue: #609 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 54575-b4fa974f3feb worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-611-8814c04 phase: claimed candidate_head: 8814c04e3a1380743188090c8e10babf89c33bf2 target_branch: master target_branch_sha: f65069d22de8c08486a8f03de7018ae1372bf637 last_activity: 2026-07-17T14:45:29Z expires_at: 2026-07-17T16:45:29Z blocker: none
jcwalker3 added 1 commit 2026-07-17 10:33:35 -05:00
jcwalker3 added 1 commit 2026-07-17 12:15:36 -05:00
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #611
issue: #609
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 36952-d96a94f43063
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-418
phase: claimed
candidate_head: a3dbf668fd
target_branch: master
target_branch_sha: fb9191e559
last_activity: 2026-07-17T17:18:44Z
expires_at: 2026-07-17T19:18:44Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #611 issue: #609 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 36952-d96a94f43063 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-418 phase: claimed candidate_head: a3dbf668fdf5658a64c02579b3f1bbe987b3caa8 target_branch: master target_branch_sha: fb9191e559032fd40f284e733ea14e09d5018e13 last_activity: 2026-07-17T17:18:44Z expires_at: 2026-07-17T19:18:44Z blocker: none
sysadmin approved these changes 2026-07-17 12:19:23 -05:00
sysadmin left a comment
Owner

Canonical PR State

STATE:
approved-at-pinned-head

WHO_IS_NEXT:
merger

NEXT_ACTION:
Merge PR #611 at head a3dbf668fd (Closes #609).

NEXT_PROMPT:

Act as MERGER for PR #611. Confirm APPROVE at a3dbf66, adopt lease, merge with confirmation MERGE PR 611.

WHAT_HAPPENED:
Independent re-review at live head after master merges. Remaining delta is test-only: removes debug prints; adds regression coverage for resume_draft foreign-lease and #332 terminal-lock blocks. Feature implementation already on master via 2fde92a. Focused tests 5 passed; related hard-stop suite 19 passed with drafts.

WHY:
Useful coverage not present on master; no product code risk; mergeable with clean merge-tree onto master fb9191e.

ISSUE:
#609

HEAD_SHA:
a3dbf668fd

REVIEW_STATUS:
APPROVE

MERGE_READY:
yes

BLOCKERS:
none

VALIDATION:
Worktree review-418 clean at a3dbf66; pytest tests/test_review_drafts.py 5 passed including test_resume_draft_foreign_lease and test_resume_draft_terminal_lock_blocks; related tests/test_terminal_review_hard_stop.py + drafts 19 passed.

LAST_UPDATED_BY:
sysadmin / prgs-reviewer

NATIVE_REVIEW_PROOF: transport=native_mcp; entrypoint=mcp_server; token_fingerprint=native; pid=36952; session=36952-d96a94f43063; lease_comment=12097

## Canonical PR State STATE: approved-at-pinned-head WHO_IS_NEXT: merger NEXT_ACTION: Merge PR #611 at head a3dbf668fdf5658a64c02579b3f1bbe987b3caa8 (Closes #609). NEXT_PROMPT: ```text Act as MERGER for PR #611. Confirm APPROVE at a3dbf66, adopt lease, merge with confirmation MERGE PR 611. ``` WHAT_HAPPENED: Independent re-review at live head after master merges. Remaining delta is test-only: removes debug prints; adds regression coverage for resume_draft foreign-lease and #332 terminal-lock blocks. Feature implementation already on master via 2fde92a. Focused tests 5 passed; related hard-stop suite 19 passed with drafts. WHY: Useful coverage not present on master; no product code risk; mergeable with clean merge-tree onto master fb9191e. ISSUE: #609 HEAD_SHA: a3dbf668fdf5658a64c02579b3f1bbe987b3caa8 REVIEW_STATUS: APPROVE MERGE_READY: yes BLOCKERS: none VALIDATION: Worktree review-418 clean at a3dbf66; pytest tests/test_review_drafts.py 5 passed including test_resume_draft_foreign_lease and test_resume_draft_terminal_lock_blocks; related tests/test_terminal_review_hard_stop.py + drafts 19 passed. LAST_UPDATED_BY: sysadmin / prgs-reviewer NATIVE_REVIEW_PROOF: transport=native_mcp; entrypoint=mcp_server; token_fingerprint=native; pid=36952; session=36952-d96a94f43063; lease_comment=12097
Owner

adopted_at: 2026-07-17T17:19:43Z
adopted_by_identity: sysadmin
adopted_by_profile: prgs-merger
adopted_from_session_id: 36952-d96a94f43063
adopted_from_profile: prgs-reviewer
adopted_from_reviewer_identity: sysadmin
adopted_from_comment_id: 12097
adoption_reason: merger-handoff-approved-head

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #611
issue: #609
reviewer_identity: sysadmin
profile: prgs-merger
session_id: 37794-3f919b19b373
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/merge-control
phase: adopted
candidate_head: a3dbf668fd
target_branch: master
target_branch_sha: fb9191e559
last_activity: 2026-07-17T17:19:43Z
expires_at: 2026-07-17T19:19:43Z
blocker: none

<!-- mcp-review-lease-adoption:v1 --> adopted_at: 2026-07-17T17:19:43Z adopted_by_identity: sysadmin adopted_by_profile: prgs-merger adopted_from_session_id: 36952-d96a94f43063 adopted_from_profile: prgs-reviewer adopted_from_reviewer_identity: sysadmin adopted_from_comment_id: 12097 adoption_reason: merger-handoff-approved-head <!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #611 issue: #609 reviewer_identity: sysadmin profile: prgs-merger session_id: 37794-3f919b19b373 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/merge-control phase: adopted candidate_head: a3dbf668fdf5658a64c02579b3f1bbe987b3caa8 target_branch: master target_branch_sha: fb9191e559032fd40f284e733ea14e09d5018e13 last_activity: 2026-07-17T17:19:43Z expires_at: 2026-07-17T19:19:43Z blocker: none
sysadmin merged commit 14d885b2d2 into master 2026-07-17 12:19:51 -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-17T17:19:51.796598+00:00` - last terminal: `approve` on PR #611 - PR state: `closed` (merged=True) - merge_commit_sha: `14d885b2d2c4d9b7cf05136ac2efccb65ecde2de` - prior live_mutations_count: `1` - 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#611