Skip to content

cmux NEXT checks: No new SwiftUI and canary coverage pass again (re-point moved entries, lint keeps moved files, Sleepy shims) - #25021

Merged
teamleaderleo merged 3 commits into
feat-cmux-nextfrom
leo/next-base-red-swiftui
Oct 25, 2026
Merged

teamleaderleo merged 3 commits into
feat-cmux-nextfrom
leo/next-base-red-swiftui

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 25, 2026 •

Copy link
Copy Markdown
Collaborator

Base run 40146316318 ("cmux-next checks", e869761) fails two steps. This fixes both at the source. The three Labs reports-basket views were ported to AppKit in #25031 (merged, no allowlist entry), so with this PR the step reports 0 findings.

1. Checks job structure (SwiftCanaryFleetCoverage): #24978 added the production target CmuxNextUiLayerPreview, which CmuxNextApp does not reach (ci-target-graph.json). It joins the swift-canary-fleet case list, so a change to it runs the Mac canary instead of being vouched for by the app compile.

2. No new SwiftUI: 9 findings go to 0 (#25031 fixed the 3 basket findings). Allowlisted files after this PR: 156.

  • CmuxNextApps/Section/AppIconView.swift, AppSectionFrame.swift: lawrencecchen moved them from Store/Views/ in 84b3fc5. Both were allowlisted under the old path. 91d4ac2 then deleted the old-path entries as stale instead of re-pointing them. This re-points them. It restores entries that were already there; it does not widen the list.

  • Why it could happen, and the fix to the lint: a stale entry said "delete its line" even when the file had only moved, and the --base "a moved file keeps its entry" rule (f61b6a1) relies on git rename detection, which misses a move that also rewrote the file (AppIconView went from 123 lines to 38). The lint now (a) names the moved file's new path in the stale-entry finding ("change the line to the new path instead of deleting it") and (b) under --base, accepts an entry swapped one-for-one for the gone entry with the same file name. New cases in check-no-swiftui.test.sh cover both, and each fails against the old checker.

  • CmuxNextDesign/NightSky/NightSky.swift (02ce3d0): it was only the NSViewRepresentable shim around the Core Animation NightSkyView, for its single consumer SleepySceneView (allowlisted, Sleepy Mode wave 1 item 4). The shim now lives as a private type in SleepySceneView.swift, so CmuxNextDesign's sky is AppKit only.

  • Tests/CmuxNextAppTests/SleepySceneCostTests.swift, SleepySkySnapshotTests.swift (7b76fa2): they imported SwiftUI only to construct NSHostingView. SleepySceneView.hostView(...) -> NSView is now the one place the scene is bridged into AppKit. The tests and SleepyOverlayWindows call it, so all three drop SwiftUI, and SleepyOverlayWindows.swift's allowlist entry is deleted.

  • CmuxNextUiLayerPreview/UiLayerPreviewView.swift (cmux NEXT: host real SwiftUI preview leaf #24978) gets an entry, with this justification: cmux NEXT: host real SwiftUI preview leaf #24978 made it a Debug-only SwiftPM leaf product that exists to host real production SwiftUI (HairlineDivider, Icon, CmuxDialogActionButton) in the standalone UiLayerHost hot-reload preview. Per its body it is "off by default, excluded from CmuxNextApp and release app targets". An AppKit port would defeat its purpose, and it goes when those SwiftUI adapters go (design wave 4).

  • The --base growth check, after review 1: the same-name pairing is strictly one-to-one. The name must be unique among both the gone entries and the added entries, so one deleted Old/X.swift cannot admit two new X.swift files. A new entry for a file that already imported SwiftUI at the base adds no SwiftUI, so it is printed as a note: line, not a finding. The step passes and the growth stays visible. The allowlist still cannot admit a file that this PR makes import SwiftUI. This PR's own step prints three such notes (AppIconView, AppSectionFrame, UiLayerPreviewView) and passes. Self-test cases cover each rule, and each case fails when its rule is removed.

No capture: no visible change. Sleepy Mode draws the same SwiftUI tree in the same NSHostingView with the same NightSkyView; only the file that holds the representable and the line that builds the hosting view moved. Nothing else is UI-visible. No screenshot, for that reason.

Risk: low. Python lint and its self-test, one workflow case list, and a Swift file-placement change in Sleepy Mode. Verified locally: check-no-swiftui.py (ok: 0 findings, 156 allowlisted), check-no-swiftui.test.sh ok, the SwiftCanaryFleetCoverage logic (graph-reachable set equals the case list). Fleet cmux-ci compile-check --package CmuxNext passed (job 3a0e78dfe95b, 221 s) on this PR's commit before the base merge. That merge touches none of this PR's files.

Who introduced what: AppIconView/AppSectionFrame move by lawrencecchen (84b3fc5), with the entries deleted by a Leo lane (91d4ac2); NightSky and the Sleepy tests by lawrencecchen (02ce3d0, 7b76fa2); UiLayerPreview by a Leo lane (#24978); the reports basket by a Leo lane (#24616), later edited by lawrencecchen.

🤖 Generated with Claude Code

Agent session: cosmic-gray

…n base

- AppIconView and AppSectionFrame moved from Store/Views to Section (84b3fc5);
  their old-path entries were deleted (91d4ac2) instead of re-pointed. Re-point them.
- The lint now names a moved file's new path in the stale-entry finding, and a
  move that also rewrote the file keeps its entry under --base, so this cannot recur.
- NightSky's NSViewRepresentable moves beside its only consumer, SleepySceneView
  (allowlisted): CmuxNextDesign's sky is AppKit only. SleepySceneView.hostView is the
  one place the scene meets AppKit, so SleepyOverlayWindows and both Sleepy tests no
  longer import SwiftUI (SleepyOverlayWindows' entry is deleted).
- CmuxNextUiLayerPreview (#24978) is the Debug-only preview leaf that exists to host
  production SwiftUI; it gets an entry and joins the swift-canary-fleet target list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a1708f-432e-7f23-a9e8-11c5945da2f6&host=cosmic-gray
@github-actions

github-actions Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review a6d7b9a: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr25021 -f ref=leo/next-base-red-swiftui -f platform=macos -f backend_mode=local

red: cmux-next checks (god files, concurrency, crash safety, l10n); base red: the same failure on the base 349a6bb; does not block

Tour of a6d7b9afd4 (run)

The path-selected recorder failed for core-after, core-before; see the run artifact and failed manifests.

Path-selected interactions

Interaction Changed paths
core Packages/macOS/CmuxNext/Sources/CmuxNextApp/SleepyMode/SleepyOverlayWindows.swift
Packages/macOS/CmuxNext/Sources/CmuxNextApp/SleepyMode/SleepySceneView.swift
Packages/macOS/CmuxNext/Sources/CmuxNextDesign/NightSky/NightSky.swift
Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/SleepySceneCostTests.swift
Packages/macOS/CmuxNext/Tests/CmuxNextAppTests/SleepySkySnapshotTests.swift

Core UI (before): FAILED — 16 ok, 3 failed, 1 unavailable

tour

Video (mp4)

# Step Result Command
1 Launch ok
2 New workspace ok cmux workspace new --name Tour
3 Type in the terminal ok cmux workspace name:Tour screen current pane current tab current terminal current write --text "echo hello from the cmux-next tour\r"
4 A command reports progress: tab loading spinner ok cmux workspace name:Tour screen current pane current tab current terminal current write --text "clear; printf '\\033]9;4;3\\007'; sleep 900\r"
5 Split right failed: exited 1 cmux action run splitRight
6 Split down failed: exited 1 cmux action run splitDown
7 New terminal tab failed: exited 1 cmux action run newSurface
8 Browser tab ok cmux tab new-browser --url https://example.com
9 Hide the sidebar ok cmux action run toggleSidebar
10 Show the sidebar ok cmux action run toggleSidebar
11 Notification ok cmux notify --title Tour --body "Hello from CI"
12 Notifications panel ok cmux action run showNotifications
13 Agent chat ok cmux agent new-chat
14 Agent workspace ok cmux workspace new --name Agent
15 Agent starts ok cmux workspace name:Agent screen current pane current tab current terminal current write --text "clear; printf '\\033]7501;state=working\\033\\\\'; sleep 8; printf '\\033]7501;state=done\\033\\\\'; sleep 900\r"
16 An agent works: row working spinner ok cmux workspace new --name Notes
17 The agent finishes: done mark in the spinner's place ok
18 Session tree: keycaps on the first rows ok cmux settings set sidebar.sessionTree true
19 Session tree back off for later tours ok cmux settings set sidebar.sessionTree false
20 Profile menu unavailable: exited 1 (the menu shot needs a screen capture route) cmux action run sidebar.profileMenu

Failed steps:

5. Split right
Split right

6. Split down
Split down

7. New terminal tab
New terminal tab

Screenshots (12)

1. Launch
Launch

2. New workspace
New workspace

3. Type in the terminal
Type in the terminal

4. A command reports progress: tab loading spinner
A command reports progress: tab loading spinner

8. Browser tab
Browser tab

9. Hide the sidebar
Hide the sidebar

11. Notification
Notification

12. Notifications panel
Notifications panel

13. Agent chat
Agent chat

16. An agent works: row working spinner
An agent works: row working spinner

17. The agent finishes: done mark in the spinner's place
The agent finishes: done mark in the spinner's place

18. Session tree: keycaps on the first rows
Session tree: keycaps on the first rows

### Core UI \(after\): FAILED — 16 ok, 3 failed, 1 unavailable

tour

Video (mp4)

# Step Result Command
1 Launch ok
2 New workspace ok cmux workspace new --name Tour
3 Type in the terminal ok cmux workspace name:Tour screen current pane current tab current terminal current write --text "echo hello from the cmux-next tour\r"
4 A command reports progress: tab loading spinner ok cmux workspace name:Tour screen current pane current tab current terminal current write --text "clear; printf '\\033]9;4;3\\007'; sleep 900\r"
5 Split right failed: exited 1 cmux action run splitRight
6 Split down failed: exited 1 cmux action run splitDown
7 New terminal tab failed: exited 1 cmux action run newSurface
8 Browser tab ok cmux tab new-browser --url https://example.com
9 Hide the sidebar ok cmux action run toggleSidebar
10 Show the sidebar ok cmux action run toggleSidebar
11 Notification ok cmux notify --title Tour --body "Hello from CI"
12 Notifications panel ok cmux action run showNotifications
13 Agent chat ok cmux agent new-chat
14 Agent workspace ok cmux workspace new --name Agent
15 Agent starts ok cmux workspace name:Agent screen current pane current tab current terminal current write --text "clear; printf '\\033]7501;state=working\\033\\\\'; sleep 8; printf '\\033]7501;state=done\\033\\\\'; sleep 900\r"
16 An agent works: row working spinner ok cmux workspace new --name Notes
17 The agent finishes: done mark in the spinner's place ok
18 Session tree: keycaps on the first rows ok cmux settings set sidebar.sessionTree true
19 Session tree back off for later tours ok cmux settings set sidebar.sessionTree false
20 Profile menu unavailable: exited 1 (the menu shot needs a screen capture route) cmux action run sidebar.profileMenu

Failed steps:

5. Split right
Split right

6. Split down
Split down

7. New terminal tab
New terminal tab

Screenshots (12)

1. Launch
Launch

2. New workspace
New workspace

3. Type in the terminal
Type in the terminal

4. A command reports progress: tab loading spinner
A command reports progress: tab loading spinner

8. Browser tab
Browser tab

9. Hide the sidebar
Hide the sidebar

11. Notification
Notification

12. Notifications panel
Notifications panel

13. Agent chat
Agent chat

16. An agent works: row working spinner
An agent works: row working spinner

17. The agent finishes: done mark in the spinner's place
The agent finishes: done mark in the spinner's place

18. Session tree: keycaps on the first rows
Session tree: keycaps on the first rows

Tours are data in scripts/cmux-next/media/tours: add a step or a tour file to show your feature.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Owned by claude-sr2/base-red-checks on cosmic-gray · session

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Oct 25, 2026
@blacksmith-sh

blacksmith-sh Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Found 15 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmph4h5w34q/summary-fail.json (live):/summary-fail.json (live): View Logs
/tmp/tmpjwyp_zg1/summary-missing.json (live):/summary-missing.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
convention violations found (ERROR lines above)./
convention violations found (ERROR lines above).
View Logs
nightly.yml prepare-nightly-variant: 'Package prepared app for signing' is not in list/
nightly.yml prepare-nightly-variant: 'Package prepared app for signing' is not in list
View Logs
test_ephemeral_runners_keep_using_separate_job_temporaries (main.ReleaseBuildRetent
ionTests.test_ephemeral_runners_keep_using_separate_job_temporaries)/
test_ephemeral_runners_keep_using_separate_job_temporaries (main.ReleaseBuildRetent
ionTests.test_ephemeral_runners_keep_using_separate_job_temporaries)
View Logs
test_owned_cache_size_cap_reclaims_only_the_selected_lane (main.ReleaseBuildRetenti
onTests.test_owned_cache_size_cap_reclaims_only_the_selected_lane)/
test_owned_cache_size_cap_reclaims_only_the_selected_lane (main.ReleaseBuildRetenti
onTests.test_owned_cache_size_cap_reclaims_only_the_selected_lane)
View Logs

...and 5 more test failures. View all on Blacksmith: run 40166395469, run 40166395540

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

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Bead cx-2z2w2 created for this PR by the cmux coordinator.

@teamleaderleo
teamleaderleo merged commit bc010d8 into feat-cmux-next Oct 25, 2026
136 of 144 checks passed
@teamleaderleo
teamleaderleo deleted the leo/next-base-red-swiftui branch October 25, 2026 06:01
@github-actions

github-actions Bot commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

This branch was previously deployed

1 inactive deployment
ci-routing-agent — a6d7b9af Deployed Oct 25, 2026 by teamleaderleo via namespace autofix #2589
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant