Skip to content

v0.8.2 — A closed PR is owed no verdict

Latest

Choose a tag to compare

@raphaelcm raphaelcm released this 10 Aug 13:57
55e0465

The assertion stops paging about PRs nobody can act on

The deliverable assertion demanded an AUTOMERGE-DECISION-V1 block for every non-group PR, including closed ones — which contradicts the pipeline's own policy in the opposite direction. gate.cjs refuses a closed PR with pr_not_open, and the auto-merge job deliberately keeps that code out of its escalation allow-list, because paging about an already-closed PR is the noise that devalues the label. So a Dependabot PR closed or superseded while its review was in flight ended in a red job, a needs-human-review label, and an assignee, for a PR nobody can act on.

Seen live: a replay against a closed, already-escalated, operator-ruled PR. The agent investigated, correctly declined to post a redundant verdict on a closed PR, and the assertion paged anyway. It now skips when the PR is not OPEN, the same scoping it already applies to group PRs and for the same reason: the gate cannot merge it, so no verdict is owed. Reopening fires pull_request: reopened, which re-runs the review with the PR open, so no coverage is lost.

The assertion is finally executed by a test

The deeper gap was that this step had never been run by anything. bash -n proved it parses, which is silent about policy — and both of its live failures were policy: accepting a stale verdict (v0.8.1), then paging about closed PRs (this release).

It is now exercised against a gh stub that pipes canned comment JSON through real jq using the step's own --jq expression, so the timestamp filter under test is the one that ships rather than a re-implementation of it. Five cases: a fresh verdict passes, a stale verdict goes red and labels, a closed PR passes silently, an open singleton with no verdict pages a human, and a group PR passes silently. The stale case and the closed case were each falsified by reverting their fix.