Repository navigation
feat(pr-validation): button, real undo example, one live approval - #908
Merged
Merged
Conversation
Three things, from reviewing the comment on #906 in place. The call to action is now a shields.io badge wrapped in the link, which is the only thing in Markdown that reads as a button. That puts a third party in the path of a release control, so the alt text carries the whole call to action: a blocked image leaves a described link, not a broken rectangle. Setting badge-url to empty drops the dependency and falls back to a heading link. The "not intentional?" example now shows this pull request's own commit subjects in a diff block instead of a made-up feat(scope)!: subject. It matches only the `!` form, because that is the form the example illustrates — a view, never a verdict. The canonical rule stays in the detector, and with nothing matched the wording goes generic. And only one approval request stays open. Every push queued another pending deployment while the old ones kept sitting in the reviewers' queue, each tied to a commit that is no longer the head — #906 had two at once. Approving one of those approves a revision nobody is merging. A concurrency group keyed to the pull request cancels the previous request, which is also what expires an approval: the yes was given to a specific revision and the next one has to earn its own. The cancelled run still reaches the verdict, so it now checks whether it still covers the head and leaves the pull request alone when it does not. Otherwise it would overwrite the live comment with "the approval did not complete".
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configuration
📒 Files selected for processing: 5
✨ Finishing Touches
Comment |
Contributor
🔍 PR Validation Summary✅ PR Mergeable — no blocking failures
|
Contributor
🔍 Lint Analysis
|
Contributor
🛡️ CodeQL Analysis ResultsLanguages analyzed: Found 1 issue(s): 1 Medium
🔍 View full scan logs | 🛡️ Security tab |
Contributor
|
@coderabbitai review |
|
This was referenced Oct 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Three changes to the breaking-change gate, from reviewing the live comment on #906.
1. The call to action is a button. Markdown has none, so it is a shields.io badge wrapped in the link — compared against an HTML card, a
<kbd>and a plain heading on #906, and this one won on looks. It puts a third party in the path of a release control, so the alt text carries the whole call to action: a blocked image leaves a described link, not a broken rectangle.badge-url: ''drops the dependency and falls back to a heading link.2. The undo example uses this PR's own commits. Instead of a made-up
feat(scope)!: subject, it lists the real breaking subjects in adiffblock:Only the
!form is matched there, because that is the form the example illustrates. It is a view, never a verdict — the canonical rule stays inbreaking-change-guard, and with nothing matched the wording goes generic.3. Only one approval request stays open, and approvals expire on a push. This is the one that matters. Every push queued another pending deployment and GitHub retired none of them — #906 had two at once, on
f8d5506and229bdd0. Approving the stale one approves a revision nobody is merging, while the live one still waits.A
concurrencygroup keyed to the pull request, withcancel-in-progress, means a push cancels the previous request. That is also what expires an approval: the yes was given to one revision and the next has to earn its own.The cancelled run still reaches the verdict job, so it now compares the commit it covers against the PR's current head and leaves the pull request alone when they differ. Without that it would overwrite the live revision's comment with "the approval did not complete" — true of the dead run, misleading about the live one.
Type of Change
feat: New workflow or new input/output/step in an existing workflowBreaking Changes
None.
badge-urlis a new optional input with a default, and no workflow input, output or job name changes.Testing
@this-branchor the beta tagLayouts were iterated directly on #906 by editing the live comment, which is how the badge was chosen.
The verdict logic was exercised against a stubbed
ghfor the new state: head unchanged/approved, head changed →superseded, head changed and approval cancelled →superseded(the case that would corrupt the live comment), head unchanged with approval cancelled →unresolved, rejection, and nothing-to-approve.actionlint,composite-schema,typosclean. 71 wiring tests, 5 new: the concurrency group, that a superseded run drives neither the comment nor the close, the badge fallback, and that the undo example comes from the real commits.Caller repo / workflow run: #906 carries the gate; the two stale pending deployments there are what motivated change 3.
Related Issues