feat(profiles): support reconciler cleanup capability and migration (Closes #687) #688

Merged
sysadmin merged 5 commits from feat/issue-687-reconciler-branch-delete into master 2026-07-16 03:23:04 -05:00
Owner

Support gitea.branch.delete capability in reconciler profile and migration helper.

Closes #687.

Changes

  • reconciler_profile.py: add gitea.branch.delete to recommended operations.
  • migrate_profiles.py: add support for the reconciler role defaults and schema mapping.
  • tests/test_migrate_profiles.py: added unit tests validating reconciler migration.

Validation

  • Focused tests passed.
  • Full suite passed: 2621 passed, 6 skipped.
  • Commit SHA: c7a444eb4b41cf916fdbd20a4999ffd78af496d0.
Support gitea.branch.delete capability in reconciler profile and migration helper. Closes #687. ### Changes - `reconciler_profile.py`: add `gitea.branch.delete` to recommended operations. - `migrate_profiles.py`: add support for the `reconciler` role defaults and schema mapping. - `tests/test_migrate_profiles.py`: added unit tests validating reconciler migration. ### Validation - Focused tests passed. - Full suite passed: 2621 passed, 6 skipped. - Commit SHA: `c7a444eb4b41cf916fdbd20a4999ffd78af496d0`.
jcwalker3 added 2 commits 2026-07-12 20:33:07 -05:00
Merged-PR source-branch cleanup is reconciler work (task_capability_map maps
cleanup_merged_pr_branch -> reconciler / gitea.branch.delete), but the
reconciler profile schema, execution-profile docs, and tests never covered
the permission, so no configured profile could run the guarded
gitea_cleanup_merged_pr_branch path.

- reconciler_profile.py: add gitea.branch.delete to
  RECONCILER_RECOMMENDED_OPERATIONS (not required; not forbidden)
- docs/gitea-execution-profiles.md: document merged-branch cleanup
  ownership, least-privilege constraints, and the no-alias caveat
- tests/test_reconciler_profile.py: reconciler profile with branch.delete
  stays valid and classified reconciler; missing grant is reported as
  missing-recommended
- tests/test_branch_cleanup_guard.py: author- and merger-shaped profiles
  without gitea.branch.delete fail closed on gitea_cleanup_merged_pr_branch

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

Canonical Issue State

STATE: ready-for-review
WHO_IS_NEXT: reviewer
NEXT_ACTION: A distinct reviewer must validate least privilege and the guarded cleanup path.
NEXT_PROMPT:

Validate the changes in PR #688 under the reviewer role, verify least privilege, and approve the PR.

WHY: The configuration PR needs to be reviewed and approved by a distinct reviewer.
BLOCKERS: none
VALIDATION: 2621 passed, 6 skipped on commit c7a444e.
RELATED_PRS: #688
LAST_UPDATED_BY: author

## Canonical Issue State STATE: ready-for-review WHO_IS_NEXT: reviewer NEXT_ACTION: A distinct reviewer must validate least privilege and the guarded cleanup path. NEXT_PROMPT: ```text Validate the changes in PR #688 under the reviewer role, verify least privilege, and approve the PR. ``` WHY: The configuration PR needs to be reviewed and approved by a distinct reviewer. BLOCKERS: none VALIDATION: 2621 passed, 6 skipped on commit c7a444e. RELATED_PRS: #688 LAST_UPDATED_BY: author
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #688
issue: #687
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 60615-d92824cff1bd
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-687-reconciler-branch-delete
phase: claimed
candidate_head: c7a444eb4b
target_branch: master
target_branch_sha: 56f1230a10
last_activity: 2026-07-13T01:38:25Z
expires_at: 2026-07-13T03:38:25Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #688 issue: #687 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 60615-d92824cff1bd worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-687-reconciler-branch-delete phase: claimed candidate_head: c7a444eb4b41cf916fdbd20a4999ffd78af496d0 target_branch: master target_branch_sha: 56f1230a10a21b16226c792a5bcdc4398c97b09a last_activity: 2026-07-13T01:38:25Z expires_at: 2026-07-13T03:38:25Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #688
issue: #687
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 60615-d92824cff1bd
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-687-reconciler-branch-delete
phase: before-validation
candidate_head: c7a444eb4b
target_branch: master
target_branch_sha: 56f1230a10
last_activity: 2026-07-13T01:38:54Z
expires_at: 2026-07-13T03:38:54Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #688 issue: #687 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 60615-d92824cff1bd worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-687-reconciler-branch-delete phase: before-validation candidate_head: c7a444eb4b41cf916fdbd20a4999ffd78af496d0 target_branch: master target_branch_sha: 56f1230a10a21b16226c792a5bcdc4398c97b09a last_activity: 2026-07-13T01:38:54Z expires_at: 2026-07-13T03:38:54Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #688
issue: #687
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 60615-d92824cff1bd
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-687-reconciler-branch-delete
phase: after-validation-request-changes
candidate_head: c7a444eb4b
target_branch: master
target_branch_sha: 56f1230a10
last_activity: 2026-07-13T01:43:14Z
expires_at: 2026-07-13T03:43:14Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #688 issue: #687 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 60615-d92824cff1bd worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-687-reconciler-branch-delete phase: after-validation-request-changes candidate_head: c7a444eb4b41cf916fdbd20a4999ffd78af496d0 target_branch: master target_branch_sha: 56f1230a10a21b16226c792a5bcdc4398c97b09a last_activity: 2026-07-13T01:43:14Z expires_at: 2026-07-13T03:43:14Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #688
issue: #687
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 60615-d92824cff1bd
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-687-reconciler-branch-delete
phase: before-review-mutation-request-changes
candidate_head: c7a444eb4b
target_branch: master
target_branch_sha: 56f1230a10
last_activity: 2026-07-13T01:43:48Z
expires_at: 2026-07-13T03:43:48Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #688 issue: #687 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 60615-d92824cff1bd worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-687-reconciler-branch-delete phase: before-review-mutation-request-changes candidate_head: c7a444eb4b41cf916fdbd20a4999ffd78af496d0 target_branch: master target_branch_sha: 56f1230a10a21b16226c792a5bcdc4398c97b09a last_activity: 2026-07-13T01:43:48Z expires_at: 2026-07-13T03:43:48Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #688
issue: #687
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 60615-d92824cff1bd
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-687-reconciler-branch-delete
phase: released
candidate_head: c7a444eb4b
target_branch: master
target_branch_sha: 56f1230a10
last_activity: 2026-07-13T02:22:52Z
expires_at: 2026-07-13T04:22:52Z
blocker: manual-release

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #688 issue: #687 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 60615-d92824cff1bd worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-687-reconciler-branch-delete phase: released candidate_head: c7a444eb4b41cf916fdbd20a4999ffd78af496d0 target_branch: master target_branch_sha: 56f1230a10a21b16226c792a5bcdc4398c97b09a last_activity: 2026-07-13T02:22:52Z expires_at: 2026-07-13T04:22:52Z blocker: manual-release
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #688
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 25883-7d4c6e6ebd53
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr688-feat-issue-687-reconciler-branch-delete
phase: claimed
candidate_head: c7a444eb4b
target_branch: master
target_branch_sha: none
last_activity: 2026-07-13T02:23:00Z
expires_at: 2026-07-13T04:23:00Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #688 issue: none reviewer_identity: sysadmin profile: prgs-reviewer session_id: 25883-7d4c6e6ebd53 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr688-feat-issue-687-reconciler-branch-delete phase: claimed candidate_head: c7a444eb4b41cf916fdbd20a4999ffd78af496d0 target_branch: master target_branch_sha: none last_activity: 2026-07-13T02:23:00Z expires_at: 2026-07-13T04:23:00Z blocker: none
sysadmin requested changes 2026-07-12 21:24:01 -05:00
Dismissed
sysadmin left a comment
Owner

Canonical PR State

STATE: request-changes
WHO_IS_NEXT: author
NEXT_ACTION: Author must correct the migrated reconciler defaults shorthand operations and limit delete scope.
NEXT_PROMPT:

Fix shorthand operations in migrate_profiles.py, limit reconciler delete branch scope, reload profile, and push again.

WHAT_HAPPENED: PR review completed with REQUEST_CHANGES due to three findings:

  1. Shorthand operations pr.close and issue.close in migrate_profiles.py are invalid.
  2. Granting gitea.branch.delete makes raw branch deletion reachable.
  3. Migration, reload, and capability-verification documentation is incomplete.
    WHY: Migrated reconciler defaults use invalid operations and lose required permissions. Branch delete capability exposes raw deletion.
    ISSUE: 687
    HEAD_SHA: c7a444eb4b
    REVIEW_STATUS: request_changes
    MERGE_READY: false
    BLOCKERS: unresolved findings in validation report
    VALIDATION: 57 tests passed in review worktree on head c7a444e.
    LAST_UPDATED_BY: reviewer
## Canonical PR State STATE: request-changes WHO_IS_NEXT: author NEXT_ACTION: Author must correct the migrated reconciler defaults shorthand operations and limit delete scope. NEXT_PROMPT: ```text Fix shorthand operations in migrate_profiles.py, limit reconciler delete branch scope, reload profile, and push again. ``` WHAT_HAPPENED: PR review completed with REQUEST_CHANGES due to three findings: 1. Shorthand operations pr.close and issue.close in migrate_profiles.py are invalid. 2. Granting gitea.branch.delete makes raw branch deletion reachable. 3. Migration, reload, and capability-verification documentation is incomplete. WHY: Migrated reconciler defaults use invalid operations and lose required permissions. Branch delete capability exposes raw deletion. ISSUE: 687 HEAD_SHA: c7a444eb4b41cf916fdbd20a4999ffd78af496d0 REVIEW_STATUS: request_changes MERGE_READY: false BLOCKERS: unresolved findings in validation report VALIDATION: 57 tests passed in review worktree on head c7a444e. LAST_UPDATED_BY: reviewer
jcwalker3 added 1 commit 2026-07-12 21:35:59 -05:00
Address REQUEST_CHANGES on PR #688:

- migrate_profiles: emit fully canonical reconciler/author/reviewer defaults;
  canonicalize explicit ops; fail if reconciler loses required pr.close/read
- gitea_delete_branch: deny reconciler (and non-author roles); refuse
  preservation/protected branches before any API call
- gitea_cleanup_merged_pr_branch: require reconciler role only; block
  preservation/evidence branches via branch_cleanup_guard
- docs: end-to-end operator runbook for profile migrate/apply/reconnect/cleanup
- tests: migration canonicalization, idempotency, raw-delete denial, guarded
  cleanup success and unmerged/preserve rejections

Closes #687.
Author
Owner

Canonical Issue State

STATE:
ready-for-review — REQUEST_CHANGES addressed at new head; independent re-review required

WHO_IS_NEXT:
reviewer

NEXT_ACTION:
Independent REVIEWER (must differ from author jcwalker3 / prgs-author) re-validates all three prior blockers at pinned head 4a6357800364718a27a36ebc73578d4b929ff4aa; do not self-review or merge

NEXT_PROMPT:

Role: REVIEWER (must differ from PR author jcwalker3 / prgs-author)
Repo: prgs / Scaled-Tech-Consulting / Gitea-Tools
PR: #688  |  Issue: #687 (Closes #687)
Base: master
Head: feat/issue-687-reconciler-branch-delete @ 4a6357800364718a27a36ebc73578d4b929ff4aa

1. gitea_whoami + gitea_load_review_workflow + gitea_resolve_task_capability(review_pr) on prgs-reviewer only.
2. Inventory PR #688; pin expected_head_sha=4a6357800364718a27a36ebc73578d4b929ff4aa.
3. Review worktree under branches/; never mutate control root; never apply live profile or delete PR #684 source branch.
4. Blocker 1: confirm migrate_profiles emits only canonical ops; no pr.close/issue.close shorthand; gitea.pr.close survives; second canonicalize is idempotent; production load_config validates.
5. Blocker 2: reconciler+branch.delete cannot call gitea_delete_branch; can call gitea_cleanup_merged_pr_branch when gates pass; preserve branch chore/issue-681-preserve-review-session-wip refused; no API DELETE before guards.
6. Blocker 3: docs/gitea-execution-profiles.md runbook matches migrate_profiles.py flags and tool names; states merge does not update live profile.
7. Run focused + full suite from review worktree; post independent APPROVE or REQUEST_CHANGES. Do not merge.

WHAT_HAPPENED:
AUTHOR addressed formal REQUEST_CHANGES (reviewed head c7a444e) on existing branch feat/issue-687-reconciler-branch-delete without opening a replacement PR.

New head SHA: 4a6357800364718a27a36ebc73578d4b929ff4aa

Exact fix per blocker

Blocker 1 — valid canonical reconciler operations

  • migrate_profiles.RECONCILER_DEFAULT_ALLOWED/FORBIDDEN now fully qualified (gitea.pr.close, gitea.issue.close, …) — no pr.close / issue.close / bare pr.comment.
  • canonicalize_operation / canonicalize_operations map loader aliases + migration-only shorthands; unknown ops fail visibly.
  • Reconciler post-migrate assert requires gitea.read + gitea.pr.close (fail closed if missing).
  • Author/reviewer defaults also emit canonical names; explicit lists are canonicalized (not silently dropped).

Canonical migrated reconciler example:

{
  "role": "reconciler",
  "allowed_operations": [
    "gitea.read",
    "gitea.pr.close",
    "gitea.pr.comment",
    "gitea.issue.comment",
    "gitea.issue.close",
    "gitea.branch.delete"
  ],
  "forbidden_operations": [
    "gitea.pr.approve",
    "gitea.pr.merge",
    "gitea.pr.review",
    "gitea.pr.create",
    "gitea.branch.push",
    "gitea.repo.commit"
  ]
}

Blocker 2 — prevent arbitrary branch deletion

  • gitea_delete_branch: reconciler denied even with gitea.branch.delete; non-author roles denied; preservation/protected branches fail closed before any API call.
  • gitea_cleanup_merged_pr_branch: requires reconciler role only; branch_cleanup_guard rejects preservation/evidence branches (incl. chore/issue-681-preserve-review-session-wip); unmerged/open/protected still refused.
  • cleanup_merged_pr_branch / reconciliation_cleanup added to role-exclusive tasks in the resolver.

Blocker 3 — operational procedure docs

  • docs/gitea-execution-profiles.md runbook: exact python3 migrate_profiles.py -i … dry-run/-w/--backup; inspect identity; validate canonical names + least privilege; merge of #688 does not change live profile; apply path; backup; client reconnect; whoami/parity/capability re-verify; guarded cleanup usage; prohibitions on raw git delete / arbitrary delete / ad hoc edits.

Profile-switch provenance (not absorbed)

Canonical #688 comments do not prove full reviewer re-preflight after any mid-run author activation. Filed separate #690 (workflow-hardening). Not part of #687 product scope.

Validation (from final immutable head 4a63578)

  • Focused: migration + branch cleanup + reconciler + op-normalization + related: passed
  • Full suite: 2632 passed, 6 skipped, 163 subtests
  • compileall on changed modules: OK
  • Diff hygiene: 8 files; no live profile edits; PR #684 source branch not deleted

Remaining risks

  • Live prgs-reconciler still lacks gitea.branch.delete until operator runs documented migrate/apply + reconnect (by design).
  • #690 remains open for formal-review profile-switch isolation.

WHY:
Prior migration defaults used invalid shorthand that the production normalizer drops, so reconciler lost gitea.pr.close. Granting gitea.branch.delete without role gating would have made raw delete reachable for reconciler.

RELATED_PRS:
#688 (this); #684 source branch untouched; #690 separate workflow guardrail

BLOCKERS:
none for independent re-review

VALIDATION:

  • HEAD 4a6357800364718a27a36ebc73578d4b929ff4aa pushed to feat/issue-687-reconciler-branch-delete
  • Full suite 2632 passed / 6 skipped at that SHA
  • Control root remains clean on master; worktree branches/issue-687-reconciler-branch-delete

LAST_UPDATED_BY:
jcwalker3 / prgs-author / AUTHOR / 2026-07-12

## Canonical Issue State STATE: ready-for-review — REQUEST_CHANGES addressed at new head; independent re-review required WHO_IS_NEXT: reviewer NEXT_ACTION: Independent REVIEWER (must differ from author jcwalker3 / prgs-author) re-validates all three prior blockers at pinned head `4a6357800364718a27a36ebc73578d4b929ff4aa`; do not self-review or merge NEXT_PROMPT: ```text Role: REVIEWER (must differ from PR author jcwalker3 / prgs-author) Repo: prgs / Scaled-Tech-Consulting / Gitea-Tools PR: #688 | Issue: #687 (Closes #687) Base: master Head: feat/issue-687-reconciler-branch-delete @ 4a6357800364718a27a36ebc73578d4b929ff4aa 1. gitea_whoami + gitea_load_review_workflow + gitea_resolve_task_capability(review_pr) on prgs-reviewer only. 2. Inventory PR #688; pin expected_head_sha=4a6357800364718a27a36ebc73578d4b929ff4aa. 3. Review worktree under branches/; never mutate control root; never apply live profile or delete PR #684 source branch. 4. Blocker 1: confirm migrate_profiles emits only canonical ops; no pr.close/issue.close shorthand; gitea.pr.close survives; second canonicalize is idempotent; production load_config validates. 5. Blocker 2: reconciler+branch.delete cannot call gitea_delete_branch; can call gitea_cleanup_merged_pr_branch when gates pass; preserve branch chore/issue-681-preserve-review-session-wip refused; no API DELETE before guards. 6. Blocker 3: docs/gitea-execution-profiles.md runbook matches migrate_profiles.py flags and tool names; states merge does not update live profile. 7. Run focused + full suite from review worktree; post independent APPROVE or REQUEST_CHANGES. Do not merge. ``` WHAT_HAPPENED: AUTHOR addressed formal REQUEST_CHANGES (reviewed head c7a444e) on existing branch feat/issue-687-reconciler-branch-delete without opening a replacement PR. **New head SHA:** `4a6357800364718a27a36ebc73578d4b929ff4aa` ### Exact fix per blocker **Blocker 1 — valid canonical reconciler operations** - `migrate_profiles.RECONCILER_DEFAULT_ALLOWED/FORBIDDEN` now fully qualified (`gitea.pr.close`, `gitea.issue.close`, …) — no `pr.close` / `issue.close` / bare `pr.comment`. - `canonicalize_operation` / `canonicalize_operations` map loader aliases + migration-only shorthands; unknown ops fail visibly. - Reconciler post-migrate assert requires `gitea.read` + `gitea.pr.close` (fail closed if missing). - Author/reviewer defaults also emit canonical names; explicit lists are canonicalized (not silently dropped). Canonical migrated reconciler example: ```json { "role": "reconciler", "allowed_operations": [ "gitea.read", "gitea.pr.close", "gitea.pr.comment", "gitea.issue.comment", "gitea.issue.close", "gitea.branch.delete" ], "forbidden_operations": [ "gitea.pr.approve", "gitea.pr.merge", "gitea.pr.review", "gitea.pr.create", "gitea.branch.push", "gitea.repo.commit" ] } ``` **Blocker 2 — prevent arbitrary branch deletion** - `gitea_delete_branch`: reconciler denied even with `gitea.branch.delete`; non-author roles denied; preservation/protected branches fail closed **before** any API call. - `gitea_cleanup_merged_pr_branch`: requires reconciler role only; `branch_cleanup_guard` rejects preservation/evidence branches (incl. `chore/issue-681-preserve-review-session-wip`); unmerged/open/protected still refused. - `cleanup_merged_pr_branch` / `reconciliation_cleanup` added to role-exclusive tasks in the resolver. **Blocker 3 — operational procedure docs** - `docs/gitea-execution-profiles.md` runbook: exact `python3 migrate_profiles.py -i …` dry-run/`-w`/`--backup`; inspect identity; validate canonical names + least privilege; **merge of #688 does not change live profile**; apply path; backup; client reconnect; whoami/parity/capability re-verify; guarded cleanup usage; prohibitions on raw git delete / arbitrary delete / ad hoc edits. ### Profile-switch provenance (not absorbed) Canonical #688 comments do not prove full reviewer re-preflight after any mid-run author activation. Filed separate **#690** (workflow-hardening). Not part of #687 product scope. ### Validation (from final immutable head `4a63578`) - Focused: migration + branch cleanup + reconciler + op-normalization + related: **passed** - Full suite: **2632 passed, 6 skipped**, 163 subtests - `compileall` on changed modules: OK - Diff hygiene: 8 files; no live profile edits; PR #684 source branch not deleted ### Remaining risks - Live `prgs-reconciler` still lacks `gitea.branch.delete` until operator runs documented migrate/apply + reconnect (by design). - #690 remains open for formal-review profile-switch isolation. WHY: Prior migration defaults used invalid shorthand that the production normalizer drops, so reconciler lost `gitea.pr.close`. Granting `gitea.branch.delete` without role gating would have made raw delete reachable for reconciler. RELATED_PRS: #688 (this); #684 source branch untouched; #690 separate workflow guardrail BLOCKERS: none for independent re-review VALIDATION: - HEAD `4a6357800364718a27a36ebc73578d4b929ff4aa` pushed to `feat/issue-687-reconciler-branch-delete` - Full suite 2632 passed / 6 skipped at that SHA - Control root remains clean on master; worktree branches/issue-687-reconciler-branch-delete LAST_UPDATED_BY: jcwalker3 / prgs-author / AUTHOR / 2026-07-12
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #688
issue: #687
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 61399-0f17eb0269e7
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr688-4a63578
phase: claimed
candidate_head: 4a63578003
target_branch: master
target_branch_sha: 1ab384adc9
last_activity: 2026-07-16T04:41:47Z
expires_at: 2026-07-16T06:41:47Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #688 issue: #687 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 61399-0f17eb0269e7 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr688-4a63578 phase: claimed candidate_head: 4a6357800364718a27a36ebc73578d4b929ff4aa target_branch: master target_branch_sha: 1ab384adc9a083e41556ee04575f21f4b7a2f83a last_activity: 2026-07-16T04:41:47Z expires_at: 2026-07-16T06:41:47Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #688
issue: #687
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 61399-0f17eb0269e7
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr688-4a63578
phase: decision
candidate_head: 4a63578003
target_branch: master
target_branch_sha: 1ab384adc9
last_activity: 2026-07-16T04:43:03Z
expires_at: 2026-07-16T06:43:03Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #688 issue: #687 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 61399-0f17eb0269e7 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr688-4a63578 phase: decision candidate_head: 4a6357800364718a27a36ebc73578d4b929ff4aa target_branch: master target_branch_sha: 1ab384adc9a083e41556ee04575f21f4b7a2f83a last_activity: 2026-07-16T04:43:03Z expires_at: 2026-07-16T06:43:03Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #688
issue: #687
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 61399-0f17eb0269e7
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr688-4a63578
phase: released
candidate_head: 4a63578003
target_branch: master
target_branch_sha: 1ab384adc9
last_activity: 2026-07-16T04:43:43Z
expires_at: 2026-07-16T06:43:43Z
blocker: manual-release

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #688 issue: #687 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 61399-0f17eb0269e7 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr688-4a63578 phase: released candidate_head: 4a6357800364718a27a36ebc73578d4b929ff4aa target_branch: master target_branch_sha: 1ab384adc9a083e41556ee04575f21f4b7a2f83a last_activity: 2026-07-16T04:43:43Z expires_at: 2026-07-16T06:43:43Z blocker: manual-release
jcwalker3 added 1 commit 2026-07-15 23:57:44 -05:00
Require authoritative not-found readback after merged-PR branch DELETE, and
block cleanup when active author/reviewer/merger/controller/reconciler
session, lease, or worktree-binding ownership still uses the target branch.
Author
Owner

Canonical Issue State

STATE:
ready-for-review — two independent blockers fixed at new head; independent re-review required

WHO_IS_NEXT:
reviewer

NEXT_ACTION:
Independent REVIEWER (must differ from author jcwalker3 / prgs-author) re-validates post-delete readback and active ownership protection at pinned head 137426f7ad6562c9e4ae09451d55491b6a4ccc7d; do not self-review or merge

NEXT_PROMPT:

Role: REVIEWER (must differ from PR author jcwalker3 / prgs-author)
Repo: prgs / Scaled-Tech-Consulting / Gitea-Tools
PR: #688  |  Issue: #687 (Closes #687)
Base: master
Head: feat/issue-687-reconciler-branch-delete @ 137426f7ad6562c9e4ae09451d55491b6a4ccc7d

1. gitea_whoami + gitea_resolve_task_capability(review_pr) on prgs-reviewer only.
2. Inventory PR #688; pin expected_head_sha=137426f7ad6562c9e4ae09451d55491b6a4ccc7d.
3. Review worktree under branches/; never mutate control root; do not delete branches.
4. Blocker A — post-delete readback: after DELETE, GET branch via canonical client; success only on authoritative not-found; DELETE-success alone is insufficient; auth/authz/transport failures are structured and secret-free; readback evidence in result + audit.
5. Blocker B — active ownership: before DELETE, query task-session/lease/worktree-binding for exact host/repo/branch; block active author/reviewer/merger/controller/reconciler ownership; released/expired reclaimable do not block; sticky stale blocks; other repo/branch no false block; preserve protected/open-PR/ancestor/confirmation/reconciler-role gates.
6. Run focused cleanup/ownership tests + reconciler suite. Post independent APPROVE or REQUEST_CHANGES. Do not merge.

WHAT_HAPPENED:
AUTHOR remediation on existing branch feat/issue-687-reconciler-branch-delete without opening a replacement PR.

Old head: 4a6357800364718a27a36ebc73578d4b929ff4aa
New head: 137426f7ad6562c9e4ae09451d55491b6a4ccc7d

Fix 1 — post-delete readback

After gitea_cleanup_merged_pr_branch DELETE, immediately probes the branch via the canonical GET client. Authoritative not-found is verified deletion. If the branch still exists, return structured failure (delete_acknowledged=true, success=false). Authentication, authorization, transport, and unexpected responses are preserved as structured error_class values without credentials or raw bodies. Readback evidence is included in the tool result and audit metadata.

Fix 2 — active ownership protection

Before DELETE, collects ownership from author issue locks, control-plane leases (role-tagged), and worktree bindings for the exact remote/org/repo/branch. Blocks active author session/lease, reviewer lease, merger/controller/reconciler lease, and worktree binding ownership. Released/abandoned/reclaimable expired records do not block; sticky stale (reclaim_allowed=false) blocks per recovery policy. Out-of-scope repository or branch ownership is ignored. Existing protected/default/preservation, open-PR, non-ancestor, confirmation phrase, and reconciler-role gates are preserved.

Changed files

  • branch_cleanup_guard.py — pure readback + ownership assessors
  • gitea_mcp_server.py — ownership pre-check + post-delete readback on cleanup path
  • tests/test_branch_cleanup_guard.py — coverage for both fixes and existing gates

Validation

  • Focused tests/test_branch_cleanup_guard.py: 34 passed (+ 8 subtests)
  • Branch-cleanup / reconciler / already-landed proportional suite: 239 passed (+ 8 subtests)
  • compileall on changed modules: OK
  • Diff hygiene: 3 files only; control checkout untouched; no branch deletions performed

WHY:
Independent review identified missing post-delete verification and incomplete ownership protection on the merged-PR branch cleanup path.

RELATED_PRS:
#688

BLOCKERS:
none for independent re-review

VALIDATION:

  • HEAD 137426f7ad pushed to feat/issue-687-reconciler-branch-delete
  • 239 passed / 8 subtests on proportional suite
  • Runtime parity in_parity at 5b0d7aed0a
  • Worktree branches/issue-687-reconciler-branch-delete

LAST_UPDATED_BY:
jcwalker3 / prgs-author / AUTHOR / 2026-07-16

## Canonical Issue State STATE: ready-for-review — two independent blockers fixed at new head; independent re-review required WHO_IS_NEXT: reviewer NEXT_ACTION: Independent REVIEWER (must differ from author jcwalker3 / prgs-author) re-validates post-delete readback and active ownership protection at pinned head `137426f7ad6562c9e4ae09451d55491b6a4ccc7d`; do not self-review or merge NEXT_PROMPT: ```text Role: REVIEWER (must differ from PR author jcwalker3 / prgs-author) Repo: prgs / Scaled-Tech-Consulting / Gitea-Tools PR: #688 | Issue: #687 (Closes #687) Base: master Head: feat/issue-687-reconciler-branch-delete @ 137426f7ad6562c9e4ae09451d55491b6a4ccc7d 1. gitea_whoami + gitea_resolve_task_capability(review_pr) on prgs-reviewer only. 2. Inventory PR #688; pin expected_head_sha=137426f7ad6562c9e4ae09451d55491b6a4ccc7d. 3. Review worktree under branches/; never mutate control root; do not delete branches. 4. Blocker A — post-delete readback: after DELETE, GET branch via canonical client; success only on authoritative not-found; DELETE-success alone is insufficient; auth/authz/transport failures are structured and secret-free; readback evidence in result + audit. 5. Blocker B — active ownership: before DELETE, query task-session/lease/worktree-binding for exact host/repo/branch; block active author/reviewer/merger/controller/reconciler ownership; released/expired reclaimable do not block; sticky stale blocks; other repo/branch no false block; preserve protected/open-PR/ancestor/confirmation/reconciler-role gates. 6. Run focused cleanup/ownership tests + reconciler suite. Post independent APPROVE or REQUEST_CHANGES. Do not merge. ``` WHAT_HAPPENED: AUTHOR remediation on existing branch feat/issue-687-reconciler-branch-delete without opening a replacement PR. **Old head:** `4a6357800364718a27a36ebc73578d4b929ff4aa` **New head:** `137426f7ad6562c9e4ae09451d55491b6a4ccc7d` ### Fix 1 — post-delete readback After gitea_cleanup_merged_pr_branch DELETE, immediately probes the branch via the canonical GET client. Authoritative not-found is verified deletion. If the branch still exists, return structured failure (delete_acknowledged=true, success=false). Authentication, authorization, transport, and unexpected responses are preserved as structured error_class values without credentials or raw bodies. Readback evidence is included in the tool result and audit metadata. ### Fix 2 — active ownership protection Before DELETE, collects ownership from author issue locks, control-plane leases (role-tagged), and worktree bindings for the exact remote/org/repo/branch. Blocks active author session/lease, reviewer lease, merger/controller/reconciler lease, and worktree binding ownership. Released/abandoned/reclaimable expired records do not block; sticky stale (reclaim_allowed=false) blocks per recovery policy. Out-of-scope repository or branch ownership is ignored. Existing protected/default/preservation, open-PR, non-ancestor, confirmation phrase, and reconciler-role gates are preserved. ### Changed files - branch_cleanup_guard.py — pure readback + ownership assessors - gitea_mcp_server.py — ownership pre-check + post-delete readback on cleanup path - tests/test_branch_cleanup_guard.py — coverage for both fixes and existing gates ### Validation - Focused tests/test_branch_cleanup_guard.py: 34 passed (+ 8 subtests) - Branch-cleanup / reconciler / already-landed proportional suite: 239 passed (+ 8 subtests) - compileall on changed modules: OK - Diff hygiene: 3 files only; control checkout untouched; no branch deletions performed WHY: Independent review identified missing post-delete verification and incomplete ownership protection on the merged-PR branch cleanup path. RELATED_PRS: #688 BLOCKERS: none for independent re-review VALIDATION: - HEAD 137426f7ad6562c9e4ae09451d55491b6a4ccc7d pushed to feat/issue-687-reconciler-branch-delete - 239 passed / 8 subtests on proportional suite - Runtime parity in_parity at 5b0d7aed0a9ff38d6904a5136103f8394607dedc - Worktree branches/issue-687-reconciler-branch-delete LAST_UPDATED_BY: jcwalker3 / prgs-author / AUTHOR / 2026-07-16
jcwalker3 added 1 commit 2026-07-16 00:21:23 -05:00
Require branch-scoped post-delete not-found (not generic/repo/host 404),
emit consistent top-level cleanup fields, fail closed on ownership inventory
errors, never auto-reclaim expired control-plane leases, include active
comment-backed reviewer leases, apply the same gates to reconcile_merged_cleanups,
and match ownership with normalized host identity.
Author
Owner

Canonical Issue State

STATE:
ready-for-review — second remediation at new head; independent re-review required

WHO_IS_NEXT:
reviewer

NEXT_ACTION:
Independent REVIEWER (must differ from author jcwalker3 / prgs-author) re-validates R1/R2/O1/O2/O3/O4 and host matching at pinned head 1c37e620142ec4c9d5271ee84a0abc2d8decdd99; do not self-review or merge

NEXT_PROMPT:

Role: REVIEWER (must differ from PR author jcwalker3 / prgs-author)
Repo: prgs / Scaled-Tech-Consulting / Gitea-Tools
PR: #688 | Issue: #687
Head: feat/issue-687-reconciler-branch-delete @ 1c37e620142ec4c9d5271ee84a0abc2d8decdd99

Validate second-remediation findings R1, R2, O1, O2, O3, O4, and normalized host ownership matching. Run focused + reconciler suite. APPROVE or REQUEST_CHANGES only. Do not merge. Do not delete branches.

WHAT_HAPPENED:
Second author remediation on feat/issue-687-reconciler-branch-delete.

Old head: 137426f7ad6562c9e4ae09451d55491b6a4ccc7d
New head: 1c37e620142ec4c9d5271ee84a0abc2d8decdd99

Findings fixed

  1. R1 — only branch-scoped not-found (repo re-probe proves repo reachable) sets verified_absent; generic/repository/host 404 cannot.
  2. R2 — success/performed/delete_acknowledged/verified_absent always top-level via cleanup_result_envelope.
  3. O1 — control-plane inventory errors fail closed (inventory_error + ownership_inventory_error category).
  4. O2 — expired control-plane leases never auto reclaim_allowed=true.
  5. O3 — active comment-backed reviewer leases collected via find_active_reviewer_lease.
  6. O4 — gitea_reconcile_merged_cleanups runs ownership + post-delete readback before reporting delete success.
  7. Host — ownership matching uses normalize_host; disagreeing hosts are out of scope.

Validation

  • Focused: 48 passed (+ 12 subtests) previously 34
  • Proportional cleanup/reconciler suite: 253 passed (+ 12 subtests) previously 239

WHY:
Second independent review blockers on readback scope, result field consistency, inventory fail-open, expired reclaim, missing comment leases, reconcile bypass, and host identity.

RELATED_PRS:
#688

BLOCKERS:
none for independent re-review

VALIDATION:

  • HEAD 1c37e62014 pushed
  • 253 passed proportional suite

LAST_UPDATED_BY:
jcwalker3 / prgs-author / AUTHOR / 2026-07-16

## Canonical Issue State STATE: ready-for-review — second remediation at new head; independent re-review required WHO_IS_NEXT: reviewer NEXT_ACTION: Independent REVIEWER (must differ from author jcwalker3 / prgs-author) re-validates R1/R2/O1/O2/O3/O4 and host matching at pinned head `1c37e620142ec4c9d5271ee84a0abc2d8decdd99`; do not self-review or merge NEXT_PROMPT: ```text Role: REVIEWER (must differ from PR author jcwalker3 / prgs-author) Repo: prgs / Scaled-Tech-Consulting / Gitea-Tools PR: #688 | Issue: #687 Head: feat/issue-687-reconciler-branch-delete @ 1c37e620142ec4c9d5271ee84a0abc2d8decdd99 Validate second-remediation findings R1, R2, O1, O2, O3, O4, and normalized host ownership matching. Run focused + reconciler suite. APPROVE or REQUEST_CHANGES only. Do not merge. Do not delete branches. ``` WHAT_HAPPENED: Second author remediation on feat/issue-687-reconciler-branch-delete. **Old head:** `137426f7ad6562c9e4ae09451d55491b6a4ccc7d` **New head:** `1c37e620142ec4c9d5271ee84a0abc2d8decdd99` ### Findings fixed 1. **R1** — only branch-scoped not-found (repo re-probe proves repo reachable) sets verified_absent; generic/repository/host 404 cannot. 2. **R2** — success/performed/delete_acknowledged/verified_absent always top-level via cleanup_result_envelope. 3. **O1** — control-plane inventory errors fail closed (inventory_error + ownership_inventory_error category). 4. **O2** — expired control-plane leases never auto reclaim_allowed=true. 5. **O3** — active comment-backed reviewer leases collected via find_active_reviewer_lease. 6. **O4** — gitea_reconcile_merged_cleanups runs ownership + post-delete readback before reporting delete success. 7. **Host** — ownership matching uses normalize_host; disagreeing hosts are out of scope. ### Validation - Focused: 48 passed (+ 12 subtests) previously 34 - Proportional cleanup/reconciler suite: 253 passed (+ 12 subtests) previously 239 WHY: Second independent review blockers on readback scope, result field consistency, inventory fail-open, expired reclaim, missing comment leases, reconcile bypass, and host identity. RELATED_PRS: #688 BLOCKERS: none for independent re-review VALIDATION: - HEAD 1c37e620142ec4c9d5271ee84a0abc2d8decdd99 pushed - 253 passed proportional suite LAST_UPDATED_BY: jcwalker3 / prgs-author / AUTHOR / 2026-07-16
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #688
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 34951-162bb08c1f58
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-688-1c37e620
phase: claimed
candidate_head: 1c37e62014
target_branch: master
target_branch_sha: 5b0d7aed0a
last_activity: 2026-07-16T05:37:21Z
expires_at: 2026-07-16T07:37:21Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #688 issue: none reviewer_identity: sysadmin profile: prgs-reviewer session_id: 34951-162bb08c1f58 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-688-1c37e620 phase: claimed candidate_head: 1c37e620142ec4c9d5271ee84a0abc2d8decdd99 target_branch: master target_branch_sha: 5b0d7aed0a9ff38d6904a5136103f8394607dedc last_activity: 2026-07-16T05:37:21Z expires_at: 2026-07-16T07:37:21Z blocker: none
sysadmin approved these changes 2026-07-16 00:44:51 -05:00
sysadmin left a comment
Owner

Canonical PR State

STATE: approve
WHO_IS_NEXT: merger
NEXT_ACTION: Merger may merge PR #688 at head 1c37e62014 with explicit operator authorization only; do not force-merge.
NEXT_PROMPT:

Using gitea-merger only, merge PR #688 at expected_head_sha 1c37e620142ec4c9d5271ee84a0abc2d8decdd99 after confirming live open+mergeable and approval at pin. Do not force-merge.

WHAT_HAPPENED: Formal independent re-review of PR #688 at pinned head 1c37e62014 completed via gitea-reviewer. All prior #687 remediation gates re-verified PASS. Prior REQUEST_CHANGES review #425 at c7a444e is stale after author push.
WHY: Post-delete readback scopes verified_absent to branch-only 404; ownership inventory fails closed; expired leases are not auto-reclaimable; sticky ownership blocks deletion; comment-backed reviewer leases are included; reconcile path cannot bypass ownership/readback; reconciler alone uses guarded cleanup; migrations remain idempotent; three-dot scope is limited to ten #687 files.
ISSUE: 687
HEAD_SHA: 1c37e62014
REVIEW_STATUS: approve
MERGE_READY: true
BLOCKERS: none
VALIDATION: Detached worktree branches/review-pr-688-1c37e620 @ pin. test_branch_cleanup_guard 48 passed; migrate/reconciler/audit 98; lease/merged-cleanup 136; proportional mcp_server+lease 231; compileall/AST ok.
LAST_UPDATED_BY: reviewer
NATIVE_REVIEW_PROOF: transport=native_mcp; entrypoint=mcp_server; token_fingerprint=4bb98ec79fdc925f; profile=prgs-reviewer; identity=sysadmin; session=34951-162bb08c1f58; lease_comment=11762

## Canonical PR State STATE: approve WHO_IS_NEXT: merger NEXT_ACTION: Merger may merge PR #688 at head 1c37e620142ec4c9d5271ee84a0abc2d8decdd99 with explicit operator authorization only; do not force-merge. NEXT_PROMPT: ```text Using gitea-merger only, merge PR #688 at expected_head_sha 1c37e620142ec4c9d5271ee84a0abc2d8decdd99 after confirming live open+mergeable and approval at pin. Do not force-merge. ``` WHAT_HAPPENED: Formal independent re-review of PR #688 at pinned head 1c37e620142ec4c9d5271ee84a0abc2d8decdd99 completed via gitea-reviewer. All prior #687 remediation gates re-verified PASS. Prior REQUEST_CHANGES review #425 at c7a444e is stale after author push. WHY: Post-delete readback scopes verified_absent to branch-only 404; ownership inventory fails closed; expired leases are not auto-reclaimable; sticky ownership blocks deletion; comment-backed reviewer leases are included; reconcile path cannot bypass ownership/readback; reconciler alone uses guarded cleanup; migrations remain idempotent; three-dot scope is limited to ten #687 files. ISSUE: 687 HEAD_SHA: 1c37e620142ec4c9d5271ee84a0abc2d8decdd99 REVIEW_STATUS: approve MERGE_READY: true BLOCKERS: none VALIDATION: Detached worktree branches/review-pr-688-1c37e620 @ pin. test_branch_cleanup_guard 48 passed; migrate/reconciler/audit 98; lease/merged-cleanup 136; proportional mcp_server+lease 231; compileall/AST ok. LAST_UPDATED_BY: reviewer NATIVE_REVIEW_PROOF: transport=native_mcp; entrypoint=mcp_server; token_fingerprint=4bb98ec79fdc925f; profile=prgs-reviewer; identity=sysadmin; session=34951-162bb08c1f58; lease_comment=11762
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #688
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 34951-162bb08c1f58
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-688-1c37e620
phase: released
candidate_head: 1c37e62014
target_branch: master
target_branch_sha: 5b0d7aed0a
last_activity: 2026-07-16T05:45:05Z
expires_at: 2026-07-16T07:45:05Z
blocker: manual-release

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #688 issue: none reviewer_identity: sysadmin profile: prgs-reviewer session_id: 34951-162bb08c1f58 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-688-1c37e620 phase: released candidate_head: 1c37e620142ec4c9d5271ee84a0abc2d8decdd99 target_branch: master target_branch_sha: 5b0d7aed0a9ff38d6904a5136103f8394607dedc last_activity: 2026-07-16T05:45:05Z expires_at: 2026-07-16T07:45:05Z blocker: manual-release
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #688
issue: #687
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 75747-0ae40ff3cc5c
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/merge-pr-688-1c37e620-m
phase: claimed
candidate_head: 1c37e62014
target_branch: master
target_branch_sha: 5b0d7aed0a
last_activity: 2026-07-16T08:16:38Z
expires_at: 2026-07-16T10:16:38Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #688 issue: #687 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 75747-0ae40ff3cc5c worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/merge-pr-688-1c37e620-m phase: claimed candidate_head: 1c37e620142ec4c9d5271ee84a0abc2d8decdd99 target_branch: master target_branch_sha: 5b0d7aed0a9ff38d6904a5136103f8394607dedc last_activity: 2026-07-16T08:16:38Z expires_at: 2026-07-16T10:16:38Z blocker: none
Owner

adopted_at: 2026-07-16T08:19:39Z
adopted_by_identity: sysadmin
adopted_by_profile: prgs-merger
adopted_from_session_id: 75747-0ae40ff3cc5c
adopted_from_profile: prgs-reviewer
adopted_from_reviewer_identity: sysadmin
adopted_from_comment_id: 11793
adoption_reason: merger-handoff-approved-head

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #688
issue: #687
reviewer_identity: sysadmin
profile: prgs-merger
session_id: 75754-bd19f7fe5ce6
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/merge-pr-688-1c37e620-m
phase: adopted
candidate_head: 1c37e62014
target_branch: master
target_branch_sha: 5b0d7aed0a
last_activity: 2026-07-16T08:19:39Z
expires_at: 2026-07-16T10:19:39Z
blocker: none

<!-- mcp-review-lease-adoption:v1 --> adopted_at: 2026-07-16T08:19:39Z adopted_by_identity: sysadmin adopted_by_profile: prgs-merger adopted_from_session_id: 75747-0ae40ff3cc5c adopted_from_profile: prgs-reviewer adopted_from_reviewer_identity: sysadmin adopted_from_comment_id: 11793 adoption_reason: merger-handoff-approved-head <!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #688 issue: #687 reviewer_identity: sysadmin profile: prgs-merger session_id: 75754-bd19f7fe5ce6 worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/merge-pr-688-1c37e620-m phase: adopted candidate_head: 1c37e620142ec4c9d5271ee84a0abc2d8decdd99 target_branch: master target_branch_sha: 5b0d7aed0a9ff38d6904a5136103f8394607dedc last_activity: 2026-07-16T08:19:39Z expires_at: 2026-07-16T10:19:39Z blocker: none
sysadmin merged commit 77746b08fc into master 2026-07-16 03:23:04 -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-16T08:23:05.443723+00:00` - last terminal: `approve` on PR #688 - PR state: `closed` (merged=True) - merge_commit_sha: `77746b08fc19e20abb95e4171784e321cb88817a` - 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#688