Skip to content

Fix self-hosted CI compatibility failures - #6289

Merged
lawrencecchen merged 1 commit into
mainfrom
fix-nightly-prune-python-compat
Jun 17, 2026
Merged

lawrencecchen merged 1 commit into
mainfrom
fix-nightly-prune-python-compat

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented Jun 17, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • postpone nightly prune script annotation evaluation so older macOS runner Python can import it
  • add a Python 3.9 CI guard for the nightly prune script
  • give bare debug XCTest launches an XCTest-scoped socket fallback inside SocketControlSettings so app-host tests do not share /tmp/cmux-debug.sock
  • wrap focused app-host xcodebuild steps so CI fails if runtime logs show fallback to the shared debug socket
  • retry the focused app-host xcodebuild once when Xcode hits the known pre-connection XCTest startup hang

Tests

  • PYTHON_BIN=python3 bash ./tests/test_ci_nightly_prune_python_compat.sh
  • bash -n scripts/ci/run-app-host-xcodebuild.sh
  • swift test --package-path Packages/macOS/CmuxSocketControl --filter SocketControlSettingsTests
  • python3 scripts/swift_file_length_budget.py --budget .github/swift-file-length-budget.tsv
  • git diff --check

Note

Medium Risk
Socket default-path behavior changes for bare debug XCTest (isolation improvement); CI-only guards and a small Python compatibility tweak—low production blast radius but touches control-socket resolution used by tests and dev builds.

Overview
Fixes self-hosted CI failures from shared debug control sockets during app-host XCTest runs and from older runner Python importing the nightly prune script.

Socket control: Bare debug XCTest launches (no CMUX_TAG, no CMUX_SOCKET_PATH) now default to /tmp/cmux-xctest-<hash>.sock instead of /tmp/cmux-debug.sock, keyed off XCTest env indicators (including libXCTest in DYLD_INSERT_LIBRARIES). Tagged debug and explicit overrides are unchanged. Logic lives in a new SocketControlSettings+DefaultSocketPath extension with unit tests.

CI: Focused app-host xcodebuild steps route through scripts/ci/run-app-host-xcodebuild.sh, which fails the job if logs show the shared debug socket, requires listener evidence, and can retry on XCTest startup hangs. Workflow guard adds Python 3.9 and test_ci_nightly_prune_python_compat.sh.

Nightly prune: from __future__ import annotations on scripts/prune_nightly_release_assets.py so 3.9 can import it.

Reviewed by Cursor Bugbot for commit fcb7aa3. Bugbot is set up for automated code reviews on this repo. Configure here.

@vercel

vercel Bot commented Jun 17, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment Jun 17, 2026 5:27am
cmux-staging Building Building Preview, Comment Jun 17, 2026 5:27am

@coderabbitai

coderabbitai Bot commented Jun 17, 2026 •

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds from __future__ import annotations to the nightly prune script with compatibility testing via a new Bash test and CI wiring for Python 3.9. Introduces a new helper script that isolates per-run CMUX and CFFIXED user home environments, integrates it into four app-host XCTest regression steps and the unit test scheme, and validates consistency across all three via comprehensive tests.

Changes

Nightly prune Python compatibility guard

Layer / File(s) Summary
Future import fix and compatibility test script
scripts/prune_nightly_release_assets.py, tests/test_ci_nightly_prune_python_compat.sh
Adds from __future__ import annotations to the prune script; new Bash test validates the script compiles via py_compile, dynamically loads it with importlib.util, and asserts the presence of the callable load_release export, exiting non-zero if any validation fails.
Nightly prune CI step wiring
.github/workflows/ci.yml
Configures Python 3.9 in the workflow-guard-tests job and adds a step that runs the new test script with PYTHON_BIN=python3.9.

App-host XCTest environment isolation

