fix: align pod feature flag naming

This commit is contained in:
Keisuke Hirata 2026-06-09 21:21:40 +09:00
parent f0f6cc92d8
commit 2fd37afb9e
No known key found for this signature in database
12 changed files with 23 additions and 30 deletions

View File

@ -33,7 +33,7 @@ return function(opts)
task = { enabled = true }, task = { enabled = true },
memory = { enabled = true }, memory = { enabled = true },
web = { enabled = true }, web = { enabled = true },
pod_management = { enabled = false }, pods = { enabled = false },
ticket = { enabled = false, access = "lifecycle" }, ticket = { enabled = false, access = "lifecycle" },
ticket_orchestration = { enabled = false }, ticket_orchestration = { enabled = false },
}, },

View File

@ -6,10 +6,10 @@ return base {
description = "Coder role profile: GPT-5.5 with bundled default behavior", description = "Coder role profile: GPT-5.5 with bundled default behavior",
model_ref = "codex-oauth/gpt-5.5", model_ref = "codex-oauth/gpt-5.5",
feature = { feature = {
task = { enabled = true }, task = { enabled = false },
memory = { enabled = true }, memory = { enabled = true },
web = { enabled = true }, web = { enabled = true },
pod_management = { enabled = false }, pods = { enabled = false },
ticket = { enabled = false, access = "lifecycle" }, ticket = { enabled = false, access = "lifecycle" },
ticket_orchestration = { enabled = false }, ticket_orchestration = { enabled = false },
}, },

View File

@ -8,7 +8,7 @@ return base {
task = { enabled = true }, task = { enabled = true },
memory = { enabled = true }, memory = { enabled = true },
web = { enabled = true }, web = { enabled = true },
pod_management = { enabled = false }, pods = { enabled = false },
ticket = { enabled = false, access = "lifecycle" }, ticket = { enabled = false, access = "lifecycle" },
ticket_orchestration = { enabled = false }, ticket_orchestration = { enabled = false },
}, },

View File

@ -8,7 +8,7 @@ return base {
task = { enabled = true }, task = { enabled = true },
memory = { enabled = true }, memory = { enabled = true },
web = { enabled = true }, web = { enabled = true },
pod_management = { enabled = false }, pods = { enabled = false },
ticket = { enabled = true, access = "lifecycle" }, ticket = { enabled = true, access = "lifecycle" },
ticket_orchestration = { enabled = false }, ticket_orchestration = { enabled = false },
}, },

View File

@ -9,7 +9,7 @@ return base {
task = { enabled = true }, task = { enabled = true },
memory = { enabled = true }, memory = { enabled = true },
web = { enabled = true }, web = { enabled = true },
pod_management = { enabled = true }, pods = { enabled = true },
ticket = { enabled = true, access = "lifecycle" }, ticket = { enabled = true, access = "lifecycle" },
ticket_orchestration = { enabled = true }, ticket_orchestration = { enabled = true },
}, },

View File

@ -8,7 +8,7 @@ return base {
task = { enabled = true }, task = { enabled = true },
memory = { enabled = true }, memory = { enabled = true },
web = { enabled = true }, web = { enabled = true },
pod_management = { enabled = false }, pods = { enabled = false },
ticket = { enabled = false, access = "lifecycle" }, ticket = { enabled = false, access = "lifecycle" },
ticket_orchestration = { enabled = false }, ticket_orchestration = { enabled = false },
}, },

View File

