Skip to content

ci: stop restoring the test compilation cache in compile admission - #14161

Merged
teamleaderleo merged 2 commits into
mainfrom
claude/compilation-cache-hits
Sep 24, 2026
Merged

teamleaderleo merged 2 commits into
mainfrom
claude/compilation-cache-hits

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Sep 24, 2026 •

Copy link
Copy Markdown
Collaborator

Compile admission downloaded the nightly Debug compilation cache (932 MB, 13–43 s) on every pull request, but the app target never hit it. Sampled admission logs from 2026-09-24 show cmux at 581 misses / 0 hits and 566 / 0, with cmuxUITests also all misses. The key, canonical paths, runner pool and Xcode (26.6, 17F113) match the nightly seeder exactly: fingerprint bac5277611926ed6b40291f1640fed47 on both sides.

The cause is structural, not a key mismatch. Any change to the one-module app target invalidated every one of its cached compile jobs in these samples, and every PR changes it. Only modules unchanged since the six-hourly cache save hit (C targets, untouched packages), and the adopted DerivedData seed already leaves those built. Cold admission builds with the cache (816–957 s, n=4) were no faster than the nightly's cold builds with an empty cache (774–1153 s, n=5).

This removes the restore step from compile admission. The fingerprint step stays because it keys the DerivedData seed. nightly.yml still writes the cache, since the same job writes the cold DerivedData seed and SPM cache that admission reads; nothing on main reads the compilation cache now. #14015 proposes E2E as a reader.

The first commit changes tests/test_ci_test_compilation_cache_seed.sh to require that admission does not restore the cache and still carries the fingerprint (red). The second commit removes the step (green).

Validation: tests/test_ci_test_compilation_cache_seed.sh, tests/test_ci_pull_request_caches_are_read_only.py, all 46 tests that parse ci-macos.yml/nightly.yml, and actionlint.

Not verified: hit counts are 5,000-line window samples (the job-log API returns only the tail of finished jobs), not per-build totals, and timings are small-sample. Expected saving: 13–43 s and one 932 MB download per admission run.

🤖 Generated with Claude Code

https://claude.ai/code/session_012pAcDGiHaibDaMU4CPvXAP


Generated by Claude Code


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


Summary by cubic

Stops compile admission from restoring the nightly Debug compilation cache, which the app target never hits.

Swift keys every compile job on its whole module, so any change to cmux or cmuxUITests misses all cached jobs: sampled admission logs show 581/581 and 566/566 misses even with the key, paths, and Xcode matching the nightly seed exactly. Cold admission builds with the cache (816–957 s) were no faster than the nightly's cold builds with an empty cache (774–1153 s).

  • Removes the restore step from compile admission; the fingerprint step stays because it keys the DerivedData seed.
  • nightly.yml still writes the cache, but nothing on main reads it now.
  • Expected saving per admission run: 13–43 s and one 932 MB download.

Written for commit cc57adf. Summary will update on new commits.

Review in cubic

teamleaderleo and others added 2 commits September 24, 2026 06:02
The guard now fails while ci-macos.yml compile admission restores the
xcode-compilation-test seed. Sampled admission logs on 2026-09-24 show
the app target missing on every file (581/581, 566/566) even though the
restore key, canonical paths and Xcode 26.6 (17F113) match the nightly
seeder exactly (fingerprint bac5277611926ed6b40291f1640fed47 on both
sides). Admission must still compute the fingerprint, which keys the
DerivedData seed it adopts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012pAcDGiHaibDaMU4CPvXAP
Swift keys each compile job on its whole module, so the one-module cmux
app target and cmuxUITests miss on every file whenever any file in the
module differs from the six-hourly nightly seed, which is every pull
request. Only modules unchanged since the seed hit, and those are the
ones the adopted DerivedData seed already leaves built.

The restore cost 13-43 s and a 932 MB R2 download per admission run.
Cold admission builds with the cache restored (816-957 s) were no faster
than the nightly's cold builds with an empty cache (774-1153 s).

The fingerprint step stays: it keys the DerivedData seed. nightly.yml
still writes the cache; nothing on main reads it now.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012pAcDGiHaibDaMU4CPvXAP
@github-actions

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@coderabbitai

coderabbitai Bot commented Sep 24, 2026

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration

Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 4594c28f-519c-40b8-bdce-cd2875ff189f

📥 Commits

Reviewing files that changed from the base of the PR and between 5da27d6 and cc57adf.

📒 Files selected for processing (3)
  • .github/workflows/ci-macos.yml
  • .github/workflows/nightly.yml
  • tests/test_ci_test_compilation_cache_seed.sh
 ___________________________________________________________
< This loop is doing cardio. Your users are doing timeouts. >
 -----------------------------------------------------------
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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 merged commit 82543c5 into main Sep 24, 2026
55 of 56 checks passed
rustybret pushed a commit to rustybret/bmux that referenced this pull request Sep 24, 2026
82543c5 ci: stop restoring the test compilation cache in compile admission (manaflow-ai#14161)
5da27d6 ci: route the persistent compile fleet command as control plane only (manaflow-ai#14157)
b2ec91b ci: bring a Mac mini onto the compile fleet with one command (manaflow-ai#14148)
1f39b14 ci: cancel orphaned runs from the queue janitor (manaflow-ai#14156)
455179c ci: register new Python tests automatically at commit time (manaflow-ai#14153)
e6ca0a2 fix(ios): mirror the signed-in account so pushes decrypt after launch (manaflow-ai#14110)
fd028fe ci: run forks' own macOS CI on GitHub-hosted macos-26 (manaflow-ai#14151)
f70a62b ci: cancel stale pull request runs on every janitor sweep (manaflow-ai#14144)
e2fd37e ci: default the seed adoption kill switch to on (manaflow-ai#14150)
4926f0f fix: split the SSH session-list merge so it type-checks on slow runners (manaflow-ai#14142)
34d33d2 ci: run R2 cache writers in a main-only ci-cache-writer environment (manaflow-ai#14147)
4b7f66a ci: skip the Mac wrapper and remote-daemon lanes for ci.yml routing edits (manaflow-ai#14145)
4ca24a2 ci: give the DerivedData seeder the R2 public URL (manaflow-ai#14146)

# Conflicts:
#	.github/workflows/app-host-test-rerun.yml
#	.github/workflows/auth-refresh-tests.yml
#	.github/workflows/ci-guards.yml
#	.github/workflows/ci-macos.yml
#	.github/workflows/ci-queue-janitor.yml
#	.github/workflows/ci.yml
#	.github/workflows/cli-pipe-regressions.yml
#	.github/workflows/cloud-command-deadlines.yml
#	.github/workflows/cloud-machine-tests.yml
#	.github/workflows/cloud-task-local-tests.yml
#	.github/workflows/iroh-v2.yml
#	.github/workflows/nightly.yml
#	.github/workflows/relay-tls.yml
#	.github/workflows/remote-daemon.yml
#	.github/workflows/seed-derived-data.yml
#	.github/workflows/terminal-hang-diagnostics.yml
#	.github/workflows/test-ios.yml
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