Retire worktree and voice feature flags (#54175)

## What changed

- Remove feature-flag checks from managed worktree creation and repository-aware session discovery, while retaining local workspace and trust checks.
- Make TUI voice availability follow platform support instead of `features.realtime_conversation`.
- Ignore `features.worktrees` and `features.realtime_conversation` configuration overrides, warn when managed requirements reference them, and hide both flags from `/experimental`, including catalogs from older servers.

## Testing

Add coverage for ignored configuration overrides and managed requirements, and update session filtering, worktree grouping, and experimental feature discovery tests for the retired flags.

GitOrigin-RevId: 1d64e890e6e2f8a78926a9ea163126c0890b068e
This commit is contained in:
Benjamin Carlsson
2026-10-15 03:48:33 +00:00
committed by copyberry
parent 160b2b1ef6
commit bb64b894fd
38 changed files with 166 additions and 461 deletions
+5 -5
View File
@@ -214,7 +214,7 @@ pub enum Feature {
NetworkProxy,
/// Mask credentials and inject them through an already enabled network proxy.
CredentialMasking,
/// Enable managed worktree creation and repository-aware sessions.
/// Removed compatibility flag. Managed worktrees and repository-aware sessions are always available.
Worktrees,
/// Respect host system proxy settings for Codex-owned network clients.
RespectSystemProxy,
@@ -416,7 +416,7 @@ pub enum Feature {
UltrafastMode,
/// Enable explicitly requested model changes for later step captures.
StepModelSwitching,
/// Enable voice conversations in the TUI.
/// Removed compatibility flag. TUI voice availability follows platform support.
RealtimeConversation,
/// Prevent idle system sleep while a turn is actively running.
PreventIdleSleep,
@@ -667,7 +667,7 @@ impl Features {
self.record_legacy_usage_force("features.transcript_v2", Feature::TranscriptV2);
continue;
}
"tui_app_server" => {
"tui_app_server" | "worktrees" | "realtime_conversation" => {
continue;
}
"undo" => {
@@ -1453,7 +1453,7 @@ pub const FEATURES: &[FeatureSpec] = &[
FeatureSpec {
id: Feature::Worktrees,
key: "worktrees",
stage: Stage::Stable,
stage: Stage::Removed,
default_enabled: true,
},
FeatureSpec {
@@ -1999,7 +1999,7 @@ pub const FEATURES: &[FeatureSpec] = &[
FeatureSpec {
id: Feature::RealtimeConversation,
key: "realtime_conversation",
stage: Stage::Stable,
stage: Stage::Removed,
default_enabled: true,
},
FeatureSpec {
+19
View File
@@ -901,3 +901,22 @@ code_mode = true
message
);
}
#[test]
fn retired_worktree_and_voice_config_overrides_are_ignored() {
for enabled in [false, true] {
let features_toml = FeaturesToml::from(BTreeMap::from([
("worktrees".to_string(), enabled),
("realtime_conversation".to_string(), enabled),
]));
let features = Features::from_sources(
FeatureConfigSource {
features: Some(&features_toml),
..Default::default()
},
FeatureConfigSource::default(),
FeatureOverrides::default(),
);
assert_eq!(features, Features::with_defaults());
}
}