Layer / File(s) Summary
Isolation environment setup script
scripts/ci/app-host-xctest-env.sh
New helper script enforces a single required step-slug argument, derives per-run identifiers from GITHUB_RUN_ID and GITHUB_RUN_ATTEMPT with defaults, exports isolated CMUX_TAG, CMUX_SOCKET_PATH, CMUX_UI_TEST_MODE, and CFFIXED_USER_HOME variables, removes prior artifacts, and creates the isolated home directory.
Workflow and scheme isolation integration
.github/workflows/ci.yml, cmux.xcodeproj/xcshareddata/xcschemes/cmux-unit.xcscheme
Four app-host regression test steps in the workflow (split-theme, browser-proxy, alt-mods, unit-tests) now source the isolation helper with their respective step-slug before invoking xcodebuild; the unit-tests step includes the CMUX_APP_HOST_XCODEBUILD_SETTINGS array in the xcodebuild arguments; six environment variables are added to the cmux-unit.xcscheme test action configuration to pass CMUX isolation tags, socket path, mode flag, isolated home directory, and Rust/Cargo home paths into the unit-test run environment.
Isolation validation test
tests/test_ci_app_host_xctest_env.sh
Executes the isolation helper in an isolated subprocess and asserts correct environment variables and filesystem state (socket path, mode flag, home directory existence); validates that .github/workflows/ci.yml contains required source scripts/ci/app-host-xctest-env.sh steps for split-theme, browser-proxy, alt-mods, and unit-tests; parses cmux-unit.xcscheme XML to verify all required environment variables are present, enabled, and match the asserted values.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

🐇 Two helpers join the testing crew,
One guards the prune script, tried and true—
The other builds a home so clean,
With isolated paths unseen.
Our burrows nested, safe and sound, 🏠
Regression tests on firmer ground!

