Prints a PR's reviews and says whether each targets the CURRENT head or an earlier one, because that changes what you do: a finding against an old commit may be fixed or still live, and both have happened this week. --wait blocks until a review lands against the head. Observed latency is ten to fifteen minutes after a push, so a merge four minutes later races the review that was about to arrive. When it times out that is a decision to merge unreviewed, not a clean bill. The detection rule is placement, not authorship: Codex posts under the owner's account, the same one our agents use, and ENDS with its attribution where ours OPEN with theirs. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FC2jVn8Au7E9JPkw6bwXXH
1.8 KiB
Reading a PR's reviews
Twenty PRs merged in one campaign with their reviews unread. CI was green and an adversarial agent had been dispatched, which felt like the whole gate. Two ChatGPT Codex reviews were found afterwards on merged PRs; both were correct and one was a live P2. Three more were found on the next three PRs — one per PR, every one a P1.
scripts/pr-reviews <n> prints them. --wait <sec> blocks until one lands
against the current head.
Why a review is easy to miss here
It arrives as a review, not a comment, so reading the comment thread does not show it.
It posts under the repository owner's account — the same account this
repo's own agents post under — so authorship does not distinguish it. The
tell is placement: a Codex review ends with
_Automated review by ChatGPT Codex (…)_, where an agent's comment opens
with _Posted by Claude (…)_.
It may target an earlier head. pr-reviews says which, because that
changes what you do: a finding against an old commit may already be fixed or
may still be live, and only checking tells you which. Both cases have occurred
— one fixed by a later round, one live at the head after three more commits.
Absence is not approval
Reviews arrive as the owner's quota allows. Observed latency is ten to fifteen
minutes after a push. --wait exists so that a merge four minutes after a
push does not race the review that was about to arrive; when it times out,
that is a decision to merge unreviewed rather than evidence of a clean bill.
Answer them on the thread
Including after the PR has merged. That is where the next reader looks, and a finding that was declined or already-fixed is worth as much as one that was taken — the reasoning is the artefact, not the verdict.