Skip to content

Agent activity reorder follow-ups: group on-top check, search, subtitle - #15362

Merged
teamleaderleo merged 4 commits into
mainfrom
fix/agent-activity-reorder-nits
Sep 28, 2026
Merged

teamleaderleo merged 4 commits into
mainfrom
fix/agent-activity-reorder-nits

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Sep 28, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Follow-ups from the review of #15216 (RFC #15202):

  • Group on-top check. WorkspaceReorderCoordinator.isAtTopOfUnpinnedTier only looked at the top-level row, so a member deep inside a group that sits first counted as on top. The agent-activity gate then skipped the in-group move that moveTabToTopForNotification would make. A group member now counts as on top only when its group is first and it is the first member after the anchor, which is the slot a notification bump promotes it to. Pinned members of an unpinned group are skipped, since the bump keeps them ahead of promoted members.
  • Settings search. The reorder setting's search aliases (SettingsSearchAliases, curated synonyms, and every locale's alias string) now include agent activity terms (agent, activity, prompt, turn, finished, needs input), plus Japanese terms.
  • Subtitle. The Settings subtitle, the cmux.json schema description and the settings reference now say that sending a prompt also moves the row in Agent Activity mode. The subtitle is updated in all 19 locales.
  • Dead code. Removed the unused WorkspaceActivityReorderGate.forget(workspaceId:) and its test. Expired moves are already pruned and closed workspaces are dropped on drain.

No behavior change in the default notifications mode.

Testing

  • CmuxWorkspaces WorkspaceCoordinatorTests.isAtTopOfUnpinnedTierRequiresAGroupMemberToLeadItsGroup: the anchor and first member count as on top, a later member does not, and after a notification bump the promoted member does.
  • localization_catalog.py check and localize_changes.py pass; the schema was regenerated with generate-cmux-config-schema.py.
  • No native app build ran locally; CI compiles and tests it.

Changelog

Changed: Settings search finds Reorder on Notification by agent activity terms, and its description mentions that sending a prompt also moves the workspace in Agent Activity mode

🤖 Generated with Claude Code

- isAtTopOfUnpinnedTier requires a group member to lead its group, the
  slot a notification bump promotes it to, so the gate no longer skips
  the in-group move.
- Settings search finds the reorder setting by agent activity terms.
- The subtitle, schema and settings reference mention that a new prompt
  also moves the row (all 19 locales).
- Remove the unused WorkspaceActivityReorderGate.forget(workspaceId:).

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

cursor Bot commented Sep 28, 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

Copy link
Copy Markdown
Contributor

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

@github-actions

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Dogfood build of 1e1e7e24e3d2b2a72f8ab5e4ffd8a1ceec7b5c8f

cmux DEV pr-15362-1e1e7e24.app

The link opens this exact commit in the cmux dev menu bar app. The build starts on each push and the page waits until it is ready; a newer push replaces it. It signs in against production, so Cloud or backend changes still need a tagged build with a development backend.

Dogfood tours of 1e1e7e24

sidebar-and-chrome-tour at 1e1e7e24: failure (run)

the run left no frames (see the run log)

agent-activity-reorder at 1e1e7e24: not run (run)

the tour's runner could not load CI's build, and the tour does not compile its own; the next CI attempt of this head tries again

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.

@coderabbitai

coderabbitai Bot commented Sep 28, 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: c7008253-f976-4dfd-9bc6-f452822839ef

📥 Commits

Reviewing files that changed from the base of the PR and between b8afe20 and a73442d.

