Skip to content

fix: unblock main CI (settings compile, bonsplit tests) - #16408

Merged
teamleaderleo merged 8 commits into
mainfrom
fix/main-green
Oct 1, 2026
Merged

teamleaderleo merged 8 commits into
mainfrom
fix/main-green

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

main CI was red from several merges that crossed or went in with red checks. This PR fixes them forward:

The duplicate cmuxAccent reported against #16230 was also real. It was fixed independently on main by #15345, so this diff doesn't include it.

Verification

CI on 8ec30fb: 67/67 checks pass, including macOS compile admission, swift-package-tests, app-host unit tests, CLI product tests and guards. I did not build the app locally. The first CLI product test run failed because the runner had nothing at /tmp/cmux-ci/src; it passed on rerun.

Changelog

none

🤖 Generated with Claude Code

https://claude.ai/code/session_01FrR7YbsQtGw2eFtDeyiTcK

#15931 called NotificationCenter.post(name:) without the required
object argument, which breaks macOS compile admission on main.

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

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

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

#15445 and #15154 each added the same @Environment(\.cmuxAccentColor)
property to TitlebarNotificationBadge, so main redeclares it.

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

coderabbitai Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

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

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

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

Review profile: ASSERTIVE

Plan: Advanced

Run ID: a8b464bf-baac-4c69-bb66-19186afd3c2c

📥 Commits

Reviewing files that changed from the base of the PR and between 360bc43 and 8ec30fb.

📒 Files selected for processing (5)
  • Packages/macOS/CmuxSettings/Sources/CmuxSettings/CustomSidebarTemplateCatalog.swift
  • Packages/macOS/CmuxSwiftRenderUI/Tests/CmuxSwiftRenderUITests/CustomSidebarValidationTests.swift
  • Sources/CmuxExtensionSidebarSelection.swift
  • cmuxTests/SidebarProviderMenuRegressionTests.swift
  • tests/test_ci_change_areas.py

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 6 remain after this review.


📝 Walkthrough

Walkthrough

This change updates sidebar template filtering and tests, sets an explicit nil object for a gallery notification, updates the bonsplit subproject reference, and expands script stub setup in a static-preflight test.

Changes

Sidebar template handling

Layer / File(s) Summary
Filter and validate sidebar templates
Packages/macOS/CmuxSettings/Sources/CmuxSettings/CustomSidebarTemplateCatalog.swift, Packages/macOS/CmuxSwiftRenderUI/Tests/CmuxSwiftRenderUITests/CustomSidebarValidationTests.swift
The catalog removes comment lines that contain the sidebar copy command. The validation test excludes the manifest entry when checking sidebar names and validity.
Update sidebar example selection
Sources/CmuxExtensionSidebarSelection.swift, cmuxTests/SidebarProviderMenuRegressionTests.swift
The extension selection source imports CmuxSettingsUI. The onboarding test uses the agents-board example and expects the copied and discovered names to be agents-board and agents-board-2.

Gallery request notification

Layer / File(s) Summary
Gallery notification post
Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Environment/SettingsHostActions.swift
The gallery request posts its notification with an explicit nil object. A lint exception comment was added.

Bonsplit subproject reference

Layer / File(s) Summary
Update subproject reference
vendor/bonsplit
The subproject reference changed to commit 64ac6d4c8bb427f401987b113fc01b6a10f79800.

Static-preflight test setup

Layer / File(s) Summary
Create static-preflight script stubs
tests/test_ci_change_areas.py
The test creates executable stubs for referenced Python and shell scripts that are not already present.

Priority: ⬇️ Low

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

Change: Bug fix

Suggested reviewers: austinywang

Merge Risk: ⚪ Minimal · up to 8ec30

The PR’s template filtering and validation remain aligned, and its other changes do not establish a production regression. No actionable merge-blocking risk remains; the change is mergeable subject to normal CI checks.

