Stalled PR Close Policies
Two PR-only close reasons handle external pull requests that stop making progress: stalled_unproven_pr and abandoned_pr. Both are review-proposed and apply-guarded like every other close reason: review records the proposal, and apply re-checks live GitHub state immediately before any mutation.
Both reasons are for non-maintainer pull requests only. Maintainer-authored PRs, protected labels, and the standard exemption labels (clawsweeper:human-review, clawsweeper:manual-only, clawsweeper:autofix, clawsweeper:automerge) always block them.
#stalled_unproven_pr
An external PR was asked for real-behavior proof, the ask expired, and the branch is low-rated and idle.
Review may propose it only when all of these hold:
realBehaviorProof.statusismissing,mock_only, orinsufficient;prRating.overallTierisDorF;- the proof requirement is visible on the PR (ClawSweeper review comment,
proof nudge, or a needs-proof label).
Apply additionally verifies live state:
- the PR is older than 14 days and its current head has no source-triggered
- a dated proof request is visible on the PR — a needs-proof label timeline
- the PR is not a draft (drafts route to
abandoned_prinstead); - no
proof: sufficientorproof: overridelabel is present; - no human engagement: no assignee, requested reviewer/team, or
workflow run associated with that pull request created in the last 14 days. This immutable run creation time counts a push of an old commit as fresh activity without letting later CI reruns reset the clock. A force-push event targeting the current head also resets the clock; missing source-activity data keeps the PR open;
event or a proof-nudge comment — and that request is at least 14 days old, so the contributor had a real window to respond. The durable review comment is edited in place and cannot date the ask, so it does not count;
maintainer comment/review/inline comment.
The close comment names the missing proof kind and invites reopening with a live run, logs, or a reproducible validation transcript. Historical proof-nudge comments still count as dated proof requests; the proof-nudge lane itself was retired in July 2026.
#abandoned_pr
An external PR has clearly been abandoned in a non-landable state.
Review may propose it for stalled external PRs, but not for high-quality proven work: an S/A/B overall rating with sufficient or overridden proof blocks the reason because that work belongs in repair/adopt paths.
Apply additionally verifies live state:
- the PR is older than 30 days and its current head has no source-triggered
- the live PR is still stalled: a draft, labeled
- no human engagement, same checks as above.
workflow run associated with that pull request created in the last 30 days, using the same push-safe, rerun-stable inactivity clock as stalled_unproven_pr;
status: ⏳ waiting on author, failing checks, or not cleanly mergeable due to conflicts on its current head (combined status failure/error, or a check run concluding failure/timed_out) on its current head;
The close comment acknowledges the useful part of the work, states the observed inactivity window and stalled state, and invites a rebased reopen or a fresh PR with green checks.
#Failure posture
Live-state probes run through safe wrappers: if any GitHub read fails, the apply run records a skip reason and keeps the PR open. Snapshot drift rules still apply — any new commit, comment, or label change since the review blocks the close until a fresh review confirms the proposal.