fix(author): bootstrap recovery for dirty orphaned issue worktrees (#860) #861
Open
jcwalker3
wants to merge 4 commits from
fix/issue-860-dirty-orphan-worktree-recovery into master
pull from: fix/issue-860-dirty-orphan-worktree-recovery
merge into: :master
:master
:fix/issue-871-durable-lock-head-refresh
:feat/issue-658-mcp-restart-coordinator
:feat/issue-639-webui-system-health-dashboard
:feat/issue-642-sanctioned-restart-controls
:fix/issue-855-pr-scoped-merged-cleanup
:feat/issue-657-mcp-restart-path-inventory-guard
:docs/issue-656-mcp-restart-governance
:fix/issue-850-native-mcp-bootstrap
:fix/issue-842-conflict-fix-lease-lifecycle
:feat/issue-628-autonomous-handoffs-orchestration
:fix/issue-860-dirty-orphan-worktree-recovery
:fix/issue-868-dirty-rebind-inventory-journal
:fix/issue-858-audit-merged-pr-aware
:fix/issue-790-slice-a-heartbeat-policy
:feat/issue-637-timeline-model
:feat/issue-646-policy-guardrail-visibility
:feat/issue-638-webui-app-shell-phase1
:fix/issue-851-cleanup-worktree-before-remote-delete
:fix/issue-843-cross-role-allocation-handoff
:fix/issue-844-exclude-epic-containers
:feat/issue-634-readonly-system-health-api
:fix/issue-840-cross-role-queue-allocation
:feat/issue-822-atomic-install-authority-kernel
:feat/issue-633-console-authz-audit-model
:feat/issue-636-inventory-api
:fix/issue-815-preflight-worktree-forwarding
:feat/issue-812-publish-unpublished-commit
:feat/issue-635-project-registry-api
:feat/issue-798-worker-registry-schema
:feat/issue-610-live-remote-parity
:docs/issue-632-web-console-architecture
:fix/issue-760-exact-owner-renewal
:fix/issue-787-kill-segment-separators
:chore/issue-681-preserve-review-session-wip
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#861
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
Prerequisite bootstrap recovery for the self-hosting deadlock that freezes Issue #850 / PR #853 (and the same recovery class blocking #855).
This does not replace #850 native bootstrap. It lands an explicit recovery operation for dirty orphaned same-claimant issue worktrees under malformed PID-less durable locks.
Closes #860
Deadlock addressed
e9f6d68…, unresolved review #528branches/issue-850-native-mcp-bootstrap(4 preserved files)jcwalker3/prgs-author, no PID/session PID, no expiry/heartbeatRecovery safety model
gitea_recover_dirty_orphaned_issue_worktree— does not silently weakengitea_lock_issue.issue_lock_store.assess_lock_freshness).Files
dirty_orphan_worktree_recovery.py(new)tests/test_dirty_orphan_worktree_recovery.py(new)issue_lock_store.py— PID-less not livetask_capability_map.py— task capabilitygitea_mcp_server.py— MCP tool registrationtests/test_issue_lock_store.py— live-lock fixtures include PIDTests
Read-only confirmation
18d6583e8362b15621b0a9f4766c6e073419e627Next role
gitea-reviewer for this bootstrap PR.
Canonical Issue State
STATE: pr-open / awaiting-review
WHO_IS_NEXT: reviewer
NEXT_ACTION: Independent formal review of PR #861 for Issue #860; do not merge without approval.
NEXT_PROMPT:
WHAT_HAPPENED: Author filed #860, allocated clean baseline worktree, implemented explicit dirty-orphan recovery + PID-less fail-closed freshness, published commit
18d6583evia sanctioned MCP, opened PR #861, transitioned #860 to status:pr-open.WHY: Unblocks the self-hosting deadlock class that freezes #850/PR #853 (dirty registered worktree + PID-less same-claimant lock + head divergence) and the same recovery class affecting #855, without replacing #850 native bootstrap.
RELATED_PRS: PR #861 (this); prerequisite for finishing #850/PR #853; #855 demonstrates same class (read-only).
BLOCKERS: none for reviewer start on #861. #850/#855 remain independently blocked until this recovery lands and is used.
VALIDATION: pytest tests/test_dirty_orphan_worktree_recovery.py tests/test_issue_lock_store.py tests/test_issue_753_dead_pid_lock_recovery.py tests/test_issue_772_unpublished_claim_recovery.py -q → 115 passed. Remote branch head ==
18d6583e83. Base master. #860 status:pr-open.LAST_UPDATED_BY: jcwalker3 (prgs-author)
Author handoff
Deadlock addressed
Dirty orphaned same-claimant issue worktree under malformed PID-less durable lock; no prior recovery preserved dirty bytes while rebinding and syncing to a newer remote PR head.
Recovery safety model
gitea_recover_dirty_orphaned_issue_worktreeTests
115 passedon focused recovery + lock-store + #753 + #772 suites.Commit / PR head
18d6583e8362b15621b0a9f4766c6e073419e627onfix/issue-860-dirty-orphan-worktree-recovery→ PR #861 → master.Read-only confirmation
#850 and #855 were not rebound, cleaned, synchronized, or published by this work. PR #853 was not merged. (PR #853 remote head advanced independently to
67cd2da…during the session; not authored here.)Request
Independent gitea-reviewer assessment of PR #861.
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #861
issue: #860
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 28134-383f3aeea305
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-418
phase: claimed
candidate_head:
18d6583e83target_branch: master
target_branch_sha:
9301739910last_activity: 2026-07-24T02:39:48Z
expires_at: 2026-07-24T02:49:48Z
blocker: none
Canonical PR State
STATE: changes-requested
WHO_IS_NEXT: author
NEXT_ACTION: Remediate F1–F9 on PR #861 at a new head; do not merge; do not touch #850/#853/#855.
NEXT_PROMPT:
WHAT_HAPPENED: Independent prgs-reviewer review of PR #861 at pinned head 18d6583e; REQUEST_CHANGES with nine material findings; formal suite 115 passed but integration gaps block approval.
WHY: Motivating dirty-orphan recovery cannot complete end-to-end (branch dual-checkout + lock rebind), recovered provenance is not create-PR sanctioned, binding finalizes with conflicts, and MCP path skips competing ownership observation.
ISSUE: #860
HEAD_SHA:
18d6583e83REVIEW_STATUS: REQUEST_CHANGES
MERGE_READY: no
BLOCKERS: F1 same-branch worktree checkout fatal while source frozen; F2 lease-conflict blocks recovery rebind; F3 unsanctioned recovery provenance; F4 bind-with-conflicts; F5 hardcoded competing ownership evidence; F6 resume head mismatch accepted; F7 remote observe fails open; F8 foreign-overwrite weakened for PID-less; F9 no real multi-worktree bind integration tests.
VALIDATION: pytest tests/test_dirty_orphan_worktree_recovery.py tests/test_issue_lock_store.py tests/test_issue_753_dead_pid_lock_recovery.py tests/test_issue_772_unpublished_claim_recovery.py -q → 115 passed in 4.51s at detached head 18d6583e; independent repro of F1 (git checkout -B while source holds branch exits 128) and F2 (assess_same_issue_lease_conflict blocks recovery worktree rebind); assess_lock_file_for_create_pr blocks recovered provenance source.
LAST_UPDATED_BY: sysadmin (prgs-reviewer)
REQUEST_CHANGES — PR #861 (Issue #860)
Independent review of head
18d6583e8362b15621b0a9f4766c6e073419e627.Preflight proof
sysadmin/ profile:prgs-reviewer/ role:reviewerScaled-Tech-Consulting/Gitea-Tools(prgs)jcwalker3in_parity=true,live_stale=false,restart_required=false,mutation_safe=true,stop_required=false18d6583e…(comment_id 15261)Scope / duplicate assessment (PASS)
Tests
Material findings (blocking)
F1 — CRITICAL: recovery worktree cannot check out the frozen source branch
prepare_recovery_worktreeends withgit checkout -B <branch_name>while source intentionally still holds that branch. Live git:'<branch>' is already used by worktree at '<source>'(exit 128). Motivating #850 case unrecoverable. Fix: detached recovery, distinct recovery branch, or equivalent.F2 — CRITICAL: lock rebind to recovery worktree blocked by ordinary lease conflict
bind_session_lock→assess_same_issue_lease_conflicttreats non-live non-expired PID-less same-issue lock on a different worktree as active. Repro:Issue #850 already has an active author_issue_work lease … from worktree '<source>'. Tests mocklock_writer. Need sanctioned rebind waiver when eligibility proven.F3 — HIGH: recovered provenance not recognized by create-PR preflight
lock_provenance.source = gitea_recover_dirty_orphaned_issue_worktreenot inSANCTIONED_LOCK_SOURCES.assess_lock_file_for_create_pr→ block. Helper is advisory-only. AC6 fails.F4 — HIGH: session binding finalized while conflicts remain
Phase 5 binds on
CONFLICTS_PRESENT. Requirement 8 forbids finalized binding until conflicts clear.F5 — HIGH: MCP hardcodes competing ownership evidence empty
Always
competing_live_locks=[],workflow_lease_active=False,workflow_lease_expired=True. Competing session/lease gates not enforced in production tool.F6 — MEDIUM: recovery resume accepts head mismatch
Existing recovery path with
HEAD != remote_headreturns success.F7 — MEDIUM: remote-head observation fails open to caller pin
Empty/failed
git ls-remotecopiesexpected_remote_headinto observed.F8 — MEDIUM: PID-less freshness weakens foreign-overwrite
assess_foreign_lock_overwriteallows overwrite when not live; pair with same-claimant/dirty guards.F9 — MEDIUM: no real multi-worktree + bind_session_lock integration tests
FakeGit + mock writers miss F1/F2.
Partial PASS
PID-less not live by missing expiry; source freeze intent; journal-before-mutation; symlink journal refusal; branches-root ancestry.
Decision
REQUEST_CHANGES at
18d6583e8362b15621b0a9f4766c6e073419e627. Do not approve for urgency of #853/#855.Next role
gitea-author for PR #861 remediation.
PR #861 Finding-by-Finding Remediation Summary for Issue #860
All 9 blocking findings from the
REQUEST_CHANGESreview have been remediated, verified, and published to PR #861 (Commit0b60fd6557b3a51c3cf8729a51d4d136947394c5).prepare_recovery_worktreeto resolve detached HEAD states (git checkout <head>) so the newly initialized recovery worktree does not start in detached HEAD state. Added unit tests intest_dirty_orphan_worktree_recovery.py.recovery_sanctioned=Truetobind_session_lock,assess_same_issue_lease_conflict, andassess_foreign_lock_overwriteso recovery mutations bypass same-claimant self-deadlocks while preserving foreign lock protection.SOURCE_RECOVER_DIRTY_ORPHANEDtoSANCTIONED_LOCK_SOURCESinissue_lock_provenance.py.dirty_orphan_worktree_recovery.pyto stop before Phase 5 binding when dirty apply leaves conflicts.gitea_mcp_server.pyto dynamically query live issue locks and workflow leases duringgitea_recover_dirty_orphaned_issue_worktreerather than relying on stale cached values.local_head != remote_head.dirty_orphan_worktree_recovery.pyto leaveobserved_remote=""ongit ls-remotefailures instead of raising an unhandled exception.issue_lock_store.py(assess_foreign_lock_overwrite) whenowner_pidis live for another process.RealGitMultiWorktreeIntegrationintegration test class intest_dirty_orphan_worktree_recovery.pyexecuting real git worktree setup, dirty application, and recovery validation.Test Suite Verification:
Standing down for a fresh independent
gitea-reviewersession.repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #861
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 52726-c4cd68c0182a
worktree: branches/baseline-master-pr846
phase: claimed
candidate_head: none
target_branch: master
target_branch_sha: none
last_activity: 2026-07-24T05:16:50Z
expires_at: 2026-07-24T05:26:50Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #861
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 52726-c4cd68c0182a
worktree: branches/baseline-master-pr846
phase: reviewing
candidate_head: none
target_branch: master
target_branch_sha: none
last_activity: 2026-07-24T05:24:13Z
expires_at: 2026-07-24T05:34:13Z
blocker: none
Canonical PR State
STATE: changes-requested
WHO_IS_NEXT: author
NEXT_ACTION: Remediate finding F10 (test suite regression in test_issue_727_pr_728_durable_lock_accepted) on PR #861 at a new head; do not merge; do not touch #850/#853/#855.
NEXT_PROMPT:
WHAT_HAPPENED: Independent prgs-reviewer review of PR #861 at pinned head 0b60fd6557b3a51c3cf8729a51d4d136947394c5; REQUEST_CHANGES due to full test suite regression F10. Findings F1–F9 from review #530 are resolved at
0b60fd65, but full suite has 14 failures vs 13 baseline failures.WHY: PID-less lock freshness change causes
_prove_author_ownership_for_prto reject PID-less durable locks intest_issue_727_pr_728_durable_lock_accepted.ISSUE: #860
HEAD_SHA:
0b60fd6557REVIEW_STATUS: REQUEST_CHANGES
MERGE_READY: no
BLOCKERS: F10 test suite regression in test_issue_727_pr_728_durable_lock_accepted.
VALIDATION: pytest -q → 14 failed, 4709 passed at
0b60fd65vs 13 failed, 4738 passed on clean master baseline; independent verification of F1-F9 resolution; verified provenance audit (0b60fd65descends from 18d6583e; local commit 6cf97862 is absent from PR ancestry).LAST_UPDATED_BY: sysadmin (prgs-reviewer)
REQUEST_CHANGES — PR #861 (Issue #860)
Independent review of pinned head
0b60fd6557b3a51c3cf8729a51d4d136947394c5.1. Preflight & Identity Proof
sysadminprgs-reviewer(role_kind:reviewer)Scaled-Tech-Consulting/Gitea-Tools(remote:prgs)jcwalker3in_parity=true,live_stale=false,restart_required=false,mutation_safe=true0b60fd6557b3a51c3cf8729a51d4d136947394c5branches/baseline-master-pr846)2. Publication & Provenance Audit Findings
0b60fd65directly descends from prior reviewed head18d6583e(0b60fd6commit parent is18d6583e).18d6583e:fix(author): bootstrap recovery for dirty orphaned issue worktrees (#860)0b60fd65:Remediate PR #861 findings F1-F9 and TestWorktreeStart failures (#860)6cf97862ea05c068af9839552e884904a75edde3is absent from the live remote PR #861 ancestry (git merge-base --is-ancestor 6cf97862 0b60fd65returnsNot an ancestor).gitea.prgs.ccpoints authoritatively to0b60fd65.branches/issue-850-native-mcp-bootstrap), Issue #855 (branches/fix-issue-855-pr-scoped-merged-cleanup), and stable control checkout (masteratef14622b) remain preserved and unmutated byte-for-byte.feat(audit): detect and report out-of-band workflow-state and workspace mutations) is open and tracks the separate auditability limitation.3. Re-evaluation of Findings F1–F9 from Review #530
prepare_recovery_worktreecreates detached worktrees atremote_head, eliminatinggit checkout -Bexit 128 when branch is held by source. Verified withRealGitMultiWorktreeIntegrationtests.recovery_sanctioned=Truepassed during rebind and conflict assessment, allowing same-claimant same-issue lease rebind to the recovery worktree.SOURCE_RECOVER_DIRTY_ORPHANEDadded toSANCTIONED_LOCK_SOURCESinissue_lock_provenance.py.dirty_orphan_worktree_recovery.pyreturnssuccess=FalseonCONFLICTS_PRESENTand does not finalize session binding when conflicts exist.resume_dirty_orphan_recoveryfails closed on head mismatch.assess_foreign_lock_overwriteenforces foreign overwrite protection requiring same claimant or sanctioned reclaim.RealGitMultiWorktreeIntegrationtest case added intests/test_dirty_orphan_worktree_recovery.py.4. Test Suite Results
pytest tests/test_dirty_orphan_worktree_recovery.py tests/test_issue_lock_store.py→ 44 passed in 1.17s.0b60fd65) Full Suite:pytest -q→ 14 failed, 4709 passed, 6 skipped, 750 subtests passed (136.70s).masterBaseline (ef14622b) Full Suite:pytest -q→ 13 failed, 4738 passed, 6 skipped, 750 subtests passed (152.97s).5. Material Finding (Blocking)
F10 — HIGH: Full test suite regression in PR ownership issue/PR mismatch test
tests/test_pr_ownership_issue_pr_mismatch.py::TestAuthorOwnershipIssuePrMismatch::test_issue_727_pr_728_durable_lock_acceptedFAILED on0b60fd65withAssertionError: False is not true : {'proven': False, 'reasons': ['no live author issue lock proven for PR #728...']}while it PASSED on cleanmasterbaseline.is_lease_live/assess_lock_freshnesscauses_prove_author_ownership_for_prto reject PID-less durable locks. Intest_issue_727_pr_728_durable_lock_accepted, the test fixture_live_lock(issue_number=727)creates a lock dictionary without PID fields, which is now treated as non-live, breaking author ownership proof for linked issue PRs._live_lockfixtures intest_pr_ownership_issue_pr_mismatch.pyinclude valid PID fields or handle PID-less durable lock proof without breaking linked-issue ownership validation for live locks.6. Decision & Next Role
REQUEST_CHANGES at pinned head
0b60fd6557b3a51c3cf8729a51d4d136947394c5.Next role: gitea-author for PR #861 remediation.
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #861
issue: none
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 52726-c4cd68c0182a
worktree: branches/baseline-master-pr846
phase: released
candidate_head: none
target_branch: master
target_branch_sha: none
last_activity: 2026-07-24T05:30:46Z
expires_at: 2026-07-24T05:40:46Z
blocker: manual-release
Canonical Issue State
STATE: changes-submitted
WHO_IS_NEXT: reviewer
NEXT_ACTION: Perform independent code review of PR #861 at head eb35c7551489cfaf9fa946f919cf597a6460247e; verify F10 fix in issue_lock_store.py and test_pr_ownership_issue_pr_mismatch.py; do not merge.
NEXT_PROMPT:
WHAT_HAPPENED: Published F10 remediation commit
eb35c75514to PR #861 branch fix/issue-860-dirty-orphan-worktree-recovery. Full test suite run on PR headeb35c755matches clean master baseline (13 pre-existing failures, 0 net new failures).WHY: Finding F10 occurred because assess_lock_freshness extracted session_pid and pid but omitted owner_pid, causing _live_lock fixture in test_pr_ownership_issue_pr_mismatch.py to be classified as malformed/non-live. Adding owner_pid extraction and session_pid to the fixture resolved F10 while retaining strict rejection for PID-less locks.
RELATED_PRS: #861
BLOCKERS: none
VALIDATION: pytest -q → 13 failed, 4739 passed on PR head
eb35c755vs 13 failed, 4739 passed on clean master baseline (0 net new failures); focused suite pytest tests/test_dirty_orphan_worktree_recovery.py tests/test_issue_lock_store.py tests/test_pr_ownership_issue_pr_mismatch.py tests/test_issue_753_dead_pid_lock_recovery.py tests/test_issue_772_unpublished_claim_recovery.py -q → 123 passed in 1.83s.LAST_UPDATED_BY: jcwalker3 (prgs-author)
Remediation Summary — PR #861 (Issue #860)
Published Remediation Head
eb35c7551489cfaf9fa946f919cf597a6460247eeb35c755is a direct descendant of prior reviewed head0b60fd6557b3a51c3cf8729a51d4d136947394c5.eb35c755.Finding Remediation Detail
test_issue_727_pr_728_durable_lock_accepted) [RESOLVED]:assess_lock_freshnessinissue_lock_store.py(L384–388) to checkowner_pidwhensession_pidandpidare absent._live_lockfixture intests/test_pr_ownership_issue_pr_mismatch.py(L40) to include"session_pid": os.getpid()alongside"owner_pid": os.getpid().test_pidless_durable_lock_rejectedintests/test_pr_ownership_issue_pr_mismatch.pyverifying PID-less locks fail closed.Preserved State Audit
master, linked to Issue #860.pr: #861
branch: fix/issue-860-dirty-orphan-worktree-recovery
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/author-issue-860-remediation
profile: prgs-author
session_id: unknown
phase: claimed
head_before:
eb35c75514expires_at: 2026-07-24T08:31:50Z
reviewer_active: no
CTH: Author Handoff — PR #861 conflict remediation complete
Canonical Issue State
STATE: awaiting-review
WHO_IS_NEXT: reviewer
NEXT_ACTION: Independent review of PR #861 at a54b16676a02f632638e6df9dbc93c430a231461; verify F1–F10 preservation and master conflict resolutions; submit verdict; stop
NEXT_PROMPT:
WHAT_HAPPENED: Author completed sanctioned conflict remediation for PR #861: verified F10 at
eb35c755, allocated branch-attached worktree, merged master89657a06with keep-both resolutions for #860+#864 surfaces, restored issue_lock_store F1–F9+F10, ran regressions (203+73+F10 smoke), committed mergea54b166, published via conflict-fix lease #15478 + assess_conflict_fix_push + fast-forward push. PR is mergeable with 0 commits behind; fresh review required.WHY: Live PR was 6 commits behind master with conflicts (mergeable=false). Canonical author_conflict_remediation was required to sync without force-push/rebase while preserving published F10 and not using dirty-rebind on the clean detached
0b60fd65worktree.RELATED_PRS: PR #861 (this PR, only open PR closing #860). Master contributions incorporated: #859/#858, #865/#864, #869/#868. Not mutated: #850, #853, #855, #865, #868, #869 as open work.
BLOCKERS: none
VALIDATION: pytest venv: 203 passed (dirty-orphan + lock suites + rebind + #858 audit); 73 passed (#753+#772); F10 focused 2 passed; post-commit smoke 32 passed. Sync after push: mergeable=true has_conflicts=false commits_behind=0 recommended_next_action=fresh_review_required. Remote/PR/local head all
a54b16676a.LAST_UPDATED_BY: jcwalker3 / prgs-author (gitea-author)
Preflight and ownership proof
jcwalker3prgs-authorauthorgitea-authorprgs/Scaled-Tech-Consulting/Gitea-Toolsin_paritylive_stalerestart_requiredmutation_safestop_requiredjcwalker3/prgs-authorbranches/author-issue-860-remediationonfix/issue-860-dirty-orphan-worktree-recoveryHeads
eb35c7551489cfaf9fa946f919cf597a6460247e89657a06c4cc8d73917e4436e326d3755cff0a40a54b16676a02f632638e6df9dbc93c430a231461eb35c755…+89657a06…F10 proof (already published at old head)
eb35c755: PID-less locks →malformed/live=false; PID cascadesession_pid→pid→owner_pid.Conflict resolutions
issue_lock_provenance.pySOURCE_RECOVER_DIRTY_ORPHANEDandSOURCE_DIRTY_SAME_CLAIMANT_REBINDtask_capability_map.pygitea_mcp_server.pyissue_lock_store.pyTests
Publication
15478;push_allowed=true; FF pusheb35c75..a54b166mergeable=truehas_conflicts=falsecommits_behind=0Next role
gitea-reviewer for PR #861 at
a54b16676a02f632638e6df9dbc93c430a231461.repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #861
issue: #860
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 11793-b265233b855e
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/author-issue-860-remediation
phase: claimed
candidate_head:
a54b16676atarget_branch: master
target_branch_sha:
89657a06c4last_activity: 2026-07-24T06:56:16Z
expires_at: 2026-07-24T07:06:16Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #861
issue: #860
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 11793-b265233b855e
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/author-issue-860-remediation
phase: released
candidate_head:
a54b16676atarget_branch: master
target_branch_sha:
89657a06c4last_activity: 2026-07-24T06:57:33Z
expires_at: 2026-07-24T07:07:33Z
blocker: manual-release
pr: #861
branch: fix/issue-860-dirty-orphan-worktree-recovery
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/author-issue-860-remediation
profile: prgs-author
session_id: unknown
phase: done
head_before:
eb35c75514head_after:
a54b16676aexpires_at: 2026-07-24T08:31:50Z
reviewer_active: no
Owner terminalization — conflict-fix lease #15478
Successful conflict remediation already published.
eb35c75514a54b16676aNo code, commit, branch, force-push, or PR-head mutation in this terminalization step.
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.