Repository navigation
revert(pr-merge): drop the wake's unmoved-refusal skip (#13107), which never fired in 24 h - #13453
Conversation
…h never fired in 24 h This reverts the refusal-stands skip from commit 55f8a62. Its own 24 h gate failed: in 62 wakes, 0 skipped on the probe and 29 paid it for nothing. Removed: the keep-report step's refusal-stands probe, its notice and output, the REFUSAL_STANDS outcome, babysit_verify_evidence.py refusal-stands, babysit_postmerge.py content_refusal, refusal_moved and CONTENT_REFUSALS, the running option of _verifying_runs_unchanged and idle_runs_refusal (only refusal_moved passed it), their tests and the pr-pipeline README sentence. Kept: the judgedRuns reading added later (judged, moved(), _judged_runs), and the same commit's separate run-cache and attempts wiring (BABYSIT_RUN_CACHE in keep-report, attempts.json kept beside the fresh report, the arm step's BABYSIT_POSTMERGE_ATTEMPTS) with its tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The revert removed the only test that reached idle_runs_refusal's judged= argument, which sat in the refusal_moved class. The new IdleRefusal case shows a completed run the report recorded at the same updated_at counts as unmoved, while the same run without the record, or re-run since, counts as moved. It fails when the argument is deleted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
claude-security-review reviewed Security review: no security issues foundThis was a full review: I read every hunk of all 8 changed files. There were no earlier heads, so the review was not limited to blocking findings. This pull request reverts #13107's "refusal-stands" skip in pr-merge's PR-scoped wake. Three files match the trusted-path list and got full scrutiny: Merge hold check. The removed skip could only stop a wake from arming. When it fired, it deleted the last report so the arm step stayed skipped. With it gone, a wake that used to stop there now runs the fresh post-merge check, which every other wake already runs. The arm step's condition is unchanged:
So the hold is not widened. A report the skip used to stop on still fails the same idle-tick checks unless something it read has actually changed. Removed code. I searched the tree: no callers remain for Other checks.
Spend. The change uses no paid resources. It only changes how many GitHub API calls a wake makes, which the description puts at about 9 fewer on a wake whose last report refused. critical-findings: 0 |
|
claude-review reviewed Code review: PR #13453, a revert of #13107's unmoved-refusal skipNo findings. I read every hunk of all 8 changed files in the full diff. This is the first review of this pull request (0 earlier heads), so all findings were in scope, not only blocking ones. What I checked
Notes
|
|
The pr-verify verifier failed head This pull request leaves the merge queue, and ci-status holds it out while it carries |
Refs: #12445
Summary
#13107 set its own 24 h gate: revert if probe-only wakes x 9 calls > skipped wakes x 64 calls. Measured from 2026-11-04T06:16Z to 2026-11-05T06:16Z, with the GitHub outages 09:54-11:44Z, 16:00-16:54Z and 17:45-18:16Z left out, over 62 pr-merge
workflow_dispatchwakes:report=last outcome=skipped: the skip never fired;report=none.29 x 9 = 261 > 0 x 64 = 0, so the gate fails and the skip comes out.
Fix
Removed (the refusal-stands skip only):
pr-merge.ymlkeep-report: therefusal-standsprobe, its::notice, therefusal-stands=output and the variables it used; the wake-outcome step'sREFUSAL_STANDSenv and itsskipped: the last sweep's report still refuses ...outcome.babysit_verify_evidence.py refusal-stands(_refusal_stands).babysit_postmerge.py:CONTENT_REFUSALS,content_refusalandrefusal_moved.runningis dropped from_verifying_runs_unchangedandidle_runs_refusalbecauserefusal_movedwas its only caller.test_babysit_lane_room.pyandworkflow.test.mjs, and the matching sentence indocs/conventions/pr-pipeline/README.md.Kept:
judgedRunsreading: thejudgedparameter, themoved()helper (now completed runs only, sincerunningis gone) andjudged=_judged_runs(report). ItsJudgedRunstests stay. The fix(source-control): count a verifying run as moved only when the post-merge check did not read it #13241 test that coveredidle_runs_refusal'sjudged=wiring,test_a_run_the_check_read_finished_moves_nothing, calledrefusal_movedand went with theRefusalStandsclass.IdleRefusal.test_a_run_the_report_judged_finished_moves_nothingreplaces it.BABYSIT_RUN_CACHEin keep-report,attempts.jsoncopied beside the fresh report, the arm step'sBABYSIT_POSTMERGE_ATTEMPTS, and their two tests inworkflow.test.mjs. The 24 h gate measured only the unmoved-refusal skip, and Change B saves reads on every wake, so the revert leaves it in place.pr-merge.ymlfrom fix(pr-verify): keep no-change remarks out of a fail's notes #13112 and refactor(source-control): drop the verdict reader's unused listing-carry input #13141.New change fragments for
source-control(patch, Removed) andpr-pipeline(none). #13107's own fragments already shipped.Verification
pytest plugins/source-control/skills/babysit-prs/scripts/tests: 4110 passed.IdleRefusaltest fails whenjudged=_judged_runs(report)is deleted fromidle_runs_refusal('runs-changed' is not None) and passes with it.node --test .github/scripts/pr-merge/workflow.test.mjs: 108 of 108 pass, after merging origin/main.ruff checkon the babysit scripts,scripts/sync-hold-floor.py --checkandscripts/check-changelog-fragments.sh --checkall pass.test_babysit_lane_room.pyandtest_babysit_postmerge*.py618 passed;workflow.test.mjs108 of 108.Security review at the ready flip (non-blocking notes)
An independent security review of the diff found nothing blocking: no secret exposure, no permission or trigger change, no billing change. The arm step's condition (
pr-merge.yml:2596) still reads onlykeep-report.outputs.stands, and nothing readsrefusal-standsany more. A wake the skip used to refuse now runs the fresh check and arms only when that check andsettle --freshboth pass, the same rule every other wake follows. Two non-blocking notes:pr-merge.yml:2552-2585: a wake the skip refused can now arm, but only where the probe's "nothing moved" prediction was wrong. That is the intended effect, not a gate bypass.workflow.test.mjs:694: the test asserts only the first call before the fresh check (run.calls[0]), plus the total call count. It could pin the exact check count per outcome, but the count assertion already catches an extra call. Coverage only; left as is.Remaining
What stays open on #12445 after this PR:
Done-when 1-3 are delivered:
pr-merge.yml:91-95;Related
judgedRuns), fix(pr-verify): keep no-change remarks out of a fail's notes #13112 and refactor(source-control): drop the verdict reader's unused listing-carry input #13141.🤖 Generated with Claude Code