Skip to content

ci(OMN-13949): concurrency cancel-in-progress + job timeouts to kill superseded/zombie runs (SAT1) - #2209

Merged
jonahgabriel merged 3 commits into
devfrom
jonah/omn-13949-concurrency-cancel-in-progress
Jul 5, 2026
Merged

jonahgabriel merged 3 commits into
devfrom
jonah/omn-13949-concurrency-cancel-in-progress

Conversation

@jonahgabriel

@jonahgabriel jonahgabriel commented Jul 5, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Track 1 fleet-load reduction (OMN-13932 §5.2 / SAT1). Superseded and zombie CI runs were occupying saturated self-hosted runners that could otherwise serve fresh work. This makes killing superseded runs the default and caps hung jobs.

Ticket: OMN-13949 (parent epic OMN-13932). Plan: docs/plans/2026-07-05-runner-fleet-permanent-fix-plan.md §5.2.

Changes

  • Concurrency (cancel superseded PR runs): added top-level concurrency: { group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}, cancel-in-progress: true } to 24 PR-triggered check/test/gate workflows, and normalized 5 that previously kept superseded PR runs alive (ci.yml, compose-config-lint, env-parity, lane-census-staleness, runner-disk-preflight) from cancel:false / merge_group-only to cancel-in-progress: true.
  • merge-queue safety: the group keys on PR number falling back to github.ref; on merge_group each queue entry carries a unique github.ref, so distinct entries never cross-cancel and required contexts still report. No required merge_group context is wedged.
  • Deploy/release/prod NOT cancelled (deliberate): release.yml, release-python-reusable.yml, build-and-push-runtime.yml, build-and-push-migrate-image.yml keep serialized cancel-in-progress: false; auto-tag-on-merge, runtime-rebuild-trigger, prod-promotion-lineage received no concurrency block — never cancel an in-flight prod build/tag/deploy.
  • Job timeouts: added a safety-net timeout-minutes to every job that lacked one (37 jobs across 21 workflows; reusable uses: jobs skipped, which cannot carry the key) so a hung job cannot hold a runner indefinitely. Heavy self-hosted jobs (docker-build, ci test-parallel) already had explicit timeouts and were left as-is.

