Stale runtime binding and orphaned durable lease upon unhandled daemon crash #702
Open
opened 2026-07-13 12:34:05 -05:00 by jcwalker3
·
12 comments
No Branch/Tag Specified
master
fix/issue-709-decision-lock-cross-profile
fix/issue-695-native-transport-quarantine
fix/issue-698-report-validator-schema
fix/issue-702-stale-binding-lease-recovery
fix/issue-699-structured-auth-mcp-errors
fix/issue-695-native-quarantine-v2
fix/issue-693-review-decision-lock-recovery
fix/issue-691-obsolete-reviewer-lease-cleanup
feat/issue-687-reconciler-branch-delete
fix/issue-683-workflow-guard-hardening
chore/issue-681-preserve-review-session-wip
feat/issue-604-anti-stomp-preflight
feat/issue-606-sentry-observability
fix/issue-671-block-stable-branch-push
fix/issue-675-residual-preflight-remediation
fix/issue-673-remediate-regressions-part2
fix/issue-673-remediate-regressions
feat/issue-603-lifecycle-labels
fix/issue-627-set-issue-labels-pagination
feat/issue-601-first-class-leases
feat/issue-612-incident-bridge
feat/issue-600-controller-allocator-api
fix/issue-620-head-scoped-review-locks
feat/issue-613-allocator-db-substrate
docs/mcp-stable-control-runtime-policy
feat/issue-609-prepared-review-verdict-resume
feat/issue-610-live-remote-parity
feat/issue-503-reviewer-active-worktree
feat/issue-470-preflight-contract
feat/issue-440-lock-recovery
feat/issue-440-branch-recovery
feat/issue-458-queue-fail-closed-copy
feat/issue-400-early-duplicate-work-gate
feat/issue-308-reconcile-inventory-pagination
feat/issue-308-reconcile-pagination-proof
docs/issue-261-agent-temp-artifact-cleanup
feat/issue-262-map-commit-files
fix/infra-stop-conflict-marker-false-positive
feat/issue-139-role-aware-task-routing
feat/issue-188-continuation-selection-wall
feat/issue-189-continuation-mode-proofs
feat/issue-232-refresh-wiki-proof-heads
feat/issue-210-block-workspace-edits
feat/issue-204-exact-issue-lock
docs/issue-80-label-taxonomy
docs/issue-79-safety-boundary-updates
v1.1.0
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
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#702
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.
Defect Description
When the MCP daemon crashes due to unhandled exceptions (such as HTTP 401 Unauthorized during
gitea_whoami), the process terminates immediately without executing graceful teardown logic.As a result:
_SESSION_LEASEdictionary is destroyed when the process dies.GITEA_ACTIVE_WORKTREEfrom its parent IDE environment, permanently binding the new session to the old worktree instead of the intended PR #701 review worktree.Reproduction / Context
This was observed during the PR #701 review session (lease
65664-4f248d213d60, comments 11129 and 11131). The unhandled auth exception caused anEOFon the client side, restarting the daemon with the old IDE environment variables intact.Acceptance Criteria
GITEA_ACTIVE_WORKTREEenvironment variables upon auto-reconnect or duringgitea_resolve_task_capability.Cross-links
CTH: Blocker — fresh PR #701 review preflight stopped by #702
Formal verdict: none submitted. No review worktree, reviewer lease, validation, or review mutation was started.
Canonical Issue State
STATE:
fresh-review-blocked-before-worktree; stale runtime binding and ambiguous old-head lease remain
WHO_IS_NEXT:
controller
NEXT_ACTION:
Use the sanctioned #702 recovery path to remove the stale reviewer runtime binding and reconcile or canonically expire lease comment 11131. Then launch a completely fresh prgs-reviewer session and rerun the entire PR #701 workflow at head
6b675f5c83.NEXT_PROMPT:
WHAT_HAPPENED:
A completely fresh prgs-reviewer workflow loaded successfully with clean workflow boundary and verified sysadmin identity. Live Gitea state confirmed PR #701 open and mergeable at the pinned head, no formal reviews, and retrieved comments 11133, 11136, 11152, and 11160. Before any git mutation, runtime context still reported active_task_workspace_root=/Users/jasonwalker/Development/Gitea-Tools/branches/review-pr-654. Lease assessment found comment 11131 still present with session_lease=null and stale_warning. Native handoff diagnosis classified the state ambiguous_conflicting_evidence, mutation_eligibility=prohibited, exact next action wait.
WHY:
The environment-bound worktree, proposed new reviewer worktree, and durable lease worktree disagree. The durable lease covers an old head, has no formal terminal review, and cannot be stolen or transferred. Issue #702 provides only controller recovery; no reviewer-authorized rebind path is exposed. Continuing would violate canonical worktree and lease gates.
RELATED_PRS:
PR #701 only. PR #696 was not reviewed, launched, or mutated.
CANONICAL_ITEM:
Issue #702 is the canonical tracker for reviewer runtime binding and orphaned lease recovery blocking PR #701.
SUPERSEDED_ITEM:
Lease comment 11131 / session 65664-4f248d213d60 at old head
b4d0cb22e4is not valid review authority for current head6b675f5c83.BLOCKERS:
Runtime is bound to branches/review-pr-654; durable lease 11131 is tied to the prior review worktree and old head with session_lease=null; diagnosis says wait and mutation prohibited. UNBLOCK CONDITION: controller restores a clean reviewer runtime bound to a new PR #701 worktree and the old lease is canonically expired or reconciled, after which a fresh reviewer reruns all validation.
VALIDATION:
Read-only preflight only: workflow hash da045d1e1f1f, schema hash a7634e7b8689, boundary clean; sysadmin/prgs-reviewer verified; open-PR inventory complete (8, has_more=false); PR #701 live head equals 6b675f5c834b41f9d74e8a54294ff44dddf28ae4; formal reviews empty; specified comments retrieved; root checkout clean on master at
237656702f. No worktree creation, fetch, tests, file edits, lease acquisition, formal review, merge, cleanup, environment mutation, or manual state manipulation.LAST_UPDATED_BY:
prgs-reviewer / sysadmin
Issue claim heartbeat
[THREAD STATE LEDGER] Issue #702 — non-formal blocker handoff: PR #703 validation pass ran without a reviewer lease and is non-authoritative; formal review still pending
What is true now:
status:pr-open; its implementation PR #703 (head889931d5532b32a46a181e03c1345946c7516aac) shows zero reviews on the review API — no formal verdict exists.branches/review-pr-703confirmed clean (git status --porcelain empty) at the pinned head889931d5532b32a46a181e03c1345946c7516aac, matching the live PR head; details in PR #703 comment 11176.What changed:
What is blocked:
Who/what acts next:
Canonical Issue State
STATE:
awaiting-fresh-reviewer-lease
WHO_IS_NEXT:
reconciler
NEXT_ACTION:
Handle lease 11131 via controller/reconciler after canonical expiry (2026-07-13T19:16:41Z), then route PR #703 to a completely fresh reviewer session that acquires its own lease before any review or validation work.
NEXT_PROMPT:
WHAT_HAPPENED:
PR #703 implements this issue and awaits formal review; a premature validation pass without a reviewer lease was quarantined as non-authoritative (PR #703 comment 11176), leaving F1–F6 as unconfirmed leads.
WHY:
Review authority derives from lease discipline; permitting post-hoc lease acquisition would legalize unlicensed review work and defeat the anti-stomp guarantees this very issue exists to strengthen.
RELATED_PRS:
PR #703 (implementation of this issue, open, head
889931d, zero reviews); PR #701 (open, head6b675f5, no formal review, gated behind this issue's fix landing).BLOCKERS:
Queue/lease blocker — lease 11131 canonical expiry + controller/reconciler disposition, then fresh-reviewer lease acquisition, precede formal review of PR #703 and closure of this issue.
VALIDATION:
Review API read-back before posting: PR #703 pr_state=open, current_head_sha=889931d5532b32a46a181e03c1345946c7516aac, reviews=[]; worktree branches/review-pr-703 clean at the same SHA; handoff recorded on the PR as comment 11176.
LAST_UPDATED_BY:
controller / prgs-author (jcwalker3)
CTH: Controller Decision — lease 11131 + non-authoritative review leads
Status: lease_11131_expired_cleanup_not_authorized; reviewer_env_still_bound_to_review-pr-654; not_safe_to_launch_fresh_pr_703_reviewer
Next owner: user
Current blocker: (1) native cleanup of comment-lease 11131 not authorized; (2) GITEA_ACTIVE_WORKTREE still binds reviewer/reconciler runtimes to branches/review-pr-654
Decision: Do not apply obsolete-lease cleanup. Do not launch a PR #703 reviewer until binding is clear and a re-check passes. Mirror of PR #703 controller comment for durable issue thread.
Proof: dry-run cleanup_allowed=false; runtime context active_task_workspace_root=review-pr-654
Next action: Operator clears GITEA_ACTIVE_WORKTREE / managed reconnect; controller re-verifies; then fresh leased reviewer on #703 re-evaluates F1–F6.
Ready-to-paste prompt: see NEXT_PROMPT.
Canonical Issue State
STATE:
controller-reconcile-complete-for-11131-dry-run; cleanup-not-authorized; env-binding-block-remains
WHO_IS_NEXT:
user
NEXT_ACTION:
Clear or rebind stale GITEA_ACTIVE_WORKTREE so reviewer/reconciler runtime no longer points at branches/review-pr-654; controller re-runs dry-run/diagnose; only then launch a fresh leased reviewer for PR #703 who must re-evaluate F1–F6 with evidence
NEXT_PROMPT:
WHAT_HAPPENED:
Controller/reconciler ran sanctioned obsolete-lease dry-run after wall-clock expiry of lease 11131. Cleanup not authorized (ambiguous_conflicting_evidence: superseded head without terminal review). Durable assess on #701 shows active_lease null; env binding to review-pr-654 remains on reviewer and reconciler runtimes. Non-authoritative F1–F6 preserved for leased independent re-evaluation. Same lead set posted on PR #703.
WHY:
Must not bypass native cleanup gates, must not steal/repoint leases, and must not launch review while runtime is still bound to the #701 incident worktree path (review-pr-654).
RELATED_PRS:
PR #703 (Closes #702). Lease 11131 lived on PR #701 (issue #699).
BLOCKERS:
GITEA_ACTIVE_WORKTREE still routes active_task_workspace_root to branches/review-pr-654 on prgs-reviewer and prgs-reconciler; obsolete cleanup of 11131 not authorized (cleanup_allowed=false).
VALIDATION:
LAST_UPDATED_BY:
controller/reconciler (sysadmin / prgs-reconciler)
NON-AUTHORITATIVE REVIEW LEADS (quarantined; not a formal verdict)
Provenance: These leads came from a quarantined review that lacked the required lease. They are not formal findings and not a review verdict. Any tests or observations from that quarantined session are non-authoritative.
A fresh leased reviewer on PR #703 must independently reproduce or reject each lead. If a lead cannot be reproduced, that absence of reproduction must be documented with evidence — it must not be silently dropped.
F1 — Stale-binding recovery ordering
Stale-binding recovery appears to run after the terminal-launcher probe in
gitea_resolve_task_capability. A worktree removed during a session may wedge later mutation-task resolution until daemon restart.F2 — Preflight path existence
_resolve_preflight_workspace_pathappears not to verify path existence consistently with mutation context. A missing-path environment binding may produce empty porcelain and bypass dirty-tracked-file preflight.F3 — orphaned_expired_superseded_head cleanup evidence
orphaned_expired_superseded_headcleanup appears to permitworktree_exists=Noneandworktree_clean=None, weaker than the siblingorphaned_owner_missinggate and its diagnosis path.F4 — Session-state TTL vs #702 durability
A four-hour session-state TTL may silently remove crash-orphan shadow evidence, leaving later cleanup permanently fail-closed and potentially undermining #702’s durability acceptance criterion.
F5 — Concurrent same-profile shadow overwrite
Concurrent same-profile sessions may overwrite a single shadow record, producing ambiguous fail-closed state without adequate regression coverage.
F6 — Audit ordering after env clear
Environment state appears to be cleared before the best-effort audit write, creating an audit-ordering weakness.
[THREAD STATE LEDGER] Issue #702 / PR #703 environment — durable root-cause finding: repository-root .env injected stale workspace binding
What is true now:
What changed:
.envfile containedGITEA_ACTIVE_WORKTREE=<repo>/branches/review-pr-654.gitea_auth.pycallsload_dotenv(PROJECT_ROOT/.env)at import time, injecting the variable intoos.environafter process start — invisible to exec-time process-environment inspection and applied to every namespace on every spawn, becauseGITEA_ACTIVE_WORKTREEoutranks the role-specific worktree variables innamespace_workspace_binding.resolve_namespace_workspace..enventry was removed; the staticGITEA_REVIEWER_WORKTREE=branches/review-pr-538binding was removed from the client MCP configuration; all four MCP server processes were restarted and re-verified..envloading must not be allowed to inject or override runtime workspace-binding variables (GITEA_ACTIVE_WORKTREE,GITEA_*_WORKTREE). Without a code-level guard in the dotenv/auth load path, any future stale.envrecreates this same failure even after local cleanup.What is blocked:
Who/what acts next:
Canonical Issue State
STATE:
root-cause-documented; environment cleanup complete; PR #703 awaiting fresh review
WHO_IS_NEXT:
reviewer
NEXT_ACTION:
Fresh reviewer session: create own PR #703 worktree, acquire reviewer lease, re-pin live head, then perform the formal review of PR #703.
NEXT_PROMPT:
WHAT_HAPPENED:
Stale reviewer workspace binding to branches/review-pr-654 persisted across reconnects. Root cause: repository-root .env set GITEA_ACTIVE_WORKTREE, loaded by gitea_auth.py load_dotenv at import, overriding role-specific bindings for all namespaces on every process spawn. The .env entry was removed, the static reviewer worktree binding was removed from the client MCP configuration, and the MCP processes were restarted; the runtime now reports a neutral binding and zero active reviewer leases.
WHY:
GITEA_ACTIVE_WORKTREE outranks role-specific worktree env vars in namespace_workspace_binding.resolve_namespace_workspace, and dotenv injection happens after process start, so process-environment inspection and reconnects could neither detect nor clear it.
RELATED_PRS:
PR #703 (fix for issue #702; remains in open state awaiting fresh review)
BLOCKERS:
None — no blocker for the review path. Follow-up hardening required: guard runtime workspace-binding variables against .env injection in the dotenv/auth load path.
VALIDATION:
gitea_get_runtime_context (reviewer namespace, fresh processes 2026-07-13): active_task_workspace_root = MCP server process root, workspace_binding_source = "MCP server process root (default)". gitea_list_workflow_leases (control-plane DB, authoritative): zero active reviewer leases.
LAST_UPDATED_BY:
controller session 2026-07-13 (prgs-author namespace)
CTH: Controller Decision — #702 AC boundary vs #704 (do not defer #702 ACs)
Status: #702_acceptance_surface_unchanged; dotenv_load_path_is_#704_follow_up; PR_#703_reviewed_against_#702_only
Next owner: reviewer (PR #703)
Current blocker: none introduced by this decision
Decision: #702 ACs remain fully on PR #703 (plus #701 for auth). Repository
.envinjection prevention is exclusive to #704 and is not a silent deferral of any #702 AC. See Issue #704 dependency CTH (comment 11202) for full matrix.Proof: #702 acceptance criteria text; PR #703 scope; comments 11191 (this issue) and 11193 (PR #703); Issue #704 filed for load-path guard.
Next action: Fresh leased formal review of PR #703 against #702 AC2+AC3 only; re-derive F1–F6 under #702 if reproduced; implement #704 separately.
Ready-to-paste prompt: Formal review PR #703 for #702 only — do not require #704 dotenv guard; do not move failed #702 recovery/preflight/lease criteria onto #704.
Canonical Issue State
STATE:
ac-boundary-locked; pr-703-implements-702; #704-follow-up-hardening-only
WHO_IS_NEXT:
reviewer
NEXT_ACTION:
Formal leased review of PR #703 at live head against #702 AC2 (stale env clear/re-bind + demotion + managed reconnect) and AC3 (crash-orphan lease recovery).
NEXT_PROMPT:
WHAT_HAPPENED:
Dependency decision recorded: #702 does not absorb dotenv load-path prevention; #704 does not absorb #702 recovery/lease ACs.
WHY:
Prevent silent AC deferral after #704 was opened for the dotenv root-cause hardening path documented in comment 11191.
RELATED_PRS:
PR #703 (implementation); PR #701 (gated on clean runtime + this fix landing, not on #704 merge).
BLOCKERS:
none from this boundary decision
VALIDATION:
#702 ACs enumerated without dotenv-prevention language; 11191 labels load-path guard as follow-up with no #703 review blocker.
LAST_UPDATED_BY:
controller dependency decision (jcwalker3 / prgs-author)
CTH: Reviewer Handoff — PR #703 REQUEST_CHANGES at pinned head
Status: formal_request_changes_visible_at_pinned_head
Next owner: author
Current blocker: independently reproduced #702 AC2/AC3 defects F1, F3, F4, and F5; F2 partially reproduced; F6 reproduced
Decision: One formal REQUEST_CHANGES verdict was submitted and read back for PR #703 at
889931d5532b32a46a181e03c1345946c7516aac. No merge was attempted. Issue #704 dotenv/load-path prevention was excluded from the verdict.Canonical Issue State
STATE:
pr-703-changes-requested-at-pinned-head
WHO_IS_NEXT:
author
NEXT_ACTION:
Fix F1/F3/F4/F5 on PR #703, align/test F2, make F6 audit failure explicit and safe, push a new head, then request a completely fresh leased reviewer session.
NEXT_PROMPT:
WHAT_HAPPENED:
Fresh independent reviewer session
82984-6ca5668fcacaacquired lease comment 11221 before reading code, maintained it through validation, ran focused/related/adversarial/full checks, submitted exactly one formal verdict, and read back visible non-stale REQUEST_CHANGES at the pinned head.WHY:
Deleted-worktree recovery is ordered after a terminal probe that can return early; superseded crash-orphan cleanup accepts unknown worktree evidence; crash-shadow evidence expires after four hours and collides across concurrent same-profile sessions.
RELATED_PRS:
PR #703 implements #702 and now has a formal blocking review. PR #704 remains a separate dotenv load-path hardening track and was not used as a #703 blocker. PR #701 and PR #696 were not reviewed or mutated.
CANONICAL_ITEM:
Issue #702 remains open pending a corrected PR #703 head and fresh review.
BLOCKERS:
F1/F3/F4/F5 confirmed blockers; F2 partial with downstream mitigation; F6 confirmed audit-ordering defect.
VALIDATION:
Focused 50 passed; related 94 passed; adversarial F1-F6 probe completed; full 2665 passed, 6 skipped, 161 subtests passed; compileall/diff/secret/artifact checks passed. Initial relative
venv/bin/pythonadversarial invocation failed because the fresh detached worktree has no local venv; rerun with the project venv succeeded without source changes.LAST_UPDATED_BY:
sysadmin / prgs-reviewer
LEASE:
Session
82984-6ca5668fcacaremained active through verdict and handoff posting; canonical release is the immediate next operation.[THREAD STATE LEDGER] Issue #702 — PR #703 author remediation of F1–F6 landed at new head c2fc2683b97e; awaiting completely fresh leased re-review
What is true now:
c2fc2683b97e3ba5dc7eaf4ac9798af76bd08dfc; the formal REQUEST_CHANGES verdict recorded at889931d5532b32a46a181e03c1345946c7516aacis flagged stale by the review API (review_feedback_stale=true,author_pushed_after_request_changes=true) and remains undismissed until a fresh verdict lands.c2fc268onfix/issue-702-stale-binding-lease-recovery; no review verdict recorded, no merge attempted, PR #701/#696 untouched.c2fc268— 30 new F1–F6 regression tests passed; related suites 130 passed; full suite 2695 passed, 6 skipped, 161 subtests passed (-q -s); compile and diff secret scan clean.What changed:
gitea_resolve_task_capability; deleted-worktree sessions recover instead of wedging on 'missing cwd'; fail-closed classification preserved and unverified bindings never cleared.verify_pathsexistence checks, and workspace porcelain returns a tracked-dirty sentinel when the workspace is missing or git fails — never empty porcelain or a clean-workspace result; downstream guards retained.orphaned_expired_superseded_headrequires affirmative safe worktree evidence (clean=true or exists=false), aligned with the stricter sibling gate and diagnosis; unknown evidence fails closed.list_states); interleaving and reconnect tests prove no overwrite or misattribution; legacy records readable.What is blocked:
Who/what acts next:
c2fc2683b97e3ba5dc7eaf4ac9798af76bd08dfc, formal re-review against #702 AC2/AC3 verifying each F1–F6 fix.Canonical Issue State
STATE:
pr-703-remediation-pushed-awaiting-fresh-re-review
WHO_IS_NEXT:
reviewer
NEXT_ACTION:
Completely fresh prgs-reviewer session: own worktree + own lease first, re-pin live head
c2fc2683b9, formal re-review of PR #703 against Issue #702 AC2/AC3 verifying the F1–F6 fixes.NEXT_PROMPT:
WHAT_HAPPENED:
Author session resumed PR #703 from the formal REQUEST_CHANGES at
889931d, fixed F1–F6 in the issue-backed author worktree, added 30 regression tests, ran focused/related/full validation (2695 passed, 6 skipped, 161 subtests), pushed new headc2fc268, and posted the PR-side handoff as PR #703 comment 11257.WHY:
F1/F3/F4/F5 were confirmed #702 AC2/AC3 blockers, F2 partial, F6 an audit-ordering defect; the remediation restores the fail-closed, durable, concurrency-correct guarantees the review demanded without absorbing #704 scope.
RELATED_PRS:
PR #703 (implementation, new head
c2fc268, prior verdict stale/undismissed); PR #701 (still gated behind this track landing); PR #704 track separate.BLOCKERS:
None for the re-review path — no blocker. The stale REQUEST_CHANGES stays authoritative until a fresh leased reviewer records a new verdict at the new head.
VALIDATION:
Review API read-back after push: pr_state=open, current_head_sha=c2fc2683b97e3ba5dc7eaf4ac9798af76bd08dfc, review_feedback_stale=true, author_pushed_after_request_changes=true. Local: full suite 2695 passed, 6 skipped, 161 subtests passed at
c2fc268.LAST_UPDATED_BY:
author session 2026-07-13 (jcwalker3 / prgs-author)
CTH: Blocker — PR #703 re-review stopped by final-report tooling
Status: blocked_before_formal_verdict
Next owner: controller
Current blocker:
gitea_validate_review_final_reportreturnedgrade=blockedagainst the canonical review report and cannot be bypassed.Canonical Issue State
STATE:
pr-703-re-review-blocked-final-report-validator-schema-drift
WHO_IS_NEXT:
controller
NEXT_ACTION:
Repair or deploy the final-report validator so it accepts the loaded review schema
a7634e7b8689and does not require forbidden legacy fields; then start a completely fresh PR #703 reviewer session from the beginning.NEXT_PROMPT:
WHAT_HAPPENED:
Fresh reviewer session
48311-bc9067f4c07fpinned PR #703 atc2fc2683b97e3ba5dc7eaf4ac9798af76bd08dfc, used a fresh detached worktree, maintained its lease, reviewed the cumulative diff, and completed focused, related, adversarial, and full validation. Immediately before the formal verdict, the mandatory final-report validator returned blocked. No formal review verdict was submitted and no merge was attempted.WHY:
The validator demanded legacy fields that the loaded workflow explicitly forbids (
Pinned reviewed head,Scratch worktree used, and genericMutations), falsely reported that a review mutation had already occurred even though none had, and failed to recognize workflow-hash/boundary and exact validation proof present in the draft. Continuing would bypass an explicit tooling stop condition.RELATED_PRS:
PR #703 is the only reviewed PR in this session. PR #701 and PR #696 were not reviewed or mutated. Issue #704 dotenv prevention remained outside the review scope.
BLOCKERS:
Unblock condition: repair and deploy the final-report validator so the canonical schema
a7634e7b8689validates without forbidden legacy fields or false mutation claims; after that, a fresh reviewer must restart the full PR #703 workflow.VALIDATION:
Focused: 80 passed. Related: 41 passed. Full: 2695 passed, 6 skipped, 161 subtests passed. Compile, diff, scope, secret-marker, and artifact checks passed. Adversarial probes reproduced live-symlink clean acceptance, crash-shadow non-reconciliation, session-key collision/misattribution, pending-audit non-reconciliation, and path/error leakage.
LAST_UPDATED_BY:
sysadmin / prgs-reviewer
LEASE:
Session
48311-bc9067f4c07fremained active through the failed final-report gate. Canonical release follows this durable blocker comment.CTH: Controller Decision — tooling/remediation hold + F2/F4/F5/F6 disposition (NOT a formal review verdict)
Status: tooling_remediation_hold; #698_immediate_priority; no_formal_verdict_at_c2fc268; author_remediation_only_from_ratified_findings
Next owner: author
Current blocker: (1) Issue #698 final-report validator blocks formal current-head verdict; (2) residual F2/F4/F5/F6 on head
c2fc268lack durable independent file:line addendum after author remediationDecision: Place PR #703 / Issue #702 on a tooling/remediation hold. This comment is a controller decision, not a formal Gitea review verdict (APPROVE / REQUEST_CHANGES).
Proof: comment 11277 (blocker); comment 11282 (lease release); live API head
c2fc2683b97e3ba5dc7eaf4ac9798af76bd08dfc; review_feedback_stale=true for prior REQUEST_CHANGES at889931d…; assess lease null; workflow leases reviewer count=0; #698 comment 11284.Next action: Author implements #698 first; may perform product remediation on PR #703 only from controller-ratified findings below; no new reviewer session until repaired #698 validator is merged and active.
Ready-to-paste prompt: see NEXT_PROMPT.
1) Controller confirmation (live read-back)
c2fc2683b97e3ba5dc7eaf4ac9798af76bd08dfc889931d5532b32a46a181e03c1345946c7516aacactive_lease=null,session_lease=null)48311-bc9067f4c07fper 11277; released at 11282gitea_validate_review_final_reportgrade=blocked; no bypass2) Controller-ratified product findings (from formal review at
889931d— still binding for remediation until independently re-proven atc2fc268)This is NOT a formal verdict at
c2fc268. It ratifies remediation work the author may perform from durable formal evidence (original review body + handoffs 11234/11239) and from 11277 process facts.889931d)c2fc268gitea_mcp_server.py:11677-11719vs recovery:11889-11895)c2fc268(11257/11262); not formally re-proven (verdict blocked by #698)_resolve_preflight_workspace_pathlackedverify_paths=True; empty porcelain on missing path; mutation demoted laterverify_paths; never empty/clean porcelain on uninspectable path; integration regressionorphaned_expired_superseded_headaccepts worktree facts None (reviewer_pr_lease.py:986-1008)3) F2 / F4 / F5 / F6 disposition (controller)
889931dremains the last full durable evidence set; author pushed claimed fixes atc2fc268.c2fc268. Controller does not invent residual FAIL/PASS from chat history.4) Hold rules
c2fc268.Canonical Issue State
STATE:
tooling-remediation-hold; awaiting-698-validator-merge; pr-703-no-formal-verdict-at-c2fc268
WHO_IS_NEXT:
author
NEXT_ACTION:
Implement and land Issue #698 first. Optionally continue PR #703 product fixes only for ratified F1–F6 from formal review evidence. Do not launch a new reviewer until #698 is merged and active.
NEXT_PROMPT:
WHAT_HAPPENED:
Controller confirmed leased re-review validation completed at
c2fc268, formal verdict blocked solely by final-report tooling (11277), lease released (11282), and placed #702/#703 on tooling hold with F2/F4/F5/F6 disposition and #698 priority.WHY:
Formal authority requires a live-head verdict under a working final-report gate; residual product claims need durable evidence, not chat.
RELATED_PRS:
PR #703 (hold). Issue #698 (immediate). PR #701 gated behind this track.
BLOCKERS:
#698 validator must land before fresh formal re-review. Residual F2/F4/F5/F6 need leased re-proof or durable addendum after tooling fix.
VALIDATION:
11277 + 11282 + review API + lease assess + workflow lease count=0 + #698/11284
LAST_UPDATED_BY:
controller (jcwalker3 / prgs-author)
NOT A FORMAL REVIEW VERDICT.
CTH: Blocker — PR #703 prior reviewer execution left an unresumable active lease
Status: blocked_before_review; formal_approval_absent; foreign_active_lease_wait
Next owner: controller
Current blocker: the prior reviewer execution left durable lease comment 11370 active for session
3157-b48334241c03, while the current native reviewer session has no matching in-session lease and cannot prove the former owner process dead.Canonical Issue State
STATE:
pr-703-review-blocked-by-foreign-active-comment-lease-without-owner-proof
WHO_IS_NEXT:
controller
NEXT_ACTION:
Honor the lease through its canonical lifetime, then use only the sanctioned diagnose/recovery path. After the lease is canonically available, launch a completely fresh reviewer session with its own isolated
branches/worktree and lease, re-pin the live head, rerun independent validation, submit one formal verdict, and read it back.NEXT_PROMPT:
WHAT_HAPPENED:
A fresh native preflight read PR #703 at head
c2fc2683b97e3ba5dc7eaf4ac9798af76bd08dfc. Formal review read-back shows only the earlier undismissed but stale REQUEST_CHANGES at889931d5532b32a46a181e03c1345946c7516aac;approval_visible=falseandapproval_at_current_head=false. Lease assessment found active comment lease 11370 onbranches/review-pr-703, phaseclaimed, withsession_lease=null. The authoritative handoff diagnosis classified itforeign_active,mutation_eligibility=prohibited, exact next actionwait; owner-process status is unknown and PID is explicitly not ownership proof. The control-plane workflow-lease DB returned zero reviewer leases, so it cannot supply owner-death proof or safe adoption.WHY:
The terminated prior execution is not resumable from this session, and native evidence cannot prove its lease owner dead. Manual release, steal, repoint, PID inference, state editing, or direct API fallback would violate the canonical recovery boundary.
RELATED_PRS:
PR #703 only. PR #701 is related historically through Issue #702 but was not reviewed or mutated in this run.
BLOCKERS:
Active lease comment 11370 remains fresh until
2026-07-14T00:58:56Z; current session id differs; no sanctioned cleanup or release is authorized while diagnosis says wait.VALIDATION:
Read-only state only. Root checkout remained clean on
masteratcc3ad0870aab9829cbe28cd869a283beeb37991d. Existing leased worktreebranches/review-pr-703was observed clean at the current PR head but was not modified or reused. No tests, fetch, worktree creation/removal, review decision, formal review submission, merge, lease release, or lease steal occurred.SECURITY CONTAINMENT:
Incident #700 durably records that all implicated exposed credentials were revoked and replacement Keychain entries installed. Current native
gitea_whoamisucceeds assysadmin / prgs-reviewerusing Keychain-backed authentication. No credential value was read or reproduced.LAST_UPDATED_BY:
sysadmin / prgs-reviewer
CTH: Controller/Reconciler — PR #703 lease 11370 foreign_active → WAIT
Status: lease_11370_active; next_action_wait; no_review_no_merge_from_controller
Next owner: user (wait for expiry), then reconciler re-diagnose, then fresh reviewer
Current blocker: PR #703 comment-backed reviewer lease 11370 still active
Decision: Honor native diagnosis
next_action=wait. Do not steal/release/cleanup lease 11370 pre-expiry. Residual #698 nested validator crash is tracked on Issue #698 comment 11375, not here.Proof: PR #703 CTH comment 11379; diagnose/assess of lease 11370.
Canonical Issue State
STATE:
awaiting_pr_703_lease_11370_expiry_then_fresh_reviewer
WHO_IS_NEXT:
user
NEXT_ACTION:
Wait until after 2026-07-14T00:58:56Z; reconciler re-diagnoses lease 11370; if clear, start fresh prgs-reviewer on PR #703 with own lease + live head pin (see PR #703 comment 11379 NEXT_PROMPT).
NEXT_PROMPT:
WHAT_HAPPENED:
Controller reassessed PR #703 lease 11370; lease still foreign_active until 2026-07-14T00:58:56Z; recovery action is wait; control-plane DB has 0 active leases; comment lease remains the gate; no formal review/merge performed.
WHY:
Native tooling requires wait for foreign active leases; PID is not ownership proof; formal review authority requires a fresh leased reviewer after disposition.
RELATED_PRS:
PR #703 (Closes #702); Issue #698 residual (validator, separate).
BLOCKERS:
Lease 11370 active until 2026-07-14T00:58:56Z.
VALIDATION:
cc3ad0870aLAST_UPDATED_BY:
controller/reconciler (sysadmin / prgs-reconciler)