Repository navigation
Make reviews decide and close PRs by age - #817
Conversation
Remove the `discuss` rubric verdict and the `needs_discussion` overall verdict: blocking rubrics decide pass or block (unreadable verdicts fail closed), advisory code quality decides pass or flag and never vetoes, and refactor reviews decide approve or request_changes. Replace the inactivity-based PR staling, which never fired because review bots comment on every PR, with an age-based policy: label `stale` at 7 days open, close at 21 days once labelled for at least 7. Issues keep the existing inactivity policy. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Proof profile (new / modified Lean files)No added or modified Lean files under Advisory only — never blocks merge. |
|
Advisory cross-file review against Lean Pool's supervisory rubric. This is not by itself a significance, source-verification, or merge verdict. [Medium impact] The PR appears safe to merge; no new actionable issues were found. SummaryThis PR replaces deferred review verdicts with clear decisions and introduces age-based PR closure.
Reviews (3) · Last reviewed commit: "Preserve stale PR warning periods and is..." · Reviewed by Greptile |
ubuntu-26.04 runners ship multicall uutils coreutils, so a symlink to sleep invoked as `lean` exits immediately and the watch never trips. This failed Python CI on every non-content PR (and dequeued #758). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Require a known stale-label timestamp before closing a PR, preserve the author's fixed-age reopening advice, and stop the issue-only stale action from clearing PR labels. Grant the PR checkout job contents:read explicitly. Add a missing-history regression. Validated six policy cases, label-history/dry-run behavior, Ruff check/format and the actual watchdog timeout fixture; hosted required checks remain independent.
Vilin97
left a comment
There was a problem hiding this comment.
Approve — reviewed exact head d8a014094a3808a65bdb23a4bc45e3eb348797b8.
The review-tool changes preserve fail-closed core verdicts, advisory quality flags and blocking unresolved integration obligations. The age policy retains the intended 7-day warning, 21-day age threshold, minimum 7 days labelled, and pinned exemption.
I fixed the remaining policy bugs in the three-file commit:
- Missing label history no longer counts as a completed warning period; a regression covers it.
- The issue-only stale action explicitly leaves PR stale labels intact. Its pinned implementation otherwise removes labels on activity before checking the disabled PR-close setting, resetting the new age policy's warning clock.
- The checkout job receives explicit read permission while retaining the needed issue/PR permissions. The issue job's 90/30-day policy is unchanged.
The author's newer reopening advice is preserved. The fake-Lean watchdog test retains its timeout assertions and passed against the unchanged current-main watchdog.
Validation: six policy tests, pagination/dry-run boundary checks, the actual watchdog fixture, Ruff lint/format, and twelve independently assessed review/portion cases passed. This is focused validation; the new head's required hosted checks must still pass before protected queue admission.
Two policy changes the maintainer asked for (2026-11-14).
Reviews always decide. There is no third verdict any more.
passorblock. An unreadable or retired verdict fails closed asblock.passorflag(request_changes; otherwiseapprove.needs_discussionis gone, from refactor reviews too.block/request_changesinstead ofdiscuss.Stale PRs by age, not inactivity.
actions/stalenever fired on PRs because the review bots comment on every one. Newpython/lean_pool/stale_pull_requests.py(run every 6 h bystale.yml):staleonce it has been open 7 days;pinnedexempts a PR. Issues keep the existing inactivity policy.A live dry run labels 17 open PRs now. #506/#507/#512/#639 already carry
staleand would close 7 days after their label date.The permanent reviewer's prompt gains matching rules: never defer, merge ready PRs, oldest first. That ships in the automation repo, along with this PR's merge authorization.
Flaky-on-26.04 test fix.
test_watch_stops_a_lean_process_past_the_limitfakedleanas a symlink tosleep. Theubuntu-26.04runners ship multicall uutils coreutils, so that binary invoked asleanexits immediately. The test failed Python CI on every non-content PR, and it is what dequeued #758. It now fakesleanwith Python, like the neighbouring tests.Testing:
ruff checkclean. Updated review/portion tests and new stale-policy tests pass. The full suite passes excepttest_repository_notice_is_current(stale NOTICE, fixed by #758) and threetest_proof_profilecases that fail identically on main.🤖 Generated with Claude Code