Repository navigation
ci(rescue): a newer nightly-next tip never cancels an older nightly run - #25430
Conversation
nightly-next runs build and sign in groups of their own (#25404), so the rescue no longer cancels or skips a refused nightly-next run because the branch moved; it re-runs its failed jobs like any other refusal. The trigger also accepts the side-lane route nightly-next builds on today. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?id=aid-85ca59f74f02d81734c3
|
All contributors have signed the CLA ✍️ ✅ |
|
Owned by an agent session · session |
|
No actionable comments were generated in the recent review.
|
| Layer / File(s) | Summary |
|---|---|
Runner eligibility .github/workflows/ci-owned-pool-rescue.yml, tests/test_ci_owned_pool_rescue.py |
For nightly-next push runs, the rescue job accepts a glaeda-side- runner or the trusted pool and runner labels. The workflow-condition test checks that both alternatives remain subject to the branch and push-event conditions. |
Supersession handling scripts/ci/owned_pool_rescue.py, tests/test_ci_owned_pool_rescue.py |
pull_moved returns no movement reason for nightly-next nightly runs. Tests verify that a newer push and moved head do not prevent rerunning failed jobs, while a newer main push still prevents rerunning. |
Priority:
Estimated code review effort: 2 (Simple) | ~10 minutes
Change: Bug fix
Merge Risk: 
Minimal · up to dbb67
-
No actionable merge-blocking risk remains from the reviewed changes.
Pre-merge checks: 
23 · 
2
-
Failed checks: 2 warnings Passed checks: 23 passed-
Full details: Title check
-
Explanation
The title names the main behavior change: a newer nightly-next tip no longer cancels an older nightly run. It matches the raw summary, which says pull_moved now treats nightly-next runs as never superseded, and the objectives, which say refused runs are no longer canceled or skipped when the branch moves. The title is specific and concise, and it uses no vague terms. It does not mention the CI_SIDE_LANE_RUNNER trigger change, but that is secondary to the main change.
Full details: Cmux Cloud Persistent Session And Early Input
-
Explanation
PASS: The PR changes only the owned-pool rescue workflow, nightly-next supersession logic, and related tests. It does not change Cloud terminal creation, cmux-tui transport, manual renderer admission, PTY readiness, input ownership, or auth/lease/revision fences. The persistent-session rule therefore has no applicable failure condition.
Full details: Cmux Browser Automation Off-Main
-
Explanation
PASS: The pull request changes only the rescue workflow, Python rescue logic, and related tests. It does not change either browser-rule source file, and the diff adds no browser commands, WebKit/AppKit access, or worker-routing logic. The browser automation check is therefore not applicable.
Full details: Cmux Expensive Synchronous Load
-
Explanation
PASS: The pull request changes only a GitHub Actions workflow, Python rescue logic, and Python tests. The diff adds no Swift code or agent-history/workspace load, and it does not affect a SwiftUI or interactive main-actor path.
Full details: Cmux Cache Substitution Correctness
-
Explanation
PASS: The pull request changes only a GitHub Actions YAML file, Python rescue logic, and Python tests. It introduces no production Swift, TypeScript, or JavaScript changes, so the cache-substitution correctness condition does not apply.
Full details: Cmux No Hacky Sleeps
-
Explanation
PASS. The pull request adds no fixed sleep, timer, polling loop, delay, or wall-clock wait. The production Python rescue change adds an early return for
nightly-nextinpull_moved; it skips existing API-read retry sleeps rather than introducing or expanding delay logic. The workflow YAML change is explicitly out of scope, and the test changes use deterministic fake-clock data only.
Full details: Cmux Algorithmic Complexity
-
Explanation
The production diff adds one constant-time guard in
pull_movedand changes one GitHub Actions boolean condition. It introduces no loops, collection scans, sorting, joins, rescans, or slower algorithm. The test changes are test-only. Therefore, the algorithmic-complexity failure conditions are not met.
Full details: Cmux Swift Concurrency
-
Explanation
PASS: The reviewed diff changes only a GitHub Actions workflow, Python rescue logic, and Python tests. It contains no Swift code, so it introduces no Swift concurrency patterns covered by the modernization rules.
Full details: Cmux Swift Package Boundaries
-
Explanation
The pull request changes only a GitHub Actions workflow, Python rescue logic, and Python tests. The reviewed diff contains no Swift files or production Swift changes, so the Swift package-boundaries rule does not apply.
Full details: Cmux Swiftpm Lockfiles
-
Explanation
PASS: The PR changes only the rescue workflow condition, rescue Python logic, and its tests. The authoritative diff contains no Package.swift, Package.resolved, .gitignore, Xcode project/workspace, or SwiftPM dependency/reference changes. Therefore no lockfile or ignore-policy requirement applies.
Full details: Cmux Swift Logging
-
Explanation
The pull request changes only a GitHub Actions workflow, Python rescue logic, and Python tests. The authoritative diff contains no
.swiftfiles and adds or changes no Swift logging. The Swift logging check is therefore not applicable.
Full details: Cmux User-Facing Error Privacy
-
Explanation
PASS. The diff changes an internal GitHub Actions rescue condition, rescue decision logic, and tests. It adds no cmux product UI, CLI, or API error text, alert, command output, or recovery copy. The changed script path runs as an operator-only CI rescue job, which the rule allows. No secret, credential, personal-data, or payload disclosure was introduced.
Full details: Cmux Full Internationalization
-
Explanation
The diff changes CI workflow eligibility, rescue control flow, comments, and tests only. It adds no Swift UI text, app catalog or Info.plist entries, web UI/API copy, metadata, markdown, changelog, or locale message entries. The changed comments are developer/operational text, which the rule allows.
Full details: Cmux Architecture Rethink
-
Explanation
PASS. The pull request changes only a GitHub Actions workflow, a Python rescue script, and Python tests. The authoritative diff contains no Swift files or Swift architecture changes, so the Swift-specific failure conditions do not apply.
Full details: Cmux Swift Auxiliary Window Close Shortcuts
-
Explanation
PASS: The pull request changes only a GitHub workflow, a Python script, and Python tests. It adds or changes no Swift or standalone cmux-owned window code, so the auxiliary-window close-shortcut rule does not apply.
Full details: Cmux Source Artifacts
-
Explanation
The pull request changes only three intentional source-control paths: a GitHub Actions workflow, a hand-written rescue script, and its test file. The diff adds no logs, screenshots, recordings, temporary or cache directories, dependency checkouts, build output, package-manager downloads, or copied artifacts. The paths are covered by the rule's allowed source, config, script, and test categories.
-
Full details: Description check
-
Explanation
The description follows the template's main sections. It opens with the problem and resulting behavior, and it explains the mechanism (
#25404per-run build groups, publish-nightly order check, side-lane trigger). It gives a Changelog-relevant point only implicitly. The Testing section names the test file and a pass count, but it does not state which command ran, does not name a focused fail-on-base/pass-on-head check, and has no 'Observed / Not run' subsection, which the template asks for on bug fixes. The Proof section is missing; for CI-only changes it should say so in one line. The Changelog section is missing; for internal CI changes it should say 'none'. The checklist is not addressed.Resolution
Add the following to the description. (1) Testing: give the exact test command run (for example, the pytest invocation for tests/test_ci_owned_pool_rescue.py). Name the focused test that fails on the base and passes on the head. Add an '### Observed / Not run' subsection that states what was run and seen and what was not run. (2) Changelog: add the line 'none' because this is an internal CI change. (3) Proof: add one line explaining why no screenshot applies (for example, CI only). (4) Checklist: tick or address each item, or delete the items that do not apply, as the template instructs. Also remove the unfilled template comment wrappers if they remain.
Full details: Docstring Coverage
-
Explanation
Docstring coverage is 14.29% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 7 functions across 2 files. (1 skipped: 1 unsupported.)
Resolution
Write docstrings for the functions missing them to satisfy the coverage threshold.
-
Finishing Touches: 💡 1
-
📝 Generate docstrings: 💡
-
- Commit to this branch
- Create a new PR
🧪 Generate unit tests (beta)
-
- Commit to this branch
- Create a new PR
-
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
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 @coderabbitai help to get the list of available commands.
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Merge receipt for |
On
nightly-next, the owned-pool rescue no longer cancels or skips a refused run because the branch moved. It re-runs that run's failed jobs, as it does for any other refusal.Why: #25404 gives every nightly-next run its own build and sign groups, so a newer tip builds alongside an older one instead of replacing it. With that in place, the rescue's "nightly-next has moved on, cancel" path broke the Nightly freshness rule: a newer tip is never a reason to cancel a nightly. Ordering is still safe, because publish-nightly's order check refuses any build that is no newer than the feed. An Astra xhigh review of #25404 raised this.
The rescue trigger now also accepts
CI_SIDE_LANE_RUNNER(glaeda-side-*), the route nightly-next's builds take today, next to the olderCI_NIGHTLY_NEXT_TRUSTED_*pair.Land order: after #25404. Before #25404, a re-run of an older run would join the shared warm slot.
Risk: low. The change is limited to rescue decisions for nightly-next runs; main's nightly handling is unchanged. Tests:
tests/test_ci_owned_pool_rescue.py, 173 pass.Agent session: agent session
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.Summary by CodeRabbit