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
+9
View File
@@ -11909,6 +11909,8 @@ shell_tool = false
#[test_case::test_case(Feature::Personality; "personality")]
#[test_case::test_case(Feature::GuardianThreadContext; "guardian thread context")]
#[test_case::test_case(Feature::Worktrees; "worktrees")]
#[test_case::test_case(Feature::RealtimeConversation; "realtime conversation")]
#[test_case::test_case(Feature::ShellZshFork; "shell zsh fork")]
#[test_case::test_case(Feature::UnifiedExecZshFork; "unified exec zsh fork")]
fn retired_feature_requirements_do_not_pin_configured_values(
@@ -11960,6 +11962,13 @@ fn retired_feature_requirements_do_not_pin_configured_values(
usize::from(feature != Feature::Personality),
),
);
if matches!(feature, Feature::Worktrees | Feature::RealtimeConversation) {
assert!(
warnings[0].contains(&format!("Ignoring removed `features` requirement `{key}`"))
);
assert!(warnings[0].contains("enterprise"));
assert!(warnings[0].contains("availability no longer depends on this feature flag"));
}
}
Ok(())
@@ -243,6 +243,15 @@ fn parse_feature_requirements(
if key == Feature::Personality.key() {
continue;
}
if key == Feature::Worktrees.key() || key == Feature::RealtimeConversation.key() {
push_feature_requirement_warning(
&mut startup_warnings,
format!(
"Ignoring removed `features` requirement `{key}` from {source}; availability no longer depends on this feature flag."
),
);
continue;
}
if matches!(key.as_str(), "shell_zsh_fork" | "unified_exec_zsh_fork") {
push_feature_requirement_warning(
&mut startup_warnings,