Repository navigation
fix(ci): change concurrency group to per-SHA to prevent HEAD commits from missing CI runs - #247
Conversation
…from missing CI runs
Adds `${{ github.sha }}` to the concurrency group keys in ci.yml and
feature-ideation-tests.yml, so each commit gets its own concurrency slot.
cancel-in-progress: true becomes a no-op in practice (two runs never share
a SHA) while still bounding queue depth to one run per commit.
Also updates the documented pattern in standards/ci-standards.md so newly
adopted ci.yml files in downstream repos pick up the correct pattern.
Closes #246
Co-authored-by: Don Petry <don-petry@users.noreply.github.com>
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (4)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Code Review
This pull request updates the CI standards documentation to include the commit SHA in the GitHub Actions concurrency group name. Feedback indicates that adding the SHA makes the concurrency group unique per commit, which renders the cancel-in-progress setting ineffective. Additionally, the reviewer noted that workflow file changes mentioned in the PR description are missing from the current patch.
|
|
||
| concurrency: | ||
| group: ci-${{ github.ref }} | ||
| group: ci-${{ github.ref }}-${{ github.sha }} |
There was a problem hiding this comment.
There was a problem hiding this comment.
Both points are addressed in the current branch:
-
Workflow files:
.github/workflows/ci.ymland.github/workflows/feature-ideation-tests.ymlare changed in this PR (SHA-scoped concurrency group added to both). The diff is visible in the Files tab. -
cancel-in-progress: trueredundancy: Intentionally kept — the standards doc at line 125–126 explains: "With SHA-scoped groups, no two pushes share a slot, so the setting is a no-op in practice. It is kept for documentation value."
There was a problem hiding this comment.
Pull request overview
Updates workflow concurrency groups to be SHA-scoped so each pushed commit gets its own CI run, preventing the PR HEAD commit from ending up without required checks when cancel-in-progress: true cancellations overlap with rapid pushes.
Changes:
- Update
.github/workflows/ci.ymlconcurrency group toci-${{ github.ref }}-${{ github.sha }}. - Update
.github/workflows/feature-ideation-tests.ymlconcurrency group tofeature-ideation-tests-${{ github.ref }}-${{ github.sha }}. - Update
standards/ci-standards.mdto document the SHA-scoped concurrency pattern.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| standards/ci-standards.md | Updates the documented “standard configuration patterns” example to use SHA-scoped concurrency. |
| .github/workflows/feature-ideation-tests.yml | Ensures feature-ideation test workflow runs are isolated per commit SHA. |
| .github/workflows/ci.yml | Ensures the main CI workflow runs are isolated per commit SHA. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
@claude - Ensure this is defined as a standard and compliance is enforced. Review and address the open comments, marking them as Resolved. |
|
Claude finished @don-petry's task in 3m 21s —— View job Changes pushed
What was done
Addressing the Gemini review comment:
Review thread resolution: The # Get the thread ID
gh api graphql -F query='{ repository(owner:"petry-projects",name:".github") { pullRequest(number:247) { reviewThreads(first:5) { nodes { id isResolved } } } } }'
# Then resolve it
gh api graphql -F query='mutation { resolveReviewThread(input: {threadId: "PRRT_..."}) { thread { id isResolved } } }'| Branch |
… via compliance audit - Add explanatory block to standards/ci-standards.md clarifying why github.sha is required in the concurrency group and why cancel-in-progress: true is intentionally kept despite being a no-op with SHA-scoped groups (addresses Gemini review comment) - Add check_ci_concurrency() to compliance-audit.sh: flags any repo whose ci.yml has a concurrency block without github.sha, with a remediation hint pointing to the standard Co-authored-by: Don Petry <don-petry@users.noreply.github.com>
echo "$tree" | grep -q exits early on first match (grep -q), closing the read end of the pipe before echo finishes writing when $tree is large. This causes SIGPIPE / "write error: Broken pipe". Replace all 8 occurrences with grep -qE ... <<< "$tree" which feeds the string directly to grep's stdin without a subprocess pipe. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Auto-rebase failed — merge conflict — this branch has conflicts with Please resolve the conflicts and push: |
|
@claude - Fix branch conflicts with main and ensure CI is passing. |
|
Claude finished @don-petry's task in 8m 56s —— View job Branch conflicts resolved
What was doneThe branch was 1 commit behind Files synced from main (incorporated into this branch):
Remaining differences from
CI should now run on the updated branch. |
Manually applies changes from main commit d3d768d ("fix: rename @petry-review-bot mention trigger to @donpetry-bot") that weren't reachable via git merge due to a shallow clone with no merge base. Changes incorporated from main: - standards/ci-standards.md: rename @petry-review-bot → @donpetry-bot (×2) - standards/github-settings.md: update compliance date to 2026-05-08 - scripts/org_status.sh: refactor PR/issue/merge accumulation to NDJSON to avoid ARG_MAX at high data volumes - .github/workflows/pr-review-mention-reusable.yml: rename mention trigger + add job-level author_association gate for comment events - .github/workflows/compliance-audit-and-improvement.yml: rename workflow from "Weekly Compliance & Health Audit" to "Org Standards Compliance Audit" Our branch's SHA-scoped concurrency changes (ci.yml, feature-ideation-tests.yml, compliance-audit.sh, ci-standards.md) are preserved as-is. Co-authored-by: Don Petry <don-petry@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
|
…from missing CI runs (#247) * fix(ci): change concurrency group to per-SHA to prevent HEAD commits from missing CI runs Adds `${{ github.sha }}` to the concurrency group keys in ci.yml and feature-ideation-tests.yml, so each commit gets its own concurrency slot. cancel-in-progress: true becomes a no-op in practice (two runs never share a SHA) while still bounding queue depth to one run per commit. Also updates the documented pattern in standards/ci-standards.md so newly adopted ci.yml files in downstream repos pick up the correct pattern. Closes #246 Co-authored-by: Don Petry <don-petry@users.noreply.github.com> * docs(ci-standards): explain SHA-scoped concurrency rationale; enforce via compliance audit - Add explanatory block to standards/ci-standards.md clarifying why github.sha is required in the concurrency group and why cancel-in-progress: true is intentionally kept despite being a no-op with SHA-scoped groups (addresses Gemini review comment) - Add check_ci_concurrency() to compliance-audit.sh: flags any repo whose ci.yml has a concurrency block without github.sha, with a remediation hint pointing to the standard Co-authored-by: Don Petry <don-petry@users.noreply.github.com> * fix: replace echo|grep -q pipes with here-strings in detect_ecosystems echo "$tree" | grep -q exits early on first match (grep -q), closing the read end of the pipe before echo finishes writing when $tree is large. This causes SIGPIPE / "write error: Broken pipe". Replace all 8 occurrences with grep -qE ... <<< "$tree" which feeds the string directly to grep's stdin without a subprocess pipe. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: sync branch with main — incorporate d3d768d changes Manually applies changes from main commit d3d768d ("fix: rename @petry-review-bot mention trigger to @donpetry-bot") that weren't reachable via git merge due to a shallow clone with no merge base. Changes incorporated from main: - standards/ci-standards.md: rename @petry-review-bot → @donpetry-bot (×2) - standards/github-settings.md: update compliance date to 2026-05-08 - scripts/org_status.sh: refactor PR/issue/merge accumulation to NDJSON to avoid ARG_MAX at high data volumes - .github/workflows/pr-review-mention-reusable.yml: rename mention trigger + add job-level author_association gate for comment events - .github/workflows/compliance-audit-and-improvement.yml: rename workflow from "Weekly Compliance & Health Audit" to "Org Standards Compliance Audit" Our branch's SHA-scoped concurrency changes (ci.yml, feature-ideation-tests.yml, compliance-audit.sh, ci-standards.md) are preserved as-is. Co-authored-by: Don Petry <don-petry@users.noreply.github.com> --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Don Petry <don-petry@users.noreply.github.com> Co-authored-by: GitHub Copilot <copilot@github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…from missing CI runs (#247) * fix(ci): change concurrency group to per-SHA to prevent HEAD commits from missing CI runs Adds `${{ github.sha }}` to the concurrency group keys in ci.yml and feature-ideation-tests.yml, so each commit gets its own concurrency slot. cancel-in-progress: true becomes a no-op in practice (two runs never share a SHA) while still bounding queue depth to one run per commit. Also updates the documented pattern in standards/ci-standards.md so newly adopted ci.yml files in downstream repos pick up the correct pattern. Closes #246 Co-authored-by: Don Petry <don-petry@users.noreply.github.com> * docs(ci-standards): explain SHA-scoped concurrency rationale; enforce via compliance audit - Add explanatory block to standards/ci-standards.md clarifying why github.sha is required in the concurrency group and why cancel-in-progress: true is intentionally kept despite being a no-op with SHA-scoped groups (addresses Gemini review comment) - Add check_ci_concurrency() to compliance-audit.sh: flags any repo whose ci.yml has a concurrency block without github.sha, with a remediation hint pointing to the standard Co-authored-by: Don Petry <don-petry@users.noreply.github.com> * fix: replace echo|grep -q pipes with here-strings in detect_ecosystems echo "$tree" | grep -q exits early on first match (grep -q), closing the read end of the pipe before echo finishes writing when $tree is large. This causes SIGPIPE / "write error: Broken pipe". Replace all 8 occurrences with grep -qE ... <<< "$tree" which feeds the string directly to grep's stdin without a subprocess pipe. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: sync branch with main — incorporate d3d768d changes Manually applies changes from main commit d3d768d ("fix: rename @petry-review-bot mention trigger to @donpetry-bot") that weren't reachable via git merge due to a shallow clone with no merge base. Changes incorporated from main: - standards/ci-standards.md: rename @petry-review-bot → @donpetry-bot (×2) - standards/github-settings.md: update compliance date to 2026-05-08 - scripts/org_status.sh: refactor PR/issue/merge accumulation to NDJSON to avoid ARG_MAX at high data volumes - .github/workflows/pr-review-mention-reusable.yml: rename mention trigger + add job-level author_association gate for comment events - .github/workflows/compliance-audit-and-improvement.yml: rename workflow from "Weekly Compliance & Health Audit" to "Org Standards Compliance Audit" Our branch's SHA-scoped concurrency changes (ci.yml, feature-ideation-tests.yml, compliance-audit.sh, ci-standards.md) are preserved as-is. Co-authored-by: Don Petry <don-petry@users.noreply.github.com> --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Don Petry <don-petry@users.noreply.github.com> Co-authored-by: GitHub Copilot <copilot@github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…from missing CI runs (#247) * fix(ci): change concurrency group to per-SHA to prevent HEAD commits from missing CI runs Adds `${{ github.sha }}` to the concurrency group keys in ci.yml and feature-ideation-tests.yml, so each commit gets its own concurrency slot. cancel-in-progress: true becomes a no-op in practice (two runs never share a SHA) while still bounding queue depth to one run per commit. Also updates the documented pattern in standards/ci-standards.md so newly adopted ci.yml files in downstream repos pick up the correct pattern. Closes #246 Co-authored-by: Don Petry <don-petry@users.noreply.github.com> * docs(ci-standards): explain SHA-scoped concurrency rationale; enforce via compliance audit - Add explanatory block to standards/ci-standards.md clarifying why github.sha is required in the concurrency group and why cancel-in-progress: true is intentionally kept despite being a no-op with SHA-scoped groups (addresses Gemini review comment) - Add check_ci_concurrency() to compliance-audit.sh: flags any repo whose ci.yml has a concurrency block without github.sha, with a remediation hint pointing to the standard Co-authored-by: Don Petry <don-petry@users.noreply.github.com> * fix: replace echo|grep -q pipes with here-strings in detect_ecosystems echo "$tree" | grep -q exits early on first match (grep -q), closing the read end of the pipe before echo finishes writing when $tree is large. This causes SIGPIPE / "write error: Broken pipe". Replace all 8 occurrences with grep -qE ... <<< "$tree" which feeds the string directly to grep's stdin without a subprocess pipe. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: sync branch with main — incorporate d3d768d changes Manually applies changes from main commit d3d768d ("fix: rename @petry-review-bot mention trigger to @donpetry-bot") that weren't reachable via git merge due to a shallow clone with no merge base. Changes incorporated from main: - standards/ci-standards.md: rename @petry-review-bot → @donpetry-bot (×2) - standards/github-settings.md: update compliance date to 2026-05-08 - scripts/org_status.sh: refactor PR/issue/merge accumulation to NDJSON to avoid ARG_MAX at high data volumes - .github/workflows/pr-review-mention-reusable.yml: rename mention trigger + add job-level author_association gate for comment events - .github/workflows/compliance-audit-and-improvement.yml: rename workflow from "Weekly Compliance & Health Audit" to "Org Standards Compliance Audit" Our branch's SHA-scoped concurrency changes (ci.yml, feature-ideation-tests.yml, compliance-audit.sh, ci-standards.md) are preserved as-is. Co-authored-by: Don Petry <don-petry@users.noreply.github.com> --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Don Petry <don-petry@users.noreply.github.com> Co-authored-by: GitHub Copilot <copilot@github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…from missing CI runs (#247) * fix(ci): change concurrency group to per-SHA to prevent HEAD commits from missing CI runs Adds `${{ github.sha }}` to the concurrency group keys in ci.yml and feature-ideation-tests.yml, so each commit gets its own concurrency slot. cancel-in-progress: true becomes a no-op in practice (two runs never share a SHA) while still bounding queue depth to one run per commit. Also updates the documented pattern in standards/ci-standards.md so newly adopted ci.yml files in downstream repos pick up the correct pattern. Closes #246 Co-authored-by: Don Petry <don-petry@users.noreply.github.com> * docs(ci-standards): explain SHA-scoped concurrency rationale; enforce via compliance audit - Add explanatory block to standards/ci-standards.md clarifying why github.sha is required in the concurrency group and why cancel-in-progress: true is intentionally kept despite being a no-op with SHA-scoped groups (addresses Gemini review comment) - Add check_ci_concurrency() to compliance-audit.sh: flags any repo whose ci.yml has a concurrency block without github.sha, with a remediation hint pointing to the standard Co-authored-by: Don Petry <don-petry@users.noreply.github.com> * fix: replace echo|grep -q pipes with here-strings in detect_ecosystems echo "$tree" | grep -q exits early on first match (grep -q), closing the read end of the pipe before echo finishes writing when $tree is large. This causes SIGPIPE / "write error: Broken pipe". Replace all 8 occurrences with grep -qE ... <<< "$tree" which feeds the string directly to grep's stdin without a subprocess pipe. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: sync branch with main — incorporate d3d768d changes Manually applies changes from main commit d3d768d ("fix: rename @petry-review-bot mention trigger to @donpetry-bot") that weren't reachable via git merge due to a shallow clone with no merge base. Changes incorporated from main: - standards/ci-standards.md: rename @petry-review-bot → @donpetry-bot (×2) - standards/github-settings.md: update compliance date to 2026-05-08 - scripts/org_status.sh: refactor PR/issue/merge accumulation to NDJSON to avoid ARG_MAX at high data volumes - .github/workflows/pr-review-mention-reusable.yml: rename mention trigger + add job-level author_association gate for comment events - .github/workflows/compliance-audit-and-improvement.yml: rename workflow from "Weekly Compliance & Health Audit" to "Org Standards Compliance Audit" Our branch's SHA-scoped concurrency changes (ci.yml, feature-ideation-tests.yml, compliance-audit.sh, ci-standards.md) are preserved as-is. Co-authored-by: Don Petry <don-petry@users.noreply.github.com> --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Don Petry <don-petry@users.noreply.github.com> Co-authored-by: GitHub Copilot <copilot@github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…from missing CI runs (#247) * fix(ci): change concurrency group to per-SHA to prevent HEAD commits from missing CI runs Adds `${{ github.sha }}` to the concurrency group keys in ci.yml and feature-ideation-tests.yml, so each commit gets its own concurrency slot. cancel-in-progress: true becomes a no-op in practice (two runs never share a SHA) while still bounding queue depth to one run per commit. Also updates the documented pattern in standards/ci-standards.md so newly adopted ci.yml files in downstream repos pick up the correct pattern. Closes #246 Co-authored-by: Don Petry <don-petry@users.noreply.github.com> * docs(ci-standards): explain SHA-scoped concurrency rationale; enforce via compliance audit - Add explanatory block to standards/ci-standards.md clarifying why github.sha is required in the concurrency group and why cancel-in-progress: true is intentionally kept despite being a no-op with SHA-scoped groups (addresses Gemini review comment) - Add check_ci_concurrency() to compliance-audit.sh: flags any repo whose ci.yml has a concurrency block without github.sha, with a remediation hint pointing to the standard Co-authored-by: Don Petry <don-petry@users.noreply.github.com> * fix: replace echo|grep -q pipes with here-strings in detect_ecosystems echo "$tree" | grep -q exits early on first match (grep -q), closing the read end of the pipe before echo finishes writing when $tree is large. This causes SIGPIPE / "write error: Broken pipe". Replace all 8 occurrences with grep -qE ... <<< "$tree" which feeds the string directly to grep's stdin without a subprocess pipe. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: sync branch with main — incorporate d3d768d changes Manually applies changes from main commit d3d768d ("fix: rename @petry-review-bot mention trigger to @donpetry-bot") that weren't reachable via git merge due to a shallow clone with no merge base. Changes incorporated from main: - standards/ci-standards.md: rename @petry-review-bot → @donpetry-bot (×2) - standards/github-settings.md: update compliance date to 2026-05-08 - scripts/org_status.sh: refactor PR/issue/merge accumulation to NDJSON to avoid ARG_MAX at high data volumes - .github/workflows/pr-review-mention-reusable.yml: rename mention trigger + add job-level author_association gate for comment events - .github/workflows/compliance-audit-and-improvement.yml: rename workflow from "Weekly Compliance & Health Audit" to "Org Standards Compliance Audit" Our branch's SHA-scoped concurrency changes (ci.yml, feature-ideation-tests.yml, compliance-audit.sh, ci-standards.md) are preserved as-is. Co-authored-by: Don Petry <don-petry@users.noreply.github.com> --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Don Petry <don-petry@users.noreply.github.com> Co-authored-by: GitHub Copilot <copilot@github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
…from missing CI runs (#247) * fix(ci): change concurrency group to per-SHA to prevent HEAD commits from missing CI runs Adds `${{ github.sha }}` to the concurrency group keys in ci.yml and feature-ideation-tests.yml, so each commit gets its own concurrency slot. cancel-in-progress: true becomes a no-op in practice (two runs never share a SHA) while still bounding queue depth to one run per commit. Also updates the documented pattern in standards/ci-standards.md so newly adopted ci.yml files in downstream repos pick up the correct pattern. Closes #246 Co-authored-by: Don Petry <don-petry@users.noreply.github.com> * docs(ci-standards): explain SHA-scoped concurrency rationale; enforce via compliance audit - Add explanatory block to standards/ci-standards.md clarifying why github.sha is required in the concurrency group and why cancel-in-progress: true is intentionally kept despite being a no-op with SHA-scoped groups (addresses Gemini review comment) - Add check_ci_concurrency() to compliance-audit.sh: flags any repo whose ci.yml has a concurrency block without github.sha, with a remediation hint pointing to the standard Co-authored-by: Don Petry <don-petry@users.noreply.github.com> * fix: replace echo|grep -q pipes with here-strings in detect_ecosystems echo "$tree" | grep -q exits early on first match (grep -q), closing the read end of the pipe before echo finishes writing when $tree is large. This causes SIGPIPE / "write error: Broken pipe". Replace all 8 occurrences with grep -qE ... <<< "$tree" which feeds the string directly to grep's stdin without a subprocess pipe. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: sync branch with main — incorporate d3d768d changes Manually applies changes from main commit d3d768d ("fix: rename @petry-review-bot mention trigger to @donpetry-bot") that weren't reachable via git merge due to a shallow clone with no merge base. Changes incorporated from main: - standards/ci-standards.md: rename @petry-review-bot → @donpetry-bot (×2) - standards/github-settings.md: update compliance date to 2026-05-08 - scripts/org_status.sh: refactor PR/issue/merge accumulation to NDJSON to avoid ARG_MAX at high data volumes - .github/workflows/pr-review-mention-reusable.yml: rename mention trigger + add job-level author_association gate for comment events - .github/workflows/compliance-audit-and-improvement.yml: rename workflow from "Weekly Compliance & Health Audit" to "Org Standards Compliance Audit" Our branch's SHA-scoped concurrency changes (ci.yml, feature-ideation-tests.yml, compliance-audit.sh, ci-standards.md) are preserved as-is. Co-authored-by: Don Petry <don-petry@users.noreply.github.com> --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Don Petry <don-petry@users.noreply.github.com> Co-authored-by: GitHub Copilot <copilot@github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>



Summary
.github/workflows/ci.ymlconcurrency group fromci-${{ github.ref }}toci-${{ github.ref }}-${{ github.sha }}.github/workflows/feature-ideation-tests.ymlconcurrency group fromfeature-ideation-tests-${{ github.ref }}tofeature-ideation-tests-${{ github.ref }}-${{ github.sha }}standards/ci-standards.mdto document the corrected pattern so downstream repos adopt it correctlycheck_ci_concurrencytoscripts/compliance-audit.shto enforce the standard automatically — flags any repo whoseci.ymlhas a concurrency block withoutgithub.shaRoot cause fixed: When
cancel-in-progress: trueis paired with a per-ref concurrency group, each new push cancels the previous run. If the final push arrives while the previous cancellation is still in flight, GitHub may not fire a newpull_request: synchronizeevent, leaving the HEAD commit with no CI results — blocking the PR indefinitely.Why SHA-scoped concurrency solves it: Each commit gets its own concurrency slot, so CI always runs to completion for every HEAD commit.
cancel-in-progress: truebecomes a no-op in practice (no two pushes share the same SHA), which is the desired behaviour. Concurrent runs are still bounded: one run per commit, not unbounded.Scope: Only
ci-<ref>-style groups withcancel-in-progress: trueare changed. Intentional per-PR/per-issue groups inclaude-code-reusable.yml(claude-review-comments-*,claude-ci-fix-*,claude-issue-*) and single-instance workflow groups (auto-rebase,dependabot-update-and-merge,feature-ideation,compliance-audit) are unchanged.Test plan
Closes #246
Generated with Claude Code