Skip to content

fix(ci): restore PR-scoped concurrency for strix.yml on owner directive - #1779

Merged
seonghobae merged 1 commit into
mainfrom
fix/strix-pr-scoped-concurrency
Sep 3, 2026
Merged

fix(ci): restore PR-scoped concurrency for strix.yml on owner directive#1779
seonghobae merged 1 commit into
mainfrom
fix/strix-pr-scoped-concurrency

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Summary

strix.yml's concurrency group was deliberately repository-wide (not PR-scoped) from 2026-08-24 through today, following a real litellm.RateLimitError storm against the shared NVIDIA NIM key on 2026-08-23/24 (.github#1297) when the group was PR-scoped. That fixed the storm but starved cross-PR Strix evidence within the same repository instead — a different PR's scan always queued behind whichever scan was already running there.

The owner gave a direct, explicit instruction today that every central workflow's concurrency group should use a "workflow name - repository name - PR number" pattern — already true everywhere except this file (see the earlier org-wide concurrency audit on .github#1768). When told strix.yml was the one deliberate exception, with the 2026-08 incident explained, the owner explicitly said the historical concern doesn't change the instruction, and separately confirmed the two NVIDIA NIM credentials (NVIDIA_NIM_API_KEY, NVIDIA_NIM_API_KEY_SUB) have independent rate limits rather than a shared pool — giving materially more headroom than the single-key incident had.

Changes

  • Added the PR number (or client_payload.pr_number, matching the existing repository_dispatch fallback pattern) to the concurrency group key.
  • cancel-in-progress stays false: a same-PR push still queues behind an in-flight scan for that PR rather than cancelling it, preserving that head's scan log — the separate trusted cancel-superseded-pr-runs cleanup job already retires a genuinely superseded head independently of this native concurrency block.
  • Updated the two contract tests in tests/test_required_workflow_queue_contract.py that pinned the old repository-only scoping, preserving the historical rationale in the docstring/comment for future readers.

Test plan

  • PYTHONPATH=. python3 -m pytest tests/test_required_workflow_queue_contract.py -q — 73 passed
  • PYTHONPATH=. python3 -m pytest tests -q (full suite) — 2680 passed, 1 skipped, 21 subtests passed, zero regressions
  • python3 -c "import yaml; yaml.safe_load(...)" on the edited workflow — YAML OK

🤖 Generated with Claude Code


Devin Review

strix.yml's concurrency group was deliberately repository-wide (not
PR-scoped), from 2026-08-24 through today, following a real
litellm.RateLimitError storm against the shared NVIDIA NIM key on
2026-08-23/24 (.github#1297) when the group was PR-scoped. This meant
one PR's Strix scan queued behind whichever OTHER PR in the same repo
happened to be scanning already -- a real, previously-documented
cross-PR starvation cause (see queue-congestion investigation).

The user gave a direct, explicit, repeated instruction today that
every central workflow's concurrency group should use a
"workflow name - repository name - PR number" pattern -- already true
everywhere except this file. When told strix.yml was the one deliberate
exception (with the 2026-08 incident explained), the user explicitly
said the historical concern doesn't change their instruction, and
separately confirmed the two NVIDIA NIM credentials
(NVIDIA_NIM_API_KEY, NVIDIA_NIM_API_KEY_SUB) have independent rate
limits rather than a shared pool -- giving materially more headroom
than the single-key 2026-08-23/24 incident had.

Added the PR number (or client_payload.pr_number, matching the
existing repository_dispatch fallback pattern) to the concurrency
group key. cancel-in-progress stays false: a same-PR push still queues
behind an in-flight scan for that PR rather than cancelling it,
preserving that head's scan log -- the separate trusted
cancel-superseded-pr-runs cleanup job already retires a genuinely
superseded head independently of this native concurrency block.

Updated tests/test_required_workflow_queue_contract.py's two contract
tests that pinned the old repository-only scoping to assert the new
repository+PR scoping instead, preserving the historical rationale in
the docstring/comment for future readers.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 3, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 47 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: f677444b-6b30-44fe-bc2b-d921d5e4cf8b

📥 Commits

Reviewing files that changed from the base of the PR and between cbd1280 and ced67d4.

📒 Files selected for processing (2)
  • .github/workflows/strix.yml
  • tests/test_required_workflow_queue_contract.py

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.

@seonghobae
seonghobae merged commit 64e67ef into main Sep 3, 2026
6 of 20 checks passed
@seonghobae
seonghobae deleted the fix/strix-pr-scoped-concurrency branch September 3, 2026 05:40

@devin-ai-integration devin-ai-integration 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.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Devin Review

seonghobae added a commit that referenced this pull request Sep 3, 2026
Supersedes 31e46db. That fix added the head SHA to the concurrency
group to stop a delayed old-head event from cancelling a valid
newer-head run (#1568-class hazard) -- correct, but costly: a
SHA-scoped group gives every push its own group, so under this org's
saturated Actions ceiling a stale per-push run is only retired by a
separate cleanup job that shares that same congested admission queue
and can itself sit stuck behind it, letting superseded runs pile up.

The user pointed at the actual fix directly: the hazard is caused by
cancel-in-progress:true killing whichever run is active with no
older/newer notion, not by the group lacking SHA. Setting
cancel-in-progress:false closes it completely regardless of group
scoping -- the active run is never preempted -- while GitHub's
unconditional single-pending-slot rule still evicts an intermediate
queued push for free. The pre-existing "Reject a stale trigger" step
already guarantees whichever instance runs never reports against the
wrong commit either way.

Independently corroborated same-day: strix.yml's own concurrency fix
(64e67ef, #1779) already used this exact shape; a peer session applied
the identical pattern to opencode-review.yml after re-deriving the
same reasoning independently.

Full suite (2704 tests) passes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
seonghobae added a commit that referenced this pull request Sep 3, 2026
No conflicts; auto-merged main's strix.yml PR-scoped-concurrency fix
(#1779, 64e67ef) alongside this branch's noema-review.yml redesign
(f9d4373) -- both land on the same cancel-in-progress:false shape for
the same reason, independently derived. Full suite (2704 tests) passes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
seonghobae added a commit that referenced this pull request Sep 3, 2026
 (#1788)

PR #1779 changed strix.yml's concurrency group.format() expression from
the 2-argument form to the 3-argument form format('{0}-{1}-{2}', ...) to
restore PR-scoped concurrency (fixing a queue-saturation chicken-egg
problem) while keeping repository+event-class isolation. The bash
contract test scripts/ci/test_strix_quick_gate.sh was never updated to
match, so two assertions in assert_strix_workflow_pr_trigger_hardened()
kept checking for the old 2-argument format('{0}-{1}', ...) literal and
now fail on every PR regardless of that PR's own diff.

The parallel Python contract in
tests/test_required_workflow_queue_contract.py was already correctly
updated for the 3-argument form at the time of PR #1779 -- only the bash
side drifted, the same class of bug PR #1750 fixes for a stale cron
assertion in this same file.

Updated both stale assertions to the current 3-argument
format('{0}-{1}-{2}', ...) literal, preserving their semantic intent and
messages unchanged.


Claude-Session: https://claude.ai/code/session_01BV96rXhqoR3tYZ9AeAVur4

Co-authored-by: Claude <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.

1 participant