Files
improvise/context/code/pr-review.md
T
Edward Langley 67905d9440 scripts: pr-reviews, because twenty PRs merged with their reviews unread
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
2026-09-21 10:40:38 -07:00

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.