@ -74,7 +74,7 @@ pub struct FeatureConfigPartial {
#[serde(default)] #[serde(default)]
pub web: Option<FeatureFlagConfigPartial>, pub web: Option<FeatureFlagConfigPartial>,
#[serde(default)] #[serde(default)]
pub pod_management: Option<FeatureFlagConfigPartial>, pub pods: Option<FeatureFlagConfigPartial>,
#[serde(default)] #[serde(default)]
pub ticket: Option<TicketFeatureConfigPartial>, pub ticket: Option<TicketFeatureConfigPartial>,
#[serde(default)] #[serde(default)]
@ -87,11 +87,7 @@ impl FeatureConfigPartial {
task: merge_option(self.task, other.task, FeatureFlagConfigPartial::merge), task: merge_option(self.task, other.task, FeatureFlagConfigPartial::merge),
memory: merge_option(self.memory, other.memory, FeatureFlagConfigPartial::merge), memory: merge_option(self.memory, other.memory, FeatureFlagConfigPartial::merge),
web: merge_option(self.web, other.web, FeatureFlagConfigPartial::merge), web: merge_option(self.web, other.web, FeatureFlagConfigPartial::merge),
pod_management: merge_option( pods: merge_option(self.pods, other.pods, FeatureFlagConfigPartial::merge),
self.pod_management,
other.pod_management,
FeatureFlagConfigPartial::merge,
),
ticket: merge_option(self.ticket, other.ticket, TicketFeatureConfigPartial::merge), ticket: merge_option(self.ticket, other.ticket, TicketFeatureConfigPartial::merge),
ticket_orchestration: merge_option( ticket_orchestration: merge_option(
self.ticket_orchestration, self.ticket_orchestration,
@ -142,10 +138,7 @@ impl From<FeatureConfigPartial> for FeatureConfig {
.map(FeatureFlagConfig::from) .map(FeatureFlagConfig::from)
.unwrap_or_default(), .unwrap_or_default(),
web: value.web.map(FeatureFlagConfig::from).unwrap_or_default(), web: value.web.map(FeatureFlagConfig::from).unwrap_or_default(),
pod_management: value pods: value.pods.map(FeatureFlagConfig::from).unwrap_or_default(),
.pod_management
.map(FeatureFlagConfig::from)
.unwrap_or_default(),
ticket: value ticket: value
.ticket .ticket
.map(TicketFeatureConfig::from) .map(TicketFeatureConfig::from)
@ -198,7 +191,7 @@ impl From<FeatureConfig> for FeatureConfigPartial {
task: Some(value.task.into()), task: Some(value.task.into()),
memory: Some(value.memory.into()), memory: Some(value.memory.into()),
web: Some(value.web.into()), web: Some(value.web.into()),
pod_management: Some(value.pod_management.into()), pods: Some(value.pods.into()),
ticket: Some(value.ticket.into()), ticket: Some(value.ticket.into()),
ticket_orchestration: Some(value.ticket_orchestration.into()), ticket_orchestration: Some(value.ticket_orchestration.into()),
} }
@ -1434,7 +1427,7 @@ worker_max_turns = 7
assert!(!manifest.feature.task.enabled); assert!(!manifest.feature.task.enabled);
assert!(!manifest.feature.memory.enabled); assert!(!manifest.feature.memory.enabled);
assert!(!manifest.feature.web.enabled); assert!(!manifest.feature.web.enabled);
assert!(!manifest.feature.pod_management.enabled); assert!(!manifest.feature.pods.enabled);
assert!(!manifest.feature.ticket.enabled); assert!(!manifest.feature.ticket.enabled);
assert!(!manifest.feature.ticket_orchestration.enabled); assert!(!manifest.feature.ticket_orchestration.enabled);
} }
@ -1544,7 +1537,7 @@ enabled = true
TicketFeatureAccessConfig::Lifecycle TicketFeatureAccessConfig::Lifecycle
); );
assert!(manifest.feature.web.enabled); assert!(manifest.feature.web.enabled);
assert!(!manifest.feature.pod_management.enabled); assert!(!manifest.feature.pods.enabled);
} }
#[test] #[test]

View File

@ -97,7 +97,7 @@ pub struct FeatureConfig {
#[serde(default)] #[serde(default)]
pub web: FeatureFlagConfig, pub web: FeatureFlagConfig,
#[serde(default)] #[serde(default)]
pub pod_management: FeatureFlagConfig, pub pods: FeatureFlagConfig,
#[serde(default)] #[serde(default)]
pub ticket: TicketFeatureConfig, pub ticket: TicketFeatureConfig,
#[serde(default)] #[serde(default)]
@ -110,7 +110,7 @@ impl Default for FeatureConfig {
task: FeatureFlagConfig::disabled(), task: FeatureFlagConfig::disabled(),
memory: FeatureFlagConfig::disabled(), memory: FeatureFlagConfig::disabled(),
web: FeatureFlagConfig::disabled(), web: FeatureFlagConfig::disabled(),
pod_management: FeatureFlagConfig::disabled(), pods: FeatureFlagConfig::disabled(),
ticket: TicketFeatureConfig::default(), ticket: TicketFeatureConfig::default(),
ticket_orchestration: FeatureFlagConfig::disabled(), ticket_orchestration: FeatureFlagConfig::disabled(),
} }

