Skip to content

ci: configure shared fleet Rust cache - #18369

Merged
teamleaderleo merged 44 commits into
feat-cmux-nextfrom
fix/fleet-rust-sccache
Oct 10, 2026
Merged

teamleaderleo merged 44 commits into
feat-cmux-nextfrom
fix/fleet-rust-sccache

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Fleet Rust builds can reuse stable Cargo target directories without exposing credentials to source checkouts. The helper derives a target path from the manifest-selected toolchain, compiler host identity, project, and target triple. Managed workers opt in through an HQ-owned marker; public CI and local runs keep their existing private target directories.

Changelog

Changed: reuse stable Rust target directories on managed fleet workers.

Validation

  • bash tests/test_ci_fleet_rust_cache.sh
  • bash scripts/ci/tests/cmux-tui-rust-check.test.sh
  • bash -n on the changed shell scripts

R2 sccache configuration and credentials are owned by cmuxterm-hq PR #1550 and are not read by this repository helper.


Note

Medium Risk
Touches cmux-next gating, feat-cmux-next autofix pushes, daemon project sync, and cloud relay billing identity—mostly additive CI, but mis-routing or bad sync could affect merge gates or project lists.

Overview
This PR expands cmux-next and related CI so mechanical failures are caught or repaired earlier, while landing a few CmuxNext runtime features and a small MessagesLab API cleanup.

CI and automation: Adds targeted cargo fmt --check for changed cmux-tui packages (cmux-tui-fmt-changed.py + unit tests, wired into cmux-tui-spec.yml). Introduces a Swift canary Mac job for package-only CmuxNext edits (with Release compile advisory on those PRs), CMUX_TUI_TREE_BASE_FALLBACK / tree_fetch_key so PRs that do not touch cmux-tui can use a published tree instead of failing, and tweaks Mac runner selection so bot re-runs reuse placement through attempt 3. A new cmux-next-base-autofix workflow (dry-run until CMUX_NEXT_BASE_AUTOFIX=1) commits generated-file and cargo fmt repairs on feat-cmux-next after cmux-next completes. Gallery PR evidence is sharded (4 shards, narrow+normal widths) with a merge step; nightly caps release-notes prep at 10 minutes; cmux-vm-clients drops bun test.

App / daemon: ProjectsImport relays the acpmux chat index into the daemon via project-list-v1 (project.observe / project.sync). Cloud credential relay session team now comes from the install token claim, not Stack team id. Chief subagent detection moves from HomeAppLinks to URL.isChiefSubagentLink.

cmux-tui bindings: Large test surface reduction (removed C++ unit test sources from the default target, dropped inline #[cfg(test)] modules in the agent-screen-detection example, bootstrap crate tests, etc.). CONTRIBUTING documents pre-commit formatting for webviews and staged cmux-tui Rust.

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

@coderabbitai

coderabbitai Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 0f35eec7-c43e-46be-acc7-34e7930f7858

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • 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.

❤️ Share

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

@teamleaderleo
teamleaderleo force-pushed the fix/fleet-rust-sccache branch from 4f72e77 to 5ad8aad Compare October 7, 2026 11:44

@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.

Stale Bugbot comment from a previous run.

Comment thread scripts/ci/fleet-rust-cache.sh Outdated
@blacksmith-sh

This comment has been minimized.

@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.

Stale Bugbot comment from a previous run.

Comment thread tests/test_ci_fleet_rust_cache.sh Outdated
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Current checks have two inherited infra/base reds, with evidence:

  • Package conventions lint reports the unchanged Packages/macOS/CmuxNext/Sources/CmuxNextBrowser/Favicon/BrowserFaviconPolicy.swift:8 namespace-type violation. The same exact violation is present on feat-cmux-next runs 37619607407, 37619232213, and 37618442618, so this is base-owned.
  • same-tree cmux-tui cannot start because the shared cmux-tui artifacts run 37618443836 was cancelled before publishing tree a937950ad9ad6d1e62d37e2d928d92bfe0d52e84. The job itself reports this as an unavailable published tree and requests an artifacts rerun. This is shared CI infrastructure, unrelated to this PR.

The focused cache resolver tests pass locally. The PR is ready for coordinator handling once the shared artifact is available; no source failure is shown.

…ust-sccache

# Conflicts:
#	scripts/cmux-next/build-optchat-chief.sh

@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.

Stale Bugbot comment from a previous run.

Comment thread scripts/ci/fleet-rust-cache.sh
lawrencecchen and others added 20 commits October 9, 2026 17:29
…ync; app relays the chat index as project.observe
… vscdb, a failed Zed row or a scanning chat index; rank-only times; three.js folders)
… token (cx-i6g4)

