Skip to content

Gate Feed behind Beta Features (mirror Dock), default off - #5174

Merged
austinywang merged 2 commits into
mainfrom
austin/issue-5166-feed-beta
Jun 2, 2026
Merged

austinywang merged 2 commits into
mainfrom
austin/issue-5166-feed-beta

Conversation

@austinywang

@austinywang austinywang commented Jun 2, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #5166

What

Makes Feed an opt-in Beta Feature gated exactly like Dock, instead of being unconditionally available in the right-sidebar mode switcher. Feed is now hidden until enabled under Settings → Beta Features, using the same logic and default (false) as Dock.

Why

How

This reinstates only the gating-removal hunks of #3854 while preserving that PR's Feed focus-handling bugfixes (and the "Activity" → "All Activity" rename). Since #3854, the Settings layer was refactored into Swift packages, so Dock's gating now lives in two parallel registrations — Feed is mirrored in both:

Runtime gating

  • RightSidebarBetaFeatureSettings (WorkspaceRuntimeSettings.swift): adds feedEnabledKey / defaultFeedEnabled / isFeedEnabled(defaults:) mirroring the Dock members. New key rightSidebar.beta.feed.enabled, default false.
  • RightSidebarMode+Availability.swift: .feed is gated on feedEnabled, threaded through availableModes / isAvailable next to dockEnabled (reverts to the pre-Enable Feed by default #3854 shape). FileExplorerState's mode clamping and modeShortcut(_:) pick this up automatically via the defaults-based overloads.
  • RightSidebarPanelView.swift: reads feedEnabled via @AppStorage and feeds it into availableModes + refresh-on-change.

Settings UI / search / config

  • CmuxSettings/BetaFeaturesCatalogSection: adds the rightSidebarFeed catalog key (so it's cmux.json-configurable, default off).
  • CmuxSettingsUI/BetaFeaturesSection: re-adds the Feed toggle row (SettingsBetaFeedToggle) with on/off subtitle. The plural beta warning ("These features are experimental…") already covers >1 feature (Dock + Extensions), so it's unchanged.
  • App-target index (SettingsNavigation, SettingsSearchAliases) and package index (CuratedSettingEntry+Default, SettingsSectionID): register the feed setting, search anchor, and aliases mirroring dock.
  • CommandPaletteSettingsToggle: adds the betaFeatures.feed toggle command.
  • Localizable.xcstrings: restores settings.betaFeatures.feed / .subtitleOn / .subtitleOff (en + ja).

Decision: feed hooks are NOT gated on this flag

The issue flags an open question (out of scope / follow-up): should disabling Feed also skip installing the per-tool-use feed hooks (CLI/CMUXCLI+AgentHookDefinitions.swift feedHookEvents, the #5146 driver)?

I deliberately left the feed hooks untouched in this PR — they are not gated on rightSidebar.beta.feed.enabled. Rationale:

  1. Mirror Dock precisely. Dock's gating is purely UI/mode-availability; it does not touch hook installation. This PR does the same for Feed.
  2. The hooks aren't exclusive to the right-sidebar Feed mode. feed.push populates FeedCoordinator.shared.store, which also backs the Dock-hosted Feed TUI (cmux feed tui, exercised by FeedSidebarUITests). Gating hook installation on the right-sidebar Feed flag would silently break the Feed TUI for users who enabled Dock but not Feed.
  3. Wrong layer for the gate. Feed hooks are installed cross-process by the cmux CLI inside workspace shells (including remote / cloud VMs), where the app's UserDefaults beta flag isn't an appropriate or reliable signal.

Reducing feed-hook traffic is better handled holistically in #5146. This PR shrinks the opt-in surface (Feed is hidden by default) without risking the Dock Feed TUI.

Testing

All compile + behavioral verification done locally (per repo policy, full E2E/UI runs happen in CI):

  • ✅ App (cmux) build, unit-test target (cmux-unit) build, and UI-test target (cmux build-for-testing) all succeed.
  • ✅ CmuxSettingsUI package tests pass (12 tests) — including everyCuratedSettingEntryIsReachable (confirms the new setting:betaFeatures:feed anchor resolves) and rowAnchorsAreUniqueAcrossRows.
  • Restored gated assertions in FileExplorerStateModePersistenceTests (disabled Feed clamps to Files; default command-palette modes exclude Feed) and RightSidebarCommandPaletteTests.
  • Re-added the feed-enable launch arg to RightSidebarChromeHeightUITests (feed secondary bar reachable again) and added a Feed toggle derived-subtitle test to SettingsSidebarBetaBehaviorUITests mirroring the Dock one.

Note: CmuxSettings's SettingCatalogTests.userDefaultsStorageKeysAreUnique fails on origin/main due to 11 pre-existing duplicate UserDefaults keys elsewhere in the catalog (120/109 without this change, 121/110 with it — identical duplicate count). It is unrelated to this PR and out of scope.

🤖 Generated with Claude Code


View with Codesmith Autofix with Codesmith
Need help on this PR? Tag @codesmith with what you need. Autofix is disabled.


Note

Low Risk
UI/settings and mode-availability gating only; users with a saved Feed mode may be clamped to Files until they opt in. Feed hooks and data paths are untouched.

Overview
Makes Feed an opt-in Beta Feature (default off), matching Dock: rightSidebar.beta.feed.enabled gates whether Feed appears in the right-sidebar mode switcher and whether stored/selected modes can stay on Feed.

Adds the Feed toggle in Settings → Beta Features (catalog, search/command palette, localization) and wires runtime availability through RightSidebarBetaFeatureSettings, RightSidebarMode availability, and RightSidebarPanelView (@AppStorage + refresh when the flag changes). Persisted Feed mode falls back to Files when the flag is off; tests/UI coverage updated accordingly.

Feed agent hooks are unchanged — disabling the beta flag only hides the sidebar mode, not hook installation.

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


Summary by cubic

Gates the right‑sidebar Feed behind Beta Features, default off, mirroring Dock. Feed is hidden until enabled in Settings → Beta Features; feed hooks remain installed and are not gated by this flag.

  • New Features
    • Added rightSidebar.beta.feed.enabled (default false) and gated .feed availability on it.
    • Settings/Search: added Feed toggle row with on/off subtitle, catalog key, search anchor/aliases, and a Command Palette toggle.
    • UI/runtime: right sidebar reads the flag via @AppStorage, updates available modes, and refreshes on change.
    • Localization and tests: added strings; updated tests for clamping, command palette contents, and Settings subtitle behavior; re-enabled a UI test via a launch arg.

Written for commit 5688dc4. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • New Features

    • Added "Feed" experimental mode toggle in Beta Features (disabled by default). Appears in Beta settings, command palette, and right-sidebar mode list; UI updates reflect its on/off state with dynamic subtitles and immediate availability changes.
  • Search & Navigation

    • Settings search and navigation anchors updated so the Feed setting is discoverable.
  • Localization

    • Added localized strings for Feed label and on/off subtitles.
  • Tests

    • Expanded tests to cover Feed behavior, persistence, availability, and UI interactions.

Feed was made unconditionally available by #3854 (5829da2, "Enable Feed
by default"), which deleted its beta gating. This reinstates the gating —
mirroring Dock exactly — so Feed is hidden from the right-sidebar mode
switcher until the user opts in under Settings → Beta Features. Default is
off, same as Dock.

Only the gating-removal hunks of #3854 are reinstated; that PR's Feed
focus-handling bugfixes (and the "All Activity" rename) are preserved.

The Settings layer was refactored into Swift packages since #3854, so Feed
is mirrored in both parallel registrations Dock now lives in:

- RightSidebarBetaFeatureSettings: add feedEnabledKey / defaultFeedEnabled
  / isFeedEnabled mirroring the Dock members
  (rightSidebar.beta.feed.enabled, default false).
- RightSidebarMode+Availability: gate .feed on feedEnabled, threaded
  through availableModes / isAvailable alongside dockEnabled (reverts to
  the pre-#3854 shape).
- RightSidebarPanelView: read feedEnabled via @AppStorage and feed it into
  availability + refresh-on-change.
- App-target search index (SettingsNavigation, SettingsSearchAliases) and
  CmuxSettingsUI package index (CuratedSettingEntry+Default, SettingsSectionID):
  register the feed beta setting, anchor, and aliases mirroring dock.
- CmuxSettings BetaFeaturesCatalogSection: add rightSidebarFeed catalog key
  (cmux.json-configurable, default false).
- CmuxSettingsUI BetaFeaturesSection: re-add the Feed toggle row
  (SettingsBetaFeedToggle) with on/off subtitle.
- CommandPaletteSettingsToggle: add the betaFeatures.feed toggle command.
- Localizable.xcstrings: restore settings.betaFeatures.feed /
  .subtitleOn / .subtitleOff (en + ja). The plural beta warning already
  covers >1 feature (Dock + Extensions), so it is unchanged.

Tests:
- FileExplorerStateModePersistenceTests / RightSidebarCommandPaletteTests:
  restore the gated assertions (disabled Feed clamps to Files; default mode
  set excludes Feed).
- RightSidebarChromeHeightUITests: re-add the feed-enable launch arg so the
  feed secondary bar is reachable.
- SettingsSidebarBetaBehaviorUITests: add a Feed toggle derived-subtitle
  test mirroring the Dock one.
- SettingsRowAnchorResolutionTests: register the feed search anchor.

Feed hooks (per-tool-use feed.push installers) are intentionally NOT gated
on this flag — see PR description.

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

vercel Bot commented Jun 2, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment Jun 2, 2026 6:36am
cmux-staging Building Building Preview, Comment Jun 2, 2026 6:36am

@coderabbitai

coderabbitai Bot commented Jun 2, 2026 •

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

Failed to post review comments

📝 Walkthrough

Walkthrough

Gates the right-sidebar Feed mode behind a new opt-in beta toggle. Adds the persistent setting and runtime accessor, restores the Settings UI toggle and localization, threads feedEnabled into availability and panel logic, registers search/navigation/command-palette entries, and updates tests.

Changes

Feed Beta Feature Implementation

Layer / File(s) Summary
Beta Feature Settings Definition
Packages/CmuxSettings/.../BetaFeaturesCatalogSection.swift, Sources/App/WorkspaceRuntimeSettings.swift
New rightSidebarFeed setting with rightSidebar.beta.feed.enabled, default false, and isFeedEnabled(defaults:) accessor.
Settings UI, Navigation, and Search Discovery
Packages/CmuxSettingsUI/.../BetaFeaturesSection.swift, .../CuratedSettingEntry+Default.swift, .../SettingsSectionID.swift, Resources/Localizable.xcstrings, Sources/SettingsNavigation.swift, Sources/SettingsSearchAliases.swift, Packages/CmuxSettingsUI/Tests/*
Adds Feed row to Beta Features card (title, on/off subtitle, toggle); registers curated entry, adds feed keyword to section search, adds localized strings (en/ja), maps anchor ID for navigation, and updates search aliases and anchor-resolution tests.
Right Sidebar Mode Availability Gating
Sources/RightSidebarMode+Availability.swift
Threads feedEnabled into availableModes(...) / isAvailable(...) and gates .feed on the flag while keeping other modes unchanged.
Right Sidebar Panel Runtime Integration
Sources/RightSidebarPanelView.swift
Adds @AppStorage feedEnabled, supplies it to availableModes, and refreshes mode availability/focus when toggled.
Command Palette Integration
Sources/CommandPalette/CommandPaletteSettingsToggle.swift
Registers a Command Palette toggle descriptor for betaFeatures.feed with localized title, keywords, default, and persistence key.
Mode Persistence and Availability Functional Tests
cmuxTests/FileExplorerStateModePersistenceTests.swift
Tests updated to assert .feed persistence/clamping based on feed availability and to snapshot/restore feed/dock flags.
Command Palette Contribution Tests
cmuxTests/RightSidebarCommandPaletteTests.swift
Verifies Feed contribution is excluded when disabled and restores both feed and dock defaults in test helpers.
UI and Integration Tests
cmuxUITests/RightSidebarChromeHeightUITests.swift, cmuxUITests/SettingsSidebarBetaBehaviorUITests.swift
Enables Feed via launch arg in a UI test; adds Settings UI test asserting derived subtitle updates when toggling Feed and includes Feed in reset defaults.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related issues

  • manaflow-ai/cmux-dev-artifacts#1914: Changes add Feed flag and affect RightSidebarMode/Panel behavior which can influence the right-sidebar height assertions referenced in the issue.
  • manaflow-ai/cmux-dev-artifacts#1966: Enabling Feed in UI tests and altering availability logic can directly affect the failing RightSidebarChromeHeightUITests scenario.

Possibly related PRs

Suggested reviewers

  • Ari4ka

Poem

🐰 A toggle tucked behind a tiny gate,
The Feed waits patient — users choose its fate.
Beta lights blink, the sidebar learns its cue,
Dock and Feed aligned, hopping into view.
thumps foot 🥕


Caution

Pre-merge checks failed

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

  • Ignore

❌ Failed checks (1 error, 1 warning)

Check name Status Explanation Resolution
Cmux Full Internationalization ❌ Error Three new user-facing catalog entries (settings.betaFeatures.feed*) added to Localizable.xcstrings with only 2 locales (en, ja) instead of all 20 supported locales. Add translations for all 20 supported locales (ar, bs, da, de, es, fr, it, km, ko, nb, pl, pt-BR, ru, th, tr, uk, zh-Hans, zh-Hant) to the three feed-related string catalog entries.
Docstring Coverage ⚠️ Warning Docstring coverage is 11.11% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (16 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main change: gating Feed behind Beta Features with default off, mirroring Dock behavior.
Description check ✅ Passed The description comprehensively covers What, Why, How, Testing, and Decision rationale with sufficient detail for understanding the change.
Linked Issues check ✅ Passed All objectives from #5166 are met: runtime gating (feedEnabledKey, isFeedEnabled, availableModes), Settings UI (Feed toggle with subtitle), search/navigation registration, localization, and command palette support. Feed hooks intentionally left ungated as documented.
Out of Scope Changes check ✅ Passed All changes are tightly scoped to reintroducing Feed's beta gate while preserving focus bugfixes from #3854. No unrelated modifications or scope creep detected.
Cmux Swift Actor Isolation ✅ Passed All production code follows Swift 6 actor isolation rules: nonisolated methods for UserDefaults access, @MainActor on UI views, pure value types properly marked, no violations introduced.
Cmux Swift Blocking Runtime ✅ Passed PR introduces no blocking synchronization. New code uses @AppStorage and onChange (non-blocking), UserDefaults.bool reads, and parameter passing. Pre-existing NSLock is unmodified.
Cmux No Hacky Sleeps ✅ Passed PR contains only Swift files and xcstrings (localization) data. The check applies only to non-Swift production runtime code (TypeScript, JavaScript, shell, build scripts), which are not modified here.
Cmux Algorithmic Complexity ✅ Passed PR filters only a tiny fixed-size 5-element enum (RightSidebarMode), an explicit bound meeting the rules' exception; no algorithmic complexity violations.
Cmux Swift Concurrency ✅ Passed PR introduces no legacy async patterns: uses @AppStorage, synchronous helpers, standard SwiftUI property wrappers, and no DispatchQueue.global(), fire-and-forget Tasks, or completion handlers.
Cmux Swift @Concurrent ✅ Passed All nonisolated annotations are correctly applied to pure synchronous helper functions. No async, @concurrent violations, or actor-isolation issues found in the PR.
Cmux Swift File And Package Boundaries ✅ Passed Small focused additions (+2-11 lines) to existing files; no new oversized files; single responsibilities; feed logic mirrors Dock in WorkspaceRuntimeSettings; UI in packages.
Cmux Swift Logging ✅ Passed No Swift logging violations detected. All 10 modified production files contain zero print, debugPrint, dump, or NSLog statements, and no ad hoc file logging.
Cmux User-Facing Error Privacy ✅ Passed User-facing strings comply with privacy rules: no vendor names, internal details, credentials, or raw error messages exposed in production code.
Cmux Swiftui State Layout ✅ Passed New state uses @Observable DefaultsValueModel with @State and @AppStorage patterns that mirror existing dock feature implementation with no violations.
Cmux Architecture Rethink ✅ Passed Straightforward feature flag mirroring Dock: single UserDefaults source, standard SwiftUI onChange, no timing repairs, no duplicate owners or split lifecycle.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed This PR adds a beta feature via existing UI views and settings entries. No new NSWindow, NSPanel, NSWindowController, Window, or WindowGroup are created.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch austin/issue-5166-feed-beta

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 and usage tips.

@greptile-apps

greptile-apps Bot commented Jun 2, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR reinstates the beta gate for the Feed right-sidebar mode, making it opt-in (default off) to match Dock's existing gating under Settings → Beta Features. The change is purely UI/settings-layer: feed hooks remain installed and are not affected.

  • Runtime gating: adds feedEnabledKey/isFeedEnabled(defaults:) in RightSidebarBetaFeatureSettings, threads feedEnabled through RightSidebarMode+Availability, and reads it via @AppStorage in RightSidebarPanelView — identical pattern to dockEnabled.
  • Settings surface: adds rightSidebarFeed catalog key, a feedRow toggle in BetaFeaturesSection, search-index/alias registrations in SettingsNavigation/SettingsSearchAliases/CuratedSettingEntry+Default, a command-palette toggle, and en + ja xcstrings entries for all three new user-facing strings.
  • Tests: unit tests updated for default-off mode clamping and command-palette count; UI tests add a full subtitle round-trip test for Feed and re-enable the chrome-height test via a launch argument.

Confidence Score: 5/5

Safe to merge — all changes are additive UI/settings gating that mirrors an already-proven pattern; no data, hooks, or auth paths are touched.

The change is a faithful, symmetrical replication of the Dock beta gate. Every production callsite (availability filter, @AppStorage observer, settings UI, command palette, search index, xcstrings) is updated consistently, and the existing Dock path provides a working template. Localization is complete for both supported locales. Tests cover the new default-off behavior and the settings subtitle round-trip. No production logic is removed or altered beyond the feed availability predicate.

No files require special attention.

Important Files Changed

Filename Overview
Sources/App/WorkspaceRuntimeSettings.swift Adds feedEnabledKey, defaultFeedEnabled, and isFeedEnabled(defaults:) — exact mirror of the existing Dock members. No issues.
Sources/RightSidebarMode+Availability.swift Threads feedEnabled through availableModes/isAvailable, gating .feed mode on the new flag. Correct symmetry with the dockEnabled path.
Sources/RightSidebarPanelView.swift Adds @AppStorage feedEnabled, wires it into availableModes, and hooks .onChange to refreshModeAvailabilityAndFocusIfNeeded — identical pattern to dockEnabled. No issues.
Packages/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BetaFeaturesSection.swift Adds feedRow using @observable DefaultsValueModel, toggling localized on/off subtitles. Consistent with dock and extensions rows.
Resources/Localizable.xcstrings Adds settings.betaFeatures.feed, .subtitleOff, and .subtitleOn with both en and ja translations — complete locale coverage matching the dock entries.
Sources/CommandPalette/CommandPaletteSettingsToggle.swift Inserts betaFeatures.feed toggle command before the dock entry using RightSidebarBetaFeatureSettings constants. Consistent with dock registration.
Sources/SettingsNavigation.swift Registers the feed search-index entry and rightSidebar.beta.feed.enabled → settings path anchor, mirroring dock.
Sources/SettingsSearchAliases.swift Adds betaFeatures:feed alias entry and prepends 'feed' to the betaFeatures section alias string. Search alias strings correctly use defaultValue (consistent with all other aliases).
cmuxTests/FileExplorerStateModePersistenceTests.swift Splits old test into disabled-clamps-to-files and enabled-survives cases; adds feedEnabledKey save/restore. Correct coverage.
cmuxTests/RightSidebarCommandPaletteTests.swift Updates default-mode count from 4 to 3 (feed now excluded by default), adds feedEnabled save/restore. Assertions match the new gating logic.
cmuxUITests/RightSidebarChromeHeightUITests.swift Re-enables the feed secondary bar UI test by adding the -rightSidebar.beta.feed.enabled YES launch argument.
cmuxUITests/SettingsSidebarBetaBehaviorUITests.swift Adds testBetaFeedToggleDrivesDerivedSubtitle mirroring the existing dock toggle test; round-trips the subtitle binding correctly.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[UserDefaults key: rightSidebar.beta.feed.enabled] -->|AppStorage| B[RightSidebarPanelView feedEnabled]
    A -->|isFeedEnabled| C[RightSidebarMode+Availability]
    B --> C
    C -->|false| D[Mode switcher: Files, Find, Sessions]
    C -->|true| E[Mode switcher: Files, Find, Sessions, Feed]
    F[BetaFeaturesSection feedRow Toggle] -->|DefaultsValueModel.set| A
    G[CommandPalette betaFeatures.feed] -->|UserDefaults write| A
    H[cmux.json rightSidebar.beta.feed.enabled] -->|SettingCatalog| A
    B -->|onChange| I[refreshModeAvailabilityAndFocusIfNeeded]
Loading

Reviews (2): Last reviewed commit: "Merge remote-tracking branch 'origin/mai..." | Re-trigger Greptile

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
cmuxTests/FileExplorerStateModePersistenceTests.swift (1)

1-96: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick win

Convert to Swift Testing per coding guideline.

This file should be migrated to Swift Testing when adding or modifying tests. The coding guideline requires: "Use Swift Testing (import Testing, @Test, @Suite, #expect, #require) for all unit and integration tests" and "When touching existing XCTest test, convert in place."

The learning exemption for XCTest-based integration tests applies only to suites with tightly-coupled Unix-socket mock server harnesses. This file is a simple unit test suite using UserDefaults and does not meet the exemption criteria.

As per coding guidelines: convert XCTestCase → @Suite, test methods → @Test, XCTAssert → #expect, setUp/tearDown → init/deinit.

Conversion outline
import Testing
import Foundation

`@testable` import cmux_DEV // or cmux

`@Suite`
struct FileExplorerStateModePersistenceTests {
    private let modeKey = "rightSidebar.mode"
    private let feedEnabledKey = RightSidebarBetaFeatureSettings.feedEnabledKey
    private let dockEnabledKey = RightSidebarBetaFeatureSettings.dockEnabledKey

    init() {
        resetDefaults([modeKey, feedEnabledKey, dockEnabledKey])
    }

    deinit {
        resetDefaults([modeKey, feedEnabledKey, dockEnabledKey])
    }

    `@Test`
    func disabledFeedStoredModeFallsBackToFiles() {
        withSavedRightSidebarModeDefaults {
            let defaults = UserDefaults.standard
            defaults.set(RightSidebarMode.feed.rawValue, forKey: modeKey)
            defaults.set(false, forKey: feedEnabledKey)

            let state = FileExplorerState()

            `#expect`(state.mode == .files)
            `#expect`(defaults.string(forKey: modeKey) == RightSidebarMode.files.rawValue)
        }
    }

    // ... convert remaining tests similarly
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@cmuxTests/FileExplorerStateModePersistenceTests.swift` around lines 1 - 96,
Convert the XCTest-based suite FileExplorerStateModePersistenceTests to Swift
Testing: replace import XCTest with import Testing, change the test container
from class FileExplorerStateModePersistenceTests: XCTestCase to `@Suite` struct
FileExplorerStateModePersistenceTests, convert each test method (e.g.,
testDisabledFeedStoredModeFallsBackToFiles, testEnabledFeedStoredModeSurvives,
testModeSetterClampsUnavailableBetaModes,
testCLIArgumentNormalizerMapsVaultAndSessionsToSessions) to `@Test` functions,
replace XCTAssert* assertions with `#expect` expressions, move setUp/tearDown
logic (the withSavedRightSidebarModeDefaults helper and its restore) into
init/deinit (or a resetDefaults helper) to preserve state isolation, and ensure
`@testable` import selection remains (cmux_DEV / cmux).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@Packages/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BetaFeaturesSection.swift`:
- Around line 5-6: The three localization keys settings.betaFeatures.feed,
settings.betaFeatures.feed.subtitleOn, and
settings.betaFeatures.feed.subtitleOff are only present for en and ja; add
missing translations for every supported locale in the Localizable.xcstrings
catalog so the "Feed" beta label and its on/off subtitles appear in all locales.
Update the Localizable.xcstrings entries for those keys (same key names) in each
locale file, ensuring the translated strings are added and encoded correctly and
that the localization tool recognizes the new entries.

In `@Sources/SettingsSearchAliases.swift`:
- Line 15: Add the missing localization entries for the keys referenced in
Sources/SettingsSearchAliases.swift by updating Resources/Localizable.xcstrings:
add settings.search.alias.section.betaFeatures and
settings.search.alias.setting.betaFeatures.feed with complete translations for
the supported locales (en, ja), using the same English defaultValue text ("beta
experimental unstable preview feed dock right sidebar") for the en locale and
appropriate Japanese translations for ja; ensure the key names exactly match
those used in SettingsSearchAliases.swift so the localized(...) calls resolve to
translations instead of falling back to defaults.

---

Outside diff comments:
In `@cmuxTests/FileExplorerStateModePersistenceTests.swift`:
- Around line 1-96: Convert the XCTest-based suite
FileExplorerStateModePersistenceTests to Swift Testing: replace import XCTest
with import Testing, change the test container from class
FileExplorerStateModePersistenceTests: XCTestCase to `@Suite` struct
FileExplorerStateModePersistenceTests, convert each test method (e.g.,
testDisabledFeedStoredModeFallsBackToFiles, testEnabledFeedStoredModeSurvives,
testModeSetterClampsUnavailableBetaModes,
testCLIArgumentNormalizerMapsVaultAndSessionsToSessions) to `@Test` functions,
replace XCTAssert* assertions with `#expect` expressions, move setUp/tearDown
logic (the withSavedRightSidebarModeDefaults helper and its restore) into
init/deinit (or a resetDefaults helper) to preserve state isolation, and ensure
`@testable` import selection remains (cmux_DEV / cmux).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 017cee4f-84dc-4e28-88cd-e078e6bb7f67

📥 Commits

Reviewing files that changed from the base of the PR and between 9eece11 and 0804cdb.

📒 Files selected for processing (16)
  • Packages/CmuxSettings/Sources/CmuxSettings/Keys/BetaFeaturesCatalogSection.swift
  • Packages/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/CuratedSettingEntry+Default.swift
  • Packages/CmuxSettingsUI/Sources/CmuxSettingsUI/Navigation/SettingsSectionID.swift
  • Packages/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/BetaFeaturesSection.swift
  • Packages/CmuxSettingsUI/Tests/CmuxSettingsUITests/SettingsRowAnchorResolutionTests.swift
  • Resources/Localizable.xcstrings
  • Sources/App/WorkspaceRuntimeSettings.swift
  • Sources/CommandPalette/CommandPaletteSettingsToggle.swift
  • Sources/RightSidebarMode+Availability.swift
  • Sources/RightSidebarPanelView.swift
  • Sources/SettingsNavigation.swift
  • Sources/SettingsSearchAliases.swift
  • cmuxTests/FileExplorerStateModePersistenceTests.swift
  • cmuxTests/RightSidebarCommandPaletteTests.swift
  • cmuxUITests/RightSidebarChromeHeightUITests.swift
  • cmuxUITests/SettingsSidebarBetaBehaviorUITests.swift

Comment thread Sources/SettingsSearchAliases.swift

@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 16 files

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread Sources/SettingsSearchAliases.swift

This branch was successfully deployed

1 active deployment
Preview – cmux — 5688dc48 Deployed Jun 2, 2026 by vercel[bot]
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.

Gate Feed behind Beta Features (mirror Dock), instead of always-on

1 participant