🚥 Pre-merge checks | ✅ 24 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 7 functions across 6 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (24 passed)
Check name Status Explanation
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 Cloud Persistent Session And Early Input ✅ Passed PASS: The authoritative PR diff changes settings notification syntax, sidebar template/catalog behavior, tests, CI fixtures, and the Bonsplit gitlink. It does not change Cloud terminal creation, cmux-…
Cmux Swift Actor Isolation ✅ Passed No Swift actor-isolation mistake is introduced or worsened. The production Swift diff only changes catalog string filtering, adds object: nil to a notification post, and imports CmuxSettingsUI. Th…
Cmux Swift Blocking Runtime ✅ Passed PASS: The authoritative PR diff adds no blocking or timing synchronization. Production Swift changes only adjust template-line filtering, add an import, add a lint exception, and pass object: nil to…
Cmux Browser Automation Off-Main ✅ Passed The pull request does not change browser socket automation. The authoritative diff changes sidebar/settings code, tests, CI fixtures, and the vendor/bonsplit gitlink only; it contains no changes to …
Cmux Expensive Synchronous Load ✅ Passed PASS: The PR adds no expensive synchronous agent-history load. Production Swift changes only adjust template-comment filtering, add object: nil to a notification, add a lint comment, and add an impo…
Cmux Cache Substitution Correctness ✅ Passed PASS: The PR diff contains no substitution of a fresh authoritative read with a cached or opportunistic value in a persistence, history, undo, or snapshot path. The only stateful production change is …
Cmux No Hacky Sleeps ✅ Passed PASS. The PR introduces no TypeScript, JavaScript, shell, or non-test runtime delay. The only non-Swift file changed is tests/test_ci_change_areas.py, where test-only validator stubs are added; no s…
Cmux Algorithmic Complexity ✅ Passed PASS. The production diff adds no nested collection scans or per-target rescans. CustomSidebarTemplateCatalog.template(id:) still performs one linear filter pass over the template source lines; th…
Cmux Swift Concurrency ✅ Passed PASS — The authoritative PR diff introduces no prohibited Swift concurrency pattern. The only changed cmux-owned Swift concurrency-adjacent code adds object: nil to an existing NotificationCenter …
Cmux Swift @Concurrent ✅ Passed PASS — the authoritative PR diff adds no async, nonisolated, or @concurrent Swift work. The changed catalog logic remains synchronous, the notification call remains inside @MainActor code, and…
Cmux Swift Package Boundaries ✅ Passed PASS. The only changed app-target Swift file, Sources/CmuxExtensionSidebarSelection.swift, adds an import and does not add or expand feature logic. The changed CustomSidebarTemplateCatalog and `Cu…
Cmux Swiftpm Lockfiles ✅ Passed The PR changes only the vendor/bonsplit gitlink for dependency-related content. The gitlink moves from 351bfa7 to 64ac6d4; both revisions retain Bonsplit's upstream .gitignore entry for `Packa…
Cmux Swift Logging ✅ Passed PASS — The PR adds or materially changes no Swift logging. The changed production Swift lines update template filtering, a notification post, and an import; none use print, debugPrint, dump, `NS…
Cmux User-Facing Error Privacy ✅ Passed The PR does not add or materially change a user-facing error, alert, command output, API error body, or recovery message. The production changes only filter installation comments from copied template …
Cmux Full Internationalization ✅ Passed The PR does not introduce or materially change user-facing copy. The production Swift changes adjust notification posting, template-source filtering, and imports; the added Swift text is a developer-o…
Cmux Swiftui State Layout ✅ Passed The authoritative diff adds no ObservableObject, @Published, @StateObject, @EnvironmentObject, GeometryReader, lazy/list row store reference, or render-time state mutation. The Swift changes only adju…
Cmux Architecture Rethink ✅ Passed PASS. The reviewed diff contains small correctness and test fixes. It adds the required object: nil argument, records a lint exception, broadens template-comment filtering, adds an explicit module i…
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PASS. The authoritative PR diff changes settings notification handling, sidebar catalog/test logic, an import, test fixtures, CI stubs, and a Bonsplit gitlink. No added or modified Swift code introduc…
Cmux Source Artifacts ✅ Passed No changed path adds a local or generated artifact. The diff contains six hand-written source/test files and one test script, all retained as regular tracked files. vendor/bonsplit remains an existi…
Cmux No Test Or Debug Seam In Production Source ✅ Passed PASS. The authoritative diff changes only three production Swift files under **/Sources/**: CustomSidebarTemplateCatalog.swift, SettingsHostActions.swift, and `Sources/CmuxExtensionSidebarSelect…
Title check ✅ Passed The title clearly and concisely identifies the main purpose: fixing CI failures related to settings compilation and Bonsplit tests.
Description check ✅ Passed The description explains the affected issues, lists the fixes, records CI verification, and includes a changelog entry. It uses a Verification heading instead of Testing and omits the checklist, but t…
  • Fix all pre-merge checks with AI
✨ 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
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


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.