The session answer the Cloud app server shows in cloud.auth.status named
the Stack team id (auth.teamID). It now answers the install token's team
claim, the backend team the relay bills; nil when no token can be minted.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Unit-test deletion lane, slice 7a (Lawrence 2026-10-10, "Delete all now").
workers/cmux-vm only.

Deleted:
- Worker: test/workers ledger, naming, proof-evidence and the quotas case
  of create-options (they call src directly); test/node entitlements,
  mesh-acl, mesh-m4-units, service-keys and the refusal cases of
  mesh-signed-request (the route tests in test/workers prove the same
  refusals over HTTP: forged, tampered, stale and replayed signatures,
  bad keys and scopes, unsigned webhooks);
- SDK: sdk/test/client.test.ts (fake fetch), its bun test step in
  cmux-vm-clients.yml, its test script and tsconfig include;
- CLI: in-src tests of cmux-vm-codegen normalize;
- mesh agent: tests/config.rs.

Kept:
- every test/workers route test (requests through the Worker's fetch
  handler with a fake upstream);
- the PGlite store and schema-gate tests (the release rails run them
  against the real migrations: production guard);
- upstream-coverage (guard), test/types (compile-time proof misuse);
- the golden install-key signature vectors shared with the mesh agent;
- cmux-vm CLI tests/lifecycle.rs (built binary) and tests/contract.rs
  (CLI vs openapi.json);
- mesh agent tests/cli.rs (built binary), tests/install.rs (golden RFC 6979
  vectors), tests/loopback.rs (two WireGuard peers over real UDP).

