Repository navigation
Stop auto-fired full reviews from overwriting a concurrent #update-review - #21905
Conversation
…view When an author pushes and then comments #update-review seconds later, the update lane sets review:in-progress before triage's auto-fired full review reaches its already-reviewed gate. The full review proceeded, finished minutes after the update, and republished v1 over the author's resolved card at the same head. This happened three times on #21871. - Skip the auto-fire path on review:in-progress. Orphaned labels are already cleared by review-label-reconcile.yml. - Take the card timestamp right after the run reads PR state, not at compose time, so pinned-comment.sh's stale-publish guard (#21788) can see that a card was published after this run looked. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Sentinel — merge gate status (preview)Warning
|
| Gate | What it needs | |
|---|---|---|
| ✅ | G1 review-ran | Nothing to do: review current at 5c935b0b8. |
| ✅ | G2 findings-answered | Nothing to do: every finding answered. |
| 🔴 | G3 right-approver | Needs approval from a member of any review team (pulumi/docs-blog-review, pulumi/docs-guild, pulumi/docs-marketing-review, pulumi/docs-tools) or a repository administrator — no qualifying human approval at this head (bot approvals never count). |
| ➖ | G4 infra-evidence | Doesn't apply to this PR: no changed path affects the deploy. |
| ➖ | G5 oversized-ack | Doesn't apply to this PR: not oversized. |
Break glass: a member of a routing team (.github/review-routing.yml teams:) can apply review:waived, which is logged.
Evaluated at head 5c935b0b8.
|
Your site preview for commit 5c935b0 is ready! 🎉 http://www-testing-pulumi-docs-origin-pr-21905-5c935b0b.s3-website.us-west-2.amazonaws.com |
Reviewer's guide v1 — not for the authorTip This is the reviewer's guide. Work through the PR author: your to-do list is the other review comment, "Author action guide" — nothing on this card is yours. Approval needed from: @pulumi/docs-tools — any member's approval satisfies the merge gate. Note What this PR changes:
The risk here is a guard that skips legitimate reviews, or a stamp that lets a stale full review overwrite a newer card. The infra pass read both workflow changes against the new tests and the existing redispatch and reconcile paths. Review confidence:
|
Author action guide v1 — nothing blocks mergeNote Nothing here blocks merge — no open items need an answer from you. A human reviewer still approves the merge. This PR makes auto-fired full reviews skip PRs already labeled 🚨 Fix or disagreeNothing to fix — this section is empty. ❓ Questions for youNo open questions for you. 📎 Full evidence: verification trail, investigation log, review history. Review v1 · updated 2026-09-25T17:36:40Z · head commit 5c935b0 How to answerEvery 🚨 and ❓ item above needs one of these before merge:
The Please don't edit, hide, or delete this comment — it is the review's record. Full mechanics: CONTRIBUTING.md §AI-assisted contributions. |
On #21871 the author's resolved card ("v4 — nothing blocks merge") was replaced with a fresh "v1 — N items block merge" three times: 09-24 15:32, 09-25 10:41 and 09-25 14:51. None of those came from a request to regenerate the review.
Cause: The author pushes, then comments
#update-reviewseconds later. The update lane setsreview:in-progressbefore the full review that triage auto-fires (viaworkflow_run) reaches its gate. That gate'salready-reviewedskip didn't includein-progress, so the full review ran too (proceed (labels=…review:in-progress)in runs 36019781626, 36124379051 and 36149244382). It published several minutes after the update, at the same head.Two existing guards should have caught it, and neither did:
handoff_guard.pyonly compares SHAs, and the head hadn't moved.pinned-comment.sh(Stop a stale review run from overwriting a newer card #21788) compares card stamps. The full review stamps its card at compose time, 6+ minutes after it read the PR. On 09-25 its stamp was 14:48:35 and the update's was 14:43:54, so the stale card looked newer.Changes
review:in-progress.review-label-reconcile.ymlalready clears orphanedin-progresslabels.Compute review timestampto run directly afterResolve PR context, so the stamp shows when the run looked at the PR. Against Add blog post about component state migrations #21871's timeline, this change alone would have refused all three overwrites.test_handoff_guard.py. Both fail on master and pass here.make test-review-pipelinepasses.Trade-offs
updatedtime now shows when the run started reading the PR, not when it finished composing.🤖 Generated with Claude Code