fix: isolate review-mutation ledger from host session-state (Closes #590) #592
Labels
Clear labels
allocator
anti-stomp
architecture
bug
chore
codex
concurrency
contamination
control-plane
dashboard
database
design
documentation
enhancement
gitea
glitchtip
important
incident
incident-bridge
integration
jenkins
labels
leases
mcp
mcp-health
mcp-menu
multi-project
mutating
nice-to-have
observability
portability
preflight
protected-branch
queue
read-only
reconnect
recovery
refactor
release
reliability
resumable-review
reviewer
roadmap
safety
security
self-hosted
sentry
stale-runtime
status:blocked
status:in-progress
status:pr-open
status:ready
terminal-lock
testing
tracker
type:bug
type:feature
type:feature
type:guardrail
visibility
workflow
workflow-hardening
workflow-hardening
Controller-owned work allocator
Prevent concurrent LLM session stomping
Architecture / structural design
OpenAI Codex client / workflow session surface
Concurrent session safety
Workflow or session contamination incident
MCP control-plane coordination and allocation authority
MCP operational dashboard/queue view
Internal coordination storage (SQLite/Postgres)
Design / investigation, no implementation
Docs / runbooks
New feature or improvement
Gitea MCP workflow
GlitchTip integration
Operational or process incident requiring durable audit trail
Sentry-to-Gitea incident bridging
Integration testing
Jenkins integration
Label taxonomy management
Lease adopt/release/expire lifecycle
MCP server / tooling
MCP namespace and runtime health
MCP menu surface
Work spanning multiple monitoring projects or Gitea repos
Mutating action; requires gating
Observability, metrics, traces, error reporting
Cross-platform / portability
Shared preflight gates before mutation
Protected branch / stable-branch policy concern
Work queue visibility and allocation
Read-only, no mutation
MCP client reconnect/reload recovery path
Recovery paths for stale/foreign leases
Code refactor / restructure
Release / versioning
Reliability / failure handling
Persist and resume prepared review verdicts across sessions
Reviewer workflow tooling
Roadmap / umbrella issue
Safety rails and fail-closed mutation guards
Security / trust boundary
Self-hosted infrastructure integration
Sentry error monitoring integration
Stale backend daemon / runtime-vs-master parity failures
Issue is blocked
Issue is being worked on
Issue has an open pull request
Issue is ready for work
Terminal review lock (#332) path
Tests / test coverage
Issue tracker hygiene / meta
Bug or defect
Feature or enhancement
Feature or enhancement
Safety gate or guardrail
Workflow state visibility for LLMs/operators
Cross-tool workflow
LLM workflow coordination hardening
LLM workflow coordination hardening
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: Scaled-Tech-Consulting/Gitea-Tools#592
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Fixes flaky
TestMergePR.test_unknown_profile_blockson clean master by isolating the durable review-mutation ledger from operator host session-state.Root cause
Many tests use
patch.dict(os.environ, ..., clear=True). That droppedGITEA_MCP_SESSION_STATE_DIRset bytests/conftest.py, so_load_review_decision_lockfell back to~/.cache/gitea-tools/session-state. A residualrequest_changesmutation then triggered the #332 terminal hard-stop before the empty-profile eligibility gate, so the test asserted the wrong reason.TestMergePR.setUpalso callsgitea_load_review_workflow(), which makes the hard-stop path reachable (workflow gate passes).Fix
mcp_session_state.default_state_dir/DEFAULT_STATE_DIRto a per-test temp dir so env clears cannot re-expose host cache; still honor an explicitGITEA_MCP_SESSION_STATE_DIRwhen a test sets its own.test_env_clear_does_not_adopt_host_review_mutation_ledgerplustests/test_session_state_isolation.py.Validation
Closes #590
0d8b000b10to5fae0ae4e7repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #592
issue: #590
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 40160-636d5991026e
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-592-issue-590
phase: claimed
candidate_head:
b810e512fdtarget_branch: master
target_branch_sha: none
last_activity: 2026-07-09T18:59:56Z
expires_at: 2026-07-09T20:59:56Z
blocker: none
Canonical Issue State
STATE:
blocked
WHO_IS_NEXT:
user
NEXT_ACTION:
Clear the stale prgs-reviewer #332 durable review-mutation ledger left from merged PR #586, then re-run formal APPROVE on PR #592 at head
b810e512fd.NEXT_PROMPT:
WHAT_HAPPENED:
Independent technical review of PR #592 completed in isolated worktree branches/review-pr-592-issue-590. Validation green (207 mcp_server tests + isolation/hard-stop suites). Formal APPROVE blocked: gitea_mark_final_review_decision fail-closed under #332 because durable prgs-reviewer ledger still records terminal approve on already-merged PR #586.
WHY:
#332 hard-stop is working as designed for a live run, but the durable session-state ledger (#559) retained terminal mutations after #586 merged, so a new independent PR review cannot mark/submit APPROVE. PR #592 code itself is scoped and tested; this is a tooling/session-state blocker, not a code rejection.
RELATED_DISCUSSION:
none
RELATED_PRS:
BRANCH:
fix/issue-590-ledger-isolation
HEAD_SHA:
b810e512fdVALIDATION:
BLOCKERS:
Durable #332 terminal ledger for prgs-reviewer still ends with approve on merged PR #586, blocking mark-ready/submit for any other PR. Unblock condition: clear/reset review_decision_lock-prgs-reviewer via supported operator path, then re-run formal review of #592.
LAST_UPDATED_BY:
sysadmin / prgs-reviewer / 2026-07-09
Technical review notes (informal; not a formal verdict)
Intended formal decision once unblocked: APPROVE
Isolation inspection (all pass for code change):
Review decision: BLOCKED + DIAGNOSE (tooling/session). No formal review/comment ID from gitea_submit_pr_review.
Lease comment_id: 8454
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #592
issue: #590
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 40160-636d5991026e
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-592-issue-590
phase: released
candidate_head:
b810e512fdtarget_branch: master
target_branch_sha: none
last_activity: 2026-07-09T19:04:23Z
expires_at: 2026-07-09T21:04:23Z
blocker: manual-release
Canonical Issue State
STATE: BLOCKED
WHO_IS_NEXT: user
NEXT_ACTION: Clear durable review_decision_lock for prgs-reviewer (or restart that MCP profile with a clean session-state dir), then re-run formal APPROVE submit for PR #592 at head
b810e512fd.NEXT_PROMPT:
WHAT_HAPPENED: Independent reviewer (sysadmin / prgs-reviewer, not author jcwalker3) fully re-validated PR #592 at live head
b810e512fd. Code is merge-ready (tests-only isolation fix for #590). Formal mark/submit failed closed under #332 because durable host session-state still records terminal approve mutations for PRs #589/#585/#586 under review_decision_lock-prgs-reviewer.json.WHY: #332 forbids additional terminal review mutations after a terminal live review in the same durable session; #559 persists that lock across daemon processes under ~/.cache/gitea-tools/session-state. This is an operator tooling/session gate, not a defect in the PR #592 patch.
RELATED_PRS: #592 (this PR), #586 (last terminal approve in durable lock), #585, #589 (prior terminal mutations in same lock), #590 (linked issue)
BLOCKERS: UNBLOCK when durable file ~/.cache/gitea-tools/session-state/review_decision_lock-prgs-reviewer.json no longer contains a terminal live_mutations entry that hard-stops mark_ready for a different PR (e.g. operator removes or resets that lock / restarts prgs-reviewer with a clean GITEA_MCP_SESSION_STATE_DIR). Currently blocked because live_mutations ends with approve on PR #586 so gitea_mark_final_review_decision for PR #592 fail-closes under #332.
VALIDATION:
b810e512fdLAST_UPDATED_BY: sysadmin (prgs-reviewer)
Implementation inspection summary
Canonical Issue State
STATE: BLOCKED
WHO_IS_NEXT: user
NEXT_ACTION: Advance the operator root Gitea-Tools checkout to prgs/master at
ac531dda05(PR #595 merge) and fully restart/reconnect the gitea-reviewer MCP so gitea_cleanup_stale_review_decision_lock is loaded; then re-run formal APPROVE of PR #592 at headb810e512fd.NEXT_PROMPT:
WHAT_HAPPENED: Formal APPROVE retry for PR #592 was attempted after #595 landed. Reviewer identity is correct (sysadmin / prgs-reviewer). PR #592 remains open at expected head
b810e512fd(self_author=false, approve eligible). Formal path STOPPED at prerequisite #2: live gitea-reviewer MCP still executes from root HEAD6913ac98f1(pre-#595). Tool search does not expose gitea_cleanup_stale_review_decision_lock (only gitea_cleanup_stale_claims). Root lacks stale_review_decision_lock.py; module exists on detached master worktree branches/merge-pr-595-issue-594 @ac531dd.WHY: Prerequisite requires MCP on master including #595 so canonical stale-lock cleanup is available. Restart alone is insufficient while the MCP entrypoint path points at a root checkout still behind prgs/master. Reviewer task is forbidden from mutating root; operator must fast-forward root then restart MCP.
RELATED_PRS: #592 (this PR), #590 (issue), #595 (landed cleanup tool; merge
ac531dda05)BLOCKERS: UNBLOCK when (1) root Gitea-Tools HEAD is
ac531dda05or later containing #595, AND (2) gitea-reviewer MCP fully restarted so ToolSearch exposes gitea_cleanup_stale_review_decision_lock. Note: PR #592 is currently mergeable=false after master advanced — formal approve may still target current head, but merger will need rebase/restack separately.VALIDATION:
ac531dd: yesLAST_UPDATED_BY: sysadmin (prgs-reviewer)
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #592
issue: #590
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 21268-dedcc138837f
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-538
phase: claimed
candidate_head:
b810e512fdtarget_branch: master
target_branch_sha: none
last_activity: 2026-07-09T20:11:04Z
expires_at: 2026-07-09T22:11:04Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #592
issue: #590
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 21268-dedcc138837f
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-538
phase: released
candidate_head:
b810e512fdtarget_branch: master
target_branch_sha: none
last_activity: 2026-07-09T20:13:09Z
expires_at: 2026-07-09T22:13:09Z
blocker: manual-release
Canonical Issue State
STATE: blocked — formal APPROVE retry of PR #592 cannot proceed because live gitea-reviewer still runs pre-#595 code and lacks gitea_cleanup_stale_review_decision_lock
WHO_IS_NEXT: user
NEXT_ACTION: Fast-forward root checkout to prgs/master at
ac531ddor later, fully restart/reconnect gitea-reviewer from that code, verify cleanup tool is registered, then re-run formal APPROVE of PR #592 at headb810e512fdNEXT_PROMPT:
WHAT_HAPPENED: Identity OK (sysadmin/prgs-reviewer). PR #592 open at expected head
b810e512fd(mergeable=false). PR #595 is on prgs/master (ac531dd) but root control checkout remains at6913ac9(4 commits behind). Live MCP tool catalog does not include gitea_cleanup_stale_review_decision_lock. Formal lease/mark/submit not attempted.WHY: MCP processes load root mcp_server.py from behind-master checkout; #595 cleanup tool exists only at/after
ac531dd. Cannot use manual session-state deletion. Root-guard (#475) also blocks mutations until control checkout matches prgs/master unless operating from a branches/ worktree.RELATED_PRS: #592 (this PR), #595 (landed cleanup tool, closes #594), #593 (open auto-restart MCP, #591), #586 (prior terminal PR referenced by stale #332 lock history)
BLOCKERS: live gitea-reviewer runtime missing #595 tool surface; root HEAD behind prgs/master; possible residual #332 lock for PR #586 once runtime is current; live mergeable=false for #592
VALIDATION: gitea_whoami remote=prgs -> sysadmin/prgs-reviewer; gitea_list_prs head_sha=b810e512; search_tool miss for cleanup tool; disk proof cleanup tool absent on root, present in branches/reviewer-pr592-retry@ac531dd
LAST_UPDATED_BY: prgs-reviewer (sysadmin) formal-review retry session 2026-07-09
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #592
issue: #590
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 23139-da018dab43ba
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-592-issue-590
phase: claimed
candidate_head:
b810e512fdtarget_branch: master
target_branch_sha: none
last_activity: 2026-07-09T20:16:18Z
expires_at: 2026-07-09T22:16:18Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #592
issue: #590
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 23139-da018dab43ba
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-592-issue-590
phase: released
candidate_head:
b810e512fdtarget_branch: master
target_branch_sha: none
last_activity: 2026-07-09T20:25:14Z
expires_at: 2026-07-09T22:25:14Z
blocker: manual-release
Canonical Issue State
STATE: recovery partial — root checkout and MCP process restart complete; this Grok session still cannot call gitea_cleanup_stale_review_decision_lock (client tool catalog not re-listed)
WHO_IS_NEXT: user
NEXT_ACTION: Start a fresh Grok session (or fully reconnect Gitea MCP namespaces so list_tools re-runs), confirm gitea_cleanup_stale_review_decision_lock is in search_tool, then retry formal review of PR #592 at head
b810e512fd. Reassess APPROVE vs REQUEST_CHANGES because live mergeable=false after master advanced past #595.NEXT_PROMPT:
WHAT_HAPPENED: Operator recovery run (2026-07-09). Root control checkout is clean at
ac531dda05(matches prgs/master; was already there at recovery start, not6913ac9). Gitea MCP processes killed and respawned under grok (new PIDs ~51505+ at 16:23 local). gitea_whoami and gitea_resolve_task_capability(review_pr) succeed on live gitea-reviewer. Fresh stdio list_tools against current master code reports 74 tools including gitea_cleanup_stale_review_decision_lock. This Grok session search_tool/use_tool still does not expose that tool (session catalog stuck pre-#595). Formal review not submitted.WHY: Host process now runs #595 code, but mid-session MCP tool rediscovery did not repopulate the client tool registry. Also PR #592 remains mergeable=false vs current master — formal decision may need to be REQUEST_CHANGES for conflicts rather than pure APPROVE.
RELATED_PRS: #592, #595 (landed), #591/#593 (auto-restart still needed)
BLOCKERS: client session missing gitea_cleanup_stale_review_decision_lock; unblock when a new session/list_tools exposes the tool; then recheck mergeable before approving
VALIDATION: HEAD=ac531dd clean; whoami sysadmin/prgs-reviewer; resolve review_pr ok; MCP list_tools has_cleanup=True count=74; search_tool miss for cleanup in this session; PR #592 head
b810e512mergeable=falseLAST_UPDATED_BY: prgs-reviewer (sysadmin) MCP operator recovery 2026-07-09
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #592
issue: #590
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 51515-2bfb70f0685f
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-592-issue-590
phase: claimed
candidate_head:
b810e512fdtarget_branch: master
target_branch_sha:
ac531dda05last_activity: 2026-07-09T20:25:49Z
expires_at: 2026-07-09T22:25:49Z
blocker: none
Canonical Issue State
STATE: BLOCKED
WHO_IS_NEXT: user
NEXT_ACTION: Clear the active #332 terminal path for open PR #593 (merge #593 if approved-and-ready, or complete that review sequence) so a new formal REQUEST_CHANGES can land on PR #592; also ensure the Grok host re-discovers gitea_cleanup_stale_review_decision_lock after MCP restart (tool is in root source at
ac531ddbut not yet in this session's MCP tool catalog).NEXT_PROMPT:
WHAT_HAPPENED: Operator recovery partially completed: root fast-forwarded to prgs/master
ac531dda05(PR #595 present; gitea_cleanup_stale_review_decision_lock defined in root source). gitea-reviewer whoami is sysadmin/prgs-reviewer; resolve review_pr succeeds; workflow load hash da045d1e1f1f (new master skill). Formal mark for REQUEST_CHANGES failed: #332 terminal approve on still-open PR #593 blocks new terminal reviews. Host MCP tool catalog still returns Tool not found for gitea_cleanup_stale_review_decision_lock (client registry not refreshed). Even if cleanup were callable, #593 is open so moot cleanup would correctly refuse. Live merge-tree proves PR #592 conflicts with master on conftest/test_mcp_server; isolation largely overlaps #595; mergeable=false.WHY: Correct #332 behavior for an approved open PR (#593) prevents cross-PR terminal mutations. Cleanup tool cannot clear open-PR terminals. REQUEST_CHANGES for #592 is the correct technical verdict once the session budget is free, because of live conflicts/redundancy with #595, not APPROVE.
RELATED_PRS: #592, #590, #595 (landed), #593 (open terminal approve holding #332 budget)
BLOCKERS: UNBLOCK formal REQUEST_CHANGES when prgs-reviewer decision lock has no terminal live mutation for an open PR (finish merge sequence for #593 or otherwise exhaust that path). Separately UNBLOCK cleanup-tool host discovery when the MCP client re-lists tools from restarted server on master.
VALIDATION:
ac531dda05LAST_UPDATED_BY: sysadmin (prgs-reviewer)
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #592
issue: #590
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 51515-2bfb70f0685f
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-592-issue-590
phase: claimed
candidate_head:
b810e512fdtarget_branch: master
target_branch_sha:
683649424blast_activity: 2026-07-09T21:06:23Z
expires_at: 2026-07-09T23:06:23Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #592
issue: #590
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 51515-2bfb70f0685f
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-592-issue-590
phase: released
candidate_head:
b810e512fdtarget_branch: master
target_branch_sha:
683649424blast_activity: 2026-07-09T21:06:40Z
expires_at: 2026-07-09T23:06:40Z
blocker: manual-release
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #592
issue: #590
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 24433-1b0938eef4a2
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-592-resume-20260709170338
phase: claimed
candidate_head:
b810e512fdtarget_branch: master
target_branch_sha:
683649424blast_activity: 2026-07-09T21:08:00Z
expires_at: 2026-07-09T23:08:00Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #592
issue: #590
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 24433-1b0938eef4a2
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-592-resume-20260709170338
phase: claimed
candidate_head:
b810e512fdtarget_branch: master
target_branch_sha:
683649424blast_activity: 2026-07-09T21:09:07Z
expires_at: 2026-07-09T23:09:07Z
blocker: none
Canonical PR State
STATE: open / conflicted / not mergeable — formal REQUEST_CHANGES
WHO_IS_NEXT: author
NEXT_ACTION: Rebase PR #592 onto current prgs/master, resolve conflicts in tests/conftest.py and tests/test_mcp_server.py, re-run stated pytest suite, push updated head, re-request review.
NEXT_PROMPT:
WHAT_HAPPENED: After #332 cleanup (moot terminal approve on merged PR #593, merge_commit
68364942, audit comment #8718), formal re-review of PR #592. Live: open, mergeable=false, head stillb810e512. Conflicts vs master in tests/conftest.py and tests/test_mcp_server.py. Intent of #590 remains valid but head is not mergeable — REQUEST_CHANGES (not APPROVE).WHY: Cannot approve a conflicted/non-mergeable head after master advanced (session-state isolation landings including #593/#594/#595).
ISSUE: #590 (PR #592)
HEAD_SHA:
b810e512fdREVIEW_STATUS: REQUEST_CHANGES
MERGE_READY: no
BLOCKERS: mergeable=false; file conflicts tests/conftest.py and tests/test_mcp_server.py vs master — unblock when rebased onto master, conflicts resolved, tests green, new head pushed and re-reviewed
VALIDATION: #332 cleanup applied for terminal PR #593; gitea_view_pr #592 open mergeable=false; head b810e512; eligibility request_changes=true; dry-run then gated submit; no mtime/source-file manipulation
LAST_UPDATED_BY: prgs-reviewer (sysadmin)
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #592
issue: #590
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 24433-1b0938eef4a2
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-592-resume-20260709170338
phase: released
candidate_head:
b810e512fdtarget_branch: master
target_branch_sha:
683649424blast_activity: 2026-07-09T21:11:27Z
expires_at: 2026-07-09T23:11:27Z
blocker: manual-release
b810e512fdto0bbf46b56d0bbf46b56dto008cd3fd74Canonical Issue State
STATE: open / rebased / mergeable — ready for re-review
WHO_IS_NEXT: reviewer
NEXT_ACTION: Formal re-review (APPROVE path) of PR #592 at new head 0bbf46b56d6ee3c69c0627e95ba27f10bab9b9a3; do not merge until approved at this SHA.
NEXT_PROMPT:
WHAT_HAPPENED: Rebased fix/issue-590-ledger-isolation onto prgs/master (
6836494). Resolved conflicts in tests/conftest.py and tests/test_mcp_server.py (kept master #594 isolation + #590 pin/docs + regression tests). Force-with-lease pushed new head0bbf46b. Second PR commit dropped as already upstream.WHY: Addresses formal REQUEST_CHANGES for mergeable=false / content conflicts after #593/#594/#595 landed on master.
RELATED_PRS: #592 (this PR), #590 (issue), #593/#594/#595 (landed masters that caused the rebase)
BLOCKERS: none for re-review — formal APPROVE still required before merge
VALIDATION:
0bbf46b56dLAST_UPDATED_BY: author-session (rebase operator) / 2026-07-09
Canonical Issue State
STATE: open / rebased / mergeable — awaiting re-review after REQUEST_CHANGES
WHO_IS_NEXT: reviewer
NEXT_ACTION: Formal re-review of PR #592 at new head
008cd3fd74(prior REQUEST_CHANGES was atb810e512).NEXT_PROMPT:
WHAT_HAPPENED: Author (jcwalker3 / prgs-author) rebased fix/issue-590-ledger-isolation onto prgs/master
68364942. Resolved conflicts in tests/conftest.py and tests/test_mcp_server.py keeping master #594-aware wording plus #590 isolation pins, regression tests, and test_session_state_isolation.py. Force-with-lease push updated remote head b810e512/0bbf46b →008cd3fd.WHY: Unblock REQUEST_CHANGES (mergeable=false / conflicted vs master after #593/#594/#595).
RELATED_PRS: #592 (this PR), #590 (issue), #593/#594/#595 (master landings that caused conflict)
BLOCKERS: none for author path; UNBLOCK for merge when formal re-review approves head
008cd3fdand merger path is freeVALIDATION:
LAST_UPDATED_BY: prgs-author (jcwalker3)
Canonical Issue State
STATE: open / rebased / mergeable — re-review requested at live head
WHO_IS_NEXT: reviewer
NEXT_ACTION: Formal re-review APPROVE of PR #592 at live head 008cd3fd742c4005ecd94ff4be97e8eb63d526ca; do not merge until approved at this SHA.
NEXT_PROMPT:
WHAT_HAPPENED: Branch rebased onto prgs/master and force-pushed. Live head is
008cd3fd74(two-commit rebased history; content-equivalent to intermediate0bbf46bpush). Conflicts in tests/conftest.py + tests/test_mcp_server.py resolved. Validation re-run green on live head.WHY: Satisfies REQUEST_CHANGES for post-#593/#594/#595 master conflicts.
RELATED_PRS: #592 (this PR), #590 (issue), #593, #594, #595
BLOCKERS: none for re-review; formal APPROVE still required before merge
VALIDATION:
LAST_UPDATED_BY: author-session (rebase operator) / 2026-07-09
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #592
issue: #590
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 24433-34b72d6a4872
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-592-live-008cd3f
phase: claimed
candidate_head:
008cd3fd74target_branch: master
target_branch_sha:
683649424blast_activity: 2026-07-09T21:25:26Z
expires_at: 2026-07-09T23:25:26Z
blocker: none
Canonical PR State
STATE: open / approved at rebased head — merge not performed
WHO_IS_NEXT: merger
NEXT_ACTION: Merge PR #592 only with explicit operator confirmation MERGE PR 592 at expected_head_sha
008cd3fd74.NEXT_PROMPT:
WHAT_HAPPENED: Formal APPROVE after author rebase onto prgs/master. Prior REQUEST_CHANGES at
b810e51is stale. Live mergeable=true. Scope remains tests-only isolation fix for #590.WHY: Conflicts resolved; master is ancestor; validation green; no production code; production #332 hard-stop not weakened.
ISSUE: #590 (PR #592)
HEAD_SHA:
008cd3fd74REVIEW_STATUS: APPROVED
MERGE_READY: yes
BLOCKERS: none for merge gate except explicit operator confirmation
VALIDATION:
008cd3fd74LAST_UPDATED_BY: prgs-reviewer (sysadmin)
adopted_at: 2026-07-09T21:31:07Z
adopted_by_identity: sysadmin
adopted_by_profile: prgs-merger
adopted_from_session_id: 24433-34b72d6a4872
adopted_from_profile: prgs-reviewer
adopted_from_reviewer_identity: sysadmin
adopted_from_comment_id: 8891
adoption_reason: merger-handoff-approved-head
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #592
issue: #590
reviewer_identity: sysadmin
profile: prgs-merger
session_id: 24434-acb0a556f8ac
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-592-live-008cd3f
phase: adopted
candidate_head:
008cd3fd74target_branch: master
target_branch_sha:
683649424blast_activity: 2026-07-09T21:31:07Z
expires_at: 2026-07-09T23:31:07Z
blocker: none
Stale #332 review-decision lock cleanup (#594)
Status: APPLIED
sysadminprgs-reviewer2026-07-09T21:32:36.685278+00:00approveon PR fix: isolate review-mutation ledger from host session-state (Closes #590) (#592)closed(merged=True)7186718cfd482179362b8e4aa3e180f2f97b08311prgs-reviewerManual deletion of session-state files is not the workflow.
This path only clears a lock when the referenced PR is merged/closed.