Counts: Worker/SDK TS cases 355 -> 304 (51 deleted); Rust 6 in-src +
16 tests/ deleted.
… tabs.content read within the page-read budget (cx-2y2 red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ns, storageState, tabs.content and exports read within the page-read budget (cx-2y2 items 14-20)

Ports classic 3fcc2aa, 6802308, b381770, 719e060,
5716dc9, 9423c74, 1872ac1, c7c4bc9, 1d654fc,
d841f14 and 3fb6fa8:
- page.markdown charges child lists, text, values, URLs, table padding and
  list and quote indentation to one budget over all frames, reads frames
  one after another with what the ones before left (at most 100), finds
  <main> by a charged walk, reads slots one node at a time, and ends a cut
  page with the read-cut note. Iframe placeholders carry a random mark made
  in the agent world, so page text cannot spell one, and page NULs become
  U+FFFD.
- searchText reads the text within the budget, contexts at most 1,000
  characters a side, matches at most 1,000; extract and dropdownOptions read
  within it and cut text before they normalize it. Each prints where it
  stopped.
- session.storageState reads localStorage within one budget over at most
  100 frames and refuses past it rather than save part of a state.
- tabs.content reads text and HTML in the agent world within a 2,000,000
  character budget split over the URLs; markdown and snapshot formats use
  their own budgets. page.exportContent writes page.markdown() under a
  title cut at 500 characters (the unbounded page-world pageMarkdown goes).
- A snapshot header cleans at most 4,000 characters of a title or URL.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d budget (cx-2y2)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sted shadow roots (cx-2y2 red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… window.frames, within the node budget (cx-2y2 item 12)

Ports classic a02e2b8 and b275d15. iframeHandles walked every
element of the parent recursively into each shadow root on every action
in a child frame (scrollIntoView of each owner <iframe>). The child now
says its place in the parent's window.frames (framePosition, an observe
read); the parent checks its light-DOM <iframe> and <frame> elements one
at a time from the live collections, and only for a frame in a shadow tree
walks its elements iteratively, all within at most 250,000 nodes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… clicks in light and shadow iframes (cx-2y2 red)

The 20,000 nested shadow root cell is replaced: Playwright's own selector
engine overflows its stack there before the owner lookup runs, so it could
not show the item 12 change. Item 12 is checked by clicks in a light-DOM
iframe and in an iframe inside a shadow tree.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… reads each origin once (cx-2y2 items 14, 19 review)

Review of the batch 2 port:
- tabs.content { format: "html" } read the document in the agent world
  around frame.observe, so a password field's value attribute came back
  unmasked. It now calls documentHTML (page.content's read, scrubbed) with
  the URL's share as its size budget.
- session.storageState counted every open frame against its 100-frame
  bound before it knew the frame's origin, so a session with many ad
  iframes failed and { urls } did not help. Frames whose origin is out of
  scope or already read are skipped and not counted.
- tabs.content titles are cut as plain text (a cut marker before the reply
  margin left nothing), and a snapshot-format row names the snapshot's own
  stop reason.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lawrencecchen and others added 21 commits October 9, 2026 19:16
Unit-test deletion lane, slice 8 (Lawrence 2026-10-10, "Delete all now").
SDK tests in cmux-tui/bindings before: about 1,243; after: about 507.

Deleted (call SDK code directly, in-memory fake or scripted transports,
net.Pipe, count/shape checks): TypeScript authority, base64, device-kind,
field-compatibility, wire-json, client, resource-api, websocket-transport,
presence; Python consumer, device_kind, events, aio_cleanup, convenience,
schema_roundtrip; Rust bookmarks_typed, cloud_name_authority, device_kind,
error_codes, state_handles, public_api and the in-src tests of cmux-sdk
(except the socket ones below), cmux-daemon-client, cmux-sidebar, the two
bootstrap crates and examples/rust-agent-screen-detection; Go
client_zero_progress, resource_api, resource_api_external, socket,
raw/device_kind; go-pane envelope, frame, token, provider, conn,
richpane; Java Codec, GeneratedModel, SocketDiscovery, ResourceApi,
BrowserPointerFrame; C++ attachment, base64, json, client, resource; Zig
raw/authority_test and the inline tests of resource.zig, raw/client.zig,
raw/wire.zig, raw/transport.zig and raw/capabilities.zig that open no
socket. Runner lists follow (java scripts/test.sh, cpp CMakeLists.txt,
zig raw.zig).

Kept (wire boundary or generated check):
- live daemon tests (*_live.rs), rust mock_server, byte_attachment,
  home_conversation, typed_state_ops, dock_field_capability,
  local_socket_windows, rust-daemon-client tests/, rust-sidebar runtime
  (real Unix sockets), cmux-sdk in-src socket tests in client.rs,
  codec.rs, resource/client.rs, socket_hash.rs (UnixListener);
- Python resource_api, lifecycle (UnixJsonServer), protocol (generated vs
  schema), package_consumer; TypeScript unix-transport, generated,
  package-consumer, resource-package-consumer, code-mode cloud-relay;
  Go raw client, ergonomics_external, consumer, url_open (net.Listen);
  go-pane listener, websocket, examples/hello main + vectors; Java
  GeneratedCoverage, StreamMode, Lifecycle, Ergonomics, UnixTransport,
  consumer; C++ generated, macro_collision, unix_transport; Zig provider,
  stream_client, wire_presence, generated presence and the socket tests
  in transport/client/resource;
- example apps' socket fakes; conformance runner; codegen --check.
Also drops the last hand-written count pins: C++ attach-surface
field_requirements size and the TypeScript emitted-event count.
Release tooling tests (bindings/tests, codegen/tests) are CI tooling and
stay. No Cargo.toml change: dev-dependencies left as they are.
…a static-only type [cx-94dl]

35a61bd added enum HomeAppLinks (all-static public surface), which
lint-ios-package-conventions.sh refuses; cdd28b4 got past the lint by
making it a struct with an empty public init. URL.isChiefSubagentLink is
the same check on the receiver type; behavior is unchanged.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…18896)

* test(ci): the base autofix regenerates without touching frozen paths (red)

base-autofix.sh copies the Mac job's regenerated files into a checkout,
skipping frozen paths, and adds a missing cmux-tui tree input to both
lists. Red: the script does not exist yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ci: a base autofix bot commits generated files, tree inputs and fmt

After each cmux-next run on a feat-cmux-next push, cmux-next-base-autofix
repairs the mechanical reds in one commit on top of it: the generated
files the Mac generated-files job rebuilt (its cmux-next-generated-patch
artifact, so no fleet Mac), missing cmux-tui tree inputs and cargo fmt in
cmux-tui. Frozen paths (base-autofix-frozen.txt) are reported and never
written; the app FFI pin stays with the app-ffi-repin pull request.

The push uses a GitHub App token minted only for the push step and a
plain push that never overwrites a moved base. Dry run until the repo
variable CMUX_NEXT_BASE_AUTOFIX is 1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(ci): the base autofix never writes a workflow file (red)

The bot pushes with GITHUB_TOKEN, which cannot push .github/workflows
changes. A regenerated workflow file is skipped and reported, and a
missing cmux-tui tree input (its second list is cmux-tui-artifacts.yml's
paths) is reported without writing either list. Red: both are written.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ci: the base autofix pushes as github-actions[bot] with GITHUB_TOKEN

No GitHub App: the job's GITHUB_TOKEN (contents: write) pushes the
repair; no ruleset or branch protection applies to feat-cmux-next.
GITHUB_TOKEN cannot push workflow files, so every .github/workflows path
is frozen for the bot, and missing cmux-tui tree inputs (whose second
list is cmux-tui-artifacts.yml's paths) are reported, not written. Its
pushes start no workflow: the next push's cmux-next run verifies the
repair commit. The trigger also checks the run's workflow path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…x-tui crate (#18913)

36c60c8 moved the image paste spool into cmux-tui-image-paste, and
cmux-tui-core's lib.rs re-exports it (use cmux_tui_image_paste::
image_paste;). The image staleness guard (8e23f8a, cx-4l51) only
looked for crate::image_paste under cmux-tui-core, found 9 constants
named CAPABILITY and failed, so release rails is red on every PR and on
nightly-next. A crate:: path whose first segment lib.rs re-exports from
a workspace crate now also names that crate's module file.

No bead (repairs the cx-4l51 guard).

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* ci: format staged files in the trusted pre-commit hook

* ci: guard formatter scope for staged files

* ci: scope Rust formatter guard to its package

* ci: use direct rustfmt and skip merge formatting

* ci: pass the cmux-tui Rust edition to rustfmt
* test(ci): red test, PRs check rustfmt on the cmux-tui packages they touch

PR CI never runs cmux-tui.yml (dispatch only), so #18706 landed
unformatted Rust and broke base cargo fmt --check. These tests pin a
helper that runs cargo fmt --check once per touched package, checks
every package when a rustfmt config changes or there is no base, and
names each unformatted package.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ci: check rustfmt on the cmux-tui packages a PR touches

PR CI never runs cmux-tui.yml (dispatch only), so #18706 landed
unformatted Rust and broke base cargo fmt --check. cmux-tui-spec.yml
already runs on every PR and push touching cmux-tui/** on hosted Linux;
its new rustfmt job runs cmux-tui-fmt-changed.py, which maps each changed
.rs file or Cargo.toml to its nearest tracked package and runs cargo fmt
--check on it with the pinned toolchain. No build and no dependency
download. A rustfmt config or toolchain change, or no base, checks every
package; vendored crates and deleted packages are skipped. A PR compares
with its merge commit's first parent, a push with the commit before it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* style(cmux-tui): rustfmt acpmux's draft tests and the relay circuit

The new rustfmt job's full run found two base packages that fail
cargo fmt --check: acpmux, from #18706's draft tests and their module
order, and the Cloudflare relay's circuit.rs. Formatting only, exactly
the hosted rustfmt diff.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* style(cmux-tui): leave the relay circuit to its own repair

Touching the Cloudflare relay runs its lane, whose npm audit is red on
base (sharp and undici advisories through wrangler, fixed only by a
wrangler bump outside the stated range). That is the relay's own repair,
so this PR keeps acpmux's formatting only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* ci: add mini-first Swift canary for cmux-next

* ci: remove unit tests from Swift canary change
…e cmux-tui (#18698)

* test(cmux-next): red: a PR that changes no cmux-tui fails same-tree on an unpublished merge tree

#16614, #17551 and #18605 change no cmux-tui or ghostty-next path, yet
same-tree cmux-tui failed them because the base tip's tree was never published
(its artifacts run was cancelled). Such a PR should reuse the newest published
tree in its history (tree_fetch_key, fetched through CMUX_TUI_TREE_KEY), or skip
the tree jobs when none is published, never fail.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ci(cmux-next): same-tree cmux-tui is a hard check only for PRs that change cmux-tui

Path routing records whether the pull request's own diff touches cmux-tui/ or
ghostty-next. For one that does not, a merge tree that is not ready no longer
fails: the probe (CMUX_TUI_TREE_BASE_FALLBACK=1) resolves the newest published
tree in the merge's history and reports ready with tree_fetch_key, which the
daemon tests and the Debug scheme compile fetch through CMUX_TUI_TREE_KEY; with
none published it reports skipped. Pushes, dispatches and PRs that change
cmux-tui keep the hard check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(cmux-next): the newest-published search deepens only this commit's history

A bare `git fetch --deepen=50 origin` deepens every branch of origin: on this
PR's first run it took path routing past its 5-minute limit (job 113609407061)
before the probe's base fallback, which then resolved in under a second.
Deepening only HEAD takes about 30 s on a depth-2 clone of feat-cmux-next.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* docs(cmux-next): map UI parity reference sources

* docs(cmux-next): add media preview reference source

* docs(cmux-next): define reference freshness checks
* test(nightly): the notes step cannot spend the publish budget before the upload (red)

Run 37611677848 spent 29 of publish-nightly's 30 minutes on release notes and
was cancelled mid-upload, leaving partial release assets.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(nightly): bound the publish notes step at 10 minutes

The notes take seconds since 0115b26. A regression now fails the step
before any asset upload, instead of spending publish-nightly's 30 minutes and
being cancelled mid-upload with partial assets left on the release.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…self (#17622)

* test(cmux-next): the cmux-tui gate pins and dispatches an unpublished tree itself

Publisher run 37505519359 failed transiently and its retry was replaced by a
newer feat-cmux-next push, so the tree was never published and lanes pushed
cmux-tui-pin-* branches by hand to unblock their gates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(cmux-next): the tree gate watches the base and may pin the tree

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ci(cmux-next): the cmux-tui gate pins and dispatches an unpublished tree

When two run checks find no artifacts run that will publish the tree, the
gate creates cmux-tui-pin-<key12> at the publisher commit and dispatches the
artifacts workflow there, once, then keeps waiting. A pull request now
watches its base commit (the merge's first parent) instead of no publisher,
so it neither waits 45 minutes for a tree nobody builds nor needs a lane to
push a pin branch by hand. A superseded push still skips; forks keep a
read-only token and no autopin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(cmux-tui): a transient wrong binary read must not fail publication

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(cmux-tui): read a mismatched published binary again before failing

R2 objects are write-once, so a digest mismatch on a binary the run just
uploaded is a bad read. Fetch it again from a cache-busting URL up to
three times, and name the response headers when it still differs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(cmux-next): a pull request gate pins a tree its base never builds

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ci(cmux-next): a pull request gate pins a tree its base never builds

A pull request that changes cmux-tui has a merge tree no push builds,
and the artifacts workflow's pull_request_target trigger has never
started a run, so its gate waited 45 minutes with the run check off.
With CMUX_TUI_TREE_AUTOPIN the gate now pins its own checkout at once
and watches that run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ci(cmux-next): retain base tree dispatch tests

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* ci(gallery): capture narrow responsive states

* test(gallery): cover workflow matrix changes

* fix(gallery): dedupe equal responsive widths

* ci: shard gallery matrix renders

* ci: retrigger sharded gallery validation
Resolutions: build-acpmux.sh keeps base's persistent warm target dir
(cmux-tui/target/acpmux-app) by default and swaps in the fleet resolver's
stable per-toolchain dir only on a trusted managed worker. The branch's
test_ci_fleet_rust_cache.sh unit test is dropped (no unit tests in
cmux-next).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Not verified: macOS jobs did not run: compile and app tests were skipped on dd689642f3; ci-status is green without them.

CI passes on dd689642f3 (run 38017876209 attempt 1).
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped (the macos job needs both to succeed). Re-run CI once they pass, before merging.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

@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 using default effort and found 2 potential issues.

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 dd68964. Configure here.

for stage in base head repeat; do
mkdir -p "$evidence/runs/$stage"
jq -s 'add' "$evidence"/runs/$stage/shard-*/results.json > "$evidence/runs/$stage/results.json"
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.

Sharded gallery drops screenshot files

High Severity

Each render shard writes results.json and screenshots under runs/$stage/shard-N, but compare only concatenates those JSON files into runs/$stage/results.json. Image paths stay inside the shard folders, so pr.ts looks for screenshots next to the merged results and treats sharded states as missing.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit dd68964. Configure here.

contents: read
timeout-minutes: 20
env:
CMUX_NEXT_RUNNER: ${{ needs.macos-placement.outputs.runner || github.repository_owner != 'manaflow-ai' && 'macos-26' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository && 'blacksmith-6vcpu-macos-26' || vars.CI_PR_POOL_OWNED == '1' && contains(fromJSON('["pull_request","push","workflow_dispatch"]'), github.event_name) && (github.run_attempt <= 2 || github.triggering_actor != 'github-actions[bot]') && vars.CI_SIDE_LANE_RUNNER || vars.MACOS_RUNNER_26 || 'blacksmith-6vcpu-macos-26') }}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Canary skips Blacksmith overflow reruns

Medium Severity

swift-canary still uses macos-placement's runner on every attempt. The other Mac jobs now drop that label on bot attempt 4 so a mini refusal overflows to Blacksmith. A refused canary stays pinned to the mini label and can queue indefinitely.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit dd68964. Configure here.

@blacksmith-sh

blacksmith-sh Bot commented Oct 10, 2026

Copy link
Copy Markdown

Found 1 test failure on Blacksmith runners:

Failure

Test View Logs
test_every_submodule_free_checkout_on_an_owned_runner_resets_submodules (main.Reuse
dWorkspaceSubmodules.test_every_submodule_free_checkout_on_an_owned_runner_resets_submo
dules)/
test_every_submodule_free_checkout_on_an_owned_runner_resets_submodules (main.Reuse
dWorkspaceSubmodules.test_every_submodule_free_checkout_on_an_owned_runner_resets_submo
dules)
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@teamleaderleo
teamleaderleo merged commit 461a7ff into feat-cmux-next Oct 10, 2026
79 of 93 checks passed
@teamleaderleo
teamleaderleo deleted the fix/fleet-rust-sccache branch October 10, 2026 02:55
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.

2 participants