-
-
Notifications
You must be signed in to change notification settings - Fork 159
docs: the four ways a CI gate can be unable to fail #7049
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| Documented the four distinct ways a CI gate can be structurally unable to fail, | ||
| in `CLAUDE.md`. All four look green-adjacent on the Actions page and none can turn | ||
| a merge red: `continue-on-error: true`; absence from branch protection's required | ||
| contexts; `concurrency` with unconditional `cancel-in-progress` on a slow-queue | ||
| branch; and the subtlest — the gate runs and passes while its subject never | ||
| actually executed. | ||
|
|
||
| Each has bitten this repo, three of them inside one week. The fourth is the | ||
| dangerous one because the job is genuinely green: `PERRY_GC_FORCE_EVACUATE` was | ||
| inert for every `gc()`-driven test, and the GC matrix's `--pressure` knob disabled | ||
| the very path it was measuring. The rule that follows is that a gate must assert | ||
| its subject was live, not merely that nothing threw. |
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🌐 Web query:
GitHub status checks required branches cancelled check blocks merge not satisfied pending💡 Result:
On GitHub, a required status check must reach a successful conclusion for a pull request to be merged into a protected branch [1][2]. If a required status check is in a "cancelled" or "pending" state, it will block the merge [3][4][5]. The following details clarify how these states affect merging: Pending: A status check remains in a "pending" state if it has not yet reported a result, or if the workflow was skipped (e.g., due to path or branch filtering) [4][6]. Because the check has not reached a successful conclusion, it blocks the merge [3][4]. Cancelled: If a required status check is cancelled before it completes, its conclusion is "cancelled" [2]. This does not satisfy the requirement for a successful, skipped, or neutral conclusion, and therefore it blocks the merge [1][2][5]. To resolve these issues, you must ensure the required check is triggered and reaches a successful, skipped, or neutral conclusion [1][2][3]. If a check is stuck in "pending" or "cancelled," you may need to: - Rerun the workflow or check to ensure it completes successfully [2][5]. - Verify that your workflow filters (such as
pathsorbranches) are not causing the check to be skipped unexpectedly [4][6]. - Ensure that the required check name matches exactly what is defined in your branch protection rules [3][5]. - If you are using merge queues, ensure your workflows include themerge_groupevent trigger [7][8][6].Citations:
Correct the cancellation wording for required checks.
A cancelled required status check can block merging because it is not a successful/skipped/neutral conclusion. Reword the cancellation item to say the rule is to scope cancellation so required checks on
mainare not cancelled, rather than claiming it universally cannot turn a merge red. Apply this to bothCLAUDE.mdandchangelog.d/7047-gate-cannot-fail-patterns.md.📍 Affects 2 files
CLAUDE.md#L205-L214(this comment)changelog.d/7047-gate-cannot-fail-patterns.md#L1-L12🤖 Prompt for AI Agents
📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
Repository: PerryTS/perry
Length of output: 200
🏁 Script executed:
Repository: PerryTS/perry
Length of output: 28604
Add the required version metadata before merging to
main.This Markdown-only change is not tied to a
Cargo.tomlversion bump. Include the changelog fragment, update[workspace.package].version, and updateCLAUDE.md’sCurrent Versionline as part of the merge commit.🤖 Prompt for AI Agents
Source: Coding guidelines