⛔ Files ignored due to path filters (1)
  • Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidation/CmuxConfigSchema.generated.swift is excluded by !**/*.generated.*
📒 Files selected for processing (10)
  • Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift
  • Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/AppSection.swift
  • Packages/macOS/CmuxWorkspaces/Sources/CmuxWorkspaces/Coordinators/WorkspaceReorderCoordinator.swift
  • Packages/macOS/CmuxWorkspaces/Sources/CmuxWorkspaces/Reorder/WorkspaceActivityReorderGate.swift
  • Packages/macOS/CmuxWorkspaces/Tests/CmuxWorkspacesTests/WorkspaceActivityReorderGateTests.swift
  • Packages/macOS/CmuxWorkspaces/Tests/CmuxWorkspacesTests/WorkspaceCoordinatorTests.swift
  • Resources/Localizable.xcstrings
  • Sources/SettingsSearchAliases.swift
  • skills/cmux-settings/references/all-keys.md
  • web/data/cmux.schema.json
💤 Files with no reviewable changes (2)
  • Packages/macOS/CmuxWorkspaces/Sources/CmuxWorkspaces/Reorder/WorkspaceActivityReorderGate.swift
  • Packages/macOS/CmuxWorkspaces/Tests/CmuxWorkspacesTests/WorkspaceActivityReorderGateTests.swift

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


📝 Walkthrough

Walkthrough

The changes update how grouped workspaces qualify as first in the unpinned tier, remove a workspace activity reorder gate method and its test, and revise the Reorder on Notification setting’s descriptions and search terms.

Changes

Workspace notification reordering

Layer / File(s) Summary
Group-aware top-position checks
Packages/macOS/CmuxWorkspaces/Coordinators/WorkspaceReorderCoordinator.swift, Packages/macOS/CmuxWorkspaces/Tests/CmuxWorkspacesTests/WorkspaceCoordinatorTests.swift
The top-position check now considers whether a workspace is the first non-anchor member of its group. A test covers the initial group order and notification-driven promotion.
Activity reorder gate method removal
Packages/macOS/CmuxWorkspaces/Reorder/WorkspaceActivityReorderGate.swift, Packages/macOS/CmuxWorkspaces/Tests/CmuxWorkspacesTests/WorkspaceActivityReorderGateTests.swift
The gate’s forget(workspaceId:) method and its test are removed.
Setting descriptions and search terms
Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/AppSection.swift, Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift, Resources/Localizable.xcstrings, Sources/SettingsSearchAliases.swift, skills/cmux-settings/references/all-keys.md, web/data/cmux.schema.json
Descriptions add prompt submission as an Agent Activity trigger. Search terms add agent activity, prompts, completed turns, and input-needed terms.

Priority: ⬇️ Low

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

Change: Feature

Suggested reviewers: austinywang

Merge Risk: ⚪ Minimal · up to a7344

No actionable issue remains from the available evidence. The change is mergeable after normal checks.

Security Architecture Review

Security architecture risk: 🔵 Low · up to a7344

The change can alter when a grouped workspace row moves, but the inspected flow retains its existing pinned, selected, and interaction checks. No new privileged action was identified. Some execution and security coverage remains incomplete.

Retained concerns
No architecture-level concerns identified.

Security review details

Security Blast Radius

  • inferred — The identified effect is an ordering change to workspace rows in the existing application flow. The inspected path does not identify a new credential, network, or privileged sink; this does not establish that uninspected paths are safe.

Trust Boundaries and Controls

  • observed — The activity-mode decision is based on the workspace identifier’s current tab-manager context; admission and deferred drain both apply the pinned, selected, and position checks.

Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error, 1 warning)

Check name Status Explanation Resolution
Cmux Full Internationalization ❌ Error The PR changes user-facing web metadata without locale-specific coverage. web/data/cmux.schema.json changes the app.reorderOnNotification description, and the production configuration page imports… Add a stable descriptionKey for app.reorderOnNotification in web/data/cmux.schema.json, then add a translated matching entry to every locale in web/messages/ (ar, bs, da, de, en, es, fr, it, ja, km, ko, no, `…
Docstring Coverage ⚠️ Warning Docstring coverage is 40.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 5 functions across 5 files. (3 skipped: 3… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (23 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 reviewed diff contains no Cloud terminal creation or transport changes. It only updates workspace reorder logic/tests, settings aliases and descriptions, localization, and generated schema t…
Cmux Swift Actor Isolation ✅ Passed PASS. The production Swift diff changes only a string in the generated schema, search aliases, and a subtitle; removes an existing method from the already-Sendable value-type gate; and adds logic in…
Cmux Swift Blocking Runtime ✅ Passed PASS. The authoritative PR diff adds only group-position logic and text/alias changes in production Swift, and removes WorkspaceActivityReorderGate.forget(workspaceId:). It introduces no semaphores,…
Cmux Browser Automation Off-Main ✅ Passed PASS: The authoritative PR diff changes workspace reordering, settings aliases/descriptions, localization, schema data, and related tests. It does not modify Sources/TerminalController.swift, ControlC…
Cmux Expensive Synchronous Load ✅ Passed The production Swift diff adds no synchronous agent-history load, parser, directory scan, file read, or JSON/JSONL decode. The only behavioral Swift change is an in-memory group/member ordering check …
Cmux Cache Substitution Correctness ✅ Passed PASS. The Swift diff does not replace an authoritative read with a cached value in a persistence, history, undo, or snapshot path. WorkspaceReorderCoordinator.isAtTopOfUnpinnedTier still reads the l…
Cmux No Hacky Sleeps ✅ Passed The check is not triggered. The authoritative diff changes Swift source/tests plus localization, JSON, and Markdown files; it changes no TypeScript, JavaScript, shell, or non-Swift runtime/build scrip…
Cmux Algorithmic Complexity ✅ Passed The production change adds only a constant number of linear lookups in isAtTopOfUnpinnedTier: one group lookup and one first-member scan. It does not add nested scans, a new batch loop, sorting, or …
Cmux Swift Concurrency ✅ Passed PASS — The Swift diff adds only synchronous group-position checks and a synchronous test, removes an unused synchronous method and its test, and updates strings. It adds no background Dispatch, Combin…
Cmux Swift @Concurrent ✅ Passed PASS: The Swift diff does not add or modify any async, nonisolated, @concurrent, actor-isolation, or UI-isolation call-site behavior. The production changes are synchronous (`isAtTopOfUnpinnedTi…
Cmux Swift Package Boundaries ✅ Passed The changed production logic remains in the existing CmuxWorkspaces SwiftPM target, and the settings changes remain in CmuxSettingsUI. The only app-root Swift edit is a small `SettingsSearchAliase…
Cmux Swiftpm Lockfiles ✅ Passed PASS: The authoritative PR diff changes only Swift source, tests, localization, search aliases, generated schema, and documentation. It does not change any Package.swift, Package.resolved, `.gitig…
Cmux Swift Logging ✅ Passed PASS: The authoritative PR diff adds or changes no Swift logging. The Swift changes update setting descriptions and aliases, refine group-position logic, add a coordinator test, and remove an unused g…
Cmux User-Facing Error Privacy ✅ Passed The PR does not add or change a user-facing error, alert, command output, API error body, or recovery message. Its user-visible changes are settings subtitles, localization, search aliases, and schema…
Cmux Swiftui State Layout ✅ Passed PASS. The only changed SwiftUI view code is the AppSection subtitle string. The other Swift changes update coordinator logic, aliases, schema text, and tests. The diff adds no ObservableObject/`@P…
Cmux Architecture Rethink ✅ Passed The PR passes the architectural check. The only production Swift behavior change is a local invariant fix in the existing @MainActor WorkspaceReorderCoordinator: a grouped workspace is at the notifica…
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PASS. The PR changes settings text/search aliases, workspace reorder logic, gate cleanup, and tests. It does not add or materially change an NSWindow, NSPanel, NSWindowController, SwiftUI Window, or W…
Cmux Source Artifacts ✅ Passed PASS: The PR changes only intentional source, test, configuration, localization, and documentation files. The only generated file, `Packages/macOS/CmuxFoundation/Sources/CmuxFoundation/ConfigValidatio…
Cmux No Test Or Debug Seam In Production Source ✅ Passed PASS. The PR changes only production Swift behavior and strings, and removes WorkspaceActivityReorderGate.forget(workspaceId:). The authoritative diff adds no #if DEBUG or test-build guard, no deb…
Title check ✅ Passed The title clearly identifies the main changes: agent activity reorder follow-ups, the group on-top check, search aliases, and the subtitle.
Description check ✅ Passed The description includes a clear summary, testing details, changelog entry, localization results, and the known limitation that no native build ran locally. It omits the template's Demo Video and Chec…
Full details: Docstring Coverage

Explanation

Docstring coverage is 40.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 5 functions across 5 files. (3 skipped: 3 unsupported.)

Full details: Cmux Full Internationalization

Explanation

The PR changes user-facing web metadata without locale-specific coverage. web/data/cmux.schema.json changes the app.reorderOnNotification description, and the production configuration page imports this schema and renders property.description when no descriptionKey exists. The diff changes no web/messages/ file. All 20 locale message files listed by web/i18n/routing.ts lack a matching reorder description key. The Swift subtitle and Resources/Localizable.xcstrings entries do have localized coverage, but they do not localize this web-rendered schema text.

Resolution

Add a stable descriptionKey for app.reorderOnNotification in web/data/cmux.schema.json, then add a translated matching entry to every locale in web/messages/ (ar, bs, da, de, en, es, fr, it, ja, km, ko, no, pl, pt-BR, ru, th, tr, uk, zh-CN, and zh-TW). Ensure the web configuration page uses that key for the changed description, and regenerate the embedded Swift schema if the schema source changes.

  • 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

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.

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

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

CI failure attribution

CI passes on 1e1e7e24e3 (run 36426049030 attempt 2).

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.

The PR media tour selector (#15280) requires every checked-in tour to
declare the paths that pick it; this tour predates that rule.

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

This comment has been minimized.

…r-nits

# Conflicts:
#	dogfood/scenarios/agent-activity-reorder.json
@cursor

cursor Bot commented Sep 28, 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
teamleaderleo merged commit 2638d56 into main Sep 28, 2026
134 of 139 checks passed
@teamleaderleo
teamleaderleo deleted the fix/agent-activity-reorder-nits branch September 28, 2026 14:02
@github-actions

Copy link
Copy Markdown
Contributor

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

rustybret pushed a commit to rustybret/bmux that referenced this pull request Sep 28, 2026
0e298fb ci: wait for the product's canonical root instead of compiling beside it (manaflow-ai#15379)
3088273 ci: UI test runs adopt compile admission's product, skip the re-upload, and report progress (manaflow-ai#15331)
b681e7e Keep a pending banner quiet once its pane is focused (manaflow-ai#15357)
03a2f6e Record that cloud_vm_sessions.attachment_count is cumulative (manaflow-ai#15321)
48258b4 fix(iroh-v2): check the team socket cap before opening the session (manaflow-ai#15340)
2638d56 Agent activity reorder follow-ups: group on-top check, search, subtitle (manaflow-ai#15362)
9ed83fd Dogfood journey: record whether a paused Cloud machine is asleep (manaflow-ai#15293)
7171ea8 Add app.tabBarVisibility to hide the pane tab bar when a pane has one tab (manaflow-ai#15294)
8743ec8 test: stop Computer Use onboarding tests waiting out the helper status deadline (manaflow-ai#15329)
6e4f1da ci: drain the snapshot's owned queue by what the machines finished since (manaflow-ai#15374)
9373164 ci: queue a pull request's admission for a root runner when Blacksmith's wait is longer (manaflow-ai#15376)
634a155 test: expect injected pane attention accent (manaflow-ai#15370)
cd030e9 Keep a named Cloud machine's prompt name instead of flipping to its slug (manaflow-ai#15288)
24ee0ee Exit 1 when cmux terminal screen wait times out (manaflow-ai#15282)
1b857ac test: cover a live Codex turn owner keeping its turn on SessionStart (manaflow-ai#13588)
56ec600 PR media: prune media of long-closed pull requests (manaflow-ai#15364)
4898cde ci: bound the SwiftPM scratch holder and cache scratch sizes (manaflow-ai#15366)

# Conflicts:
#	.github/workflows/ci-guards.yml
#	.github/workflows/ci.yml
#	.github/workflows/test-e2e.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