dod_evidence

  • tests/ci/test_ci_workflow_resilience.py + tests/ci/test_runner_disk_preflight.py: 51 passed on the dev base.
  • actionlint .github/workflows/*.yml: no new structural findings (only pre-existing shellcheck-style and cross_repo_pat secret-name notes).
  • pre-commit run on all changed files: clean (including onex-check-node-migration-sync).
  • All 60 workflow YAMLs parse; safety audit confirms no deploy/release/prod/tag workflow received cancel-in-progress: true.

Summary by CodeRabbit

  • Improvements
    • Updated many automated checks to cancel outdated runs when newer changes arrive, reducing queue buildup and speeding up feedback.
    • Added 30-minute time limits to several longer-running jobs, helping prevent stuck or excessively long executions.
    • Standardized workflow behavior across validation, testing, release, and maintenance pipelines for more predictable run management.

Evidence-Source: OCC#3612
Evidence-Ticket: OMN-13949

…superseded/zombie runs (SAT1)

Fleet-load reduction (Track 1, OMN-13932 §5.2). Superseded CI runs were
holding saturated self-hosted runners.

- Add top-level concurrency { group: workflow-<pr#|ref>, cancel-in-progress: true }
  to PR-triggered check/test/gate workflows (24 workflows). merge_group entries
  carry a unique github.ref so distinct queue entries never cross-cancel; the
  required contexts still report on merge_group.
- Normalize 5 workflows that kept superseded PR runs alive (ci.yml,
  compose-config-lint, env-parity, lane-census-staleness, runner-disk-preflight)
  from cancel:false / merge_group-only to cancel-in-progress: true.
- Deploy/release/prod-mutation/tag workflows deliberately NOT given
  cancel-in-progress: release.yml, release-python-reusable.yml,
  build-and-push-*, auto-tag-on-merge, runtime-rebuild-trigger,
  prod-promotion-lineage stay serialized (cancel:false) or untouched — never
  cancel an in-flight prod build/tag/deploy.
- Add safety-net timeout-minutes to every job lacking one (37 jobs across
  21 workflows; reusable 'uses:' jobs skipped) so a hung job cannot hold a
  runner indefinitely.

Verified: tests/ci/test_ci_workflow_resilience.py + test_runner_disk_preflight.py
(51 passed); actionlint clean (only pre-existing shellcheck/secret findings);
pre-commit clean on changed files.
@jonahgabriel
jonahgabriel enabled auto-merge July 5, 2026 06:53
@coderabbitai

coderabbitai Bot commented Jul 5, 2026 •

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 6 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 230564eb-a99d-482b-b577-eff1daaedda9

📥 Commits

Reviewing files that changed from the base of the PR and between 7003e6c and e89d243.

📒 Files selected for processing (2)
  • .github/workflows/docker-build.yml
  • tests/ci/test_ci_workflow_resilience.py
📝 Walkthrough

Walkthrough

This PR updates over 40 GitHub Actions workflow files to add or modify concurrency blocks (grouping runs by workflow name plus PR number or ref, with cancel-in-progress: true) and to add explicit timeout-minutes: 30 settings to numerous jobs across those workflows.

Changes

Workflow Concurrency and Timeout Configuration

Layer / File(s) Summary
Toggle cancel-in-progress on existing policies
.github/workflows/ci.yml, check-handshake.yml, check-sibling-compat.yml, compose-config-lint.yml, env-parity.yml, lane-census-staleness.yml, runner-disk-preflight.yml
Existing concurrency.cancel-in-progress values change from conditional (merge_group-only) or false to unconditional true.
Add new concurrency blocks
.github/workflows/call-occ-preflight.yml, call-receipt-gate.yml, call-reject-skip.yml, canonical-inference-gate.yml, dispatcher-route-coverage.yml, docs-validate.yml, fresh-deploy-fitness.yml, imperative-contract-guard.yml, integration-test-check.yml, main-target-guard.yml, node-migration-sync.yml, non-dev-base-guard.yml, omni-standards-compliance.yml, omnigate.yml, pr-title-check.yml, security-scan.yml, seed-provenance-check.yml, skill-node-mapping-sync.yml, stale-todo-gate.yml, url-authority-gate.yml, validate-validator-requirements.yml
New top-level concurrency blocks are added, grouping runs by workflow name plus PR number or ref and enabling cancel-in-progress: true.
CI pipeline job timeouts
.github/workflows/ci.yml
contract-path-preflight, contract-sync-gate, detect-changes, tests-gate, migration-conflict-check, ci-summary, migration-required-check, and ai-slop-check jobs each add timeout-minutes: 30.
Job timeouts across other workflows
.github/workflows/auto-merge.yml, cr-thread-gate.yml, dependency-cascade.yml, docker-build.yml, nightly-integration.yml, nightly-tests.yml, omni-standards-compliance.yml, plugin-pin-cascade.yml, receipt-honesty.yml, release-python-dry-run.yml, release-python-reusable.yml, release.yml, security-scan.yml, seed-provenance-check.yml, todo-audit-on-merge.yml, url-authority-gate.yml
Individual jobs across these workflows add timeout-minutes: 30 to bound execution time.

Estimated code review effort: 2 (Simple) | ~12 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main CI workflow changes: concurrency cancellation and job timeouts to stop superseded or hung runs.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jonah/omn-13949-concurrency-cancel-in-progress

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

@jonahgabriel
jonahgabriel added this pull request to the merge queue Jul 5, 2026
@jonahgabriel
jonahgabriel removed this pull request from the merge queue due to a manual request Jul 5, 2026
@jonahgabriel
jonahgabriel added this pull request to the merge queue Jul 5, 2026
@jonahgabriel
jonahgabriel removed this pull request from the merge queue due to a manual request Jul 5, 2026
@jonahgabriel
jonahgabriel added this pull request to the merge queue Jul 5, 2026
Merged via the queue into dev with commit 15ba4f3 Jul 5, 2026
80 checks passed
@jonahgabriel
jonahgabriel deleted the jonah/omn-13949-concurrency-cancel-in-progress branch July 5, 2026 08:08
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