View File

@ -1480,7 +1480,7 @@ return profile {
task = { enabled = true }, task = { enabled = true },
memory = { enabled = false }, memory = { enabled = false },
web = { enabled = true }, web = { enabled = true },
pod_management = { enabled = true }, pods = { enabled = true },
ticket = { enabled = true, access = "read_only" }, ticket = { enabled = true, access = "read_only" },
ticket_orchestration = { enabled = false }, ticket_orchestration = { enabled = false },
}, },
@ -1500,7 +1500,7 @@ return profile {
assert!(resolved.manifest.feature.task.enabled); assert!(resolved.manifest.feature.task.enabled);
assert!(!resolved.manifest.feature.memory.enabled); assert!(!resolved.manifest.feature.memory.enabled);
assert!(resolved.manifest.feature.web.enabled); assert!(resolved.manifest.feature.web.enabled);
assert!(resolved.manifest.feature.pod_management.enabled); assert!(resolved.manifest.feature.pods.enabled);
assert!(resolved.manifest.feature.ticket.enabled); assert!(resolved.manifest.feature.ticket.enabled);
assert_eq!( assert_eq!(
resolved.manifest.feature.ticket.access, resolved.manifest.feature.ticket.access,

View File

@ -595,11 +595,11 @@ where
// loop's `PodEvent` handler). Expose them only behind the explicit // loop's `PodEvent` handler). Expose them only behind the explicit
// profile feature and require delegation authority up front so enabling // profile feature and require delegation authority up front so enabling
// the surface cannot imply broad child scope by accident. // the surface cannot imply broad child scope by accident.
if feature_config.pod_management.enabled { if feature_config.pods.enabled {
if spawner_manifest.delegation_scope.allow.is_empty() { if spawner_manifest.delegation_scope.allow.is_empty() {
return Err(std::io::Error::new( return Err(std::io::Error::new(
std::io::ErrorKind::InvalidInput, std::io::ErrorKind::InvalidInput,
"[feature.pod_management].enabled = true requires non-empty [[delegation_scope.allow]]", "[feature.pods].enabled = true requires non-empty [[delegation_scope.allow]]",
)); ));
} }
worker.register_tool(spawn_pod_tool( worker.register_tool(spawn_pod_tool(

View File

@ -304,7 +304,7 @@ permission = "write"
} }
#[tokio::test] #[tokio::test]
async fn pod_management_feature_requires_delegation_scope() { async fn pods_feature_requires_delegation_scope() {
let manifest = r#" let manifest = r#"
[pod] [pod]
name = "pod-management-feature-test" name = "pod-management-feature-test"
@ -317,7 +317,7 @@ model_id = "test-model"
[worker] [worker]
max_tokens = 100 max_tokens = 100
[feature.pod_management] [feature.pods]
enabled = true enabled = true
[[scope.allow]] [[scope.allow]]
@ -331,7 +331,7 @@ permission = "write"
assert!(result.is_err()); assert!(result.is_err());
let message = result.err().unwrap().to_string(); let message = result.err().unwrap().to_string();
assert!( assert!(
message.contains("[feature.pod_management].enabled = true requires non-empty"), message.contains("[feature.pods].enabled = true requires non-empty"),
"unexpected error: {message}" "unexpected error: {message}"
); );
} }

View File

@ -30,7 +30,7 @@ return profile {
task = { enabled = true }, task = { enabled = true },
memory = { enabled = true }, memory = { enabled = true },
web = { enabled = true }, web = { enabled = true },
pod_management = { enabled = false }, pods = { enabled = false },
ticket = { enabled = false, access = "lifecycle" }, ticket = { enabled = false, access = "lifecycle" },
ticket_orchestration = { enabled = false }, ticket_orchestration = { enabled = false },
}, },