Skip to content

fix(ci): change concurrency group to per-SHA to prevent HEAD commits from missing CI runs - #247

Merged
don-petry merged 6 commits into
mainfrom
claude/issue-246-20260512-0059
May 13, 2026
Merged

don-petry merged 6 commits into
mainfrom
claude/issue-246-20260512-0059

Conversation

@don-petry

@don-petry don-petry commented May 12, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Changes .github/workflows/ci.yml concurrency group from ci-${{ github.ref }} to ci-${{ github.ref }}-${{ github.sha }}
  • Changes .github/workflows/feature-ideation-tests.yml concurrency group from feature-ideation-tests-${{ github.ref }} to feature-ideation-tests-${{ github.ref }}-${{ github.sha }}
  • Updates standards/ci-standards.md to document the corrected pattern so downstream repos adopt it correctly
  • Adds check_ci_concurrency to scripts/compliance-audit.sh to enforce the standard automatically — flags any repo whose ci.yml has a concurrency block without github.sha

Root cause fixed: When cancel-in-progress: true is 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 new pull_request: synchronize event, 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: true becomes 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 with cancel-in-progress: true are changed. Intentional per-PR/per-issue groups in claude-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

  • CI runs on this PR (confirms the fix doesn't break the workflow itself)
  • Verify both workflow files show the SHA-scoped group in the Actions run summary

Closes #246

Generated with Claude Code

…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>
Copilot AI review requested due to automatic review settings May 12, 2026 01:02
@don-petry
don-petry requested a review from a team as a code owner May 12, 2026 01:02
@coderabbitai

coderabbitai Bot commented May 12, 2026 •

Copy link
Copy Markdown

Warning

Rate limit exceeded

@don-petry has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 34 minutes and 33 seconds before requesting another review.

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 @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: d7679021-c607-4c04-a95d-b6db485b3840

📥 Commits

Reviewing files that changed from the base of the PR and between d3d768d and eede335.

📒 Files selected for processing (4)
  • .github/workflows/ci.yml
  • .github/workflows/feature-ideation-tests.yml
  • scripts/compliance-audit.sh
  • standards/ci-standards.md
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/issue-246-20260512-0059

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread standards/ci-standards.md

concurrency:
group: ci-${{ github.ref }}
group: ci-${{ github.ref }}-${{ github.sha }}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Including ${{ github.sha }} makes the concurrency group unique per commit, rendering cancel-in-progress: true redundant. Additionally, the PR description mentions changes to .github/workflows/ci.yml and .github/workflows/feature-ideation-tests.yml which are missing from this patch.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both points are addressed in the current branch:

  1. Workflow files: .github/workflows/ci.yml and .github/workflows/feature-ideation-tests.yml are changed in this PR (SHA-scoped concurrency group added to both). The diff is visible in the Files tab.

  2. cancel-in-progress: true redundancy: 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."

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.yml concurrency group to ci-${{ github.ref }}-${{ github.sha }}.
  • Update .github/workflows/feature-ideation-tests.yml concurrency group to feature-ideation-tests-${{ github.ref }}-${{ github.sha }}.
  • Update standards/ci-standards.md to 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.

@don-petry

Copy link
Copy Markdown
Contributor Author

@claude - Ensure this is defined as a standard and compliance is enforced. Review and address the open comments, marking them as Resolved.

@claude

claude Bot commented May 12, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @don-petry's task in 3m 21s —— View job


Changes pushed

  • Read AGENTS.md, CLAUDE.md, and changed files
  • Review open comments and determine changes needed
  • Add clarifying note to standards/ci-standards.md (addressing Gemini redundancy concern)
  • Add check_ci_concurrency to scripts/compliance-audit.sh to enforce the standard
  • Commit and push changes
  • Resolve open review threads (see note below)

What was done

standards/ci-standards.md — added an explanatory block directly after the standard configuration pattern, answering both questions the Gemini reviewer raised:

  • Why SHA-scoped? Per-ref groups with cancel-in-progress: true have a race condition where rapid pushes can leave the HEAD commit with no CI results, blocking the PR indefinitely. SHA-scoping gives every commit its own slot.
  • Why keep cancel-in-progress: true? Technically a no-op with SHA-scoped groups (no two pushes share a slot), but kept explicitly so the intent is declared — if someone reverts the group formula, the cancellation behaviour activates without a separate edit.

scripts/compliance-audit.sh — added check_ci_concurrency() and wired it into the main per-repo loop. The check:

  • Reads each repo's ci.yml via the GitHub API
  • If a concurrency: block is present but the group: value doesn't contain github.sha, it files a warning-severity finding (ci-concurrency-missing-sha) with a remediation hint pointing to the standard
  • Repos without ci.yml are skipped (already caught by check_required_workflows)

Addressing the Gemini review comment:

  1. ✅ cancel-in-progress: true redundancy — explained and documented in the standard
  2. ✅ "Workflow files missing from patch" — this was a false positive from the reviewer; both .github/workflows/ci.yml and .github/workflows/feature-ideation-tests.yml were present in the changeset (confirmed via changed_files)

Review thread resolution: The resolveReviewThread GraphQL mutation was blocked by permissions in this environment. To resolve the Gemini thread manually:

# 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>
@don-petry
don-petry enabled auto-merge (squash) May 12, 2026 01:42
GitHub Copilot and others added 2 commits May 11, 2026 21:49
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>
@github-actions

Copy link
Copy Markdown
Contributor

Auto-rebase failed — merge conflict — this branch has conflicts with main that must be resolved manually.

Please resolve the conflicts and push:

git fetch origin
git merge origin/main
# resolve conflicts, then:
git add .
git commit
git push

@don-petry

Copy link
Copy Markdown
Contributor Author

@claude - Fix branch conflicts with main and ensure CI is passing.

@claude

claude Bot commented May 13, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @don-petry's task in 8m 56s —— View job


Branch conflicts resolved

  • Gather context and understand request
  • Check current git status and identify conflicts
  • Apply missing change from main (@petry-review-bot → @donpetry-bot rename in ci-standards.md)
  • Sync all other files changed by main's commit d3d768d
  • Commit and push
  • Verify only intentional PR changes remain

What was done

The branch was 1 commit behind origin/main (commit d3d768d: "fix: rename @petry-review-bot mention trigger to @donpetry-bot"). A shallow clone with no merge base prevented git merge, so the changes were applied manually.

Files synced from main (incorporated into this branch):

File Change
standards/ci-standards.md @petry-review-bot → @donpetry-bot (×2)
standards/github-settings.md Compliance date updated to 2026-05-08
scripts/org_status.sh Refactored PR/issue/merge accumulation to NDJSON to avoid ARG_MAX
.github/workflows/pr-review-mention-reusable.yml Mention trigger rename + job-level author_association gate
.github/workflows/compliance-audit-and-improvement.yml Workflow renamed "Weekly Compliance & Health Audit" → "Org Standards Compliance Audit"

Remaining differences from origin/main (intentional — this PR's own changes):

  • .github/workflows/ci.yml — SHA-scoped concurrency group
  • .github/workflows/feature-ideation-tests.yml — SHA-scoped concurrency group
  • scripts/compliance-audit.sh — check_ci_concurrency function added
  • standards/ci-standards.md — SHA-scoped concurrency documentation

CI should now run on the updated branch.
| Branch

github-actions Bot and others added 2 commits May 13, 2026 12:50
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>
@sonarqubecloud

Copy link
Copy Markdown

@don-petry
don-petry disabled auto-merge May 13, 2026 13:21
@don-petry
don-petry merged commit 803cc69 into main May 13, 2026
25 checks passed
@don-petry
don-petry deleted the claude/issue-246-20260512-0059 branch May 13, 2026 13:21
don-petry added a commit that referenced this pull request Jun 8, 2026
…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>
don-petry added a commit that referenced this pull request Jun 10, 2026
…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>
don-petry added a commit that referenced this pull request Jun 11, 2026
…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>
don-petry added a commit that referenced this pull request Jun 11, 2026
…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>
don-petry added a commit that referenced this pull request Jun 11, 2026
…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>
don-petry added a commit that referenced this pull request Aug 7, 2026
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(ci): change concurrency group to per-SHA to prevent HEAD commits from missing CI runs

2 participants