🚥 Pre-merge checks | ✅ 21
✅ Passed checks (21 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Fix self-hosted CI compatibility failures' accurately summarizes the main changes, which focus on resolving CI compatibility issues with Python versions and XCTest isolation on self-hosted runners.
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.
Cmux Swift Actor Isolation ✅ Passed No Swift source files were modified in this PR. Changes are limited to CI configuration (YAML workflow), test scripts (Bash), Python utilities, and XCScheme environment variable configuration. The...
Cmux Swift Blocking Runtime ✅ Passed PR contains no production Swift code changes. All modifications are CI/workflow configs (YAML), build scripts (Bash), Python support scripts, and Xcode scheme XML—no blocking synchronization patter...
Cmux Expensive Synchronous Load ✅ Passed PR contains no production Swift code changes—only CI workflow, Python/Bash automation scripts, and Xcode scheme config. The check does not apply.
Cmux Cache Substitution Correctness ✅ Passed Check applies only to production Swift/TypeScript/JavaScript changes. This PR contains no production code changes in those languages—only CI configuration, Python/Bash scripts, and Xcode scheme upd...
Cmux No Hacky Sleeps ✅ Passed PR introduces no new sleeps/delays in production scripts. New files (app-host-xctest-env.sh, test scripts, Python mod) contain no hacky sleeps. CI workflow sleeps are pre-existing and out of scope...
Cmux Algorithmic Complexity ✅ Passed All changes are limited to CI infrastructure, test code, and build configuration. The rule applies only to production code; this PR modifies no production Swift, TypeScript, JavaScript, shell, or r...
Cmux Swift Concurrency ✅ Passed PR modifies only CI workflow (YAML), Bash scripts, Python scripts, and Xcode scheme (XML) files—no Swift code changes detected, making the check inapplicable.
Cmux Swift @Concurrent ✅ Passed PR contains no Swift file changes; only YAML workflow, Python, Bash, and XML Xcode config files. The @concurrent annotation check does not apply.
Cmux Swift File And Package Boundaries ✅ Passed PR contains no Swift file changes; all modifications are to CI workflow YAML, Python/Bash scripts, and Xcode scheme configuration. Custom check applies only to Swift files.
Cmux Swift Logging ✅ Passed No production Swift code was modified in this PR. All changes are limited to CI workflow, shell scripts, Python scripts, test scripts, and XCode configuration files. No Swift logging violations found.
Cmux User-Facing Error Privacy ✅ Passed PR contains no production changes; all modifications are to CI scripts, workflows, tests, and configuration. User-facing error privacy check is not applicable to non-production changes.
Cmux Full Internationalization ✅ Passed All changes are limited to tests, CI configuration, and operational scripts. Per i18n rules, these categories are explicitly allowed: tests, developer-only files, and operational docs not shown to...
Cmux Swiftui State Layout ✅ Passed PR contains no SwiftUI code changes—only CI workflows, Python scripts, Bash scripts, and Xcode scheme configuration. The SwiftUI state layout check is not applicable.
Cmux Architecture Rethink ✅ Passed PR changes are limited to CI workflows, Python compatibility, and test infrastructure. No Swift code modifications introduce timing patches, locks, observers, split lifecycle ownership, or duplicat...
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed No Swift source code changes in this PR. All modifications are to CI workflows, Python/Bash scripts, and Xcode scheme configuration—not to Swift window code.
Cmux Source Artifacts ✅ Passed All PR changes are hand-written source files, configurations, and test scripts (no generated artifacts, logs, temp folders, caches, or build output).
Description check ✅ Passed The PR description follows the template structure with Summary and Testing sections, providing clear technical details and test verification commands.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix-nightly-prune-python-compat

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.

@greptile-apps

greptile-apps Bot commented Jun 17, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR fixes two self-hosted CI failure modes: older macOS runners on Python 3.9 failing to import the nightly prune script due to missing from __future__ import annotations, and parallel cmux-unit xcodebuild app-host steps racing over the shared /tmp/cmux-debug.sock.

  • Python 3.9 compat: from __future__ import annotations is prepended to prune_nightly_release_assets.py; a new CI step installs Python 3.9 and runs test_ci_nightly_prune_python_compat.sh to gate this going forward.
  • XCTest-scoped sockets: SocketControlSettings.defaultSocketPath is extracted into SocketControlSettings+DefaultSocketPath.swift and gains an XCTest environment detection branch that routes untagged bare-debug builds to a FNV-1a–hashed /tmp/cmux-xctest-<hash>.sock, isolating parallel test sessions; explicit CMUX_SOCKET_PATH and CMUX_TAG overrides are unchanged.
  • CI socket gate: Three cmux-unit xcodebuild steps are wrapped by the new scripts/ci/run-app-host-xcodebuild.sh, which hard-fails if logs show the shared debug socket or lack socket-listener evidence, with a single retry on known XCTest startup hangs.

Confidence Score: 5/5

Safe to merge — all changes are additive CI scaffolding or a well-tested extraction of existing debug-socket resolution logic with a targeted XCTest isolation branch.

The Swift change is a clean extraction plus a narrowly-scoped XCTest detection branch backed by five new unit tests. The Python change is a one-line import guard. The CI script changes add a wrapper with explicit failure gates. No production release-build paths are touched, and the new defaultSocketPath branch is gated on both isDebugBuild and the bare-debug bundle identifier, so stable builds are unaffected.

scripts/ci/run-app-host-xcodebuild.sh — retry path uses pkill without waiting for process exit; SocketControlSettings+DefaultSocketPath.swift — the DYLD_INSERT_LIBRARIES-only fallback provides no per-session isolation when higher-priority XCTest env vars are absent.

Important Files Changed

Filename Overview
.github/workflows/ci.yml Adds Python 3.9 setup + compatibility gate for nightly prune, and wraps three cmux-unit xcodebuild steps with the new run-app-host-xcodebuild.sh script. Straightforward additive changes.
Packages/macOS/CmuxSocketControl/Sources/CmuxSocketControl/SocketControlSettings+DefaultSocketPath.swift Extracts defaultSocketPath into its own extension file and adds XCTest environment detection to route bare debug builds to an FNV-1a-hashed /tmp/cmux-xctest-*.sock path. Logic is correct for the common case; the DYLD_INSERT_LIBRARIES-only fallback has a minor isolation gap.
Packages/macOS/CmuxSocketControl/Sources/CmuxSocketControl/SocketControlSettings.swift Removes the old defaultSocketPath implementation (now in SocketControlSettings+DefaultSocketPath.swift). Clean surgical removal with no other changes.
Packages/macOS/CmuxSocketControl/Tests/CmuxSocketControlTests/SocketControlSettingsTests.swift Adds five focused tests covering: XCTest-scoped socket fallback, explicit CMUX_SOCKET_PATH override taking priority, DYLD_INSERT_LIBRARIES-only detection, hash distinguishes different config paths, and tagged debug builds bypassing the xctest path.
scripts/ci/run-app-host-xcodebuild.sh New CI wrapper for xcodebuild that fails the job on shared-debug-socket log evidence, implements retry on XCTest startup hang with pkill cleanup, and gates success on socket listener evidence. Retry path's pkill-without-wait has a minor race risk.
scripts/prune_nightly_release_assets.py Adds from __future__ import annotations as the first non-shebang statement, deferring annotation evaluation for Python 3.9 compatibility. Minimal and correct change.
tests/test_ci_nightly_prune_python_compat.sh New test script that compiles and dynamically imports prune_nightly_release_assets.py under a configurable Python binary, asserting load_release is callable. Straightforward and correct.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[socketPath called] --> B[defaultSocketPath]
    B --> C{isDebugBuild AND bare debug bundle ID?}
    C -- No --> G[SocketPathMarkerFiles.defaultSocketPath]
    C -- Yes --> D{launchTag == nil AND no CMUX_SOCKET_PATH?}
    D -- No --> G
    D -- Yes --> E{XCTest env vars present?}
    E -- No --> G
    E -- Yes --> F[FNV-1a hash first indicator → /tmp/cmux-xctest-hash.sock]
    G --> H[stableSocketPath / debug / tagged path]
    F --> I[Return xctest-scoped path]
    H --> J{CMUX_SOCKET_PATH override set?}
    J -- No --> K[Return fallback]
    J -- Yes --> L{shouldHonorOverride?}
    L -- Yes --> M[Return override]
    L -- No --> K
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
    A[socketPath called] --> B[defaultSocketPath]
    B --> C{isDebugBuild AND bare debug bundle ID?}
    C -- No --> G[SocketPathMarkerFiles.defaultSocketPath]
    C -- Yes --> D{launchTag == nil AND no CMUX_SOCKET_PATH?}
    D -- No --> G
    D -- Yes --> E{XCTest env vars present?}
    E -- No --> G
    E -- Yes --> F[FNV-1a hash first indicator → /tmp/cmux-xctest-hash.sock]
    G --> H[stableSocketPath / debug / tagged path]
    F --> I[Return xctest-scoped path]
    H --> J{CMUX_SOCKET_PATH override set?}
    J -- No --> K[Return fallback]
    J -- Yes --> L{shouldHonorOverride?}
    L -- Yes --> M[Return override]
    L -- No --> K
Loading

Reviews (9): Last reviewed commit: "ci: harden self-hosted CI compatibility" | Re-trigger Greptile

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ci.yml:
- Around line 34-35: Add a step using the `actions/setup-python` action with
`python-version: '3.9'` before the "Validate nightly prune Python compatibility"
step to ensure the test_ci_nightly_prune_python_compat.sh script runs under
Python 3.9 interpreter. This will provide genuine runtime compatibility
verification for Python 3.9 rather than relying on pattern-based checks alone.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 124f790a-a687-4097-8796-0252adaf965c

📥 Commits

Reviewing files that changed from the base of the PR and between f9a0808 and a31e167.

📒 Files selected for processing (3)
  • .github/workflows/ci.yml
  • scripts/prune_nightly_release_assets.py
  • tests/test_ci_nightly_prune_python_compat.sh

Comment thread .github/workflows/ci.yml Outdated
@lawrencecchen
lawrencecchen force-pushed the fix-nightly-prune-python-compat branch from a31e167 to 94c4018 Compare June 17, 2026 03:31
@lawrencecchen
lawrencecchen force-pushed the fix-nightly-prune-python-compat branch from 94c4018 to 61d0604 Compare June 17, 2026 03:50
@lawrencecchen lawrencecchen changed the title Fix nightly prune script on self-hosted Python Fix self-hosted CI compatibility failures Jun 17, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@tests/test_ci_app_host_xctest_env.sh`:
- Around line 26-31: The grep -Fq check in the loop iterating through
REQUIRED_STEPS array does not exclude commented-out lines, allowing the
validation to pass even if the required step is only present in a comment (e.g.,
`# source scripts/ci/app-host-xctest-env.sh`). Modify the grep command to
exclude lines that are commented out by adding a pattern that filters for only
uncommented matches, ensuring the validation only passes when the required step
is actually active in the workflow file.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 9253c9f4-eef2-41c9-a07c-22b26dc83fcf

📥 Commits

Reviewing files that changed from the base of the PR and between 94c4018 and 61d0604.

📒 Files selected for processing (5)
  • .github/workflows/ci.yml
  • scripts/ci/app-host-xctest-env.sh
  • scripts/prune_nightly_release_assets.py
  • tests/test_ci_app_host_xctest_env.sh
  • tests/test_ci_nightly_prune_python_compat.sh

Comment thread tests/test_ci_app_host_xctest_env.sh Outdated
Comment on lines +26 to +31
for step in "${REQUIRED_STEPS[@]}"; do
if ! grep -Fq "$step" "$WORKFLOW_FILE"; then
echo "FAIL: missing isolated app-host env in ci.yml: $step" >&2
exit 1
fi
done

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Guard can false-pass on commented workflow lines.

grep -Fq matches raw substrings, so a commented # source scripts/ci/app-host-xctest-env.sh ... would still satisfy this check. That weakens the regression gate.

Proposed fix
 for step in "${REQUIRED_STEPS[@]}"; do
-  if ! grep -Fq "$step" "$WORKFLOW_FILE"; then
+  if ! awk -v s="$step" '
+    /^[[:space:]]*`#/` { next }     # ignore comments
+    index($0, s) { found=1 }
+    END { exit(found ? 0 : 1) }
+  ' "$WORKFLOW_FILE"; then
     echo "FAIL: missing isolated app-host env in ci.yml: $step" >&2
     exit 1
   fi
 done
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_ci_app_host_xctest_env.sh` around lines 26 - 31, The grep -Fq
check in the loop iterating through REQUIRED_STEPS array does not exclude
commented-out lines, allowing the validation to pass even if the required step
is only present in a comment (e.g., `# source
scripts/ci/app-host-xctest-env.sh`). Modify the grep command to exclude lines
that are commented out by adding a pattern that filters for only uncommented
matches, ensuring the validation only passes when the required step is actually
active in the workflow file.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

♻️ Duplicate comments (1)
tests/test_ci_app_host_xctest_env.sh (1)

28-33: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Strengthen workflow validation to exclude commented lines.

The grep -Fq check will match the required step even if it appears only in a comment (e.g., # source scripts/ci/app-host-xctest-env.sh split-theme), which would false-pass the regression gate. Although the current workflow has these as active commands, the test should be robust against accidental commenting.

🔒 Proposed fix to exclude commented workflow lines
 for step in "${REQUIRED_STEPS[@]}"; do
-  if ! grep -Fq "$step" "$WORKFLOW_FILE"; then
+  if ! grep -F "$step" "$WORKFLOW_FILE" | grep -qv '^\s*#'; then
     echo "FAIL: missing isolated app-host env in ci.yml: $step" >&2
     exit 1
   fi
 done

This filters out lines starting with optional whitespace followed by # before checking for matches.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_ci_app_host_xctest_env.sh` around lines 28 - 33, The grep -Fq
check in the loop over REQUIRED_STEPS will incorrectly match the step even if it
appears only in a commented line (e.g., preceded by # characters), causing
false-positive validation. Modify the grep command to exclude lines that start
with optional whitespace followed by # before checking for the required step.
You can accomplish this by piping the WORKFLOW_FILE through grep to filter out
commented lines first, or by using a more complex grep pattern that ensures the
step is not on a commented line.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Duplicate comments:
In `@tests/test_ci_app_host_xctest_env.sh`:
- Around line 28-33: The grep -Fq check in the loop over REQUIRED_STEPS will
incorrectly match the step even if it appears only in a commented line (e.g.,
preceded by # characters), causing false-positive validation. Modify the grep
command to exclude lines that start with optional whitespace followed by #
before checking for the required step. You can accomplish this by piping the
WORKFLOW_FILE through grep to filter out commented lines first, or by using a
more complex grep pattern that ensures the step is not on a commented line.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 1af31a0b-fdfa-4cd1-81fd-9033b606faaf

📥 Commits

Reviewing files that changed from the base of the PR and between 61d0604 and 3cb8a8c.

📒 Files selected for processing (5)
  • .github/workflows/ci.yml
  • scripts/ci/app-host-xctest-env.sh
  • scripts/prune_nightly_release_assets.py
  • tests/test_ci_app_host_xctest_env.sh
  • tests/test_ci_nightly_prune_python_compat.sh

@lawrencecchen
lawrencecchen force-pushed the fix-nightly-prune-python-compat branch from 3cb8a8c to 8483087 Compare June 17, 2026 04:21
Comment thread tests/test_ci_app_host_xctest_env.sh Outdated

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit ce14d5d. Configure here.

Comment thread .github/workflows/ci.yml
python-version: "3.9"

- name: Validate nightly prune Python compatibility
run: PYTHON_BIN=python3.9 bash ./tests/test_ci_nightly_prune_python_compat.sh

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Mid-job Python downgrades later steps

Low Severity

Adding actions/setup-python with 3.9 in the middle of workflow-guard-tests makes python3 point at 3.9 for every later step in that job, not only the nightly prune check. Steps that used to run on the runner’s default interpreter now run on 3.9 instead.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit ce14d5d. Configure here.

@lawrencecchen
lawrencecchen force-pushed the fix-nightly-prune-python-compat branch 3 times, most recently from b3eb9af to 8b7e19f Compare June 17, 2026 05:02
@lawrencecchen
lawrencecchen merged commit 452aed2 into main Jun 17, 2026
24 checks passed
@lawrencecchen
lawrencecchen deleted the fix-nightly-prune-python-compat branch June 17, 2026 05:50
@lawrencecchen
lawrencecchen restored the fix-nightly-prune-python-compat branch July 18, 2026 10:19

This branch was successfully deployed

1 active deployment
Preview – cmux — fcb7aa35 Deployed Jun 17, 2026 by vercel[bot]
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