#16319 squash-merged a stale vendor/bonsplit gitlink, moving it back from
f33c31c (#16261) to 351bfa7 and reintroducing the four narrow-pane
action-lane BonsplitTests failures. Point at bonsplit main 64ac6d4,
whose tree matches f33c31c.

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

Copy link
Copy Markdown
Collaborator Author

Subagent review at 2e29c7f: approve. No correctness issues found.

  • post(name:object: nil): no post(name:) helper exists, and the package's only other post call already passes object:.
  • Duplicate cmuxAccent: the declaration that stays is the one used by the badge background.
  • Bonsplit 351bfa7 → 64ac6d4: a forward move. The range diff touches only Tests/BonsplitTests/BonsplitTests.swift, with no library source changes, and its tree is identical to f33c31c (Bump Bonsplit: fix narrow-pane rendering test assumptions #16261).

#15931 added an all-static public enum that the iOS package-conventions
lint rejects as a namespace type. Record it as a reviewed exception so the
lint passes; it is a candidate to become an injected SettingsRuntime value.

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

cursor Bot commented Oct 1, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

CI failure attribution

CI passes on 8ec30fb09c (run 36891609663 attempt 1).

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.

@github-actions

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Dogfood tours of 8ec30fb0

sidebar-and-chrome-tour at 8ec30fb0: not run

skipped: CI built this head on a runner pool whose products the UI test Macs cannot load, and media never compiles one; gh workflow run pr-media.yml -f pr=&lt;n&gt; -f allow_compile=true does

Tours are picked by the paths globs in dogfood/scenarios/*.json; a Dogfood-tours: a, b line in the description picks them instead (none turns this off). Look at every frame before merging: a green tour only means no step failed.

@cubic-dev-ai cubic-dev-ai 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.

1 issue found across 1 file (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Environment/SettingsHostActions.swift">

<violation number="1" location="Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Environment/SettingsHostActions.swift:13">
P3: This plain `//` comment between the enum's `///` doc block and the declaration detaches the doc comment: Swift associates a doc comment only with the declaration it immediately precedes, so `CustomSidebarTemplateGalleryRequest` loses "Holds a gallery request until the progressively mounted Custom Sidebars section…" in Xcode quick help / DocC. Convert the line to a `///` doc line so it stays part of the doc block; the namespace scanner matches the marker against raw text regardless, so the suppression still works (verified: the rule fires without the marker and is silenced with it).</violation>
</file>

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic


/// Holds a gallery request until the progressively mounted Custom Sidebars
/// section is ready to present it.
// lint:allow namespace-type — one-shot, main-actor handoff from a host menu to the lazily mounted Custom Sidebars section (#15931); candidate to become an injected SettingsRuntime value.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P3: This plain // comment between the enum's /// doc block and the declaration detaches the doc comment: Swift associates a doc comment only with the declaration it immediately precedes, so CustomSidebarTemplateGalleryRequest loses "Holds a gallery request until the progressively mounted Custom Sidebars section…" in Xcode quick help / DocC. Convert the line to a /// doc line so it stays part of the doc block; the namespace scanner matches the marker against raw text regardless, so the suppression still works (verified: the rule fires without the marker and is silenced with it).

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Environment/SettingsHostActions.swift, line 13:

<comment>This plain `//` comment between the enum's `///` doc block and the declaration detaches the doc comment: Swift associates a doc comment only with the declaration it immediately precedes, so `CustomSidebarTemplateGalleryRequest` loses "Holds a gallery request until the progressively mounted Custom Sidebars section…" in Xcode quick help / DocC. Convert the line to a `///` doc line so it stays part of the doc block; the namespace scanner matches the marker against raw text regardless, so the suppression still works (verified: the rule fires without the marker and is silenced with it).</comment>

<file context>
@@ -10,6 +10,7 @@ public extension Notification.Name {
 
 /// Holds a gallery request until the progressively mounted Custom Sidebars
 /// section is ready to present it.
+// lint:allow namespace-type — one-shot, main-actor handoff from a host menu to the lazily mounted Custom Sidebars section (#15931); candidate to become an injected SettingsRuntime value.
 @MainActor
 public enum CustomSidebarTemplateGalleryRequest {
</file context>
Suggested change
// lint:allow namespace-type — one-shot, main-actor handoff from a host menu to the lazily mounted Custom Sidebars section (#15931); candidate to become an injected SettingsRuntime value.
/// lint:allow namespace-type — one-shot, main-actor handoff from a host menu to the lazily mounted Custom Sidebars section (#15931); candidate to become an injected SettingsRuntime value.

#15931 left two more breaks behind the compile error: the app's sidebar
menu calls CustomSidebarTemplateGalleryRequest without importing
CmuxSettingsUI, and the template catalog only stripped '//   cp Examples/'
install lines, so workspaces.js kept its '// Install:  cp Examples/...'
line and CustomSidebarOnboardingAssetsTests failed.

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

github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

CI fast guards passes on 8ec30fb09c (https://github.com/manaflow-ai/cmux/actions/runs/36891608647).

teamleaderleo and others added 2 commits October 1, 2026 11:48
Merge-main commit by scripts/merge-main.sh.
Merged by scripts/merge-main.sh: origin/main at 15aa32c.

Merge-main-previous-head: 0279a2c
Merge-main-base: 15aa32c
#15673 added a check-agent-hook-docs.py step to static-preflight, and
test_static_preflight_rejects_stale_embedded_schema_before_native_work
replays every step in a stub repo that lacked that script. Stub any
script the steps reference.

#15931 added Examples/CustomSidebars/manifest.json, the template catalog
index, which the downloadable-examples validation test counted as a
broken sidebar. Exclude it.

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

cursor Bot commented Oct 1, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Subagent review at e6ba67d (net diff vs main): approve.

  • The lint:allow falls inside lint_swift_namespaces.py's window, and the lint exits 0.
  • import CmuxSettingsUI: the app target already links it, and no symbols become ambiguous.
  • The catalog filter strips only the five cp Examples/CustomSidebars/ install comments, and the template parity test still holds.
  • The bonsplit change moves forward and touches only tests.
  • In the CI fixture stubbing, real scripts are copied over the stubs afterwards, and the test passes when run locally.
  • Excluding manifest is the right test fix. Optional follow-up: the sidebar loader could skip manifest.json.

@cubic-dev-ai cubic-dev-ai 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.

1 issue found across 2 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="Packages/macOS/CmuxSwiftRenderUI/Tests/CmuxSwiftRenderUITests/CustomSidebarValidationTests.swift">

<violation number="1" location="Packages/macOS/CmuxSwiftRenderUI/Tests/CmuxSwiftRenderUITests/CustomSidebarValidationTests.swift:105">
P3: `sidebars.filter(\.isValid).count == 19` and `sidebars.allSatisfy(\.isValid)` assert the same property: the name comparison above pins `sidebars` to exactly these 19 names, so "19 of them valid" is the same statement as "all valid". Keep only one — `allSatisfy` gives better failure diagnostics.</violation>
</file>

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment on lines +105 to +106
#expect(sidebars.filter(\.isValid).count == 19)
#expect(sidebars.allSatisfy(\.isValid))

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P3: sidebars.filter(\.isValid).count == 19 and sidebars.allSatisfy(\.isValid) assert the same property: the name comparison above pins sidebars to exactly these 19 names, so "19 of them valid" is the same statement as "all valid". Keep only one — allSatisfy gives better failure diagnostics.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At Packages/macOS/CmuxSwiftRenderUI/Tests/CmuxSwiftRenderUITests/CustomSidebarValidationTests.swift, line 105:

<comment>`sidebars.filter(\.isValid).count == 19` and `sidebars.allSatisfy(\.isValid)` assert the same property: the name comparison above pins `sidebars` to exactly these 19 names, so "19 of them valid" is the same statement as "all valid". Keep only one — `allSatisfy` gives better failure diagnostics.</comment>

<file context>
@@ -98,10 +98,12 @@ struct CustomSidebarValidationTests {
-        #expect(report.validCount == 19)
-        #expect(report.errorCount == 0)
+        #expect(sidebars.map(\.name).sorted() == ["activity", "agents-board", "agents-cards", "agents-dense", "agents-focus", "agents-timeline", "btop-agents", "clock", "compact", "finder", "focus", "kitchen-sink", "panel-info", "panel-sessions", "panel-subagents", "panel-todo", "ports", "status-board", "workspaces"])
+        #expect(sidebars.filter(\.isValid).count == 19)
+        #expect(sidebars.allSatisfy(\.isValid))
     }
</file context>
Suggested change
#expect(sidebars.filter(\.isValid).count == 19)
#expect(sidebars.allSatisfy(\.isValid))
#expect(sidebars.allSatisfy(\.isValid))

#15931 narrowed the bundled templates to six curated ids, so
exampleTemplate(id: "focus") now returns nil and
customSidebarOnboardingCopiesBundledExampleWithoutOverwriting fails its
#require. Use agents-board, which stays in the catalog.

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

Copy link
Copy Markdown
Collaborator Author

Since the subagent review at e6ba67d: 8ec30fb only changes the onboarding copy test's template id from focus, which is no longer bundled, to agents-board. This is a test-only change, and I'm landing it on green without another review.

@teamleaderleo
teamleaderleo merged commit 59af434 into main Oct 1, 2026
69 checks passed
@teamleaderleo
teamleaderleo deleted the fix/main-green branch October 1, 2026 16:49
@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

Merge receipt for 8ec30fb09c: every check was green at merge (20 verified; 19 skipped by policy). Full suite runs on main after merge.

rustybret pushed a commit to rustybret/bmux that referenced this pull request Oct 1, 2026
59af434 fix: unblock main CI (settings compile, bonsplit tests) (manaflow-ai#16408)
teamleaderleo added a commit that referenced this pull request Oct 1, 2026
* test: repair four package test targets that main stopped compiling or passing

- CmuxAgentJournal: #15279 called draft(to:senderSurfaceId:body:) after
  #15863 put body before senderSurfaceId.
- CmuxFoundation: #16378's Codex TOML tests expected an appended
  [features] table, but the editor rewrites an existing hooks = false in
  place inside its marker block. Assert that block instead.
- CmuxSwiftRenderUI: #16408's allSatisfy(\.isValid) inside #expect does
  not compile (the macro makes the key path a throwing argument).
- CmuxUpdaterUI: #16357 reverted UpdateBadge.hostedIconRequest and the
  CmuxAppKitSupportUI dependency but left #15756's UpdateBadgeTests.

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

* ci: let consumer app-host tests find the source tree again

#16116 dropped the /private/tmp/cmux-ci/src alias in favor of
CMUX_CI_RUNTIME_SOURCE_ROOT, but xcodebuild only forwards TEST_RUNNER_
variables to the test host, so SwiftTestingAssertions.sourceURL() fell
back to the producer's #filePath. On a consumer runner that never
compiled, dozens of source-backed tests (shell integration, wrappers,
source scans) then fail with file-not-found.

Forward the root as TEST_RUNNER_CMUX_CI_RUNTIME_SOURCE_ROOT, and alias
the producer's canonical src to this checkout when nothing is there, for
raw #filePath users (cmuxCLITests, CLI dev-resource fallbacks).

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

* test: repair two agent notification tests main never ran green

- AgentSemanticNotificationDeliveryTests (#15974): enqueue a session-
  scoped prompt only after binding that session to the surface, which
  notificationRequestIsCurrent has required since #11976. The PR merged
  with its app-host shards cancelled.
- testCodexStopWithMissedPromptSubmitClearsTerminalStaleTurn: since
  2f574d6 (#15345) turn_aborted is terminal for the transcript
  monitor, so its Stop replay may retire the aborted turn before the next
  Stop does. Accept either retirement and wait for it.

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

* ci: drop the producer-root alias; resolve CLI test sources through the runtime root

Review of 69a68d6: the restore-time alias at the producer's canonical src
breaks #16116's rule that restore never touches the producer root (two
wiring tests encode it) and can race a producer's rm/clone on shared
Macs. Instead, the two raw #filePath sites in cmuxCLITests read
CMUX_CI_RUNTIME_SOURCE_ROOT like SwiftTestingAssertions.sourceURL(), and
the CLI product step forwards it as TEST_RUNNER_.

The Codex aborted-turn test now captures from before the old prompt (a
fast monitor replay was missed) and asserts silence only on the
transcript-terminal path: the monitor replay settles the aborted turn as
a completed Stop, which notifies (#15345's behavior).

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

* ci: forward the runtime source root into the console-session test runner

The app-host shards run run-app-host-xcodebuild.sh through
run-in-console-session.sh, which forwards only an allowlist of
variables. CMUX_CI_RUNTIME_SOURCE_ROOT was not on it, so the
TEST_RUNNER_ forwarding never fired and sourceURL() kept falling back to
the producer's #filePath (run 36903763717 still showed /tmp/cmux-ci/src).

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

* ci: give the standalone CLI under test its bundled opencode plugin

The CLI product job tests Build/Products/Debug/cmux, where none of the
CLI's resource candidates exist, so 'hooks opencode install' only found
the plugin through its #filePath fallback into the source tree. Place it
beside the executable, one of the paths the CLI already searches.

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

* test: rename the older of two same-named Claude NODE_OPTIONS resume tests

#16031 added testClaudeResumeCommandStripsQuotedCmuxNodeOptionsRestoreModuleInHomeWithSpace
next to an existing test of the same name, so cmuxTests no longer
compiles and the shard planner rejects the duplicate selector. The older
one keeps a user --require, so name it for that.

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

* Revert "test: rename the older of two same-named Claude NODE_OPTIONS resume tests"

This reverts commit 852333a.

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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