fix(session): keep KIND_DECISION_LOCK durable past generic 4h TTL (Closes #720) #721

Merged
sysadmin merged 1 commits from fix/issue-720-expired-decision-lock into master 2026-07-16 19:48:07 -05:00
Owner

Summary

Closes #720.

Root cause

KIND_DECISION_LOCK was treated as ordinary session state under the generic four-hour TTL. After age expiry, durable load / gitea_mark_final_review_decision failed with session state expired after 4h before head-scoped #620 logic (fresh_review_on_current_head_allowed) could allow an independent formal review at a newer open-PR head. Moot cleanup (#594) is correctly forbidden while the PR is open, and irrecoverable recovery (#709) is not an ordinary-profile path — so affected open PRs had no reachable sanctioned recovery.

Concrete reproduction: PR #616, review 443 REQUEST_CHANGES at old head a0fffae…, remediated head a6a2243…, independent re-review green, prepared APPROVE blocked by TTL.

State-machine correction

  1. Classify KIND_DECISION_LOCK as recovery-critical (with archive/recovery kinds). Terminal review provenance is not disposable cache; other kinds (workflow load, drafts, etc.) remain TTL-bound.
  2. Stamp kind + recovery_critical on decision-lock save for compatibility and flag-based readers.
  3. Add inspect_state_envelope so assessment can report on-disk present / age / TTL-exempt status instead of silent "no lock".
  4. Stale decision-lock cleanup assessment surfaces disk_inspect when normal load is empty but a file remains.

Existing on-disk ledgers become loadable after deploy without hand-editing session-state files (kind membership is enough).

Compatibility

  • Pre-#720 serialized envelopes with kind: review_decision_lock load after >4h.
  • Same-head second terminal still hard-stops (#332).
  • New-head fresh mark/submit still allowed (#620).
  • Merged/closed moot cleanup unchanged (#594).
  • Irrecoverable provenance still requires dedicated #709 authorization; no grant of gitea.decision_lock.irrecoverable_recovery to author/reviewer/merger/general reconciler profiles.

Security invariants

  • Historical old-head mutations preserved on the ledger (never dismissed/deleted).
  • REQUEST_CHANGES never counts as approval.
  • Current-head one-verdict / same-run protections remain enforced.
  • No bypass flags, env overrides, or caller-supplied authorization.
  • No ordinary-profile recovery permission expansion.
  • Structured hard-stop errors remain actionable (not generic internal_error).

Tests

  • New tests/test_issue_720_expired_decision_lock.py (14):
    • under 4h and over 4h fresh review at head B allowed
    • historical RC at A preserved + stale_by_head
    • no approval reuse from A
    • second terminal at B same-run blocked
    • open PR same head expired still fail-closed
    • merged moot cleanup still allowed
    • assessment reports on-disk / age not "absent"
    • legacy serialized compatibility
    • workflow_load still TTL-expires
    • ordinary tasks do not map to irrecoverable_recovery
    • structured same-head error text

Validation

pytest tests/test_issue_720_expired_decision_lock.py -q
# 14 passed

pytest tests/test_issue_720_expired_decision_lock.py \
  tests/test_head_scoped_review_decision_lock.py \
  tests/test_stale_review_decision_lock_cleanup.py \
  tests/test_issue_709_decision_lock_cross_profile.py \
  tests/test_mcp_session_state.py tests/test_session_state_isolation.py \
  tests/test_terminal_review_hard_stop.py tests/test_resolve_task_capability.py \
  tests/test_preflight_read_survival.py tests/test_reviewer_mutation_capability_proof.py -q
# 228 passed

pytest tests/ -q
# 2898 passed, 6 skipped, 1 warning, 173 subtests passed

Explicit non-goals

  • Does not modify PR #616, review 443, live session-state, forensic files, or chore/preserve-local-master-54753d4
  • Does not grant irrecoverable recovery to ordinary profiles
  • Does not globally delete the four-hour TTL for all session kinds

Next role

Independent REVIEWER — do not self-review or merge.

## Summary Closes #720. ### Root cause `KIND_DECISION_LOCK` was treated as ordinary session state under the generic four-hour TTL. After age expiry, durable load / `gitea_mark_final_review_decision` failed with `session state expired after 4h` **before** head-scoped `#620` logic (`fresh_review_on_current_head_allowed`) could allow an independent formal review at a newer open-PR head. Moot cleanup (`#594`) is correctly forbidden while the PR is open, and irrecoverable recovery (`#709`) is not an ordinary-profile path — so affected open PRs had **no reachable sanctioned recovery**. Concrete reproduction: **PR #616**, review **443** `REQUEST_CHANGES` at old head `a0fffae…`, remediated head `a6a2243…`, independent re-review green, prepared APPROVE blocked by TTL. ### State-machine correction 1. Classify **`KIND_DECISION_LOCK` as recovery-critical** (with archive/recovery kinds). Terminal review provenance is not disposable cache; other kinds (workflow load, drafts, etc.) remain TTL-bound. 2. Stamp `kind` + `recovery_critical` on decision-lock save for compatibility and flag-based readers. 3. Add **`inspect_state_envelope`** so assessment can report **on-disk present** / age / TTL-exempt status instead of silent "no lock". 4. Stale decision-lock cleanup assessment surfaces `disk_inspect` when normal load is empty but a file remains. Existing on-disk ledgers become loadable after deploy **without hand-editing** session-state files (kind membership is enough). ### Compatibility - Pre-#720 serialized envelopes with `kind: review_decision_lock` load after >4h. - Same-head second terminal still hard-stops (#332). - New-head fresh mark/submit still allowed (#620). - Merged/closed moot cleanup unchanged (#594). - Irrecoverable provenance still requires dedicated `#709` authorization; **no** grant of `gitea.decision_lock.irrecoverable_recovery` to author/reviewer/merger/general reconciler profiles. ### Security invariants - Historical old-head mutations preserved on the ledger (never dismissed/deleted). - `REQUEST_CHANGES` never counts as approval. - Current-head one-verdict / same-run protections remain enforced. - No bypass flags, env overrides, or caller-supplied authorization. - No ordinary-profile recovery permission expansion. - Structured hard-stop errors remain actionable (not generic `internal_error`). ### Tests - New `tests/test_issue_720_expired_decision_lock.py` (14): - under 4h and over 4h fresh review at head B allowed - historical RC at A preserved + stale_by_head - no approval reuse from A - second terminal at B same-run blocked - open PR same head expired still fail-closed - merged moot cleanup still allowed - assessment reports on-disk / age not "absent" - legacy serialized compatibility - workflow_load still TTL-expires - ordinary tasks do not map to irrecoverable_recovery - structured same-head error text ### Validation ```text pytest tests/test_issue_720_expired_decision_lock.py -q # 14 passed pytest tests/test_issue_720_expired_decision_lock.py \ tests/test_head_scoped_review_decision_lock.py \ tests/test_stale_review_decision_lock_cleanup.py \ tests/test_issue_709_decision_lock_cross_profile.py \ tests/test_mcp_session_state.py tests/test_session_state_isolation.py \ tests/test_terminal_review_hard_stop.py tests/test_resolve_task_capability.py \ tests/test_preflight_read_survival.py tests/test_reviewer_mutation_capability_proof.py -q # 228 passed pytest tests/ -q # 2898 passed, 6 skipped, 1 warning, 173 subtests passed ``` ### Explicit non-goals - Does not modify PR #616, review 443, live session-state, forensic files, or `chore/preserve-local-master-54753d4` - Does not grant irrecoverable recovery to ordinary profiles - Does not globally delete the four-hour TTL for all session kinds ### Next role **Independent REVIEWER** — do not self-review or merge.
jcwalker3 added 1 commit 2026-07-16 14:48:13 -05:00
Terminal review-decision ledgers are recovery-critical provenance, not
disposable session cache. A generic four-hour TTL previously made
fresh_review_on_current_head_allowed unreachable after age expiry on open
PRs (PR #616 / review 443 reproduction).

- Classify KIND_DECISION_LOCK as RECOVERY_CRITICAL so load/mark_final work
  after >4h without hand-editing session-state files
- Stamp kind + recovery_critical on save for compatibility
- Add inspect_state_envelope so assessment reports on-disk evidence instead
  of silent "no lock" when TTL would hide non-critical kinds
- Surface disk_inspect on stale decision-lock cleanup assessment

Preserves same-head #332 hard-stop, #620 head-scoped fresh review, #594
moot cleanup, and #709 irrecoverable authorization (no ordinary-profile
permission grant).
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #721
issue: #720
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 74516-b6720915604a
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-721-80f59b3
phase: claimed
candidate_head: 80f59b334e
target_branch: master
target_branch_sha: 293808b42d
last_activity: 2026-07-16T21:56:45Z
expires_at: 2026-07-16T23:56:45Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #721 issue: #720 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 74516-b6720915604a worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-721-80f59b3 phase: claimed candidate_head: 80f59b334e6671b08006725292c08a8e8b6c823f target_branch: master target_branch_sha: 293808b42d54c4736f8fb55f71b10d93a40ae4ea last_activity: 2026-07-16T21:56:45Z expires_at: 2026-07-16T23:56:45Z blocker: none
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #721
issue: #720
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 74516-b6720915604a
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-721-80f59b3
phase: released
candidate_head: 80f59b334e
target_branch: master
target_branch_sha: 293808b42d
last_activity: 2026-07-16T22:01:03Z
expires_at: 2026-07-17T00:01:03Z
blocker: manual-release

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #721 issue: #720 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 74516-b6720915604a worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-721-80f59b3 phase: released candidate_head: 80f59b334e6671b08006725292c08a8e8b6c823f target_branch: master target_branch_sha: 293808b42d54c4736f8fb55f71b10d93a40ae4ea last_activity: 2026-07-16T22:01:03Z expires_at: 2026-07-17T00:01:03Z blocker: manual-release
Owner

Canonical Issue State

STATE: blocked_formal_review_submit
WHO_IS_NEXT: controller
NEXT_ACTION: Fix master task_capability_map so review_pr and approve_pr use role=reviewer (matching prgs-reviewer), restart gitea-reviewer MCP with in_parity, then independent reviewer posts one formal APPROVE at head 80f59b3
NEXT_PROMPT:

Independent formal review of PR #721 after master role-map fix.
Remote: prgs / Scaled-Tech-Consulting/Gitea-Tools
Expected head: 80f59b334e6671b08006725292c08a8e8b6c823f
Reviewer: sysadmin / prgs-reviewer only; native gitea-reviewer tools; no merge.
Preflight: whoami → resolve review_pr (must allow) → acquire lease → worktree at head → mark_final approve → submit_pr_review APPROVE once → handoff → release lease.
Prior independent review found Issue #720 ACs satisfied; tests 14/228/2898; clean merge sim. Re-validate only if head or master moved.

WHAT_HAPPENED: Independent code review of PR #721 completed as APPROVE-worthy (Issue #720 ACs pass; 14/228/2898 tests; clean merge onto 293808b4). Formal submit blocked: master 970e68b remapped review_pr to role=merger while prgs-merger forbids approve/review and prgs-reviewer is role=reviewer. Lease acquired and released (11891/11893). mark_final succeeded earlier; no formal Gitea review object. No merge.
WHY: Runtime master role map catch-22 prevents resolve(review_pr) on prgs-reviewer. Orthogonal to PR #721 three-dot scope.
RELATED_PRS: #721, #720, master 970e68b, 293808b4
BLOCKERS: Unblock when master maps review_pr/approve_pr to role=reviewer matching prgs-reviewer permissions and gitea-reviewer MCP is restarted with in_parity such that resolve(review_pr) returns allowed_in_current_session=true
VALIDATION: 14 focused + 228 aggregate + 2898 full suite passed (6 skipped, 1 warning, 173 subtests); clean merge sim; checkouts clean
LAST_UPDATED_BY: sysadmin / prgs-reviewer

## Canonical Issue State STATE: blocked_formal_review_submit WHO_IS_NEXT: controller NEXT_ACTION: Fix master task_capability_map so review_pr and approve_pr use role=reviewer (matching prgs-reviewer), restart gitea-reviewer MCP with in_parity, then independent reviewer posts one formal APPROVE at head 80f59b3 NEXT_PROMPT: ```text Independent formal review of PR #721 after master role-map fix. Remote: prgs / Scaled-Tech-Consulting/Gitea-Tools Expected head: 80f59b334e6671b08006725292c08a8e8b6c823f Reviewer: sysadmin / prgs-reviewer only; native gitea-reviewer tools; no merge. Preflight: whoami → resolve review_pr (must allow) → acquire lease → worktree at head → mark_final approve → submit_pr_review APPROVE once → handoff → release lease. Prior independent review found Issue #720 ACs satisfied; tests 14/228/2898; clean merge sim. Re-validate only if head or master moved. ``` WHAT_HAPPENED: Independent code review of PR #721 completed as APPROVE-worthy (Issue #720 ACs pass; 14/228/2898 tests; clean merge onto 293808b4). Formal submit blocked: master 970e68b remapped review_pr to role=merger while prgs-merger forbids approve/review and prgs-reviewer is role=reviewer. Lease acquired and released (11891/11893). mark_final succeeded earlier; no formal Gitea review object. No merge. WHY: Runtime master role map catch-22 prevents resolve(review_pr) on prgs-reviewer. Orthogonal to PR #721 three-dot scope. RELATED_PRS: #721, #720, master 970e68b, 293808b4 BLOCKERS: Unblock when master maps review_pr/approve_pr to role=reviewer matching prgs-reviewer permissions and gitea-reviewer MCP is restarted with in_parity such that resolve(review_pr) returns allowed_in_current_session=true VALIDATION: 14 focused + 228 aggregate + 2898 full suite passed (6 skipped, 1 warning, 173 subtests); clean merge sim; checkouts clean LAST_UPDATED_BY: sysadmin / prgs-reviewer
Owner

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #721
issue: #720
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 14647-427dc88f7b0b
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-721-80f59b3
phase: claimed
candidate_head: 80f59b334e
target_branch: master
target_branch_sha: ba7915452e
last_activity: 2026-07-17T00:06:18Z
expires_at: 2026-07-17T02:06:18Z
blocker: none

<!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #721 issue: #720 reviewer_identity: sysadmin profile: prgs-reviewer session_id: 14647-427dc88f7b0b worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-721-80f59b3 phase: claimed candidate_head: 80f59b334e6671b08006725292c08a8e8b6c823f target_branch: master target_branch_sha: ba7915452e17b5b7d93a2bb8bddefe534cbfb6bb last_activity: 2026-07-17T00:06:18Z expires_at: 2026-07-17T02:06:18Z blocker: none
sysadmin approved these changes 2026-07-16 19:12:53 -05:00
sysadmin left a comment
Owner

APPROVE — independent formal review of PR #721 at head 80f59b334e (Closes-#720 scope), recorded after the incident #722 capability repair.

Technical basis (validated at this exact head; see PR comments 11891–11895): KIND_DECISION_LOCK correctly classified recovery-critical with archive/recovery kinds; recovery_critical + kind stamped on save for legacy envelopes; inspect_state_envelope reports on-disk presence/age/TTL-exempt status; stale-lock assessment surfaces disk_inspect; #332 same-head, #620 new-head, #594 moot-cleanup, and #709 authorization boundaries all preserved; no ordinary-profile recovery permission expansion. Test evidence at this head: 14 focused, 228 aggregate, 2898 full-suite passing (6 skipped, 1 known warning). Base master has since advanced 293808b4ba79154 (capability-map role restoration + invariant tests only — no file overlap with this PR's diff; merge simulation remains clean).

Canonical PR State

STATE: formal_approve_verdict_recorded
ISSUE: #720
HEAD_SHA: 80f59b334e
REVIEW_STATUS: APPROVE verdict recorded via the native review API at head 80f59b3 by prgs-reviewer / sysadmin
NATIVE_REVIEW_PROOF: this verdict is recorded by the live native gitea-reviewer MCP daemon (native_mcp transport, daemon pid 14647, reviewer lease session 14647-427dc88f7b0b, lease comment 11925) through gitea_submit_pr_review with final_review_decision_ready consuming the durable decision lock; no offline, import, or script fallback path was used
MERGE_READY: eligible for independent merger adoption; merger must re-verify head, gates, and authorization before any merge
WHO_IS_NEXT: merger
NEXT_ACTION: Independent merger session adopts the PR lease and merges PR #721 only under separate explicit authorization
NEXT_PROMPT:

Merger adoption for PR #721 (prgs / Scaled-Tech-Consulting/Gitea-Tools).
Expected head: 80f59b334e6671b08006725292c08a8e8b6c823f
Preflight: whoami → resolve merge_pr → adopt_merger_pr_lease → verify APPROVE at head → merge.
Requires separate operator authorization per incident #722 recovery constraints.

WHAT_HAPPENED: The prepared APPROVE decision for PR #721, stranded by the #722 capability regression, is now recorded as a formal native review after the operator-authorized master repair (ba79154) and reviewer-namespace restart.
WHY: Prior independent review at this exact head found Issue #720 acceptance criteria satisfied; the formal verdict was stranded by the #722 capability regression, which is now repaired at master ba79154 with resolve(review_pr) allowing prgs-reviewer again.
RELATED_PRS: #721, #720, #722, #723
BLOCKERS: none for this review verdict; merge requires a separate operator authorization
VALIDATION: at head 80f59b3 — 14 focused, 228 aggregate, 2898 full-suite tests passing (6 skipped, 1 known warning); clean merge simulation; capability-repair suite 2900 passing at master ba79154
LAST_UPDATED_BY: prgs-reviewer / sysadmin (native gitea-reviewer namespace)

[THREAD STATE LEDGER]

what is true now: PR #721 remains in open state at head 80f59b3; this submission records the APPROVE verdict via the native review API; master carries the #722 capability repair at ba79154.

what changed: the formal verdict is now recorded on Gitea; previously only a durable local prepared-APPROVE decision lock existed with no review object.

what is blocked: the merge, pending separate operator authorization and an independent merger session.

who/what acts next: a merger session adopts the PR lease and merges under explicit authorization; the controller completes the incident #722 audit trail.

Server-side decision state: APPROVE review recorded at head 80f59b3; PR #721 in open state awaiting merger.
Local verdict/state: durable decision lock consumed by this submission; reviewer lease 11925 active and released immediately after this verdict.
Next actor: merger (separate session, separate authorization).
Required action: merger adoption and merge of PR #721, then Issue #720 closure through the merge.
Blocker classification: no blocker
Do not do: no self-merge from this reviewer session; no additional review mutations for PR #721 in this run.

APPROVE — independent formal review of PR #721 at head 80f59b334e6671b08006725292c08a8e8b6c823f (Closes-#720 scope), recorded after the incident #722 capability repair. Technical basis (validated at this exact head; see PR comments 11891–11895): KIND_DECISION_LOCK correctly classified recovery-critical with archive/recovery kinds; `recovery_critical` + `kind` stamped on save for legacy envelopes; `inspect_state_envelope` reports on-disk presence/age/TTL-exempt status; stale-lock assessment surfaces `disk_inspect`; #332 same-head, #620 new-head, #594 moot-cleanup, and #709 authorization boundaries all preserved; no ordinary-profile recovery permission expansion. Test evidence at this head: 14 focused, 228 aggregate, 2898 full-suite passing (6 skipped, 1 known warning). Base master has since advanced 293808b4 → ba79154 (capability-map role restoration + invariant tests only — no file overlap with this PR's diff; merge simulation remains clean). ## Canonical PR State STATE: formal_approve_verdict_recorded ISSUE: #720 HEAD_SHA: 80f59b334e6671b08006725292c08a8e8b6c823f REVIEW_STATUS: APPROVE verdict recorded via the native review API at head 80f59b3 by prgs-reviewer / sysadmin NATIVE_REVIEW_PROOF: this verdict is recorded by the live native gitea-reviewer MCP daemon (native_mcp transport, daemon pid 14647, reviewer lease session 14647-427dc88f7b0b, lease comment 11925) through gitea_submit_pr_review with final_review_decision_ready consuming the durable decision lock; no offline, import, or script fallback path was used MERGE_READY: eligible for independent merger adoption; merger must re-verify head, gates, and authorization before any merge WHO_IS_NEXT: merger NEXT_ACTION: Independent merger session adopts the PR lease and merges PR #721 only under separate explicit authorization NEXT_PROMPT: ```text Merger adoption for PR #721 (prgs / Scaled-Tech-Consulting/Gitea-Tools). Expected head: 80f59b334e6671b08006725292c08a8e8b6c823f Preflight: whoami → resolve merge_pr → adopt_merger_pr_lease → verify APPROVE at head → merge. Requires separate operator authorization per incident #722 recovery constraints. ``` WHAT_HAPPENED: The prepared APPROVE decision for PR #721, stranded by the #722 capability regression, is now recorded as a formal native review after the operator-authorized master repair (ba79154) and reviewer-namespace restart. WHY: Prior independent review at this exact head found Issue #720 acceptance criteria satisfied; the formal verdict was stranded by the #722 capability regression, which is now repaired at master ba79154 with resolve(review_pr) allowing prgs-reviewer again. RELATED_PRS: #721, #720, #722, #723 BLOCKERS: none for this review verdict; merge requires a separate operator authorization VALIDATION: at head 80f59b3 — 14 focused, 228 aggregate, 2898 full-suite tests passing (6 skipped, 1 known warning); clean merge simulation; capability-repair suite 2900 passing at master ba79154 LAST_UPDATED_BY: prgs-reviewer / sysadmin (native gitea-reviewer namespace) [THREAD STATE LEDGER] what is true now: PR #721 remains in open state at head 80f59b3; this submission records the APPROVE verdict via the native review API; master carries the #722 capability repair at ba79154. what changed: the formal verdict is now recorded on Gitea; previously only a durable local prepared-APPROVE decision lock existed with no review object. what is blocked: the merge, pending separate operator authorization and an independent merger session. who/what acts next: a merger session adopts the PR lease and merges under explicit authorization; the controller completes the incident #722 audit trail. Server-side decision state: APPROVE review recorded at head 80f59b3; PR #721 in open state awaiting merger. Local verdict/state: durable decision lock consumed by this submission; reviewer lease 11925 active and released immediately after this verdict. Next actor: merger (separate session, separate authorization). Required action: merger adoption and merge of PR #721, then Issue #720 closure through the merge. Blocker classification: no blocker Do not do: no self-merge from this reviewer session; no additional review mutations for PR #721 in this run.
Owner

adopted_at: 2026-07-17T00:44:39Z
adopted_by_identity: sysadmin
adopted_by_profile: prgs-merger
adopted_from_session_id: 14647-427dc88f7b0b
adopted_from_profile: prgs-reviewer
adopted_from_reviewer_identity: sysadmin
adopted_from_comment_id: 11925
adoption_reason: merger-handoff-approved-head

repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #721
issue: #720
reviewer_identity: sysadmin
profile: prgs-merger
session_id: 60151-ffe26336620a
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-721-80f59b3
phase: adopted
candidate_head: 80f59b334e
target_branch: master
target_branch_sha: ba7915452e
last_activity: 2026-07-17T00:44:39Z
expires_at: 2026-07-17T02:44:39Z
blocker: none

<!-- mcp-review-lease-adoption:v1 --> adopted_at: 2026-07-17T00:44:39Z adopted_by_identity: sysadmin adopted_by_profile: prgs-merger adopted_from_session_id: 14647-427dc88f7b0b adopted_from_profile: prgs-reviewer adopted_from_reviewer_identity: sysadmin adopted_from_comment_id: 11925 adoption_reason: merger-handoff-approved-head <!-- mcp-review-lease:v1 --> repo: Scaled-Tech-Consulting/Gitea-Tools pr: #721 issue: #720 reviewer_identity: sysadmin profile: prgs-merger session_id: 60151-ffe26336620a worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-721-80f59b3 phase: adopted candidate_head: 80f59b334e6671b08006725292c08a8e8b6c823f target_branch: master target_branch_sha: ba7915452e17b5b7d93a2bb8bddefe534cbfb6bb last_activity: 2026-07-17T00:44:39Z expires_at: 2026-07-17T02:44:39Z blocker: none
sysadmin merged commit 67e4a2b5e9 into master 2026-07-16 19:48:07 -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-reviewer` - timestamp: `2026-07-17T02:05:12.947396+00:00` - last terminal: `approve` on PR #721 - PR state: `closed` (merged=True) - merge_commit_sha: `67e4a2b5e96b680a1dcb90a20c2ebf87357a3b1f` - 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#721